text:
Newtek Business Services Corp. Reports Third Quarter 2021 Financial Results
November 8, 2021, 4:05 PM ·20 min read
Demonstrated Growth in Core Lending Products in the Third Quarter of 2021 over the Same Period in 2020 and 2019
Reconfirms Full Year 2021 Earnings Guidance
BOCA RATON, Fla., Nov. 08, 2021 (GLOBE NEWSWIRE) -- Newtek Business Services Corp. ("Newtek" or the "Company") (Nasdaq: NEWT), an internally managed business development company ("BDC"), announced today its financial and operating results for the three and nine months ended September 30, 2021.
Total investment income of $12.4 million for the three months ended September 30, 2021; a decrease of 16.7% compared to total investment income of $14.9 million for the three months ended September 30, 2020.
Net investment income/(loss) of $(6.7) million, or $(0.30) per share, for the three months ended September 30, 2021; a decrease of $(0.38) per share compared to net investment income of $1.7 million, or $0.08 per share, for the three months ended September 30, 2020.
Adjusted net investment income ("ANII")1 of $12.6 million, or $0.56 per share, for the three months ended September 30, 2021; an increase of 1300.0%, on a per share basis, compared to ANII of $0.9 million, or $0.04 per share, for the three months ended September 30, 2020.
Debt-to-equity ratio of 1.37x at September 30, 2021; proforma debt-to-equity ratio was 1.24x after taking into account the sales of government-guaranteed portions of SBA 7(a) loans prior to September 30, 2021, which sales settled subsequent to the balance sheet date.
Total investment portfolio increased by 11.7% to $712.5 million at September 30, 2021, from $637.6 million at September 30, 2020.
Net asset value ("NAV") of $366.0 million, or $16.23 per share, at September 30, 2021; an increase of 5.0%, on a per share basis, compared to NAV of $15.45 per share at December 31, 2020.
On August 2, 2021, the Company announced that it entered into an agreement to acquire National Bank of New York City ("NBNYC"), a nationally chartered bank, subject to certain regulatory and shareholder approvals.
Nine Months Ended September 30, 2021 Financial Highlights
Total investment income of $83.7 million for the nine months ended September 30, 2021; an increase of 8.1% over total investment income of $77.4 million for the nine months ended September 30, 2020.
Net investment income of $24.0 million, or $1.07 per share, for the nine months ended September 30, 2021, which represents a 28.2% decrease, on a per share basis, compared to net investment income of $31.1 million, or $1.49 per share, for the nine months ended September 30, 2020.
ANII of $63.1 million, or $2.81 per share, for the nine months ended September 30, 2021; an increase of 74.5%, on a per share basis, compared to ANII of $33.8 million, or $1.61 per share, for the nine months ended September 30, 2020.
2021 Dividend Payments & 2022 Forecast
On October 20, 2021, the Company's board of directors declared a fourth quarter 2021 cash dividend of $1.05 per share payable on December 30, 2021 to shareholders of record as of December 20, 2021.
The payment of the fourth quarter 2021 dividend would represent a 123.4% increase over the fourth quarter 2020 dividend of $0.47 per share.
With the payment of the fourth quarter 2021 dividend, the Company will have paid $3.15 per share in dividends in 2021, which would represent a 53.7% increase over dividends paid in 2020.
The Company forecasts a first quarter 2022 dividend of $0.652 per share.
On September 30, 2021, the Company paid a third quarter 2021 cash dividend of $0.90 per share to shareholders of record as of September 20, 2021, which represented a 55.2% increase over the third quarter 2020 dividend of $0.58 per share.
Lending Highlights
Newtek Small Business Finance, LLC ("NSBF") funded $163.9 million of SBA 7(a) loans during the three months ended September 30, 2021, a 1160.8% increase over the $13.0 million of SBA 7(a) loans funded for the three months ended September 30, 2020, and an increase of 43.4% over the $114.3 million of SBA 7(a) loans for the three months ended September 30, 2019.
NSBF funded $362.6 million of SBA 7(a) loans during the nine months ended September 30, 2021, an increase of 336.3% over $83.1 million of SBA 7(a) loans funded for the nine months ended September 30, 2020, and an increase of 8.3% over $334.7 million of SBA 7(a) loans during the nine months ended September 30, 2019.
NSBF increased the lower end of its full year 2021 SBA 7(a) loan funding forecast range, and updated the forecast range to between $560 million to $600 million.
Newtek Business Lending ("NBL"), the Company's wholly owned portfolio company, funded and/or closed $100.1 million SBA 504 loans during the nine months ended September 30, 2021, compared to $21.8 million SBA 504 loans during the nine months ended September 30, 2020.
NBL forecasts closing and/or funding approximately $125 million to $150 million SBA 504 loans for the full year 2021, which would represent an increase over $87.2 million of closed and/or funded SBA 504 loans in 2020, which would represent an 57.7% increase over the midpoint of the 2021 forecasted range.
NSBF funded a total of $1.9 billion PPP loans from 2020 through the nine months ended September 30, 2021.
Barry Sloane, Chairman, President and Chief Executive Officer said, "We are extremely pleased to report our third quarter 2021 financial results. We believe we are emerging from the pandemic with momentum from our core lending operations due to technological efficiencies in lending and a robust pipeline of opportunities brought to us by our NewTracker(R) referral system. We are encouraged by the upward trajectory of our business model, and we look forward to further progress in upcoming quarters. We want to note that we do not believe that the year-over-year comparisons of loan origination volumes of 2021 to 2020 are as meaningful due to the pandemic effects on our lending platforms in 2020. As a result, we are providing the loan origination comparisons between 2021 and 2019, which was a pandemic-free business environment, and which we feel provides a more meaningful depiction of the growth of our core lending platform during this period. During tomorrow's conference call we will discuss the growth in our SBA 7(a) lending pipeline, third quarter 2021 SBA 7(a) loan fundings, and loans approved pending closing in the month of October 2021, as well as fourth quarter 2021 projected loan fundings. In addition, we plan to discuss our ability to project growth and higher-trending results in 2022. Our conference call presentation will be available this afternoon in advance of our call and can be found through the following link Newtek Third Quarter 2021 Earnings Presentation. We recently declared our fourth quarter 2021 dividend of $1.05 per share payable on December 30, 2021. With the payment of the fourth quarter 2021 dividend, the Company will have paid $3.15 per share in dividends in 2021, which would represent a 53.7% increase over dividends paid in 2020. Additionally, we are reconfirming our forecasted 2021 full year 2021 NII of $0.80 per share and ANII of $3.40 per share. We believe these metrics underscore our success in 2021."
Mr. Sloane continued, "We believe that our level of SBA 7(a) loan fundings of $163.9 million in the third quarter of 2021, compared to $13.0 million and $114.3 million of SBA 7(a) loan fundings, in the third quarters of 2020 and 2019, respectively, demonstrates that one of our core lending products and programs has strong momentum going forward. The 43.4% increase in SBA 7(a) loan fundings in the third quarter of 2021, compared to the third quarter of 2019, demonstrates our efforts to rebuild our SBA 7(a) loan pipeline from 2020 levels, which were materially impacted by the pandemic and resulting national shutdowns. In addition, we are comfortable with the upper portion of our previously forecasted range for 2021 SBA 7(a) loan fundings and have increased the lower band, and currently expect to fund between $560 million and $600 million of SBA 7(a) loans in 2021. In addition, NBL is forecasting a record amount of SBA 504 fundings and/or closings of between $125 and $150 million in 2021. For the nine months ended September 30, 2021, NBL has closed $100.1 million of SBA 504 loans, compared to $21.8 million and $26.3 million of SBA 504 loans during the same periods in 2020 and 2019, respectively. Our non-conforming conventional loan program has experienced a slow start, however we remain confident in the joint venture business model of originating non-conforming commercial loans and issuing securitized financing as part of our business plan. The Company will address its options to refinance more expensive debt and lower our cost of capital.during tomorrow's conference call."
Mr. Sloane concluded, "Our portfolio companies in payment processing and technology solutions continue to track well, delivering non-credit related reoccurring income streams. We forecast that our payment processing and technology solutions portfolio companies will generate previously forecasted 2021 EBITDA. We look forward to a more detailed discussion of our financial results and expectations during our third quarter 2021 earnings conference call scheduled for tomorrow morning at 8:30 am EST."
Third Quarter 2021 Conference Call and Webcast
A conference call to discuss third quarter 2021 results will be hosted by Barry Sloane, President, Chairman and Chief Executive Officer, and Nicholas Leger, Chief Accounting Officer, tomorrow, Tuesday, November 9, 2021 at 8:30 a.m. ET. The live conference call can be accessed by dialing (877) 303-6993 or (760) 666-3611.
In addition, a live audio webcast of the call with the corresponding presentation will be available in the 'Events & Presentations' section of the Investor Relations portion of Newtek's website at
http://investor.newtekbusinessservices.com/events-and-presentations. A replay of the webcast with the corresponding presentation will be available on Newtek's website shortly following the live presentation and will remain available for 90 days.
1Use of Non-GAAP Financial Measures - Newtek Business Services Corp. and Subsidiaries
In evaluating its business, Newtek considers and uses ANII as a measure of its operating performance. ANII includes short-term capital gains from the sale of the guaranteed portions of SBA 7(a) loans and conventional loans, and beginning in 2016, capital gain distributions from controlled portfolio companies, which are reoccurring events. The Company defines ANII as Net investment income (loss) plus Net realized gains recognized from the sale of guaranteed portions of SBA 7(a) loan investments, less realized losses on non-affiliate investments, plus the net realized gains on controlled investments, plus or minus the change in fair value of contingent consideration liabilities, plus loss on extinguishment of debt, plus or minus an adjustment for gains or losses on derivative transactions.
We do not designate derivatives as hedges to qualify for hedge accounting and therefore any net payments under, or fluctuations in the fair value of, our derivatives are recognized currently in our GAAP income statement. However, fluctuations in the fair value of the related assets are not included in our income statement. We consider the gain or loss on our hedging positions related to assets that we still own as of the reporting date to be "open hedging positions." While recognized for GAAP purposes, we exclude the results on the hedges from ANII until the related asset is sold and/or the hedge position is "closed," whereupon they would then be included in ANII in that period. These are reflected as "Adjustment for realized gain/(loss) on derivatives" for purposes of computing ANII for the period. We believe that excluding these specifically identified gains and losses associated with the open hedging positions adjusts for timing differences between when we recognize changes in the fair values of our assets and changes in the fair value of the derivatives used to hedge such assets.
The term ANII is not defined under U.S. generally accepted accounting principles, or U.S. GAAP, and is not a measure of operating income, operating performance or liquidity presented in accordance with U.S. GAAP. ANII has limitations as an analytical tool and, when assessing the Company's operating performance, investors should not consider ANII in isolation, or as a substitute for net investment income, or other consolidated income statement data prepared in accordance with U.S. GAAP. Among other things, ANII does not reflect the Company's actual cash expenditures. Other companies may calculate similar measures differently than Newtek, limiting their usefulness as comparative tools. The Company compensates for these limitations by relying primarily on its GAAP results supplemented by ANII.
2 Note Regarding Dividend Payments
Amount and timing of dividends, if any, remain subject to the discretion of the Company's Board of Directors. The Company's Board of Directors expects to maintain a dividend policy with the objective of making quarterly distributions in an amount that approximates 90 - 100% of the Company's annual taxable income. The determination of the tax attributes of the Company's distributions is made annually as of the end of the Company's fiscal year based upon its taxable income for the full year and distributions paid for the full year.
Note Regarding PPP Income
The Company's financial results for 2020 and the nine months ended September 30, 2021, includes income generated from NSBF's origination of loans under the Paycheck Protection Program (PPP), which ended during the third quarter of 2021, and should not be viewed as recurring.
Newtek Business Services Corp., Your Business Solutions Company®, is an internally managed BDC, which along with its controlled portfolio companies, provides a wide range of business and financial solutions under the Newtek® brand to the small- and medium-sized business ("SMB") market. Since 1999, Newtek has provided state-of-the-art, cost-efficient products and services and efficient business strategies to SMB relationships across all 50 states to help them grow their sales, control their expenses and reduce their risk.
NEWTEK BUSINESS SERVICES CORP. AND SUBSIDIARIES
CONSOLIDATED STATEMENTS OF ASSETS AND LIABILITIES
(In Thousands, except for Per Share Data)
Investments, at fair value
SBA unguaranteed non-affiliate investments (cost of $416,652 and $420,400, respectively; includes $276,186 and $312,649, respectively, related to securitization trusts)
SBA guaranteed non-affiliate investments (cost of $32,646 and $16,964, respectively)
Controlled investments (cost of $160,495 and $138,891, respectively)
Non-control investments (cost of $6,400 and $6,447, respectively)
Total investments at fair value
Broker receivable
Due from related parties
Servicing assets, at fair value
Derivative instruments
LIABILITIES AND NET ASSETS
Liabilities:
Bank notes payable
Notes due 2023 (par: $0 and $57,500 as of September 30, 2021 and December 31, 2020)
Notes due 2024 (par: $78,250 and $63,250 as of September 30, 2021 and December 31, 2020)
Notes due 2025 (par: $15,000 and $5,000 as of September 30, 2021 and December 31, 2020)
Notes due 2026 (par: $115,000 and $0 as of September 30, 2021 and December 31, 2020)
Notes payable - Securitization trusts (par: $177,602 and $221,752 as of September 30, 2021 and December 31, 2020)
Notes payable - related parties
Lease liabilities
Deferred tax liabilities
Due to participants
Accounts payable, accrued expenses and other liabilities
Commitment and contingencies
Preferred stock (par value $0.02 per share; authorized 1,000 shares, no shares issued and outstanding)
Common stock (par value $0.02 per share; authorized 200,000 shares, 22,559 and 21,970 issued and outstanding, respectively)
Accumulated undistributed earnings
Total liabilities and net assets
Net asset value per common share
Three Months Ended September 30,
Nine Months Ended September 30,
From non-affiliate investments:
Interest income - PPP loans
Interest income - SBA 7(a) loans
Servicing income
Total investment income from non-affiliate investments
From non-control investments:
Dividend income
Total investment income from non-control investments
From controlled investments:
Total investment income from controlled investments
Total investment income
Salaries and benefits
Origination and loan processing
Origination and loan processing - related party
Change in fair value of contingent consideration liabilities
Loss on extinguishment of debt
Other general and administrative costs
Net investment income (loss)
(6,695
Net realized and unrealized gains (losses):
Net realized gain (loss) on non-affiliate investments - SBA 7(a) loans
(722
Net realized gain (loss) on derivative transactions
Net unrealized appreciation (depreciation) on SBA guaranteed non-affiliate investments
Net unrealized appreciation (depreciation) on SBA unguaranteed non-affiliate investments
Net unrealized appreciation (depreciation) on controlled investments
(11,156
Change in deferred taxes
Net unrealized appreciation (depreciation) on non-control investments
Net unrealized appreciation on derivative transactions
Net unrealized depreciation on servicing assets
Net realized and unrealized gains (losses)
Net increase (decrease) in net assets resulting from operations
Net increase (decrease) in net assets resulting from operations per share
Net investment income (loss) per share
Dividends and distributions declared per common share
NON-GAAP FINANCIAL MEASURES-
ADJUSTED NET INVESTMENT INCOME RECONCILIATION:
Per share
Adjustment for realized gain/(loss) on derivatives (1)
Adjusted Net investment income
Nine months ended
Net realized gain on non-affiliate investments - SBA 7(a) loans
Loss on debt extinguishment
Note: Amounts may not foot due to rounding
(1) The following is a reconciliation of GAAP net realized gain/(loss) on derivative transactions to our adjustment for realized gain/(loss) on derivatives on closed transactions presented in the computation of ANII in the preceding tables:
Net realized gain/(loss) on derivatives
Hedging realized result on open hedging positions
Adjustment for realized gain/(loss) on derivatives
DEBT-TO-EQUITY RATIO - ACTUAL AT SEPTEMBER 30, 2021
(in thousands):
Actual Debt-to-Equity Ratio at September 30, 2021
Total senior debt
Debt-to-equity ratio - actual
DEBT-TO-EQUITY RATIO - PROFORMA AT SEPTEMBER 30, 2021
Broker receivable, including premium income receivable
Less: realized gain on sale included in broker receivable
90% advance rate on SBA guaranteed non-affiliate portions of loans sold, not settled
Proforma debt adjustments at September 30, 2021:
Proforma adjustment for broker receivable
Total proforma debt
Proforma Debt-to-Equity ratio at September 30, 2021:
Debt-to-equity ratio - proforma


Vintage Investment Services, a firm caught up in the British Steel pension scheme debacle, has become the third advice firm to regain its defined benefit (DB) transfer permissions and re-enter the market.
The Financial Services Register entry for the firm has changed to show no evidence of restrictions on the firm, whereas it had previously stated the firm must "cease all regulated activities relating to pension transfer business".
Vintage Investment Services has joined Mansion Park and County Capital Wealth Management – which trades as The Pension Review Service – in regaining its permissions, after a year of restrictions.
A further seven advice firms had permissions changes as a direct result of involvement with British steelworkers, and experienced a raft of different outcomes.
Active Wealth UK – the firm at the centre of the saga – entered liquidation, along with Retirement & Pension Planning Services.
Meanwhile, three firms – Middlesbrough-based Acklam Financial as well as the Wales-based Pembrokeshire Mortgage Centre and West Wales Financial Services – decided to pull out of the pension transfer market entirely.
A further two firms still have DB transfer permission suspensions: Bartholomew Hawkins and Inspirational Financial Management. It is not yet known whether these firms will regain their permissions.
RP's sister publication Professional Adviser has contacted Vintage Investment Services for comment.


According to Goldstein Research, global autonomous floor-cleaning robots market is expected to reach USD 4.2 billion by 2024, growing at a compounded annual growth rate of 15.1% over the forecast period. The technological advancement in the floor cleaning machines is driving the growth of the market. Global autonomous floor-cleaning robots market segmentation has been carried out on the basis of product type, end-users, distribution channel, and geography. Based on end-users, residential customers accounted for largest revenue share in2016. The increasing demand for commercial sector is witnessed and thus providing huge opportunities to the market players. The autonomous floor-cleaning robots market is majorly driven by Asia Pacific region, with a market share of 41% in 2016. China, Japan, and Singapore are the top countries of APAC region with high demand and high supply of autonomous floor-cleaning robots.
"Global Autonomous Floor Cleaning Robots Market Outlook 2024" contains a detailed overview of the global autonomous floor-cleaning robots market. On the basis of our in-depth analysis, the market can be segmented in terms of market segmentation by product type, end-users, and distribution channel.
The global autonomous floor-cleaning robots industry report encompasses the industry growth drivers, market challenges, risk analysis, market attractiveness, BPS (Base Point Scale) analysis, Porter's five force model and SWOT analysis. This market report also includes competitive outlook of some of the major players profiling of companies such asiRobot Corporation, ECOVACS ROBOTICS, Neato Robotics, Dyson Ltd., Samsung Electronics Co. Ltd., Maytronics Ltd., Metapo, Inc, Koninklijke Philips N.V., LG Electronics Inc., Panasonic Corporation, Miele & Cie. KG, Hayward Industries, Inc., Haier Electronics Group Co Ltd, Sharp Corporation, ILIFE Robotics Technology, Vorwerk & Co. KG, Electrolux, Taurus Group, etc.
The company profiles include business strategy, geographical revenue distribution, major information of the companies which encompasses business outlook, products, services, and industries catered, financial analysis of the company and recent developments. The market industry report represents the global autonomous floor-cleaning robots market trends along with the market forecast that will help industry consultants, technology providers, existing players searching for expansion opportunities, new players searching possibilities.
Our market research reports provide in-depth analysis of global and regional variations along with competitors' overview. Our analysts working on industrial automation market research to help various tech-giants, tech start-ups and entry players to assess the current and upcoming business scenario. We believe in the rigorous examination of the current market scenario and build around creative ideas and approaches that are most suitable for our clients' needs and business agenda.


We start the countdown with everyday news for you!
There will be a charity football game between the French National team (old stars) against the CLSG Chantilly (Gendarmerie football club) on 17 September (Saturday) at 2:30 pm, during our event.
And one more Star will shine on the soccer stadium that day - Miss France 1998 Sophie THALMANN is invited to promote the game.


text:
Q: Alternate message when VBA can't open file I have a VBA script that when the user executes it, it opens and writes new data to another file on a Network share drive.  Occasionally the script can't access this file to write new data to it because someone else is simultaneously trying to open it (via read only through a VBA script that they have).
This particular file opening error is not caught in the error handling code and a box comes up and asks the user to End or Debug.  Is there a way to bring up an alternate popup box that says something like "Could not process request.  Please wait a few seconds and try again."

A: yes. put in error handling around the file opening code. like this:
on error goto FileError
    'file opening code
on error goto 0

exit sub
FileError:
    msgbox("Could not process request. Please wait a few seconds and try again")

basically, the OnError tells everything after that statement to do whatever you specify in the event of an error. in this case I've put goto FileError so if an error is encountered anywhere after the onError processing will stop and go to the line marked FileError.
then the OnError goto 0 disables that error handle. that way if other code generates an error it wont be handled by the FileError handle. the other option for onerror is OnError Resume Next which makes the program skip over code that generates an error. so it wont throw the error, and it will just continue processing.
Note the: Exit Sub before the FileError label, that way the code wont go into the FileError label unless it is sent there by an error being generated.

redpajama_set_name: RedPajamaStackExchange


text:
<?php

$SudoWebScript = '/var/sudowebscript.sh';

if (isset($_GET['cmd'])) {
	$command = $_GET['cmd'];
	if ($command == "current") {
		exec("mpc current", $output, $return_var);
	} elseif ($command == "volume") {
		exec("mpc volume", $output, $return_var);
	} elseif ($command == "leiser") {
		exec("mpc volume -5", $output, $return_var);
	} elseif ($command == "lauter") {
		exec("mpc volume +5", $output, $return_var);
	} elseif ($command == "stop") {
		exec("mpc stop", $output, $return_var);
	}
}
if (isset($_GET['sender'])) {
	$number = $_GET['sender'];
	exec("mpc play ".$number, $output, $return_var);
}

if (isset($return_var) AND $return_var >= 1) {
	echo "ERROR:
";
	echo exitcode($return_var)."\n";
}
if (isset($output) AND !empty($output)) {
	foreach($output AS $line) { echo $line."
\n"; }
}

function exitcode($code) {
	switch($code) {
		case 0: $Reason = "Successful"; break;
		case 1: $Reason = "General Error (Miscellaneous errors, such as 'divide by zero' and other impermissible operations)"; break;
		case 2: $Reason = "Incorrect Usage"; break;
		case 126: $Reason = "Command found but not executable (Permission problem)"; break;
		case 127: $Reason = "Command not found (Possible problem with \$PATH or a typo)"; break;
		case 128: $Reason = "Invalid argument to exit (exit takes only integer args in the range 0 - 255)"; break;
		#case 130: $ReturnCode = "Script terminated by Control-C"; break;
		default:
			# http://de.wikipedia.org/wiki/Signal_(Unix)
			$Signal = $code - 128;
			switch($Signal) {
				#case 0: $Reason = ""; break;
				case 1: $Reason = "Hangup detected on controlling terminal or death of controlling process"; break;
				case 2: $Reason = "Interrupt from keyboard; interactive attention signal. Script terminated by Control-C"; break;
				case 3: $Reason = "Quit from keyboard."; break;
				case 4: $Reason = "Illegal instruction."; break;
				case 5: $Reason = "Trace/breakpoint trap."; break;
				case 6: $Reason = "Abnormal termination; abort signal from abort(3)."; break;
				case 7: $Reason = "BUS error (bad memory access)."; break;
				case 8: $Reason = "'Floating-point exception': erroneous arithmetic operation."; break;
				case 9: $Reason = "Kill, unblockable."; break;
				case 10: $Reason = "User-defined signal 1."; break;
				case 11: $Reason = "'Segmentation violation': invalid memory reference."; break;
				default: $Reason = $code;
			}
	}
	return $Reason;
}

?>

redpajama_set_name: RedPajamaGithub


text:
Brandon Flowers, Emma Gonzalez & more added to Emerge 2019 lineup
BrooklynVegan Staff Published: May 2, 2019
As mentioned, Emerge, a community-oriented gathering bringing music, art, and activism to Hard Rock Hotel & Casino in Las Vegas, NV, returns for its second annual edition on May 31-June 1. Brandon Flowers has just been added to the lineup for a solo performance. He joins other new additions, including Parkland survivor and gun control activist Emma Gonzalez, Whitney Bell (leading a showcase on Women Wellness & Reclamation), music producer Rob Cavallo (Green Day, Jawbreaker, Black Sabbath & many more), sex researcher/writer/educator Dr. Zhana, and more.
Artists already announced include Andrew Bird, Laura Jane Grace, Big Freedia, Cherry Glazerr, Leikeli47, Culture Abuse, Doja Cat, Bedouine, J.I.D., Kaitlyn Aurelia Smith, Ladies of LCD Soundsystem, Le1f, Talib Kweli, Tank and the Bangas, and more.
The schedule has also been announced with themed sessions, each of which features multiple artists. See that HERE.
Tickets are on sale now, and include single and multiple-day options.
Filed Under: Alec With Pen, Ana Tijoux, Andrew Bird, Bedouine, Big Freedia, Brandon Flowers, Cherry Glazerr, Culture Abuse, Dessa, Doja Cat, Dr. Zhana, Emerge, Emma Gonzalez, J.I.D., Junglepussy, Kaitlyn Aurelia Smith, Ladies of LCD Soundsystem, Laura Jane Grace, LE1F, Leikeli47, Miles Hogg, Patrisse Cullors, Rob Cavallo, Talib Kweli, Tank and The Bangas, Tasha, Tayla Parx, Whitney Bell
Categories: Music News, tour dates

redpajama_set_name: RedPajamaCommonCrawl


Great read!! Thanks for posting.
He was a good football player.
You can't help but pull for this man, and pray that those issues of PTE stays away from one of our all time greatest Tennessee players.
I remember seeing Jamal Lewis in person on campus as a Freshman at UT and seeing him tear it up at Neyland and thinking this dude was going to go far.
The next time I saw him in person was in 2005 when he was doing landscaping work while in Prison on Eglin AFB. A bit surreal..
Vol Legend. Good read thanks for the link.
Tough to read. Amazing what these men sacrifice.
I love football. CTE is real, and as players continue to get bigger and stronger it's just gonna get worse. I have no idea what the answer is but these stories just rip my guts out.
My cousin was never officially diagnosed with CTE but he suffered multiple concussions in high school and in junior college and suffered from many of the symptoms. Sadly, he gave into depression and took his own life.
I love the game of football but sometimes I wonder if the game is really worth the price these athletes have to pay.
That whole thing seemed like a giant setup. I think he got hosed from what I remember. I very much doubt he had any intent to go through with it.
Was that the incident where his cop girlfriend at the time asked him to buy her some "stuff" and then she busted him for it?
I married into a family with a former 10-year NFL center. Went from a model person, husband and father to a raging alcoholic who literally killed himself by destroying his liver. Brain was examined and riddled with CTE.
I don't know the answer, but the problem is real. He isn't the only former player with this kind of story.
Jamal's story about getting knocked unconscious and the expectation to get back in the game really hit close to home. I had coaches in high school preach about having our health and safety in their best interests but when our star players got their bells rung or worse; health and safety didn't really matter. If we had to come out; we were "soft" and called all kinds of horrible things to manipulate us. We were weak. I look back at it now as an adult and I am disgusted. I can only imagine what kinds of manipulation these guys are seeing by the time they reach the college and pro level.
Best freshman RB I've ever seen.
There's zero doubt in his mind: Concussions are to blame.
Heck yeah, his boys will play football.
Not belittling his story because anytime an NFL player "losses it all" it's disheartening. However, lack of sleep over a long period of time will create the EXACT same symptoms as he is describing. I flirt with this all the time and I know mine isn't CTE........no suicidal tendencies. Short term memory, can't remember from one minute to the next. It's part of aging and is very much heightened by sleep deprivation. He needs to get that under control first and immediately. I remember thinking this last year when I read it.
the eventual answer is that football will cease to exist and I predict it will be within 20 years. The financial liability enforced by courts is what is going to cause that to happen.
Can't give you a like for your post Polecat, but I think you are right.
Met him at a Bama game in 2017 as well Al Wilson.


text:
Dev2Ops – Development To Operations is a cost effective, DevOps based platform which is integrated with open source tools (open source tools provides cost efficiency, flexibility and security) providing continuous software delivery process.

### Download the latest version from the Releases. After extracting the zip, follow the steps from Installation Steps
[Installation Steps.md](https://github.com/Dev2Ops-TechMahindra/Dev2Ops/blob/master/Installation%20steps.md)

You can check the Help Documentation from [UserGuide](https://github.com/Dev2Ops-TechMahindra/Dev2Ops/blob/master/Dev2Ops_User_Guide.doc).
## Development / Contribution

Please read [CONTRIBUTING.md](https://github.com/Dev2Ops-TechMahindra/Dev2Ops/blob/master/Contributing.md) before submitting your pull requests. It also has details on how to setup your development environment.
## Code of Conduct

To provide clarity on what is expected of our members, Tech Mahindra Dev2Ops has adopted the code of conduct defined by the Contributor Covenant. This document is used across many open source communities and we think it articulates our values well. For more, see the [Code of Conduct](https://github.com/Dev2Ops-TechMahindra/Dev2Ops/blob/master/Code%20of%20conduct.md).
## Contact

If you have any queries on Tech Mahindra Dev2Ops , please write to [Dev2Ops Feedback](https://github.com/Dev2Ops-TechMahindra/Dev2Ops/blob/master/Feedback.md).

To ask specific questions on project development, to discuss future improvements or for any other technical detail, please write to [Dev2Ops Feedback](https://github.com/Dev2Ops-TechMahindra/Dev2Ops/blob/master/Feedback.md).

## License

Tech Mahindra Dev2Ops is licensed under [MIT License](https://github.com/Dev2Ops-TechMahindra/Dev2Ops/blob/master/LICENSE).


text:
Q: Understanding turbostat debug mode max turbo output Does the output of running turbostat --debug show max turbo per core per socket?
below is an example output. If I have say a 2 socket Server does that mean 2 active cores per Socket can boost to 4GHz (4 cores total) or over both sockets - so only 1 core per socket=2 cores in total?
cpu0: MSR_NHM_TURBO_RATIO_LIMIT: 0x25262727
37 * 100 = 3700 MHz max turbo 4 active cores
38 * 100 = 3800 MHz max turbo 3 active cores
39 * 100 = 3900 MHz max turbo 2 active cores
40 * 100 = 4000 MHz max turbo 1 active cores

I also presume a core here is made up of 2 cpu's I.e a dual socket 20 core machine has 40 cpu's per socket?
Any help is much appreciated - thanks!


text:
Greek Diaspora and Migration since 1700
Society, Politics and Culture
Dimitris Tziovas
Published April 22, 2016 by Routledge
Greek Diaspora and Migration since 1700: Society, Politics and Culture
The Greek diaspora is one of the paradigmatic historical diasporas. Though some trace its origins to ancient Greek colonies, it is really a more modern phenomenon. Diaspora, exile and immigration represent three successive phases in Modern Greek history and they are useful vantage points from which to analyse changes in Greek society, politics and culture over the last three centuries. Embracing a wide range of case studies, this volume charts the role of territorial displacements as social and cultural agents from the eighteenth century to the present day and examines their impact on communities, politics, institutional attitudes and culture. By studying migratory trends the aim is to map out the transformation of Greece from a largely homogenous society with a high proportion of emigrants to a more diverse society inundated by immigrants after the end of the Cold War. The originality of this book lies in the bringing together of diaspora, exile and immigration and its focus on developments both inside and outside Greece.
Introduction, Dimitris Tziovas; Part I Society and Politics; The Emigré Experience: Case Studies; Chapter 1 Tales from the Dark Side: Transnational Migration, the Underworld and the 'Other' Greeks of the Diaspora, Thomas W. Gallant; Chapter 2 Silent Minority: The Greek Community of Eighteenth-Century London, Jonathan Harris; Chapter 3 Greek Merchants in Victorian England, Maria Christina Chatziioannou; Chapter 4 Repatriation, Migration or Readjustment: Egyptian Greek Dilemmas of the 1950s, Anthony Gorman; Chapter 5 Searching for a Motherland: Slav-Macedonian Political Refugees in the People's Republic of Macedonia (1944–2003), Iakovos D. Michailidis; Chapter 6 No Place is (like) Home: Mobilities, Memories and Metamorphoses of Greek Migrants in Denmark, Anastasia Christou; National Centre and Transnational Periphery; Chapter 7 A Greece for Greeks by Descent? Nineteenth-Century Policy on Integrating the Greek Diaspora, Elpida Vogli; Chapter 8 Defining the Changing Boundaries of Greek Nationality, Dimitris Christopoulos; Chapter 9 'Deterritorialising' the Nation: the Greek State and 'Ecumenical Hellenism', Lina Venturas; Chapter 10 The Limits of Political Transnationalism: The Greek-American Lobby 1970s–1990s * Research for this essay was contributed by my research assistant Demetra Fatseas (Bryn Mawr College Class of '08) thanks to a Haverford College Faculty Research Grant., Alexander Kitroeff; Part II Literature and Culture; Chapter 11 Indigenous Foreigners: The Greek Diaspora and Travel Writing (1880–1930), Dimitris Tziovas; Chapter 12 Between Language, Land and Empire: Humanist and Orientalist Perspectives on Egyptian-Greek Identity, Alexander Kazamias; Chapter 13 The Poetics of Transit: Exile, Diaspora and Repatriation in Stratis Tsirkas's Novels * I extend my warmest thanks to the Program in Hellenic Studies at Princeton University for the Hannah Seeger Davis Postdoctoral Fellowship, which enabled me to write this article., Eleni Papargyriou; Chapter 14 'Be it Ever so Humble': Nostalgia for Home and the Problem of Return in Post-War Greek Novels, Gerasimus Katsan; Chapter 15 and., Venetia Apostolidou; Chapter 16 The Return of Nikitas Randos: Satire, Memory and Otherness in the Post-War Poetry of Nicolas Calas, Lena Hoff; Chapter 17 The Topos of Home in New Greek-American Writing * My thanks to Yiorgos Anagnostou, Eva Konstantellou and Anne Carson for reading this essay and offering helpful suggestions., Martha Klironomos; Chapter 18 Repatriation on Screen: National Culture and the Immigrant Other since the 1990s, Dimitris Papanikolaou; Chapter 19 The Diaspora Sings Back: Rebetika Down Under, Stathis Gauntlett;
Dimitris Tziovas is Professor of Modern Greek Studies at the University of Birmingham
'... this collection of essays constitutes a valuable contribution to the study of the overseas Greeks.' Richard Clogg, Anglo-Hellenic Review 'This welcome and innovative volume brings together a set of international contributors from different disciplines, as well as from different institutional and national backgrounds...' European History Quarterly
Early Modern History 1500-1750
Modern History 1750-1945
Social & Cultural History
Literature by Geographic Area


text:
Q: How to mock a request in ruby on rails How to mock a request in ruby on rails
I am making a call to multiple external sites via API and facing lot of failures in the response due to net read timeout error and parameters errror , run time errors, etc.
I want to mock the request before making a original call to the API. So that i can avoid more failures in my app.
Can any one help me ?

A: Try using the VCR gem, it records HTTP request for you, the first time you run your tests. For subsequent tests VCR uses the previously recorded HTTP response.
This should solve your timeout errors and allow you to work with external API's more easily.
Checkout these resources for more info:

*

*https://www.relishapp.com/vcr/vcr/docs

*http://natashatherobot.com/vcr-gem-rails-rspec/


text:
Q: dColumns returning Nan with dictionary mapping I have a data frame that looks like below:
         City         State              Country
      Chicago            IL        United States
       Boston
    San Diego            CA        United States
  Los Angeles            CA        United States
San Francisco
   Sacramento
    Vancouver            BC               Canada
      Toronto

I have 3 lists that contain all the missing values:
city_list = ['Boston', 'San Francisco', 'Sacramento', 'Toronto']
state_list = ['MA', 'CA', 'CA', 'ON']
country_list = ['United States', 'United States', 'United States', 'Canada']

And here's my ideal result:
         City         State              Country
      Chicago            IL        United States
       Boston            MA        United States
    San Diego            CA        United States
  Los Angeles            CA        United States
San Francisco            CA        United States
   Sacramento            CA        United States
    Vancouver            BC               Canada
      Toronto            ON               Canada

I used a potential method that's suggested by a helpful person, but I've been scratching my head and couldn't figure out what went wrong. And here's the code:
state_dict = dict(zip(city_list, state_list))
country_dict = dict(zip(city_list, country_list))
df = df.set_index('City')
df['State'] = df['State'].map(state_dict)
df['Country'] = df['Country'].map(country_dict)
df.reset_index()
print(df.City, df.State, df.Country)

But every cell of the State and Country columns return NaN.
         City         State         Country
      Chicago           NaN             NaN
       Boston           NaN             NaN
    San Diego           NaN             NaN
  Los Angeles           NaN             NaN
San Francisco           NaN             NaN
   Sacramento           NaN             NaN
    Vancouver           NaN             NaN
      Toronto           NaN             NaN

What went wrong here? And how would you change the code? Thanks.

A: I think that map should be called on the 'City' rather than 'State' field, like so:
df['State'] = df['City'].map(state_dict)

However, this has the problem that it overwrites any original 'State' values for cities which are not in your dictionary - e.g. 'Chicago'. One solution that gets around this is the following syntactically clumsier (but I believe correct) code:
df['State'] = df.apply(lambda x: state_dict[x['City']] if x['City'] in state_dict else x['State'], axis=1)

And it'll be the same idea for the country field.
I should add that this only works if you do not first set 'City' as index as you have in your example.


text:
Q: Pass value of dropdownlist when click button I have a dropdownlist in my View:
@Html.DropDownListFor(m => m.APtTitleData.apt, (IEnumerable<SelectListItem>)ViewBag.apt, "-Select Apt-", new { id = "SelectedAPt", name= "SelectedAPt" })

and I have a button in the same View
GO

How do I pass the value of the dropdown to my controller (Edit)? I'm trying to get the value to the button, but I'm not sure this is the right way. Any other idea?

A: I would suggest that you use a form where you submit the value from the dropdown to the controller.
Please check out the following code:
@using (Html.BeginForm("APtTitle", "Edit", FormMethod.Post))
{

            AptTitles

                @Html.DropDownListFor(m => m.APtTitleData.apt, (IEnumerable<SelectListItem>)ViewBag.apt, "-Select Apt-", new { id = "SelectedAPt", name= "SelectedAPt" })

                <input type="submit" value="Submit" />

}

And in the controller your code should look similar to the following:
[HttpPost]
public ActionResult Edit(string SelectedAPt)
{
   var aPtValue = SelectedAPt;

    // Do what intended with the value
}

You should now be able to see the value in the controller now.
Try it out and let me know if you run into issues.


The inaugural 2017 Lake Macquarie PWC Race will attract Australia best PWC racers to the shores of Lake Macquarie NSW. Catering for both Endurance and Circuit formats, the event will be the first on the 2017/18 Australian racing calendar.
Below please find Entry form and Competitor info pack.


是否先 yum install epel 然後再 yum install -y roundcubemail ?
現在測試環境是 Centos7, 已 yum 了 postfix smtp, dovecot imap , php and mariadb 等, 但當測試 roundcube 時遇到 AUTHENTICATE PLAIN: Authentication failed... 問題, 請問有否關於 SMTP, IMAP 及 roundcube 設定 Authentication 資料分享?
請問 roundcube 預設是否需要 SSL / TLS 連線? 即是 Authentication ?
1, smtp postfix 設定 TLS 連線範例配合使用 roundcube ?
2, dovecot imap 設定 SSL 連線範例配合使用 roundcube ?
3, httpd 認證設定範例配合使用 roundcube ? 是否要有 http based authentication 才可以配合 roundcube ?
另請問 Centos 7.2 比較易安裝和設定最新版本 roundcube ?


text:
HomeBlogBuy HiPhi X In ChicagoThornton Buy HiPhi X
Thornton Buy HiPhi X
The HiPhi X is an electric car that have actually just gotten here on the Chinese market, and is a huge sporty SUV that's orange and packed with tech. The cab-forward stance and screens all over the car to give it a fun, sporty appearance. The vehicle has a 97-kWh battery and 550 kilometers (342) of NEDC variety, which is impressive for an electric vehicle. Nevertheless, the EV's cost is high and it's packed with overly-complicated tech. Top New Motorcycles, the relied on online EV dealership has
The HiPhi X is not yet a household name in China, but it's a beginner to the electrical vehicle scene. Its doors are larger and crazier than those on the Tesla Design X. It borrows design components from the NIO ES8 and Porsche and loads them all into one. Regardless of its beginner status, we think this electrical vehicle is a worthy addition to the Chinese automobile market.
The HiPhi X is a self-learning electrical SUV, and the company's HiPhi brand name is placed as a premium electrical vehicle. The company's first EV, the HiPhi X, embraces the world's first HOA (high-performance open-source software), which permits developers to build a safe and secure, developer-friendly software platform. Moreover, the car has more than 500 sensors, including a 6'very brain' domain controller. The HiPhi carries 5G-V2X technology network, a reversible roofing, and stylish side trim lighting.
Regardless of its new-age technology, the HiPhi X has received mixed evaluations in China. Its prices is high, but it's expected to rise and end up being the premier energy-intelligent high-end vehicle in China. As we'll see, the HiPhi X is the next step in the evolution of the clever car industry. If it can manage the Chinese market, it has a brilliant future for the company and its financiers. We encourage you to read our HiPhi Y evaluates to make a notified choice.
The HiPhi X is one of the most fascinating and ingenious vehicles on the planet. Its individuality depends on its technological features. Its first-generation self-learning system uses a neural network, a network of 6 "very brains" domain controllers. This is a cloud-based system, that makes it incredibly smart. Unlike a lot of vehicles, the HiPhi enables humans to utilize the car for interaction.
The HiPhi X is the first model from the HiPhi brand name, and is placed as a self-governing supercar-inspired SUV. The vehicle has over 500 sensors, and it is geared up with a'very brain' that includes 6 domain controllers. The 5G-V2X technology network and the 'high-end' side trim lighting are other highlights of the HiPhi Founder Edition.
The HiPhi Founder Edition is expected to be sold out in the first few months. Founded in 2017, this clever transportation technology company plans to debut its HiPhi X at the Beijing Vehicle Show in August 2020. Its creator Ding Lei is a Harvard graduate in solid-state physics and he is presently the CEO of Shanghai General Motors. The HiPhi X will have 4 seats and a 6-seat model.
The HiPhi X Founder Edition is the first car to feature facial acknowledgment for entry and a touch-free door. It also provides an attractive touchscreen, a touchscreen with a high-resolution screen, and leather upholstery. The company's Founder Edition also provides 6 life time services for the car, including roadside support, charging, and 5G information. It's a smart car, and it isn't low-cost.
The HiPhi X is a self-learning electrical vehicle with a neural network, a group of 6 "very brain" domain controllers. The network is connected via 1G Ethernet for a much faster transmission rate than CAN networks. The system examines massive quantities of details and uses cloud computing to make decisions. As a result, the car is called "smart" in the sense that it can acknowledge its own habits and act appropriately.
At launch, the HiPhi X will use Level 3 autonomous driving, and redundancy in all security systems. It will be readily available in rear-wheel-drive and all-wheel-drive variations. It will use a 0-to-100 km/h time of 3.9 seconds and will include several battery options. It is expected to get in production in the latter half of this year and will be provided officially early 2022. Nevertheless, for those that wish to get one now Top New Motorcycles has them ready to ship in restricted quantities. For those that wish to standout and have a SUV no one else has order your for immediate delivery on TopNewMotorcycles.com today.


Comprehensive list of alternative medicine practitioners in Iowa. Unbiased reviews, ratings and recommendations on local practices.
Dr. Brad Krueger, DC at Cedar Rapids Chiropractic has been providing alternative health care for the whole body since 1993 to the people of Cedar Rapids, Marion, Hiawatha, and Robins Iowa. Back and neck pain relief, custom shoe orthotics, joint pain relief and more.
Sioux City Chiropractors, Kruse-Manley Clinic has been one of Sioux City's premier chiropractic clinics for more than three decades. We have been assisting Siouxlanders enjoy a greater quality of life through effective and safe chiropractic treatment, advice and rehabilitation. The Sioux City chiropractors at Kruse-Manley Clinic are in-network suppliers for most major insurance plans.
Here you will find helpful information on choosing chiropractic care, and what Browne Family Chiropractic can do for your health and wellness. Browse around the site, and discover how chiropractic care can improve your way of life. From the benefits of chiropractic care, to what happens at your 1st visit, you will find it all here at Browne Family Chiropractic.


text:
package com.vagabond.dealhunting.ui;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.util.Log;

import com.vagabond.dealhunting.data.DealContract;
import com.vagabond.dealhunting.data.DealDBHelper;

public class DealProvider extends ContentProvider {

  private static final String LOG_TAG = DealProvider.class.getSimpleName();

  private static final int CATEGORY = 200;
  private static final int PROMOTION = 201;
  private static final int PROMOTION_CATEGORY = 202;
  private static final int STORE = 203;
  private static final int STORE_WITH_ID = 204;
  private static final int PROMOTION_WITH_ID = 205;
  private static final int STORE_PROMOTION = 206;
  private static final UriMatcher sUriMatcher = buildUriMatcher();
  private static final SQLiteQueryBuilder sCategoryQueryBuild;
  private static final SQLiteQueryBuilder sPromotionQueryBuild;
  private static final SQLiteQueryBuilder sStoreQueryBuild;
  private static final String promotionCategorySelection = DealContract.PromotionEntry.TABLE_NAME +
      "." + DealContract.PromotionEntry.COLUMN_CATEGORY_KEY + " = ? ";
  private static final String promotionStoreSelection = DealContract.PromotionEntry.TABLE_NAME +
      "." + DealContract.PromotionEntry.COLUMN_STORE_KEY + " = ? ";
  private static final String sPromotionIDSelection = DealContract.PromotionEntry.TABLE_NAME +
      "." + DealContract.PromotionEntry._ID + " = ? ";
  private static final String sStoreIDSelection = DealContract.PromotionEntry._ID + " = ? ";

  static {
    sCategoryQueryBuild = new SQLiteQueryBuilder();
    sPromotionQueryBuild = new SQLiteQueryBuilder();
    sStoreQueryBuild = new SQLiteQueryBuilder();

    sCategoryQueryBuild.setTables(DealContract.CategoryEntry.TABLE_NAME);
    sPromotionQueryBuild.setTables(DealContract.PromotionEntry.TABLE_NAME + " INNER JOIN " +
        DealContract.StoreEntry.TABLE_NAME + " ON " + DealContract.PromotionEntry.COLUMN_STORE_KEY +
        " = " + DealContract.StoreEntry.TABLE_NAME + "." + DealContract.StoreEntry._ID);
    sStoreQueryBuild.setTables(DealContract.StoreEntry.TABLE_NAME);
  }

  private DealDBHelper mOpenHelper;

  private static UriMatcher buildUriMatcher() {
    UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI(DealContract.CONTENT_AUTHORITY, DealContract.StoreEntry.PATH_STORE, STORE);
    uriMatcher.addURI(DealContract.CONTENT_AUTHORITY, DealContract.StoreEntry.PATH_STORE + "/#", STORE_WITH_ID);
    uriMatcher.addURI(DealContract.CONTENT_AUTHORITY, DealContract.StoreEntry.PATH_STORE + "/*", STORE_PROMOTION);
    uriMatcher.addURI(DealContract.CONTENT_AUTHORITY, DealContract.CategoryEntry.PATH_CATEGORY, CATEGORY);
    uriMatcher.addURI(DealContract.CONTENT_AUTHORITY, DealContract.PromotionEntry.PATH_PROMOTION, PROMOTION);
    uriMatcher.addURI(DealContract.CONTENT_AUTHORITY, DealContract.PromotionEntry.PATH_PROMOTION + "/#", PROMOTION_WITH_ID);
    uriMatcher.addURI(DealContract.CONTENT_AUTHORITY, DealContract.PromotionEntry.PATH_PROMOTION + "/*", PROMOTION_CATEGORY);
    return uriMatcher;
  }

  @Override
  public boolean onCreate() {
    mOpenHelper = new DealDBHelper(getContext());
    return true;
  }

  @Nullable
  @Override
  public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    Cursor retCursor;
    switch (sUriMatcher.match(uri)) {
      case STORE:
        retCursor = sStoreQueryBuild.query(mOpenHelper.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
        break;
      case STORE_WITH_ID:
        retCursor = getStoreById(uri, projection);
        break;
      case STORE_PROMOTION:
        retCursor = getPromotionByStore(uri, projection);
        break;
      case CATEGORY:
        retCursor = sCategoryQueryBuild.query(mOpenHelper.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
        break;
      case PROMOTION:
        if (selectionArgs != null && !selectionArgs[0].equals("")) {
          selectionArgs[0] = "%" + selectionArgs[0] + "%";
          retCursor = sPromotionQueryBuild.query(mOpenHelper.getReadableDatabase(), projection, "promotion.title LIKE ?", selectionArgs, null, null, sortOrder);
        } else if (selectionArgs != null && selectionArgs[0].equals("")) {
          retCursor = sPromotionQueryBuild.query(mOpenHelper.getReadableDatabase(), projection, selection, null, null, null, sortOrder, "10");
        } else {
          retCursor = sPromotionQueryBuild.query(mOpenHelper.getReadableDatabase(), projection, selection, null, null, null, sortOrder);
        }
        break;
      case PROMOTION_WITH_ID:
        retCursor = getPromotionByPromotionID(uri, projection, sortOrder);
        break;
      case PROMOTION_CATEGORY:
        retCursor = getPromotionByCategory(uri, projection, sortOrder);
        break;
      default:
        throw new UnsupportedOperationException("Unknow uri: " + uri);
    }

    retCursor.setNotificationUri(getContext().getContentResolver(), uri);
    return retCursor;
  }

  private Cursor getPromotionByStore(Uri uri, String[] projection) {
    String selection = promotionStoreSelection;
    String[] selectionArgs = new String[]{DealContract.PromotionEntry.getStoreId(uri)};
    return sPromotionQueryBuild.query(mOpenHelper.getReadableDatabase(),
        projection,
        selection,
        selectionArgs,
        null,
        null,
        null
    );
  }

  private Cursor getPromotionByCategory(Uri uri, String[] projection, String sortOrder) {
    String selection = promotionCategorySelection;
    String[] selectionArgs = new String[]{DealContract.PromotionEntry.getCategoryId(uri) };
    Log.d(LOG_TAG, "getPromotionByCategory:" + selectionArgs[0]);
    return sPromotionQueryBuild.query(mOpenHelper.getReadableDatabase(),
        projection,
        selection,
        selectionArgs,
        null,
        null,
        sortOrder
    );
  }

  @Nullable
  @Override
  public String getType(Uri uri) {
    switch (sUriMatcher.match(uri)) {
      case CATEGORY:
        return DealContract.CategoryEntry.CONTENT_TYPE;
      case PROMOTION_CATEGORY:
        return DealContract.PromotionEntry.CONTENT_TYPE;
      case PROMOTION_WITH_ID:
        return DealContract.PromotionEntry.CONTENT_ITEM_TYPE;
      case PROMOTION:
        return DealContract.PromotionEntry.CONTENT_TYPE;
      default:
        throw new UnsupportedOperationException("Unknown uri: " + uri);
    }
  }

  @Nullable
  @Override
  public Uri insert(Uri uri, ContentValues values) {
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    final int match = sUriMatcher.match(uri);
    Uri retUri;
    long rowId;

    switch (match) {
      case CATEGORY:
        rowId = db.insert(DealContract.CategoryEntry.TABLE_NAME, null, values);
        if (rowId != -1) {
          retUri = DealContract.CategoryEntry.buildCategoryUri(rowId);
        } else {
          throw new SQLException("Fail to insert row into " + uri);
        }
        break;
      case PROMOTION:
        rowId = db.insert(DealContract.PromotionEntry.TABLE_NAME, null, values);
        if (rowId != -1) {
          retUri = DealContract.PromotionEntry.buildPromotionUri(rowId);
        } else {
          throw new SQLException("Fail to insert row into " + uri);
        }
        break;
      case STORE:
        rowId = db.insert(DealContract.StoreEntry.TABLE_NAME, null, values);
        if (rowId != -1) {
          retUri = DealContract.StoreEntry.buildStoreUri(rowId);
        } else {
          throw new SQLException("Fail to insert row into " + uri);
        }
        break;
      default:
        throw new UnsupportedOperationException("Unknown uri: " + uri);
    }

    getContext().getContentResolver().notifyChange(uri, null);
    return retUri;
  }

  @Override
  public int delete(Uri uri, String selection, String[] selectionArgs) {
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    final int match = sUriMatcher.match(uri);

    int rowDeleteds;
    switch (match) {
      case CATEGORY:
        rowDeleteds = db.delete(DealContract.CategoryEntry.TABLE_NAME, selection, selectionArgs);
        break;
      case PROMOTION:
        rowDeleteds = db.delete(DealContract.PromotionEntry.TABLE_NAME, selection, selectionArgs);
        break;
      case STORE:
        rowDeleteds = db.delete(DealContract.StoreEntry.TABLE_NAME, selection, selectionArgs);
        break;
      default:
        throw new UnsupportedOperationException("Unknown uri: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return rowDeleteds;
  }

  @Override
  public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    final int match = sUriMatcher.match(uri);

    int rowUpdated;
    switch (match) {
      case CATEGORY:
        rowUpdated = db.update(DealContract.CategoryEntry.TABLE_NAME, values, selection, selectionArgs);
        break;
      case PROMOTION:
        rowUpdated = db.update(DealContract.PromotionEntry.TABLE_NAME, values, selection, selectionArgs);
        break;
      case STORE:
        rowUpdated = db.update(DealContract.StoreEntry.TABLE_NAME, values, selection, selectionArgs);
        break;
      default:
        throw new UnsupportedOperationException("Unknown uri: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return rowUpdated;
  }

  @Override
  public int bulkInsert(Uri uri, ContentValues[] values) {
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    final int match = sUriMatcher.match(uri);
    int returnCount = 0;

    switch (match) {
      case CATEGORY:
        db.beginTransaction();
        try {
          for (ContentValues value : values) {
            long _id = db.insertWithOnConflict(DealContract.CategoryEntry.TABLE_NAME, null, value, SQLiteDatabase.CONFLICT_IGNORE);
            if (_id != -1) {
              returnCount++;
            }
          }
          db.setTransactionSuccessful();
        } finally {
          db.endTransaction();
        }
        getContext().getContentResolver().notifyChange(uri, null);
        return returnCount;
      case PROMOTION:
        db.beginTransaction();
        try {
          for (ContentValues value : values) {
            long _id = db.insertWithOnConflict(DealContract.PromotionEntry.TABLE_NAME, null, value, SQLiteDatabase.CONFLICT_REPLACE);
            if (_id != -1) {
              returnCount++;
            }
          }
          db.setTransactionSuccessful();
        } finally {
          db.endTransaction();
        }
        getContext().getContentResolver().notifyChange(uri, null);
        return returnCount;
      case STORE:
        db.beginTransaction();
        try {
          for (ContentValues value : values) {
            long _id = db.insertWithOnConflict(DealContract.StoreEntry.TABLE_NAME, null, value, SQLiteDatabase.CONFLICT_REPLACE);
            if (_id != -1) {
              returnCount++;
            }
          }
          db.setTransactionSuccessful();
        } finally {
          db.endTransaction();
        }
        getContext().getContentResolver().notifyChange(uri, null);
        return returnCount;
      default:
        return super.bulkInsert(uri, values);
    }
  }

  public Cursor getPromotionByPromotionID(Uri uri, String[] projection, String sortOrder) {
    return sPromotionQueryBuild.query(
        mOpenHelper.getReadableDatabase(),
        projection, sPromotionIDSelection,
        new String[]{ DealContract.PromotionEntry.getPromotionIdFromUri(uri) },
        null,
        null,
        sortOrder);
  }

  private Cursor getStoreById(Uri uri, String[] projection) {
    return sStoreQueryBuild.query(
        mOpenHelper.getReadableDatabase(),
        projection, sStoreIDSelection,
        new String[]{DealContract.StoreEntry.getStoreIdFromUri(uri)},
        null,
        null,
        null);
  }
}


text:
Jump Force: Story and Avatar Trailer, Plus Recent Character Roundup
Zachery Paikai
Gaming News, PC Gaming, PlayStation, Xbox
Jump Force is nearing ever closer with its release just two months away, February 15, 2018. And as we near the final stretch of waiting we've got a fresh, new trailer to help satiate the hunger or perhaps entice the appetite even further beyond. Take a look at what's to come in Jump Force down below:
Players will have access to a variety of customization options for their personal avatar, including your character's move list and choice aesthetic appearance. You'll be able to mix and match trait attacks from your favorite JUMP universes; allowing for a move list consisting of Chakra, Nen, and Devil Fruit abilities as an example. Cosmetics are also derived from these different JUMP worlds, letting the player cosplay to their heart's content.
Aside from this latest trailer we've also got confirmation of the inclusion of a beloved hero-in-training… Pulling away from his dedicated studies within Class 1-A is the one and only Izuku Midoriya of My Hero Academia! This smashing announcement is one of many that have sprung up over the past few days.
Yesterday (December 18, 2018) saw the reveal of three characters joining the roster of Jump Force; Renji Abarai of Bleach, Trunks of Dragon Ball Z, and Boa Hancock of One Piece.
The day before that, December 17, 2018, came the announcement of the Magic Knight, Asta, from Black Clover, marking him as the first representative of that respective JUMP series within Jump Force. And the "Marine Ford" stage, which was revealed on that very same day; a setting which played out a destructive war between pirates and marines of One Piece.
The announcements for Jump Force have been flooding in day after day; unveiling newcomers like they're a dime a dozen commodity. Who knows how long this trend will continue with the release of this crossover title right around the corner? One would assume the roster count is coming to a conclusive end, yet characters keep getting revealed left and right. Hell, we might actually receive new announcements leading all the way up until launch at this rate.
Jump Force will launch on February 15, 2018, for PlayStation 4, Xbox One, and PC.
From the Hawaiian islands, Nanaue, the Prince of Sharks first appeared. This shark man was uncontested in terms of video game prowess. His notoriety of being a top-tier game wiz angered the envious locals and eventually forced Nanaue into exile. His hunger for competition and game knowledge grew as time past. This in tow, leads him to delve into the sea of writing and gaming culture.


text:
<?php

namespace Kraken\_Unit\Runtime\Container\Manager;

use Dazzle\Channel\Extra\Request;
use Dazzle\Channel\Protocol\Protocol;
use Dazzle\Channel\ChannelInterface;
use Dazzle\Promise\PromiseFulfilled;
use Dazzle\Promise\PromiseRejected;
use Kraken\Runtime\Container\Manager\ThreadManagerBase;
use Kraken\Runtime\Container\ThreadManagerInterface;
use Kraken\Runtime\Runtime;
use Kraken\Runtime\RuntimeCommand;
use Kraken\Runtime\RuntimeContainerInterface;
use Kraken\Test\TUnit;
use Dazzle\Throwable\Exception\Logic\InvalidArgumentException;
use Dazzle\Throwable\Exception\Logic\ResourceOccupiedException;
use Dazzle\Throwable\Exception\Runtime\RejectionException;
use StdClass;

class ThreadManagerBaseTest extends TUnit
{
    /**
     * @var RuntimeCommand
     */
    private $command;

    /**
     *
     */
    public function testApiConstructor_CreatesInstance()
    {
        $manager = $this->createThreadManager();

        $this->assertInstanceOf(ThreadManagerBase::class, $manager);
        $this->assertInstanceOf(ThreadManagerInterface::class, $manager);
    }

    /**
     *
     */
    public function testApiDestructor_DoesNotThrowException()
    {
        $manager = $this->createThreadManager();
        unset($manager);
    }

    /**
     *
     */
    public function testApiExistsThread_ReturnsFalse_WhenThreadDoesNotExist()
    {
        $manager = $this->createThreadManager();

        $this->assertFalse($manager->existsThread('alias'));
    }

    /**
     *
     */
    public function testApiExistsThread_ReturnsTrue_WhenThreadDoesExist()
    {
        $manager = $this->createThreadManager();
        $this->setProtectedProperty($manager, 'threads', [ 'alias' => new StdClass ]);

        $this->assertTrue($manager->existsThread('alias'));
    }

    /**
     *
     */
    public function testApiCreateThread_RejectsPromise_WhenThreadDoesNotExistAndNameIsNull()
    {
        $manager = $this->createThreadManager();
        $alias = 'alias';

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isInstanceOf(InvalidArgumentException::class));

        $manager
            ->createThread($alias, null)
            ->then(
                null,
                $callable
            );
    }

    /**
     *
     */
    public function testApiCreateThread_RecreatesThreadWithForceSoft_WhenThreadDoesExistAndForceIsForceSoft()
    {
        $manager = $this->createThreadManager([ 'destroyThread' ]);
        $manager->allocateThread($alias = 'alias', $object = new StdClass);
        $name = 'name';
        $flags = Runtime::CREATE_FORCE_SOFT;

        $manager
            ->expects($this->once())
            ->method('destroyThread')
            ->with($alias, Runtime::DESTROY_FORCE_SOFT)
            ->will($this->returnCallback(function() {
                $mock = $this->getMock(PromiseFulfilled::class, [ 'then' ], [], '', false);
                $mock
                    ->expects($this->any())
                    ->method('then')
                    ->will($this->returnCallback(function($func) {
                        return new PromiseFulfilled();
                    }));

                return $mock;
            }));

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke');

        $manager
            ->createThread($alias, $name, $flags)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiCreateThread_RecreatesThreadWithForceHard_WhenThreadDoesExistAndForceIsForceHard()
    {
        $manager = $this->createThreadManager([ 'destroyThread' ]);
        $manager->allocateThread($alias = 'alias', $object = new StdClass);
        $name = 'name';
        $flags = Runtime::CREATE_FORCE_HARD;

        $manager
            ->expects($this->once())
            ->method('destroyThread')
            ->with($alias, Runtime::DESTROY_FORCE_HARD)
            ->will($this->returnCallback(function() {
                $mock = $this->getMock(PromiseFulfilled::class, [ 'then' ], [], '', false);
                $mock
                    ->expects($this->any())
                    ->method('then')
                    ->will($this->returnCallback(function($func) {
                        return new PromiseFulfilled();
                    }));

                return $mock;
            }));

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke');

        $manager
            ->createThread($alias, $name, $flags)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiCreateThread_RecreatesThreadWithForce_WhenThreadDoesExistAndForceIsForce()
    {
        $manager = $this->createThreadManager([ 'destroyThread' ]);
        $manager->allocateThread($alias = 'alias', $object = new StdClass);
        $name = 'name';
        $flags = Runtime::CREATE_FORCE;

        $manager
            ->expects($this->once())
            ->method('destroyThread')
            ->with($alias, Runtime::DESTROY_FORCE)
            ->will($this->returnCallback(function() {
                $mock = $this->getMock(PromiseFulfilled::class, [ 'then' ], [], '', false);
                $mock
                    ->expects($this->any())
                    ->method('then')
                    ->will($this->returnCallback(function($func) {
                        return new PromiseFulfilled();
                    }));

                return $mock;
            }));

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke');

        $manager
            ->createThread($alias, $name, $flags)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiCreateThread_RejectsPromise_WhenThreadDoesExistAndForceIsDefault()
    {
        $manager = $this->createThreadManager();
        $manager->allocateThread($alias = 'alias', $object = new StdClass);
        $name = 'name';

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isInstanceOf(ResourceOccupiedException::class));

        $manager
            ->createThread($alias, $name)
            ->then(
                null,
                $callable
            );
    }

    /**
     *
     */
    public function testApiDestroyThread_ResolvesPromise_WhenThreadDoesNotExist()
    {
        $manager = $this->createThreadManager();
        $alias = 'alias';
        $name = 'name';

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isType('string'));

        $manager
            ->destroyThread($alias, $name)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiDestroyThread_RejectsPromise_WhenThreadDoesExistAndForceFlagIsDestroyKeep()
    {
        $manager = $this->createThreadManager();
        $manager->allocateThread($alias = 'alias', $object = new StdClass);
        $flags = Runtime::DESTROY_KEEP;

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isInstanceOf(ResourceOccupiedException::class));

        $manager
            ->destroyThread($alias, $flags)
            ->then(
                null,
                $callable
            );
    }

    /**
     *
     */
    public function testApiStartThread_InvokesValidCommand()
    {
        $manager = $this->createThreadManager();
        $manager->startThread($alias = 'alias');
        $command = $this->getCommand();

        $this->assertInstanceOf(RuntimeCommand::class, $command);
        $this->assertSame('container:start', $command->getCommand());
        $this->assertSame([], $command->getParams());
    }

    /**
     *
     */
    public function testApiStopThread_InvokesValidCommand()
    {
        $manager = $this->createThreadManager();
        $manager->stopThread($alias = 'alias');
        $command = $this->getCommand();

        $this->assertInstanceOf(RuntimeCommand::class, $command);
        $this->assertSame('container:stop', $command->getCommand());
        $this->assertSame([], $command->getParams());
    }

    /**
     *
     */
    public function testApiCreateThreads_ResolvesPromise_WhenAllThreadsAreCreated()
    {
        $manager = $this->createThreadManager([ 'createThread' ]);
        $manager
            ->expects($this->twice())
            ->method('createThread')
            ->will($this->returnValue(new PromiseFulfilled()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);
        $aliases = [ $alias1, $alias2 ];
        $flags = 'flags';

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isType('string'));

        $manager
            ->createThreads($aliases, $flags)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiCreateThreads_RejectsPromise_WhenAtLeastOneThreadCouldNotBeCreated()
    {
        $manager = $this->createThreadManager([ 'createThread' ]);
        $manager
            ->expects($this->twice())
            ->method('createThread')
            ->will($this->returnValue(new PromiseRejected()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);
        $aliases = [ $alias1, $alias2 ];
        $flags = 'flags';

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isInstanceOf(RejectionException::class));

        $manager
            ->createThreads($aliases, $flags)
            ->then(
                null,
                $callable
            );
    }

    /**
     *
     */
    public function testApiDestroyThreads_ResolvesPromise_WhenAllThreadsAreDestroyed()
    {
        $manager = $this->createThreadManager([ 'destroyThread' ]);
        $manager
            ->expects($this->twice())
            ->method('destroyThread')
            ->will($this->returnValue(new PromiseFulfilled()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);
        $aliases = [ $alias1, $alias2 ];
        $flags = 'flags';

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isType('string'));

        $manager
            ->destroyThreads($aliases, $flags)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiDestroyThreads_RejectsPromise_WhenAtLeastOneThreadCouldNotBeDestroyed()
    {
        $manager = $this->createThreadManager([ 'destroyThread' ]);
        $manager
            ->expects($this->twice())
            ->method('destroyThread')
            ->will($this->returnValue(new PromiseRejected()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);
        $aliases = [ $alias1, $alias2 ];
        $flags = 'flags';

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isInstanceOf(RejectionException::class));

        $manager
            ->destroyThreads($aliases, $flags)
            ->then(
                null,
                $callable
            );
    }

    /**
     *
     */
    public function testApiStartThreads_ResolvesPromise_WhenAllThreadsAreStarted()
    {
        $manager = $this->createThreadManager([ 'startThread' ]);
        $manager
            ->expects($this->twice())
            ->method('startThread')
            ->will($this->returnValue(new PromiseFulfilled()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);
        $aliases = [ $alias1, $alias2 ];

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isType('string'));

        $manager
            ->startThreads($aliases)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiStartThreads_RejectsPromise_WhenAtLeastOneThreadCouldNotBeStarted()
    {
        $manager = $this->createThreadManager([ 'startThread' ]);
        $manager
            ->expects($this->twice())
            ->method('startThread')
            ->will($this->returnValue(new PromiseRejected()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);
        $aliases = [ $alias1, $alias2 ];

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isInstanceOf(RejectionException::class));

        $manager
            ->startThreads($aliases)
            ->then(
                null,
                $callable
            );
    }

    /**
     *
     */
    public function testApiStopThreads_ResolvesPromise_WhenAllThreadsAreStopped()
    {
        $manager = $this->createThreadManager([ 'stopThread' ]);
        $manager
            ->expects($this->twice())
            ->method('stopThread')
            ->will($this->returnValue(new PromiseFulfilled()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);
        $aliases = [ $alias1, $alias2 ];

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isType('string'));

        $manager
            ->stopThreads($aliases)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiStopThreads_RejectsPromise_WhenAtLeastOneThreadCouldNotBeStopped()
    {
        $manager = $this->createThreadManager([ 'stopThread' ]);
        $manager
            ->expects($this->twice())
            ->method('stopThread')
            ->will($this->returnValue(new PromiseRejected()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);
        $aliases = [ $alias1, $alias2 ];

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isInstanceOf(RejectionException::class));

        $manager
            ->stopThreads($aliases)
            ->then(
                null,
                $callable
            );
    }

    /**
     *
     */
    public function testApiGetThreads_ReturnsFulfilledPromiseThatContainsListOfThreads()
    {
        $manager = $this->createThreadManager();
        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with([ $alias1, $alias2 ]);

        $manager
            ->getThreads()
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testApiFlushThreads_RejectsPromise_WhenFlagIsDestroyKeep()
    {
        $flags = Runtime::DESTROY_KEEP;
        $manager = $this->createThreadManager([ 'destroyThread' ]);
        $manager
            ->expects($this->never())
            ->method('destroyThread');

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isInstanceOf(RejectionException::class));

        $manager
            ->flushThreads($flags)
            ->then(
                null,
                $callable
            );
    }

    /**
     *
     */
    public function testApiFlushThreads_FlushesThreads_WhenFlagIsOtherThanDestroyKeep()
    {
        $flags = Runtime::DESTROY_FORCE;
        $manager = $this->createThreadManager([ 'destroyThread' ]);
        $manager
            ->expects($this->twice())
            ->method('destroyThread')
            ->with($this->isType('string'), $flags)
            ->will($this->returnValue(new PromiseFulfilled()));

        $manager->allocateThread($alias1 = 'alias1', $object1 = new StdClass);
        $manager->allocateThread($alias2 = 'alias2', $object2 = new StdClass);

        $callable = $this->createCallableMock();
        $callable
            ->expects($this->once())
            ->method('__invoke')
            ->with($this->isType('string'));

        $manager
            ->flushThreads($flags)
            ->then(
                $callable
            );
    }

    /**
     *
     */
    public function testProtectedApiAllocateThread_AllocatesThreadAndReturnsTrue()
    {
        $manager = $this->createThreadManager();
        $result  = $manager->allocateThread($alias = 'alias', $object = new StdClass);

        $this->assertTrue($result);
        $this->assertSame([ $alias=>$object ], $this->getProtectedProperty($manager, 'threads'));
    }

    /**
     *
     */
    public function testProtectedApiFreeThread_FreesThreadAndReturnsTrue()
    {
        $manager = $this->createThreadManager();
        $manager->allocateThread($alias = 'alias', $object = new StdClass);
        $result  = $manager->freeThread($alias = 'alias');

        $this->assertTrue($result);
        $this->assertSame([], $this->getProtectedProperty($manager, 'threads'));
    }

    /**
     *
     */
    public function testProtectedApiCreateRequest_CreatesRequest()
    {
        $runtime  = $this->getMock(RuntimeContainerInterface::class, [], [], '', false);
        $channel  = $this->getMock(ChannelInterface::class, [], [], '', false);
        $channel
            ->expects($this->any())
            ->method('createProtocol')
            ->will($this->returnCallback(function($message) {
                return new Protocol('', '', '', '', $message);
            }));
        $receiver = 'receiver';
        $command  = 'command';

        $manager = new ThreadManagerBase($runtime, $channel, $receiver);

        $req = $this->callProtectedMethod($manager, 'createRequest', [ $channel, $receiver, $command ]);

        $this->assertInstanceOf(Request::class, $req);
        $this->assertSame($channel,  $this->getProtectedProperty($req, 'channel'));
        $this->assertSame($receiver, $this->getProtectedProperty($req, 'name'));
        $this->assertSame($command,  $this->getProtectedProperty($req, 'message')->getMessage());
    }

    /**
     * @return RuntimeCommand
     */
    public function getCommand()
    {
        return $this->command;
    }

    /**
     * @param string[] $methods
     * @return ThreadManagerBase|\PHPUnit_Framework_MockObject_MockObject
     */
    public function createThreadManager($methods = [])
    {
        $runtime = $this->getMock(RuntimeContainerInterface::class, [], [], '', false);
        $channel = $this->getMock(ChannelInterface::class, [], [], '', false);

        $methods = array_merge($methods, [ 'createRequest' ]);
        $manager = $this->getMock(ThreadManagerBase::class, $methods, [ $runtime, $channel, [] ]);
        $manager
            ->expects($this->any())
            ->method('createRequest')
            ->will($this->returnCallback(function($channel, $receiver, $command) {
                $this->command = $command;

                $mock = $this->getMock(RuntimeCommand::class, [ 'call' ], [ $channel, $receiver, $command ]);
                $mock
                    ->expects($this->once())
                    ->method('call')
                    ->will($this->returnValue(new PromiseFulfilled()));

                return $mock;
            }));

        return $manager;
    }
}


Over the last couple of years Decruy has been producing a number of DIY room dividers. In most cases these are made of MDF, sometimes rawboard, sometimes with a paint foil and sometimes wrapped with finish foil. Our room dividers are sold through DIY retailers and interior decoration shops throughout Europe, either with our own brand name or with our customers name on the packaging. We often develop this kind of product in close cooperation with our customers: they know best what their customers are looking to buy.
Apart from room dividers for DIY retailers we also develop and produce modular wall systems for showrooms and trade fairs. These are sold to professional stand constructors and carpenters. As we have a thorough knowledge of the different raw materials (panels/foils/surfaces etc.) available today, and as we have versatile production facilities, we can entirely adapt ourselves to the needs of our customers in terms of product design, dimensions, etc.