Welcome to Pakerson Digital Boutique of luxury handmade footwear and accessories (store.pakerson.it). Access to and use of the store.pakerson.it website are subject to the provisions of these General Conditions of Website Use. It is assumed that when accessing and using this website, as well as purchasing products at store.pakerson.it, the user has read and understood these General Conditions of Website Use. This website is directly managed and maintained by Sutorius srl (hereinafter also referred to as "Website Manager") with registered offices in Italy, Via Fonda, 9 - 50050 Cerreto Guidi (Florence), Register of Companies reg. no. 04260220480, Tax Code and VAT number 04260220480, fully paid-up company capital Euro 104,000.00.
On this site, you can find information concerning orders and shipments, refunds, and returns of products purchased at store.pakerson.it, as well as other general information concerning the services provided by store.pakerson.it. Remember that you are always welcome to contact store.pakerson.it by e-mail to store@pakerson.it . For any other legal information you may require, please consult the General Conditions of Sale section of this website.
Access to and use of Pakerson Online Store, including display of the web pages, communications with the Website Manager, downloading of product information and purchase of products at this website, are activities conducted by our users for purely personal use, unrelated to any commercial, entrepreneurial, and/or professional activity in which they may be engaged. Please remember that you are the sole subject responsible for your use of the store.pakerson.it website and its contents. The Website Manager may not be held responsible for use of this website and/or its contents in manners not in compliance with current laws and regulations, without prejudice to the Website Manager's liability in case of wilful misconduct or gross negligence. In other words, the website user is the sole party responsible for communication of incorrect information and/or data, false data or data relative to third parties, without the consent of said third parties and in consideration of incorrect use of the data.
Finally, since all materials downloaded from or otherwise obtained through use of this service are so obtained at the sole discretion and risk of the user, any and all liability for damage to computer systems and/or for loss of data resulting from download operations shall be the sole responsibility of the user and cannot be ascribed to the Website Manager. The Website Manager declines any and all responsibility for damages deriving from the impossibility to access the services available at the site and/or damages caused by viruses, corrupted files, errors, omissions, interruptions of service, deletion of contents, problems linked to the network, providers, or telephonic and/or electronic communications connections, unauthorized access, alteration of data and/or failed and/or defective operation of the user's own electronic equipment.
The user is responsible for safeguarding and correct use of his/her own personal data, including the credentials permitting access to reserved services, as well as for any damaging or prejudicial consequences that may accrue to the Website Manager or to third parties pursuant to incorrect use, loss, and/or subtraction of said information.
The contents of Pakerson Digital Store, such as (for example only) the works, images, photographs, dialogues, music, sounds, and videos, documents, drawings, figures, logos, and all other material, in whatever format, published on the store.pakerson.it website, also including the menus, web pages, graphics, colours, outlines, tools, character fonts and the website design as a whole, the diagrams, layouts, methods, processes, functions, and software that make up store.pakerson.it, are all protected by author's rights legislation and all other protection offered for the intellectual property rights held by the Website Manager and/or the other holders of said rights. No part of store.pakerson.it or of its contents may be reproduced, in whole or in part, in any form whatsoever, without the express written consent of the Website Manager. The Website Manager holds the exclusive right to authorize or prohibit direct or indirect reproduction, whether temporary or permanent, in whatever manner and/or form, in whole or in part, of store.pakerson.it and the contents thereof. As concerns use of store.pakerson.it, the user is authorized only to view the web site and its contents, and also to perform all necessary actions for reproduction that is temporary, without economic relevance to the user, which are considered transitory and/or ancillary to and integral to and essential for viewing store.pakerson.it and its contents; and any and all operations relative to visiting the website, which are carried out solely for legitimate use of store.pakerson.it and its contents. The user is not, instead, authorized to make any reproduction whatsoever, on any support, of all or any part of store.pakerson.it and/or its contents. Any such reproduction must be authorized in each case by the Website Manager or, if it be the case, by the authors of the single works on the website. Said reproduction must in any case be conducted for legal purposes only and in respect of the protection afforded by author's rights legislation and any other intellectual property rights held by the Website Manager and/or the authors of the single works on the website. The authors of the single works published on the store.pakerson.it website have the right to claim ownership of their work/s at any time and to oppose any deformation, mutilation, and/or other modification of the works themselves, including any and all actions that may cause damage to the works or to the authors' image and reputation. The Customer agrees to respect the author's rights of the artists who have chosen to publish their works on store.pakerson.it or who have collaborated with store.pakerson.it to create new expressive and artistic forms for publication, even if not in an exclusive manner, on the website, or that are integral parts of the site. Furthermore, the Customer is in no case authorized to make use, in any manner or form, of the contents of the website and/or any single work published thereon and protected by author's rights legislation or any other form of intellectual property protection. For example only, the Customer may not alter or in any other manner modify the contents and/or the protected works without the approval of the Website Manager and, where applicable, of the single authors of the works published at store.pakerson.it.
All the other distinctive signs, designs, and expressions that distinguish the products sold at store.pakerson.it and appearing on the website are registered marks of the respective owners and are used on store.pakerson.it for the sole purpose of distinguishing, describing, and publicizing the products on sale at store.pakerson.it. The Website Manager and all the other owners of the registered marks have the faculty to make exclusive use of the marks in which each holds the rights. Any use of these marks not in compliance with applicable laws is not authorized and therefore entails serious legal consequences. Use of said trademarks and/or any other distinctive signs, designs, and expressions appearing on store.pakerson.it, in any manner, for the purpose of deriving undue advantage from the distinctive character or reputation of these marks and/or in any manner that could cause damage to the marks themselves and/or to their owners is strictly prohibited.
Anyone interested in activating links to the home page and other pages of the store.pakerson.it website which can be publicly accessed may contact the Website Manager by e-mail at store@pakerson.it . The Website Manager must be contacted to obtain authorization to provide links to store.pakerson.it. The Website Manager grants authorization to link to store.pakerson.it free of charge and on a non-exclusive basis. The Website Manager retains the faculty to object to direct links to its web site in the case in which the applicant who intends to activate links to store.pakerson.it is found to have adopted unfair business practices and/or practices which are not generally adopted or accepted by the members of the trade and/or has conducted unfair competition vis-à-vis the Website Manager, in the past, or should it be feared that in the future such practices may be adopted in the future; or when the applicant has, or it is feared that it may conduct activities such as to discredit the Website Manager, its website, and/or its services. In any event, activation of deep links (such as deep frames) to store.pakerson.it is strictly prohibited, as is unauthorised use of meta-tags (that is, without the express consent of the Website Manager).
The Website Manager has adopted all reasonable measures to prevent publication, on the website, of contents that describe or depict scenes and/or situations involving physical and/or psychological violence or descriptions/depictions that could be considered inappropriate to the civil beliefs, human rights, and personal dignity and sensibilities of users of the store.pakerson.it website, in any form or expression. In any case, the Website Manager does not guarantee that the contents of the web site are appropriate or lawful in other countries outside of Italy. However, in the event that such contents are deemed to be unlawful or illegal in some of these countries, we ask you to refrain from accessing our website. Should you choose to access this website, we hereby inform you that your use of the services provided by store.pakerson.it shall be your sole and personal responsibility. Furthermore, the Website Manager has adopted all suitable precautions to ensure its users that the content of store.pakerson.it is accurate and does not contain any incorrect or out-of-date information at the time of publication on the website and, insofar as possible, afterwards. Nevertheless, the Website Manager cannot beheld liable by users for the accuracy and completeness of the content published on store.pakerson.it, to the exception of liability for wilful misconduct or gross negligence and without prejudice to any other provisions of the law. Additionally, the Website Manager cannot guarantee that the website will operate continuously, without interruptions and without errors or malfunctions deriving from Internet connections. Although the Website Manager does everything in its power to ensure uninterrupted access to its website, the dynamic nature of the Internet and web content may be such as to not permit store.pakerson.it to operate without any suspensions of service, interruptions, or discontinuities due to operations for updating the website. The Web Manager has adopted all appropriate technical and organisational measures to protect the services offered at store.pakerson.it, the integrity of the data transmitted and received, and its electronic communication against unauthorised use and/or access as well as to prevent risks of dissemination, destruction and loss of data and confidential/non confidential information relative to users of store.pakerson.it, and to prevent unauthorised and/or unlawful access to such data and information.
The Website Manager has adopted a specific business policy; its mission consists of selling products through its services and its web site only to "end users" or "Customers". The term "Customer" refers to any natural person who deals with store.pakerson.it for purposes not related to any commercial, entrepreneurial, or professional activity he/she may carry on. If you are not a "Customer" under this definition, we kindly request that you refrain from using our services to purchase products at store.pakerson.it. In line with its sales policy, the Website Manager reserves the faculty to refuse orders from subjects different from "Customers" and/or orders that do not meet the conditions of the General Conditions of Sale and these General Conditions of Website Use.
These General Conditions of Use shall be governed by Italian law; accordingly, any controversy that may arise between the Website Manager and any of the end users/Customers concerning said Conditions will be settled in accordance with applicable Italian law.
The term "Customer" refers to any natural person who deals with store.pakerson.it for purposes not related to any commercial, entrepreneurial, or professional activity he/she may carry on. If you are not a "Customer" under this definition, we kindly request that you refrain from transacting purchases at store.pakerson.it.
In line with its sales policy, the Seller reserves the faculty to not fill orders from subjects different from "Customers" and/or orders that do not meet the conditions of the Seller's sales policy.
These General Conditions of Sale regulate only the offer, forwarding, and acceptance of purchase orders for products offered for sale at store.pakerson.it, stipulated between store.pakerson.it users and the Seller.
To stipulate a contract for purchase of one or more products at store.pakerson.it, the Customer must fill in the electronic-format order form and send it to the Seller, over the Internet, in accordance with the instructions given below.
The order form contains a link to the General Conditions of Sale and the Right of Withdrawal Notice, as well as a summary of all the information relative to the essential characteristics of each product ordered and the relative price (inclusive of all applicable taxes, charges, and duties), the methods of payment that may be used to purchase of each product, and the terms and conditions of delivery of purchased products, shipping and delivery costs, the conditions that must be met by the Customer when exercising the right to withdraw from the contract, and terms and conditions for returning purchased products.
The contract is considered concluded when the Seller receives the Customer's electronically transmitted order form and has verified the correctness of the data relative to the order.
The Customer will be requested to read the General Conditions of Sale and the Right of Withdrawal Notice before proceeding with product purchase (by transmission of the order form).
The order form will be entered in our database for the time required to fill the order(s) and in any case only for the time permitted by law. The Customers may access his/her order forms from the "My Orders" section of the website.
The Customer will also be requested to review each order form and correct any erroneous data before proceeding with transmission of the order.
The language options available for concluding contracts with the Seller are Italian and English.
Once the contract is stipulated, the Seller will proceed with registering the purchase order.
The Seller retains the faculty to not fill orders that do not offer sufficient guarantees of solvency or that are incomplete and/or incorrect, or in the case of non-availability of the product(s) ordered. In these cases, the Customer will be notified, via e-mail, that the contract has not been concluded and that the Seller will not proceed with filling the order, specifying the reasons therefore. Should products presented at store.pakerson.it no longer be available for sale at the time of the Customer's last access to the site or transmission of the order form, it shall be the Seller's duty to communicate the unavailability of the product/s ordered, with all due haste and in any case within 30 (thirty) days from the day following the day on which the order form was transmitted to the Seller. This case, should the order form have been transmitted and the product paid for, the Seller will refund all amounts paid.
By electronically transmitting an order, the Customer unconditionally accepts these General Conditions of Sale and agrees to observe said Conditions in all relations with the Seller. Customers who do not accept any or all of the conditions set forth in the General Conditions of Sale are invited to refrain from transmitting order forms for purchase of products at store.pakerson.it.
Upon conclusion of the contract, the Seller will transmit to the Customer, via e-mail, a purchase order receipt containing the information given in the order form (link to the General Conditions of Sale and the Right of Withdrawal Notice, information concerning essential product characteristics, and detailed information concerning price, method of payment, and delivery costs).
Only Pakerson brand products are offered for sale at store.pakerson.it.
The Seller does not sell used products or seconds or any products in any way inferior in quality to the standards applicable to corresponding products offered on the market.
The essential characteristics/features of each product are illustrated at store.pakerson.it in the single product information sheets. We attempt to edit our photos and display product images as accurately as possible..The images and the colours of the products viewed at store.pakerson.it may, however, not exactly correspond to the actual products, due to photographic lighting sources, different screen settings of devices and the quality of reproduction offered by the Customer's Internet browser. Further,hand dyeing process lends the leather inimitable nuances that fête the handcrafted quality of each unique product, this is another reason why the product finishing in photography may vary slightly from the one of the item purchased, which is a Made-to-order product, produced at the time of the purchase specifically for the Customer by Pakerson master craftsmen.
The published product prices may be subject to updates. Always check the final sale price before transmitting the order form.
The Seller cannot accept purchase orders from any countries not listed on the splash page.
In the case of exercise of the Right of Withdrawal by the Customer, the Seller retains the faculty to not accept return of products, the essential and/or quality characteristics of which have been in any way altered, or return of products which have suffered damage.
The Customer may choose any of the payment methods and delivery options listed in the order form.
In case of payment by credit card, the financial information (for example, credit/debit card number, date of expiry) will be sent to the bank delegated by the Seller to supply the relative remote electronic payment services, by encrypted protocol in order to guarantee that third parties can in no way gain access to said financial information. This information will never be used by the Seller for purposes other than completing the procedures relative to purchases and for making refunds in case of product returns after a Customer has exercised the right to withdraw from the contract, or should the Seller be required to communicate the information to the police or make notification of fraudulent acts committed at store.pakerson.it. The price indicated in the order form for product purchase and relative shipping costs will be charged against the Customer's transaction account at the time of order of the products. In the unlikely event the Seller determines the item is not available after the Customer places the order, the Seller will send an email to the Customer and the cost of the item will be refunded.
In case of payment by bank transfer, the Customer will make the payment within three working days,otherwise the order will be cancelled.
Shipping and delivery of the products is handled by parcel carrier as illustrated in the table. Should a product require C.I.T.E.S. authorization for special materials, delivery will be delayed by 7 working days. Remember that customs duties are at your expense and payable to the carrier at time of delivery. The times given in the table are the days needed to complete the shipment from the time the Customer receives notification that the order has shipped. The Seller requires from 2 to 20 working days to prepare orders: handcrafting and customization are the hallmarks of Pakerson excellence.
Please, note that online orders placed during Summer closure will be processed from September and orders placed during Christmas break will be taken care of from January. Please, check the precise date at store@pakerson.it. We are grateful for your kind waiting.
Please note: we are pleased to inform our esteemed Russian Customers that shipments to Russia will be now delivered at their address via trackable postal service within 2 - 10 working days.
You are invited to contact our Customer Assistance service for any information you may require. Contact Pakerson by e-mail at store@pakerson.it; or call +39 0571 559255.
Customers are also invited to read the Seller's General Conditions of Website Use, which contains important information about how the Seller processes Customers' personal data and about the Seller's data security systems.
These General Conditions of Sale are regulated by Italian law and, in particular, by the provisions of Legislative Decree no. 206 of 6 September 2005 (Consumer Code) with specific reference to the laws regulating distance selling, and by Legislative decree no. 70 of 9 April 2003, addressing certain aspects of electronic commerce.
These General Conditions of Sale are subject to modification at any time and/or in response to changes in applicable laws and regulations. Any new versions of the General Conditions of Sale will take effect on the date of publication on the store.pakerson.it website.
Please note that only products purchased from Pakerson Digital Boutique (store.pakerson.it) will be accepted for return. If you wish to return an item purchased from one of other Pakerson stores, please contact the shop where you originally purchased the item for their Return Policy.
To initiate a return, first you must contact the Seller by e-mail at orders@pakerson.it to notify your intention to return the goods. You will soon receive your necessary return request authorization e-mail by our Customer Care Service.
To withdraw from the contract you must use the Return Form that you will find inside the package. You must return the products to the Seller within ten (10) working days after the date on which you received the products.
For orders above 100 euro, the Seller will withhold a flat rate of 30 euro from the refund equal to the amount previously paid by Pakerson o ship and deliver the purchased products to your address.
- shipping costs for returning the purchased products to the Seller.
- As the Customer assumes full responsibility in case of damage of returned product/s during shipping, we strongly recommend Customers to purchase shipping insurance. Further, in case your country is not a EU Member State, you will be responsible for any import taxes incurred by the Seller. We recommend the Customes to use a trackable shipping method since it protects them if their items get lost in the post.
2. The Return Form must be correctly filled out in capital letters and forwarded to the Seller together with the goods within ten (10) working days after receipt of the products.
3. The products must not have been used, worn, or damaged.
4. The products must be returned in their original packaging.
5. The returned products must be delivered to the Seller within ten (10) working days after the date on which the Customer received the products.
If you have not already done so, we also invite you to read our General Terms and Conditions for Use as they contain important indications on how we process the personal data of our users and the security systems adopted.
The General Sales Terms and Conditions are governed by Italian law and in particular, Legislative Decree no. 206 dated 6 September 2005 concerning the Consumer Code, with specific reference to the regulations governing distance selling contracts, and Legislative Decree no. 70 dated 9 April 2003 on several issues concerning electronic commerce.
The General Sales Terms and Conditions are amended from time to time, also in consideration of any regulatory amendments. The new The General Sales Terms and Conditions will be effective as of the date of publication on store.pakerson.it.
Sutorius srl, Via Fonda 9 - 50050 CERRETO GUIDI - FI is the party responsible for processing Customers' personal data.
For Sutorius srl, privacy protection is a fundamental concern. Sutorius srl pledges to keep users' personal data strictly confidential. We feel that providing our website users with full notice and explanations of applicable privacy laws and the measures we adopt for protecting their privacy helps us provide better service. The criteria applied by Sutorius srl when processing personal data are set forth below.
Sutorius srl gathers and processes users' personal data in order to provide better service and to facilitate user access to a vast range of products and services. Personal data is also used for the purpose of providing our users with updates on new products and other information which Sutorius srl feels may be of interest. Additionally, personal data may be used to contact users to invite them to participate in market surveys, which help us to assess overall customer satisfaction and to develop improved products.
Information concerning our users is collected in many different ways. For example, the information we use to contact our customers may be requested when users write to Sutorius srl, call to request a service, or participate in an online survey. Furthermore, users are required to provide information when they register for Sutorius srl online services or enter their names on a mailing list. This information is collated and stored in a secure database.
When can personal data be divulged?
Sutorius srl is a global-level organization, and for this reason users' personal data may be shared with the companies making up the Sutorius srl distribution network, located in various places around the world. Users' personal data are protected by Sutorius srl as required by and in accordance with applicable privacy protection guidelines, laws, and regulations. Sutorius srl collaborates with other companies which participate in providing the services offered by Sutorius srl. These companies may be given access to users' personal data, but said data are communicated to third parties for use only in connection with provision of the service and the companies in question are required by law to safeguard personal data in the same manners and according to the same standards adopted by Sutorius srl.
We may sometimes be required to divulge customers' personal data, by law or during the course of legal proceedings. Additionally, Sutorius srl may also divulge customer when such an action is deemed to be necessary and in the public interest.
How are customers' personal data protected?
Sutorius srl safeguards the data submitted by users by physical, electronic, and management-related/organisational procedures. Sutorius srl invites users to take all necessary precautions to protect their personal data on the Internet and recommends changing passwords frequently, using passwords containing combinations of letters and numbers, and using only a secure browser.
The Sutorius srl webstore (store.pakerson.it) makes use of the SSL (Secure Sockets Layer) encryption standard on all website pages that request personal data. In order to make purchases at store.pakerson.it, customers must use a browser with SSL protocol capability, such as Netscape Navigator 3.0 (or higher version) or Internet Explorer. This method protects personal data and credit card information during transmission over the Internet.
Users may access the information concerning them at any time. To consult and/or update the personal data concerning you that has been collected by Sutorius srl, please contact store@pakerson.it .
Users may visit the Sutorius srl website anonymously. Even in the anonymous mode, however, the browser automatically communicates the type of computer and operating system employed by the user.
Like many other websites, the Sutorius srl website makes use of "cookie" technology. The first time a user connects to the website, a cookie (a small data package) identifies the browser with a random, unambiguous number. Cookies do not reveal any personal information about the user, to the possible exclusion of the user's first name, which is used to welcome users on later visits to the site. Cookies allow us to track site usage, to learn which sections of the site are most frequently visited, what paths visitors follow when navigating the site, and how long they remain connected. Cookies are used to study traffic flows on the Sutorius srl website, for the purpose of improving the efficiency of its operation.
In certain of the e-mail messages sent to users, Sutorius srl makes use of "click-through" URLs. If a user clicks one of these URLs, he/she is routed through the Sutorius srl web server before being routed to the destination site. Sutorius srl uses "click-throughs" to learn about customer interest in certain topics and to gauge our communications efficiency.
In order to best guarantee the confidentiality of personal information, these privacy protection guidelines are communicated to each and every employee of Sutorius srl.
Sutorius srl will not knowingly collect personal data from children, nor knowingly send any requests for personal information to children.
The Sutorius srl website contains links to other websites. Sutorius srl does not share its users' personal information with these websites and does not take responsibility for the privacy policies of these websites. Sutorius srl recommends that its users to carefully read the privacy polices of these individual companies.
Should Sutorius srl need to make any use of any personal data different from the intended uses stated at the time the data is collected, the user will be contacted by e-mail at the most recent address available to Sutorius srl. If a user has not authorized dispatch of communications, no such communication will be received nor will the personal data in question be used in any other manner than that originally authorized.


text:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/menu_add_bubble" android:title="@string/add_bubble_string"></item>
    <item android:id="@+id/menu_delete_bubble" android:title="@string/delete_bubble_string"></item>
    <item android:id="@+id/menu_still_mode" android:title="@string/still_mode_string"></item>
    <item android:id="@+id/menu_single_speed" android:title="@string/single_speed_mode_string"></item>
    <item android:id="@+id/menu_random_mode" android:title="@string/random_speed_mode_string"></item>
    <item android:id="@+id/quit" android:title="@string/quit_string"></item>
</menu>

redpajama_set_name: RedPajamaGithub


Mary Anning really did sell her seashells by the seashore. The shell -shaped textured lace and blushed pink of Miss Babs Yowza took me back to childhood moments of combing the shore for pretty pink cockleshells. The lace is truly easy to memorize and pattern flows together, accenting the shawls crescent shape.
Yarn: 500 yds / 457 m Light Worsted weight that achieves gauge. Sample knit in Yowza by Miss Babs, in colourway Adobe.
Gauge: 15 sts = 4″ / 10cm in Lace Stitch after wet blocking (gauge is not overly important; however, it will alter yardage and finished measurements).


Hitting Toad's Place not been there in years, as if I should remember?! Well I did. And called Bragi. We got friends showing up: Peter from Casperelectronics came and lent Curver one of his Instruments which Curver used for the Concert. Joe Lally joined the line up of the tour. He played a very good… Read More Nýhöfn Or What?


text:
One On One | I Put A Spell On You
by Vuyo Seripe / 11.11.2011
'I Put a Spell on You' is a clingy, deranged love song all about the one who never stops sending chills running up and down your spine. Mad love. The one who makes you want to spike their food with a love potion like korobela because you can't imagine being without them. While Nina Simone makes the song sound like a good girl in love with a guy she simply wants to keep, Screamin' Jay brings a whole new meaning, a whole new voodoo dimension, to the song. He passed out after the recording and the whole band was blind drunk. His version was banned on radio for all the suggestive grunting.
Screamin' Jay was one of the batshit craziest people who ever walked the earth. The original shock rocker. He had a skull on a walking stick called Henry. I admire Hawkins. The man sure had character. He was tortured in the Second World War and stuffed a grenade in his torturer's mouth on liberation day. And never looked back. His version of 'Spell on You' kicks off with the famous Darkest Africa lampooning bit that Pitch Black Afro sampled for his Amantofontofo song. Hawkins brings a strange psychotic passion to the song, which is what it always needed, finding the convulsive desire at the heart of it.
Screamin' Jay wasn't a regular old artist and this song says it all. If I was Jay's girlfriend and he sang this song to me, my life would change forever. I would stay with him out of hot fear. Jay sounds how real wrenching love can feel.
We have samples and cover versions of every old song ever but nothing comes close to this for weird original energy. Finding this song was a miracle. Hawkins is one of those truly independent artists who did whatever they wanted to however they wanted to do it. Testimony to Hawkins' everlasting brilliance is the fact that fresh shit is being born because of his catalogue. Fresh shit like Amantofontofo.

redpajama_set_name: RedPajamaCommonCrawl


text:
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

namespace enrol_lti;

defined('MOODLE_INTERNAL') || die;

use context;
use core\notification;
use core_user;
use enrol_lti\output\registration;
use html_writer;
use IMSGlobal\LTI\Profile\Item;
use IMSGlobal\LTI\Profile\Message;
use IMSGlobal\LTI\Profile\ResourceHandler;
use IMSGlobal\LTI\Profile\ServiceDefinition;
use IMSGlobal\LTI\ToolProvider\ToolProvider;
use moodle_exception;
use moodle_url;
use stdClass;

require_once($CFG->dirroot . '/user/lib.php');

/**
 * Extends the IMS Tool provider library for the LTI enrolment.
 *
 * @package    enrol_lti
 * @copyright  2016 John Okely <john@moodle.com>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
class tool_provider extends ToolProvider {

    /**
     * @var stdClass $tool The object representing the enrol instance providing this LTI tool
     */
    protected $tool;

    /**
     * Remove $this->baseUrl (wwwroot) from a given url string and return it.
     *
     * @param string $url The url from which to remove the base url
     * @return string|null A string of the relative path to the url, or null if it couldn't be determined.
     */
    protected function strip_base_url($url) {
        if (substr($url, 0, strlen($this->baseUrl)) == $this->baseUrl) {
            return substr($url, strlen($this->baseUrl));
        }
        return null;
    }

    /**
     * Create a new instance of tool_provider to handle all the LTI tool provider interactions.
     *
     * @param int $toolid The id of the tool to be provided.
     */
    public function __construct($toolid) {
        global $CFG, $SITE;

        $token = helper::generate_proxy_token($toolid);

        $tool = helper::get_lti_tool($toolid);
        $this->tool = $tool;

        $dataconnector = new data_connector();
        parent::__construct($dataconnector);

        // Override debugMode and set to the configured value.
        $this->debugMode = $CFG->debugdeveloper;

        $this->baseUrl = $CFG->wwwroot;
        $toolpath = helper::get_launch_url($toolid);
        $toolpath = $this->strip_base_url($toolpath);

        $vendorid = $SITE->shortname;
        $vendorname = $SITE->fullname;
        $vendordescription = trim(html_to_text($SITE->summary));
        $this->vendor = new Item($vendorid, $vendorname, $vendordescription, $CFG->wwwroot);

        $name = helper::get_name($tool);
        $description = helper::get_description($tool);
        $icon = helper::get_icon($tool)->out();
        $icon = $this->strip_base_url($icon);

        $this->product = new Item(
            $token,
            $name,
            $description,
            helper::get_proxy_url($tool),
            '1.0'
        );

        $requiredmessages = [
            new Message(
                'basic-lti-launch-request',
                $toolpath,
                [
                   'Context.id',
                   'CourseSection.title',
                   'CourseSection.label',
                   'CourseSection.sourcedId',
                   'CourseSection.longDescription',
                   'CourseSection.timeFrame.begin',
                   'ResourceLink.id',
                   'ResourceLink.title',
                   'ResourceLink.description',
                   'User.id',
                   'User.username',
                   'Person.name.full',
                   'Person.name.given',
                   'Person.name.family',
                   'Person.email.primary',
                   'Person.sourcedId',
                   'Person.name.middle',
                   'Person.address.street1',
                   'Person.address.locality',
                   'Person.address.country',
                   'Person.address.timezone',
                   'Person.phone.primary',
                   'Person.phone.mobile',
                   'Person.webaddress',
                   'Membership.role',
                   'Result.sourcedId',
                   'Result.autocreate'
                ]
            )
        ];
        $optionalmessages = [
        ];

        $this->resourceHandlers[] = new ResourceHandler(
             new Item(
                 $token,
                 helper::get_name($tool),
                 $description
             ),
             $icon,
             $requiredmessages,
             $optionalmessages
        );

        $this->requiredServices[] = new ServiceDefinition(['application/vnd.ims.lti.v2.toolproxy+json'], ['POST']);
        $this->requiredServices[] = new ServiceDefinition(['application/vnd.ims.lis.v2.membershipcontainer+json'], ['GET']);
    }

    /**
     * Override onError for custom error handling.
     * @return void
     */
    protected function onError() {
        global $OUTPUT;

        $message = $this->message;
        if ($this->debugMode && !empty($this->reason)) {
            $message = $this->reason;
        }

        // Display the error message from the provider's side if the consumer has not specified a URL to pass the error to.
        if (empty($this->returnUrl)) {
            $this->errorOutput = $OUTPUT->notification(get_string('failedrequest', 'enrol_lti', ['reason' => $message]), 'error');
        }
    }

    /**
     * Override onLaunch with tool logic.
     * @return void
     */
    protected function onLaunch() {
        global $DB, $SESSION, $CFG;

        // Check for valid consumer.
        if (empty($this->consumer) || $this->dataConnector->loadToolConsumer($this->consumer) === false) {
            $this->ok = false;
            $this->message = get_string('invalidtoolconsumer', 'enrol_lti');
            return;
        }

        $url = helper::get_launch_url($this->tool->id);
        // If a tool proxy has been stored for the current consumer trying to access a tool,
        // check that the tool is being launched from the correct url.
        $correctlaunchurl = false;
        if (!empty($this->consumer->toolProxy)) {
            $proxy = json_decode($this->consumer->toolProxy);
            $handlers = $proxy->tool_profile->resource_handler;
            foreach ($handlers as $handler) {
                foreach ($handler->message as $message) {
                    $handlerurl = new moodle_url($message->path);
                    $fullpath = $handlerurl->out(false);
                    if ($message->message_type == "basic-lti-launch-request" && $fullpath == $url) {
                        $correctlaunchurl = true;
                        break 2;
                    }
                }
            }
        } else if ($this->tool->secret == $this->consumer->secret) {
            // Test if the LTI1 secret for this tool is being used. Then we know the correct tool is being launched.
            $correctlaunchurl = true;
        }
        if (!$correctlaunchurl) {
            $this->ok = false;
            $this->message = get_string('invalidrequest', 'enrol_lti');
            return;
        }

        // Before we do anything check that the context is valid.
        $tool = $this->tool;
        $context = context::instance_by_id($tool->contextid);

        // Set the user data.
        $user = new stdClass();
        $user->username = helper::create_username($this->consumer->getKey(), $this->user->ltiUserId);
        if (!empty($this->user->firstname)) {
            $user->firstname = $this->user->firstname;
        } else {
            $user->firstname = $this->user->getRecordId();
        }
        if (!empty($this->user->lastname)) {
            $user->lastname = $this->user->lastname;
        } else {
            $user->lastname = $this->tool->contextid;
        }

        $user->email = core_user::clean_field($this->user->email, 'email');

        // Get the user data from the LTI consumer.
        $user = helper::assign_user_tool_data($tool, $user);

        // Check if the user exists.
        if (!$dbuser = $DB->get_record('user', ['username' => $user->username, 'deleted' => 0])) {
            // If the email was stripped/not set then fill it with a default one. This
            // stops the user from being redirected to edit their profile page.
            if (empty($user->email)) {
                $user->email = $user->username .  "@example.com";
            }

            $user->auth = 'lti';
            $user->id = \user_create_user($user);

            // Get the updated user record.
            $user = $DB->get_record('user', ['id' => $user->id]);
        } else {
            if (helper::user_match($user, $dbuser)) {
                $user = $dbuser;
            } else {
                // If email is empty remove it, so we don't update the user with an empty email.
                if (empty($user->email)) {
                    unset($user->email);
                }

                $user->id = $dbuser->id;
                \user_update_user($user);

                // Get the updated user record.
                $user = $DB->get_record('user', ['id' => $user->id]);
            }
        }

        // Update user image.
        if (isset($this->user) && isset($this->user->image) && !empty($this->user->image)) {
            $image = $this->user->image;
        } else {
            // Use custom_user_image parameter as a fallback.
            $image = $this->resourceLink->getSetting('custom_user_image');
        }

        // Check if there is an image to process.
        if ($image) {
            helper::update_user_profile_image($user->id, $image);
        }

        // Check if we need to force the page layout to embedded.
        $isforceembed = $this->resourceLink->getSetting('custom_force_embed') == 1;

        // Check if we are an instructor.
        $isinstructor = $this->user->isStaff() || $this->user->isAdmin();

        if ($context->contextlevel == CONTEXT_COURSE) {
            $courseid = $context->instanceid;
            $urltogo = new moodle_url('/course/view.php', ['id' => $courseid]);

        } else if ($context->contextlevel == CONTEXT_MODULE) {
            $cm = get_coursemodule_from_id(false, $context->instanceid, 0, false, MUST_EXIST);
            $urltogo = new moodle_url('/mod/' . $cm->modname . '/view.php', ['id' => $cm->id]);

            // If we are a student in the course module context we do not want to display blocks.
            if (!$isforceembed && !$isinstructor) {
                $isforceembed = true;
            }
        } else {
            print_error('invalidcontext');
            exit();
        }

        // Force page layout to embedded if necessary.
        if ($isforceembed) {
            $SESSION->forcepagelayout = 'embedded';
        } else {
            // May still be set from previous session, so unset it.
            unset($SESSION->forcepagelayout);
        }

        // Enrol the user in the course with no role.
        $result = helper::enrol_user($tool, $user->id);

        // Display an error, if there is one.
        if ($result !== helper::ENROLMENT_SUCCESSFUL) {
            print_error($result, 'enrol_lti');
            exit();
        }

        // Give the user the role in the given context.
        $roleid = $isinstructor ? $tool->roleinstructor : $tool->rolelearner;
        role_assign($roleid, $user->id, $tool->contextid);

        // Login user.
        $sourceid = $this->user->ltiResultSourcedId;
        $serviceurl = $this->resourceLink->getSetting('lis_outcome_service_url');

        // Check if we have recorded this user before.
        if ($userlog = $DB->get_record('enrol_lti_users', ['toolid' => $tool->id, 'userid' => $user->id])) {
            if ($userlog->sourceid != $sourceid) {
                $userlog->sourceid = $sourceid;
            }
            if ($userlog->serviceurl != $serviceurl) {
                $userlog->serviceurl = $serviceurl;
            }
            $userlog->lastaccess = time();
            $DB->update_record('enrol_lti_users', $userlog);
        } else {
            // Add the user details so we can use it later when syncing grades and members.
            $userlog = new stdClass();
            $userlog->userid = $user->id;
            $userlog->toolid = $tool->id;
            $userlog->serviceurl = $serviceurl;
            $userlog->sourceid = $sourceid;
            $userlog->consumerkey = $this->consumer->getKey();
            $userlog->consumersecret = $tool->secret;
            $userlog->lastgrade = 0;
            $userlog->lastaccess = time();
            $userlog->timecreated = time();
            $userlog->membershipsurl = $this->resourceLink->getSetting('ext_ims_lis_memberships_url');
            $userlog->membershipsid = $this->resourceLink->getSetting('ext_ims_lis_memberships_id');

            $DB->insert_record('enrol_lti_users', $userlog);
        }

        // Finalise the user log in.
        complete_user_login($user);

        // Everything's good. Set appropriate OK flag and message values.
        $this->ok = true;
        $this->message = get_string('success');

        if (empty($CFG->allowframembedding)) {
            // Provide an alternative link.
            $stropentool = get_string('opentool', 'enrol_lti');
            echo html_writer::tag('p', get_string('frameembeddingnotenabled', 'enrol_lti'));
            echo html_writer::link($urltogo, $stropentool, ['target' => '_blank']);
        } else {
            // All done, redirect the user to where they want to go.
            redirect($urltogo);
        }
    }

    /**
     * Override onRegister with registration code.
     */
    protected function onRegister() {
        global $PAGE;

        if (empty($this->consumer)) {
            $this->ok = false;
            $this->message = get_string('invalidtoolconsumer', 'enrol_lti');
            return;
        }

        if (empty($this->returnUrl)) {
            $this->ok = false;
            $this->message = get_string('returnurlnotset', 'enrol_lti');
            return;
        }

        if ($this->doToolProxyService()) {
            // Map tool consumer and published tool, if necessary.
            $this->map_tool_to_consumer();

            // Indicate successful processing in message.
            $this->message = get_string('successfulregistration', 'enrol_lti');

            // Prepare response.
            $returnurl = new moodle_url($this->returnUrl);
            $returnurl->param('lti_msg', get_string("successfulregistration", "enrol_lti"));
            $returnurl->param('status', 'success');
            $guid = $this->consumer->getKey();
            $returnurl->param('tool_proxy_guid', $guid);

            $returnurlout = $returnurl->out(false);

            $registration = new registration($returnurlout);
            $output = $PAGE->get_renderer('enrol_lti');
            echo $output->render($registration);

        } else {
            // Tell the consumer that the registration failed.
            $this->ok = false;
            $this->message = get_string('couldnotestablishproxy', 'enrol_lti');
        }
    }

    /**
     * Performs mapping of the tool consumer to a published tool.
     *
     * @throws moodle_exception
     */
    public function map_tool_to_consumer() {
        global $DB;

        if (empty($this->consumer)) {
            throw new moodle_exception('invalidtoolconsumer', 'enrol_lti');
        }

        // Map the consumer to the tool.
        $mappingparams = [
            'toolid' => $this->tool->id,
            'consumerid' => $this->consumer->getRecordId()
        ];
        $mappingexists = $DB->record_exists('enrol_lti_tool_consumer_map', $mappingparams);
        if (!$mappingexists) {
            $DB->insert_record('enrol_lti_tool_consumer_map', (object) $mappingparams);
        }
    }
}


text:
L'abri Blood Mountain, en anglais Blood Mountain Shelter, est un refuge de montagne américain à la frontière du comté de Lumpkin et du comté d'Union, en Géorgie. Construit par le Civilian Conservation Corps vers 1937, cet édicule en pierre naturelle et de style rustique est situé à environ  d'altitude au sommet de Blood Mountain, dans les montagnes Blue Ridge. Protégé au sein de la forêt nationale de Chattahoochee et de la Blood Mountain Wilderness, il est inscrit au Registre national des lieux historiques depuis le . On y accède par le sentier des Appalaches.

Annexes

Liens externes

Refuge de montagne inscrit au Registre national des lieux historiques
Registre national des lieux historiques en Géorgie (États-Unis)
Registre national des lieux historiques dans une forêt nationale
Registre national des lieux historiques en 2013
Montagnes Blue Ridge
Comté de Lumpkin
Comté d'Union (Géorgie)
Forêt nationale de Chattahoochee-Oconee
Sentier des Appalaches

redpajama_set_name: RedPajamaWikipedia


I had injured my neck and back playing hockey and needed treatment asap. Paul was very thorough in his analysis of my injury and the attention to detail during the treatment process was excellent. After my first session with him, my back and neck had improved so much and I was able to train the next day. I definitely recommend his services.
Fixed my knee so I can walk and cycle again - excellent.
Paul has changed my working life.
As MD of a busy dental implant laboratory, I often work long stressful hours, at a computer or work bench. This leads to a build up of muscle tension and stiffness in my neck and shoulders. Over the years I have often sought help from several sources, for the pain and stiffness in my neck and back.
Paul is by far the best I have found. His diagnosis and treatment have helped me and my business tremendously, so much so, I will consider sending key members of staff when they need it.
I had suffered with a severe shooting pain down my left arm for nearly 2 years before I started seeing Paul.
Click below: ' view all our reviews' to see more of our independently verified and checked reviews on Freeindex.


Code: UKR-5175. Sleeve Length: Long. Category: Women's embroidery. Color: Red. Embroidery color: White.
Material: linen. Method of application: Embroidery. Composition: 100% linen. Manufacturing method: Machine embroidery.


text:
D Double E
D Double E, is a member of the Newham Generals, originating from the notorious Newham borough of London. Originally in the N.A.S.T.Y Crew, D Double E, Footsie and DJ Tubby are the members; producers and MC's of the harsh, grime sounds of Newham Generals. Monkstarr was also a member until he left to find god.
D Double E used to be a member of the 187 Crew, with Jammer and Armour. The group were invited to join Nasty Crew, and they accepted apart from Jammer, who did join later after N.A.S.T.Y were in contact with a record company and he was approached to work on the production. After being one of the earliest members of Nasty Crew, Double left the collective due to disagreements, which are thought to revolve around the fact that D Double E used the prestigious Nasty Crew name to secure solo bookings. Double also left the crew with Footsie and Monkstarr, and these MCs, along with DJ Tubby established the grime collective the Newham Generals.
The Newham Generals are currently signed to the label Dirtee Stank, a label established by former grime MC Dizzee Rascal, and their debut album Generally Speaking is due for imminent release. The Newham Generals have a regular slot on the pirate radio station Rinse FM.
basslinegrimeuk alternative hip hopuk drilluk garageuk hip hop
D Double E tracks
D Double E videos
SHY FX
Show more artists


Ab einem Bestellwert von € 30 erhalten Sie eine Flasche Cola (1,5 l) gratis dazu.
Избор на: with bacon, with beef, with bell pepper, with cheese, with chicken, with jalapenos и още.
Избор на: with bacon, with capers, with chicken stripes, with egg, with frutti di mare и още.
Each menu is served with French fries and Coca Cola 0.33l.
Each salad is served with a dressing of your choice.
Избор на: with american dressing, with chili dressing, with garlic dressing, with vinegar and oil и още.
Each pizza is topped with tomatoes, cheese and oregano.
Each pizza is topped with tomatoes, cheese, oregano and mozzarella filled double bottom.
Each baguette is garnished with salad and tomatoes.
All burgers are served with French fries and 150g beef.
All burgers are served with French fries and fresh beef.
Each dish is served with a pasta of your choice.
Избор на: with Gnocchi, with Penne, with Spaghetti или with Tortellini.
All spareribs are served with a side dish and 2 sauces of your choice.
Избор на: with French fries, with potato wedges или no side dish.
All specialties are served with French fries and an American dip.
Избор на: no sauce, with chili sauce или with sweet sour sauce.


Ahern International is expanding its network with the opening of Ahern Iberica.
Ahern Iberica, part of the global distribution division owned by Don Ahern, will provide sales, service and spare parts of Snorkel lifts, from its base in Madrid. The company is currently securing premises and recruiting a team and is scheduled start business in June 2019.
Leading the new division will be Enrique Garcia Delgado, who is transitioning from his current role as regional sales director – Europe for Snorkel, to become the managing director of Ahern Iberica. Delgado has more than 17 years' experience in the access industry, having held positions in both sales and technical service.
The company is also expanding its sales team and is looking for a territory manager for Benelux, Switzerland, France and West Africa, and a territory Manager for Eastern Europe. Interested parties can visit the Snorkel stand during Bauma at FS.1002/3 for an informal discussion, says the company.


When a company looks into SEO hosting, they often want to combine the benefits of SEO along with a hosting package. This means the business is looking for a hosting company that also offers search engine optimization, or SEO, practices. Typically, combining both of these services gives your business a discount on one or both of the services. Look at the different features most SEO hosting packages can offer.
Some of the best features that can come along with SEO hosting include the boost to website ranking when using this type of package. The biggest reason that ranking can increase is because the owner of the IP address can put links to other sites also on the same IP address, boosting the ranking of both sides that are being linked together.
Aside from the potential boost in ranking, the cost savings are one of the best benefits that comes along with SEO hosting packages. This can help businesses with a limited budget to get more bang for their buck. Unfortunately, there are also some drawbacks to using SEO hosting packages. With the fact that most SEO hosting packages do not dedicate as much time to your website as a traditional SEO campaign would, you could end up falling in the ranks. Also, if the search engines catch on to the owner of the IP address using multiple sites linking to each other, this can actually cause a drop in ranking to all of the sites that were involved due to those types of SEO practices being frowned upon.
The overall cost of most SEO hosting packages is inclusive of some form of an SEO campaign, which makes the exact price you pay slightly difficult to pinpoint. If your website is in need of SEO, then you may want to look at what type of hosting you would do on your own and compare that to the cost of what an SEO hosting package would cost you. From there, compare the features you know you need with what you would get in each package, and determine what is best for your business. Just because you find a cheap package price does not mean you are getting a lower quality product. Some services are just able to offer lower prices due to the bulk number of websites they host.
Look around and decide if you want to try an SEO hosting package. If you feel as though the benefits outweigh the risk, then find the company near you that you feel comfortable with. Anyone that is unsure of what to do should contact the company and speak to them about the pros and cons. Companies that will openly discuss both the good and bad sides of their packages are obviously aware of the dangers. This is a sign that the company is paying attention to all of their websites and going about things in the most secure fashion possible.


text:
Find classical music concert, opera, ballet and dance reviews | Taryn Fiebig
What to search for
Add another search term
Concerts Opera Dance Others
Until From
Do the search
Put content in English at top
Showing 13 of 13 reviews
Farnace by Vivaldi (more or less) at Pinchgut Opera
By Sandra Bowdler, 04 December 2019
Vivaldi's Farnace is reconstructed by Pinchgut Opera in ways which might not do the composer full dramatic justice, but the production and high musical values provide an excellent night of operatic drama.
By Sandra Bowdler
Disconnected dégustation: Pinchgut Opera's Anacréon and Pigmalion
By Jeremy Eccles, 15 June 2017
Historically informed rarities from Rameau and Vinci aim to recreate the world of 18th-century opera-going in Paris. But a misaligned production distracts from this specialised experience.
***11
Disconnected dégustation: Pinchgut Opera's Rameau
By Jeremy Eccles
Glyndebourne's Saul wins over Adelaide
By Sandra Bowdler, 03 March 2017
The stunning Glyndebourne production of Saul by Barrie Kosky also makes a big impact in the Adelaide Festival.
The way the world ends: brilliant Götterdämmerung crowns Melbourne cycle
By David Larkin, 28 November 2016
The final instalment of the Melbourne Ring is vividly brought to life by excellent singing, an adaptable set, and committed playing from the pit.
The way the world ends
By David Larkin
Through a class darkly: McVicar's Così in Sydney
By Jeremy Eccles, 19 July 2016
Not just a jolly romp through the inconstancies of the heart, Sir David McVicar takes Così fan tutte through a dark lesson for lovers while leaving the music ravishingly intact.
Through a class darkly: McVicar's Così
Puppetry and pantomime: The Magic Flute in Sydney
By Tony Burke, 07 January 2016
Julie Taymor's production maintains the magic of The Magic Flute at Sydney Opera House.
By Tony Burke
Reflections on Gallipoli: enthralling and frustrating
By Simon Hukin, 14 March 2015
The Gallipoli landings are etched indelibly into the Australian psyche. The Australian Chamber Orchestra offers an exploration of the campaigns which is enthralling and frustrating by turns.
By Simon Hukin
Falstaff in Melbourne: a high-calibre, cavorting, colour-coded comedy
By Brian Angus, 01 December 2014
Opera Australia's Falstaff in Melbourne brings freshness to this almost 20-year-old production. Contributing to its success is an outstanding Falstaff...
A high-calibre, cavorting, colour-coded comedy
By Brian Angus
The soulless predator: McVicar's modern take on Don Giovanni in Australia
By Zoltán Szabó, 30 July 2014
David McVicar's Don Giovanni for Opera Australia takes its cue from the brutally grim opening of the opera, yet remains true to Mozart's own description of a "jocular" work (dramma giocoso).
The soulless predator: McVicar's Don Giovanni
By Zoltán Szabó
Memorable re-visioning of Verdi's Un Ballo in Maschera at the Sydney Opera House
By David Larkin, 24 January 2013
"I would ask what the management's drama has in common with mine. The title? No. The poet? No. The period? No. The place? No. The characters? No." This excerpt from Verdi's legal proceedings against the management of San Carlo, who were trying to foist changes on Un Ballo in Maschera, came vividly to my mind last night at Sydney Opera House.
New Zealand Opera's Bartered Bride: A Czech classic in English
By Simon Holden, 25 September 2012
The Bartered Bride, premiered in 1866, is considered to be Smetana's masterpiece in the operatic genre and is widely regarded as the national opera of the Czech Republic. Despite this, for their second and last production this year, New Zealand Opera elected to perform the opera in English translation rather than the original Czech, aiming to speak to their audiences in a more direct fashion.
By Simon Holden
Opera Australia: The Marriage of Figaro with a difference
By Oliver Brett, 28 February 2012
From the opening bars of the Overture of Opera Australia's production of Mozart's The Marriage of Figaro it was clear that this was going to be a production with a difference. As the orchestra began, the curtain raised to reveal a room, painted in brilliant white, with clothes rails at either end containing maids' costumes.
By Oliver Brett
By Bachtrack, 30 March 2010
Much anticipated, ten years in the making, interrupted by some fairly momentous bumpy bits at Opera Australia such as the removal of Music Director Simone Young who comissionned the work in the first place, Bliss has finally arrived. And the good news is that audiences in Sydney received it warmly: the season of just five performances sold out.
By Bachtrack


text:
    In computer science, a queue is a particular kind of data type in which the entities in the collection
    are kept in order and the principal operations on the collection are the addition of entities to the rear terminal
    position (enqueue or push),
    and removal of entities from the front terminal position (dequeue or pop).
    This makes the queue a First-In-First-Out (FIFO) data structure.
    In a FIFO data structure, the first element added to the queue will be the first one to be removed.
    This is equivalent to the requirement that once a new element is added, all elements that were added before have to
    be removed before the new element can be removed.

    We will emulate the queue process with Python. You are given a sequence of commands:

    - "PUSH X" -- enqueue X, where X is a letter in uppercase.

    - "POP" -- dequeue the front position. if the queue is empty, then do nothing.

    The queue can only contain letters.

    You should process all commands and assemble letters which remain in the queue in one word from the front to the
    rear of the queue.

    Let's look at an example, here's the sequence of commands:

    ["PUSH A", "POP", "POP", "PUSH Z", "PUSH D", "PUSH O", "POP", "PUSH T"]

        Command
        Queue
        Note

        PUSH A
        A
        Added "A" in the empty queue

        POP

        Removed "A"

        POP

        The queue is empty already

        PUSH Z
        Z

        PUSH D
        ZD

        PUSH O
        ZDO

        POP
        DO

        PUSH T
        DOT
        The result

    Input:  A sequence of commands as a list of strings.

    Output:  The queue remaining as a string.

    Example:
    {% if interpreter.slug == "js-node" %}

letterQueue(['PUSH A',
 'POP',
 'POP',
 'PUSH Z',
 'PUSH D',
 'PUSH O',
 'POP',
 'PUSH T']) == 'DOT'
letterQueue(['POP', 'POP']) == ''
letterQueue(['PUSH H', 'PUSH I']) == 'HI'
letterQueue([]) == ''

    {% else %}

letter_queue(['PUSH A',
 'POP',
 'POP',
 'PUSH Z',
 'PUSH D',
 'PUSH O',
 'POP',
 'PUSH T']) == 'DOT'
letter_queue(['POP', 'POP']) == ''
letter_queue(['PUSH H', 'PUSH I']) == 'HI'
letter_queue([]) == ''

    {% endif %}

    How it is used:
    Queues provide services in computer science, transportation,
    and operations research where various entities such as data, objects, persons, or events are stored and
    held to be processed later. In these contexts, the queue performs the function of a buffer.

    Precondition:

    0 ≤ len(commands) ≤ 30;

    all(re.match("\APUSH [A-Z]\Z", c) or re.match("\APOP\Z", c) for c in commands)


text:
package org.apache.pig.newplan.logical.relational;

import java.util.ArrayList;
import java.util.List;

import org.apache.pig.data.DataType;
import org.apache.pig.impl.logicalLayer.FrontendException;
import org.apache.pig.newplan.Operator;
import org.apache.pig.newplan.OperatorPlan;
import org.apache.pig.newplan.PlanVisitor;
import org.apache.pig.newplan.logical.expression.LogicalExpression;
import org.apache.pig.newplan.logical.expression.LogicalExpressionPlan;

/**
 * RANK operator implementation.
 * Operator Syntax:
 * <pre>
 * {@code alias = RANK rel ( BY (col_ref) (ASC|DESC)? ( DENSE )? )?;}
 * alias - output alias
 * RANK - operator
 * rel - input relation
 * BY - operator
 * col_ref - STAR or Column References or a range in the schema of rel
 * DENSE - dense rank means a sequential value without gasp among different tuple values.
 * </pre>
 */

public class LORank extends LogicalRelationalOperator{

    private final static String RANK_COL_NAME = "rank";
    private final static String SEPARATOR = "_";

    /**
     * A List within logical expression plans in case of RANK BY
     */
    private List<LogicalExpressionPlan> rankColPlans;

    /**
     * A List within ascending columns on a RANK BY
     */
    private List<Boolean> ascCols;

    /**
     * In case of RANK BY, it could by dense or not.
     * Being a dense rank means to assign consecutive ranking
     * to different tuples.
     */
    private boolean isDenseRank = false;

    /**
     * In case of simple RANK, namely row number mode
     * which is a consecutive number assigned to each tuple.
     */
    private boolean isRowNumber = false;

    public LORank( OperatorPlan plan) {
        super("LORank", plan);
    }

    public LORank( OperatorPlan plan, List<LogicalExpressionPlan> rankColPlans, List<Boolean> ascCols) {
        this( plan );
        this.rankColPlans = rankColPlans;
        this.ascCols = ascCols;
    }

    public List<LogicalExpressionPlan> getRankColPlans() {
        return rankColPlans;
    }

    public void setRankColPlan(List<LogicalExpressionPlan> rankColPlans) {
        this.rankColPlans = rankColPlans;
    }

    public List<Boolean> getAscendingCol() {
        return ascCols;
    }

    public void setAscendingCol(List<Boolean> ascCols) {
        this.ascCols = ascCols;
    }

    /**
     * Get the schema for the output of LORank.
     * Composed by long value prepended to the
     * rest of the input schema
     * @return the schema
     * @throws FrontendException
     */
    @Override
    public LogicalSchema getSchema() throws FrontendException {

        // if schema is calculated before, just return
        if (schema != null) {
            return schema;
        }

        LogicalRelationalOperator input = null;

        //Same schema of previous predecessor
        input = (LogicalRelationalOperator)plan.getPredecessors(this).get(0);
        if (input == null) {
            return null;
        }

        LogicalSchema inputSchema = input.getSchema();

        // the schema of one input is unknown, so the rank schema is unknown, just return
        if (inputSchema == null) {
            schema = null;
            return schema;
        }

        //Complete copy from previous schema for each LogicalFieldSchema
        List<LogicalSchema.LogicalFieldSchema> fss = new ArrayList<LogicalSchema.LogicalFieldSchema>();

        for (int i=0; i<inputSchema.size(); i++) {
            LogicalSchema.LogicalFieldSchema fs = inputSchema.getField(i);
            LogicalSchema.LogicalFieldSchema newFS = null;
            newFS = new LogicalSchema.LogicalFieldSchema(fs.alias, fs.schema, fs.type, fs.uid);
            fss.add(newFS);
        }

        schema = new LogicalSchema();

        schema.addField(new LogicalSchema.LogicalFieldSchema(RANK_COL_NAME+SEPARATOR+input.getAlias(), null, DataType.LONG));
        schema.getField(0).uid = LogicalExpression.getNextUid();

        for(LogicalSchema.LogicalFieldSchema fieldSchema: fss) {
            schema.addField(fieldSchema);
        }

        return schema;

    }

    @Override
    public void accept(PlanVisitor v) throws FrontendException {
        if (!(v instanceof LogicalRelationalNodesVisitor)) {
            throw new FrontendException("Expected LogicalPlanVisitor", 2223);
        }
        ((LogicalRelationalNodesVisitor)v).visit(this);
    }

    @Override
    public boolean isEqual(Operator other) throws FrontendException {
        if (other != null && other instanceof LORank) {
            LORank oR = (LORank)other;
            if (!rankColPlans.equals(oR.rankColPlans))
                return false;
        } else {
            return false;
        }

        return checkEquality((LogicalRelationalOperator)other);
    }

    /**
     * Get if it is a dense RANK BY
     * @return boolean
     */
    public boolean isDenseRank() {
        return isDenseRank;
    }

    /**
     * Set if it is a dense RANK BY
     * @param isDenseRank if is dense rank or not
     */
    public void setIsDenseRank(boolean isDenseRank) {
        this.isDenseRank = isDenseRank;
    }

    /**
     * Get if it is a simple RANK operation.
     * Which means a row number attached to each tuple.
     * @return boolean
     */
    public boolean isRowNumber() {
        return isRowNumber;
    }

    /**
     * Set if it is a simple RANK operation.
     * @param rowNumber if is a row number operation
     */
    public void setIsRowNumber(boolean rowNumber) {
        this.isRowNumber = rowNumber;
    }
}


Hiring now: Financial Analyst . Should have knowledge of VAT. Ones on visit visa can apply. Experience: 1 - 2 years. English required. Employment visa provided. Salary: AED 12,000.
We are hiring: Financial Analyst required. Should have knowledge of VAT. Male preferred. Experience: 2 - 3 years. Employment visa. Medical insurance. Salary: AED 11,000.


text:
Home > Blog > Why Is Volkswagen Giving Whistleblowers Amnesty?
Why Is Volkswagen Giving Whistleblowers Amnesty?
As Volkswagen comes under scrutiny, its CEO Martin Winterkorn reluctantly announced his resignation from the company. Though he continued to deny any knowledge of the defeat device software that eventually caused dieselgate—and his downfall—the CEO accepted responsibility for the "irregularities" and stepped down, making way for Porsche boss Matthias Mueller to take his place. However, this is only the beginning of VW's plans to regain consumer trust, but will anything help make the German automaker regain its former glory?
At the end of November, Volkswagen ended a very strange offer that it had given to all its employees. The auto manufacturer told its employees that if they came forward with information about the carmaker's two current scandals, the employees would not be fired or suffer damages claims from the manufacturer.
Will The VW Whistleblower Program Work?
The program was designed to help speed up the investigation process at the German mark, and the strategy has been successfully deployed at companies like Siemens and VW's truck-making branch MAN. This means that VW may be able to conduct a fast investigation, which may help it avoid steeper fines. When Toyota was slow with its investigations during the sticky accelerator recall a few years ago, the company was slapped with a $1.2 billion fine, but GM cooperated with government officials and only suffered a $900 million fine during its ignition switch recall.
The German automaker is still looking at hefty fines for the dieselgate recall, but they are taking every opportunity to minimize damage and win back consumer confidence. Do you think they are doing enough? Log onto our Facebook and Twitter pages and let us know.
Tagged VWRecall


text:
Q: TypeError: Unable to get property 'insertBefore' of undefined or null reference only On IE I AngularJS v1.2.0. I am getting following error only on IE11.

TypeError: Unable to get property 'insertBefore' of undefined or null reference at Anonymous function (/Scripts/angular.js:3850:11) at forEach (/Scripts/angular.js:303:9) at enter (/Scripts/angular.js:3849:9) at Anonymous function (/Scripts/angular.js:18725:17) at publicLinkFn (/Scripts/angular.js:5420:29) at ngRepeatAction (/Scripts/angular.js:18723:15) at $watchCollectionAction (/Scripts/angular.js:11299:11) at Scope.prototype.$digest (/Scripts/angular.js:11395:21) at Scope.prototype.$apply (/Scripts/angular.js:11634:13) at done (/Scripts/angular.js:7635:34)

It works fine on Firefox. It fails when following custom directives executes.
.directive('appMyCourseCards', ['$compile', '$log', function ($compile, $log) {
return {
    restrict: 'E',
    replace: true,
    scope: {

    },
    link: function (scope, element, attributes, controller) {
        var content = '
' +
                            '
' +
                                        '
' +
                                            '
{{schedule.SSECName}}
' +
                                        '
' +
                            '
' +
                    '
';

        element.append($compile(content)(scope.$parent));
    }
};

Any help would be highly appreciated.
Thanks.

A: Could you add the details of your custom filter 'filterCourses'?
I created this Plunk with most of your code and it works ok in IE11, so I suspect it may be the filter that is causing the issue.
This is what I have in Plunker
    .directive('appMyCourseCards', ['$compile', '$log', function ($compile, $log) {
    return {
    restrict: 'E',
    replace: true,
    scope: {

    },
    link: function (scope, element, attributes, controller) {
      scope.$parent.studentSubjectSchedules = [{SSECName: "name1"}, {SSECName: "name2"}];
        var content = '
' +
                            '
' +
                                        '
' +
                                            '
{{schedule.SSECName}}
' +
                                        '
' +
                            '
' +
                    '
';

        element.append($compile(content)(scope.$parent));
    }
}}]);

redpajama_set_name: RedPajamaStackExchange


text:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<TITLE>
Misc
</TITLE>

<META NAME="date" CONTENT="2011-07-21">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">

      Overview
      Package
    Class
      Use
      Tree
      Deprecated
      Index
      Help

 PREV CLASS
 NEXT CLASS

  FRAMES
 NO FRAMES

  All Classes

  SUMMARY: NESTED | FIELD | CONSTR | METHOD

DETAIL: FIELD | CONSTR | METHOD

martin.common

Class Misc

java.lang.Object
  martin.common.Misc

public class Misc
extends java.lang.Object

Constructor Summary

Misc()

Method Summary

static java.lang.String
addzeros(int data,
         int desiredLength)

          Pads integer data with leading zeros until a desired length is reached.

static java.lang.String
detectEncoding(java.io.BufferedReader instream)

          will try to detect whether a text file is in utf-8 or windows-1252 format

static java.lang.String
downloadURL(java.net.URL url)

static java.lang.String
getDuration(long ms)

static java.lang.String
implode(java.lang.Object[] arr,
        java.lang.String separator)

static double[][]
loadCSV(java.io.File file)

static java.lang.String
loadFile(java.io.File file)

static java.util.Map<java.lang.String,java.lang.String>
loadMap(java.io.File file)

static java.util.Map<java.lang.String,java.lang.String>
loadMap(java.io.File file,
        java.lang.String sep,
        int keyField,
        int valueField)

static java.util.Map<java.lang.String,java.util.Set<java.lang.String>>
loadMapSet(java.io.File file,
           boolean reverse)

static java.util.Set<java.lang.String>
loadStringSetFromFile(java.io.File file)

static java.lang.String[][]
loadTable(java.io.File file)

static java.lang.String
replicateChar(char c,
              int n)

static java.lang.String
replicateString(java.lang.String s,
                int n)

static double
round(double data,
      int numFractionDigits)

          rounds a double value to a given number of digits

static java.util.ArrayList
sort(java.util.List list)

static java.lang.String
unsplit(java.util.Collection<java.lang.String> set,
        java.lang.String separator)

static void
writeFile(java.io.File file,
          java.lang.String text)

Methods inherited from class java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

Misc

public Misc()

Method Detail

implode

public static java.lang.String implode(java.lang.Object[] arr,
                                       java.lang.String separator)

Parameters:
arr -
separator -

Returns:
a string of all string representations of the objects in arr, separated by separator

unsplit

public static java.lang.String unsplit(java.util.Collection<java.lang.String> set,
                                       java.lang.String separator)

Parameters:
set -
separator -

Returns:
a string of all string representations of the objects in set, separated by separator

sort

public static java.util.ArrayList sort(java.util.List list)

Parameters:
list -

Returns:
list, sorted

downloadURL

public static java.lang.String downloadURL(java.net.URL url)

loadCSV

public static double[][] loadCSV(java.io.File file)

round

public static double round(double data,
                           int numFractionDigits)

rounds a double value to a given number of digits

Parameters:
data -
numFractionDigits -

Returns:
data, rounded

addzeros

public static java.lang.String addzeros(int data,
                                        int desiredLength)

Pads integer data with leading zeros until a desired length is reached. This is useful for e.g. dates, where 2009-07-30 looks better than 2009-7-30.

Parameters:
data -
desiredLength -

Returns:
a string of length desiredLength consisting of data and a number of leading zeros

detectEncoding

public static java.lang.String detectEncoding(java.io.BufferedReader instream)

will try to detect whether a text file is in utf-8 or windows-1252 format

Parameters:
instream -

Returns:
the name for the encoding used in the stream

replicateString

public static java.lang.String replicateString(java.lang.String s,
                                               int n)

replicateChar

public static java.lang.String replicateChar(char c,
                                             int n)

loadStringSetFromFile

public static java.util.Set<java.lang.String> loadStringSetFromFile(java.io.File file)

loadMap

public static java.util.Map<java.lang.String,java.lang.String> loadMap(java.io.File file)

loadMapSet

public static java.util.Map<java.lang.String,java.util.Set<java.lang.String>> loadMapSet(java.io.File file,
                                                                                boolean reverse)

loadMap

public static java.util.Map<java.lang.String,java.lang.String> loadMap(java.io.File file,
                                                                       java.lang.String sep,
                                                                       int keyField,
                                                                       int valueField)

writeFile

public static void writeFile(java.io.File file,
                             java.lang.String text)

loadFile

public static java.lang.String loadFile(java.io.File file)

getDuration

public static java.lang.String getDuration(long ms)

loadTable

public static java.lang.String[][] loadTable(java.io.File file)

      Overview
      Package
    Class
      Use
      Tree
      Deprecated
      Index
      Help

 PREV CLASS
 NEXT CLASS

  FRAMES
 NO FRAMES

  All Classes

  SUMMARY: NESTED | FIELD | CONSTR | METHOD

DETAIL: FIELD | CONSTR | METHOD


text:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:zAdjustment="top">

    <translate
        android:duration="400"
        android:fromYDelta="100%p"
        android:toYDelta="0%" />

</set>


philadelphia – Cliff Lee keeps finding ways to outdo his previous performance.
Lee pitched a two-hitter, carrying a no-hit bid into the sixth inning, and the Philadelphia Phillies beat the Arizona Diamondbacks, 8-1, Wednesday night.
Jayson Werth hit a pair of solo homers, Ryan Howard hit a three-run shot, and Chase Utley also connected for the NL East-leading Phillies, who've won seven of eight. Philadelphia is a season-high 19 games over .500 at 68-49.
The Phillies roughed up All-Star right-hander Dan Haren (12-8), who had his worst outing of the year – a season-high six runs in five innings.
Utley put the Phillies ahead 2-0 when he connected in the third. After Shane Victorino walked, Utley drove Haren's next pitch into Philadelphia's bullpen in right-center field for his 25th homer.
Howard ripped an opposite-field shot to left-center to make it 5-1 in the fifth. It was his 31st homer and fifth in six games.
Werth crushed the next pitch off the ivy covering the brick batter's eye beyond the center-field wall. Werth took reliever Juan Gutierrez deep to right in the seventh.
The Phillies now have four players with at least 25 homers: Howard, Werth (27), Raul Ibañez (27) and Utley.


text:
Hora may refer to:

Companies
 Hora (company), a Romanian manufacturer of stringed musical instruments

People
 Hora (surname)
 Hora (musician), member of the Japanese duo Schwarz Stein
 Hora people, an indigenous people of Bolivia

Places
 Hora, Iran, a village in Chaharmahal and Bakhtiari Province, Iran

Music
 Hora (dance), a circle dance originating in the Balkans
 "Hora" (song), 1982 Eurovision contest entry by Avi Toledano

Other
 Hora (astrology), a branch of the Indian system Jyotiṣa
 Hora, any of several Western Classical goddesses,  collectively Horae
 the Latin word for hour, or time
 Dipterocarpus zeylanicus, a tree species commonly known by its anglicized Sinhalese name "hora"
 Hora (2009 film), a 2009 Norwegian exploitation film

See also
 Horea (disambiguation)
 Horești (disambiguation)


The Phoenix Park is the largest urban park in Europe and is open to the public all year round. Explore and stroll through the ornamental gardens, nature trails, and broad expanses of grassland, separated by avenues of trees, including oak, beech, pine, chestnut, and lime. The park is also home to a large herd of fallow deer which have been present in the park since the 17th century. The park also houses Dublin Zoo and the official residency of the President of Ireland, Áras an Uachtaráin.
St Stephens Green Park is located next to the shopping area of Grafton Street. It is open all year round and countless people pass through Fusiliers' Arch and enjoy the beautiful surrounds, taking tours of the many statues and relax laying back on the grass! A children's playground is a popular attraction of the park. Lunchtime concerts are performed during the summer months.
Marlay Park is a suburban public park and comprises extensive woodlands, ponds, walking and cycle trails, etc.
St. Anne's park is Dublin's second largest public park and is located in the Clontarf/Raheny area. The park has extensive woodlands, water features and recreational facilities as well as an international famous rose gardens. The gardens of St Anne's Park are at their peak from June through September. St Anne's Rose Festival is held at the peak of flowering for roses and is a really special time to see them at their best. The Festival is a family event - with music, horticultural lectures and fun events together with craft stands and plant sales, food stalls and a farmers market.
The National Botanic Gardens are an oasis of calm and beauty located on Dublin's northside and is linked to Glasnevin Cemetery Museum. The gardens are noted for their fine plant collections holding more than 15,000 plant species and cultivars from a variety of habitats from around the world. Admission is free and you can leisurely stroll among the Herbaceous borders, rose garden, the alpine yard, the pond area, rock garden and arboretum. A premier scientific institution, the gardens also contain the National Herbarium and several historic wrought iron glasshouses.
Merrion Square Park is located in the heart of Georgian Dublin. Notable features of the park include many fine sculptures; the Rutland Memorial; a collection of old Dublin lamp posts; a central floral garden; heather garden and playground.
A list of the most popular parks and gardens in Dublin provided by Visit Dublin.
A list of the top 14 parks and gardens as compiled by Lonely Planet.
Visit a park in Dublin City centre.
Visit a park in south county Dublin.
Visit a park in north county Dublin.
Visit a park in south-east county Dublin.


No kidding...pff, I wish, lol.
Just feed the FreeStyle render into Inkscape as a .png or .jpg and Path > Trace Bitmap.
BnBGobo99 wrote: Just feed the FreeStyle render into Inkscape as a .png or .jpg and Path > Trace Bitmap.
Yeah Bunny, that's a great workflow. I often used to do just that, but with adobe flash or illustrator instead of inkscape. It gives great results for the fill colors. For the vector lines, not so much tho unfortunately. At least not yet.
Thats indeed a cool idea.
I just wished blender had the oldschool .dxf or other built in vector exporters ..since tracing it via inkscape would result in a loss of accuracy i m afraid...depending on your raster images resolution ultimately.
But i guess in most cases it wouldnt matter too much.
I'm still using blender for work often, sometimes just for quick visuals sometimes for more more elaborate things.
this was a visualization for some stop by shop that got their corporate ID overhauled, there have been several iterations of ideas aswell as different layouts of the elements.
rendered out this one for my own enjoyment to celebrate the nice framework with the squares that i came up with...wich is btw just an array along a curve, i then removed some of the yellow squares again by selcting random..really effective i found since it allowed for a ton of iterations.
these are 2 pages of a 20page brochure wich was used as a financing pitch in the concept stage of that building project..worked out really well..all the pages share the same styling and contain 2 pages for each floor of it, layouted all the additionnal textes etc., got it printed and it did the trick so far...we're going to expand on this once more details of the final plannings are pinned to make another brochure for possible buyers.
As u see i'm still around doing the old blender thing and i m pretty positive that i will expand on it often as i get the possibility to do some contract work.
Thanks for comment and critique everyone.
These look really good, Nixon. The shop rendered out really well using Blender--if you said V-Ray I would have believed you! Very cool that you can use Blender at work, it has a bad wrap in most places. More and more larger firms are using it in the background for quick stuff that never makes it to screen (Spiderman, Avengers, Hunger Games(?I think--flock of birds?)).
I'm bit of in a lucky position when it comes to blenders reputation...the offices I freelance are all very small and diverse, most of them have no 3d experiences at all..the shop project for instance is just a lady that does a 1 woman show as a designer, she hires freelancers now and then to give shape to her sketches and thats it.
That means theres no limitation of tools.. mainly because theres a lack of understanding and she just wants some pngs in the end to do her thing.
Other architectural offices with 3-10 people often do not want to invest into expensive rendering software and also there this lack of 3d knowledge at all, mainly because their pipeline relies just on oldschool cad. Since theres no 1 that knows better i can just go ahead and use blender. Telling them that its free for commercial use helps also to keep objections at bay. So being in a blender niche works out pretty well.
Bottom line is basicly that i'm so far off a real production pipeline , and my work is actually so small that it doesnt matter at all ..its a solitary gig when it comes to the computer stuff mostly. It all has a very low gravity and impact in the end, but thats fine for me.
I'm kind of a guy that plays things safe and kinda dodges projects that have very large scale, tho theres lot to gain at times theres also a certain sense of urgency and aggressive style of business. I worked in a 50 person office for once, large team, project sum about 790 million bucks...i quit after 7 days because it was just not my cup of tea. ( they would payed 2,5 times what i usually got) I felt very small and fragile constantly mainly because so much stuff was out of my control.
Small teams have something much more valuable to offer for me, they seem warm and familiar and you only have to negotiate your workflow with few people.


It could be that there is just 1 web site beneath the site you are about to remove but there could also be 1000 sub sites. I have created the below PowerShell script to automatically start removing site, web and subwebs from SharePoint Online with PowerShell.
You will need to change the first variables in the remove-SPOWebs function to match your Office 365 tenant and copy this bit to PowerShell.
$toBeDeleted = Read-Host "Please enter the full url of the site that needs to be deleted (e.g. https://spfire.sharepoint.com/sites/rootsite/subsite"
first enter the URL that will be the starting point.
It will first remove the sub sites and then makes its way to the start site.