RevDL.me – Download Genies & Gems v62.14.120.12141857 Mod Apk latest version for mobile free download Download Game Android premium unlocked files, android apk, android apk download, apk app download, apk apps, apk games, apps apk, best apk games, free android apk, free apk, game apk, game hacker apk, free crack games, mod apk games, Android Mod Apk, download game mod apk offline, mod apk revdl. Genies & Gems v62.14.120.12141857 Mod Apk the latest version game for Android #ANDROIDGAMES and Blackberry 10 #BB10 OS with direct link apk only for free download and no pop ads.
Genies & Gems v62.14.120.12141857 Mod Apk Wishes are granted in the spellbinding match-3 puzzle adventure of Genies and Gems!
Thieves have stolen the palace treasure! Help Jenni the genie and her fox, Trix as they journey through magical worlds recovering lost relics, gold bars and enchanted keys.
Make smart matches to stay on path while avoiding cursed stones and overcoming caged gems. Outsmart bandits to keep your treasures safe!
– Collect keys to unlock new worlds and challenges!
– Use the Gilded Rainbow or Gilded Butterfly to swiftly advance through challenging levels!
– Uncover idols and collect gold along the way!
– Make your way through HUNDREDS of levels with many more to come!
In this match 3 adventure, wishes will come true! Download today!


text:
Q: WebImage helper not creating correct path to image? My problem is with the following piece of code. I have built WebPages app where this chunk of code works perfectly, however, in my MVC5 app it copies only the local path from my PC to MSSQL database, without a GUID even. The piece of code is:
CONTROLLER:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include="productId,categoryId,brandId,Name,Price,ProductImg")] Product product)
{
    if (ModelState.IsValid)
    {
        WebImage photo = null;
        var newFileName = "";
        var imagePath = "";
        //RIJEŠITI NESTED IF
        //zašto ne prihvaća HttpPostedFileBase tip??
        photo = WebImage.GetImageFromRequest();

        if (photo != null)
        {
            newFileName = Guid.NewGuid().ToString() + "_" +
                Path.GetFileName(photo.FileName);
            imagePath = @"Content\Images\" + newFileName;

            photo.Save(@"~\" + imagePath);

            product.ProductImg = @"~\" + imagePath;
        }

        try
        {
            db.Entry(product).State = System.Data.Entity.EntityState.Modified;
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            var objContext = ((IObjectContextAdapter)db).ObjectContext;

            objContext.Refresh(System.Data.Entity.Core.Objects.RefreshMode.ClientWins, product);
        }
        return RedirectToAction("Index");
    }
}

MODEL:
public class Product
{
    [ScaffoldColumn(false)]
    public int productId { get; set; }

    [DisplayName("Category")]
    public int categoryId { get; set; }

    [DisplayName("Brand")]
    public int brandId { get; set; }

    [DisplayName("Product Name")]
    [Required(ErrorMessage = "Product Name is mandatory")]
    [StringLength(160)]
    public string Name { get; set; }

    [Required(ErrorMessage = "Price is required")]
    [Range(0.01, 7000.00,
        ErrorMessage = "Price must be between 0.01 and 7000.00")]
    public decimal Price { get; set; }

    [DisplayName("Product Image")]
    [StringLength(1024)]
    public string ProductImg { get; set; }

    public virtual Category Category { get; set; }
    public virtual Brand Brand { get; set; }
    public virtual List<OrderDetail> OrderDetails { get; set; }
}

Also how do I prevent this code from writing NULL to database in case that the user doesn't want to change the image?

A: Don't trust Filename provided by browser: some browsers send the full path others send only the file name. So you'd vetter use the following code to upload your picture/file
        //-----

        String path = Server.MapPath("~/content/public");
        if (Request.Files != null && Request.Files.Count > 0)
        {
            String fileExtension = System.IO.Path.GetExtension(Request.Files[0].FileName).ToLower();
            List<string> allowedExtensions = new List<string>(){".gif", ".png", ".jpeg", ".jpg" };

          if (allowedExtensions.Contains(fileExtension))
            {
                string fileName = Guid.NewGuid().ToString();
                Request.Files[0].SaveAs(path + fileName);
                product.ProductImg = fileName ;
            }
        }
       ///------

and to display this image, use a simple img tag as follows
  @{string imageUrl=Url.Content("~/content/public/"+Model.ProductImg); }
  <img src="@imageUrl" alt=""/>

This can provide you with a guid...or you'll need to remove / or \ as follows
   string fileName = Guid.NewGuid().ToString();

    fileName +="_"+Request.Files[0].FileName.Split(new char[]{'/','\'}).ToList().LastOrDefault();

redpajama_set_name: RedPajamaStackExchange


text:
set -euo pipefail

if [[ $# == 0 ]]; then
	echo "Usage: $0 [MANIFEST...]" >&2
	exit 1
fi

FAILED=()

for MANIFEST in "$@"; do
	START=$SECONDS
	echo "==> Running testnet $MANIFEST..."

	if ! ./build/runner -f "$MANIFEST"; then
		echo "==> Testnet $MANIFEST failed, dumping manifest..."
		cat "$MANIFEST"

		echo "==> Dumping container logs for $MANIFEST..."
		./build/runner -f "$MANIFEST" logs

		echo "==> Cleaning up failed testnet $MANIFEST..."
		./build/runner -f "$MANIFEST" cleanup

		FAILED+=("$MANIFEST")
	fi

	echo "==> Completed testnet $MANIFEST in $(( SECONDS - START ))s"
	echo ""
done

if [[ ${#FAILED[@]} -ne 0 ]]; then
	echo "${#FAILED[@]} testnets failed:"
	for MANIFEST in "${FAILED[@]}"; do
		echo "- $MANIFEST"
	done
	exit 1
else
	echo "All testnets successful"
fi

redpajama_set_name: RedPajamaGithub


text:
Q: Serve PDF file using ASP.NET with custom filename I currently have a page ReportPDF.aspx which creates a PDF and writes it to the response. I set the filename using the Content-Disposition header. However, if someone uses "Save link as..." on the link, it still saves the file as ReportPDF.aspx.
How can I use Report.pdf as filename, while still dynamically creating the PDF?

A: I'm afraid that's a behaviour of the browser that the client is using - some will (correctly) use the content-disposition header and some won't... sorry.

A: Could you use URL rewriting so that the URL is actually Report.pdf, which is then rewritten to ReportPDF.aspx server-side?

A: I had the same issue, and have it work with "clean" names :

*

*no spaces

*only letters and numbers

A: I solved it by linking to
/ReportPDF.aspx/d6bea1cb-c630-47d6-8735-db7b72713fde/ReportData.pdf

And using the Request.PathInfo variable to get the parameter.


text:
Journal of Agricultural Sciences – Sri Lanka
Reading: Effectiveness of locally available plant materials in the dry zone of Sri Lanka as natural c...
Effectiveness of locally available plant materials in the dry zone of Sri Lanka as natural coagulants in treating turbid water
B. A. P. Serasinghe,
Rajarata University of Sri Lanka, Anuradhapura, LK
Profiles:
About B. A. P.
Department of Agricultural Engineering and Soil Science, Faculty of Agriculture
N. S. Abeysingha ,
About N. S.
D. M. S. H. Dissanyake,
About D. M. S. H.
N. V. H. S. K. Vithanage
National Water Supply & Drainage Board, Harishchandra Mawatha, Anuradhapura, LK
Purpose: Polyaluminium chloride (PAC) is used to treat the turbid water at water treatment plants. As an alternative, natural coagulants are being tested as those are biodegradable and safe for human health. The study focused to test the locally available five different plant species as natural coagulants.
Research method: Turbid water samples were treated separately by 50ppm to 100ppm of PAC as a control, and powdered Moringa (Moringa oleifera), Arjun (Terminalia arjuna), Jack fruit (Artocarpus heterophyllus), Clearing nut (Strychnos potatorum L.) seeds and Aloe (Aloe vera) as treatments. Turbidity, pH, and EC were measured before and after the treatments. The experiments were conducted as a full nested design to test the effect of coagulant variety and concentration on the turbidity removal with a mean comparison using Turkey's Studentized Range Test at 0.05 significant level.
Finding: Moringa showed the highest turbidity removal efficiency of 84.8 (± 8.9) %. Arjun and Aloe demonstrated turbidity removal efficiency of 42.6 (± 6.71) %, and 34.9 (± 6.03) % respectively and it was significantly (P<0.05) higher than those of Jack fruit 18.2 (± 9.3) % and Clearing nut 30.4 (± 23.7) %. This study concludes that among natural coagulants tested, Moringa has the highest capability of removing the turbidity of water.
Research limitation: Clearing nut seed powder was taken from a shop which may be of inferior quality compared to the fresh seed powder.
Originality/ Value: There is a higher potential to use Moringa seed collected from the dry zone as a natural coagulant.
Keywords: Moringa, Natural coagulants, Polyaluminium chloride, Turbidity, Water treatment
How to Cite: Serasinghe, B.A.P., Abeysingha, N.S., Dissanyake, D.M.S.H. and Vithanage, N.V.H.S.K., 2022. Effectiveness of locally available plant materials in the dry zone of Sri Lanka as natural coagulants in treating turbid water. Journal of Agricultural Sciences – Sri Lanka, 17(1), pp.161–170. DOI: http://doi.org/10.4038/jas.v17i1.9617
Serasinghe, B.A.P., Abeysingha, N.S., Dissanyake, D.M.S.H. and Vithanage, N.V.H.S.K., 2022. Effectiveness of locally available plant materials in the dry zone of Sri Lanka as natural coagulants in treating turbid water. Journal of Agricultural Sciences – Sri Lanka, 17(1), pp.161–170. DOI: http://doi.org/10.4038/jas.v17i1.9617
Serasinghe BAP, Abeysingha NS, Dissanyake DMSH, Vithanage NVHSK. Effectiveness of locally available plant materials in the dry zone of Sri Lanka as natural coagulants in treating turbid water. Journal of Agricultural Sciences – Sri Lanka. 2022;17(1):161–70. DOI: http://doi.org/10.4038/jas.v17i1.9617
Serasinghe, B. A. P., Abeysingha, N. S., Dissanyake, D. M. S. H., & Vithanage, N. V. H. S. K. (2022). Effectiveness of locally available plant materials in the dry zone of Sri Lanka as natural coagulants in treating turbid water. Journal of Agricultural Sciences – Sri Lanka, 17(1), 161–170. DOI: http://doi.org/10.4038/jas.v17i1.9617
1. Serasinghe BAP, Abeysingha NS, Dissanyake DMSH, Vithanage NVHSK. Effectiveness of locally available plant materials in the dry zone of Sri Lanka as natural coagulants in treating turbid water. Journal of Agricultural Sciences – Sri Lanka. 2022;17(1):161-170. DOI: http://doi.org/10.4038/jas.v17i1.9617
Serasinghe BAP and others, 'Effectiveness of Locally Available Plant Materials in the Dry Zone of Sri Lanka as Natural Coagulants in Treating Turbid Water' (2022) 17 Journal of Agricultural Sciences – Sri Lanka 161 DOI: http://doi.org/10.4038/jas.v17i1.9617
Serasinghe, B. A. P., N. S. Abeysingha, D. M. S. H. Dissanyake, and N. V. H. S. K. Vithanage. 2022. "Effectiveness of Locally Available Plant Materials in the Dry Zone of Sri Lanka as Natural Coagulants in Treating Turbid Water". Journal of Agricultural Sciences – Sri Lanka 17 (1): 161–70. DOI: http://doi.org/10.4038/jas.v17i1.9617
Serasinghe, B. A. P., N. S. Abeysingha, D. M. S. H. Dissanyake, and N. V. H. S. K. Vithanage. "Effectiveness of Locally Available Plant Materials in the Dry Zone of Sri Lanka as Natural Coagulants in Treating Turbid Water". Journal of Agricultural Sciences – Sri Lanka 17, no. 1 (2022): 161–70. DOI: http://doi.org/10.4038/jas.v17i1.9617
Serasinghe, B A P, et al.. "Effectiveness of locally available plant materials in the dry zone of Sri Lanka as natural coagulants in treating turbid water". Journal of Agricultural Sciences – Sri Lanka, vol. 17, no. 1, 2022, pp. 161–70. DOI: http://doi.org/10.4038/jas.v17i1.9617
Published by The Faculty of Agricultural Sciences of the Sabaragamuwa University of Sri Lanka

redpajama_set_name: RedPajamaCommonCrawl


New Forest Ponies were named after a region in southern England, New Forest. Their exact origin is unknown but ponies have lived in the area for many centuries. During the 18th century the Thoroughbred stallion Marske, father of the famous race horse Eclipse, served New Forest mares. In the mid-19th century one of Queen Victoria's Arabian stallions was allowed to run with the New Forest herd. Hackney blood was also introduced. The cross breeding added to the pony's size but was harmful to the true pony element.
In order to correct the situation stallions of other native breeds including Dales, Dartmoor, Exmoor, Fell, Highland, and Welsh Mountain ponies were crossed with the New Forest. The result was a tough, sure footed pony, with a free, straight action and a pleasant temperament, well adapted to the harsh environment. Many New Forests are still running free in their native country where they survive on meager, low quality food supply. In England the New Forest Commoners have an annual round-up of their herd to select ponies to be sold with the remaining stock returned to the forest.
In 1891 the Society for the Improvement of New Forest Ponies was founded. The first studbook was published in 1910 by the Burley and District New Forest Pony and Cattle Breeding Society. Since 1960 the New Forest Pony Breeding and Cattle Society has published the studbook. New Forest Ponies are also popular in Europe, North America, Australia, and New Zealand.


Three days ago, Hon. McKenna, the federal environment minister, confirmed that the primary objective of Parks Canada was the maintenance and restoration of ecological integrity within the national parks (and presumably the commemorative integrity of national historic sites as well). The confirmation came in response to an extensive public consultation process focused on the future of Canada's national parks, according to a CBC News article.
"Maintaining and restoring ecological integrity requires limits on development in national parks, particularly those where development can impact ecosystem health," she said, while acknowledging the significant economic benefits generated by parks through tourism.
As a first step, an independent group is to be created and given the mandate to conduct a thorough examination of Parks Canada's practices and policies pertaining to development. Additionally, the minister said that the agency's science capacity would be restored to at least the 2012 level, prior to the last major budget cut under the Conservative government. Even more than this, the minister signaled that the Liberal government was prepared to re-energize the commitment to: conducting state of the parks reports every five years and making them public; finalizing currently proposed national parks and national marine conservation areas; enabling greater participation of First Nations in the planning and management of national parks; and overhauling the system plan that has guided the creation of national parks for the past four decades.
I'm a life-long passionate advocate for keeping parks and protected areas as wild as possible, especially our national parks. So you might conclude that I would be elated by Minister McKenna's promises. But I'm not. Instead I'm very skeptical.
Here's the reason why. We've heard this all before. In 1998, the Liberals under the leadership of Jean Chretien, made good on an election promise to create a blue-chip panel of highly respected researchers in natural and social sciences to do pretty much the same thing. It was called the Panel on Ecological Integrity.
In 2000, The government released the Panel's two volume report. In Volume One: The Call To Action, the report leads with a letter to Hon. Sheila Copps, Minister of Canadian Heritage. In it, the Panel reminds the Minister that she gave them their marching orders: to do a thorough investigation into the ecological health and integrity of the national parks and into how well Parks Canada was doing at maintaining and restoring it. They were also to advise her on what improvements should be made.
"… Parks Canada must establish a clear vision around the primary objective of protecting ecological integrity, and align the whole organization behind this agenda". Making this shift to an "culture of conservation, the Panel stressed, would be the "single biggest challenge" facing the agency.
Parks Canada needs to have its science capacity significantly boosted and more present in the planning and management of the national parks.
The Panel's report ends with an appendix listing their recommendations as what needed fixing…128 of them. in total.
As a sidenote, just prior to the creation of the Panel on Ecological Integrity, I had begun to work on a book on the same issue: the loss of ecological integrity within the national parks. Titled "Phantom Parks: The Struggle to Save Canada's National Parks," the book went on sale around about the same time as the Panel's report was made public. The two complimented each other very well. Our findings and conclusions were essentially the same. While theirs was written primarily for politicians and senior government staff, mine took an informal approach in the hope of engaging broader and more general audiences. As some measure of success in this regard, I was told that the initial print run of 5000 copies had sold-out within a year of the book's publication.
To their credit, Minister Copps and the Liberals lost little time in beginning to act on some of the Panel's recommendations. For example, they created a place at the executive level of science. They also encouraged Parks Canada to make the maintenance and restoration of ecological integrity every staff member's job. But all too soon, the government's attention drifted away and business as usual crept back in.
With the Liberals defeated in the federal election of 2006 and replaced by the Conservatives led by Hon. Stephen Harper, programs for maintaining and restoring ecological integrity began to undergo significant cuts to their staff and budgets. Meanwhile business interests within and around national parks gained a receptive benefactor in the Prime Minister. Perhaps one of the most egregious examples is the Glacier Skywalk in Jasper National Park – a glass-floored observation platform cantilevered more 900 feet above the Sunwapta Valley floor. It was built for and is operated Brewster Travel Company. Under the Jasper Park Management Plan, it should never have been allowed.
Where Does That Leave Us/Me?
Once again, the Liberals are back in power and once again we hear them saying they're going to ensure the ecological integrity of the national parks is maintained and restored and that limits will be placed on development. History appears to be repeating itself. Will it be different this time? For the sake of the national parks and all that they represent, I truly hope so. But I remain deeply skeptical. I'll want to see real change or at least positive signs that it is coming when I visit the national parks, commencing this summer.


Summary: Man of Sin, Beast, Antichrist. Many titles, one man. Not a series of men. Not an office. A man. Read carefully, let no one deceive. He is coming. Chapters 13, 17, and 19 furnish a combined portrait of the man.
Perhaps the most obvious of the long-term background descriptions is the one regarding antichrist. It is proper so to refer to him, but John never does, in Revelation. He here calls him the beast. In Daniel 7, he is the little horn on the final of a series of beasts in his prophecy. That horn rises up to supplant some of the ten horns originally on that beast. It is this conquering horn that makes war against the saints and prevails against them (Daniel 8:9-12). He controls the beast of which he is a part.
But in Revelation 13:2, the same man is described in terms of all the animals in Daniel's vision. He is especially reminiscent of the ferocious fourth beast. Notice that both the revelator (13:1) and Daniel (Daniel 7:1-8) see ten horns, and they both see seven heads. While in Revelation the seven heads are on one creature, it takes four creatures in Daniel: The lion has one, the bear has one, the leopard has four, and the fourth creature has one. Seven heads. Note also that John says the beast is like a lion, bear, and leopard. That is, he is like the three beasts of Daniel. Then there is the mouth given the beast (13:5), as in Daniel 7:8, 11, 20, 25. He continues 42 months (13:5), paralleling Daniel's "time, times, and half a time" (7:25). He overcomes the saints in both descriptions (Daniel 7:21, 25 and Revelation 8:24). And he receives worship (Revelation 13:4, Daniel 8:11). There is no question that both visions speak of the same offender.
He sits in the Temple claiming to be God, according to Paul, II Thessalonians 2:4. Daniel 8:11 discusses the way a certain prince, not necessarily the final world ruler, will take away the daily sacrifice, i. e. break the covenant with Israel, as in Daniel 9:27: "In the middle of the week (seven-year period) he shall bring an end to sacrifice and offering." Then, after that man, comes one who makes desolate. It seems in that Daniel passage that the man of sin picks up where the "Prince" leaves off. We conclude from his aversion to worship rituals that from then on, worship is to be centered on Satan's man only, much like in the days of the Roman Emperors. In Revelation 13:8, 14, worship of the Beast is seen, and by 13:15, it is required by law.
In Daniel 8, he is a latter-day outgrowth of one of the 4 successors of Alexander the Great. This means that he can only come from somewhere within the ancient Greek Empire: southeastern Europe, the Middle East, Northern Africa. A most impressive clue!
Paul knows him as "the man of sin." Once more it is easy to get carried away with imagery and history, much of which can fit. But when it's all over, this man and his partner are thrown into a lake of fire (19:20). Literal lake. Literal man. Literal partner. In Scripture it is nearly always better to take the Word as it is. A close study of Daniel and II Thessalonians reveals that only one man is being talked about here. His profile is laid out so clearly that no end-time saint will have any trouble recognizing him. Yes, previews have shown up in men like Hitler and any number of Popes, but one man is still to come. Let no one write him off before his time. Everything written of him will be fulfilled.
What of the numbers describing the "beast from the sea" (13:1)? "Seven" and "ten". The seven seems to be world empires and/or mountains, as in chapter 17, where the same beast is described in his relationship to Mystery Babylon (17:10). Traditionally, Christian scholarship has pointed to Egypt, Babylonia, Assyria, Medo-Persia, Greece, Rome, and revived Rome as the empires that have ruled mankind with their severe politicians and religious poison. A closer look at Daniel 7 reveals another possibility. We'll look at it shortly.
Whoever the past kings/kingdoms are, this person represents them all in one man, one final rule. The ten corresponds to Daniel's "ten toes" and the "ten horns" of the beast of Daniel 7, and the ten horns of John's later revelation in chapter 17. There is general agreement that there is a ten-nation confederation, perhaps akin to Common Market nations, that holds the final rule of this planet with the "beast" (17:13).
He appears following a falling away from the faith, a time when the world will easily believe anyone who will save it from its mess (II Thessalonians 2:3). He is Satan-inspired (13:2), as Christ was Spirit-inspired. He dies, but is resurrected, as was Christ. The world accepts him as its own, anticipating Christ's reception when He returns. As to the blasphemies that are said to come out of his mouth (13:5), this point is underscored in Daniel 7:8, 11, 25 and 11:36-37. Paul makes note of it in II Thessalonians 2:4. His persecutions are successful (13:7), and are the reason for a great populating of heaven during this 42-month period (7:9-14). He not only has authority over the world, but over the saints! This too is borne out in Daniel, 8:24. He will be the object of worship, as stated above, aided by a false prophet described in 13:11-18. All will be commanded to make an image of the beast, perhaps something as simple as watching him on television or the internet. Those who do not worship his image must die. Perhaps, by then, TV/computer will have become fully interactive.
Man of Sin, Beast, Antichrist. Many titles, one man. Not a series of men. Not an office. A man. Read carefully, let no one deceive. He is coming. Chapters 13, 17, and 19 furnish a combined portrait of the man.


text:
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
import * as map from 'vs/base/common/map';
import { URI, UriComponents } from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { localize } from 'vs/nls';
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { ExtHostContext, ExtHostWebviewsShape, IExtHostContext, MainContext, MainThreadWebviewsShape, WebviewPanelHandle, WebviewPanelShowOptions } from 'vs/workbench/api/node/extHost.protocol';
import { editorGroupToViewColumn, EditorViewColumn, viewColumnToEditorGroup } from 'vs/workbench/api/shared/editor';
import { WebviewEditor } from 'vs/workbench/parts/webview/electron-browser/webviewEditor';
import { WebviewEditorInput } from 'vs/workbench/parts/webview/electron-browser/webviewEditorInput';
import { ICreateWebViewShowOptions, IWebviewEditorService, WebviewInputOptions, WebviewReviver } from 'vs/workbench/parts/webview/electron-browser/webviewEditorService';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService';
import * as vscode from 'vscode';
import { extHostNamedCustomer } from './extHostCustomers';

@extHostNamedCustomer(MainContext.MainThreadWebviews)
export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviver {

	private static readonly viewType = 'mainThreadWebview';

	private static readonly standardSupportedLinkSchemes = ['http', 'https', 'mailto'];

	private static revivalPool = 0;

	private _toDispose: IDisposable[] = [];

	private readonly _proxy: ExtHostWebviewsShape;
	private readonly _webviews = new Map<WebviewPanelHandle, WebviewEditorInput>();
	private readonly _revivers = new Set<string>();

	private _activeWebview: WebviewPanelHandle | undefined = undefined;

	constructor(
		context: IExtHostContext,
		@ILifecycleService lifecycleService: ILifecycleService,
		@IEditorGroupsService private readonly _editorGroupService: IEditorGroupsService,
		@IEditorService private readonly _editorService: IEditorService,
		@IWebviewEditorService private readonly _webviewService: IWebviewEditorService,
		@IOpenerService private readonly _openerService: IOpenerService,
		@IExtensionService private readonly _extensionService: IExtensionService,

	) {
		this._proxy = context.getProxy(ExtHostContext.ExtHostWebviews);
		_editorService.onDidActiveEditorChange(this.onActiveEditorChanged, this, this._toDispose);
		_editorService.onDidVisibleEditorsChange(this.onVisibleEditorsChanged, this, this._toDispose);

		this._toDispose.push(_webviewService.registerReviver(MainThreadWebviews.viewType, this));

		lifecycleService.onWillShutdown(e => {
			e.veto(this._onWillShutdown());
		}, this, this._toDispose);
	}

	public dispose(): void {
		this._toDispose = dispose(this._toDispose);
	}

	public $createWebviewPanel(
		handle: WebviewPanelHandle,
		viewType: string,
		title: string,
		showOptions: { viewColumn: EditorViewColumn | null, preserveFocus: boolean },
		options: WebviewInputOptions,
		extensionLocation: UriComponents
	): void {
		const mainThreadShowOptions: ICreateWebViewShowOptions = Object.create(null);
		if (showOptions) {
			mainThreadShowOptions.preserveFocus = showOptions.preserveFocus;
			mainThreadShowOptions.group = viewColumnToEditorGroup(this._editorGroupService, showOptions.viewColumn);
		}

		const webview = this._webviewService.createWebview(MainThreadWebviews.viewType, title, mainThreadShowOptions, reviveWebviewOptions(options), URI.revive(extensionLocation), this.createWebviewEventDelegate(handle));
		webview.state = {
			viewType: viewType,
			state: undefined
		};

		this._webviews.set(handle, webview);
		this._activeWebview = handle;
	}

	public $disposeWebview(handle: WebviewPanelHandle): void {
		const webview = this.getWebview(handle);
		webview.dispose();
	}

	public $setTitle(handle: WebviewPanelHandle, value: string): void {
		const webview = this.getWebview(handle);
		webview.setName(value);
	}

	public $setIconPath(handle: WebviewPanelHandle, value: { light: UriComponents, dark: UriComponents } | undefined): void {
		const webview = this.getWebview(handle);
		webview.iconPath = reviveWebviewIcon(value);
	}

	public $setHtml(handle: WebviewPanelHandle, value: string): void {
		const webview = this.getWebview(handle);
		webview.html = value;
	}

	public $setOptions(handle: WebviewPanelHandle, options: vscode.WebviewOptions): void {
		const webview = this.getWebview(handle);
		webview.setOptions(reviveWebviewOptions(options));
	}

	public $reveal(handle: WebviewPanelHandle, showOptions: WebviewPanelShowOptions): void {
		const webview = this.getWebview(handle);
		if (webview.isDisposed()) {
			return;
		}

		const targetGroup = this._editorGroupService.getGroup(viewColumnToEditorGroup(this._editorGroupService, showOptions.viewColumn));

		this._webviewService.revealWebview(webview, targetGroup || this._editorGroupService.activeGroup, showOptions.preserveFocus);
	}

	public $postMessage(handle: WebviewPanelHandle, message: any): Thenable<boolean> {
		const webview = this.getWebview(handle);
		const editors = this._editorService.visibleControls
			.filter(e => e instanceof WebviewEditor)
			.map(e => e as WebviewEditor)
			.filter(e => e.input.matches(webview));

		for (const editor of editors) {
			editor.sendMessage(message);
		}

		return TPromise.as(editors.length > 0);
	}

	public $registerSerializer(viewType: string): void {
		this._revivers.add(viewType);
	}

	public $unregisterSerializer(viewType: string): void {
		this._revivers.delete(viewType);
	}

	public reviveWebview(webview: WebviewEditorInput): TPromise<void> {
		const viewType = webview.state.viewType;
		return this._extensionService.activateByEvent(`onWebviewPanel:${viewType}`).then(() => {
			const handle = 'revival-' + MainThreadWebviews.revivalPool++;
			this._webviews.set(handle, webview);
			webview._events = this.createWebviewEventDelegate(handle);

			let state = undefined;
			if (webview.state.state) {
				try {
					state = JSON.parse(webview.state.state);
				} catch {
					// noop
				}
			}

			return this._proxy.$deserializeWebviewPanel(handle, webview.state.viewType, webview.getTitle(), state, editorGroupToViewColumn(this._editorGroupService, webview.group), webview.options)
				.then(undefined, () => {
					webview.html = MainThreadWebviews.getDeserializationFailedContents(viewType);
				});
		});
	}

	public canRevive(webview: WebviewEditorInput): boolean {
		if (webview.isDisposed() || !webview.state) {
			return false;
		}

		return this._revivers.has(webview.state.viewType) || !!webview.reviver;
	}

	private _onWillShutdown(): TPromise<boolean> {
		this._webviews.forEach((view) => {
			if (this.canRevive(view)) {
				view.state.state = view.webviewState;
			}
		});

		return TPromise.as(false); // Don't veto shutdown
	}

	private createWebviewEventDelegate(handle: WebviewPanelHandle) {
		return {
			onDidClickLink: uri => this.onDidClickLink(handle, uri),
			onMessage: message => this._proxy.$onMessage(handle, message),
			onDispose: () => {
				const cleanUp = () => {
					this._webviews.delete(handle);
				};
				this._proxy.$onDidDisposeWebviewPanel(handle).then(
					cleanUp,
					cleanUp);
			}
		};
	}

	private onActiveEditorChanged() {
		const activeEditor = this._editorService.activeControl;
		let newActiveWebview: { input: WebviewEditorInput, handle: WebviewPanelHandle } | undefined = undefined;
		if (activeEditor && activeEditor.input instanceof WebviewEditorInput) {
			for (const handle of map.keys(this._webviews)) {
				const input = this._webviews.get(handle);
				if (input.matches(activeEditor.input)) {
					newActiveWebview = { input, handle };
					break;
				}
			}
		}

		if (newActiveWebview && newActiveWebview.handle === this._activeWebview) {
			// Webview itself unchanged but position may have changed
			this._proxy.$onDidChangeWebviewPanelViewState(newActiveWebview.handle, {
				active: true,
				visible: true,
				position: editorGroupToViewColumn(this._editorGroupService, newActiveWebview.input.group)
			});
			return;
		}

		// Broadcast view state update for currently active
		if (typeof this._activeWebview !== 'undefined') {
			const oldActiveWebview = this._webviews.get(this._activeWebview);
			if (oldActiveWebview) {
				this._proxy.$onDidChangeWebviewPanelViewState(this._activeWebview, {
					active: false,
					visible: this._editorService.visibleControls.some(editor => editor.input && editor.input.matches(oldActiveWebview)),
					position: editorGroupToViewColumn(this._editorGroupService, oldActiveWebview.group),
				});
			}
		}

		// Then for newly active
		if (newActiveWebview) {
			this._proxy.$onDidChangeWebviewPanelViewState(newActiveWebview.handle, {
				active: true,
				visible: true,
				position: editorGroupToViewColumn(this._editorGroupService, activeEditor.group)
			});
			this._activeWebview = newActiveWebview.handle;
		} else {
			this._activeWebview = undefined;
		}
	}

	private onVisibleEditorsChanged(): void {
		this._webviews.forEach((input, handle) => {
			for (const workbenchEditor of this._editorService.visibleControls) {
				if (workbenchEditor.input && workbenchEditor.input.matches(input)) {
					const editorPosition = editorGroupToViewColumn(this._editorGroupService, workbenchEditor.group);

					input.updateGroup(workbenchEditor.group.id);
					this._proxy.$onDidChangeWebviewPanelViewState(handle, {
						active: handle === this._activeWebview,
						visible: true,
						position: editorPosition
					});
					break;
				}
			}
		});
	}

	private onDidClickLink(handle: WebviewPanelHandle, link: URI): void {
		if (!link) {
			return;
		}

		const webview = this.getWebview(handle);
		const enableCommandUris = webview.options.enableCommandUris;
		if (MainThreadWebviews.standardSupportedLinkSchemes.indexOf(link.scheme) >= 0 || enableCommandUris && link.scheme === 'command') {
			this._openerService.open(link);
		}
	}

	private getWebview(handle: WebviewPanelHandle): WebviewEditorInput {
		const webview = this._webviews.get(handle);
		if (!webview) {
			throw new Error('Unknown webview handle:' + handle);
		}
		return webview;
	}

	private static getDeserializationFailedContents(viewType: string) {
		return `<!DOCTYPE html>
		<html>
			<head>
				<base href="https://code.visualstudio.com/raw/">
				<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
				<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src https: data:; media-src https:; script-src 'none'; style-src vscode-core-resource: https: 'unsafe-inline'; child-src 'none'; frame-src 'none';">
			</head>
			<body>${localize('errorMessage', "An error occurred while restoring view:{0}", viewType)}</body>
		</html>`;
	}
}

function reviveWebviewOptions(options: WebviewInputOptions): WebviewInputOptions {
	return {
		...options,
		localResourceRoots: Array.isArray(options.localResourceRoots) ? options.localResourceRoots.map(URI.revive) : undefined
	};
}

function reviveWebviewIcon(
	value: { light: UriComponents, dark: UriComponents } | undefined
): { light: URI, dark: URI } | undefined {
	if (!value) {
		return undefined;
	}

	return {
		light: URI.revive(value.light),
		dark: URI.revive(value.dark)
	};
}


We confirm our commitment to the formation of the modern system of athletics development in Russia, our openness to the cooperation with international and national athletics federations, including cooperation in the struggle against doping. We have been doing this work in accordance with the programme approved by the Russian Athletic Federation Council in April and supported by the delegates of the Federation's annual Conference on 02 November, 2015.
The new administration of the Federation and the new chiefs of the National team focused their attention on the development of the system of preventive measures against doping usage. We have been in close cooperation with RUSADA on all the anti-doping education programs for different categories of athletes and coaches. Russian Athletic Federation fights severely against anti-doping rules violations by athletes, coaches and other categories of specialists working in athletics.
In August the Russian Athletic Federation took an unprecedented decision of excluding from the National team for the World Championships in Beijing the race walkers regardless of their titles and previous merits. Moreover, several coaches were banned from working with athletes, and there are investigations going on with the respect to a number of specialists. All athletes who break anti-doping rules are disqualified regardless of their previous titles and results. The Russian Athletic Federation will continue to fight severely against any attempts of breaking the anti-doping rules and code and will response in an adequate manner to the particular allegations mentioned in the Commission's report.
The following days the Russian Athletic Federation will present to the IAAF the document that includes the Federation's anti-doping programme, certain steps on the programme realisation (including those that have already been taken) and the response to the WADA Independent Commission's conclusions and allegations.
We are ready to the meaningful strategic partnership with IAAF, including the measures to fix the existing in Russian and world athletics problems.
The real fair partnership in this work is much more effective than any kind of suspension and isolation.


Pierce Brosnan is no stranger to Hollywood Awards ceremonies and revealed exclusively to GLAMOUR.COM who he would like to see win out of the Oscar nominees this year. In the category of Best Actor, there was no contest for the Percy Jackson And The Lightning Thiefactor. "Jeff Bridges. I want to see Jeff walk away with that. I love George Clooney, I think George is brilliant. I thought he did a magnificent job but George is going to be there and he'll be there forever." Jeff Bridges is up for the role as an ageing rocker in Crazy Heart.
For Best Actress, the former Bond star opted for his friend and Mamma Mia co-star. "Meryl [Streep], Julie & Julia," he said. He also gushed about The Hurt Locker, nominated for Best Film. "It's brilliant, I saw it way back there last year and it grabbed me by the throat and just pinned me to the wall." For the supporting roles, Pierce said he'd like to see favourites Mo'Nique win for her role in Precious and "Christoph [Waltz], the gentleman from Inglourious Basterds, he's fantastic, funny."


text:
Rivian announces ambitious plans for its own charging network
EV Road trips
New and upcoming EVs
Non-Tesla Charging Infrastructure
by Gordon Rodda on March 21, 2021
The Rivian R1T looks ordinary, but hauls 11,000 lbs, fords 36" deep streams, goes up to 400 miles on a charge.
Rivian recently announced its plans for building its own charging network in the US and Canada. Rivian's goal is to provide faster level III charging along major travel routes, and to provide destination chargers (level II) at trail heads and other "adventure" destinations. It is unclear to me if this is a serious plan or a way of marketing to the adventure traveler, but their numbers are spectacular: 10,000 level II chargers by the end of 2023, including at least two in every Colorado State Park. Furthermore, by the same date they are promising 3500 DC Fast Chargers (level III), spread over 600 locations, and unlike the level II chargers, which will be available to almost everyone (with a J-1772), the DC Fast Charging network will be available to Rivian owners only.
You may be unfamiliar with Rivian. Rivian has yet to sell a car or truck. They are building a factory in Illinois to introduce three models this year, each built on the same basic all-electric chassis: 1) a high performance pickup truck (photo), 2) an SUV, and 3) a delivery truck for Amazon. They have an order from Amazon for 100,000 of the delivery trucks, leading most investors to be confident that a serious vehicle will emerge. Rivian's pickup is set to beat Tesla into production and likely outperform it as well. At present, the Rivian truck is expected to be about $10,000 more expensive than the Tesla Cybertruck. First deliveries of the truck are scheduled for early summer 2021.
According to Statistica.com as of Feb 16, 2021 (https://www.statista.com/statistics/416750/number-of-electric-vehicle-charging-stations-outlets-united-states/) the US presently has about 85,000 operational level II public chargers at 40,000 sites (assuming that 16% of all chargers are level III, as indicated on Plugshare.com's statistics page) and about 16,000 level III public charger plugs (the number of locations is not easily inferred, but fewer than 5000). The number of charging plugs is rising steeply, but the Rivian contribution, if fully realized, with be significant.
The Rivian DC Fast Chargers will be fast: at least 200 kW initially, with the intent of raising those to 300 or more kW. For comparison, the new Fast Charger going into downtown Durango this summer is rated at about 50 kW if both plugs in a post are in use. At 200 kW, a Rivian truck should gain about 140 miles of range after 20 min of fast charging through Rivian's system.
Rivian will be making a level II home charger as an option for Rivian buyers. It will charge at 11.5 kW (requiring 60 A service, at the higher end of home chargers), and will provide up to 25 miles of additional range for every hour of charging.
Rivian vehicles will come equipped with a cord in the frunk capable of plugging into either a standard wall outlet (110 V) or a 220 V wall outlet. The latter option will appeal to visitors to campgrounds with "full hookups" as they permit level II charging (up to 16 miles of additional range per hour of charging), without the need for a dedicated "charger."


Galeria Joan Prats presents the exhibition "1992 – 2008" by Albert Rafols Casamada, with a selection of works that bear witness to the constant activity of this painter in the last 16 years and to put as one of the most representative painters of Spanish contemporary art with his genuine and poetic way of abstraction.
Through his carrer, Ràfols Casamada has been recognized with the Premio Nacional de las Artes Plásticas del Ministerio de Cultura de España, in 1980, and the Premi Nacional d'Arts Visuals de la Generalitat de Catalunya, en 2003, among other awards. Also MACBA in 2001 organized an extensive retrospective of his work.


text:
poverty eradication and gender justice
National coalitions
Watchers publications
Statistics publications
SW news
Echoes in the press
Monitoring Commitments
Millennium Declaration
World Summit for Social Development
World Conference on Women
SW in the World
Global Interactive Map
In exchange for oil...
Labid Abawi
Iraqi Amal Association
The political system in Iraq is characterised by arbitrary rule, the absence of democratic institutions, and monopoly of legislative, executive and judicial powers by the so-called 'Revolutionary Command Council' for 32 years. Such a system is incapable of creating the political, economic, social and cultural environment necessary for social development On the other hand, the country has been under international economic sanctions for the last ten which have had a detrimental impact on the life of Iraqi people and caused suffering in all spheres. They are still an obstacle to human development. The economic sanctions have given the present rulers the pretext to freeze all legislation and laws and to embark on arbitrary and random policies that are inconsistent with the needs and requirements of society and citizens.
The Iraqi regime attended the Copenhagen Summit, but has not translated the commitments made there into policies and programmes for implementation. With a few exceptions, the overall condition now prevailing in Iraq is worse than it was five years ago. One exception may be the Kurdistan area in northern Iraq, where some progress was made in reducing the poverty and improving social services. Another is implementation of Security Council Resolution (SCR) 986, better known as the "food and medicine for oil" agreement.
Economic stagnation has resulted in the closure of many factories and workshops, which numbered 59,413 in 1990, about 30,000 in 1995, and 17,500 today. This is coupled with a policy of systematic privatisation of public sector, which has direct negative results on working conditions and has caused deterioration of the production cycle.
Unemployment has risen to high levels especially among male workers. This, and the low wages (average income USD 3/month) forced many workers to quit their jobs and engage in marginal non-productive activities. Many educated and professional people have been forced to emigrate. The regime has no policy to reduce unemployment, nor does it have any rehabilitation schemes.
The situation of poverty has not improved in the last five years. According to UN reports, an estimated four million persons are living below the poverty line. Taking into consideration the high level of unemployment, high prices, extreme high inflation (over 7000%) and the lack of government policies to alleviate poverty, it can safely be said that poverty is reaching catastrophic levels for the majority of people. The overwhelming majority of the population depends on the monthly rations provided by SCR 986 for their living.
In December 1995, the Iraqi government decreed that all ministries and public institutions must decrease their expenditures and increase their incomes. As a result, several taxes and dues were imposed, which placed heavy burdens on the people and worsened their economic situation. Lack of administration reforms, continuing austerity policies, cuts in public spending and imposition of widespread taxes, have increased the number of poor people and led to corruption in both public and private sectors. Child labour has increased, as have crimes including organised crimes, theft and juvenile delinquency. Prostitution is widespread among young people of both sexes. Family life and social fabric are disintegrating.
The regime has systematically carried out undemocratic practices, perpetrating oppression and ethnic, religious and sectarian discrimination. The violation of human rights and disrespect for human dignity itself are features. People's participation in the political, social and economic life of the country is impossible. No civil society organisations may function openly, and all NGOs are controlled by the ruling party, which is the only political party legally allowed to function.
In recent years, the country has witnessed increased participation of women in the work force. This is a result of economic hardship in most families and the need for more family income. Women's wages are much lower than men's, and no equitable work contracts or social security is provided. Women in general suffer from dual discrimination and exploitation, in the society and at home. Participation of women in political life is non-existent, and the same is true of social life. There are no policies to provide for the integration of women, to give them a role in social development, or to raise awareness on gender equity.
Basic healthcare is diminishing, even after the implementation of SCR 986. This should have met Iraqi needs for medicines and medical equipment, but at the end of 1999, just over 50% of the supply that was to have been shipped since the start of implementation had been received.
In December 1998, the government introduced market principles in public hospitals and year later also in health centres as part of privatisation measures. This means that medical centres have to become self supporting financially. The government introduced user fees, stopped all financial aid, and called for reduced expenditures, reduced medical services, and the sale of medical equipment and medicines on the black market where prices are high to increase profits.
The income from these sales is distributed as follows: 40% goes to the hospitals and health centres for development, 30% goes to doctors and health workers as incentives, and 30% goes to the government. The result is the reduction in the number of patients to one-third of those who seek medical treatment. People with chronic diseases who received medicine 36 times a year, now receive it only six times, and they are given enough medicine for only three days.
Mortality in public hospitals for children under 5 is the highest in the world. According to a report published by UNICEF in August 1999, infant mortality rose from 56 in 1984-1989 to 131 in 1,000 in 1994-1999. An estimated 90,000 deaths yearly occur because of the sanctions, and the situation is getting worse.
Malnutrition has become a desperate problem, especially for children. There are one million children under five who suffer from chronic malnutrition and one-quarter of these children suffer from acute malnutrition.
Privatisation of the educational system in Iraq since the end of 1995 has had negative consequences for education. The government introduced fees for students at all levels of education and forced parents to donate money to the schools to cover maintenance and building of new schools. Students have to buy their textbooks and pay for vocational activities. 86% of Iraqi families consider that having their children in school places a heavy economic burden on them.
According to ministry of education in Iraq, 10% of teaching positions were vacant at the beginning of 1999. The ministry reported last year that more than 150,000 student and 67,000 teachers had left schools and universities in 1998. One million students at all levels did so in 1999. The ministry estimates that the dropout is about 8.3% per year.
Without any doubt, Iraq not only did not meet the commitments it made in Copenhagen, but is also sliding backwards.
Iraqi Al-Amal Association
Reports from Iraq
2014 - Political rows, insecurity and lack of data hinder development efforts
2012 - The growing role of civil society
2010 - Persistent gender-based violence an obstacle to development and peace
2009 - Women's empowerment: a misunderstood process
2008 - Migration and displacement: a growing and multifaceted problem
2007 - Youth bear the brunt of violence, insecurity and poverty
2004 - Insecurity for all
2002 - Few hopes
2001 - Blockade, repression and human rights violations
2000 - In exchange for oil...
Human Rights International Treaties
A B C D F G
» View detail
SPOTLIGHT ON SUSTAINABLE DEVELOPMENT 2019 IS AVAILABLE IN:
Meet Social Watch!
Social Watch News
Watcher's Publications
Congo, Dem. Rep.
Korea, Rep.
About Social Watch
History of Social Watch


text:
How to accelerate innovation with innersource
May 3, 2022 // 10 min read
Not all software can be open source, but nearly any project can benefit from the collaborative processes pioneered by the open source community. Organizations around the world are accelerating their development cycles and tapping into new wells of innovation within their companies through "innersource" projects that share code and resources internally, enabling cross-team collaboration and contributions. Drawing on the experiences of companies ranging from 3M and Ford to Postmates and Spotify, this ebook explores the ways your development team can benefit from innersource best practices.
Open source has changed the way we build software. From hotel bookings to banking, almost every new application is built on free, reusable code created by a worldwide developer community. According to Gartner, over 87 percent of the IT enterprises across the globe use open source for their mission-critical IT workloads, whether they're aware of it or not.
But process is just as important as output. As open source communities build and grow, they've found ways to collaborate quickly and effectively across regions, time zones, and languages. They've produced code built by distributed teams at scale, made distributed version control systems an industry standard, and even established the fundamentals behind modern DevOps. If you're using Git, Python, or sharing and reusing code across your team, you're participating in open source best practices.
As we've seen with DevOps, when enterprise development teams adopt these best-practices they can achieve the same velocity and innovation. By mirroring how open source communities work, enterprises can build software in the way their developers already know and love—creating an environment that's familiar, free of unnecessary distractions, and focused on innovation through rapid incremental iteration.
What we're describing is known as "innersource." Like open source, even if you've never heard the term, you'll probably still recognize some of the principles behind it. Innersource can look different from company to company, but always shares the same goals: adopting open source tools, practices, and culture to build proprietary software.
As home to the world's open source community, GitHub has seen the impact of innersource firsthand. For example, in our 2021 State of the Octoverse report, we've seen that teams that follow innersource principles like code reuse can see productivity increase by a staggering 87%. In this ebook, we'll explore how organizations like Ford and 3M use these and other innersource best-practices to improve velocity and accelerate innovation—and how GitHub can help.
Defining innersource
Innersource has been described in a variety of ways. Many companies use the word "innersource" to describe how their engineering teams work together on code. Developers in organizations that already engage with large open source communities may not use the term innersource at all. Instead, they think of it simply as the way they apply open source methodologies to software development at work.
Innersource is a development methodology where engineers build proprietary software using best practices from large-scale open source projects. Adopting innersource practices is like starting an open source community within your organization. As with open source, transparent collaboration mobilizes a community's collective knowledge and skills to create better software. An innersource community, in contrast, contains the knowledge, skills, and abilities of people and tools within a single enterprise.
Innersource brings best practices found in open source, and thus, an immersive DevOps culture. These best practices include collaborating with developers outside your core team, reducing duplicative work with code that's shareable and reusable, encouraging transparent discussions and collaboration, and rapid iteration and feedback loops. All combined? Better customer experiences, delivered faster.
Five ways innersource can accelerate innovation
Collaborate with context across teams and time zones
The way people work has changed with globally distributed teams and remote work becoming the norm. Making the most of a worldwide workforce means that no matter where work happens, from HQ to the living room couch, it happens in a collaborative, transparent, and open way. It also means that organizations can adopt more inclusive and flexible hiring practices: hiring the right people for the work, regardless of their location.
Zendesk's global offices are a great example. The company values transparency, especially on the engineering side, so that an engineer in Copenhagen can understand and leverage work happening in San Francisco. Jason Smale, Zendesk's VP of Engineering, describes the team's internal setup as similar to one you'd find in an open source project, with maintainers and contributors collaborating on the company's ecosystem.
Clear and documented ownership of projects allows each team to manage the chaos of different workstreams without shutting them off from great ideas. They leverage the company's collective brain power by allowing anyone on any team to contribute to, build on, or reuse existing work. As Smale explains, "Our engineering culture is open and centered around teams owning services and being responsible for running them in production."
Shared ownership is an important aspect of code quality and collaboration at Spotify as well. "You need both openness and ownership," Product Manager Laurent Ploix said. Giving teams ownership over particular projects increases their pride in their work and simplifies decision making because one individual or group has the final say in approving changes. "With strong ownership, we avoid code piling up where no one knows whether it's being used or not," Ploix said. But allowing and encouraging non-owners to submit improvements increases the number of eyes looking for bugs and opens those projects up to innovative new features. Or, as Ploix said: "Someone out there might find a better solution than I can."
Innersource doesn't just improve cross-team functions, it also helps teams work asynchronously across geographic divides and varying schedules—an increasingly important ability for any organization. "GitHub helps us collaborate with people who are remote," explains Erika Moreno Sierra, Senior Software Engineer at Deliveroo. "There are a lot of discussions happening within pull requests." Senior Software Engineer Florian Thomas' team is currently working with data scientists who write machine learning models and can quickly link him to new versions on GitHub. "We have the same access, so it's easy for me to follow."
Even with teams working across locations and regions, GitHub and innersource still provide "a common language" for international organizations like Otto Group to share code and resources. With GitHub as their source of truth, Otto Group has advanced innersource programs within 18 of its subsidiary companies. "This development was driven by a group-wide transformation process that stands for a new era of collaboration," says Dr. Hanna Huber, Otto Group VP of Technology Strategy and Governance.
And like the open source collaboration that innersource emulates, scalability is built-in from day one. According to Engie's Tooling and CI/CD Leader Jean-Hervé Laveau, innersource initiatives encourage "sharing capacities and knowledge and sources to scale." With employees spread across 70 countries, Engie's developers can "share at scale, all around the world."
GitHub Tip: To keep work moving across time zones, utilize GitHub as a collaboration platform to discuss ideas, changes, and perform reviews asynchronously with GitHub Issues and pull requests. Learn more
Getting new ideas to customers faster
Opening up a project invites more ideas. It can also help teams step up their code quality, remove friction from their processes, and get work to production faster. Tom Erickson, Supervisor of Global Software Tools and Processes at Ford, sees the value in not only encouraging more ideas about code but also about process and work styles. "Developers can make suggestions and adopt a style of working that's more open and fits their needs," he says. "If you want to ship higher quality software faster, innersourcing just makes sense."
Speed and innovation go hand-in-hand with innersource, turning the process of code-sharing on platforms like GitHub into a two-fold benefit for developers and customers: For example, DXC can build applications faster—especially important in times of fast-changing market dynamics—and give developers a single index for all the code they create. For example, DXC technical lead Tom Halpin says that when a colleague had a question about the web testing framework Cypress he was able to simply search the company's GitHub and find an in-house expert on the technology. "It helps us unlock the intellectual capacity of DXC," he says.
Now, says DXC Fellow, VP and CTO of Modern Apps and Cloud Native Chris Swan, products they assumed would take six months ended up taking six weeks. "Customers were expecting to have to lay a lot of foundations for themselves before they could build their house," Swan explains. "But we were able to come along and say 'We've done all that already. Just put up the timber frame and sides.'" As a result, DXC's customers can get to market faster and be more competitive.
For organizations like Otto Group and 3M, which have multiple divisions and subsidiaries, innersourcing allows developers, not just customers, to get faster access to internal solutions and technology. "You do it once, provide for many," says Kevin Truckenmiller, Lead DevOps Engineer in Corporate Research Systems Lab (CRSL). Countless 3M divisions use Docker containers and develop in AWS. Since they all require access to AWS, that also means managing thousands of AWS credentials. Before GitHub, individual divisions would create their own credential tooling, resulting in multiple tools for the same purpose. Instead, CRSL created one federation tool to help teams access their AWS accounts using credentials from their corporate directory. Now, teams can easily open a pull request to download the tool's code from a GitHub repository and put it to use. "Velocity is key. Instead of someone asking if we can build a feature for them, they can open a pull request and add it themselves," says Truckenmiller. This self-service model enables people to unblock their own dependencies.
Still, successful innersourcing comes down to balance—moving at top speed while not skipping the crucial steps between. To avoid slowing projects down as teams grow, thoughtful processes and documentation take on an equally important role. For example, teams at Stripe frequently work on each other's code, but no matter where it comes from, it always goes through the same review process. (And with automation tools, like GitHub Advanced Security code scanning and linters, that review process moves quickly and efficiently.) Documentation on contributing to and reviewing code takes the burden of figuring out "what's next" off individual contributors, making it easier to get involved on a project's terms. Stripe Developer Advocate Michael Glukhovsky finds the ability to contribute without friction empowering: "If you see something that needs to get fixed, you can submit a pull request, and start a conversation."
GitHub Tip: Make sure collaborators know vital information about the codebase and how to participate by adding README and CONTRIBUTING files to your repositories. Learn more
Discovering and reusing code across teams
It's an all-too-familiar moment: Your team plans, designs, and implements a new UI pattern for your product. It's usable, effective, and iterated to perfection over a few months. But then you stumble upon a pull request with a similar feature, developed independently by another team. Not only could your code have spared its creators some work, but now there's an inconsistency in your product's user experience. Adapting and reusing field-tested features seems obvious. Making your code discoverable for other teams isn't.
For ENGIE Digital's Innersource Project Lead Florent Zara, "[The goal of innersource] is to break down silos and encourage people to work together." He explains that innersource gets projects out in the open, making it easier to discover, reuse, and build on code across the organization. Charline Grenet, Head of Digital Communities and Communications, agrees. "Everything we do has to be industrialized to be reusable," says Grenet. "We want to have projects that will be 100 percent innersourced."
The practice holds up even in larger companies like Autodesk and Ford, where Ford Chief Engineer Florian Frischmuth feels that keeping code in one place, like on GitHub, makes it easier to discover. "Our environment allows developers to find solutions that have already been developed. They can collaborate on those, and then reuse them."
Previously, Autodesk engineers would build a complex piece of software many times over "because the one that existed only did 90 percent of what we needed," says Senior Director of the Build Platform, George Swan. They'd copy the branch, make it their own, and add the final 10 percent. Now, employees have access to nearly 100 percent of the Autodesk IP. Of 19,000 repositories, only about 10 are private. "We are open to everybody."
Through code sharing and reuse, some teams start to resemble the open source communities where innersource and DevOps best practices first began, like at Spotify, where developers who own projects take on roles similar to some open source maintainers. They receive and triage new bugs, ideas, and code. They also might be responsible for deprecating or even archiving their projects. According to Ploix, "They become maintainers, for sure. And with strong ownership, we avoid code piling up where no one knows whether it's being used or not."
GitHub Tip: Enterprise accounts can set a default permission level for all GitHub repositories in their organization. Help developers easily find and share code by setting default repository permissions to open or "none." Learn more
Stepping up code quality and security
There's a logical tension between "open" and "secure." As people release software with a growing number of open source dependencies, it's more important than ever that software teams make security a priority from the start. In practice, enterprise teams have found that more collaborators create more opportunities to catch bugs and other issues. They also find that this approach invites security expertise into the process sooner.
At Nationwide, teams once kept projects close to the chest, but opening them up, at least internally, proved integral to higher quality code at scale. Cindy Payne, Nationwide's Associate Vice President of IT Application Services explained that the projects teams were most hesitant to share often benefited most from outside perspectives. The practice also helped address security vulnerabilities, allowing the team to quickly assess impact, then triage the situation accordingly.
Innersource may happen behind the company firewall, but scalability is always at the forefront. "3M's core values are not necessarily just company-centric," says Truckenmiller. "We really do have the rest of the world in mind. We want to protect IP, but at the same time, we don't want to solve the same problem five ways." By shifting to a more open innersource model, a single solution can be shared amongst several researchers—with impacts that ripple all the way to consumers. "We're moving towards more openness, which ultimately creates a communication culture and a generative culture, rather than one that's bureaucratic and process-based."
"The base of queries is only expanding, not just through GitHub but through other companies' expertise. It makes the potential for the value that we get, just at static analysis, to be much greater than it is today." David Ross, Staff Security Engineer at Postmates
GitHub Tip: Security is everyone's responsibility, not just your security team's. Turn on code scanning alerts to help developers find and fix security issues whenever they open a new pull request. Learn more
Saving time and accelerating innovation with self-service
When it comes to starting new projects, many teams still follow a request-and-wait model. They put in a request, and a central administrator spins up a new repository. This model adds two layers of complexity to what could be a simpler process: administrative maintenance and barriers to trying something new. Innersource, on the other hand, grants everyone the autonomy to get started without friction.
Allowing teams to create their own projects may sound like more work, and the upfront effort of documenting a new process and even creating governance models can seem daunting. But many teams have found that a self-service model ultimately saves time on maintenance and empowers developers to just get started.
Payne finds that self-service GitHub repositories not only remove blockers, but they also save the company time and money from an infrastructure perspective. Of switching models, she says, "We knew we were going to save money, but that savings immediately turned into more capacity for teams to do the most valuable work for our business."
Established manufacturers like Continental and Ford have also found that removing barriers has encouraged fresh creativity, explains Continental's Innersource Project Manager Zsuzsanna Gnandt. "With innersource, we want to enable all developers with the freedom to be creative, to drive innovation without barriers, and to be appreciated for their contributions across the company."
With Ford's code accessible to everyone in their organization, teams are no longer separated by their organizational structures. Instead, they can work together on new code and make the most out of existing solutions. "Our environment allows developers to find solutions that have already been developed. They can collaborate on those, and then reuse them," says Chief Engineer Florian Frischmuth.
By leveraging GitHub's collaborative platform and secure connection to the open source community, Spotify's developers get the best of both worlds: innersourcing internally, and open sourcing non-IP work.
Whether outside or behind the firewall, thousands of contributors mean thousands of ideas, greater diversity of thought, and ultimately, better customer experiences. "Pull requests are welcome," says Ploix. "Someone out there might find a better solution than I can."
GitHub Tip: Recognize developer innovation across public and private repositories with unified contributions. By connecting developers' GitHub Enterprise accounts with their GitHub.com accounts, they'll get public credit for their hard work, plus collaboration opportunities and access to new talent and tools. Learn more
DevOpsInnersourceMethodologyCollaborationDeveloper Productivity


text:
Brnabic Reaffirms Russian Cooperation, Mentions 180 Years of Diplomatic Relations
on February 14, 2018 in Russia and The Balkans, Serbia
"The Prime Minister of the Republic of Serbia, Ana Brnabić, pointed out in today's interview with the Minister of Economic Development of the Russian Federation, Maxim Oreshkin, that the Russian Federation is a reliable partner and a traditional friend, and at the same time one of Serbia's most important economic partners.
When it comes to the bilateral relations of the two countries, the Prime Minister assessed that they are based on mutual respect and trust, as well as the continued support of the two countries in many areas, the government's Office for Media Cooperation announced.
Brnabić pointed out that this month marks 180 years of diplomatic relations between Serbia and Russia, when the visit of Minister of Foreign Affairs of the Russian Federation Sergey Lavrov to Serbia is planned." (translated from Vecernje Novosti)
Russian FM Lavrov to Visit Serbia in February to Mark 180 Years of Diplomatic Relations
"Russian Foreign Minister Sergei Lavrov has accepted the invitation of Serbian Foreign Minister Ivica Dacic to visit Belgrade in February. 'I will come with pleasure and I am looking forward to visiting the friendly Belgrade,'…
Russian MiGs Arrive in Serbia
Russia has delivered all six of the MiG-29s to Serbia after a meeting between then Prime Minister, and current President, Aleksandar Vučić and Russian President Vladimir Putin in March 2017. The MiGs are a gift from Russia…
Defense Minister Vulin Meets Russian Ambassador to Serbia
"Defense Minister Aleksandar Vulin met today with the Ambassador of Russia in Serbia, Aleksandar Chepurin, who pointed principled support for Moscow's current policy of Belgrade towards Kosovo and Metohija, as well as in relations with…
Croatia-Russian Relations Sour Quickly
"Croatian officials in contact with Russian counterparts had never asked the questions, nor stood any objections to us in relations to the alleged anti-EU and anti-Croat propaganda, or any other information activities that could be…
Russian Parliament Delegation on Official Visit to Serbia
Russian government-owned news outlet TASS is reports, "A delegation of Russia's Federation Council (upper house of parliament) led by its Speaker, Valentina Matviyenko, will pay an official visit to Serbia on November 20-21, during which…
Kolinda in DC to Celebrate 25 Years of US-Croatia Diplomatic Relations Gala Event
by Steve Rukavina, President of the National Federation of Croatian Americans. On Wednesday, December 6th, Madam President of the Republic of Croatia, Kolinda Grabar-Kitarovic was the honored special guest at the 25th Anniversary of the…


text:
/* eslint-disable @calm/react-intl/missing-attribute */
import React from 'react';
import PropTypes from 'prop-types';
import { makeStyles } from '@material-ui/core/styles';
import { FormattedMessage, defineMessages, injectIntl, intlShape } from 'react-intl';
import Box from '@material-ui/core/Box';
import Button from '@material-ui/core/Button';
import FormControl from '@material-ui/core/FormControl';
import GetAppIcon from '@material-ui/icons/GetApp';
import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
import Table from '@material-ui/core/Table';
import TableBody from '@material-ui/core/TableBody';
import TableCell from '@material-ui/core/TableCell';
import TableContainer from '@material-ui/core/TableContainer';
import TableHead from '@material-ui/core/TableHead';
import TableRow from '@material-ui/core/TableRow';
import TableSortLabel from '@material-ui/core/TableSortLabel';
import Tooltip from '@material-ui/core/Tooltip';
import Typography from '@material-ui/core/Typography';
import Card from '@material-ui/core/Card';
import CardContent from '@material-ui/core/CardContent';
import HelpIcon from '@material-ui/icons/HelpOutline';
import SettingsHeader from '../SettingsHeader';
import LanguageSwitcher from '../../LanguageSwitcher';
import { ContentColumn, textSecondary } from '../../../styles/js/shared';

const useStyles = makeStyles(theme => ({
  container: {
    maxHeight: 720,
  },
  dropDowns: {
    gap: `${theme.spacing(2)}px`,
  },
  tableCell: {
    whiteSpace: 'nowrap',
  },
  helpIcon: {
    marginLeft: theme.spacing(1),
    color: textSecondary,
    cursor: 'help',
  },
  typographyButton: {
    fontSize: 14,
    textTransform: 'none',
  },
  typographyBody1: {
    fontSize: 14,
  },
}));

const messagesDescription = 'Explanation on table header, when hovering the "help" icon, on data settings page';
const messages = defineMessages({
  conversations: {
    id: 'teamDataComponent.conversations',
    defaultMessage: 'Starts when a user interacts with the bot and ends after 15 minutes of inactivity.',
    description: messagesDescription,
  },
  averageMessagesPerDay: {
    id: 'teamDataComponent.averageMessagesPerDay',
    defaultMessage: 'Average messages per day sent back and forth between users and the bot.',
    description: messagesDescription,
  },
  uniqueUsers: {
    id: 'teamDataComponent.uniqueUsers',
    defaultMessage: 'Unique users who interacted with the bot.',
    description: messagesDescription,
  },
  returningUsers: {
    id: 'teamDataComponent.returningUsers',
    defaultMessage: 'Unique users who had at least one session in the current month, and at least one session in the last previous two months.',
    description: messagesDescription,
  },
  validNewRequests: {
    id: 'teamDataComponent.validNewRequests',
    defaultMessage: 'User requests associated with claims that are not in the trash.',
    description: messagesDescription,
  },
  publishedNativeReports: {
    id: 'teamDataComponent.publishedNativeReports',
    defaultMessage: 'Published reports created in Check (for all languages and platforms).',
    description: messagesDescription,
  },
  publishedImportedReports: {
    id: 'teamDataComponent.publishedImportedReports',
    defaultMessage: 'Published reports imported from web sites (for all languages and platforms).',
    description: messagesDescription,
  },
  requestsAnsweredWithReport: {
    id: 'teamDataComponent.claimsAnsweredWithAReport',
    defaultMessage: 'For example, if two users requested the same claim and received the same report, it counts as one.',
    description: messagesDescription,
  },
  reportsSent: {
    id: 'teamDataComponent.reportsSent',
    defaultMessage: 'Reports sent in response to requests. For example, if two users requested the same claim and received the same report, it counts as two.',
    description: messagesDescription,
  },
  uniqueUsersWhoReceivedReport: {
    id: 'teamDataComponent.uniqueUsersWhoReceivedReport',
    defaultMessage: 'Unique users who received a report. For example, if one user received three reports, it counts as one.',
    description: messagesDescription,
  },
  responseTime: {
    id: 'teamDataComponent.responseTime',
    defaultMessage: 'Average time between a user request and a report sent.',
    description: messagesDescription,
  },
  uniqueNewslettersSent: {
    id: 'teamDataComponent.uniqueNewslettersSent',
    defaultMessage: 'Unique newsletters sent, for all platforms. This information started to be collected in June 1st, 2022.',
    description: messagesDescription,
  },
  newNewsletterSubscriptions: {
    id: 'teamDataComponent.newNewsletterSubscriptions',
    defaultMessage: 'New newsletter subscriptions.',
    description: messagesDescription,
  },
  newsletterCancellations: {
    id: 'teamDataComponent.newsletterCancellations',
    defaultMessage: 'New newsletter cancellations.',
    description: messagesDescription,
  },
  currentSubscribers: {
    id: 'teamDataComponent.currentSubscribers',
    defaultMessage: 'Current number of newsletter subscriptions.',
    description: messagesDescription,
  },
});

function descendingComparator(a, b, orderBy) {
  let value1 = a[orderBy];
  let value2 = b[orderBy];
  // Special case for months
  if (orderBy === 'Month') {
    const convertMonthToNumber = value => (parseInt(value.replace(/^([0-9]+)\..*/, '$1'), 10));
    value1 = convertMonthToNumber(a[orderBy]);
    value2 = convertMonthToNumber(b[orderBy]);
  }
  if (value2 < value1) {
    return -1;
  }
  if (value2 > value1) {
    return 1;
  }
  return 0;
}

function getComparator(order, orderBy) {
  return order === 'desc'
    ? (a, b) => descendingComparator(a, b, orderBy)
    : (a, b) => -descendingComparator(a, b, orderBy);
}

function stableSort(array, comparator) {
  const stabilizedThis = array.map((el, index) => [el, index]);
  stabilizedThis.sort((a, b) => {
    const order = comparator(a[0], b[0]);
    if (order !== 0) return order;
    return a[1] - b[1];
  });
  return stabilizedThis.map(el => el[0]);
}

function formatValue(header, value) {
  let formattedValue = value;
  if (header === 'Month') {
    formattedValue = value.replace(/^[0-9]+\. /, '');
  }
  return formattedValue;
}

const TeamDataComponent = ({
  intl,
  slug,
  data,
  defaultLanguage,
  languages,
}) => {
  const classes = useStyles();
  const defaultOrder = 'Month';
  const [currentLanguage, setCurrentLanguage] = React.useState(defaultLanguage);
  const [order, setOrder] = React.useState('asc');
  const [orderBy, setOrderBy] = React.useState(defaultOrder);

  const headers = data ? Object.keys(data[0]).filter(header => !['ID', 'Org', 'Language', 'Platform'].includes(header)) : null;

  const platforms = [];
  if (data) {
    data.forEach((row) => {
      if (platforms.indexOf(row.Platform) === -1) {
        platforms.push(row.Platform);
      }
    });
  }
  const [currentPlatform, setCurrentPlatform] = React.useState(platforms[0]);

  const helpMessages = {
    Conversations: intl.formatMessage(messages.conversations),
    'Average messages per day': intl.formatMessage(messages.averageMessagesPerDay),
    'Unique users': intl.formatMessage(messages.uniqueUsers),
    'Returning users': intl.formatMessage(messages.returningUsers),
    'Valid new requests': intl.formatMessage(messages.validNewRequests),
    'Published native reports': intl.formatMessage(messages.publishedNativeReports),
    'Published imported fact-checks': intl.formatMessage(messages.publishedImportedReports),
    'Requests answered with a report': intl.formatMessage(messages.requestsAnsweredWithReport),
    'Reports sent to users': intl.formatMessage(messages.reportsSent),
    'Unique users who received a report': intl.formatMessage(messages.uniqueUsersWhoReceivedReport),
    'Average (median) response time': intl.formatMessage(messages.responseTime),
    'Unique newsletters sent': intl.formatMessage(messages.uniqueNewslettersSent),
    'New newsletter subscriptions': intl.formatMessage(messages.newNewsletterSubscriptions),
    'Newsletter cancellations': intl.formatMessage(messages.newsletterCancellations),
    'Current subscribers': intl.formatMessage(messages.currentSubscribers),
  };

  const handleRequestSort = (event, property) => {
    const isAsc = orderBy === property && order === 'asc';
    setOrder(isAsc ? 'desc' : 'asc');
    setOrderBy(property);
  };

  const createSortHandler = property => (event) => {
    handleRequestSort(event, property);
  };

  let rows = [];
  if (data) {
    rows = stableSort(data.filter(row => row.Language === currentLanguage && row.Platform === currentPlatform), getComparator(order, orderBy));
  }

  const handleDownload = () => {
    const csv = [headers.join(',')];

    rows.forEach((row) => {
      const csvRow = [];
      headers.forEach((header) => {
        csvRow.push(formatValue(header, row[header]));
      });
      csv.push(csvRow.join(','));
    });

    // Create a blob
    const blob = new Blob([csv.join('\r\n')], { type: 'text/csv' });
    const url = URL.createObjectURL(blob);

    // Create a link to download it
    const pom = document.createElement('a');
    pom.href = url;
    pom.setAttribute('download', `data-report-${slug}-${currentPlatform.toLowerCase()}-${currentLanguage}-${new Date().toISOString().split('T')[0]}.csv`);
    pom.click();
  };

  return (
    <ContentColumn remainingWidth>
      <SettingsHeader
        title={
          <FormattedMessage
            id="teamDataComponent.title"
            defaultMessage="Tipline engagement data"
            description="Header for the stored data page of the current team"
          />
        }
        extra={
          <Box display="flex" className={classes.dropDowns}>
            <FormControl variant="outlined">
              { platforms.length > 1 ?
                <Select value={currentPlatform} onChange={(e) => { setCurrentPlatform(e.target.value); }} margin="dense">
                  {platforms.map(platform => (
                    <MenuItem value={platform} key={platform}>{platform}</MenuItem>
                  ))}
                </Select> : null }
            </FormControl>
            { JSON.parse(languages)?.length > 1 ?
              <LanguageSwitcher
                component="dropdown"
                currentLanguage={currentLanguage}
                languages={JSON.parse(languages)}
                onChange={setCurrentLanguage}
              /> : null }
          </Box>
        }
        actionButton={
          <Button variant="contained" color="primary" startIcon={<GetAppIcon />} onClick={handleDownload}>
            <FormattedMessage
              id="teamDataComponent.download"
              defaultMessage="Download CSV"
              description="Label for action button displayed on workspace data report page."
            />
          </Button>
        }
        helpUrl="https://help.checkmedia.org/en/articles/4511362"
      />
      <Card>
        <CardContent>
          { data ?
            <TableContainer className={[classes.container, 'team-data-component__with-data'].join(' ')}>
              <Table stickyHeader>
                <TableHead>
                  <TableRow>
                    {headers.map(header => (
                      <TableCell key={header} className={classes.tableCell} sortDirection={orderBy === header ? order : false}>
                        <TableSortLabel active={orderBy === header} direction={orderBy === header ? order : 'asc'} onClick={createSortHandler(header)}>
                          <Box display="flex" alignItems="center">
                            <Typography variant="button" className={classes.typographyButton}>
                              {header}
                            </Typography>
                            {' '}
                            { helpMessages[header] ?
                              <Tooltip key={header} title={helpMessages[header]} arrow>
                                <HelpIcon fontSize="small" className={classes.helpIcon} />
                              </Tooltip> : null }
                          </Box>
                        </TableSortLabel>
                      </TableCell>
                    ))}
                  </TableRow>
                </TableHead>
                <TableBody>
                  {rows.map(row => (
                    <TableRow key={row.ID}>
                      {headers.map(header => (
                        <TableCell key={`${row.ID}-${header}`} className={classes.tableCell}>
                          <Typography variant="body1" className={classes.typographyBody1}>
                            {formatValue(header, row[header])}
                          </Typography>
                        </TableCell>
                      ))}
                    </TableRow>
                  ))}
                </TableBody>
              </Table>
            </TableContainer> :
            <Box className="team-data-component__no-data">
              <Typography variant="body1" component="p" paragraph>
                <FormattedMessage
                  id="teamDataComponent.set1"
                  defaultMessage="Fill {thisShortForm} to request access to your data report."
                  values={{
                    thisShortForm: (
                      <a href="https://airtable.com/shrWpaztZ2SzD5TrA" target="_blank" rel="noopener noreferrer">
                        <FormattedMessage id="teamDataComponent.formLinkText" defaultMessage="this short form" />
                      </a>
                    ),
                  }}
                />
              </Typography>
              <Typography variant="body1" component="p" paragraph>
                <FormattedMessage id="teamDataComponent.set2" defaultMessage="Your data report will be enabled within one business day." />
              </Typography>
            </Box> }
        </CardContent>
      </Card>
    </ContentColumn>
  );
};

TeamDataComponent.defaultProps = {
  data: null,
  defaultLanguage: null,
  languages: '[]',
};

TeamDataComponent.propTypes = {
  slug: PropTypes.string.isRequired,
  data: PropTypes.arrayOf(PropTypes.object), // or null
  defaultLanguage: PropTypes.string, // or null
  languages: PropTypes.string, // JSON-encoded array of languages, or null
  intl: intlShape.isRequired,
};

export default injectIntl(TeamDataComponent);


text:
Awards, Ratings & Rankings
Sodexo Names Brett Ladd As New CEO of Government for North America
Sodexo announces that Brett Ladd will serve as the new CEO of the Government for North America and will be a member of Sodexo's North America Regional Leadership Committee.
GAITHERSBURG, Md., July 18, 2018 /3BL Media/ — Sodexo, a food services and facilities management company committed to improving Quality of Life, today announced that Brett Ladd will serve as the new CEO of the Government for North America and will be a member of Sodexo's North America Regional Leadership Committee. Previously, Ladd led growth and client retention initiatives as Senior Vice President of Sales for Government North America. He was a member of the executive team when Sodexo established its formal Government segment in 2002.
Ladd brings over 30 years of global leadership experience to Sodexo. He started his career as a production manager with Marriott Management Services and has held positions in Sodexo's Universities and Schools segments as an in-unit General Manager, District Manager and Operations Vice President.
"I am honored to have the opportunity to not only lead a team of talented and dedicated professionals within Sodexo Government North America, but especially to ensure we provide innovative services that improve the quality of life of our military and civil servants," said Ladd.
Outside of work, Ladd enjoys working with non-profit organizations and supporting all aspects of the military community.
Sodexo Government is the nation's largest food service contractor to the U.S. Government. Top clients include the U.S. Marine Corps, U.S. Army, U.S. Air Force and over 25 federal agencies. With more than 40 years of experience serving municipal, state, federal and military clients, Sodexo's Government segment and its nearly 3,000 employees provide 130,000 meals daily at more than 150 military and U.S. federal government locations in 26 states, serving 45.6 million meals annually with a focus on wellness and nutrition.
About Sodexo North America
Sodexo North America is part of a global, Fortune 500 company with a presence in 80 countries. Sodexo is a leading provider of integrated food, facilities management and other services that enhance organizational performance, contribute to local communities and improve quality of life for millions of customers in corporate, education, healthcare, senior living, sports and leisure, government and other environments daily. The company employs 150,000 people at 13,000 sites in all 50 U.S. states and Canada and indirectly supports tens of thousands of additional jobs through its annual purchases of $9.2 billion in goods and services from small to large American businesses. Sodexo is committed to supporting diversity and inclusion and safety, while upholding the highest standards of corporate responsibility and ethical business conduct. In support of local communities across the U.S., the Sodexo Stop Hunger Foundation has contributed close to $32 million over the past 20 years to help feed children in America impacted by hunger. To learn more about Sodexo, visit SodexoUSA.com, SodexoInsights.com and connect with us on Facebook, Instagram, LinkedIn, Twitter and YouTube.
More from Sodexo, Inc.
Sodexo at Vidant Medical Center Reduces Food Waste Amid COVID-19
Apr 8, 2021 11:50 AM ET
Sodexo Stop Hunger Foundation Awards Two Women-Led Nonprofits With Its Inaugural Women Empowerment Grants
Sodexo and 'Women Back to Work' Help Bridge the Employment Gap for Women Re-entering the Workforce
Mar 15, 2021 9:00 AM ET
Rollins College and Sodexo Launch New Program to Support Money to Student Emergency Fund Through Cookie Sales
Feb 26, 2021 11:35 AM ET
Sodexo Donates $100,000 of PPE to South Florida Nonprofit
Feb 25, 2021 2:50 PM ET
Tallahassee Memorial HealthCare and Sodexo Launch New Program to Address Food Insecurity With Emergency Food Kits
Sodexo Receives 100% on the Human Rights Campaign's 2021 Corporate Equality Index, Earning the Designation of "Best Place to Work for LGBTQ Equality"
Sodexo Donates 46,000 Snack Packages to the Greater Boston Food Bank With the Transportation Support of Sterling Corporation
Dec 22, 2020 5:15 PM ET


Description: 3 Phase Electric Furnace Wiring Diagram Schematic Diagrams Chromalox Heater Wiring Diagram Single Phase 3 Heating Element Electric Furnace Sequencer Wiring Diagram 3 Phase Electric Furnace Wiring Diagram Electric Furnace Wiring Diagram Sequencer #2804 from the above 3053x1574 resolutions which is part of the "DIY Needed" directory. Download this image for free in HD resolution the choice "Save full resolution" below. If you do not find the exact resolution you are looking for, then go for a native or higher resolution.
Certainly one of by far the most common electrical wiring inquiries is regarding how to wire a swap. While working with switches at your house is very straightforward, wiring one may not be that uncomplicated for everybody. An ON-OFF switch is really quite simple to wire. You will discover different types of switches, but for this example, let's say that you are setting up a single-pole toggle switch, a really widespread swap (and the simplest).
There are 3 shades of wires in a typical single-pole toggle switch: black, white, and eco-friendly. Splice the black wire in two and connect them to the terminal screws - a single on best plus the other around the bottom screw in the swap. The white wire serves as a resource of uninterrupted ability and is typically related to your gentle coloured terminal screw (e.g., silver). Link the eco-friendly wire to the ground screw within your swap.
These measures would commonly be adequate to generate a typical change get the job done with no difficulty. Then again, in the event you are usually not self-confident that you choose to can execute the process effectively and safely you much better enable the pros get it done in its place. After all, you will find a cause why this undertaking is amongst the commonest electrical wiring concerns asked by plenty of people.
For many purpose, tips on how to wire a ceiling fan is likewise certainly one of the most typical electrical wiring thoughts. To simplify this process, you can use one switch to get a single ceiling fan. To wire the supporter, it really is just a make a difference of connecting the black wire of the ceiling fan to the black wire with the switch. If there is a light-weight, the blue wire must be related on the black wire on the change in addition.
You will discover factors why these are definitely quite possibly the most generally questioned electrical wiring questions. One, many assume it is really simple to perform, and two, these are generally the typical electrical tasks at your home. But then you definately mustn't put your basic safety at risk in your purpose to economize. The stakes could even be much larger should you endeavor to save money and do an electrical wiring job devoid of enough expertise or expertise.


As per the announcement today by mynt CEO, Mauricio Bellora, Jeunesse has officially acquired mynt / MovaVie. mynt will continue to work as a separate company and will now have the financial backing of Jeunesse to bring mynt to the next level in the network marketing industry as a health and fitness company. Mauricio points out in the announcement that Jeunesse was so impressed with the growth, culture, and success of mynt in it's first two years that they decided the partnership would be a great decision.
If you'd like more information about mynt and how to get started in the business, contact us today!
You can watch the replay of the LIVE announcement here (some parts of the video are a bit choppy).


With its V-neck, ruffled sleeves and embroidered flowers, Leon & Harper's 'Tatine' T-shirt is the perfect addition to your springtime wardrobe capsule. Crafted from organic cotton, it features pretty frill sleeves and a tie dye print. Team yours with high rise denim and sneakers.