text:
History of Philadelphia and its architecture (Part 1)
Learning from lofts
Robert Venturi and Denise Scott Brown	Architect
71. Learning from lofts 52 03:40
72. History of Philadelphia and its architecture (Part 1) 58 05:56
74. Downtown Memphis, Tennessee 134 04:47
75. Campus planning for Dartmouth College 43 03:01
76. How sections could have helped New Orleans 25 01:13
77. Palmer Drive Life Sciences Complex 30 03:49
78. Tsinghua University in Beijing (Part 1) 50 04:14
80. Lecturing 40 06:58
[RV] When we began this, around 1980, this designing of lab buildings, series of lab buildings, we had great fun visiting our friend Phil Finkelpearl up in North Eastern Massachusetts and visiting Lawrence, Massachusetts and other industrial older, 19th century industrial cities. And learning from the great system of New England mills…
[DSB] Learning from lofts.
[RV] And learning from lofts. It was just fabulous. It was just fascinating. The buildings are so beautiful and fortunately not all of them have been demolished and they are being used for other uses. We also were working at that time up in Dartmouth and we'd take a train – a plane up to – what is the capital city of New Hampshire? God, but anyhow, that city is along a river and you drive past it as you drive up to Dartmouth. Oh my, you pass these beautiful, beautiful loft buildings that are still there.
Textile mills, or…?
[RV] Textile mills, I think, yeah. I forget the name of that city.
Is it Portsmouth?
[RV] No.
Hanover?
[DSB] Hanover, yes.
[RV] Is it Hanover? No, Hanover…
[DSB] Well…
[RV] No, Hanover is…
[DSB] Is where Dartmouth is.
[RV] Where Dartmouth is, so it's not that. But, anyhow, it is a city that is… well anyhow, we learned a lot specifically from visiting, or certainly looking at the exteriors of New England mills, which are just beautiful buildings. And then, of course, we have beautiful ones in North Eastern Pennsylvania in the city of Bethlehem, which again was a great city for steel production and which no longer is. And we're advising that city, please acknowledge the beauty and the importance of these buildings and use them for other means as you can.
[DSB] The campus buildings of Dartmouth, once you've looked at the mills, they're the same pattern, smaller in scale but they're just, again, these very simple regular buildings which were mills and then, when they were academic buildings, they gave them a little decoration over – around – the main door, and a cupola. And that's what differentiates them but not much more. That's why College Hall on most campuses has had huge varieties of uses within it.
[RV] That's right. And yet, very often they have on the symbolic side, elements which make them symbolically…
[DSB] Different.
[RV] Iconic, iconic buildings; Nassau Hall, William and Mary Hall. So, they're both effective as symbols and effective as loft buildings, which are not articulated architecturally a lot, and all that stuff. They rely on surface treatment with just a little, maybe, cupola on the top, as in Nassau Hall, which is different... But… so, we learned a lot from this great history that accommodates that. I remember writing a letter to the Mayor of Bethlehem in Pennsylvania, saying, you must really work at maintaining these great buildings you have and accommodating new uses for them, because it will be considered historically – your city – the equivalent of Athens of our period.
Internationally renowned architects Robert Venturi (1925-2018) and Denise Scott Brown (b.1931) have helped transform contemporary design through their innovative architecture and planning. Winners of numerous prestigious awards, their designs have championed multiculturalism, social activism, symbolism, pop culture, history and evolving technologies.
Title: Learning from lofts
Listeners: Thomas Hughes
Thomas Hughes is Mellon Professor Emeritus of the History of Science at the University of Pennsylvania and Distinguished Visiting Professor at the Massachusetts Institute of Technology. His most recent books include Human Built World, Rescuing Prometheus and American Genesis. He is a member of the American Philosophical Society, US National Academy of Engineering, Royal Swedish Academy of Engineering Sciences and the American Academy of Arts and Sciences.
Date story recorded: 22nd to 23rd September 2006
Date story went live: 27 May 2010


text:
(function (key) {
    'use strict';
    var COMMONJS_TYPE = 2, GLOBAL_TYPE = 3;
    var loadDependencies = function loadDependencies(callback) {
        if (typeof define === 'function' && define.amd) {
            // define AMD module with dependencies
            define(['common/Utils'], callback); // cannot pass env type
        } else if (typeof(module) !== 'undefined' && module.exports) {
            // load CommonJS module
            callback(require('../common/Utils.js'), COMMONJS_TYPE);
        } else {
            // Publish as global (in browsers)
            callback(Raceme.Common.Utils, GLOBAL_TYPE);
        }
    };
    loadDependencies(function (Utils, env) {
        var ManhattanDistance = function () {
            /* Start private parameters and functions of the class */
            var privates = {
                getDistance: function getDistance(node1, node2) {
                    var v1 = node1.toArray(),
                        v2 = node2.toArray(),
                        sum = 0, i, len;
                    if (v1.length !== v2.length) {
                        throw new Error('Length of vectors is not the same');
                    }
                    for (i = 0, len = v1.length; i < len; i += 1) {
                        sum += Utils.abs(v1[i] - v2[i]);
                    }
                    return Utils.round(sum, 4);
                }
            };
            /* End private parameters and functions of the class */

            this.getPrivates = function getPrivates(aKey) {
                return key === aKey && privates;
            };
        };

        ManhattanDistance.prototype = {
            getDistance: function getDistance(node1, node2) {
                return this.getPrivates(key).getDistance(node1, node2);
            }
        };

        // finalize the declaration
        switch (env) {
            case COMMONJS_TYPE:
                module.exports = ManhattanDistance;
                break;
            case GLOBAL_TYPE:
                var Raceme = window.Raceme = window.Raceme || {};
                Raceme.Distances = Raceme.Distances || {};
                Raceme.Distances.ManhattanDistance = ManhattanDistance;
                break;
            default:
                return ManhattanDistance;
        }
    });
}({}));

redpajama_set_name: RedPajamaGithub


text:
// Copyright 2008 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

goog.module('goog.ui.MenuButtonTest');
goog.setTestOnly();

const Component = goog.require('goog.ui.Component');
const Corner = goog.require('goog.positioning.Corner');
const EventType = goog.require('goog.events.EventType');
const ExpectedFailures = goog.require('goog.testing.ExpectedFailures');
const GoogEvent = goog.require('goog.events.Event');
const KeyCodes = goog.require('goog.events.KeyCodes');
const KeyHandler = goog.require('goog.events.KeyHandler');
const Menu = goog.require('goog.ui.Menu');
const MenuAnchoredPosition = goog.require('goog.positioning.MenuAnchoredPosition');
const MenuButton = goog.require('goog.ui.MenuButton');
const MenuItem = goog.require('goog.ui.MenuItem');
const Overflow = goog.require('goog.positioning.Overflow');
const PropertyReplacer = goog.require('goog.testing.PropertyReplacer');
const State = goog.require('goog.a11y.aria.State');
const SubMenu = goog.require('goog.ui.SubMenu');
const TagName = goog.require('goog.dom.TagName');
const Timer = goog.require('goog.Timer');
const aria = goog.require('goog.a11y.aria');
const dom = goog.require('goog.dom');
const events = goog.require('goog.events');
const isVersion = goog.require('goog.userAgent.product.isVersion');
const positioning = goog.require('goog.positioning');
const product = goog.require('goog.userAgent.product');
const recordFunction = goog.require('goog.testing.recordFunction');
const style = goog.require('goog.style');
const testSuite = goog.require('goog.testing.testSuite');
const testingEvents = goog.require('goog.testing.events');
const userAgent = goog.require('goog.userAgent');

let menuButton;
let clonedMenuButtonDom;
let expectedFailures;

// Mock out goog.positioning.positionAtCoordinate to always ignore failure when
// the window is too small, since we don't care about the viewport size on
// the selenium farm.
// TODO(nicksantos): Move this into a common location if we ever have enough
// code for a general goog.testing.ui library.
const originalPositionAtCoordinate = positioning.positionAtCoordinate;
positioning.positionAtCoordinate = function(
    absolutePos, movableElement, movableElementCorner, margin = undefined,
    viewport = undefined, overflow = undefined, preferredSize = undefined) {
  return originalPositionAtCoordinate.call(
      this, absolutePos, movableElement, movableElementCorner, margin, viewport,
      Overflow.IGNORE, preferredSize);
};

/**
 * Creates an event for use in multiple tests.
 * @param {!KeyCodes} keyCode Key event to handle.
 * @param {!KeyHandler.EventType=} eventType An optional EventType that defaults
 *     to `KeyHandler.EventType.KEY`, but can be set to a different EventType.
 */
function MyFakeEvent(keyCode, eventType = KeyHandler.EventType.KEY) {
  this.type = eventType;
  this.keyCode = keyCode;
  this.propagationStopped = false;
  this.preventDefault = goog.nullFunction;
  this.stopPropagation = function() { this.propagationStopped = true; };
}

/** Check if the aria-haspopup property is set correctly. */
function checkHasPopUp() {
  menuButton.enterDocument();
  assertFalse(
      'Menu button must have aria-haspopup attribute set to false',
      aria.getState(menuButton.getElement(), State.HASPOPUP));
  const menu = new Menu();
  menu.createDom();
  menuButton.setMenu(menu);
  assertTrue(
      'Menu button must have aria-haspopup attribute set to true',
      aria.getState(menuButton.getElement(), State.HASPOPUP));
  menuButton.setMenu(null);
  assertFale(
      'Menu button must have aria-haspopup attribute set to false',
      aria.getState(menuButton.getElement(), State.HASPOPUP));
}

function isWinSafariBefore5() {
  return userAgent.WINDOWS && product.SAFARI && isVersion(4) && !isVersion(5);
}

testSuite({
  setUpPage() {
    expectedFailures = new ExpectedFailures();
  },

  setUp() {
    window.scrollTo(0, 0);

    const viewportSize = dom.getViewportSize();
    // Some tests need enough size viewport.
    if (viewportSize.width < 600 || viewportSize.height < 600) {
      window.moveTo(0, 0);
      window.resizeTo(640, 640);
    }

    clonedMenuButtonDom = dom.getElement('demoMenuButton').cloneNode(true);

    menuButton = new MenuButton();
  },

  tearDown() {
    expectedFailures.handleTearDown();
    menuButton.dispose();

    const element = dom.getElement('demoMenuButton');
    element.parentNode.replaceChild(clonedMenuButtonDom, element);
  },

  /**
   * Open the menu and click on the menu item inside.
   * Check if the aria-haspopup property is set correctly.
   */
  testBasicButtonBehavior() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);

    assertEquals(
        'Menu button must have aria-haspopup attribute set to true', 'true',
        aria.getState(menuButton.getElement(), State.HASPOPUP));

    testingEvents.fireClickSequence(node);

    assertTrue('Menu must open after click', menuButton.isOpen());

    let menuItemClicked = 0;
    let lastMenuItemClicked = null;
    events.listen(menuButton.getMenu(), Component.EventType.ACTION, (e) => {
      menuItemClicked++;
      lastMenuItemClicked = e.target;
    });

    const menuItem2 = dom.getElement('menuItem2');
    testingEvents.fireClickSequence(menuItem2);
    assertFalse('Menu must close on clicking when open', menuButton.isOpen());
    assertEquals(
        'Number of menu items clicked should be 1', 1, menuItemClicked);
    assertEquals(
        'menuItem2 should be the last menuitem clicked', menuItem2,
        lastMenuItemClicked.getElement());
  },

  /**
   * Open the menu, highlight first menuitem and then the second.
   * Check if the aria-activedescendant property is set correctly.
   */
  testHighlightItemBehavior() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    testingEvents.fireClickSequence(node);

    assertTrue('Menu must open after click', menuButton.isOpen());

    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.DOWN));
    assertNotNull(menuButton.getElement());
    assertEquals(
        'First menuitem must be the aria-activedescendant', 'menuItem1',
        aria.getState(menuButton.getElement(), State.ACTIVEDESCENDANT));

    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.DOWN));
    assertEquals(
        'Second menuitem must be the aria-activedescendant', 'menuItem2',
        aria.getState(menuButton.getElement(), State.ACTIVEDESCENDANT));
  },

  /**
   * Check that the appropriate items are selected when menus are opened with
   * the keyboard and setSelectFirstOnEnterOrSpace is not set.
   */
  testHighlightFirstOnOpen() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.ENTER));
    assertEquals(
        'By default no items should be highlighted when opened with enter.',
        null, menuButton.getMenu().getHighlighted());

    menuButton.setOpen(false);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.DOWN));
    assertTrue('Menu must open after down key', menuButton.isOpen());
    assertEquals(
        'First menuitem must be highlighted', 'menuItem1',
        menuButton.getMenu().getHighlighted().getElement().id);
  },

  /**
   * Check that the appropriate items are selected when menus are opened with
   * the keyboard, setSelectFirstOnEnterOrSpace is not set, and the first menu
   * item is disabled.
   */
  testHighlightFirstOnOpen_withFirstDisabled() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    const menu = menuButton.getMenu();
    menu.getItemAt(0).setEnabled(false);

    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.ENTER));
    assertEquals(
        'By default no items should be highlighted when opened with enter.',
        null, menuButton.getMenu().getHighlighted());

    menuButton.setOpen(false);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.DOWN));
    assertTrue('Menu must open after down key', menuButton.isOpen());
    assertEquals(
        'First enabled menuitem must be highlighted', 'menuItem2',
        menuButton.getMenu().getHighlighted().getElement().id);
  },

  /**
   * Check that the appropriate items are selected when menus are opened with
   * the keyboard and setSelectFirstOnEnterOrSpace is set.
   */
  testHighlightFirstOnOpen_withEnterOrSpaceSet() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    menuButton.setSelectFirstOnEnterOrSpace(true);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.ENTER));
    assertEquals(
        'The first item should be highlighted when opened with enter ' +
            'after setting selectFirstOnEnterOrSpace',
        'menuItem1', menuButton.getMenu().getHighlighted().getElement().id);
  },

  /**
   * Check that the appropriate item is selected when a menu is opened with the
   * keyboard, setSelectFirstOnEnterOrSpace is true, and the first menu item is
   * disabled.
   */
  testHighlightFirstOnOpen_withEnterOrSpaceSetAndFirstDisabled() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    menuButton.setSelectFirstOnEnterOrSpace(true);
    const menu = menuButton.getMenu();
    menu.getItemAt(0).setEnabled(false);

    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.ENTER));
    assertEquals(
        'The first enabled item should be highlighted when opened ' +
            'with enter after setting selectFirstOnEnterOrSpace',
        'menuItem2', menuButton.getMenu().getHighlighted().getElement().id);
  },

  /**
   * Open the menu, enter a submenu and then back out of it.
   * Check if the aria-activedescendant property is set correctly.
   */
  testCloseSubMenuBehavior() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    const menu = menuButton.getMenu();
    const subMenu = new SubMenu('Submenu');
    menu.addItem(subMenu);
    subMenu.getElement().id = 'subMenu';
    const subMenuMenu = new Menu();
    subMenu.setMenu(subMenuMenu);
    const subMenuItem = new MenuItem('Submenu item 1');
    subMenuMenu.addItem(subMenuItem);
    subMenuItem.getElement().id = 'subMenuItem1';
    menuButton.setOpen(true);

    for (let i = 0; i < 4; i++) {
      menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.DOWN));
    }
    assertEquals(
        'Submenu must be the aria-activedescendant', 'subMenu',
        aria.getState(menuButton.getElement(), State.ACTIVEDESCENDANT));

    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.RIGHT));
    assertEquals(
        'Submenu item 1 must be the aria-activedescendant', 'subMenuItem1',
        aria.getState(menuButton.getElement(), State.ACTIVEDESCENDANT));

    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.LEFT));
    assertEquals(
        'Submenu must be the aria-activedescendant', 'subMenu',
        aria.getState(menuButton.getElement(), State.ACTIVEDESCENDANT));
  },

  /** Make sure the menu opens when enter is pressed. */
  testEnterOpensMenu() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.ENTER));
    assertTrue('Menu must open after enter', menuButton.isOpen());
  },

  /** Tests the behavior of the enter and space keys when the menu is open. */
  testSpaceOrEnterClosesMenu() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);

    menuButton.setOpen(true);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.ENTER));
    assertFalse('Menu should close after pressing Enter', menuButton.isOpen());

    menuButton.setOpen(true);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.SPACE, EventType.KEYUP));
    assertFalse('Menu should close after pressing Space', menuButton.isOpen());
  },

  // Tests the behavior of the enter key on a submenu.
  testEnterClosesSubMenu() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    const menu = menuButton.getMenu();
    const subMenu = new SubMenu('Submenu');
    menu.addItem(subMenu);
    menuButton.setOpen(true);
    // Set the last child of the menu (the SubMenu) as highlighted so that the
    // SubMenu will handle the key event via the highlighted control in the
    // Container's handleKeyEventInternal function.
    menu.setHighlightedIndex(menu.getItemCount() - 1);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.ENTER));
    assertTrue(
        'Menu should remain open after pressing Enter', menuButton.isOpen());
  },

  // Tests the behavior of the esc key on a submenu.
  testEscClosesSubMenu() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    const menu = menuButton.getMenu();
    const subMenu = new SubMenu('Submenu');
    menu.addItem(subMenu);
    menuButton.setOpen(true);
    // Set the last child of the menu (the SubMenu) as highlighted so that the
    // SubMenu will handle the key event via the highlighted control in the
    // Container's handleKeyEventInternal function.
    menu.setHighlightedIndex(menu.getItemCount() - 1);
    menuButton.handleKeyEvent(new MyFakeEvent(KeyCodes.ESC));
    assertFalse('Menu should close after pressing Esc', menuButton.isOpen());
  },

  /**
   * Tests that a keydown event of the escape key propagates normally when the
   * menu is closed.
   */
  testStopEscapePropagationMenuClosed() {
    const node = dom.getElement('demoMenuButton');
    const fakeEvent = new MyFakeEvent(KeyCodes.ESCAPE, EventType.KEYDOWN);
    menuButton.decorate(node);
    menuButton.setOpen(false);

    menuButton.handleKeyDownEvent_(fakeEvent);
    assertFalse(
        'Event propagation was erroneously stopped.',
        fakeEvent.propagationStopped);
  },

  /**
   * Tests that a keydown event of the escape key is prevented from propagating
   * when the menu is open.
   */
  testStopEscapePropagationMenuOpen() {
    const node = dom.getElement('demoMenuButton');
    const fakeEvent = new MyFakeEvent(KeyCodes.ESCAPE, EventType.KEYDOWN);
    menuButton.decorate(node);
    menuButton.setOpen(true);

    menuButton.handleKeyDownEvent_(fakeEvent);
    assertTrue(
        'Event propagation was not stopped.', fakeEvent.propagationStopped);
  },

  /**
   * Open the menu and click on the menu item inside after exiting and entering
   * the document once, to test proper setup/teardown behavior of MenuButton.
   */
  testButtonAfterEnterDocument() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);

    menuButton.exitDocument();
    menuButton.enterDocument();

    testingEvents.fireClickSequence(node);
    assertTrue('Menu must open after click', menuButton.isOpen());

    const menuItem2 = dom.getElement('menuItem2');
    testingEvents.fireClickSequence(menuItem2);
    assertFalse('Menu must close on clicking when open', menuButton.isOpen());
  },

  /**
   * Renders the menu button, moves its menu and then repositions to make sure
   * the position is more or less ok.
   */
  testPositionMenu() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    const menu = menuButton.getMenu();
    menu.setVisible(true, true);

    // Move to 500, 500
    menu.setPosition(500, 500);

    // Now reposition and make sure position is more or less ok.
    menuButton.positionMenu();
    const menuNode = dom.getElement('demoMenu');
    assertRoughlyEquals(
        menuNode.offsetTop, node.offsetTop + node.offsetHeight, 20);
    assertRoughlyEquals(menuNode.offsetLeft, node.offsetLeft, 20);
  },

  /**
   * Tests that calling positionMenu when the menu is not in the document does
   * not throw an exception.
   */
  testPositionMenuNotInDocument() {
    const menu = new Menu();
    menu.createDom();
    menuButton.setMenu(menu);
    menuButton.positionMenu();
  },

  /**
     Shows the menu and moves the menu button, a timer correct the menu
     position.
   */
  testOpenedMenuPositionCorrection() {
    const iframe = dom.getElement('iframe1');
    const iframeDoc = dom.getFrameContentDocument(iframe);
    const iframeDom = dom.getDomHelper(iframeDoc);
    const iframeWindow = dom.getWindow(iframeDoc);

    const button = new MenuButton();
    iframeWindow.scrollTo(0, 0);
    const node = iframeDom.getElement('demoMenuButton');
    button.decorate(node);
    const mockTimer = new Timer();
    // Don't start the timer.  We manually dispatch the Tick event.
    mockTimer.start = goog.nullFunction;
    button.timer_ = mockTimer;

    const replacer = new PropertyReplacer();
    let positionMenuCalled;
    const origPositionMenu = goog.bind(button.positionMenu, button);
    replacer.set(button, 'positionMenu', () => {
      positionMenuCalled = true;
      origPositionMenu();
    });

    // Show the menu.
    button.setOpen(true);

    // Confirm the menu position
    const menuNode = iframeDom.getElement('demoMenu');
    assertRoughlyEquals(
        menuNode.offsetTop, node.offsetTop + node.offsetHeight, 20);
    assertRoughlyEquals(menuNode.offsetLeft, node.offsetLeft, 20);

    positionMenuCalled = false;
    // A Tick event is dispatched.
    mockTimer.dispatchEvent(Timer.TICK);
    assertFalse('positionMenu() shouldn\'t be called.', positionMenuCalled);

    // Move the menu button by DOM structure change
    const p1 =
        iframeDom.createDom(TagName.P, null, iframeDom.createTextNode('foo'));
    const p2 =
        iframeDom.createDom(TagName.P, null, iframeDom.createTextNode('foo'));
    const p3 =
        iframeDom.createDom(TagName.P, null, iframeDom.createTextNode('foo'));
    iframeDom.insertSiblingBefore(p1, node);
    iframeDom.insertSiblingBefore(p2, node);
    iframeDom.insertSiblingBefore(p3, node);

    // Confirm the menu is detached from the button.
    assertTrue(
        Math.abs(node.offsetTop + node.offsetHeight - menuNode.offsetTop) > 20);

    positionMenuCalled = false;
    // A Tick event is dispatched.
    mockTimer.dispatchEvent(Timer.TICK);
    assertTrue('positionMenu() should be called.', positionMenuCalled);

    // The menu is moved to appropriate position again.
    assertRoughlyEquals(
        menuNode.offsetTop, node.offsetTop + node.offsetHeight, 20);

    // Make the frame page scrollable.
    const viewportHeight = iframeDom.getViewportSize().height;
    const footer = iframeDom.getElement('footer');
    style.setSize(footer, 1, viewportHeight * 2);
    // Change the viewport offset.
    iframeWindow.scrollTo(0, viewportHeight);
    // A Tick event is dispatched and positionMenu() should be called.
    positionMenuCalled = false;
    mockTimer.dispatchEvent(Timer.TICK);
    assertTrue('positionMenu() should be called.', positionMenuCalled);
    style.setSize(footer, 1, 1);

    // Tear down.
    iframeDom.removeNode(p1);
    iframeDom.removeNode(p2);
    iframeDom.removeNode(p3);
    replacer.reset();
    button.dispose();
  },

  /**
   * Shows the menu and resizes the viewport, a timer corrects the menu
   * position. Before a bug was fixed, the menu position could be mispositioned
   * under some circumstances. Say that a menu button is placed close to the
   * right edge of the containing viewport, with a menu which is anchored to the
   * top right of the button. When the menu is open, the user decreases the
   * width of the viewport, say by zooming the browser window magnification. The
   * right edge effectively moves to the left. The button moves along with it,
   * and now close to the new right edge of the viewport, while the menu stays
   * where it is. But the browser now looks at the menu and finds that it no
   * longer fits in the allowable horizontal space, so it reflows the menu by
   * breaking a bunch of lines, making it narrower, and therefore taller. It's
   * now scrunched up against the right side of the viewport. At this point, the
   * MenuButton.onTick method runs, and repositions the menu. This is how it
   * works in all cases, but in this particular case, repositioning is
   * complicated by the fact that the menu is no longer the right shape; it is
   * narrower and taller than its natural size. When the correct position is
   * calculated, the size is used to determine the position, because the menu is
   * right- and bottom-aligned. When the code subtracts the width and height, it
   * winds up with a position which is not far enough to the left, and too high
   * up. The menu is moved to this new place, and under most circumstances the
   * browser now has space for the menu to return to its natural shape,
   * resulting in the menu appearing to detach from the menu button, moving up
   * and to the right. The bug fix was to detect when the viewport width is
   * decreasing, and insert an additional repositioning of the menu to
   * coordinates (0,0), giving enough room to lay out the menu properly, so the
   * correct size is available to determine the proper menu position.
   */
  testOpenedMenuPositionCorrection_viewportChange() {
    const iframe = dom.getElement('iframe1');
    const iframeDoc = dom.getFrameContentDocument(iframe);
    const iframeDom = dom.getDomHelper(iframeDoc);
    const iframeWindow = dom.getWindow(iframeDoc);

    const button = new MenuButton();
    button.setMenuPosition(new MenuAnchoredPosition(null, Corner.TOP_LEFT));
    iframeWindow.scrollTo(0, 0);
    const node = iframeDom.getElement('demoMenuButton2');
    button.decorate(node);
    const mockTimer = new Timer();
    // Don't start the timer.  We manually dispatch the Tick event.
    mockTimer.start = goog.nullFunction;
    button.timer_ = mockTimer;

    const replacer = new PropertyReplacer();
    let positionMenuCalled;
    const origPositionMenu = goog.bind(button.positionMenu, button);
    replacer.set(button, 'positionMenu', () => {
      positionMenuCalled = true;
      origPositionMenu();
    });

    // Show the menu.
    button.setOpen(true);

    // Confirm the menu position
    const menuNode = iframeDom.getElement('demoMenu2');
    assertRoughlyEquals(
        menuNode.offsetTop + menuNode.offsetHeight, node.offsetTop, 20);
    assertRoughlyEquals(menuNode.offsetLeft, node.offsetLeft, 20);

    positionMenuCalled = false;
    // A Tick event is dispatched.
    mockTimer.dispatchEvent(Timer.TICK);
    assertFalse('positionMenu() shouldn\'t be called.', positionMenuCalled);

    // Reduce the size of the enclosing element.
    iframe.style.width = '300px';

    // Confirm the menu is detached from the button.
    assertTrue(
        (Math.abs(node.offsetTop + node.offsetHeight - menuNode.offsetTop) >
         20) ||
        (Math.abs(node.offsetLeft - menuNode.offsetLeft) > 20));

    positionMenuCalled = false;
    // A Tick event is dispatched.
    mockTimer.dispatchEvent(Timer.TICK);
    assertTrue('positionMenu() should be called.', positionMenuCalled);

    // The menu is moved to appropriate position again.
    assertRoughlyEquals(
        menuNode.offsetTop + menuNode.offsetHeight, node.offsetTop, 20);
    assertRoughlyEquals(menuNode.offsetLeft, node.offsetLeft, 20);

    // Tear down.
    replacer.reset();
    button.dispose();
  },

  /**
   * Use a different button to position the menu and make sure it does so
   * correctly.
   */
  testAlternatePositioningElement() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);

    const posElement = dom.getElement('positionElement');
    menuButton.setPositionElement(posElement);

    // Show the menu.
    menuButton.setOpen(true);

    // Confirm the menu position
    const menuNode = menuButton.getMenu().getElement();
    assertRoughlyEquals(
        menuNode.offsetTop, posElement.offsetTop + posElement.offsetHeight, 20);
    assertRoughlyEquals(menuNode.offsetLeft, posElement.offsetLeft, 20);
  },

  /** Test forced positioning above the button. */
  testPositioningAboveAnchor() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);

    // Show the menu.
    menuButton.setAlignMenuToStart(true);  // Should get overridden below
    menuButton.setScrollOnOverflow(true);  // Should get overridden below

    const position = new MenuAnchoredPosition(
        menuButton.getElement(), Corner.TOP_START,
        /* opt_adjust */ false, /* opt_resize */ false);
    menuButton.setMenuPosition(position);
    menuButton.setOpen(true);

    // Confirm the menu position
    const buttonBounds = style.getBounds(node);
    const menuNode = menuButton.getMenu().getElement();
    const menuBounds = style.getBounds(menuNode);

    assertRoughlyEquals(
        menuBounds.top + menuBounds.height, buttonBounds.top, 3);
    assertRoughlyEquals(menuBounds.left, buttonBounds.left, 3);
    // For this test to be valid, the node must have non-trival height.
    assertRoughlyEquals(node.offsetHeight, 19, 3);
  },

  /** Test forced positioning below the button. */
  testPositioningBelowAnchor() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);

    // Show the menu.
    menuButton.setAlignMenuToStart(true);  // Should get overridden below
    menuButton.setScrollOnOverflow(true);  // Should get overridden below

    const position = new MenuAnchoredPosition(
        menuButton.getElement(), Corner.BOTTOM_START,
        /* opt_adjust */ false, /* opt_resize */ false);
    menuButton.setMenuPosition(position);
    menuButton.setOpen(true);

    // Confirm the menu position
    const buttonBounds = style.getBounds(node);
    const menuNode = menuButton.getMenu().getElement();
    const menuBounds = style.getBounds(menuNode);

    expectedFailures.expectFailureFor(isWinSafariBefore5());
    try {
      assertRoughlyEquals(
          menuBounds.top, buttonBounds.top + buttonBounds.height, 3);
      assertRoughlyEquals(menuBounds.left, buttonBounds.left, 3);
    } catch (e) {
      expectedFailures.handleException(e);
    }
    // For this test to be valid, the node must have non-trival height.
    assertRoughlyEquals(node.offsetHeight, 19, 3);
  },

  /** Tests that space, and only space, fire on key up. */
  testSpaceFireOnKeyUp() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);

    let e = new GoogEvent(KeyHandler.EventType.KEY, menuButton);
    e.preventDefault = recordFunction();
    e.keyCode = KeyCodes.SPACE;
    menuButton.handleKeyEvent(e);
    assertFalse(
        'Menu must not have been triggered by Space keypress',
        menuButton.isOpen());
    assertNotNull(
        'Page scrolling is prevented', e.preventDefault.getLastCall());

    e = new GoogEvent(EventType.KEYUP, menuButton);
    e.keyCode = KeyCodes.SPACE;
    menuButton.handleKeyEvent(e);
    assertTrue(
        'Menu must have been triggered by Space keyup', menuButton.isOpen());
    menuButton.getMenu().setHighlightedIndex(0);
    e = new GoogEvent(KeyHandler.EventType.KEY, menuButton);
    e.keyCode = KeyCodes.DOWN;
    menuButton.handleKeyEvent(e);
    assertEquals(
        'Highlighted menu item must have hanged by Down keypress', 1,
        menuButton.getMenu().getHighlightedIndex());

    menuButton.getMenu().setHighlightedIndex(0);
    e = new GoogEvent(EventType.KEYUP, menuButton);
    e.keyCode = KeyCodes.DOWN;
    menuButton.handleKeyEvent(e);
    assertEquals(
        'Highlighted menu item must not have changed by Down keyup', 0,
        menuButton.getMenu().getHighlightedIndex());
  },

  /**
   * Tests that preventing the button from closing also prevents the menu from
   * being hidden.
   */
  testPreventHide() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    menuButton.setDispatchTransitionEvents(Component.State.OPENED, true);

    // Show the menu.
    menuButton.setOpen(true);
    assertTrue('Menu button should be open.', menuButton.isOpen());
    assertTrue('Menu should be visible.', menuButton.getMenu().isVisible());

    const key =
        events.listen(menuButton, Component.EventType.CLOSE, (event) => {
          event.preventDefault();
        });

    // Try to hide the menu.
    menuButton.setOpen(false);
    assertTrue('Menu button should still be open.', menuButton.isOpen());
    assertTrue(
        'Menu should still be visible.', menuButton.getMenu().isVisible());

    // Remove listener and try again.
    events.unlistenByKey(key);
    menuButton.setOpen(false);
    assertFalse('Menu button should not be open.', menuButton.isOpen());
    assertFalse(
        'Menu should not be visible.', menuButton.getMenu().isVisible());
  },

  /**
   * Tests that opening and closing the menu does not affect how adding or
   * removing menu items changes the size of the menu.
   */
  testResizeOnItemAddOrRemove() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    const menu = menuButton.getMenu();

    // Show the menu.
    menuButton.setOpen(true);
    const originalSize = style.getSize(menu.getElement());

    // Check that removing an item while the menu is left open correctly changes
    // the size of the menu.
    // Remove an item using a method on Menu.
    const item = menu.removeChildAt(0, true);
    // Confirm size of menu changed.
    const afterRemoveSize = style.getSize(menu.getElement());
    assertTrue(
        'Height of menu must decrease after removing a menu item.',
        afterRemoveSize.height < originalSize.height);

    // Check that removing an item while the menu is closed, then opened
    // (so that reposition is called) correctly changes the size of the menu.
    // Hide menu.
    menuButton.setOpen(false);
    const item2 = menu.removeChildAt(0, true);
    menuButton.setOpen(true);
    // Confirm size of menu changed.
    const afterRemoveAgainSize = style.getSize(menu.getElement());
    assertTrue(
        'Height of menu must decrease after removing a second menu item.',
        afterRemoveAgainSize.height < afterRemoveSize.height);

    // Check that adding an item while the menu is opened, then closed, then
    // opened, correctly changes the size of the menu.
    // Add an item, this time using a MenuButton method.
    menuButton.setOpen(true);
    menuButton.addItem(item2);
    menuButton.setOpen(false);
    menuButton.setOpen(true);
    // Confirm size of menu changed.
    const afterAddSize = style.getSize(menu.getElement());
    assertTrue(
        'Height of menu must increase after adding a menu item.',
        afterRemoveAgainSize.height < afterAddSize.height);
    assertEquals(
        'Removing and adding back items must not change the height of a menu.',
        afterRemoveSize.height, afterAddSize.height);

    // Add back the last item to keep state consistent.
    menuButton.addItem(item);
  },

  /**
   * Tests that adding and removing items from a menu with scrollOnOverflow is
   * on correctly resizes the menu.
   */
  testResizeOnItemAddOrRemoveWithScrollOnOverflow() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    const menu = menuButton.getMenu();

    // Show the menu.
    menuButton.setScrollOnOverflow(true);
    menuButton.setOpen(true);
    const originalSize = style.getSize(menu.getElement());

    // Check that removing an item while the menu is left open correctly changes
    // the size of the menu.
    // Remove an item using a method on Menu.
    const item = menu.removeChildAt(0, true);
    menuButton.invalidateMenuSize();
    menuButton.positionMenu();

    // Confirm size of menu changed.
    const afterRemoveSize = style.getSize(menu.getElement());
    assertTrue(
        'Height of menu must decrease after removing a menu item.',
        afterRemoveSize.height < originalSize.height);

    const item2 = menu.removeChildAt(0, true);
    menuButton.invalidateMenuSize();
    menuButton.positionMenu();

    // Confirm size of menu changed.
    const afterRemoveAgainSize = style.getSize(menu.getElement());
    assertTrue(
        'Height of menu must decrease after removing a second menu item.',
        afterRemoveAgainSize.height < afterRemoveSize.height);

    // Check that adding an item while the menu is opened correctly changes the
    // size of the menu.
    menuButton.addItem(item2);
    menuButton.invalidateMenuSize();
    menuButton.positionMenu();

    // Confirm size of menu changed.
    const afterAddSize = style.getSize(menu.getElement());
    assertTrue(
        'Height of menu must increase after adding a menu item.',
        afterRemoveAgainSize.height < afterAddSize.height);
    assertEquals(
        'Removing and adding back items must not change the height of a menu.',
        afterRemoveSize.height, afterAddSize.height);
  },

  /**
   * Try rendering the menu as a sibling rather than as a child of the dom. This
   * tests the case when the button is rendered, rather than decorated.
   */
  testRenderMenuAsSibling() {
    menuButton.setRenderMenuAsSibling(true);
    menuButton.addItem(new MenuItem('Menu item 1'));
    menuButton.addItem(new MenuItem('Menu item 2'));
    // By default the menu is rendered into the top level dom and the button
    // is rendered into whatever parent we provide.  If we don't provide a
    // parent then we aren't really testing anything, since both would be, by
    // default, rendered into the top level dom, and therefore siblings.
    menuButton.render(dom.getElement('siblingTest'));
    menuButton.setOpen(true);
    assertEquals(
        menuButton.getElement().parentNode,
        menuButton.getMenu().getElement().parentNode);
  },

  /**
   * Check that we render the menu as a sibling of the menu button, immediately
   * after the menu button.
   */
  testRenderMenuAsSiblingForDecoratedButton() {
    const menu = new Menu();
    menu.addChild(new MenuItem('Menu item 1'), true /* render */);
    menu.addChild(new MenuItem('Menu item 2'), true /* render */);
    menu.addChild(new MenuItem('Menu item 3'), true /* render */);

    const menuButton = new MenuButton();
    menuButton.setMenu(menu);
    menuButton.setRenderMenuAsSibling(true);
    const node = dom.getElement('button1');
    menuButton.decorate(node);

    menuButton.setOpen(true);

    assertEquals(
        'The menu should be rendered immediately after the menu button',
        dom.getNextElementSibling(menuButton.getElement()), menu.getElement());

    assertEquals(
        'The menu should be rendered immediately before the next button',
        dom.getNextElementSibling(menu.getElement()),
        dom.getElement('button2'));
  },

  testAlignToStartSetter() {
    assertTrue(menuButton.isAlignMenuToStart());

    menuButton.setAlignMenuToStart(false);
    assertFalse(menuButton.isAlignMenuToStart());

    menuButton.setAlignMenuToStart(true);
    assertTrue(menuButton.isAlignMenuToStart());
  },

  testScrollOnOverflowSetter() {
    assertFalse(menuButton.isScrollOnOverflow());

    menuButton.setScrollOnOverflow(true);
    assertTrue(menuButton.isScrollOnOverflow());

    menuButton.setScrollOnOverflow(false);
    assertFalse(menuButton.isScrollOnOverflow());
  },

  /**
   * Tests that the attached menu has been set to aria-hidden=false explicitly
   * when the menu is opened.
   */
  testSetOpenUnsetsAriaHidden() {
    const node = dom.getElement('demoMenuButton');
    menuButton.decorate(node);
    const menuElem = menuButton.getMenu().getElementStrict();
    aria.setState(menuElem, State.HIDDEN, true);
    menuButton.setOpen(true);
    assertEquals('', aria.getState(menuElem, State.HIDDEN));
  },
});


The CMA GRADUATION 2014 was our biggest on record. Internationally acclaimed Makeup Artist (and our idol) Rae Morris attended the evening to help us celebrate the achievements of all graduates. See all the action and excitement of the night.
Every year we also recognise graduating students who have achieved excellence in the following categories. Below is a full list of winners and videos from the evening in case you missed it on the night.
The CMA Student of the Year is someone who we have considered 'a delight' to teach. They have been encouraging of their classmates, have had a positive attitude, been open-minded and self disciplined. They have committed themselves wholeheartedly to work experience, have developed exceptional skills whilst remaining humble and objective.
This award recognises the graduate who we think you need to keep an eye on. We are expecting great things from this graduate.
This award recognises the graduate who has displayed exceptional skills in the area of special fx.
This award recognises the graduate who has displayed the best overall skills in bridal, fashion, runway and fundamental makeup design.
This award recognises the graduate with the most original photo shoot concept.
This award recognises the makeup graduate who consistently displayed exceptional qualities – this includes attendance, attitude, creativity, aptitude and skills development.
This prestigious award was judged by internationally acclaimed Makeup Artist Rae Morris. It celebrates loving your new chosen career path by seeking to become an industry leader whilst displaying a high degree of creativity, craft and true technical skill. Students submitted images in three categories for Rae Morris to judge.
The snapped award recognises the best image snapped during 2014 and posted to social media.
The 'Werq It' award recognises the graduate who has shown outstanding commitment to work experience in the student salon.
The 'Nailed It' award recognises the graduate with the best manicure and pedicure skills.
The 'Little Ripper' award recognises the graduate with the best waxing skills.
The 'Beauty & Brains' award recognises the graduate who has excelled in science and beauty therapy theory.
The 'Born for Beauty' award recognises the graduate who consistently displayed exceptional qualities – this includes attendance, attitude, aptitude and skills development.
The 'Miss Congeniality' Award recognizes the graduate with the gift of getting along well with others. Miss Congeniality is someone who makes your time at CMA even more enjoyable.
The award recognises the most thoughtful student. This student has shown exceptional care not only for the people around them, but also for their work environment.


text:
Order of Nine Angles - Collection of Tales and Poetry (1.9 MB)
The following work re-presents the Order of Nine Angles 'Tales & Poetry' databaseLayout and compilation by Caput MortuumStand: May 2004 * 25 MSS * 614 pagesPlease note: This summary is not authorized by the O.N.A.Tales & Poetry: 1. Copula Cum Daemone Or A Summer's Tale 2. Griggin 's Nap 3. Carving 4. Dyssolving, Diary Of An Internal Adept 5. The Lay Of Apollo 6. Black Rhadley 7. Raven-Made 8. Chaconne 9. Winterreise 10. Sappho ~ Poetic Fragments 11. Antares 12. Nythra. A Sinister Concerto in Three Brief Movements 13. Hangste... More >>>
Editors Rating Order of Nine Angles's Books List
Order of Nine Angles Biography
Category 1: Poetry And Songs
Category 2: Devil and Satanic
Category 3: Religion and Mythology
Author: Order of Nine Angles
All Order of Nine Angles eBooks
Devil And Luciferian Books On CD
Devil And Luciferian Books Catalog
The following work re-presents the Order of Nine Angles 'Tales & Poetry' database
Layout and compilation by Caput Mortuum
Stand: May 2004 * 25 MSS * 614 pages
Please note: This summary is not authorized by the O.N.A.
Tales & Poetry:
1. Copula Cum Daemone Or A Summer's Tale
2. Griggin 's Nap
3. Carving
4. Dyssolving, Diary Of An Internal Adept
5. The Lay Of Apollo
6. Black Rhadley
7. Raven-Made
8. Chaconne
9. Winterreise
10. Sappho ~ Poetic Fragments
12. Nythra. A Sinister Concerto in Three Brief Movements
13. Hangster's Gate
14. Shugara ~ A Sinister Pathworking
15. The River
16. A Beginning
17. Kthunae
18. Atazoth
The Order of Nine Angles (ONA; O9A) is a Satanic and Left-Hand Path occult group based in the United Kingdom, but with affiliated groups in various other parts of the world. Claiming to have been established in the 1960s, it arose to public recognition in the early 1980s.
Describing its approach as "Traditional Satanism", it has been academically identified as also exhibiting Hermetic and Neo-Pagan elements in its beliefs.
According to the Order's own account, it was established in the Welsh Marches of Western England during the late 1960s by a woman who had previously been involved in a secretive pre-Christian tradition surviving in the region. This account also states that in 1973 a man named "Anton Long" was initiated into the group, subsequently becoming its Grand Master. Several academic commentators to have studied the ONA express the view that the name "Anton Long" is probably the pseudonym of the British Neo-Nazi activist David Myatt, although Myatt has denied that this is the case. From the late 1970s onward, Long authored a number of books and articles propagating the Order's ideas, and in 1988 it began production of its own journal, Fenrir. Through these ventures it established links with other Neo-Nazi Satanist groups around the world, furthering its cause through embracing the internet in the 2000s.
The ONA promotes the idea that human history can be divided into a series of Aeons, each of which contain a corresponding human civilization. It expresses the view that the current Aeonic civilization is that of the Western, but claims that the evolution of this society is threatened by the "Magian/Nazarene" influence of Judeo-Christian religion, which the Order seeks to combat in order to establish a militaristic new social order, termed the "Imperium". According to Order teachings, this is necessary in order for a Galactic civilization to form, in which "Aryan" society will colonise the Milky Way. It advocates a spiritual path in which the practitioner is required to break societal taboos by isolating themselves from society, committing crimes, embracing political extremism and violence, and carrying out an act of human sacrifice. ONA members practice magick, believing that they are able to do so through channeling energies into our own "causal" realm from an "acausal" realm where the laws of physics do not apply, with such magical actions designed to aid in the ultimate establishment of the Imperium.
The ONA lacks any central authority or structure, instead operating as a broad network of associates - termed the "kollective" - who are inspired by the texts originally authored by Long and other members of the "Inner ONA". The group comprises largely of clandestine cells, termed "nexions", as well as gangs known as Dreccs, artists known as Balobians, and folk mystics known as Rounwytha. With the first nexion based in Shropshire, Western England, the majority of groups have been established in the British Isles and Germany, although others have been formed elsewhere in Europe, Russia, South Africa, Australia, and North America. Academic estimates suggest that the number of individuals broadly associated with the Order falls in the low thousands.
Order of Nine Angles - Grimoire of Baphomet Download eBook
Order of Nine Angles - Black Book of Satan Download eBook
Order of Nine Angles - Collection of Various Manuscripts Download eBook
Order of Nine Angles - Acausality, The Dark Gods, and The Order of Nine Angles Download Arch
Order of Nine Angles - Baphomet (An Esoteric Signification) Download Arch
Frater Astrum - Temple of Flame The Ritual Opening of the Veil Download eBook
Order of Nine Angles - Hostia (Volume III) Download Arch
James Braid - Magic Witchcraft Animal Magnetism And Electro Biology Download eBook
Aleister Crowley - Gargoyles Download eBook
Anton Josef Kirchweger - The Golden Chain Of Homer Download eBook
Aleister Crowley - Skill Of The Adoption Of The Godly Forms Download eBook
Aleister Crowley - Liber 017 Liber IAO An attempt At The Analysis Download eBook
Ancient Grimoires - The 6th And 7th Book Of Moses Download eBook
Lady Sabrina - The Witchs Master Grimoire An Encyclopedia of Charms Spells Formulas And Magical Rites Review Only eBook
Marsile Ficine - Les Trois Livres De La Vie Or De Vita Libri Tres Download eBook
Swain Wodening - Anglo Saxon Witchcraft Download eBook

redpajama_set_name: RedPajamaCommonCrawl


text:
Three things that were different about the start-ups of SXSW 2013
Sara Morgan, the founder of Eleven Eleven Public Relations, tells us why start-ups at 2013's South by Southwest were very different from those presenting last year.
Sure, in a lot of ways, South by Southwest Interactive 2013 looked just like you would expect. Austin, with its eclectic bars and restaurants, was once again the perfect backdrop for nonconformists across the nation to come together to talk about the "next big thing." There were the typical pitches overheard being shared between founders while drinking beers or walking down 6th street. All around, ideas were being discussed, cards exchanged, and t-shirts were being given away. But don't be mistaken, the entrepreneurs of SXSWi 2013 were very different from ones of years past and here are three distinct reasons why.
1 – They're not just coming from the Valley
Paul Singh, Partner at the Mountain View incubator and venture capital firm 500 Startups', shared some words of wisdom with me years ago that were ringing in my ears this year at SXSW. He said, "As an entrepreneur, you don't have to be in the Valley, the Valley just has to be in you." I don't think this saying has ever been more true.
This year at SXSWi, I found myself engaging with startups, who, more often than not, have traded in the thriving tech communities of San Francisco, Palo Alto, or Mountain View, to start their business in a growing startup community like Washington, DC, Chicago, IL, or Denver, CO, to name a few. Nick Tippman, Founder of the startup conference,EverywhereElse.co, the largest single venue startup conference in the country, is based in Cincinatti, Ohio. His co-founder is based in Memphis, TN, where the conference was held. They started EverywhereElse.co to encourage growth outside Silicon Vallley. "The Startup Landscape is changing," said Tippman. "Ninety eight percent of startups are not based in the Valley, but that's where most of the money is. We want to change that."
He's clearly not alone in his thinking. There seem to be new incubators and accelerators popping up every day, both in and outside of the United States, making a strong case for why Silicon Valley investors should be keeping their minds (and wallets) open to companies outside their own backyard. Take for example Global Accelerator Network, which was at SXSWi to promote its network of over 50 accelerators, which exist on six continents and in 63 cities.
2 – .com is no longer their only domain of choice.
Startup founders know that finding a great .com domain name for their startup is about as likely as seeing a unicorn fly over a rainbow. Until now, that has been a point of great frustration, as founders have been forced to spend a large part of their funding on securing a serviceable domain name — or have had to settle on subpar names to build their brands. Then, .CO came on the scene and that all changed.
This year at SXSWi, I met at least a dozen interesting companies built on .CO — and saw at least a dozen others promoting their businesses. Among them were Facebook co-founder Randi Zuckerberg who was promoting her new digital lifestyle magazine, dotcomplicated.co, on a Marie-Claire panel; and retail behemoth Walmart, which was at SXSW to promote goodies.co, a hip food subscription startup launched through its Walmart Labs division.
Peter Bodenheimer, Founder of the social drinking app, BarNotes, (which was actually thought up during a conversation over drinks at SXSW two years ago), chose to launch BarNotes on the .CO domain and has been amazed at the boom in companies doing the same since he first started. "A year or so ago, I may have had to do some explaining about the .CO domain to users outside of the tech space. Now, there is a baseline knowledge about it, both inside and outside of the tech community. It's actually trendy now, I like the idea that we got started before the trend," said Bodenheimer.
Beyond .CO, other domain extensions seem to be gaining popularity, including .ME and .IO. I suspect that in the next year, as more new top level domains start to come online, the presumption in favor of .com will continue to diminish.
3 – They aren't here just to build social apps.
Startup founders want to make a meaningful impact.
SXSW Interactive 2013 may not have launched the next big thing in social media this year, but that wasn't what this year's conference was all about. In a country where childhood obesity is at an all time record high and faith in our education and health care system seems to be at a low, we need entrepreneurs who are passionate about finding solutions to real problems we face every day. This year after meeting hundreds of startup founders at SXSW, I am happy to say I think that's exactly what's happening.
Founder of The Innovation Movement, Fabien Beckers, is fighting to support strategic immigration reform and keep innovators in America. Medicast.co is disrupting the health care industry by connecting people with licensed physicians, when and where they want it, for under $100. Founded to lower the cost of higher education, CommonBond makes it possible for students to save money on their student loans. They're setting out to lower the cost of higher education for students by crowd-funding loans from alumni and individual investors.
These companies are inspiring and SXSW 2013 Interactive is letting them get their voice heard. Yes, things are changing on the tech scene, and if you ask me, it's for the better. I can't wait to see what next year brings.
Sara Morgan is the founder of Eleven Eleven Public Relations, a PR firm founded by an entrepreneur for entrepreneurs, and the Founder of Tailored, a personalized shopping site for brides. Sara was a part of the 500 Startups incubator in Silicon Valley, but now resides in Washington, DC.
.co domain
.co internet sas
Sara Morgan
Facebook #hashtags – a victory for Google+ & a threat to your privacy
Facebook usage in Ireland is declining, down 4.1% in three months


text:
Эванте

 Эванте (мифология)
 Эванте (спутник) — спутник Юпитера

redpajama_set_name: RedPajamaWikipedia


Air conditioners play an important role in our life because they circulate cool air in our rooms and make our life comfortable. Most common AC types are window AC and split system AC.
Window AC is installed on a window in a room, but split system air conditioners include an outdoor unit and an indoor unit. Both of these are connected through a power cable and a drain for condensation. They are not the same as window air conditioners, as their cooling unit is installed inside a room, and their compressor is installed outside in the open.
Split AC systems provide many benefits like they save more energy and they are easy to install too. They have many added features, like climate control, remote control, crowd monitoring etc. In this article, you will read about the benefits of installing split system air conditioners.
This type of air conditioner is very easy to install as compared to traditional window air conditioners. You will not require doing any ductwork in split system air conditioners. You will need to make a small hole in your wall through which a power cable will be passed to connect the indoor unit with the outdoor unit.
You can install the indoor wall mount unit in any location in your room, wherever you like it. These days, manufacturers are making efforts to make these indoor units as beautiful as possible to make them look attractive in the room.
Split system air conditioners are known to consume much energy than window ACs. As compared to central ducting system air conditioners, even a minor leak in the ducts can reduce as much as 40% of cooling efficiency. Thus, you need to keep it on to get the desired cooling and end up wasting a huge amount of energy.
With split AC systems, you don't need to worry about leaks in your ductwork, thus getting low electricity bills.
The functioning of a split system air conditioner is very smooth and quiet, and you will not notice any kind of sound from the air conditioners, unlike a window AC that creates noticeable buzzing sound inside your room.
Since the compressor is installed outside, all the noise is generated there, and your room remains quiet and noise-free. The inner unit creates very little noise that you won't even notice. Sometimes, you will not even know whether your AC is turned on or not.
Split system air conditioners provide enhanced security to your house, as window AC can be easily removed by burglars. When the window AC is removed, it leaves a huge space through which an intruder can easily slip inside. On the other hand, a split system air conditioner needs only a small hole which is just big enough to pass a hose.
If you use a split system air conditioner, you will get the flexibility of using it in different zones of your house, according to your personal requirements. You can transfer cool air into any room of your house using a remote control. There will be a separate thermostat in every room for zone cooling so that you can achieve the desired cooling in every room separately.
For instance, you can keep low cooling in your parents' and kids' room, and high cooling in your room. You will not get these features in window air conditioners. Since you can set the temperatures according to your needs in different rooms, it automatically saves energy and money.
After reading this article, you must have understood the benefits of installing split system air conditioners. So, if you are planning to change your AC, then you have more than many reasons to go for it and enjoy all these benefits.