text:
package de.ids_mannheim.korap.web.controller;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.net.URI;

import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response.Status;

import org.apache.http.entity.ContentType;
import org.apache.oltu.oauth2.common.error.OAuthError;
import org.apache.oltu.oauth2.common.message.types.GrantType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.MultiValueMap;
import org.springframework.web.util.UriComponentsBuilder;

import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.net.HttpHeaders;
import javax.ws.rs.ProcessingException;
import javax.ws.rs.core.Response;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;

import org.glassfish.jersey.uri.UriComponent;

import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
import de.ids_mannheim.korap.config.Attributes;
import de.ids_mannheim.korap.config.SpringJerseyTest;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.oauth2.constant.OAuth2ClientType;
import de.ids_mannheim.korap.oauth2.constant.OAuth2Error;
import de.ids_mannheim.korap.oauth2.dao.RefreshTokenDao;
import de.ids_mannheim.korap.utils.JsonUtils;
import de.ids_mannheim.korap.utils.TimeUtils;
import de.ids_mannheim.korap.web.input.OAuth2ClientJson;

/**
 * Provides common methods and variables for OAuth2 tests,
 * and does not run any test.
 *
 * @author margaretha
 *
 */
public abstract class OAuth2TestBase extends SpringJerseyTest {

    @Autowired
    protected RefreshTokenDao refreshTokenDao;

    protected String publicClientId = "8bIDtZnH6NvRkW2Fq";
    // without registered redirect URI
    protected String publicClientId2 = "nW5qM63Rb2a7KdT9L";
    protected String confidentialClientId = "9aHsGW6QflV13ixNpez";
    protected String confidentialClientId2 = "52atrL0ajex_3_5imd9Mgw";
    protected String superClientId = "fCBbQkAyYzI4NzUxMg";
    protected String clientSecret = "secret";
    protected String state = "thisIsMyState";

    public static String ACCESS_TOKEN_TYPE = "access_token";
    public static String REFRESH_TOKEN_TYPE = "refresh_token";

    protected int defaultRefreshTokenExpiry = TimeUtils.convertTimeToSeconds("365D");

    protected String clientURL = "http://example.client.com";
    protected String clientRedirectUri = "https://example.client.com/redirect";

    protected MultivaluedMap<String, String> getQueryParamsFromURI (URI uri) {
        return UriComponent.decodeQuery(uri, true);
    };

    protected Form getSuperClientForm () {
        Form form = new Form();
        form.param("super_client_id", superClientId);
        form.param("super_client_secret", clientSecret);
        return form;
    }

    protected Response requestAuthorizationCode (String responseType,
            String clientId, String redirectUri, String scope, String state,
            String authHeader) throws KustvaktException {

        WebTarget request =
                target().path(API_VERSION).path("oauth2").path("authorize");

        if (!responseType.isEmpty()) {
            request = request.queryParam("response_type", responseType);
        }
        if (!clientId.isEmpty()) {
            request = request.queryParam("client_id", clientId);
        }
        if (!redirectUri.isEmpty()) {
            request = request.queryParam("redirect_uri", redirectUri);
        }
        if (!scope.isEmpty()) {
            request = request.queryParam("scope", scope);
        }
        if (!state.isEmpty()) {
            request = request.queryParam("state", state);
        }

        return request.request().header(Attributes.AUTHORIZATION, authHeader)
                .get();
    }

    protected String requestAuthorizationCode (String clientId,
            String authHeader) throws KustvaktException {

        Response response = requestAuthorizationCode("code", clientId, "",
                "", "", authHeader);
        assertEquals(Status.TEMPORARY_REDIRECT.getStatusCode(),
                response.getStatus());
        URI redirectUri = response.getLocation();

        MultiValueMap<String, String> params = UriComponentsBuilder
                .fromUri(redirectUri).build().getQueryParams();
        return params.getFirst("code");
    }

    protected String requestAuthorizationCode (String clientId,
            String redirect_uri, String authHeader) throws KustvaktException {
        Response response = requestAuthorizationCode("code", clientId,
                redirect_uri, "", "", authHeader);
        assertEquals(Status.TEMPORARY_REDIRECT.getStatusCode(),
                response.getStatus());
        URI redirectUri = response.getLocation();

        MultiValueMap<String, String> params = UriComponentsBuilder
                .fromUri(redirectUri).build().getQueryParams();
        return params.getFirst("code");
    }

    protected Response requestToken (Form form)
            throws KustvaktException {
        return target().path(API_VERSION).path("oauth2").path("token")
                .request()
                .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
                .header(HttpHeaders.CONTENT_TYPE,
                        ContentType.APPLICATION_FORM_URLENCODED)
               .post(Entity.form(form));
    }

    // client credentials as form params
    protected Response requestTokenWithAuthorizationCodeAndForm (
            String clientId, String clientSecret, String code)
            throws KustvaktException {

        Form form = new Form();
        form.param("grant_type", "authorization_code");
        form.param("client_id", clientId);
        form.param("client_secret", clientSecret);
        form.param("code", code);

        return target().path(API_VERSION).path("oauth2").path("token")
                .request()
                .header(HttpHeaders.CONTENT_TYPE,
                        ContentType.APPLICATION_FORM_URLENCODED)
                .post(Entity.form(form));
    }

    protected Response requestTokenWithAuthorizationCodeAndForm (
            String clientId, String clientSecret, String code,
            String redirectUri) throws KustvaktException {

        Form form = new Form();
        form.param("grant_type", "authorization_code");
        form.param("client_id", clientId);
        form.param("client_secret", clientSecret);
        form.param("code", code);
        if (redirectUri != null) {
            form.param("redirect_uri", redirectUri);
        }

        return target().path(API_VERSION).path("oauth2").path("token")
                .request()
                .header(HttpHeaders.CONTENT_TYPE,
                        ContentType.APPLICATION_FORM_URLENCODED)
                .post(Entity.form(form));
    }

    // client credentials in authorization header
    protected JsonNode requestTokenWithAuthorizationCodeAndHeader (
            String clientId, String code, String authHeader)
            throws KustvaktException {
        Form form = new Form();
        form.param("grant_type", "authorization_code");
        form.param("client_id", clientId);
        form.param("code", code);

        Response response = target().path(API_VERSION).path("oauth2")
                .path("token")
                .request()
                .header(Attributes.AUTHORIZATION, authHeader)
                .header(HttpHeaders.CONTENT_TYPE,
                        ContentType.APPLICATION_FORM_URLENCODED)
                .post(Entity.form(form));

        String entity = response.readEntity(String.class);
        return JsonUtils.readTree(entity);
    }

    protected Response requestTokenWithDoryPassword (String clientId,
            String clientSecret) throws KustvaktException {
        return requestTokenWithPassword(clientId, clientSecret, "dory",
                "password");
    }

    protected Response requestTokenWithPassword (String clientId,
            String clientSecret, String username, String password)
            throws KustvaktException {
        Form form = new Form();
        form.param("grant_type", "password");
        form.param("client_id", clientId);
        form.param("client_secret", clientSecret);
        form.param("username", username);
        form.param("password", password);

        return requestToken(form);
    }

    protected void testRequestTokenWithRevokedRefreshToken (String clientId,
            String clientSecret, String refreshToken) throws KustvaktException {
        Form form = new Form();
        form.param("grant_type", GrantType.REFRESH_TOKEN.toString());
        form.param("client_id", clientId);
        form.param("client_secret", clientSecret);
        form.param("refresh_token", refreshToken);
        if (clientSecret != null) {
            form.param("client_secret", clientSecret);
        }

        Response response =
                target().path(API_VERSION).path("oauth2").path("token")
                        .request()
                        .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
                        .header(HttpHeaders.CONTENT_TYPE,
                                ContentType.APPLICATION_FORM_URLENCODED)
                        .post(Entity.form(form));

        String entity = response.readEntity(String.class);
        JsonNode node = JsonUtils.readTree(entity);
        assertEquals(OAuth2Error.INVALID_GRANT, node.at("/error").asText());
        assertEquals("Refresh token has been revoked",
                node.at("/error_description").asText());
    }

    protected Response registerClient (String username,
            OAuth2ClientJson json) throws
            ProcessingException, KustvaktException {
        return target().path(API_VERSION).path("oauth2").path("client")
                .path("register")
                .request()
                .header(Attributes.AUTHORIZATION,
                        HttpAuthorizationHandler
                                .createBasicAuthorizationHeaderValue(username,
                                        "password"))
                .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
                .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON)
                .post(Entity.json(json));
    }

    protected Response registerConfidentialClient (String username)
            throws KustvaktException {

        OAuth2ClientJson json = new OAuth2ClientJson();
        json.setName("OAuth2ClientTest");
        json.setType(OAuth2ClientType.CONFIDENTIAL);
        json.setUrl(clientURL);
        json.setRedirectURI(clientRedirectUri);
        json.setDescription("This is a confidential test client.");

        return registerClient(username, json);
    }

    protected void testConfidentialClientInfo (String clientId, String username)
            throws ProcessingException,
            KustvaktException {
        JsonNode clientInfo = retrieveClientInfo(clientId, username);
        assertEquals(clientId, clientInfo.at("/client_id").asText());
        assertEquals("OAuth2ClientTest", clientInfo.at("/client_name").asText());
        assertEquals(OAuth2ClientType.CONFIDENTIAL.name(),
                clientInfo.at("/client_type").asText());
        assertEquals(username, clientInfo.at("/registered_by").asText());
        assertEquals(clientURL, clientInfo.at("/client_url").asText());
        assertEquals(clientRedirectUri,
                clientInfo.at("/client_redirect_uri").asText());
        // 31536000 seconds
        assertEquals(defaultRefreshTokenExpiry,
                clientInfo.at("/refresh_token_expiry").asInt());
        assertNotNull(clientInfo.at("/description"));
        assertNotNull(clientInfo.at("/registration_date"));
        assertTrue(clientInfo.at("/permitted").asBoolean());
        assertTrue(clientInfo.at("/source").isMissingNode());

    }

    protected void deregisterClient (String username,
            String clientId) throws
            ProcessingException, KustvaktException {

        Response response = target().path(API_VERSION).path("oauth2")
                .path("client").path("deregister").path(clientId)
                .request()
                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
                        .createBasicAuthorizationHeaderValue(username, "pass"))
                .delete();

        assertEquals(Status.OK.getStatusCode(), response.getStatus());
    }

    protected JsonNode retrieveClientInfo (String clientId, String username)
            throws ProcessingException,
            KustvaktException {
        Response response = target().path(API_VERSION).path("oauth2")
                .path("client").path(clientId)
                .request()
                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
                        .createBasicAuthorizationHeaderValue(username, "pass"))
                .get();

        assertEquals(Status.OK.getStatusCode(), response.getStatus());

        String entity = response.readEntity(String.class);
        return JsonUtils.readTree(entity);
    }

    protected Response searchWithAccessToken (String accessToken) {
        return target().path(API_VERSION).path("search")
                .queryParam("q", "Wasser").queryParam("ql", "poliqarp")
                .request()
                .header(Attributes.AUTHORIZATION, "Bearer " + accessToken)
                .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
                .get();
    }

    protected void testSearchWithOAuth2Token (String accessToken)
            throws KustvaktException, IOException {
        Response response = searchWithAccessToken(accessToken);
        String entity = response.readEntity(String.class);
        assertEquals(Status.OK.getStatusCode(),
                response.getStatus());
        JsonNode node = JsonUtils.readTree(entity);
        assertNotNull(node);
        assertEquals(25, node.at("/matches").size());
    }

    protected void testSearchWithRevokedAccessToken (String accessToken)
            throws KustvaktException {
        Response response = searchWithAccessToken(accessToken);
        String entity = response.readEntity(String.class);
        assertEquals(Status.UNAUTHORIZED.getStatusCode(),
                response.getStatus());

        JsonNode node = JsonUtils.readTree(entity);
        assertEquals(StatusCodes.INVALID_ACCESS_TOKEN,
                node.at("/errors/0/0").asInt());
        assertEquals("Access token is invalid",
                node.at("/errors/0/1").asText());
    }

    protected void testRevokeTokenViaSuperClient (String token,
            String userAuthHeader) {
        Form form = new Form();
        form.param("token", token);
        form.param("super_client_id", superClientId);
        form.param("super_client_secret", clientSecret);

        Response response = target().path(API_VERSION).path("oauth2")
                .path("revoke").path("super")
                .request()
                .header(HttpHeaders.CONTENT_TYPE,
                        ContentType.APPLICATION_FORM_URLENCODED)
                .header(Attributes.AUTHORIZATION, userAuthHeader)
                .post(Entity.form(form));

        assertEquals(Status.OK.getStatusCode(), response.getStatus());
        assertEquals("SUCCESS", response.readEntity(String.class));
    }

    protected void testRevokeToken (String token, String clientId,
            String clientSecret, String tokenType) {
        Form form = new Form();
        form.param("token_type", tokenType);
        form.param("token", token);
        form.param("client_id", clientId);
        if (clientSecret != null) {
            form.param("client_secret", clientSecret);
        }

        Response response =
                target().path(API_VERSION).path("oauth2").path("revoke")
                        .request()
                        .header(HttpHeaders.CONTENT_TYPE,
                                ContentType.APPLICATION_FORM_URLENCODED)
                        .post(Entity.form(form));

        assertEquals(Status.OK.getStatusCode(), response.getStatus());
        assertEquals("SUCCESS", response.readEntity(String.class));
    }

    protected JsonNode listUserRegisteredClients (String username)
            throws ProcessingException,
            KustvaktException {
        Form form = getSuperClientForm();
        Response response = target().path(API_VERSION).path("oauth2")
                .path("client").path("list")
                .request()
                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
                        .createBasicAuthorizationHeaderValue(username, "pwd"))
                .header(HttpHeaders.CONTENT_TYPE,
                        ContentType.APPLICATION_FORM_URLENCODED)
                .post(Entity.form(form));

        assertEquals(Status.OK.getStatusCode(), response.getStatus());

        String entity = response.readEntity(String.class);
        return JsonUtils.readTree(entity);
    }

    protected void testInvalidRedirectUri (String entity, boolean includeState,
            int status) throws KustvaktException {
        JsonNode node = JsonUtils.readTree(entity);
        assertEquals(OAuthError.CodeResponse.INVALID_REQUEST,
                node.at("/error").asText());
        assertEquals("Invalid redirect URI",
                node.at("/error_description").asText());
        if (includeState) {
            assertEquals(state, node.at("/state").asText());
        }

        assertEquals(Status.BAD_REQUEST.getStatusCode(), status);
    }
}

redpajama_set_name: RedPajamaGithub


Copyright 2017 Resell-CNC, LLC All Rights Reserved. Resell-CNC, LLC retains ownership of all right, title and interest in all copyrights in all documents, text, images, and software owned by Resell-CNC, LLC and its subsidiaries.
This website (the "Website") provides general information about Resell-CNC, LLC ("Resell") and its products. The Website has been created solely for the purpose of providing information about Resell and the products and services it offers, and other information.
Use of Content/ Copyright Restriction: The contents of the Website (including all information, software, images, text, videos, and audio) and the design, all of which are proprietary to Resell or its licensors are protected by United States and international trademark laws regarding copyrights, trademarks, and other proprietary rights. Consent to use the content on the Website is permitted for personal, non-commercial, and informational uses only. You may not copy, change, store, transmit or distribute any of the material on the Website without the prior written authorization of Resell, except to: (a) store files that are automatically cached by your web browser for display enhancement purposes, and (b) print pages of the Website. All copies must preserve any trademarks, copyright and other marking with respect to the source of the information. Neither the title nor any intellectual property rights to any information or material in the Website are transferred to you, but remain with Resell. Except as expressly authorized by Resell in writing, you may not reproduce, sell or exploit for any commercial purposes any part of the Website.
(a) Specifically you agree not to do any of the following: (1) upload to or transmit on the Website any material that is, in Resell's sole discretion, libelous, lewd, indecent, obscene, harassing, or inappropriate; (2) use the Website to violate the legal rights (including the rights of publicity and privacy) of others; (3) intercept or attempt to intercept electronic mail not intended for you; (4) misrepresent an affiliation with any person or organization; (5) restrict or inhibit use of the Website by others, or upload or transmit files that contain a virus, malicious computer code, or corrupted data or are intended to harm electronic equipment or persons.
(b) Any content and/or opinions uploaded, expressed or submitted to a message board, forum or any other publicly available section of the Website (including password-protected areas), and all articles and responses to questions, other than the content provided by Resell, are solely the opinions and responsibility of the person or entity submitting them and do not necessarily reflect the opinions of Resell. You grant to Resell the right to use all content you upload or otherwise transmit to the Website in any manner Resell chooses, including, but not limited, to copying, displaying, performing or publishing it in any format whatsoever..
(c) Resell reserves the right, but does not assume any responsibility, to (1) remove any material posted on the Website which Resell, in its sole discretion, deems inconsistent with its policies and procedures with respect to the relevant online forum, including, but not limited to any material Resell has been notified, or has reason to believe, constitutes a copyright infringement; and any material that is not related to the relevant discussion or chat forum; (2) terminate any user's access to all or part of the Website; and (3) reformat, excerpt or translate any content submitted by you. However, Resell can neither review all material before it is posted on the Website nor ensure prompt removal of objectionable material after it has been posted. Accordingly, Resell assumes no liability for any action or inaction regarding transmissions, communications or content provided by third parties. Resell reserves the right to take any action it deems necessary to protect the personal safety of users of the Website and the public; however, Resell has no liability or responsibility to anyone for performance or nonperformance of the activities described in this paragraph.
Trademarks: The term "Resell CNC" is a trademark and the Resell logo and all related product and service names, designs and slogans are Resell trademarks. You may not use such marks without Resell's prior written permission. The term "Simple. Reliable. Trusted." is a trademark and all related product and service names, designs and slogans are Resell trademarks. You may not use such marks without Resell's prior written permission. All other names, brands and marks are used for identification purposes only and may be trademarks or registered trademarks of their respective owners.
Disclaimer: You assume all responsibility and risk for the use of the Website. Resell does not assume any liability for the information provided on, or available through, the Website (the "Site Content"). Any of the Site Content may include technical inaccuracies or typographical errors. Resell has the right to make changes and updates to the Site Content without prior notice. Neither the Site Content nor any advice or information given by Resell or its employees shall create any warranty. Reliance on such advice, information or the Site Content is solely at your own risk.
Limitation of Liability: Resell shall not be liable for any damages of any kind whatsoever arising out of your reliance on the information on the Website. Resell assumes no responsibility and shall not be liable for any damages resulting from viruses and malicious computer code that may affect your computer equipment, software, data or other property on account of your access to, use of, or browsing on the Website or any other linked Websites on or in the Internet generally or your downloading of any materials, data, text, images, video or audio from the Website or any linked Website or the Internet generally.
Any passwords used for the Website are for individual use only. You will be responsible for the security of your password.
You are prohibited from using any services or facilities provided in connection with the Website to compromise security or tamper with system infrastructure and/or accounts. The use or distribution of tools designed for compromising security (e.g., password guessing programs, cracking tools or network probing tools) is strictly prohibited. If you become involved in any violation of system security, Resell reserves the right to release your details to system administrators at other Websites in order to assist them in resolving security incidents.
Links to Third Party Websites: The Website may contains links to third party sites. Resell makes no representations or warranties regarding and does not endorse the content or availability of these services or resources. Any concerns regarding these services or resources, or any link associated thereto, should be directed to the particular outside service or resource. Your use of third party Websites is at your own risk and subject to the terms and conditions of use for such Websites. Neither Resell nor its affiliates shall be liable for any damages of any kind arising out of the access or use of any site linked from the Website.
Compliance with export control provisions. In disclosing to third parties the information, software, products and documentation made available by Resell you shall observe the respectively applicable provisions of national and international (re-) export control laws. In making any such disclosures, you must observe the (re-) export control provisions of the United States of America, in any case.
Prior to making any such disclosures, you shall particularly check and take suitable measures to ensure that you will not violate, by making such disclosure or by making other economic resources available to third parties in connection with the information, software, products and documentation made available by Resell, an embargo of the United States of America and/or the United Nations. Such information, software, products and documentation made available by Resell are not intended for use in prohibited or permit-requiring activities related to armaments, nuclear technology or weapons, unless any required permits will have been obtained and you also agree that you will not use these products for any purposes prohibited by United States law, including, without limitation, the development, design, manufacture, or production of nuclear missile, or chemical or biological weapons.
To the extent necessary for the purpose of export control audits conducted by government authorities or by Resell, you shall promptly make available to Resell, in response to an appropriate request, all information concerning the final recipient, final destination and intended use of the information, software, product and documentation made available by Resell, as well as the relevant export control restrictions in effect.
You shall fully indemnify and hold Resell harmless for all claims asserted by government authorities or other third parties against Resell for non-compliance with the above-mentioned export control obligations, and shall reimburse Resell for all losses and expenses incurred in this connection, unless you are not responsible for the breach of obligations. The foregoing does not entail a reversal of the burden of proof.
Fulfillment of the contract by Resell is subject to the reservation that such fulfillment is not opposed by any obstacles based in national or international regulations of foreign trade law, nor any embargos and/or other sanctions.
We always encourage customers to inspect equipment themselves or to hire a 3rd party technician to inspect equipment before purchasing.
Official Resell material placed on Social Media Forums will be identified with the Resell profile photo or other identifying name or logo. Any content, views, opinions and/or responses to questions uploaded, expressed or submitted by the creators, sponsors, advertisers or users of the Social Media Forums, including on its "walls," webpages, message boards and groups or otherwise communicated through it, other than the content provided by Resell, are solely the views, opinions and responsibility of the person submitting them and do not necessarily reflect the opinions of Resell. Resell is not responsible for content that third parties publish, post, upload, distribute, disseminate or otherwise transmit via the Social Media Forums.
Resell does not warrant the accuracy, completeness or usefulness of the information available on the Social Media Forums. Although we will use our best efforts to post accurate information, we cannot guarantee all information will be completely accurate or up-to-date.
Nothing contained in or provided through the Social Media Forums is intended to constitute advice or to serve as a substitute for the advice of a professional, including without limitation any safety guidelines, resources or precautions related to the installation, operation, maintenance or repair of Resell equipment or any other information related to safety that may be available on or through the Social Media Forums. Any reliance you place on such information is strictly at your own risk. We may include links to other webpages, but these links are not an endorsement of those pages. Resell is not responsible for the content of any website not operated by Resell.
Resell does not condone any form of harassment, written attacks, insults, vulgarity or indecency whether perpetrated in writing or the transmission of images. You agree not to do any of the following: (1) upload to or transmit using any Social Media Forum any defamatory, indecent, obscene, lewd, harassing, violent or otherwise objectionable material, or any material that is, or may be, protected by copyright, without permission from the copyright owner; (2) use any Social Media Forum to violate the legal rights (including the rights of publicity and privacy) of others or to violate the laws of any jurisdiction; (3) misrepresent an affiliation with any person or organization; (4) upload to or transmit on any Social Media Forum any advertisements or solicitations of business; (5) upload or otherwise transmit files that contain a virus, malicious computer code, or corrupted data; (6) collect information about others (including email addresses) without their consent; (7) upload files or photos or include in a comment links that you know, or have reason to believe, cannot be distributed legally using the Social Media Forums or that you have an obligation to keep confidential; or (8) engage in any other conduct that restricts or inhibits anyone's use or enjoyment of the Social Media Forums, or which, as determined by Resell, may harm Resell or visitors to the Social Media Forums or expose them to liability.
Session Cookies are temporary and remain in the cookie file of your browser until you leave the Website. Persistent Cookies remain in the cookie file of your browser for much longer. We may also employ cookies so that we remember your computer when it is used to return to the Website to help customize your Resell web experience. We may associate personal information with a cookie file.. Use the options in your web browser if you do not wish to receive a cookie or if you wish to set your browser to notify you when you receive a cookie. You can easily delete any cookies that have been installed in the cookie folder of your browser.
In all cases where third party cookies are used to track your behavior on Resell, you must refer to such third party's site to learn how to remove cookies for that third party specifically. Removing Resell cookies from your browser will not affect cookies placed by third parties.


The head of Lebanon's Hizbullah said on Tuesday that he had the backing of Iranian President Mohammad Khatami, despite U.S. demands and pressure.
Speaking to the movement's TV station, Al Manar, following his meeting with Khatami, Sheikh Hassan Nasrallah said there was no daylight between him and Iran.
"You know that Iran is being subjected to similar threats, under various titles, and so the Islamic Republic is also at risk," Nasrallah said when asked what Khatami had told him regarding U.S. pressure to rein in Hizbullah.
"The position is one of solidarity between the Islamic Republic, Syria, Lebanon, the resistance, the Palestinian people and all the honourable people of the Muslim community," he said.
On Monday, Khatami called for liberation of the remaining Lebanese lands from Israeli occupation as he reiterated Iran's support for "legitimate resistance of nations."
If people want on or off this list, please let me know.
Iran is still part of the "Axis Of Evil." Mohamed Khatami's "moderate" rhetoric is purely for Western consumption. The true face of the regime is shown in its steadfast support for anti-American terrorist groups in the Middle East, like Hezbollah.
This is why we don't need to deal with those associated with Khatami inside of Iran.
Forgot to ping you, but I see you made a great entrance already!
With us or with the terrorists, time to choose.
Guess the Iranians got the wrong message from Iraq.
so it won't happen to them. Too bad.


From the Forest & Beach barn, the beach at Beesands is a 20 minute walk through farmland (or a 3 minute drive). Beach School sessions take place on Beesands beach where the children can learn about our fantastic coastal environment. Children can take part in teacher-led activities as well as highly-valued child-initiated learning. Beach school activities can include searching the strandline, creating beach art, exploring rock pools and learning about our fantastic marine environment.
Coastal adventure days inspire children to learn about our amazing coastal environment. Children can enjoy teacher-led activities as well as child-initiated learning which is valued highly. Along with a tour of Start Point Lighthouse, activities can include identification of marine and coastal flora and fauna, shelter-building, learning about tides, art sculptures and much more.
Please view our terms and conditions prior to making a booking.


text:
Паровозное депо — памятник архитектуры регионального значения, расположенный в промышленной зоне вокзала Новосибирск-Главный. Состоит из двух зданий, построенных в 1893 и 1896 годах. 1 января 1896 года с вводом депо и других объектов вокзала началось регулярное движение железнодорожного транспорта на участке между Челябинском и станцией Обь.

История

Период Российской империи
1 октября 1896 года после возведения депо, вокзала, водонапорной башни и мастерских открылось регулярное движение по участку Челябинск — ст. Обь Западно-Сибирской железной дороги. Руководил работами Владимир Константинович Жандр, начальник дистанции первого разряда Среднесибирского участка железной дороги. В то время паровозное депо было крупнейшим предприятием Новониколаевска. Оно включало в себя вагонные, сварочные, слесарно-токарные, кузнечно-литейные мастерские и было рассчитано на 450 рабочих мест.

В августе 1896 года предприятие получило название — паровозное депо с мастерскими станции «Обь», 17 февраля 1898 года его назвали паровозным депо станции «Новониколаевск».

В мае 1898 года в депо был организован социал-демократический кружок, который начал распространять в среде рабочих-железнодорожников революционные идеи. В конце 1893 — начале 1894 года на основе нескольких новониколаевских кружков была создана Обская группа РСДРП.

Советский период
12 февраля 1926 года предприятие переименовано в паровозное депо станции «Новосибирск».

27 марта 1934 года в депо на митинге железнодорожников выступил М. И. Калинин, в честь этого события возле входа в цех «ТР-2 МВС» установлена мемориальная доска.

В 1940 году здесь возникло лунинское движение — одна из форм социалистического соревнования.

В период Великой Отечественной войны в депо был создан бронепоезд «Советская Сибирь», его экипаж организовали из работников депо и отправили на фронт.

3 июля 1952 года предприятию присвоено новое название — локомотивное депо станции «Новосибирск».

Описание

ТО-3 Электровозов
Цех «ТО-3 Электровозов» паровозного депо станции «Обь» был построен в 1893 году. Представляет собой одноэтажное прямоугольное в плане здание со стрельчатым фронтоном на одном торце и ступенчатым на другом. Фундамент выполнен из бута, цоколь — из кирпича. Кирпичные стены с бутовыми вставками усиливаются контрфорсами. Крыша и перекрытия здания железобетонные. Небольшого выноса многоступенчатый карниз декорирован поясами и сухариками. В 1960-е годы цех был незначительно реконструирован — увеличена его высота. Размеры здания: 84 × 21 м.

Цех 1896 года постройки
Цех был построен в 1896 году. Фундамент прямоугольного в плане двухсветного здания бутовый, цоколь сделан из кирпича. Стены цеха кирпичные. Карниз двойной с небольшим выносом. В межоконном пространстве выступают лопатки. У окон первого света лучковое завершение с замковым камнем, окна второго света — прямоугольные и также имеют замковый камень. Крыша и перекрытия из железобетона. В 1960-е годы при реконструкции здания появился второй свет и одноэтажная пристройка. Размеры здания в плане: 126 × 18,9 м.

Известные работники
 Константин Сергеевич Заслонов (1910—1942) — железнодорожный работник депо с 1935 года. Во время Великой отечественной войны ушёл на фронт и направлен во вражеский тыл, где вёл активную «рельсовую войну». Руководитель партизанских формирований Оршанской зоны. Погиб в бою. Заслонову присвоено звание Героя Советского Союза посмертно.
 Фёдор Андреевич Корчагин (1877—1924) — революционер, член Обской группы РСДРП, политический деятель.
 Николай Александрович Лунин (1915—1968) — машинист, новатор железнодорожного транспорта, организатор социалистического соревнования, названного в его честь.

Примечания

Здания и сооружения, построенные в 1896 году в России
Здания и сооружения Новосибирска
Железнодорожный транспорт Новосибирска
Транспортные здания и сооружения, построенные в 1896 году
История Новосибирской области

redpajama_set_name: RedPajamaWikipedia


This is one of the more difficult workout challenges I have shared with my Personal Training and Bootcamp clients in the past. One of the great things about this challenges is that you can simply change it up as you see fit – or when you want another challenge.
Choose any 3 leg exercises.
Round 1- Start with legs.
Complete the 1st exercise in tabata format. So, 4 minutes at a ratio of 20 second's work, 10 rest.
Complete all 3 exercises AMRAP (as many rounds as possible) for 4 minutes. 10 reps per exercise, 5 for beginners.


text:
Q: Installing MS Visual studio 2010 when MS Visual Studio 2012 is already there I have MS visual studio 2012 installed on my computer.Now I am in need of MS Visual studio 2010. Will this installation create an issue ? The reason is that I have a project done in 2010 version and I've been struggling to build it in 2012.
Is anyone there who experienced problems after installing 2010 when they already had 2012 or a higher version ?
I found some forums on the internet, and most of them say it's not recommended. I'm confused.
Or else, is there a way to remove MS visual studio 2012 from the computer ? I mean, to remove it completely?

A: You can install different versions of Visual Studio side-by-side with no issues.
In fact, it's usually better to install the later version first, then older versions.

redpajama_set_name: RedPajamaStackExchange


text:
20 Ways to Enjoy Winter in Central Park
Swedish Cottage (Marionette Theatre)
Arthur Ross Pinetum
Harlem Meer Center (formerly Lasker Rink and Pool)
Wollman Rink
Tisch Children's Zoo
Central Park Zoo
Pilgrim Hill
Delacorte Clock
Chess & Checkers House
Tips for Visiting, Winter
Don't let the cold keep you from Central Park this winter! With fun, year-round destinations like the Carousel and the Swedish Cottage—and snowy activities like sledding, ice skating, and wildlife watching—there is so much to see and do this season. Stumped about how to spend a winter day in the Park? We've got you covered.
1. Go cross country skiing or snowshoeing. Visitors can cross country ski or snowshoe through Central Park's wide-open meadows or along the bridle path, which we leave snow-covered in the winter to protect its soft surface.
2. Explore the Arthur Ross Pinetum. In their design of Central Park, Frederick Law Olmsted and Calvert Vaux included a "Winter Drive" of pines, spruces, and firs from 72nd to 102nd Street. By the late 1800s, when these trees needed replacement, deciduous ones took their place. In the 1970s, philanthropist Arthur Ross set out to return pine trees to Central Park (with the goal of hiding buildings along the 86th Street Transverse Road). The Arthur Ross Pinetum now features 17 different species of pine trees.
The Arthur Ross Pinetum (mid-Park between 84th and 86th Streets) is a beautiful destination to explore in the wintertime.
3. Go ice skating. Take in the surrounding views while you skate in one of the Park's ice rinks: Wollman Rink or Lasker Rink. Both offer skate and locker rentals. When conditions permit and the ice is consistently at least six inches thick, Conservatory Water also opens for free ice skating—just bring your own skates!
4. Visit the Central Park Zoo. Managed by the Wildlife Conservation Society, the Zoo is open year-round. Its residents include sea lions, penguins, seals, and snow leopards. Families with children can continue north to the Tisch Children's Zoo, home to potbellied pigs, sheep, and the only cow in Manhattan.
5. Take a tour. From corner to corner, Central Park is filled with fascinating destinations and secrets. The best way to learn about the Park's rich history is to take a tour. Browse our various offerings to find the ones that interest you most.
6. Ride the Carousel. Central Park's famed Carousel features calliope music and 57 horses. NYC Parks discovered the current vintage carousel abandoned in an old trolley terminal on Coney Island before bringing it to its current location. It is the fourth carousel to stand in the Park since it opened in 1871 and remains one of the largest carousels in the U.S.
7. Go sledding. Grab your sled and enjoy fresh snow on the slopes of Central Park! Pilgrim Hill and Cedar Hill, two popular sledding destinations in the Park, are open for sledding when there is at least six inches of snow cover on the ground and conditions permit. Need more ideas? Explore our Winter Recreation Guide.
Cedar Hill (East Side from 76th to 79th Streets) is one of the Park's most popular sledding destinations.
8. Take a self-guided walk. There are countless scenic routes to take through the Park. From north to south, the Park's landscapes invite you to wander. Why not do it at your own pace? If you're curious where to start (or where to end), our self-guided walks are a great resource.
9. Build a snowman. This classic snow day activity is easy with so much space in New York City's backyard! Looking to build on Sheep Meadow or another large lawn? Though many lawns are closed in the winter to let them rest, we open them when there is more than six inches of snow on the ground (and conditions permit) because that's enough snow to protect the lawns and still let them rest.
10. Go shopping. Stop by the newly restored Dairy Visitor Center & Gift Shop to browse our wide selection of apparel, books, and accessories—including sweatshirts and blankets for extra warmth! The Columbus Circle Holiday Market, at the Park's busiest entrance, is also open throughout the season. Please check our Alerts page for any updates.
11. Help keep the Park clean. Volunteering with the Conservancy is a great way to help keep Central Park clean and beautiful. Visit our volunteer page to learn more.
12. Relax in a boat landing on the Lake. In the 1860s, six boat landings were constructed along the shoreline of the Lake. Designed to complement the surrounding scenery, the small structures served as scenic lookouts and docks for recreational boaters. The landings were periodically reconstructed in the 19th century and removed throughout the 20th century due to deterioration. In 2016, we rebuilt the five boat landings standing today. They are recreations of the original 19th-century designs.
Wagner Cove Landing (mid-Park at 72nd Street) is one of Central Park's hidden oases of calm.
13. Borrow a Discovery Kit. Stop by select visitor centers to borrow a Discovery Kit for an in-Park adventure! Discovery Kit backpacks are filled with kid-friendly binoculars, field guides, a hand lens, colored pencils, and sketch paper.
14. Explore a playground. With 21 playgrounds that are each unique in design and character, Central Park offers play options for children of all ages and interests. Find the perfect playground for your children's personalities or passions this season.
15. See a show at the Swedish Cottage. Under the direction of the City Parks Foundation, the Swedish Cottage is home to one of the last public marionette companies in the country.
16. Admire the Bethesda Terrace Arcade. Watch the falling snow from this magnificent space between the Mall and Bethesda Fountain. Did you know that this is the only place in the world to find a Minton tile ceiling?
Find shelter from the snow and wind in the stunning Bethesda Terrace Arcade (mid-Park at 72nd Street).
17. Listen to tunes at the Delacorte Clock. This popular clock near the Zoo rings seasonal chimes and nursery rhymes every half hour. The clock sits atop a three-tiered tower and features a band of animals including monkeys, a penguin, a hippo, and a kangaroo. The animals circle the tower to 44 tunes that change seasonally.
18. Visit our Landforms exhibit. Step out of the cold and into the Charles A. Dana Discovery Center to browse our exhibit on the history of the Park's Fort Landscape.
19. Play board games. Chess & Checkers House, one of the Park's visitor centers, features outdoor chess and checkers tables. Visitors are welcome to borrow chess and checkers pieces from Conservancy staff, or bring their own. A variety of other games, including Scrabble and Jenga, are also available to play inside. Please check our Alerts page for closure updates, as this area is currently under construction.
20. Complete a Discovery Journal. Enhance your adventures in Central Park with a Discovery Journal, which includes activities that allow kids to investigate the connections between the design, plants, wildlife, and people in the Park.
Wintering in Central Park: How Urban Wildlife Survives Seasonal Change
The mammals, birds, and reptiles that call Central Park home have adapted to survive the cold.
Tags: Winter / Nature Lovers
The Delights of Deep Winter: A Conversation Between Authors Florence Williams and Bernd Brunner
As deep winter sets in across the northern hemisphere, it's worth recalling the kid version of winter in which the snow-covered landscape looked magical and playful.
Sprucing Up the Place: The Evergreen Trees of Central Park
Get to know the science and history behind the plants that keep their hue throughout the winter, offering a dependable splash of color to New Yorkers when they need it most.
Tags: Conservancy Staff / Winter / About the Conservancy / Trees / Nature Lovers
How Public Health Influenced the Creation, Purpose, and Design of Central Park
The coronavirus crisis has spurred newfound appreciation for New York City's parks and the myriad ways they can benefit our health, both mental and physical.

redpajama_set_name: RedPajamaCommonCrawl


While numerous large and medium-sized businesses have eagerly turned to the cloud for data backup and even handling day-to-day transactions, smaller businesses and individuals have been much more reticent. High profile security breaches involving household names such as Target and Home Depot have undermined what little trust many people had in the cloud, and confusion over privacy, reliability and costs have added to the uncertainty.
But however much we try to ignore it, the cloud is not going away. In fact, most of us are already using the cloud on a daily basis, often without realizing it. Whenever we check our Facebook accounts or read our Gmail, we are interacting with the cloud. When we buy something from Amazon, or stream a movie from Netflix, or seek out turn-by-turn directions on our smartphones, we are taking advantage of cloud services, transmitting various amounts of data each time we log on.
The real benefit of cloud storage is that your data is available wherever and whenever you need it. No more waiting until you get home or back to the office before you can access a file. No more carrying a not-so-portable laptop with you wherever you go. Data stored in the cloud is available wherever there is access to the Internet, and with most people carrying personal hotspots in the form of their smartphones, that means virtually everywhere.
The price for online storage is cheap and getting cheaper. With Google Drive, the first 15GB of online storage is free, which will almost certainly take care of most individual's needs. If you are a small business owner or store a lot of movies or other large files, then 100GB costs just $1.99 a month. Even more impressively, a terabyte of storage (that's 1000GB) costs just $9.99 a month. At these prices, you don't really have to look anywhere else, but there are still dozens of options to choose from, including Dropbox, Microsoft OneDrive, iCloud and Amazon Cloud Drive. All of them offer a certain amount of free storage, with additional paid options if you need more.
As Edward Snowden and certain Sony Entertainment executives will tell you, privacy is one of the biggest problems of the digital age. But again, stop and think about the personal data that we already store in the cloud, mostly because we put it there. Facebook and Instagram accounts, Gmail, banking apps, messaging, Apple Pay – the list of cloud-based computer programs and smartphone apps containing sensitive information is almost endless and each of them probably holds significantly more personal data than we store in the majority of our PC-based Word and Excel files.
That's not to minimize the risk associated with uploading large amounts of personal data to the cloud but to emphasize that we have already passed the point of no return. The cloud is already a big part of our lives and to not acknowledge that fact is to close the door to myriad opportunities for improved security and efficiency.


text:
HomeSolar Panels
Tesla Solar Roof – The What? The When? And the How Much?
Posted by Alexander ThomasLast Updated: September 23, 2019
Development in solar power has accelerated significantly during the past decade, partly due to the pressing need to reduce emissions of CO2 and other greenhouse gases and partly due to the contribution of considerable names in the industry. Elon Musk and his Tesla, Inc. are just one relevant example.
The solar shingles designed by Tesla, for instance, have taken the world by storm. Many believe that these solar roof tiles are the best option out there in terms of integrated solar panels, while others remark that they are, at this point, far too costly.
But how much does the Tesla solar roof cost, exactly? How do these solar shingles compare to traditional solar panels and to traditional roof tiles? Can you actually buy Tesla's solar roof tiles in 2019 and is the end result worth the wait? For answers to these questions and much more, read on.
Tesla, Inc.: The Company and the Aims
Founded in 2003 by Martin Eberhard and Marc Tarpenning, Tesla Motors was initially a manufacturer of electric cars set out to prove that driving electric is not necessarily a compromise. Led by Elon Musk since 2008, the company recently became Tesla, Inc. and greatly broadened its scope to include not only sustainable cars, but also a complete sustainable energy ecosystem.
Primarily marketed as an expensive, but environmentally-friendly and high quality brand, Tesla incorporated SolarCity in 2016. Since then, it has offered homeowners and businesses the possibility to manage the generation, storage, and consumption of renewable energy through two main products – the Powerwall, an energy storage solution, and the Tesla solar roof, an innovative approach to integrated solar panels.
Although Tesla is currently working to meet demands for a more affordable electric car, the Model 3, two things are more or less certain when you buy from this manufacturer. First, that the product you acquire, whether a car or a solar power system, will observe the highest industry standards for quality. Second, that the price you pay will reflect Tesla's reputation for excellence.
When it comes to Tesla solar roof tiles, the equation is the same. You can count on high-end quality, but only for a considerable financial cost.
The Tesla Solar Roof: An Introduction
What exactly are Tesla solar shingles, then, and why is the world so hyped about them at present? Certainly, much of the publicity surrounding all Tesla products is partly generated by the controversial figure of the company CEO, Elon Musk. However, there are actually some features that make Tesla's solar roof tiles unique and even somewhat extraordinary.
These solar roof shingles by Tesla are essentially solar panels in that they work to absorb solar energy and transform it into electricity for your home or business. The difference is that, unlike solar panels, solar shingles are meant to double as, well, conventional roof shingles.
Each tile contains one solar cell and is designed to look just like traditional roofing materials, including asphalt, terracotta, or slate. Instead of requiring you to mount your solar panels on top of your roof, Tesla solar tiles generate the same kind of solar electricity while also emulating the architectural properties of roof shingles.
The idea behind the Tesla solar roof is, therefore, to integrate the generation of renewable energy in the construction of homes and businesses, both from an architectural and an aesthetic point of view. But how did Tesla come up with this idea and how do the solar shingles themselves hold up against traditional solar panels and roofing materials?
The Timeline of the Elon Musk Solar Roof
Elon Musk and the engineers at Tesla are actually not the first to have come up with the idea of integrating solar panels into roof shingles. In fact, the concept itself is as old as the 1970s, but in early 2017, Musk revealed Tesla's plans to take solar shingles to a whole new level of utility and aesthetics.
Deposits made by people with the intention to purchase the Tesla solar roof for their homes were made beginning with May 2017, yet by August 2018, only 12 such installations were made, all in or around California. Though Musk added that he had already equipped his home with Tesla solar shingles back in August 2017, progress in the mass production of the new technology continued to be slow.
In September 2018, more news coverage revealed that it might be quite some time before all or most of the people on the waiting list for the Tesla solar roof would benefit from the technology. At present, it is uncertain how many of the latter actually own solar shingles, but also how long it might take for a new buyer to have the roof installed from the moment they make the initial deposit.
Solar Shingles vs. Solar Panels
Certainly, the high cost and low availability of the Tesla solar roof makes it seem as if the technology is so extraordinary and in such high demand that the manufacturer simply cannot keep up in terms of production. Just how good are these solar shingles, however, when compared to traditional solar panels?
We've looked at three essential aspects of solar roof tiles vs. solar panels and these are our conclusions:
Tesla solar shingles are much more expensive. Take, for instance, the average 3000 square foot household in California. To install solar panels on its roof, you'd have to invest upwards of $26,000 before claiming the federal tax credit. To refit the house with a Tesla solar roof, however, you're looking at an investment of no less than $50,900, which is an increase of approximately 100%.
Tesla solar roof tiles will not generate more power than traditional solar panels. In fact, it will likely generate only up to 70% of the output of a conventional solar power system. For example, solar panels would generate 8.5kW in the configuration described above, while the Tesla solar roof would generate a bit over 6kW.
Tesla solar shingles are a solar panel array and a roof. Differently put, before you judge the high price of these tiles, consider that they not only generate energy, but also act as a roof. It makes sense, for instance, to install Tesla solar shingles if you need a new roof anyway or if you're just now building your home or business.
All in all, the Tesla solar roof is a top quality product, but given its current price, it's more of a luxury option when compared to conventional solar panels. Of course, if money is not an issue for you or if you were going to renovate the roof anyway, Tesla solar shingles are worth serious consideration.
Solar Shingles vs. Traditional Roof Tiles
Tesla solar shingles are meant to double as solar cells and roof tiles, so how do they compare to traditional roofing materials? Here are a few things to keep in mind:
The Tesla solar roof is perhaps the most aesthetically pleasing solution in terms of renewable energy. Integrated into the roof itself as opposed to being mounted on top, these solar shingles look just like conventional roofing materials. In fact, you can't really tell them apart unless you know what you're looking for.
If you deduct the cost of the integrated solar cells, a Tesla solar roof is still more expensive than replacing a conventional asphalt roof, but not by much. Indeed, replacing your roof can cost anywhere between $5,000 to $25,000, depending on a number of factors such as the complexity of its layout or the pitch. On average, a new roof will likely cost you $15,000, to which you can add upwards of $26,000 for solar panels, if you intend to go solar. The total sum is close to the price of a Tesla solar roof.
According to the manufacturer, Tesla solar shingles are made with tempered glass and are therefore three times stronger than conventional tiles. While you can expect traditional roof tiles to last anywhere from 10 to 20 years, Tesla roof tiles promise to work unhindered for upwards up 30 years.
Ultimately, Tesla solar roof shingles look like traditional roofing materials, but are much more durable than the latter and can generate renewable energy. As such, if you're looking to redo your roof or you're building a new home and you're also interested in going solar, a Tesla solar roof makes sense.
How Much Does the Tesla Solar Roof Cost?
When we compared a tesla solar roof with conventional home solar panels, we mentioned that the average 3000 square foot home in California could be upgraded with solar shingles for the cost of almost $51,000. But how much would a Tesla solar roof cost for your home specifically?
Until recently, it's been difficult to tell, since Tesla only revealed an estimate price for its solar roof tiles in May 2017 and offered no further information since. To get an accurate estimate today, you'd have to get in touch with a representative of the company, but in theory, the product should cost an average of $21.85 per square foot for a medium-sized household.
To access the waitlist for the Tesla solar roof, you'll be asked for a deposit of $1,000, while the total cost of the shingles and installation will depend primarily on the size of your home and your location. In addition, Tesla will likely recommend that you pair your new solar roof shingles with one or several dedicated Powerwall storage units. If you choose to buy them, each of these will set you back another $7,000.
Like with conventional solar panels, once the roof is installed, you'll be able to access the federal solar tax credit for a return of up to 30% of the total cost. In the long run, you'll be able to cover for the Tesla solar roof cost with savings on electricity in approximately 11 years vs. 6.5 years for the regular solar power system.
Can You Actually Buy the Tesla Solar Roof Today?
Even if you can afford the Tesla solar roof cost, the question of availability is perhaps the trickiest regarding this new technology. In August 2018, it was reported that only 12 of at least 1000 people who had made a deposit for the solar shingles actually benefitted from the product in their homes. Today, it is uncertain how this number has changed.
Can you buy the Tesla solar roof today? In short, unlike products like the Thunderbolt magnus solar kit, no, you almost certainly cannot. What you can do is get in touch with a company representative, discuss price estimates, and make a deposit in order to be put on an already generous waitlist. How long will it take from that point in time to the moment when your home will be retrofitted with a Tesla solar roof? No one can say.
When contacted by various journalists at the end of 2018, Elon Musk commented that the Tesla solar roof shingles must be rigorously tested before being shipped to customers and, as such, it will be some time before all orders are honored. Unfortunately, the CEO was rather vague in his estimation of just how long "some time" is.
Pros and Cons of the Tesla Solar Roof: A Summary
There's certainly been a lot of buzz surrounding Tesla's solar roof, but when you put all the available information together, how good is this new technology? Below is a summary of what we know to be the pros and cons of these solar shingles thus far.
Advantages of the Tesla Solar Roof
As it turns out, the tesla solar roof is quite an extraordinary product. Some of its most impressive features include:
Aesthetic qualities. Tesla solar shingles integrate conventional roofing methods with solar cell technologies for a beautiful roof that doubles as a solar panel array. The whole installation is great to look at, comes in multiple shades, and can hardly be told apart from a traditional roof.
Durability. These solar shingles are designed to be three times stronger than conventional roof tiles. As such, a Tesla solar roof is estimated to last upwards of 30 years, whereas a traditional roof will require renovation in 10 to 20 years.
Sustainability. This is not so much an advantage compared to solar panels, but it is something to consider if you're looking to replace your current roof or build a custom home. Yes, going solar with Tesla's solar shingles requires some investment, but the entire affair is not much more expensive than a conventional roof and will eventually pay for itself in reduced electricity bills. Much like buying a solar pool heater, and especially when combined with products like solar attic fans, Tesla shingles are a great way to reduce go-forward costs.
Generous warranty. Tesla is very confident in the durability of its solar roof tiles, which is why they have extended their warranty to the lifetime of your house. In other words, so long as you own the house, the manufacturer will continue to maintain the roof and make any necessary replacements.
The Drawbacks: Tesla Solar Roof Cost and Availability
However great the technology might be, there are, of course, some drawbacks to consider. These are largely related to two main issues:
Cost. The Tesla solar roof cost is obviously higher than that of a conventional solar power system. It makes sense if money is no object or if you need a roof replacement anyway, but will otherwise take a fairly long time to pay for itself.
Availability. This is perhaps the most discouraging aspect about acquiring Tesla's solar tiles. Sure, you might be able to afford the investment, but there's no way of knowing how long it will actually take for your home to be selected for assessment and installation.
Is the Tesla Solar Roof Worth the Wait?
This one is entirely up to you. There are some obvious advantages to Tesla's solar roof tiles (much like there are to the not dissimilar solar curtains), not to mention the hype of buying the brand name itself. However, the entire affair can be fairly pricy and the fact that you have to wait for an unspecified amount of time before you get the roof you were promised can be a deal-breaker.
As such, it's important to consider your priorities. If you need the roof to be installed in the following year, then it might be a good idea to go with either traditional roofing options plus solar panels or solar shingles manufactured by a different brand. If, on the other hand, you don't mind the wait or the cost, the Tesla solar roof is definitely one of the most advantageous, innovative renewable energy solutions out there. In short, if you can afford it, it might very well be worth the wait.
What Homeowners Say about the Tesla Solar Roof
It's no lie that the Tesla Solar Roof has been slow to hit the market. With a waitlist already in place, and an additional stand-by period after the initial evaluation, people are eager to find out whether their down payments for Tesla's solar roof tiles are worth the wait. Here are some impressions from Amanda Tobler and Tri Huynh, two lucky owners who have already had their solar shingles installed.
When it comes to solar power, the cost can be high for a complete system. As we have already seen above, the same stands true for the Tesla solar roof. If, like Tri Huyhn, you're already in need of a new roof, however, switching to solar shingles might not be such a bad idea. For a roof surface of about 1000 square feet (or about 92 square meters) as well as two Powerwalls, Huynh paid around $100,000. Without the batteries, the cost goes down to $70,000, which is just 40% more than a regular roof.
The first roof to benefit from Tesla's solar shingles was close to the company's Freemont factory and had simple roof lines, both of which helped reduce the waiting time considerably. Two months after the initial deposit, Amanda Tobler met with an evaluation team that came over to take measurements and collect other details. Overall, it took just under 1 year for the first Tesla roof to be complete. At this point, the waiting time is much more extensive, but the company has promised to ramp up their operations.
The Installation
One advantage in the case of Tri Huyhn was that Tesla obtained all the necessary licenses and permissions for the solar system as opposed to the homeowner having to do it himself. He and Amanda Tobler reported that the entire process was seamless and did not disturb their activity in any way. Including several delays due to replacing two sets of original shingles, the setup of a Powerwall 2 unit alongside 800 square feet of solar roof tiles took a total of three weeks to complete in the case of Amanda's home.
Functionality and Maintenance
Unlike these DIY home solar kits, a great pro to solar roof tiles is the fact that there is no hard maintenance required. Tesla installs a handy, in-house monitoring system which shows energy produced, saved, and used. Moreover, the company also keeps track of the performance of its solar roof tiles. Whenever a loss of performance occurs due to degradation, the company has promised to optimize the system at no additional cost. No major glitches were noted by homeowners who were lucky enough to have the system delivered. One minor bug that was signaled by Amanda Tobler had to do with the Powerwall unit. Once every month or so, the battery would encounter a glitch whereby it lost connection to the grid. She reported, however, that if she didn't restart the system herself, the unit eventually detected the anomaly and, within a couple of hours, performed an automatic restart.
Tesla Solar Roof: The Balance
Are Tesla's solar roof tiles a solid option in terms of renewable energy? Definitely. And more. For a price that is only slightly higher than the combined cost of a new roof and a solar power system, a solar roof by Tesla will look gorgeous, perform excellently, and get regular maintenance by the manufacturer for the entire lifetime of your home.
But then there's the catch. Can you afford the investment and how long are you willing to wait before your new roof is installed? If, all things considered, you find that the Tesla solar roof is the right option for you, the waitlist is only $1,000 and a phone call away.
How to Become a Solar Panel Installer in 2019 – Training, Skills, Certification
How to Wire Solar Panels – Best Beginner Advice of 2019
Best Marine Solar Panels – Top Reviews of 2019
How to Make a Solar Panel: Materials and Instructions


text:
BACK BEHIND BARS
Alien suspects caught hiding in Canada get a free ride to the border
R.C. August 12 1996
BACK BEHIND BARS R.C. August 12 1996
Wanted in Arizona and California
If the star-crossed career of Alfred William Doyle demonstrates anything, it is that the Canada-U.S. border is not much of a barrier to a fugitive on the run. The 52-year-old Toronto-born Doyle, who has been in nine American and Canadian penitentiaries since he was 17, broke out of the Arizona State Prison near Phoenix last April 1, after serving two years of a 10½-year sentence for armed robbery. The heat and the dust, Doyle says, were aggravating his asthma, so he climbed onto the roof of a departing tractor trailer and rode out of the prison grounds to freedom.
He hitchhiked north through California, Oregon and Washington and, he says, crossed the border into British Columbia about 50 km west of Chilliwack after midnight. A couple of hours later, the owner of a farm equipment dealership spotted him near his properly and called the Mounties, who found him hiding between two big tractor tires. He told them he had lost all his ID, and a police computer check of the name he made up was negative. So they removed his handcuffs, drove him to the Trans-Canada highway and sent him hitchhiking on his way.
Doyle spent four days in Chilliwack being treated as a hospital outpatient for a leg in-
fection, then headed east to Toronto to visit the common-law wife he had not seen since 1977 when he began serving a 10-year sentence for armed robbery at Bath Institution in Kingston (he escaped in 1984). But he made a mistake—he placed a phone call from her home but the police, informed of his escape, had tapped the line. On May 3—33 days^fter leaving Arizona—they grabbed him.
Now, sitting in a tiny room at Millhaven Penitentiary near Kingston, Doyle looks tired, like a man after a hard day's work. He wears a shapeless red shirt and jeans. His hair is wispy, he has a tic under his right eye and most of his teeth are missing. He had three years remaining when he escaped from Kingston but with a year added for jailbreaking, he now will serve four. Then, Arizona will claim him and, when it is finished with him, California wants him for armed robbery and attempted murder, although he claims he never tried to kill anybody.
"I've been in crime pretty well all my life and there's good times and there's bad times," says Doyle. "When you commit a crime, you gotta be willing to do the time for the crime. You don't go out there to hurt anybody, but sometimes it's unavoidable. But I'm 52 going on 53 and it's beginning to tell on me."
Home free in Canada—almost
A fugitive's chances of not getting caught improve with the passage of time, and Stephen Bray must have figured he had it made. For years, he wandered the streets of Toronto's innercity Cabbagetown neighborhood, far from Marshall County, Ky., where he is wanted for arson and two counts of murder. Then on Feb. 6, 1995, police routinely cruising the area identified Bray from a photograph and arrested him as he walked along the street. He has been lodged in the Metro West Detention Centre ever since, fighting both Kentucky, which wants to extradite him, and Canada, which wants to deport him.
The flight of the slightly built, balding, 50-year-old Bray began sometime after Nov. 8,
1982, when fire destroyed the small frame home of his estranged wife, Audrey, 28, and her 74-year-old mother, Effie York, on the outskirts of Benton, Ky. Their bodies, both shot in the head, were found in the ruins. The Marshall County sheriff's office says it had received reports of Bray stalking his wife for several months prior to the fire. "There had been allegations of domestic violence in the past," says Deputy Sheriff Jamie French. Because of that, he says, police went looking for Bray and, four days after the fire, found his truck parked at Barkley Regional Airport in Paducah, 65 km away. "We don't know what happened or where he went," says French. "But we're looking forward to having him back."
That may take some time. Bray's Toronto lawyer, Eric Lewis, is battling on two fronts. He wants the Ontario Court of Appeal to approve extradition only if Bray gets a change of venue for his trial and the U.S. government promises he will not be executed if convicted. At the same time, Lewis is contesting a deportation order by claiming that Bray is really a refugee. A refugee, says Lewis, is "a person whose life is in danger and who fears persecution. Well, this guy claims he can't get a fair trial and is looking at the death penalty, and if that doesn't make him a refugee, what does?" Lewis—and Bray—face an uphill battle. No American has ever been granted refugee status here.
A Florida cop on the run
Iieut. John A. Sciadini, head of the Davie, Fla., police department's SWAT team, was an acknowledged specialist, an expert on crime. But up until The Case of the Missing Machine-Gun, no lone suspected that he might have acquired his expertise by —À committing crime, not fighting it.
The Sciadini saga, which began amid the glitz of Florida's Gold Coast and ended up in the workaday Vancouver suburb of Burnaby, reads like a script from the 1980 TV series Miami Vice—"it's movie stuff," says Florida assistant state attorney Mike Jones. The story began on May 13, 1990, when Lance Maltese, a 39-year-old private detective, died at his Hollywood, Fla., home of a cocaine overdose. Shortly afterward, his stepfather found a MAC-10 machinegun and silencer among Maltese's personal effects and handed the weapon over to the federal Bureau of Alcohol, Tobacco and Firearms.
Using the serial number, the ATF traced the owner—the Davie police department. It turned out that the gun had been ordered destroyed because it was fully automatic. Sciadini and a second officer had gone out in a boat to dump it in the sea, says Jones, "but it apparently never got thrown." Another private detective told county sheriff's investigators that Sciadini had given him the gun, which, in circumstances that are unclear, finished up in the possession of Maltese.
On Nov. 5, 1991, Sciadini, then 37, was arrested and charged with trafficking in stolen property, grand theft and possession of the machine-gun, a prohibited weapon. Released on $25,000 bail, he failed to keep a court date on Feb. 10, 1992, and a federal warrant, which said he should be considered "armed and extremely dangerous," was issued for his arrest. By May, county detectives claimed to have linked the fugitive to scores of burglaries in the 1980s. "He took everything from a bottle of shampoo to flowers for his girlfriend, but cash was his preference," said Det. Larry Lallance.
Meanwhile, Sciadini had fled to Canada where he got a job as a salesman at a Toronto car dealership. Fellow employees wondered why he declined to have his picture displayed with those of other salesmen on the showroom wall. Some months after he left, one of them spotted him on America's Most Wanted and called the FBI. The FBI called the Toronto Police Fugitive Squad, which discovered that Sciadini had gone to Vancouver. The RCMP's Burnaby detachment finally located Sciadini and, when he spotted the surveillance of his apartment building, he surrendered. Extradited to Florida in August, 1995, he awaits trial on 28 counts, including armed burglary.
Under surveillance, under arrest
Deportation to the United States, in most cases, is a pretty straightforward process—a hearing or two followed by a free ride to the border. On the other hand, extradition—as the case of Alwyn Reid demonstrates—often requires a trip into the legal jungle.
Reid's story began on Aug. 21, 1989, when a 54-year-old Syracuse, N.Y., woman and her daughter, 22, checked into a motel in the Philadelphia suburb of King of Prussia. About 2:30 a.m., they awoke to confront a prowler who sexually assaulted the mother, raped the daughter and afterward robbed both women at gunpoint.
From the outset, police suspected the 28-year-old, Jamaica-born Reid, an extermination company employee who had been working at the motel that night. But he had an alibi, which police broke only after months of investigation. Then, DNA analysis of a blood sample from Reid confirmed their suspicions. But when they went to arrest him early in November, 1990, he had disappeared.
More than three years later, Det. Bruce Saville of Upper Merion Township, in which King of Prussia is located, got a tip that Reid
was in Toronto (where he already had had several minor run-ins with police who were unaware of his background). After Saville called, the Metro Toronto Police Fugitive Squad put Reid under surveillance and the tedious extradition process began.
An Upper Merion Township prosecutor advised the U.S. justice department that Reid had been found. Washington then called the Canadian justice department in Ottawa, which dispatched a federal prosecutor who got a Toronto judge to issue an arrest warrant based on the evidence supplied by the Americans. The warrant was handed to a Metro cop. The fugitive squad, meanwhile, was shadowing Reid, who had been prowling the backyards of downtown homes. "The policeman radios that the warrant has been issued," says squad commander Bob Montrose, "and, bang, he's ours."
Arrested on Dec. 8, 1993, Reid fought extradition in the courts for 16 months, but was finally turned over to U.S. authorities on May 23, 1995. His case is still before an American court.
August 1996 By RAE CORELLI
Trouble in store
August 1996 By DAVID ESTOK
When children are vicious
August 1996 By BRIAN BERGMAN
The high stakes of coming to Canada
August 1996 By SHAR LEVINE
THE NEW-CANADIAN ESTABLISHMENT
December 27-31 2005 By PETER C. NEWMAN
DAVID HO: ULTRA-SECRETIVE, AND ULTRA-RICH
NOV 28-DEC. 5 2005 By Peter C. Newman
He sees only quibbles between the possible and the impossible
October 31st 2005 By PETER C. NEWMAN
Stillborn scenes of bourgeoisie
December 1979 By R.C.


WBZ Forecast Iphone For And Buy Best To Smartwatch Android The Verge Eric Fisher has an updated weather forecast.
Massive Marijuana Facility Planned In Charlton Faces Vote Verge Android To The For Best And Iphone Buy Smartwatch The $100 million project would make it the biggest cannabis cultivation and processing plant in the country. WBZ-TV's Mike LaCrosse reports.


text:
Brazil's Dani Alves detained in Spain on suspicion of sexual assault
Brazil defender Dani Alves was taken into custody in Spain on Friday over allegations that he sexually assaulted a woman at a Barcelona nightclub in December, police said.
Published: 20 January 2023 12:24 CET
Brazil's Dani Alves arrested in Barcelona. Photo: Josep LAGO / AFP
The 39-year-old was summoned to a Barcelona police station where he was "taken into custody" and will now be questioned by a judge, said a spokesperson for Catalonia's regional police force, the Mossos d'Esquadra.
Catalan police received a complaint on January 2nd from a woman who said Alves had touched her inappropriately, police said.
The alleged sexual assault took place at a popular Barcelona nightclub overnight December 30th-31st, according to Spanish media reports.
The player was accused of putting his hands down the woman's pants, according to the reports.
Alves, 39, has confirmed he was at the night club at the time but has denied any wrongdoing, telling private Spanish television Antena 3 earlier this month that he has "never seen" the woman before.
"I was there, at that place, with more people having fun. Everybody knows I love to dance. Having a good time but without invading the space of others," the former Barcelona and Juventus player added.
Alves, who now plays for Mexican side Pumas UNAM, was in Barcelona on holiday following his participation at the World Cup with Brazil in Qatar.
A Barcelona court said earlier this month it had opened a probe "into an alleged crime of sexual assault as a result of a complaint filed by a woman against a footballer".
AFP [email protected] @thelocalspain
Spain church attack suspect to undergo psychiatric testing
Spanish police seize 4.5 tonnes of cocaine off Canaries
The Moroccan suspect held in connection with a machete attack on two Spanish churches, killing a verger and badly injuring a priest, will undergo psychiatric testing, a court said Tuesday.
The case is being handled by the Audiencia Nacional, Spain's top criminal court, with the judge in charge asking that "two doctors conduct a psychiatric evaluation of the suspect".
The suspect, 25-year-old Yassine Kanjaa, was arrested at the scene after the attacks on two churches in the southern town of Algeciras last week.
The Audiencia Nacional said the psychiatric evaluation, which will be carried out by doctors from the court's forensic department, would provide "information about the legal responsibility" of the "presumed jihadist".
Prosecutors have opened a terror probe and, on Monday, the court remanded the suspect in custody without bail on murder and terrorism charges.
During the deadly incident on January 26th, the suspect entered San Isidro church and attacked its priest with a machete, leaving him seriously wounded before entering Nuestra Señora de La Palma.
There he attacked the verger and chased him out of the church where he killed him.
'Targeted priests and infidels'
Court details released on Monday said the attacker had also injured three other people, including another Moroccan man whom he "considered an infidel" because he had renounced his faith.
It said Kanjaa's actions could be "qualified as a jihadist attack directed at both priests who profess the Catholic faith, and Muslims who, according to the suspect, don't follow the Koran".
The court said the suspect fits the profile of a "self-indoctrinated terrorist who acts individually without direct ties to a specific terror group but operates in the name of jihadist philosophy".
Last week, Spain's left-wing government refused to rule out mental illness and the police have described him as "unstable".
The court said Kanjaa became indoctrinated "rapidly" within the space of up to six weeks, citing witnesses as telling police that just before that, he "was drinking alcohol and smoking hashish". Then he suddenly started listening "regularly to the Koran on his mobile phone".
One of Kanjaa's neighbours told AFP something similar on Friday, saying he had changed radically six weeks ago, growing a beard and wearing a long robe.
Officials have said Kanjaa was served with a deportation order last June but had no prior convictions and was not under surveillance.
Spain jails letterbomb suspect to avoid 'flight to Russia'
At funeral, hundreds mourn verger killed in Spain church attack


and even tho u moved, I'm glad u didn't take pcw away from us!!
I will post it when I get it from Brent. When that will be is anyones clue..
My excuse is I don't live there anymore, darrels Idunno..
LOL @ Adrian..... We used to be able to count on Rick and DTM, But it looks like them days are over.
if I hear first, I'll let ya know, but as far away as you are, you are the one that seems to get all the juiciest stuff first!
since I am farther away than you Adrian does that mean you will get the news quicker than I will?
15 more minutes and we will have just two canidates.to choose from.
Off with Tyrones head then!!
I voted at 9:30 this morning Maynard, it wasn't real busy but I was number 117 in Laquey, I bet I heard 10 people or more discussing with their loved ones, or children saying they were voting for Nick Pappas while I was there!


text:
LeClaire Speed Cameras Go Live Jan. 5
We told you last weekend LeClaire's speed cameras were up, but not operating yet. That's changing. Here's your fair warning; cameras are up and go live Tuesday, Jan. 5.
If you're speeding, at least you won't get a ticket from them until March 5. Keep in mind, you also won't get a ticket if you aren't speeding.
According to a Muscatine Journal article, LeClaire Police will issue warnings starting Jan. 5, but that changes March 5. Expect tickets and fines after that.
The Journal reports LeClaire Police say their goal is to reduce speed in high risk areas of the city. They hope to reduce traffic accidents caused by excessive speed.
Signs are posted alerting drivers of the cameras. You'll find those along Interstate 80 just before the I-80 bridge and in the 2300 block of South Cody Road/U.S. 67. You can get nabbed going in either direction.
The city did not invest in the camera equipment but they will get a portion of the fines.
According to the Journal, there have been 334 crashes on I-80 and U.S. 67 near LeClaire that involved 552 vehicles, three deaths and 115 injuries.
I grew up outside of LeClaire and anyone who's traveled on highway 67 on Cody Road knows about watching speed within the city limits. We'd always tell our visiting friends to 'watch out for LeClaire police' and the weird variety of speed limits. If you're driving the speed limit, you won't have to worry about the cameras, but be aware, the city just changed some of the speed limits as you approach I-80 heading into the city.
We warned you, Quad Cities. Stay safe and mind your speed. Oh, also...welcome to LeClaire!
10 Car Models With The Most Tickets
Filed Under: iowa, leclaire, police, speed cameras, speed limit


On 4 May 2016 it has been published in the Official Journal of the European Union núm. 119, pages 1-88 (88 págs.). the Regulation (EU) of the European Parlimanet and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC (General Data Protection Regulation).
You may check it in the following link Regulation of Personal Data.


text:
title: "Community Update #9"
tags: [community-updates]
author: starkos
author_url: https://github.com/starkos
author_image_url: https://avatars.githubusercontent.com/u/249247?v=4
author_title: Premake Admin & Developer
---

I can't believe we're already eight months into 2021, how did this happen.

### **Branch, don't backport**

In the last update, I asked for input on where the work going into [premake-next](https://github.com/starkos/premake-next) should end up: branch a new 6.x major version, or backport the changes to 5.x? There was [solid consensus](https://github.com/premake/premake-core/discussions/1616) that premake-next should be treated as a new major version, with v5 upgraded to a stable release for on-going support. Thanks to everyone who participated and offered feedback!

With that settled, I've archived the premake-next repository and moved all development to [a new 6.x branch on premake-core](https://github.com/premake/premake-core/tree/6.x). As of the next release, I'll be upgrading the status of 5.0 from alpha to beta, with the intention of making the first stable release shortly.

### The Path to 5.0

Premake's perpetual alpha status [causes confusion](https://github.com/premake/premake-core/issues/1536) and makes it [difficult for some people to adopt](https://github.com/premake/premake-core/issues/1423). We've been hanging on to that label in the hope we'd get a chance to overhaul the makefile and Xcode exporters. But now that we have a v6 branch it makes sense break things over there instead, and get v5 to a stable release sooner rather than later.

I've [opened a 5.0 milestone](https://github.com/premake/premake-core/milestone/3) on the project and will be assigning a few issues to myself there. If you have a backward-compatibility breaking change that you feel must get in before 5.0 becomes stable, open or escalate an issue ASAP so we can get it on the roadmap. And as ever, we're all really busy, so any help getting this over the finish line is much appreciated!

### Premake6

In other news, Premake6 can now generate its own Visual Studio project files and bootstrap itself. That doesn't sound very impressive, but it does means that all of the under the hood stuff is now online and working as intended, and a full vertical slice has been completed. 🎉

[@nickclark2016](https://github.com/nickclark2016) has volunteered to begin looking into a new-and-improved makefile exporter, which frees me up to start looking at Xcode and improving the way we represent toolsets like Clang and GCC. The stable release of 5.0 is likely to take up all the air in the room for a bit, but hopefully I can report progress on those soon.

### Community Contributions

The community keeps things rolling—many thanks to everyone listed here!

- [#1570](https://github.com/premake/premake-core/pull/1570) Initial C++20 module support for Visual Studio ([@hannes-harnisch](https://github.com/hannes-harnisch))
- [#1625](https://github.com/premake/premake-core/pull/1625) Remove "*ng" action deprecation and auto-fix ([@noresources](https://github.com/noresources))
- [#1635](https://github.com/premake/premake-core/pull/1635) Fix typo in Using Premake documentation ([@abhiss](https://github.com/abhiss))
- [#1638](https://github.com/premake/premake-core/pull/1638) Fix broken links in docs ([@KyrietS](https://github.com/KyrietS))
- [#1642](https://github.com/premake/premake-core/pull/1642) Fix spelling mistake ([@Troplo](https://github.com/Troplo))
- [#1644](https://github.com/premake/premake-core/pull/1644) Fix author name and update time on pages ([@KyrietS](https://github.com/KyrietS))
- [#1645](https://github.com/premake/premake-core/pull/1645) Add missing support for prebuildmessage/postbuildmessage for Codelite ([@Jarod42](https://github.com/Jarod42))
- [#1649](https://github.com/premake/premake-core/pull/1649) Fix curl header search path ([@depinxi](https://github.com/depinxi))
- [#1654](https://github.com/premake/premake-core/pull/1654) xcode4: Fix missing link of sibling project with custom targetextension ([@depinxi](https://github.com/depinxi))
- [#1655](https://github.com/premake/premake-core/pull/1655) Compiler Version support for Visual Studion 2017+ ([@nickclark2016](https://github.com/nickclark2016))
- [#1657](https://github.com/premake/premake-core/pull/1657) Renormalize line endings ([@nickclark2016](https://github.com/nickclark2016))
- [#1663](https://github.com/premake/premake-core/pull/1663) compilebuildoutputs make some comments obsolete ([@Jarod42](https://github.com/Jarod42))
- [#1668](https://github.com/premake/premake-core/pull/1668) Fix v6 bootstrapping from v5 ([@starkos](https://github.com/starkos))
- [#1673](https://github.com/premake/premake-core/pull/1673) Updated sidebar to include toolsversion link ([@nickclark2016](https://github.com/nickclark2016))
- [#1662](https://github.com/premake/premake-core/pull/1662) Handle buildcommand for Codelite ([@Jarod42](https://github.com/Jarod42))
- [#1658](https://github.com/premake/premake-core/pull/1658) Fix D module compiler output for visual studio ([@nickclark2016](https://github.com/nickclark2016))

Additional gratitude and good wishes to everyone who helped review pull requests and triage issues this cycle. Projects like this don't work without you.

A big shout out to our premier sponsor **[Cfx.re](https://opencollective.com/_fivem)** and all [our monthly backers](https://opencollective.com/premake#section-contributors)—be sure to check out their work and support them back if you can!

I welcome questions, suggestions, and concerns. Message or DM me at [@premakeapp](https://twitter.com/premakeapp), email at [starkos@industriousone.com](mailto:starkos@industriousone.com), or [open a discussion on GitHub](https://github.com/premake/premake-core/discussions).


I have extreme mood swings one week before my menstural cycle, how can i control my mood swings ?
Sorry again the link is messed up, if you go to amazon and type this ASIN# in the search box it will come up showing the item B0016G7VY0 .
Creme/dp/B0016G7VY0/ref=sr_1_5?ie=UTF8&qid=1316901937&sr=8-5. If you want to know more about this take a look at this site www.johnleemd.com.
I purchased this product myself and I'm starting to use it soon. Mood Swings are related to hormones and in your situation it's possible that you do need progesterone cream. For such matter if you like send me private message here and I'll give you more info. I have learned so many things that are hormonal issues and my doctor has explained to many things in how much for a women all their problem is hormonal. I couldn't believe the kinds of these he said to me which are very true.
Keep me posted, I'm glad to help.
Thank you all for the kind advice, i really appreciate it !
Rosa, i do take advil for the physical symptoms but my mood is still really bad, its so bad that one week before my period i fight with everyone i interact with & i cannot control myself. This is pretty bad as usually i am a very calm & a patient person.
Melissa, i am 29 & its getting worse month by month. Can you tell me more about progesterone cream ? i might try that.
Dr. Daniel Heller, Thank you for your concern, i will try to explore alternative medicines too, by any chance can you recommend any medicine ?
Thanks for sharing all this Marhukh53. I wanted to chime in to add that there are alternatives to taking drugs for your symptoms. While drugs can help, they also have sometimes serious side effects, and unfortunately those aren't always fully explained or even understood.
You do probably have PMS, and you may even have PMDD. You can learn more about how those are diagnosed on my website, below.
There are any number of natural measures that can be very effective for PMS and PMDD symptoms including dietary changes and lifestyle changes, as well as herbal and nutritional supplements.
One advantage of a natural approach is the much lower incidence of side effects; another is that you will be making yourself healthier in the process; yet another is that natural measures address the cause of the problem, which is an underlying hormonal imbalance.
I wish you speedy relief, and encourage you to investigate all your potential options.
Hi Mahrukh53, I know the feeling and I get like that before my period and I do know that as you get older it gets better because up to age 21 you keep experiencing such symptoms and mood swings which are normal. I'm 27 and I do experience such thing, how old are you if you don't mind me asking? For such thing you can take Motrin which really is helpful. I would say try to take Motrin which helps alot and if it doesn't help you can try to talk to your doctor about using progesterone cream. Low progesterone can also cause mood swings as well it's a common thing for women. I hope this helps. Keep us posted.
I'm sorry to hear that you get such extreme mood swings before your period.
Antidepressants. Selective serotonin reuptake inhibitors (SSRIs), which include fluoxetine (Prozac, Sarafem), paroxetine (Paxil), sertraline (Zoloft) and others, have been successful in reducing symptoms such as fatigue, food cravings and sleep problems and are the first line agents for treatment of severe PMS or PMDD. These drugs are generally taken daily. But for some women with PMS, use of antidepressants may be limited to the two weeks before menstruation begins.
Nonsteroidal anti-inflammatory drugs (NSAIDs). Taken before or at the onset of your period, NSAIDs such as ibuprofen (Advil, Motrin, others) or naproxen sodium (Aleve) can ease cramping and breast discomfort.
Diuretics. When exercise and limiting salt intake aren't enough to reduce the weight gain, swelling and bloating of PMS, taking diuretics, or water pills, can help your body shed excess water through your kidneys. Spironolactone (Aldactone) is a diuretic that can help ease some of the symptoms of PMS.
Oral contraceptives. These prescription medications stop ovulation and stabilize hormonal swings, thereby offering relief from PMS symptoms. Yaz, a type of birth control pill containing the progestin drospirenone, which acts similarly to the diuretic spironolactone, has been shown to be even more effective than regular birth control pills are in reducing the physical and emotional symptoms of PMS and PMDD.
Thank you for the reply ! it was very helpful & informative, i will consult my doctor & start taking medication. Moreover do you of any off the counter medications also that i could take ?.
Tylenol, Aleve, and Motrin can all help relieve your physical symptoms which, in turn, may put you in a better mood. Sometimes it's wise to start with these medications which are less potent than prescribed anti-depressants because you may notice a change in your mood when you feel better.


Working as a physio at Compass Physio Castlecomer, allows me to see a lot of people from all walks of life with different health challenges. Our goal as physios is to identify the cause of the musculoskeletal problem and address it, rather than treating the symptom. For example, your inner knee pain could be coming from your weak gluts or poor foot position rather from the knee itself.
Over the last 5 years I've become increasingly aware, that a common cause of people's musculoskeletal problem is being overweight and/or a lack of exercise. Imagine the back ache if you had to carry round a backpack with an extra 5kg in it all day. With clients overall health and well being in mind, here are 5 simple tips to help weight loss and promote healthy eating. (Please note, I'm not an expert in weight loss – for a personalised weight loss plan you should see an accredited dietician). Regarding exercise, just start moving and if you can work it into your daily routine you are more likely to stick to it.
Portion size, invest in some measuring cups and kitchen scales to properly measure the food as directed on the package. This will help with planning your food and will also reduce waste. You do not alway have to finish what's on your plate. If you feel full, don't try to force the food down. Only eat when you are hungry.
Eat less processed food – the more processed food we consume the more sugar and additives are taken into our bodies. This added sugar requires an increase in insulin production to process it, which in turn leads to an increased risk of high blood pressure and diabetes ( even skinny people need to watch out for this).
Drink more water – drinking more water will help you digest your food better and keep you hydrated. It will also give you a sense of feeling full if you're struggling to make it to dinner time. If you don't like water, add a slice of orange or lemon to it. Cut out the fizzy drinks which are full of sugar (even the diet ones are full of artificial sweeteners).
Don't go shopping when hungry or hungover – When you're hungry or hungover decision making is impaired and we tend to make poor food choices. Make a list and go shopping without young children, if possible. Supermarkets are designed for kids to put pressure of parents with clever marketing displays.
Diets have been proven to have poor long term effects as once the weight is lost, there is a tendency to revert back to old habits. A small change can make a big difference over time and have a lasting effect. Maintaining a healthy weight is important for your well being and can help prevent many health complications in the future.