text:
Rangers Recall Willie Calhoun, Place Elvis Andrus On Injured List
By Steve Adams | May 15, 2019 at 3:59pm CDT
The Rangers announced that they've recalled outfielder/designated hitter Willie Calhoun from Triple-A Nashville and placed shortstop Elvis Andrus on the 10-day injured list due to a hamstring strain. Texas also optioned righty Wei-Chieh Huang to Nashville and recalled left-hander Jeffrey Springs.
Calhoun, of course, isn't going to step into shortstop duties in Andrus' absence. He's in the lineup at designated hitter tonight, while veteran utilityman Logan Forsythe is getting the first look at short in place of Andrus. Calhoun figures to split his time between left field and designated hitter; he played second base earlier in his minor league career but has logged just three games there in 2019 and didn't play the position at all in 2018.
It'll be Calhoun's third straight season of at least partial duty with the Rangers since being acquired as the centerpiece of the trade that sent Yu Darvish to the Dodgers. At the time, Calhoun was considered to be one of the game's premier minor league hitters but lacked a defensive home. While the questions about his glovework haven't subsided, his 2018 struggles at the plate in the Majors (.222/.269/.333) and a decrease in his production in Triple-A (.294/.351/.431) caused his stock to slip a bit.
Still just 24 years of age, however, Calhoun has begun to rebuild his credentials with a robust .304/.416/.557 start to the season in Nashville. After hitting just nine home runs in 470 Triple-A plate appearances in 2018, he's already slugged eight long balls in 138 trips to the plate so far in 2019. He's still viewed as a potential long-term piece for the Rangers, and Delino DeShields' recent demotion to the minors has pushed Joey Gallo from left field into center field, thus creating some room for Calhoun to join the roster. So long as Calhoun hits, today's promotion could prove to be a move with long-term ramifications.
As for Andrus, it's not yet clear just how much time he's expected to miss, but any trip to the injured list is critical for a player with an opt-out clause at season's end. The 30-year-old had gotten out to a terrific .325/.373/.510 start to the season. Through 169 plate appearances so far, Andrus has tallied six home runs, nine doubles, a triple and eight stolen bases while striking out at just a 16.6 percent clip. He'll have the ability to opt out of the final three years and $43MM remaining on his contract after the season, though given the fact that he'd receive a qualifying offer in that scenario and would be entering his age-31 season in 2020, exercising that provision could be a long shot.
Elvis Andrus Texas Rangers Willie Calhoun
Hunter Pence Makes Rangers' Roster; Willie Calhoun Optioned To Triple-A
By Steve Adams | March 21, 2019 at 1:14pm CDT
The Rangers have informed veteran outfielder Hunter Pence that he's made the Opening Day roster, tweets MLB.com's T.R. Sullivan. Young outfielder Willie Calhoun, meanwhile, will be optioned to Triple-A Nashville. Sullivan also adds that Rule 5 pick Jordan Romano has been informed he will not make the roster.
While many fans may have hoped that Calhoun would seize the outfield opportunity in front of him and realize the offensive potential that long provided him with top prospect status, Pence emphatically outplayed him this spring. The pair leads the Rangers in spring at-bats, but while Pence has impressed with a .356/.431/.667 batting line, Calhoun has mustered just a .217/.296/.261 output.
Beyond the raw spring stats (which should always be taken with a grain of salt), the Rangers simply don't have everyday at-bats for Calhoun in the big leagues right now. Joey Gallo, Delino DeShields Jr. and Nomar Mazara are lined up in the outfield, with Shin-So Choo slotted in for regular DH work. At this stage of their respective careers, Pence is better-suited for a bench role, as Texas surely still wants Calhoun to log regular plate appearances to continue his development.
Pence, who spent the offseason making significant alterations to his swing, will seek to reestablish himself as a credible big league outfielder on the heels of that excellent spring. The three-time All-Star finished up a five-year, $90MM contract with the Giants last season and managed just a .249/.297/.368 slash over the final two seasons of that contract.
The 24-year-old Calhoun, acquired as the centerpiece of the trade that sent Yu Darvish to the Dodgers in 2017, saw his bat take a step back both in Triple-A and in the Majors in 2018. After hitting a combined .300/.355/.572 between the Triple-A affiliates for Texas and L.A. in '17, Calhoun hit a solid but diminished .294/.351/.431 in Triple-A with the Rangers this past season. In 108 big league plate appearances, he hit .222/.269/.333 with a pair of home runs. Calhoun's glovework has been questioned in scouting reports over the years, but he'll also look to get his swing back in track in his latest minor league assignment. He has an option remaining even beyond the current season, so the Rangers still have ample time to help him tap into his upside.
Romano, 26 in a month, was selected out of the Blue Jays' organization in this year's Rule 5 draft and pitched 9 1/3 innings with the Rangers this spring. He allowed four runs on seven hits and five walks with six strikeouts in that time. Romano logged a 4.11 ERA with 8.1 K/9 and 2.8 BB/9 in 142 1/3 innings last year (nearly all at the Double-A level). He'll need to be placed on the waivers and offered back to the Blue Jays if he clears.
Hunter Pence Jordan Romano Texas Rangers Willie Calhoun
Rangers Notes: Calhoun, Miller, Pitching Staff
By Connor Byrne | March 16, 2019 at 10:01pm CDT
Here's the latest on the Rangers:
Outfielder Willie Calhoun rededicated himself during the winter after a subpar 2018 campaign, but it's up in the air whether his hard work will yield a season-opening roster spot. As Jeff Wilson of the Star Telegram points out, fellow outfielders Joey Gallo, Nomar Mazara, Delino DeShields and Shin-Soo Choo are locks to make the team, while minor league pickup Hunter Pence will likely earn the last spot on the strength of a quality spring. As such, the 24-year-old Calhoun could be ticketed for a demotion to Triple-A Nashville, where he'd receive everyday playing time. Calhoun admitted "it would be really frustrating" to miss out on a roster spot in Texas, adding: "I have so many games played at Triple A. I feel like I'd go there just to get at-bats, but at that point, there's no getting better for me at Triple A." The 24-year-old walked back those comments, acknowledging there's more he could work on at the minors' highest level, per Wilson. Calhoun batted a so-so .294/.351/.431 in 470 PAs there last year, and fared much worse during a 108-PA audition in the majors (.222/.269/.333). His bottom-line productive hasn't been any better this spring, albeit over a mere 40 exhibition ABs, with a .200/.298/.250 line. Those numbers notwithstanding, Calhoun has gone "above and beyond," according to manager Chris Woodward, who said "it would be crushing" to tell the player he's going back to the minors.
Woodward also discussed the Rangers' pitching plans with reporters, including TR Sullivan of MLB.com and Evan Grant of the Dallas Morning News. Of note, using an opener won't be in the cards for Texas, in part because Woodward believes the strategy wouldn't mesh with Tommy John surgery returnees Shelby Miller, Edinson Volquez and Drew Smyly. "I wouldn't do it from a health standpoint," Woodward said. "I don't want to put Shelby Miller in that kind of situation. I don't know if he can warm up in the bullpen. They have a long toss routine. You can't long toss in the bullpen. I want them to do what they normally do, and it's not fair for them to put them in that situation." Miller's likely to begin the season on an 80- to 85-pitch count, Grant reports. Given the uncertainty surrounding Miller, Volquez and Smyly, who are joining Mike Minor and Lance Lynn in the Rangers' rotation, the club could opt for an eight-man bullpen, Sullivan relays.
Texas' 40-man roster is at capacity, but if the club needs to create an opening, it's possible it'll designate right-hander Connor Sadzeck for assignment, Wilson suggests. A member of the Rangers since they selected him in the 11th round of the 2011 draft, Sadzeck was the team's 15th-ranked prospect at Baseball America as recently as 2016. Sadzeck struggled in the minors during the ensuing season, however, and didn't reach the majors for the first time until last year. He then allowed only a single run in 9 1/3 innings, but with seven strikeouts against 11 walks, that success was largely smoke and mirrors. The hard-throwing 27-year-old was solid in his initial taste of Triple-A action last season, though, as he logged 10.18 K/9 versus 3.79 BB/9 and posted a 4.03 ERA/3.59 FIP.
Connor Sadzeck Texas Rangers Willie Calhoun
AL Notes: Castellanos, Stroman, Rangers, Calhoun, Royals
By Connor Byrne | February 17, 2019 at 10:10am CDT
The agent for Tigers outfielder Nicholas Castellanos said in January his client would prefer a trade, but the slugger met with the media Sunday and told reporters, including Chris McCosky of the Detroit News, he'd be willing to discuss a long-term contract with the club. The rebuilding Tigers made a legitimate effort to move Castellanos in the offseason, yet they were unable to find a taker because general manager Al Avila suggested there was no real market for the 26-year-old. Although Castellanos has been an above-average offensive producer in three straight seasons, especially during a career-best 2018, he has been a liability at third base and in the outfield. Those defensive limitations have likely kept teams from fervently pursuing him via trade. They could also lead to a disappointing market for Castellanos should he become a free agent next winter, particularly if the Tigers retain him through the season and issue him a qualifying offer thereafter. Castellanos expressed some nervousness about the state of free agency Sunday, pointing to the still-unemployed statuses of Bryce Harper and Manny Machado and Braves corner outfielder Nick Markakis' inability to secure a high-paying multiyear deal as causes for concern, Evan Woodbery of MLive.com writes.
More from the AL…
Just as Castellanos was popular in offseason trade rumors, so was Blue Jays starter Marcus Stroman. The right-hander said Sunday he wants to stay in Toronto for the long haul, but the team hasn't offered him an extension, Shi Davidi of Sportsnet tweets. Stroman expressed unhappiness about the Blue Jays' lack of offers, and he also criticized them for not signing more veterans during the offseason, John Lott of The Athletic reports. The Jays only added three free agents (Freddy Galvis, Matt Shoemaker and David Phelps) on major league contracts during the winter, but it was an unsurprising approach from a retooling team that probably won't push for a playoff spot in 2019. Combining the Jays' current status as non-contenders with the 27-year-old Stroman's waning team control (two seasons left) and his unhappiness with their front office, he could frequent trade rumors again during the summer.
Rangers outfielder Willie Calhoun entered last year, his first full season with the organization, as Baseball America's 36th-ranked prospect. Despite the hype, Calhoun fell flat at the Triple-A level and in the majors, leading GM Jon Daniels and then-manager Jeff Banister to tell him he needed to change his work ethic and lifestyle in the offseason, per Levi Weaver of The Athletic (subscription required). The meeting "humbled" Calhoun, who's treating last season as a wake-up call and has since lost 24 pounds (the Rangers requested he drop 20). Calhoun admitted to Weaver he was "stubborn coming up with the Dodgers," who traded him to the Rangers for Yu Darvish in 2017, as well as during his first year and a half in the Texas organization. Now in better physical and mental states, Calhoun is attempting to win a season-opening spot with the Rangers, but as Jeff Wilson of the Star-Telegram notes, he'll have to beat out veteran pickup Hunter Pence.
Royals left-hander Eric Skoglund discussed his 80-game suspension with Jeffrey Flanagan of MLB.com and other reporters Saturday, claiming he's unsure how he tested positive for Selective Androgen Receptor Modulators S-22 (Ostarine) and LGD-4033 (Ligandrol). "I didn't change anything in my offseason that I did in any other. The only thing I did was eat cleaner," said Skoglund, who added that "something got in my body without me knowing" and insisted he's not one to "cheat the game." Skoglund did not appeal the ban, though, as he figured it wasn't a fight he could win.
Detroit Tigers Eric Skoglund Kansas City Royals Marcus Stroman Nick Castellanos Texas Rangers Toronto Blue Jays Willie Calhoun
Agency Changes: Gurriels, Calhoun
By Jeff Todd | February 14, 2019 at 9:23pm CDT
Here are the latest agency changes from around the game. As always, you can find updated representation information in MLBTR's Agency Database.
Both of the Gurriel brothers — Yuli Gurriel of the Astros and Lourdes Gurriel Jr. of the Blue Jays — have hired Magnus Sports, according to Shi Davidi of Sportsnet.ca (via Twitter). The elder Gurriel is closest to free agency, though he still has two full seasons to go on his five-year contract with the Houston organization. He's also already 34 years of age. His little brother is still just 25 years old and cracked the bigs for the first time last year, turning in a promising initial showing with the Jays. His contract takes him through the 2023 campaign, with at least one year of arbitration eligibility remaining thereafter.
Meanwhile, Rangers power-hitting prospect Willie Calhoun has hired MVP Sports Group, per Robert Murray of The Athletic (Twitter link). The 24-year-old has seen brief tastes of the majors in each of the past two seasons but has yet to earn a full showcase at the game's highest level. He's seen as a high-end talent with the bat who still needs to iron things out defensively. It seems Calhoun will ultimately be given a shot in left field, but he'll need to bounce back from a 2018 power outage (11 home runs in 578 total plate appearances) in order to force his way back onto the active roster.
Houston Astros Lourdes Gourriel Texas Rangers Toronto Blue Jays Willie Calhoun Yuli Gurriel
AL West Notes: Felix, Lowrie, Cahill, Skaggs, Calhoun, Listach
By Jeff Todd | September 13, 2018 at 7:25pm CDT
Mariners fans in particular will want to read up on the club's faded ace, Felix Hernandez, in this piece from Scott Miller of Bleacher Report. The veteran hurler has taken his downfall hard, but he's still working to rediscover the magic that once made him one of the game's very best pitchers. Of course, his lost fastball velocity means the odds are long; it's still in full retreat despite the fact that Hernandez says his "body feels good" after dealing with injuries over the past two seasons. It's a well-conceived and well-paced story — at once deep and, refreshingly, not unnecessarily lengthy — with some notable observations from current and former M's personnel and others close to Hernandez.
More from the AL West:
Athletics second baseman Jed Lowrie acknowledged today in an appearance on MLB Network Radio on Sirius XM (Twitter link) that he has had some contact with the club about staying on past the present season. The team's interest in maintaining the relationship has been known for some time, but it's interesting nevertheless to hear Lowrie address the matter. To this point, Lowrie says, talks haven't moved past an initial expression of interest. But he says he likes it in Oakland and believes he fits the club well, so it certainly sounds as if the good vibes flow in both directions. No doubt that's due in some part to the immense success both player and team have found this year. It's a second-straight eyebrow-raising season at the plate for Lowrie, who owns a healthy .276/.360/.455 slash since the start of the 2017 campaign. He has set himself up for an interesting trip onto the open market — if nothing comes together first with the A's.
In yet more unwelcome health news for the Athletics, righty Trevor Cahill has gone down with a rhomboid muscle strain, as Susan Slusser of the San Francisco Chronicle reports. The upper-back ailment comes at an uncomfortable proximity to the postseason, though it seems as if the expectation is he won't miss more than a single start. To be sure that things aren't more serious, Cahill is headed in for an MRI.
Angels southpaw Tyler Skaggs was able to work up to a 48-pitch sim game today, skipper Mike Scioscia tells reporters including Jeff Fletcher of the Orange County Register (via Twitter). It's still not clear whether he'll return to the majors this year, though that figures to be a topic of discussion in the coming days. The 27-year-old, who is rehabbing from an adductor strain, is looking to extend his personal-best 116 2/3-inning, 3.78 ERA showing on the season. Whether or not he's able to do so, Skaggs has impressed and now seems to be one of the club's best bets to provide quality frames in 2019 — if he can stay healthy. Skaggs will likely command a nice raise in his second-to-last trip through the arbitration process after earning $1,875,000 this year.
It's still not clear when Rangers prospect Willie Calhoun will get his first real crack at the big leagues. As T.R. Sullivan of MLB.com writes, Calhoun had seemed likely to see much more action in the 2018 season. Instead, after a relatively tepid season at the plate at the Triple-A level, Calhoun is seeing scattered time late this season. It seems the organization still wants to see more from the key piece of last year's Yu Darvish swap before clearing the way. Beyond his known deficiencies in the field and on the bases, manager Jeff Banister seemingly hinted that there are some strength and conditioning steps that the youngster could take to improve.
In other Mariners news, the club will part ways with Triple-A skipper and longtime big leaguer player Pat Listach, Ryan Divish of the Seattle Times recently tweeted. That'll put an end to a four-year run at Tacoma for the former infielder, who has at times been mentioned as a future MLB managerial candidate.
Felix Hernandez Jed Lowrie Los Angeles Angels Oakland Athletics Pat Listach Seattle Mariners Texas Rangers Trevor Cahill Tyler Skaggs Willie Calhoun Yu Darvish
Rangers Promote Willie Calhoun, Place Nomar Mazara On DL
The Rangers announced today that top prospect Willie Calhoun is headed up to the active MLB roster. He'll take the spot of outfielder Nomar Mazara, who'll hit the DL with a thumb sprain.
Calhoun, who came to the Texas organization in last summer's Yu Darvish swap, earned a brief taste of the big leagues late last year. While he was widely considered ready to hit at the game's highest level, though, the Rangers kept him down to begin the present campaign — due in no small part to a need to refine his glovework.
While he had played quite a bit of second base in the past, Calhoun has focused on left field this year at Triple-A. The results will be on display when he suits up at the MLB level, though it's not yet clear whether he'll receive an extended opportunity this time around. It'll certainly also be interesting to see Calhoun try to improve upon a tepid first effort (in a very small sample) against major-league pitching. Through 408 plate appearances this year for Round Rock, he carries a .306/.360/.444 slash with eight home runs and 27 walks to go with forty strikeouts — not nearly the output he managed in 2017, but still promising.
Calhoun's play will obviously help dictate how much of a run he gets down the stretch. But the Rangers' trade deadline outcomes and the health of Mazara will surely also be considered. There's no reason at present to believe that Mazara will miss significant time, though the injury may well foreclose any possibility (however meager) that he could be traded in the next ten days.
Nomar Mazara Texas Rangers Transactions Willie Calhoun
Rangers Notes: Calhoun, Daniels, Martin
By Jeff Todd | May 2, 2018 at 10:14am CDT
The Rangers are not totally buried in the American League postseason hunt, but have already fallen eight games back of the division-leading Astros. Particularly with a variety of notable players on the DL, it's increasingly difficult to see the Rangers contending in 2018. Here's the latest from Texas:
Some Rangers fans are displeased with the fact that top prospect Willie Calhoun is plying his trade at Round Rock rather than with the Rangers. GM Jon Daniels bristled at the notion that Calhoun was being held down due to service-time considerations, as Jeff Wilson of the Fort Worth Star-Telegram writes. Rather, says Daniels, Calhoun is still at Triple-A because "he's still working on his defense." It probably does not help that Calhoun isn't off to the best start at the plate, though nobody doubts his bat is ready for the majors. Daniels says he's "really encouraged" by what he has heard about Calhoun's defensive work thus far, but indicated that it will need to get up to snuff before the call is made.
More broadly, Daniels certainly sounds like a man who's well aware of the uphill climb facing his team this year. As Evan Grant of the Dallas Morning News reports, the team's top baseball exec acknowledges that "injuries have certainly eroded what depth there was." That's obviously sub-optimal, but he does say there are still benefits to the situation. "The upside is that a lot of guys are getting valuable experience they wouldn't otherwise get," Daniels said. "That doesn't do a whole lot for the fans who want to see immediate returns, but long-term we're going to benefit from experiences [young players] are getting."
The Rangers have placed righty Chris Martin on the 10-day DL, per a club announcement. He's dealing with irritation in his right forearm. Fellow right-hander Nick Gardewine will take his spot on the active roster. That represents another blow to the team's MLB roster. Though Martin owns a 5.14 ERA on the year, that's due mostly to the disastrous recent outing that came in advance of the DL placement. Otherwise, he has generally been effective, carrying a solid combination of 8.4 K/9 against 1.9 BB/9 while showing a mid-nineties fastball.
Chris Martin Texas Rangers Willie Calhoun
AL West Notes: Calhoun, Blackburn, Cotton, Cruz, Romine, Felix
By Jeff Todd and Steve Adams | March 14, 2018 at 9:08am CDT
The Rangers optioned Willie Calhoun to Triple-A Round Rock yesterday after the top prospect struggled to a .243/.282/.324 slash through 39 Cactus League plate appearances. The 23-year-old seemed to have at least an outside chance of cracking the big league roster after impressing with a .300/.355/.572 slash in Triple-A last season, but he'll instead head to the minors and continue to hone his defense (as Evan Grant of the Dallas Morning News suggests on Twitter). Calhoun got 20 days of big league service last September, so it seems unlikely that service time implications are a prevailing factor in the decision. But, that could be an added benefit for the Rangers. Calhoun would need 152 days of service time in 2018 to reach a full year, meaning he'd reach a full year if he's up in the Majors on or before April 27 this season and is not optioned back down to the minors. With Calhoun in Round Rock, Ryan Rua and Drew Robinson could be in line to open the season in a left-field platoon. Utilityman Jurickson Profar also has a bit of experience in left.
More from the AL West…
Rangers righty Clayton Blackburn is awaiting word on an elbow MRI, Evan Grant of the Dallas Morning News tweets, but it doesn't sound as if there's much room for optimism. Even in the best-case scenario, Blackburn will be expected to miss the entire first half of the season. The 25-year-old was expected to be an important part of the pitching depth in Texas, even if he had only an outside shot at opening the season in the majors. As Kevin Sherrington of the Dallas Morning News explains, there's plenty still left to be resolved in the Rangers' pitching staff even after a winter spent collecting arms.
The Athletics are holding their breath as right-hander Jharel Cotton undergoes an MRI on his right elbow after experiencing soreness in his most recent spring outing, writes MLB.com's Jane Lee. Manager Bob Melvin acknowledged that "there's some concern" over the test results rather than painting the MRI as any sort of precautionary measure. The skipper also noted that Cotton's velocity has declined in his prior outing. At minimum, Cotton will not make his next start. He'd been largely penciled in for a rotation spot, however, so a significant injury would have a dramatic impact on Oakland's rotation mix.
Nelson Cruz is the latest Mariners player to be hobbled by injury in Spring Training, as he exited yesterday's game with a strained quadriceps, writes Ryan Divish of the Seattle Times. He'll also likely receive an MRI for further evaluation. Cruz laced a liner into the gap but pulled up on his sprint and eased his way into first base on what should have been a double, as Divish explains. Beyond Cruz, presumptive utilityman Andrew Romine suffered an injury to his left shoulder when lunging to apply a tag at third base in the ninth inning. Manager Scott Servais indicated that the shoulder "might have popped out or something," and Romine, too, will be sent for further evaluation.
In more positive Mariners news, Divish also writes that Felix Hernandez threw more than 20 pitches in a bullpen session yesterday — his first mound work since being hit on the elbow/forearm by a line drive back on Feb. 26 — and reported no issues. Hernandez was originally slated to throw only fastballs but talked his way into throwing a few curveballs and changeups. He'll likely have another bullpen session before making his return to a game setting with the M's this weekend. King Felix is hoping to start on Opening Day with the Mariners, though his current trajectory might not make that possible. Even if he's not the Opening Day starter, though, it seems likely that Hernandez would likely be ready to go at some point in the team's first turn through the rotation.
Andrew Romine Clayton Blackburn Felix Hernandez Jharel Cotton Nelson Cruz Oakland Athletics Seattle Mariners Texas Rangers Willie Calhoun
AL West Notes: Banister, Calhoun, Mariners, Heaney
By Steve Adams | September 21, 2017 at 8:19pm CDT
While it's been a rough season for the Rangers, Jon Heyman of FanRag Sports writes in this week's AL Notes column that one source indicates to him that manager Jeff Banister is "100 percent" coming back. The third-year skipper could potentially turn in his third straight winning the season, but the Rangers' 76 losses already guarantee that the 2017 season will be the team's worst with Banister at the helm.
A bit more from the AL West…
Heyman also reports that top Rangers prospect — the centerpiece of their return for Yu Darvish — has hired Scott Boras to represent him. The 22-year-old Calhoun raised his profile as one of the best offensive prospects in the minors this season, hitting a combined .300/.355/.572 with 31 homers, 27 doubles and six triples between the Triple-A affiliates for the Rangers and Dodgers. While Calhoun is obviously quite a ways from reaching arbitration, the move is of some note, given that Boras clients typically forgo early-career extensions. Calhoun's agency switch will be noted in MLBTR's Agency Database, which features representation info on more than 2,500 Major League and Minor League players. If you see any notable errors or omissions, you can let us know via email: mlbtrdatabase@gmail.com.
The Mariners "are thought" to have some interest in Mitch Moreland and Lucas Duda as first base options this offseason, per Heyman. Seattle is currently deploying Yonder Alonso and Danny Valencia as its primary first basemen, though both are eligible for free agency at season's end. Prospect Dan Vogelbach serves as an in-house option, though he comes with fewer than 40 plate appearances of experience in the Majors.
While the Mariners have endured plenty of struggles in the rotation this season, club executives are pleased with the depth that comes with the additions of veteran Mike Leake and controllable young Marco Gonzales, writes Bob Dutton of the Tacoma News Tribune. Gonzales has struggled in the Majors thus far, but he's had a generally solid year in Triple-A in his first season back from Tommy John surgery. Leake, meanwhile, has bounced back terrifically in Seattle following a trade from the Cardinals. General manager Jerry Dipoto explained to Dutton that Leake has been worth two or more wins above replacement on a yearly basis and hasn't seen his skill set significantly diminish, even through a rough stretch toward the end of his Cardinals tenure. Skipper Scott Servais spoke highly of right-hander Andrew Moore as well when chatting with Dutton. Dutton notes that the trio of Leake, Gonzales and Moore will pair with Felix Hernandez, James Paxton, Erasmo Ramirez and Ariel Hernandez to once again give the club its fair share of depth next year.
Angels lefty Andrew Heaney played catch Thursday and is still hopeful that he can start again this season, writes Jeff Fletcher of the Orange County Register. Heaney has been sidelined by a shoulder impingement recently, and with the young southpaw unable to start, the Halos will again turn to Bud Norris to start a bullpen game this weekend, per Fletcher. Norris tossed two innings the last time he did so and was one of three pitchers (joining Yusmeiro Petit and Blake Wood) to throw two innings that day.
Andrew Heaney Jeff Banister Los Angeles Angels Lucas Duda Mitch Moreland Seattle Mariners Texas Rangers Willie Calhoun


text:
"""Test the Pentair ScreenLogic config flow."""
from unittest.mock import patch

from screenlogicpy import ScreenLogicError
from screenlogicpy.const import (
    SL_GATEWAY_IP,
    SL_GATEWAY_NAME,
    SL_GATEWAY_PORT,
    SL_GATEWAY_SUBTYPE,
    SL_GATEWAY_TYPE,
)

from homeassistant import config_entries
from homeassistant.components.dhcp import HOSTNAME, IP_ADDRESS
from homeassistant.components.screenlogic.config_flow import (
    GATEWAY_MANUAL_ENTRY,
    GATEWAY_SELECT_KEY,
)
from homeassistant.components.screenlogic.const import (
    DEFAULT_SCAN_INTERVAL,
    DOMAIN,
    MIN_SCAN_INTERVAL,
)
from homeassistant.const import CONF_IP_ADDRESS, CONF_PORT, CONF_SCAN_INTERVAL

from tests.common import MockConfigEntry

async def test_flow_discovery(hass):
    """Test the flow works with basic discovery."""

    with patch(
        "homeassistant.components.screenlogic.config_flow.discovery.async_discover",
        return_value=[
            {
                SL_GATEWAY_IP: "1.1.1.1",
                SL_GATEWAY_PORT: 80,
                SL_GATEWAY_TYPE: 12,
                SL_GATEWAY_SUBTYPE: 2,
                SL_GATEWAY_NAME: "Pentair: 01-01-01",
            },
        ],
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": config_entries.SOURCE_USER}
        )

    assert result["type"] == "form"
    assert result["errors"] == {}
    assert result["step_id"] == "gateway_select"

    with patch(
        "homeassistant.components.screenlogic.async_setup", return_value=True
    ) as mock_setup, patch(
        "homeassistant.components.screenlogic.async_setup_entry",
        return_value=True,
    ) as mock_setup_entry:
        result2 = await hass.config_entries.flow.async_configure(
            result["flow_id"], user_input={GATEWAY_SELECT_KEY: "00:c0:33:01:01:01"}
        )
        await hass.async_block_till_done()

    assert result2["type"] == "create_entry"
    assert result2["title"] == "Pentair: 01-01-01"
    assert result2["data"] == {
        CONF_IP_ADDRESS: "1.1.1.1",
        CONF_PORT: 80,
    }
    assert len(mock_setup.mock_calls) == 1
    assert len(mock_setup_entry.mock_calls) == 1

async def test_flow_discover_none(hass):
    """Test when nothing is discovered."""

    with patch(
        "homeassistant.components.screenlogic.config_flow.discovery.async_discover",
        return_value=[],
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": config_entries.SOURCE_USER}
        )

    assert result["type"] == "form"
    assert result["errors"] == {}
    assert result["step_id"] == "gateway_entry"

async def test_flow_discover_error(hass):
    """Test when discovery errors."""

    with patch(
        "homeassistant.components.screenlogic.config_flow.discovery.async_discover",
        side_effect=ScreenLogicError("Fake error"),
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": config_entries.SOURCE_USER}
        )

    assert result["type"] == "form"
    assert result["errors"] == {}
    assert result["step_id"] == "gateway_entry"

    with patch(
        "homeassistant.components.screenlogic.async_setup", return_value=True
    ) as mock_setup, patch(
        "homeassistant.components.screenlogic.async_setup_entry",
        return_value=True,
    ) as mock_setup_entry, patch(
        "homeassistant.components.screenlogic.config_flow.login.create_socket",
        return_value=True,
    ), patch(
        "homeassistant.components.screenlogic.config_flow.login.gateway_connect",
        return_value="00-C0-33-01-01-01",
    ):
        result3 = await hass.config_entries.flow.async_configure(
            result["flow_id"],
            {
                CONF_IP_ADDRESS: "1.1.1.1",
                CONF_PORT: 80,
            },
        )
        await hass.async_block_till_done()

    assert result3["type"] == "create_entry"
    assert result3["title"] == "Pentair: 01-01-01"
    assert result3["data"] == {
        CONF_IP_ADDRESS: "1.1.1.1",
        CONF_PORT: 80,
    }
    assert len(mock_setup.mock_calls) == 1
    assert len(mock_setup_entry.mock_calls) == 1

async def test_dhcp(hass):
    """Test DHCP discovery flow."""

    result = await hass.config_entries.flow.async_init(
        DOMAIN,
        context={"source": config_entries.SOURCE_DHCP},
        data={
            HOSTNAME: "Pentair: 01-01-01",
            IP_ADDRESS: "1.1.1.1",
        },
    )

    assert result["type"] == "form"
    assert result["step_id"] == "gateway_entry"

    with patch(
        "homeassistant.components.screenlogic.async_setup", return_value=True
    ) as mock_setup, patch(
        "homeassistant.components.screenlogic.async_setup_entry",
        return_value=True,
    ) as mock_setup_entry, patch(
        "homeassistant.components.screenlogic.config_flow.login.create_socket",
        return_value=True,
    ), patch(
        "homeassistant.components.screenlogic.config_flow.login.gateway_connect",
        return_value="00-C0-33-01-01-01",
    ):
        result3 = await hass.config_entries.flow.async_configure(
            result["flow_id"],
            {
                CONF_IP_ADDRESS: "1.1.1.1",
                CONF_PORT: 80,
            },
        )
        await hass.async_block_till_done()

    assert result3["type"] == "create_entry"
    assert result3["title"] == "Pentair: 01-01-01"
    assert result3["data"] == {
        CONF_IP_ADDRESS: "1.1.1.1",
        CONF_PORT: 80,
    }
    assert len(mock_setup.mock_calls) == 1
    assert len(mock_setup_entry.mock_calls) == 1

async def test_form_manual_entry(hass):
    """Test we get the form."""

    with patch(
        "homeassistant.components.screenlogic.config_flow.discovery.async_discover",
        return_value=[
            {
                SL_GATEWAY_IP: "1.1.1.1",
                SL_GATEWAY_PORT: 80,
                SL_GATEWAY_TYPE: 12,
                SL_GATEWAY_SUBTYPE: 2,
                SL_GATEWAY_NAME: "Pentair: 01-01-01",
            },
        ],
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": config_entries.SOURCE_USER}
        )
    assert result["type"] == "form"
    assert result["errors"] == {}
    assert result["step_id"] == "gateway_select"

    result2 = await hass.config_entries.flow.async_configure(
        result["flow_id"], user_input={GATEWAY_SELECT_KEY: GATEWAY_MANUAL_ENTRY}
    )

    assert result2["type"] == "form"
    assert result2["errors"] == {}
    assert result2["step_id"] == "gateway_entry"

    with patch(
        "homeassistant.components.screenlogic.async_setup", return_value=True
    ) as mock_setup, patch(
        "homeassistant.components.screenlogic.async_setup_entry",
        return_value=True,
    ) as mock_setup_entry, patch(
        "homeassistant.components.screenlogic.config_flow.login.create_socket",
        return_value=True,
    ), patch(
        "homeassistant.components.screenlogic.config_flow.login.gateway_connect",
        return_value="00-C0-33-01-01-01",
    ):
        result3 = await hass.config_entries.flow.async_configure(
            result["flow_id"],
            {
                CONF_IP_ADDRESS: "1.1.1.1",
                CONF_PORT: 80,
            },
        )
        await hass.async_block_till_done()

    assert result3["type"] == "create_entry"
    assert result3["title"] == "Pentair: 01-01-01"
    assert result3["data"] == {
        CONF_IP_ADDRESS: "1.1.1.1",
        CONF_PORT: 80,
    }
    assert len(mock_setup.mock_calls) == 1
    assert len(mock_setup_entry.mock_calls) == 1

async def test_form_cannot_connect(hass):
    """Test we handle cannot connect error."""
    with patch(
        "homeassistant.components.screenlogic.config_flow.discovery.async_discover",
        return_value=[],
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": config_entries.SOURCE_USER}
        )

    with patch(
        "homeassistant.components.screenlogic.config_flow.login.create_socket",
        return_value=None,
    ):
        result2 = await hass.config_entries.flow.async_configure(
            result["flow_id"],
            {
                CONF_IP_ADDRESS: "1.1.1.1",
                CONF_PORT: 80,
            },
        )

    assert result2["type"] == "form"
    assert result2["errors"] == {CONF_IP_ADDRESS: "cannot_connect"}

async def test_option_flow(hass):
    """Test config flow options."""
    entry = MockConfigEntry(domain=DOMAIN)
    entry.add_to_hass(hass)

    with patch(
        "homeassistant.components.screenlogic.async_setup", return_value=True
    ), patch(
        "homeassistant.components.screenlogic.async_setup_entry",
        return_value=True,
    ):
        await hass.config_entries.async_setup(entry.entry_id)
        await hass.async_block_till_done()

    result = await hass.config_entries.options.async_init(entry.entry_id)

    assert result["type"] == "form"
    assert result["step_id"] == "init"

    result = await hass.config_entries.options.async_configure(
        result["flow_id"],
        user_input={CONF_SCAN_INTERVAL: 15},
    )
    assert result["type"] == "create_entry"
    assert result["data"] == {CONF_SCAN_INTERVAL: 15}

async def test_option_flow_defaults(hass):
    """Test config flow options."""
    entry = MockConfigEntry(domain=DOMAIN)
    entry.add_to_hass(hass)

    with patch(
        "homeassistant.components.screenlogic.async_setup", return_value=True
    ), patch(
        "homeassistant.components.screenlogic.async_setup_entry",
        return_value=True,
    ):
        await hass.config_entries.async_setup(entry.entry_id)
        await hass.async_block_till_done()

    result = await hass.config_entries.options.async_init(entry.entry_id)

    assert result["type"] == "form"
    assert result["step_id"] == "init"

    result = await hass.config_entries.options.async_configure(
        result["flow_id"], user_input={}
    )
    assert result["type"] == "create_entry"
    assert result["data"] == {
        CONF_SCAN_INTERVAL: DEFAULT_SCAN_INTERVAL,
    }

async def test_option_flow_input_floor(hass):
    """Test config flow options."""
    entry = MockConfigEntry(domain=DOMAIN)
    entry.add_to_hass(hass)

    with patch(
        "homeassistant.components.screenlogic.async_setup", return_value=True
    ), patch(
        "homeassistant.components.screenlogic.async_setup_entry",
        return_value=True,
    ):
        await hass.config_entries.async_setup(entry.entry_id)
        await hass.async_block_till_done()

    result = await hass.config_entries.options.async_init(entry.entry_id)

    assert result["type"] == "form"
    assert result["step_id"] == "init"

    result = await hass.config_entries.options.async_configure(
        result["flow_id"], user_input={CONF_SCAN_INTERVAL: 1}
    )
    assert result["type"] == "create_entry"
    assert result["data"] == {
        CONF_SCAN_INTERVAL: MIN_SCAN_INTERVAL,
    }

redpajama_set_name: RedPajamaGithub


Some of the top minds in the world will converge for Digital Wealth Summit Hanoi. Digital Wealth Summit Hanoi 2018 is sure to captivate the attention of many people. The speakers and attendees will be glad to follow the details. Digital Wealth Summit Hanoi is centered in Vietnam and will attract much media attention. Learn a little about the future of digital wealth creation at the fun filled conference. Top luminaries will offer their advice going forward as well. We have also partner with Success Sabaidee in Bkk Thailand so that in case you want to make any event outside of Hanoi, Vietnam and in other places of South East Asia, then you are more than welcome too.
New ideas are prevalent at Digital Wealth Summit Hanoi 2018. The program is getting underway and the details will be explained. Sign up to receive an important new update that everyone wants to follow. The Digital Summit in Hanoi is considered to be one of the top notch indication conferences in the entire Asian Region. These developments are now taking place for all who get involved. Speakers will share ideas with the crowd on schedule.
Book a ticket well in advance for Digital Wealth Summit in Hanoi, Vientam. Our staff will be really to make arrangements work for those who are interested. This upcoming summit is a key event unlike any other out there. We have been filtering the speakers according to how good and authoritive in the industry they are – only speakers in the top of their field. That is the reason why Digital Wealth Summit is worth the wait for a lot of true fans.
Digital wealth is set to change the industry for quite some time. People admire the new ideas that are coming forth and want to see how that will work. These digital currencies are changing some of the important new information that proceeds. Plenty of information will be provided and people are invited to ask questions so that all their doubts on how to make money in this digital age are eradicated. We can't wait to bring this information to Vietnam and all of South Easia Region, along side with Malaysia, Singapore and Thailand.
The talks along side with Digital Mover Agency Hanoi as a promotor will bring together brilliant thinkers from all around the world. People from different countries are waiting to get the best information on what is working now in the digital space. The great thing is that Vietnam's foreign culture is something that you can't miss at all and you will have to give a try. All of this details about the city, the summit and the conference in general will be explained when the attendees get to VIetnam. Please trust us that all the necesarry arrangements are being made to bring the top speakers and the best crowd possible to create an unforgettable event.
Plenty of new reviews are being written from people that understand about this kind of work – which gives the possibility to validate that is actually works. This also allows people to do their own preliminary research if they needed it. Reviews are super important in this type of events and they offer some extra information to people who are new to these concepts. This reviews will definitely help you understand what digital services are put to good use.
What is the price of Digital Wealth Summit 2018?
We do need to inform everyone that due to the caliber and amazing people we are bringing to Vietnam – there is a price for people who want to attend the conference. Currently, we are focusing on expanding to all of Asia to features many digital marketers and industry leaders who are sharing theyre own secrets so that people can benefit – that is why there is a ticket cost.
But trust when we tell you that the price of the seminar is well worth the time spent at the conference. We can guarantee that you will leave the event with a really big smile, and ton of ideas to start making your own wealth right after the summit.


text:
Singapore Business Federation inks MOU with A*STAR's Singapore Institute of Manufacturing Technology as Manufacturing and Services SMEs Expand Foothold Globally
The Singapore Business Federation (SBF) and Singapore Institute of Manufacturing Technology (SIMTech) today signed a memorandum of understanding (MOU) to assist local manufacturing and services companies develop R&D capabilities and foster stronger research collaboration with SIMTech.
SINGAPORE, 20 May 2011: The Singapore Business Federation (SBF) and Singapore Institute of Manufacturing Technology (SIMTech), a research institute of the Agency for Science, Technology and Research (A*STAR), today signed a memorandum of understanding (MOU) to assist local manufacturing and services companies develop R&D capabilities and foster stronger research collaboration with SIMTech.
The SBF-SIMTech MOU marks the strong partnership between the two organisations and calls for both parties to jointly promote the transfer of knowledge and expertise, organise initiatives and programmes, and identify gaps for technological enhancement to increase the competitiveness of Singapore's manufacturing and services industries. Leveraging on SBF's extensive network and logistic support capabilities, SIMTech will be able to build closer links with SBF member companies who are seeking advanced and cost-effective manufacturing technologies to raise their competitiveness and venture into emerging markets. The MOU will pave the way for SBF members to tap on SIMTech's high value manufacturing technologies, training and membership programmes and obtain market insights to address the business challenges they face.
Signing on behalf of SBF, Chief Operating Officer Mr Victor Tay said, "The MOU will bridge member companies of SBF to a scientific hub where they are able to access breakthrough research findings, catalyse technology innovation projects and test their ideas. Manufacturing and services companies will now have access to first-hand knowledge on acquiring the latest technologies to undertake higher precision and higher value manufacturing activities to meet stringent performance requirements of this high growth region and gain competitive advantages over their competitors."
Speaking at the signing ceremony, SIMTech Executive Director Dr Lim Ser Yong said, "More Singapore-based companies are keen to explore new grounds and invest in new technologies and markets but lack the expertise on licensing, intellectual property, technological and operational know-how. Through our partnership with SBF, SIMTech will be able to reach out to more companies that are interested in exploring R&D and technology licensing for growth."
The MOU will pave the way for increased tie-ups between enterprises and SIMTech. Together with SBF, SIMTech will facilitate joint seminars, workshops and training courses such as manufacturing excellence and productivity programmes to keep SBF members abreast of best practices and sieve out suitable tools from the multitude of advanced manufacturing technologies available. Overseas study missions in the area of technology sourcing and productivity are also some of the business exchange platforms that SIMTech can organise for SBF companies to boost productivity.
Manufacturing is a key driver of the Singapore economy accounting 25 per cent of the nation's GDP. Based on recent data released by the Economic Development Board, Singapore's manufacturing output increased by 22 per cent in March 2011 compared to the previous year. The precision engineering output grew by 8.6 per cent year-on-year due to strong demand for semiconductor-related equipment, refrigerating and air-conditioning products and machine tool and accessories [Monthly Manufacturing Performance March 2011, EDB].
About Singapore Business Federation (SBF)
The Singapore Business Federation is the apex business chamber that champions the interests of the Singapore business community in trade, investment and industrial relations. It represents more than 17,000 companies as well as the local and foreign business chambers and key national and industry associations from business sectors that contribute significantly to the Singapore economy.
Please see the link below for more information.
About the Singapore Institute of Manufacturing Technology (SIMTech)
The Singapore Institute of Manufacturing Technology (SIMTech) is a research institute of the Science and Engineering Research Council (SERC) of the Agency for Science, Technology and Research (A*STAR). SIMTech develops high value manufacturing technology and human capital to contribute to the competitiveness of the Singapore industry. It collaborates with multinational and local companies in the precision engineering, electronics, semiconductor, medical technology, aerospace, automotive, marine, logistics and other sectors.
Singapore Business Federation
Mr Gerald De Cotta
gerald(at)sbf.org.sg
Singapore Institute of Manufacturing Technology (SIMTech)
Ms Melissa Loh
lohsm(at)scei.a-star.edu.sg
http://www.sbf.org.sg/ Singapore Business Federation
http://www.SIMTech.a-star.edu.sg Singapore Institute of Manufacturing Technology (SIMTech)
Weekly News Bites: Stem-cell therapy for pets, zen gut bacteria, and a mushroom's dark secret
Squid tissues and chemistry combine for versatile hydrogels
Analyzing Sweat via Microelectronic Fibers for Non-invasive Health Monitoring
Show all Technology Business press releases

redpajama_set_name: RedPajamaCommonCrawl


Do you desire to have a youthful glow? Don't we all?! You probably already know that using quality skin care products and products that are designed to work with your skin's type are crucial to helping your skin's health and appearance. Of course being consistent with your skin care is key, too. But, even if you've been doing all of these things you may be feeling like your skin needs a little extra boost to really get that youthful glow you want – right? Well, the key may be adding supplements that boost your youthful glow – and we're sharing exactly what supplements can help you achieve that now.
Chances are you may be using a skin care product that contains vitamin E as an active ingredient. There are so many amazing benefits for skin from vitamin E when used in skin care products. But when vitamin E is taken as a supplement, it also has some pretty amazing benefits that can help boost your youthful glow. Vitamin E has been found to be an incredibly powerful antioxidant, assisting in fighting free radicals. In case you're not aware, free radicals have been found to have a pretty negative impact on skin – especially with the aging process. So, adding a vitamin E supplement to your regimen can be a great way to take care of your skin's aging process from the inside out to fight those nasty free radicals.
This may be obvious…because many of us know that our skin has collagen but as we age our skin begins to lose a lot of the natural collagen. However, did you realize that you can actually take collagen as a supplement? Here's the deal…our skin does have natural collagen in it and that's what keeps our skin tight and free of wrinkles and sagging. However, as we age the collagen production begins to decrease. While there are quite a few skin care products that contain and promise to boost collagen production in the skin, taking it in supplement form can be a powerful way to get an added boost to reap the benefits of collagen to get that youthful glow.
We often hear about zinc in relation to helping fight colds and other health concerns, but zinc has also been found to be incredibly beneficial to helping boost your youthful glow as well. Wondering how exactly zinc helps give you that glow? When you take zinc as a supplement it's been found to help tremendously with inflammation and irritation that may be in the skin. Unfortunately, many of us suffer from inflammation and/or irritation in our skin in one way or another. Both inflammation and irritation have been found to negatively impact the aging process in our skin and prevent us from having that youthful glow we really want. So when we're able to reduce irritation and inflammation our skin is able to function much more efficiently and help us maintain and achieve a youthful glow we love.


List of Stafford based computer repair shops offering PC and laptop repair and maintenance services.
JAPHLIN carry out Expert Repairs to the following computer hardware. The use of loan equipment when available should the repair necessitate equipment removal. The standard response time is 8 working hours (or better) from the time the call is received. Our engineers are constantly updating there skills and knowledge and have access to Technical Support from many manufactures including Microsoft.
Stafford IT Services is a dynamic business that provides PC Remote Support and Repairs to small businesses and home users. The Company provides on-site support throughout the local area and provides Remote Support which enables clients to roam the UK and yet be fully supported. The company, which is located in Stafford, has over 12 years experience in the Computer Services sector.
Established in 2000 by owner Gary Campbell, Solo Computers offers a complete bespoke PC building service. So whether it's a starter computer system or a top of the range gaming machine Gary will work with you to provide what you want at a competitive price. Upgrades & repairs also a speciality.
Cracked screen on a Toshiba laptop, its pretty new, about 2 months old.


text:
Calling All Tennis Aficionados – The Game Set Match App is Here!
As is often the case with entrepreneurial ideas, the Game Set Match (GSM) app was born from the irritation of a persistent problem. "My partner, Chief Technologist, and avid tennis player, C.J. Bordeleau, struggled to find similarly skilled playing partners to himself as he traveled the country on business" says Marsh Sutherland, CEO of GSM. Additionally, the US Tennis Association's (USTA) National Tennis Rating Program (NTRP) for individual players proved inconsistent across geographic regions.
The problem demanded a solution – and that solution became Game Set Match.
Game Set Match is one part community forum for the tennis world and one part player improvement tracker. Currently boasting more than 300 users, most in Spokane but with pockets in Boston and New York City as well, the app allows players to find and communicate with each other to set up matches. A recent adopter and promoter of the app is Jeff Urie, Director of Tennis at the Spokane Club. "This app is a great way for members and other players to play more challenging matches, making them more prepared when USTA leagues and tournaments roll around" says Jeff. Marsh and C.J. are working to increase usage of the app and take advantage of the more than 13,000 private tennis courts in the US, all of which are listed in GSM.
Unique to this app is its utilization of the Elo Rating System which, originally used to rank chess players, is being introduced to the tennis world for the first time through GSM. The basis of this system, which takes into account the skill level of an opponent when ranking a player based on wins and losses, overcomes the geographic inconsistencies plaguing the NTRP system. "Players risk ranking points every time they play a GSM match, which gives them some 'skin in the game'" Jeff at the Spokane Club says. As players improve their game and win more matches, the app allows them to seek out and schedule matches with higher-skilled opponents.
Click here to sign up and challenge a friend to a match! Marsh and C.J. are also looking for advisors who can offer domain knowledge in either tennis or people matching applications. You can reach them through their Facebook page here.
When asked to share his best piece of advice for startups, Marsh, a self-described serial entrepreneur, emphasizes the importance of traction. "Launched apps are nice, but if they don't get usage then it's just a fun hobby. A startup needs traction to know it's viable and will grow before ever seeking any investment money" Marsh offers. "A good traction benchmark is to show 5% week-over-week growth in the one metric that matters for 10 weeks. Then seek investment if you truly need it to grow."


text:
Natan Jelin-Mor (hebr.: נתן ילין-מור, ang.: Nathan Yellin-Mor, ur. 1913 w Grodnie, zm. 19 lutego 1980) – izraelski polityk, w latach 1949–1951 poseł do Knesetu z Listy Bojowników.

Był bojownikiem Lechi. Brał udział w planowaniu zamachu na Waltera Guinnessa, 1. baron Moyne w 1944. Skazano go na karę więzienia za udział w zabójstwie hrabiego Folke Bernadotte w 1948. W wyborach parlamentarnych w 1949 po raz pierwszy i jedyny dostał się do izraelskiego parlamentu, jako jedyny poseł Listy Bojowników. Został wypuszczony z więzienia, by móc sprawować mandat posła.

Przypisy

Ludzie urodzeni w Grodnie (Imperium Rosyjskie)
Posłowie do Knesetu I kadencji
Polscy Żydzi
Urodzeni w 1913
Zmarli w 1980
Członkowie Lechi
Rewizjonistyczni syjoniści

redpajama_set_name: RedPajamaWikipedia


Chris Smalling has his sights set on cementing a spot in the England side as he aims to make up for the injury frustration which checked his progress with both club and country.
The Manchester United player made his international breakthrough 18 months ago following back-to-back appearances against Bulgaria and Wales at right back. The future looked bright for Smalling but he was then sidelined for six months with a groin injury and a broken metatarsal.
But he was chosen by Roy Hodgson for back to back internationals with Brazil at Wembley and, on Friday in San Marino, and said: "It has been a frustrating season. My season didn't get started until mid November with injuries."
He went on: "It was the second last game of the season against Swansea when I felt my groin and it ruled me out of the summer (Euro 2012).
"I came back for pre-season raring and ready to go and then my foot went so I didn't get going until mid November.
"But I've always been ready the last couple of months, I've stayed fit, and just hope to stay fit until the end of the season and keep picking up games.
"It's not been the ideal season. It's not been a great season but I just hope next season I can stay injury fit and play more games.
"I've been feeling good and hopefully I can finish the season strong and have a good pre-season because I didn't have a full one last summer."
Smalling is conscious of the opportunity to stake a claim to become an England regular especially given the number of centre-backs absent, injured or unavailable.
He said: "Am I conscious a position is up for grabs? Definitely. There were a few pull-outs for the San Marino game but it gives the people here an opportunity. I definitely see myself as having a chance with the more games I can get. If I can get on a little run, the position is more like your own."


text:
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/browser/indexed_db/indexed_db_context_impl.h"

#include <algorithm>
#include <utility>

#include "base/bind.h"
#include "base/command_line.h"
#include "base/files/file_enumerator.h"
#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/metrics/histogram.h"
#include "base/sequenced_task_runner.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_restrictions.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "base/values.h"
#include "content/browser/browser_main_loop.h"
#include "content/browser/indexed_db/indexed_db_connection.h"
#include "content/browser/indexed_db/indexed_db_database.h"
#include "content/browser/indexed_db/indexed_db_dispatcher_host.h"
#include "content/browser/indexed_db/indexed_db_factory_impl.h"
#include "content/browser/indexed_db/indexed_db_quota_client.h"
#include "content/browser/indexed_db/indexed_db_tracing.h"
#include "content/browser/indexed_db/indexed_db_transaction.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/indexed_db_info.h"
#include "content/public/common/content_switches.h"
#include "storage/browser/database/database_util.h"
#include "storage/browser/quota/quota_manager_proxy.h"
#include "storage/browser/quota/special_storage_policy.h"
#include "storage/common/database/database_identifier.h"
#include "ui/base/text/bytes_formatting.h"
#include "url/origin.h"

using base::DictionaryValue;
using base::ListValue;
using storage::DatabaseUtil;
using url::Origin;

namespace content {
const base::FilePath::CharType IndexedDBContextImpl::kIndexedDBDirectory[] =
    FILE_PATH_LITERAL("IndexedDB");

static const base::FilePath::CharType kBlobExtension[] =
    FILE_PATH_LITERAL(".blob");

static const base::FilePath::CharType kIndexedDBExtension[] =
    FILE_PATH_LITERAL(".indexeddb");

static const base::FilePath::CharType kLevelDBExtension[] =
    FILE_PATH_LITERAL(".leveldb");

namespace {

// This may be called after the IndexedDBContext is destroyed.
void GetAllOriginsAndPaths(const base::FilePath& indexeddb_path,
                           std::vector<Origin>* origins,
                           std::vector<base::FilePath>* file_paths) {
  // TODO(jsbell): DCHECK that this is running on an IndexedDB thread,
  // if a global handle to it is ever available.
  if (indexeddb_path.empty())
    return;
  base::FileEnumerator file_enumerator(
      indexeddb_path, false, base::FileEnumerator::DIRECTORIES);
  for (base::FilePath file_path = file_enumerator.Next(); !file_path.empty();
       file_path = file_enumerator.Next()) {
    if (file_path.Extension() == kLevelDBExtension &&
        file_path.RemoveExtension().Extension() == kIndexedDBExtension) {
      std::string origin_id = file_path.BaseName().RemoveExtension()
          .RemoveExtension().MaybeAsASCII();
      origins->push_back(Origin(storage::GetOriginFromIdentifier(origin_id)));
      if (file_paths)
        file_paths->push_back(file_path);
    }
  }
}

// This will be called after the IndexedDBContext is destroyed.
void ClearSessionOnlyOrigins(
    const base::FilePath& indexeddb_path,
    scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy) {
  // TODO(jsbell): DCHECK that this is running on an IndexedDB thread,
  // if a global handle to it is ever available.
  std::vector<Origin> origins;
  std::vector<base::FilePath> file_paths;
  GetAllOriginsAndPaths(indexeddb_path, &origins, &file_paths);
  DCHECK_EQ(origins.size(), file_paths.size());
  auto file_path = file_paths.cbegin();
  auto origin = origins.cbegin();
  for (; origin != origins.cend(); ++origin, ++file_path) {
    const GURL origin_url = GURL(origin->Serialize());
    if (!special_storage_policy->IsStorageSessionOnly(origin_url))
      continue;
    if (special_storage_policy->IsStorageProtected(origin_url))
      continue;
    base::DeleteFile(*file_path, true);
  }
}

}  // namespace

IndexedDBContextImpl::IndexedDBContextImpl(
    const base::FilePath& data_path,
    storage::SpecialStoragePolicy* special_storage_policy,
    storage::QuotaManagerProxy* quota_manager_proxy,
    base::SequencedTaskRunner* task_runner)
    : force_keep_session_state_(false),
      special_storage_policy_(special_storage_policy),
      quota_manager_proxy_(quota_manager_proxy),
      task_runner_(task_runner) {
  IDB_TRACE("init");
  if (!data_path.empty())
    data_path_ = data_path.Append(kIndexedDBDirectory);
  quota_manager_proxy->RegisterClient(new IndexedDBQuotaClient(this));
}

IndexedDBFactory* IndexedDBContextImpl::GetIDBFactory() {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  if (!factory_.get()) {
    // Prime our cache of origins with existing databases so we can
    // detect when dbs are newly created.
    GetOriginSet();
    factory_ = new IndexedDBFactoryImpl(this);
  }
  return factory_.get();
}

std::vector<Origin> IndexedDBContextImpl::GetAllOrigins() {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  std::set<Origin>* origins_set = GetOriginSet();
  return std::vector<Origin>(origins_set->begin(), origins_set->end());
}

bool IndexedDBContextImpl::HasOrigin(const Origin& origin) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  std::set<Origin>* set = GetOriginSet();
  return set->find(origin) != set->end();
}

std::vector<IndexedDBInfo> IndexedDBContextImpl::GetAllOriginsInfo() {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  std::vector<Origin> origins = GetAllOrigins();
  std::vector<IndexedDBInfo> result;
  for (const auto& origin : origins) {
    size_t connection_count = GetConnectionCount(origin);
    result.push_back(
        IndexedDBInfo(GURL(origin.Serialize()), GetOriginDiskUsage(origin),
                      GetOriginLastModified(origin), connection_count));
  }
  return result;
}

static bool HostNameComparator(const Origin& i, const Origin& j) {
  return i.host() < j.host();
}

base::ListValue* IndexedDBContextImpl::GetAllOriginsDetails() {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  std::vector<Origin> origins = GetAllOrigins();

  std::sort(origins.begin(), origins.end(), HostNameComparator);

  std::unique_ptr<base::ListValue> list(new base::ListValue());
  for (const auto& origin : origins) {
    std::unique_ptr<base::DictionaryValue> info(new base::DictionaryValue());
    info->SetString("url", origin.Serialize());
    info->SetString("size", ui::FormatBytes(GetOriginDiskUsage(origin)));
    info->SetDouble("last_modified", GetOriginLastModified(origin).ToJsTime());
    if (!is_incognito()) {
      std::unique_ptr<base::ListValue> paths(new base::ListValue());
      for (const base::FilePath& path : GetStoragePaths(origin))
        paths->AppendString(path.value());
      info->Set("paths", paths.release());
    }
    info->SetDouble("connection_count", GetConnectionCount(origin));

    // This ends up being O(n^2) since we iterate over all open databases
    // to extract just those in the origin, and we're iterating over all
    // origins in the outer loop.

    if (factory_.get()) {
      std::pair<IndexedDBFactory::OriginDBMapIterator,
                IndexedDBFactory::OriginDBMapIterator>
          range = factory_->GetOpenDatabasesForOrigin(origin);
      // TODO(jsbell): Sort by name?
      std::unique_ptr<base::ListValue> database_list(new base::ListValue());

      for (IndexedDBFactory::OriginDBMapIterator it = range.first;
           it != range.second;
           ++it) {
        const IndexedDBDatabase* db = it->second;
        std::unique_ptr<base::DictionaryValue> db_info(
            new base::DictionaryValue());

        db_info->SetString("name", db->name());
        db_info->SetDouble("pending_opens", db->PendingOpenCount());
        db_info->SetDouble("pending_upgrades", db->PendingUpgradeCount());
        db_info->SetDouble("running_upgrades", db->RunningUpgradeCount());
        db_info->SetDouble("pending_deletes", db->PendingDeleteCount());
        db_info->SetDouble("connection_count",
                           db->ConnectionCount() - db->PendingUpgradeCount() -
                               db->RunningUpgradeCount());

        std::unique_ptr<base::ListValue> transaction_list(
            new base::ListValue());
        std::vector<const IndexedDBTransaction*> transactions =
            db->transaction_coordinator().GetTransactions();
        for (const auto* transaction : transactions) {
          std::unique_ptr<base::DictionaryValue> transaction_info(
              new base::DictionaryValue());

          const char* const kModes[] =
              { "readonly", "readwrite", "versionchange" };
          transaction_info->SetString("mode", kModes[transaction->mode()]);
          switch (transaction->state()) {
            case IndexedDBTransaction::CREATED:
              transaction_info->SetString("status", "blocked");
              break;
            case IndexedDBTransaction::STARTED:
              if (transaction->diagnostics().tasks_scheduled > 0)
                transaction_info->SetString("status", "running");
              else
                transaction_info->SetString("status", "started");
              break;
            case IndexedDBTransaction::COMMITTING:
              transaction_info->SetString("status", "committing");
              break;
            case IndexedDBTransaction::FINISHED:
              transaction_info->SetString("status", "finished");
              break;
          }

          transaction_info->SetDouble(
              "pid",
              IndexedDBDispatcherHost::TransactionIdToProcessId(
                  transaction->id()));
          transaction_info->SetDouble(
              "tid",
              IndexedDBDispatcherHost::TransactionIdToRendererTransactionId(
                  transaction->id()));
          transaction_info->SetDouble(
              "age",
              (base::Time::Now() - transaction->diagnostics().creation_time)
                  .InMillisecondsF());
          transaction_info->SetDouble(
              "runtime",
              (base::Time::Now() - transaction->diagnostics().start_time)
                  .InMillisecondsF());
          transaction_info->SetDouble(
              "tasks_scheduled", transaction->diagnostics().tasks_scheduled);
          transaction_info->SetDouble(
              "tasks_completed", transaction->diagnostics().tasks_completed);

          std::unique_ptr<base::ListValue> scope(new base::ListValue());
          for (const auto& id : transaction->scope()) {
            IndexedDBDatabaseMetadata::ObjectStoreMap::const_iterator it =
                db->metadata().object_stores.find(id);
            if (it != db->metadata().object_stores.end())
              scope->AppendString(it->second.name);
          }

          transaction_info->Set("scope", scope.release());
          transaction_list->Append(transaction_info.release());
        }
        db_info->Set("transactions", transaction_list.release());

        database_list->Append(db_info.release());
      }
      info->Set("databases", database_list.release());
    }

    list->Append(info.release());
  }
  return list.release();
}

int IndexedDBContextImpl::GetOriginBlobFileCount(const Origin& origin) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  int count = 0;
  base::FileEnumerator file_enumerator(GetBlobStorePath(origin), true,
                                       base::FileEnumerator::FILES);
  for (base::FilePath file_path = file_enumerator.Next(); !file_path.empty();
       file_path = file_enumerator.Next()) {
    count++;
  }
  return count;
}

// TODO(jsbell): Update callers to use url::Origin overload and remove.
int64_t IndexedDBContextImpl::GetOriginDiskUsage(const GURL& origin_url) {
  return GetOriginDiskUsage(Origin(origin_url));
}

int64_t IndexedDBContextImpl::GetOriginDiskUsage(const Origin& origin) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  if (data_path_.empty() || !HasOrigin(origin))
    return 0;
  EnsureDiskUsageCacheInitialized(origin);
  return origin_size_map_[origin];
}

base::Time IndexedDBContextImpl::GetOriginLastModified(const Origin& origin) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  if (data_path_.empty() || !HasOrigin(origin))
    return base::Time();
  base::FilePath idb_directory = GetLevelDBPath(origin);
  base::File::Info file_info;
  if (!base::GetFileInfo(idb_directory, &file_info))
    return base::Time();
  return file_info.last_modified;
}

// TODO(jsbell): Update callers to use url::Origin overload and remove.
void IndexedDBContextImpl::DeleteForOrigin(const GURL& origin_url) {
  DeleteForOrigin(Origin(origin_url));
}

void IndexedDBContextImpl::DeleteForOrigin(const Origin& origin) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  ForceClose(origin, FORCE_CLOSE_DELETE_ORIGIN);
  if (data_path_.empty() || !HasOrigin(origin))
    return;

  base::FilePath idb_directory = GetLevelDBPath(origin);
  EnsureDiskUsageCacheInitialized(origin);
  leveldb::Status s = LevelDBDatabase::Destroy(idb_directory);
  if (!s.ok()) {
    LOG(WARNING) << "Failed to delete LevelDB database: "
                 << idb_directory.AsUTF8Unsafe();
  } else {
    // LevelDB does not delete empty directories; work around this.
    // TODO(jsbell): Remove when upstream bug is fixed.
    // https://code.google.com/p/leveldb/issues/detail?id=209
    const bool kNonRecursive = false;
    base::DeleteFile(idb_directory, kNonRecursive);
  }
  base::DeleteFile(GetBlobStorePath(origin), true /* recursive */);
  QueryDiskAndUpdateQuotaUsage(origin);
  if (s.ok()) {
    RemoveFromOriginSet(origin);
    origin_size_map_.erase(origin);
  }
}

// TODO(jsbell): Update callers to use url::Origin overload and remove.
void IndexedDBContextImpl::CopyOriginData(const GURL& origin_url,
                                          IndexedDBContext* dest_context) {
  CopyOriginData(Origin(origin_url), dest_context);
}

void IndexedDBContextImpl::CopyOriginData(const Origin& origin,
                                          IndexedDBContext* dest_context) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  if (data_path_.empty() || !HasOrigin(origin))
    return;

  IndexedDBContextImpl* dest_context_impl =
      static_cast<IndexedDBContextImpl*>(dest_context);

  ForceClose(origin, FORCE_CLOSE_COPY_ORIGIN);

  // Make sure we're not about to delete our own database.
  CHECK_NE(dest_context_impl->data_path().value(), data_path().value());

  // Delete any existing storage paths in the destination context.
  // A previously failed migration may have left behind partially copied
  // directories.
  for (const base::FilePath& dest_path :
       dest_context_impl->GetStoragePaths(origin))
    base::DeleteFile(dest_path, true);

  base::FilePath dest_data_path = dest_context_impl->data_path();
  base::CreateDirectory(dest_data_path);

  for (const base::FilePath& src_data_path : GetStoragePaths(origin)) {
    if (base::PathExists(src_data_path)) {
      base::CopyDirectory(src_data_path, dest_data_path, true);
    }
  }
}

void IndexedDBContextImpl::ForceClose(const Origin origin,
                                      ForceCloseReason reason) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  UMA_HISTOGRAM_ENUMERATION("WebCore.IndexedDB.Context.ForceCloseReason",
                            reason,
                            FORCE_CLOSE_REASON_MAX);

  if (data_path_.empty() || !HasOrigin(origin))
    return;

  if (factory_.get())
    factory_->ForceClose(origin);
  DCHECK_EQ(0UL, GetConnectionCount(origin));
}

size_t IndexedDBContextImpl::GetConnectionCount(const Origin& origin) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  if (data_path_.empty() || !HasOrigin(origin))
    return 0;

  if (!factory_.get())
    return 0;

  return factory_->GetConnectionCount(origin);
}

std::vector<base::FilePath> IndexedDBContextImpl::GetStoragePaths(
    const Origin& origin) const {
  std::vector<base::FilePath> paths;
  paths.push_back(GetLevelDBPath(origin));
  paths.push_back(GetBlobStorePath(origin));
  return paths;
}

// TODO(jsbell): Update callers to use url::Origin overload and remove.
base::FilePath IndexedDBContextImpl::GetFilePathForTesting(
    const GURL& origin_url) const {
  return GetFilePathForTesting(Origin(origin_url));
}

base::FilePath IndexedDBContextImpl::GetFilePathForTesting(
    const Origin& origin) const {
  return GetLevelDBPath(origin);
}

void IndexedDBContextImpl::SetTaskRunnerForTesting(
    base::SequencedTaskRunner* task_runner) {
  DCHECK(!task_runner_.get());
  task_runner_ = task_runner;
}

void IndexedDBContextImpl::ConnectionOpened(const Origin& origin,
                                            IndexedDBConnection* connection) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  quota_manager_proxy()->NotifyStorageAccessed(
      storage::QuotaClient::kIndexedDatabase, GURL(origin.Serialize()),
      storage::kStorageTypeTemporary);
  if (AddToOriginSet(origin)) {
    // A newly created db, notify the quota system.
    QueryDiskAndUpdateQuotaUsage(origin);
  } else {
    EnsureDiskUsageCacheInitialized(origin);
  }
}

void IndexedDBContextImpl::ConnectionClosed(const Origin& origin,
                                            IndexedDBConnection* connection) {
  DCHECK(TaskRunner()->RunsTasksOnCurrentThread());
  quota_manager_proxy()->NotifyStorageAccessed(
      storage::QuotaClient::kIndexedDatabase, GURL(origin.Serialize()),
      storage::kStorageTypeTemporary);
  if (factory_.get() && factory_->GetConnectionCount(origin) == 0)
    QueryDiskAndUpdateQuotaUsage(origin);
}

void IndexedDBContextImpl::TransactionComplete(const Origin& origin) {
  DCHECK(!factory_.get() || factory_->GetConnectionCount(origin) > 0);
  QueryDiskAndUpdateQuotaUsage(origin);
}

void IndexedDBContextImpl::DatabaseDeleted(const Origin& origin) {
  AddToOriginSet(origin);
  QueryDiskAndUpdateQuotaUsage(origin);
}

IndexedDBContextImpl::~IndexedDBContextImpl() {
  if (factory_.get()) {
    TaskRunner()->PostTask(
        FROM_HERE, base::Bind(&IndexedDBFactory::ContextDestroyed, factory_));
    factory_ = NULL;
  }

  if (data_path_.empty())
    return;

  if (force_keep_session_state_)
    return;

  bool has_session_only_databases =
      special_storage_policy_.get() &&
      special_storage_policy_->HasSessionOnlyOrigins();

  // Clearing only session-only databases, and there are none.
  if (!has_session_only_databases)
    return;

  TaskRunner()->PostTask(
      FROM_HERE,
      base::Bind(
          &ClearSessionOnlyOrigins, data_path_, special_storage_policy_));
}

// static
base::FilePath IndexedDBContextImpl::GetBlobStoreFileName(
    const Origin& origin) {
  std::string origin_id =
      storage::GetIdentifierFromOrigin(GURL(origin.Serialize()));
  return base::FilePath()
      .AppendASCII(origin_id)
      .AddExtension(kIndexedDBExtension)
      .AddExtension(kBlobExtension);
}

// static
base::FilePath IndexedDBContextImpl::GetLevelDBFileName(const Origin& origin) {
  std::string origin_id =
      storage::GetIdentifierFromOrigin(GURL(origin.Serialize()));
  return base::FilePath()
      .AppendASCII(origin_id)
      .AddExtension(kIndexedDBExtension)
      .AddExtension(kLevelDBExtension);
}

base::FilePath IndexedDBContextImpl::GetBlobStorePath(
    const Origin& origin) const {
  DCHECK(!data_path_.empty());
  return data_path_.Append(GetBlobStoreFileName(origin));
}

base::FilePath IndexedDBContextImpl::GetLevelDBPath(
    const Origin& origin) const {
  DCHECK(!data_path_.empty());
  return data_path_.Append(GetLevelDBFileName(origin));
}

int64_t IndexedDBContextImpl::ReadUsageFromDisk(const Origin& origin) const {
  if (data_path_.empty())
    return 0;
  int64_t total_size = 0;
  for (const base::FilePath& path : GetStoragePaths(origin))
    total_size += base::ComputeDirectorySize(path);
  return total_size;
}

void IndexedDBContextImpl::EnsureDiskUsageCacheInitialized(
    const Origin& origin) {
  if (origin_size_map_.find(origin) == origin_size_map_.end())
    origin_size_map_[origin] = ReadUsageFromDisk(origin);
}

void IndexedDBContextImpl::QueryDiskAndUpdateQuotaUsage(const Origin& origin) {
  int64_t former_disk_usage = origin_size_map_[origin];
  int64_t current_disk_usage = ReadUsageFromDisk(origin);
  int64_t difference = current_disk_usage - former_disk_usage;
  if (difference) {
    origin_size_map_[origin] = current_disk_usage;
    quota_manager_proxy()->NotifyStorageModified(
        storage::QuotaClient::kIndexedDatabase, GURL(origin.Serialize()),
        storage::kStorageTypeTemporary, difference);
  }
}

std::set<Origin>* IndexedDBContextImpl::GetOriginSet() {
  if (!origin_set_) {
    std::vector<Origin> origins;
    GetAllOriginsAndPaths(data_path_, &origins, NULL);
    origin_set_.reset(new std::set<Origin>(origins.begin(), origins.end()));
  }
  return origin_set_.get();
}

void IndexedDBContextImpl::ResetCaches() {
  origin_set_.reset();
  origin_size_map_.clear();
}

base::SequencedTaskRunner* IndexedDBContextImpl::TaskRunner() const {
  return task_runner_.get();
}

}  // namespace content


text:
Billie Eilish has no idea who Hilary Duff is after getting 'Lizzie McGuire' gift
Collin Goeman - June 5, 2019
Billie Eilish has made her lack of '90s knowledge very clear during her rise to fame, now adding another classic staple to her list. After receiving...
Chromatics drop spooky Hole cover for Netflix horror film
Alex Darus - May 27, 2019
The Chromatics have covered a classic Hole song for a new Netflix horror movie, and it's giving us chills. The electronic group covered "Petals"...
Will Smith shares trippy 'Fresh Prince of Bel-Air' limited-edition merch
Alex Darus - May 3, 2019
'90s babies, get ready — Will Smith is dropping some limited Fresh Prince of Bel-Air merch. Smith, who starred in the show, shared a video...
10 musicians you forgot performed on 'Charmed'
Taylor Markarian - April 30, 2019
Charmed was a groundbreaking show when it premiered on television back in 1998. The magical story of three sister witches—Prue (Shannen Doherty), Piper (Holly...
'The Rugrats Movie' soundtrack heading to vinyl for the first time
Maria Serra - November 26, 2018
When you think of the greatest '90s TV shows of all time, you may think of Friends. However, if you were a '90s kid,...
Disney announces '90s-inspired fashion collection, we need everything
Maria Serra - October 15, 2018
The '90s were the golden age of grunge music, butterfly hair clips, Dunkaroos, Beanie Babies, gel pens and so much more. This golden age...
Sally Hansen's new nail polish collection is giving us '90s flashbacks
Lauren Tullio - March 7, 2018
We're all about channeling those '90s vibes, and thanks to Sally Hansen, we'll be able to do just that with our polish. The beloved nail...
It's the end of an era—JNCO jeans are going out of business
Kaitlyn Ulrich - February 17, 2018
Well it's official: JNCO jeans are going out of business. Read more: The '90s revival is real: JNCO jeans returning just in time for Christmas If you...
10 essential songs from the '90s
Maggie Dickman - January 26, 2018
Thrift-store flannels, stovepipe pants, track suits, severe haircuts, red baseball hats worn backward and the occasional hat that was designed by Dr. Seuss. Nineties...
'90s alt-rock pioneers the Breeders announce first album in decade
Jason Pettigrew - January 9, 2018
The Breeders, the widely influential band formed by bassist Kim Deal after the demise of alt-rock progenitors Pixies, have returned with their first new...


text:
Todtnauberg is een plaatsje met ca. 710 inwoners (2020) in het zuidelijk deel van het Zwarte Woud op 1018 m hoogte in Duitsland. Het staat vooral bekend als luchtkuuroord en wintersportplaats. Het dorpje heeft een winkelcentrumpje met kleine winkels, boutiques en andere lokaliteiten. In Todtnau werd de eerste Duitse skiclub opgericht. De plaats is gelegen in een hooggelegen dal met vergezichten en zonder doorgaand verkeer. Er zijn uitgebreide wandel- en mountainbikewegen, liften en loipen in de nabijheid.

Stedenbanden
Todtnauberg heeft een vriendschapsband met Münsing.

Plaats in Baden-Württemberg


Madeleine Verchere's story is based on a true account of colonial French Canada of the 1690's. Harassed by Iroquois, the Verchere family's fort must keep a continual guard. Fourteen-year-old Madeleine is left alone with two younger brothers and a few others when the Natives attack. We follow the brave and determined stratagems of Madeleine and her small circle. Madeleine's youthful leadership, especially of her brothers, will win the listener's admiration.
Unabridged audio CD; approximately 240 minutes; 4 CDs.


text:
Easter bank holiday weekend: All the train cancellations to be aware of
As part of a £10m programme of work to improve the South East region's rail network, there will be cancellations and changes
There will be no Southern Rail services to London Bridge or London Overground services from West Croydon over the Easter weekend, Network Rail warn.
Trains will be cancelled as part of a £10million programme of work to improve the South East region's rail network.
Because of the work, which will include 2,000 engineers working on routes, there will be changes to Thameslink, Southern, London Overground and Southeastern services this weekend (Saturday, March 31 and Sunday, April 1).
Crucially, there is to be no Southern Rail services between West Croydon, via New Cross Gate, to London Bridge on the Saturday or Easter Sunday.
Latest from Croydon
Council makes clean energy pledge
Mayor threatens protesters with police
Croydon pub zero-star hygiene rating
Tram loop extension funding doubts
There will also be no London Overground service from West Croydon, through Crystal Palace via New Cross Gate either.
This is to allow new track to be laid between New Cross Gate and Norwood Junction, Network Rail say.
Thameslink's Saturday service between London Bridge and Brighton will not run either and only a limited Southern service will operate to or from London Bridge with trains operating via Peckham Rye.
This is why there won't be tram services through Croydon town centre over Easter
It is also warned there will be no direct service between London Bridge and East Croydon on Easter Saturday.
Because of a new signalling system being commissioned around the Sutton Loop and Mitcham Junction area, there will be no Southern trains between Streatham and Epsom and also between West Croydon and Sutton and Epsom Downs.
Major Croydon cycle route to be made safer after cyclist's tragic death
John Halsall, Network Rail's South East route managing director, said: "The railway in the South East is the busiest in the country, delivering hundreds of thousands of people to and from work each day and helping support and drive the region's economy.
"It also means we have to carry out a more intensive programme of maintenance and renewals than other areas to keep people moving safely and reliably, which is what we're doing this Easter weekend.
15 things you need to be aware of when driving through Croydon
"The work we do really is essential to keeping people and goods moving in the South East and bank holidays are a quieter time, meaning we're able to keep disruption to passengers to a minimum.
"There will still be some changes to services, so please do check before you travel."
Southern Rail


You've saved. You've dreamed. Then you've saved a bit more. Now it's time for that kitchen remodel you have been craving since the moment you bought your house!
It's time to pick up the phone and get quotes from the professionals, but before you do that, take a good look at your plans. Choosing a kitchen remodeling contractor is only the first step. Many homeowners start a kitchen remodel and before long, they are in over their heads and the job is only half-finished.
Planning ahead is crucial. Before you choose a kitchen remodeling contractor, know what to expect from your kitchen remodel.
Your kitchen is no longer your own.
If you are undergoing a major remodel, you might be without a kitchen for a week or more. Kitchen remodeling contractors try not to upset the flow of your household, but you still have to deal with a kitchen that is out of commission, not to mention the presence of strangers in your house all day. You may even want to consider a temporary kitchen.
There could be budget surprises.
When you budget for your kitchen remodel, it's a good idea to estimate high, so that if you do run a bit over budget, you can cover the extra expense. Plan for the little surprises that might pop up, such as the discovery of rotting wood under those old cabinets or problems with electrical wiring.
What to do when you can't cook!
While your kitchen is in the hands of the contractors, you need to make alternate arrangements to eat -- and that can add up to a big expense. If you can stay with friends or family while the work is being done, great! But you might have to eat out during that time, or plan to plug in a microwave in another part of the house and eat microwaved foods for a few days.
It might be tempting to take a vacation while the remodel is being done. However, if the contractors need to get in touch with you or consult with you on something, it would help if you were nearby. You might consider staying in a local hotel instead.
The work might seem like a major inconvenience as the kitchen remodeling contractors take over your home for a few days. But in the end, you have a beautiful place to cook and entertain. Stay patient--your dream kitchen is almost ready!
Still have questions? Ask a kitchen contractor.


Eccalon CEO Andre Gudger was part of a panel of senior defense industry experts exploring future projects, mutual investment, and advanced manufacturing skills during the fourth annual G'day USA U.S.-Australian Dialogue on Defense Industries.
During the discussion, Andre stressed the importance of fair and balanced business relationships that benefit national interests, a reciprocal exchange of ideas and innovation, and supporting each other's technical capacities.
"As one of our closest partners, it is of the utmost importance that both of our industrial bases are in sync to ensure that the U.S. and Australia's innovative statures remain the most premiere on the planet," said Andre to a group of Australian foreign officials and entrepreneurs.
The event attracted attendees from the defense industry and Fortune 500 companies, policy makers, academics, investors, economists and national security experts. Previous event partners have included Lockheed Martin, Boeing, CMAX Advisory, Raytheon, Thales, AECOM and General Dynamics Land Systems.


text:
UAL's logo
Academic Support Online
Please use your UAL IT account to login.
Username UAL network username
Password UAL network password
If you have a UAL IT account and have any issues with logging in, please contact IT
Illustration by © Sean McSorley
A Big Welcome to all students from Academic Support!
How Academic Support Online will use your data
The following information is provided in addition to the University's privacy and transparency statement for students, and covers certain features provided through the site.
What information is being collected?
As part of UAL's systems, Academic Support Online collects the following information: Student ID
Email Address (UAL)
Location (City)
How is it collected?
Your information is uploaded to Academic Support Online from an extract provided by the University's student identification system (the UAL login system). Separate technical information such as your IP address is collected by the Google analytics platform. Academic Support Online is hosted on a dedicated server hosted by UAL IT Services.
What we will do with the data from tutorial bookings
We will use what you write on the tutorial forms to arrange any support you require in your tutorial. Please add comments to help your Academic Support (AS) tutor get a sense of what might be helpful for you in advance of the session.
Anonymised data will be used to report on AS usage patterns for the Library and Support Services department and the University's Central Planning Unit. You will not be identifiable form this information.
Who will have access to this data
What you write will be accessible to staff working in Academic Support only. It will not be shared with any member of your Course team unless you specifically request that we do so. If you would like us to liaise with a course tutor, please email your College Academic Support Administrator. Students cannot access each other's data.
Security of this data
The data will be held in the Academic Support Online database. This is held on University servers and access is limited through permission settings. All members of staff are contracted through the University and are therefore bound by the contract terms, including commitments to protect student and staff data, in accordance with the Data Protection Act – see University guidance on privacy. Your tutorial notes remain available to you on the site until the end of the academic year.
Information may be retained for up to three academic years so that patterns of student demand for tutorials can be analysed.
Please do get in touch with us on academicsupportonline@arts.ac.uk
Our commitment and legal obligations
We commit to ensuring the communications we produce are clear and accessible to the widest range of people. We recognise our obligations under The Public Sector Bodies (Websites and Mobile Applications) (No. 2) Accessibility Regulations 2018 and the Equality Act 2010.
Web standards and technologies
We have developed the Academic Support Online environment so that it works on the widest number of devices and web browsers as possible. The site has been tested with disabled users, as well as automated accessibility testing software. It is also compatible with assistive technologies.
This website uses HTML 5 (HyperText Mark-up Language) and CSS (Cascading Style Sheets) to render content. We have also used other technologies including JavaScript on certain areas of the website.
We're working hard to make the website conform to level AA of the World Wide Web Consortium's (W3C) Web Content Accessibility Guidelines 2.1 (WCAG 2.1). We recognise we have more work to do to achieve this.
We're always looking to improve the accessibility of this website. If you find any problems that aren't listed on this page or think we're not meeting the requirements of the accessibility regulations, please contact us.
If you are not able to access a service or content on the website, contact The Academic Support - academicsupportonline@arts.ac.uk. Please include details of the content you need and the required format. We will then work with the team who own the service/content to get you what you need.
To report an issue with the website or to make a complaint, please contact The Academic Support Online team - academicsupportonline@arts.ac.uk
We aim to provide you with an initial response within 48 hours and will provide clear information about how we will deal with your enquiry.
If you feel we have not answered your complaint satisfactorily, please contact us again. We will escalate your complaint to Richard Parry – r.g.parry@arts.ac.uk who will work with the team who provides the service/content to get you a response.
This statement was prepared on 24.06.2019. It was last updated on 24.06.2019.
The Equality and Human Rights Commission (EHRC) is responsible for enforcing the accessibility regulations. If you're not happy with how we respond to your complaint, contact the Equality Advisory and Support Service (EASS).


Helping With All Your Real Estate Needs - Loula is an experienced Agent working with sellers who are listing their properties as well as representing buyers with her accreditation as a Buyer's Agent. She has experience in Development and Investment Properties, New Home Construction, Land/Ranch, Residential and Commercial expertise. Loula has served her community as Collinsville Area Chamber of Commerce past President and Public Relations Director and serves on the Industrial Development Corporation and Park Board of Collinsville.
She looks forward to assisting you with your Real Estate needs.