A) The Magazine Production Company Limited is a magazine design and production company.
B) The Customer has engaged The Magazine Production Company Limited to organise its design and/or print production and/or printing requirements as detailed below.
1.1. Any of the foregoing definitions applies, as the context may require, to the singular or the plural form of the term used.
1.1.3. references to clauses or appendices are to the clauses or appendices of this Agreement.
2.1. By this agreement presented to the Customer, the Customer authorises The Magazine Production Company Limited and its associated companies to proceed with the design, production and submission of the product for printing as per the Brief submitted by the Customer.
2.2.1. MPC will provide a comprehensive solution to its Customer, provide a professional level of service, act in a professional manner to the Customer's Customers and its advertisers.
2.2.2. MPC's services also includes all communication, preparation, placement, design, typography, the checking of file compliancy of supplied artwork (and inform the Customer if it contains a problem), file management of all images & finalised text supplied by the Customer or nominated member of his/her company, preparing all aspects of design for print compliancy, submission of proofs (whether by hard copy or PDF files) in good time for the Customer to make amendments where necessary, for us to make those amendments and resubmit proofs if required.
2.2.3. MPC will, at the request of the Customer, create adverts and liaise, if required, with its advertisers.
2.2.4. The creation of adverts (inclusive of the page rate) is limited to 20 minutes per advert irrespective of size (of which the advertiser will need to submit copy and images) after which an additional charge may apply for more intense work.
2.2.5. MPC will prepare all pages to the respective printing companies requirements for successful output for print and aim to submit by the specified deadline.
3.1. The Customer agrees to provide us with proof-read finalised clean copy, high resolution images, design guidance (if required) and such content required by us to create the product. With the Customers instruction, MPC will pursue additional material if the Customer is unable to source it themselves and the Customer agrees to be charged for any additional costs of the services or goods in order to obtain such content.
3.1.1. If the Customer cannot supply the information the Customer wishes to feature in the product MPC endeavour to source what it can within a limited amount of time in accordance with the set prices.
3.2. MPC make allowances for minor typographic amendments within the agreed set price. However, if the Customer supplies content which then later requires extensive amendments, we then reserve the right to apply an Author Amendment fee. This is charged in 0.5 hour units. If production time allows, we may offer the Customer to clean up previously supplied content and resubmit although this may attract an additional page-rate being applied due to time reformatting of content a second time round but this remains at the discretion of MPC.
3.3. The Customer agrees to supply a proportion of content in readiness at the start of the production with the remaining content to follow but no later than 48 hours before the print deadline.
3.4. MPC will offer the best possible results in the finished product but MPC accept no responsibility for imperfect work caused by defects in or unsuitability of materials so supplied or specified.
4.1. All work is estimated and is subject to sight of content supplied.
4.2. MPC will not be responsible for a re-estimated price differing from an original estimate, Errors and Omissions Excepted.
4.3. MPC will endeavour to find the most-appropriate and most economical solution to provide the Customer with an accurate price before work commences.
4.4. This agreement is between the Customer and MPC will be adhered to at all stages unless the work is different from that originally Brief in which case additional costs may be incurred and MPC will inform the Customer of such costs before work commences.
5.1. MPC will invoice all work rendered in accordance with the Customer's brief and will do everything it can to maintain those costs.
5.2. If MPC find during the creative and production stages that additional work is required or the Customer has requested additional work which exceeds the original budgeted time allowed to fulfil the work successfully and/or this is outside of the original Brief and Quotation (whether oral or written), MPC will advise the Customer of the additional time required and estimated additional costs to complete the product before work commences.
5.3. MPC will inform the Customer of any additional costs in good time. The Customer can approve or reject the costs.
5.4. If the Customer approves the revised costs, whether in writing or verbally, then MPC will carry out the work and the Customer will be charged in accordance to the following rates. A confirmation email by MPC may not be sent for smaller revised amounts.
5.5.5 Band E rates apply to UK Public Bank Holidays from 0001hrs to 2359hrs of that day.
5.5.6 No services are offered on UK (England) Public Bank Holidays including Christmas Eve, Christmas Day, Boxing Day, New Year's Eve, New Years Day.
5.6. The current rates of work are attached to each initial Quotation to the Customer.
5.7. If the Customer rejects the cost of the additional work then MPC will not carry out the additional work required and the Customer must inform MPC of an alternative solution.
5.8. If MPC informs the Customer and MPC do not hear from them within one working day then MPC will carry out the work with the aim to complete the product in accordance to fulfil the brief and the Customer will be charged accordingly.
6.1. MPC will include minor work (up to half hour per item) within the set costs of magazine production but additional work required outside this time will be quoted and charged in accordance of our hourly rate specified in clause 5.5 and the Customer will be invoiced for work carried out.
7.1. It is NOT in the remit of MPC to proof content the Customer's product. If amendments are required then clause 3.2 applies. The Customer must take all efforts to proof read, check and ensure all content of their product meets the Customer's approval before commencement of printing.
7.2. MPC will endeavour to fulfil all instructions but it is the Customer's responsibility to ensure they have all been actioned as the Customer requested.
7.3. The Customer must confirm verbally or in writing (accepted by email) to proceed with the artwork for printing. If the Customer confirms verbally then MPC will confirm back in an email and this email will be the authority to proceed. If the product is complete and MPC do not receive confirmation of final approval then MPC will take the initiative to proceed in submitting the artwork to the printing company in good time so as not to miss the print slot. The Customer will be responsible whether they have confirmed or not.
7.4. Sufficient proofing time and processes should be adhered to.
7.5. The Customer gives absolution to MPC of all liability for any errors, omissions or discrepancies (including supplied artwork by its advertisers), which may be present on the proof, whether hard copy or digital PDF proof sent by email or Dropbox.
7.6. Once the Customer has agreed to proceed, the Customer is able to make additional changes up and to the point of the files being submitted to the printing company after which the Customer will incur all costs to halt and amend relevant artwork and the reproduction of new amended plates if plates have already been produced. This is the Customer's final opportunity to make changes to the content. Creating new plates can result in additional time being required therefore delivery times will not be guaranteed. The Customer cannot make changes once the plates are on the printing press.
7.7. This Agreement revokes the Customer right to take any kind of action against MPC for any aspect of the work with which the Customer is later dissatisfied. If the finished product is consistent with the proof as supplied, the Customer must pay in full for the work whether or not the Customer later takes issue with any aspect of the product. These terms are final and non-negotiable.
7.8. The printing of the product will come under the Terms and Conditions of the company that is physically printing the product.
7.9. If the Customer is using his/her own chosen printing company then MPC contract is finalised once the artwork has been dispatched to pre-press. The invoice is then payable in full.
PLEASE NOTE: Because of the amount of time required to turn round publications Production Artists time needs to be allocated and booked several weeks in advance to ensure priority can be given to the Customer's title when the Customer requires. Customer communication is required to avoid charges being applied later.
8.1. The Customer MUST inform MPC at the earliest opportunity of any possible delay. If the Customer misses their production schedule and/or print deadline for whatever reason then MPC will reallocate the production of the product to a new time schedule so as not to hinder the delay or production of preceding magazines. The Customer will not receive priority outside the original agreed production slot.
8.2. If the content of a job does not materialise in good time or the magazine is put on hold indefinitely during the production by the Customer, for whatever reason, then MPC reserves the right to invoice in full the original agreed cost whether the work is complete or not. Recommencement of work will be charged in accordance with the agreement or by the hour if the budgeted time has been exceeded at the discretion of MPC.
8.3. MPC accepts no responsibility for any delay caused by the Customer providing insufficient, unsuitable or late content.
8.4.2: 100% of the invoice value if notified in writing within 14 days to the start of the intended scheduled production.
8.5. If the Customer fails to notify MPC of any possible delay and continually misses their production schedules and/or print deadlines then MPC reserves the right to charge the Customer where MPC experiences a direct cost caused by the Customer's delay. The Customer is responsible to ensure that finalised content is supplied in good time.
9.1. The client owns the content and images they supply, MPC owns the intellectual property rights to the design contained within and the InDesign file and associated elements. Any electronic files supplied are for the stated use only and not to be changed or adapted or reused without written permission from MPC. Due to licensing restrictions fonts cannot be supplied other than for the purpose of output.
9.3. If the Customer has notified termination of business, as specified in clause 17, and that all invoices has been paid in full and to date, then MPC will supply all working back up copies, associated artwork and PDF files for a reasonable fee to cover the time to prepare, burn and supply DVDs to the Customer. Clause 9.1 would apply.
10.1. Every effort will be made to obtain the best possible colour reproduction on Customer's work but because of the nature of the processes involved MPC cannot guarantee an exact match in colour or texture between any materials with which the Customer supply us, and the printed article.
11.1. MPC will not be responsible for delayed, lost, non-delivery or damage print goods.
11.2. If MPC has arranged the printing with its partnered companies then the Customer must in the first instance contact MPC so MPC can liaise on behalf of the Customer to find the cause and to resolve such issues between the Customer and the printing company. Our findings will be reported to the Customer.
11.3. Claims can be made to the printing company directly, of which the Terms and Conditions will fall under the company who printed the product.
11.4. If the Customer has sought the services of their own nominated printing company then the Customer must liaise directly with his/her own contact with the printing company.
12.1. Unless negotiated and agreed in writing, the copyrights of general artwork, commissioned artwork, illustrations and copy belong to MPC until paid for in full.
12.2. If the Customer supplied MPC with the material, it is the Customer's responsibility to obtain all necessary copyrights for its use and in agreeing to these terms and conditions the Customer is asserting its right to the copyright. In such cases, the copyright belongs to the Customer.
12.3. The Customer agrees to indemnify MPC from any claim that arises regarding the use of material with which the Customer supplies to MPC.
12.4. MPC reserve the right to use any artwork or printing MPC has produced for the purposes of promoting MPC services unless the Customer request otherwise in writing.
13.1. MPC reserves the right not to print any matter deemed illegal, libelous or offensive, or which may be an infringement of the proprietary or other rights of any third party.
13.2. The Customer agrees to indemnify MPC in respect of any claims, costs and expenses arising out of any libelous matter or any infringement of copyright, patent and design or of any other proprietary or personal rights contained in any material printed for the Customer. The indemnity shall extend to any amounts paid on a lawyer's advice in settlement of any claim.
14.1. Our directors and staff are entitled to holidays of which any delay in such events will be best accommodated to MPC's ability.
14.2. MPC will advise its Customers of such events in good time and at the earliest opportunity.
14.3. MPC do not supply services on Christmas Eve, Christmas Day, Boxing Day, the last week of the calendar year (at the discretion of the Production Artist), New Year's Eve and New Year's Day.
14.4. MPC do not supply services in evenings, weekends or public holidays unless by prior agreement (see 5.5).
14.5. If a member of MPC is unable to work due to illness or to attend a personal emergency then MPC will inform the Customer at the earliest opportunity. MPC will recommence the work at the earliest opportunity or if a certain time delay is foreseen then MPC will instigate plans for another member of the company to take over the project. This may cause a delay in meeting print deadlines and MPC will make every possible effort to submit the work on time.
15.1. The invoice MPC sends the Customer will show the cost of the design, production, research process and fulfillment services if applicable. Supplying us with insufficient material and non-proofed content will therefore increase the time spent on design and production, thereby, the final charge.
15.2. VAT is charged on the final invoice at the current Customs & Excise rates and according to current regulations, irrespective of whether or not it is included in an initial price quotation.
16.1.1 International Customers must agree to pay in advance the template charge and the production of each issue.
16.2 If Credit Terms apply for EU Customers then all invoices must be made in full within 30-days of invoice date or before commencement of the next issue which ever arrives soonest. The next issue will not commence until the previous issue has been paid in full.
16.3. If after 60-days payment has not been received then MPC reserve the right to refer the account to the legal department who will employ terms, costs and interest which the Customer will be responsible until the outstanding balance is paid in full.
16.4. Any unpaid invoices will be charged interest of 4% above the Lloyds Bank base rate at that current time.
17.1. If the customer wishes to terminate or cease the services offered by MPC then the Customer must give at least 60-days written notice as time would have been allocated in advance. Failure to do so will give MPC the right to charge the customer in full based on the previous invoice or estimated cost on all intended or planned work for up to 60-days.
17.2. MPC reserves the right to terminate or cease services to Customers at any time. In any such event MPC will give 30-days notice and will commit to fulfill any outstanding work.
17.3. If there is an outstanding balance on account then the customer must pay in full without prejudice.
18.1.2. in respect of all unpaid debts due from the Customer, have a general lien on all goods and property in its possession (whether worked on or not) and shall be entitled on the expiration of 14 days' notice to dispose of such goods or property in such manner and at such price as MPC thinks fit and to apply the proceeds towards such debts.
19.1. By agreement with MPC the directors, employees, freelance staff and its associates of the printing companies/mailing houses will abide by Customer confidentiality at all times. If one of the aforementioned breaches trust and releases confidential information in the public domain or to MPC Customers then MPC will seek legal action against that company or individual.
19.2. MPC agrees to keep the information of its Customers confidential. All information will be treated as confidential in accordance with the Data Protection Act.
20.1. MPC and its directors will accept no liability whatsoever for consequential or third party losses, resulting in incorrect print being supplied and/or a delay in delivery howsoever caused.
20.2. MPC and its directors accept no liability whatsoever for financial loss or loss of earnings arising from products or services provided.
20.3. MPC shall not be liable for any loss to the Customer arising from delay in transit caused by circumstances beyond the company's control.
21.1. MPC accepts no responsibility if MPC are unable to carry out any provision of the contract for any reason beyond our control including (without limiting the foregoing) Act of God, legislation, war, act of terrorism, the effects of an act of terrorism, fire, flood, drought, inadequacy or unsuitability of any instructions, electronic files or other data supplied by the Customer, failure of external FTP servers, failure of power supply, lock-out, strike or other action taken by employees in contemplation or furtherance of a dispute or owing to any inability to procure materials required for the performance of the contract. During the continuance of such a contingency the Customer may, by written notice to ourselves, elect to terminate the agreement and pay for work completed to date and materials used, but subject thereto shall otherwise accept delivery when available.
22.1. Any notices served under this Agreement shall be in writing for the attention of the Customer to the party's contact details.
22.2. Notices may be served by personal delivery, e-mail or first class pre-paid post.
22.3. Any notice so given shall be deemed to have been delivered, if by hand, on the date of delivery, if by post, 48 hours after posting.
23.1. No variation to this Agreement shall be valid unless in writing signed by an authorised representative of the parties.
23.2. Save as expressly provided in this Agreement, this Agreement shall operate to the entire exclusion of any other agreement or understanding of any kind between the parties preceding the date of this Agreement and in any way relating to the subject matter of this Agreement.
23.3. This Agreement constitutes the whole agreement and understanding of the parties as to its subject matter and there are no provisions, terms, conditions or obligations, whether oral or written, express or implied, other than those contained or referred to in this Agreement.
23.4. The failure by either party to enforce at any time or for any period any one or more of the terms of this Agreement shall not be a waiver of them of the right at any time subsequently to enforce all terms of this Agreement. The rights and remedies provided in this Agreement are cumulative and not exclusive of any rights or remedies otherwise provided by law.
23.5. In the event that any term or condition of this Agreement shall be determined to be invalid, unlawful or unenforceable, then it shall be deleted from this Agreement and the remainder shall continue with full effect.
23.6. The Customer shall not assign, transfer or charge or purport to assign, transfer or charge this Agreement or any of its rights, liabilities or obligations under this Agreement without the prior written consent of MPC.
23.7. Pursuant to the Contracts (Rights of Third Parties) Act 1999 the parties intend that no term of this Agreement may be enforced by any person not a party to it.
23.8. This Agreement is governed by the laws of England and Wales and the parties submit to the exclusive jurisdiction of the English courts.
23.9. Any dates referred to in this Agreement, whether specifically or by implication, in relation to the Quotation shall refer to 9am on that day.


The Spokes magazine was launched at the 2013 Ecsite Conference, replacing the former Ecsite Quarterly Newsletter. Issue #0 served as a pilot and was followed by six further quarterly paper issues until April 2015, when the magazine became the monthly online publication we know today.
Issue 0 featured articles by Jose Mariano Gago, Susan Greenfield and Andy Lloyd.


text:
package org.apache.spark.sql.execution.joins

import java.io._

import com.esotericsoftware.kryo.{Kryo, KryoSerializable}
import com.esotericsoftware.kryo.io.{Input, Output}

import org.apache.spark.{SparkConf, SparkEnv, SparkException}
import org.apache.spark.internal.config.MEMORY_OFFHEAP_ENABLED
import org.apache.spark.memory.{MemoryConsumer, StaticMemoryManager, TaskMemoryManager}
import org.apache.spark.sql.catalyst.InternalRow
import org.apache.spark.sql.catalyst.expressions._
import org.apache.spark.sql.catalyst.plans.physical.BroadcastMode
import org.apache.spark.sql.types.LongType
import org.apache.spark.unsafe.Platform
import org.apache.spark.unsafe.map.BytesToBytesMap
import org.apache.spark.util.{KnownSizeEstimation, Utils}

/**
 * Interface for a hashed relation by some key. Use [[HashedRelation.apply]] to create a concrete
 * object.
 */
private[execution] sealed trait HashedRelation extends KnownSizeEstimation {
  /**
   * Returns matched rows.
   *
   * Returns null if there is no matched rows.
   */
  def get(key: InternalRow): Iterator[InternalRow]

  /**
   * Returns matched rows for a key that has only one column with LongType.
   *
   * Returns null if there is no matched rows.
   */
  def get(key: Long): Iterator[InternalRow] = {
    throw new UnsupportedOperationException
  }

  /**
   * Returns the matched single row.
   */
  def getValue(key: InternalRow): InternalRow

  /**
   * Returns the matched single row with key that have only one column of LongType.
   */
  def getValue(key: Long): InternalRow = {
    throw new UnsupportedOperationException
  }

  /**
   * Returns true iff all the keys are unique.
   */
  def keyIsUnique: Boolean

  /**
   * Returns a read-only copy of this, to be safely used in current thread.
   */
  def asReadOnlyCopy(): HashedRelation

  /**
   * Release any used resources.
   */
  def close(): Unit

  /**
   * Returns the average number of probes per key lookup.
   */
  def getAverageProbesPerLookup: Double
}

private[execution] object HashedRelation {

  /**
   * Create a HashedRelation from an Iterator of InternalRow.
   */
  def apply(
      input: Iterator[InternalRow],
      key: Seq[Expression],
      sizeEstimate: Int = 64,
      taskMemoryManager: TaskMemoryManager = null): HashedRelation = {
    val mm = Option(taskMemoryManager).getOrElse {
      new TaskMemoryManager(
        new StaticMemoryManager(
          new SparkConf().set(MEMORY_OFFHEAP_ENABLED.key, "false"),
          Long.MaxValue,
          Long.MaxValue,
          1),
        0)
    }

    if (key.length == 1 && key.head.dataType == LongType) {
      LongHashedRelation(input, key, sizeEstimate, mm)
    } else {
      UnsafeHashedRelation(input, key, sizeEstimate, mm)
    }
  }
}

/**
 * A HashedRelation for UnsafeRow, which is backed BytesToBytesMap.
 *
 * It's serialized in the following format:
 *  [number of keys]
 *  [size of key] [size of value] [key bytes] [bytes for value]
 */
private[joins] class UnsafeHashedRelation(
    private var numFields: Int,
    private var binaryMap: BytesToBytesMap)
  extends HashedRelation with Externalizable with KryoSerializable {

  private[joins] def this() = this(0, null)  // Needed for serialization

  override def keyIsUnique: Boolean = binaryMap.numKeys() == binaryMap.numValues()

  override def asReadOnlyCopy(): UnsafeHashedRelation = {
    new UnsafeHashedRelation(numFields, binaryMap)
  }

  override def estimatedSize: Long = binaryMap.getTotalMemoryConsumption

  // re-used in get()/getValue()
  var resultRow = new UnsafeRow(numFields)

  override def get(key: InternalRow): Iterator[InternalRow] = {
    val unsafeKey = key.asInstanceOf[UnsafeRow]
    val map = binaryMap  // avoid the compiler error
    val loc = new map.Location  // this could be allocated in stack
    binaryMap.safeLookup(unsafeKey.getBaseObject, unsafeKey.getBaseOffset,
      unsafeKey.getSizeInBytes, loc, unsafeKey.hashCode())
    if (loc.isDefined) {
      new Iterator[UnsafeRow] {
        private var _hasNext = true
        override def hasNext: Boolean = _hasNext
        override def next(): UnsafeRow = {
          resultRow.pointTo(loc.getValueBase, loc.getValueOffset, loc.getValueLength)
          _hasNext = loc.nextValue()
          resultRow
        }
      }
    } else {
      null
    }
  }

  def getValue(key: InternalRow): InternalRow = {
    val unsafeKey = key.asInstanceOf[UnsafeRow]
    val map = binaryMap  // avoid the compiler error
    val loc = new map.Location  // this could be allocated in stack
    binaryMap.safeLookup(unsafeKey.getBaseObject, unsafeKey.getBaseOffset,
      unsafeKey.getSizeInBytes, loc, unsafeKey.hashCode())
    if (loc.isDefined) {
      resultRow.pointTo(loc.getValueBase, loc.getValueOffset, loc.getValueLength)
      resultRow
    } else {
      null
    }
  }

  override def close(): Unit = {
    binaryMap.free()
  }

  override def writeExternal(out: ObjectOutput): Unit = Utils.tryOrIOException {
    write(out.writeInt, out.writeLong, out.write)
  }

  override def write(kryo: Kryo, out: Output): Unit = Utils.tryOrIOException {
    write(out.writeInt, out.writeLong, out.write)
  }

  private def write(
      writeInt: (Int) => Unit,
      writeLong: (Long) => Unit,
      writeBuffer: (Array[Byte], Int, Int) => Unit) : Unit = {
    writeInt(numFields)
    // TODO: move these into BytesToBytesMap
    writeLong(binaryMap.numKeys())
    writeLong(binaryMap.numValues())

    var buffer = new Array[Byte](64)
    def write(base: Object, offset: Long, length: Int): Unit = {
      if (buffer.length < length) {
        buffer = new Array[Byte](length)
      }
      Platform.copyMemory(base, offset, buffer, Platform.BYTE_ARRAY_OFFSET, length)
      writeBuffer(buffer, 0, length)
    }

    val iter = binaryMap.iterator()
    while (iter.hasNext) {
      val loc = iter.next()
      // [key size] [values size] [key bytes] [value bytes]
      writeInt(loc.getKeyLength)
      writeInt(loc.getValueLength)
      write(loc.getKeyBase, loc.getKeyOffset, loc.getKeyLength)
      write(loc.getValueBase, loc.getValueOffset, loc.getValueLength)
    }
  }

  override def readExternal(in: ObjectInput): Unit = Utils.tryOrIOException {
    read(() => in.readInt(), () => in.readLong(), in.readFully)
  }

  private def read(
      readInt: () => Int,
      readLong: () => Long,
      readBuffer: (Array[Byte], Int, Int) => Unit): Unit = {
    numFields = readInt()
    resultRow = new UnsafeRow(numFields)
    val nKeys = readLong()
    val nValues = readLong()
    // This is used in Broadcast, shared by multiple tasks, so we use on-heap memory
    // TODO(josh): This needs to be revisited before we merge this patch; making this change now
    // so that tests compile:
    val taskMemoryManager = new TaskMemoryManager(
      new StaticMemoryManager(
        new SparkConf().set(MEMORY_OFFHEAP_ENABLED.key, "false"),
        Long.MaxValue,
        Long.MaxValue,
        1),
      0)

    val pageSizeBytes = Option(SparkEnv.get).map(_.memoryManager.pageSizeBytes)
      .getOrElse(new SparkConf().getSizeAsBytes("spark.buffer.pageSize", "16m"))

    // TODO(josh): We won't need this dummy memory manager after future refactorings; revisit
    // during code review

    binaryMap = new BytesToBytesMap(
      taskMemoryManager,
      (nKeys * 1.5 + 1).toInt, // reduce hash collision
      pageSizeBytes,
      true)

    var i = 0
    var keyBuffer = new Array[Byte](1024)
    var valuesBuffer = new Array[Byte](1024)
    while (i < nValues) {
      val keySize = readInt()
      val valuesSize = readInt()
      if (keySize > keyBuffer.length) {
        keyBuffer = new Array[Byte](keySize)
      }
      readBuffer(keyBuffer, 0, keySize)
      if (valuesSize > valuesBuffer.length) {
        valuesBuffer = new Array[Byte](valuesSize)
      }
      readBuffer(valuesBuffer, 0, valuesSize)

      val loc = binaryMap.lookup(keyBuffer, Platform.BYTE_ARRAY_OFFSET, keySize)
      val putSuceeded = loc.append(keyBuffer, Platform.BYTE_ARRAY_OFFSET, keySize,
        valuesBuffer, Platform.BYTE_ARRAY_OFFSET, valuesSize)
      if (!putSuceeded) {
        binaryMap.free()
        throw new IOException("Could not allocate memory to grow BytesToBytesMap")
      }
      i += 1
    }
  }

  override def read(kryo: Kryo, in: Input): Unit = Utils.tryOrIOException {
    read(() => in.readInt(), () => in.readLong(), in.readBytes)
  }

  override def getAverageProbesPerLookup: Double = binaryMap.getAverageProbesPerLookup
}

private[joins] object UnsafeHashedRelation {

  def apply(
      input: Iterator[InternalRow],
      key: Seq[Expression],
      sizeEstimate: Int,
      taskMemoryManager: TaskMemoryManager): HashedRelation = {

    val pageSizeBytes = Option(SparkEnv.get).map(_.memoryManager.pageSizeBytes)
      .getOrElse(new SparkConf().getSizeAsBytes("spark.buffer.pageSize", "16m"))

    val binaryMap = new BytesToBytesMap(
      taskMemoryManager,
      // Only 70% of the slots can be used before growing, more capacity help to reduce collision
      (sizeEstimate * 1.5 + 1).toInt,
      pageSizeBytes,
      true)

    // Create a mapping of buildKeys -> rows
    val keyGenerator = UnsafeProjection.create(key)
    var numFields = 0
    while (input.hasNext) {
      val row = input.next().asInstanceOf[UnsafeRow]
      numFields = row.numFields()
      val key = keyGenerator(row)
      if (!key.anyNull) {
        val loc = binaryMap.lookup(key.getBaseObject, key.getBaseOffset, key.getSizeInBytes)
        val success = loc.append(
          key.getBaseObject, key.getBaseOffset, key.getSizeInBytes,
          row.getBaseObject, row.getBaseOffset, row.getSizeInBytes)
        if (!success) {
          binaryMap.free()
          throw new SparkException("There is no enough memory to build hash map")
        }
      }
    }

    new UnsafeHashedRelation(numFields, binaryMap)
  }
}

/**
 * An append-only hash map mapping from key of Long to UnsafeRow.
 *
 * The underlying bytes of all values (UnsafeRows) are packed together as a single byte array
 * (`page`) in this format:
 *
 *  [bytes of row1][address1][bytes of row2][address1] ...
 *
 *  address1 (8 bytes) is the offset and size of next value for the same key as row1, any key
 *  could have multiple values. the address at the end of last value for every key is 0.
 *
 * The keys and addresses of their values could be stored in two modes:
 *
 * 1) sparse mode: the keys and addresses are stored in `array` as:
 *
 *  [key1][address1][key2][address2]...[]
 *
 *  address1 (Long) is the offset (in `page`) and size of the value for key1. The position of key1
 *  is determined by `key1 % cap`. Quadratic probing with triangular numbers is used to address
 *  hash collision.
 *
 * 2) dense mode: all the addresses are packed into a single array of long, as:
 *
 *  [address1] [address2] ...
 *
 *  address1 (Long) is the offset (in `page`) and size of the value for key1, the position is
 *  determined by `key1 - minKey`.
 *
 * The map is created as sparse mode, then key-value could be appended into it. Once finish
 * appending, caller could call optimize() to try to turn the map into dense mode, which is faster
 * to probe.
 *
 * see http://java-performance.info/implementing-world-fastest-java-int-to-int-hash-map/
 */
private[execution] final class LongToUnsafeRowMap(val mm: TaskMemoryManager, capacity: Int)
  extends MemoryConsumer(mm) with Externalizable with KryoSerializable {

  // Whether the keys are stored in dense mode or not.
  private var isDense = false

  // The minimum key
  private var minKey = Long.MaxValue

  // The maximum key
  private var maxKey = Long.MinValue

  // The array to store the key and offset of UnsafeRow in the page.
  //
  // Sparse mode: [key1] [offset1 | size1] [key2] [offset | size2] ...
  // Dense mode: [offset1 | size1] [offset2 | size2]
  private var array: Array[Long] = null
  private var mask: Int = 0

  // The page to store all bytes of UnsafeRow and the pointer to next rows.
  // [row1][pointer1] [row2][pointer2]
  private var page: Array[Long] = null

  // Current write cursor in the page.
  private var cursor: Long = Platform.LONG_ARRAY_OFFSET

  // The number of bits for size in address
  private val SIZE_BITS = 28
  private val SIZE_MASK = 0xfffffff

  // The total number of values of all keys.
  private var numValues = 0L

  // The number of unique keys.
  private var numKeys = 0L

  // Tracking average number of probes per key lookup.
  private var numKeyLookups = 0L
  private var numProbes = 0L

  // needed by serializer
  def this() = {
    this(
      new TaskMemoryManager(
        new StaticMemoryManager(
          new SparkConf().set(MEMORY_OFFHEAP_ENABLED.key, "false"),
          Long.MaxValue,
          Long.MaxValue,
          1),
        0),
      0)
  }

  private def ensureAcquireMemory(size: Long): Unit = {
    // do not support spilling
    val got = acquireMemory(size)
    if (got < size) {
      freeMemory(got)
      throw new SparkException(s"Can't acquire $size bytes memory to build hash relation, " +
        s"got $got bytes")
    }
  }

  private def init(): Unit = {
    if (mm != null) {
      require(capacity < 512000000, "Cannot broadcast more than 512 millions rows")
      var n = 1
      while (n < capacity) n *= 2
      ensureAcquireMemory(n * 2L * 8 + (1 << 20))
      array = new Array[Long](n * 2)
      mask = n * 2 - 2
      page = new Array[Long](1 << 17)  // 1M bytes
    }
  }

  init()

  def spill(size: Long, trigger: MemoryConsumer): Long = 0L

  /**
   * Returns whether all the keys are unique.
   */
  def keyIsUnique: Boolean = numKeys == numValues

  /**
   * Returns total memory consumption.
   */
  def getTotalMemoryConsumption: Long = array.length * 8L + page.length * 8L

  /**
   * Returns the first slot of array that store the keys (sparse mode).
   */
  private def firstSlot(key: Long): Int = {
    val h = key * 0x9E3779B9L
    (h ^ (h >> 32)).toInt & mask
  }

  /**
   * Returns the next probe in the array.
   */
  private def nextSlot(pos: Int): Int = (pos + 2) & mask

  private[this] def toAddress(offset: Long, size: Int): Long = {
    ((offset - Platform.LONG_ARRAY_OFFSET) << SIZE_BITS) | size
  }

  private[this] def toOffset(address: Long): Long = {
    (address >>> SIZE_BITS) + Platform.LONG_ARRAY_OFFSET
  }

  private[this] def toSize(address: Long): Int = {
    (address & SIZE_MASK).toInt
  }

  private def getRow(address: Long, resultRow: UnsafeRow): UnsafeRow = {
    resultRow.pointTo(page, toOffset(address), toSize(address))
    resultRow
  }

  /**
   * Returns the single UnsafeRow for given key, or null if not found.
   */
  def getValue(key: Long, resultRow: UnsafeRow): UnsafeRow = {
    if (isDense) {
      numKeyLookups += 1
      numProbes += 1
      if (key >= minKey && key <= maxKey) {
        val value = array((key - minKey).toInt)
        if (value > 0) {
          return getRow(value, resultRow)
        }
      }
    } else {
      var pos = firstSlot(key)
      numKeyLookups += 1
      numProbes += 1
      while (array(pos + 1) != 0) {
        if (array(pos) == key) {
          return getRow(array(pos + 1), resultRow)
        }
        pos = nextSlot(pos)
        numProbes += 1
      }
    }
    null
  }

  /**
   * Returns an iterator of UnsafeRow for multiple linked values.
   */
  private def valueIter(address: Long, resultRow: UnsafeRow): Iterator[UnsafeRow] = {
    new Iterator[UnsafeRow] {
      var addr = address
      override def hasNext: Boolean = addr != 0
      override def next(): UnsafeRow = {
        val offset = toOffset(addr)
        val size = toSize(addr)
        resultRow.pointTo(page, offset, size)
        addr = Platform.getLong(page, offset + size)
        resultRow
      }
    }
  }

  /**
   * Returns an iterator for all the values for the given key, or null if no value found.
   */
  def get(key: Long, resultRow: UnsafeRow): Iterator[UnsafeRow] = {
    if (isDense) {
      numKeyLookups += 1
      numProbes += 1
      if (key >= minKey && key <= maxKey) {
        val value = array((key - minKey).toInt)
        if (value > 0) {
          return valueIter(value, resultRow)
        }
      }
    } else {
      var pos = firstSlot(key)
      numKeyLookups += 1
      numProbes += 1
      while (array(pos + 1) != 0) {
        if (array(pos) == key) {
          return valueIter(array(pos + 1), resultRow)
        }
        pos = nextSlot(pos)
        numProbes += 1
      }
    }
    null
  }

  /**
   * Appends the key and row into this map.
   */
  def append(key: Long, row: UnsafeRow): Unit = {
    val sizeInBytes = row.getSizeInBytes
    if (sizeInBytes >= (1 << SIZE_BITS)) {
      throw new UnsupportedOperationException("Does not support row that is larger than 256M")
    }

    if (key < minKey) {
      minKey = key
    }
    if (key > maxKey) {
      maxKey = key
    }

    grow(row.getSizeInBytes)

    // copy the bytes of UnsafeRow
    val offset = cursor
    Platform.copyMemory(row.getBaseObject, row.getBaseOffset, page, cursor, row.getSizeInBytes)
    cursor += row.getSizeInBytes
    Platform.putLong(page, cursor, 0)
    cursor += 8
    numValues += 1
    updateIndex(key, toAddress(offset, row.getSizeInBytes))
  }

  /**
   * Update the address in array for given key.
   */
  private def updateIndex(key: Long, address: Long): Unit = {
    var pos = firstSlot(key)
    assert(numKeys < array.length / 2)
    numKeyLookups += 1
    numProbes += 1
    while (array(pos) != key && array(pos + 1) != 0) {
      pos = nextSlot(pos)
      numProbes += 1
    }
    if (array(pos + 1) == 0) {
      // this is the first value for this key, put the address in array.
      array(pos) = key
      array(pos + 1) = address
      numKeys += 1
      if (numKeys * 4 > array.length) {
        // reach half of the capacity
        if (array.length < (1 << 30)) {
          // Cannot allocate an array with 2G elements
          growArray()
        } else if (numKeys > array.length / 2 * 0.75) {
          // The fill ratio should be less than 0.75
          throw new UnsupportedOperationException(
            "Cannot build HashedRelation with more than 1/3 billions unique keys")
        }
      }
    } else {
      // there are some values for this key, put the address in the front of them.
      val pointer = toOffset(address) + toSize(address)
      Platform.putLong(page, pointer, array(pos + 1))
      array(pos + 1) = address
    }
  }

  private def grow(inputRowSize: Int): Unit = {
    // There is 8 bytes for the pointer to next value
    val neededNumWords = (cursor - Platform.LONG_ARRAY_OFFSET + 8 + inputRowSize + 7) / 8
    if (neededNumWords > page.length) {
      if (neededNumWords > (1 << 30)) {
        throw new UnsupportedOperationException(
          "Can not build a HashedRelation that is larger than 8G")
      }
      val newNumWords = math.max(neededNumWords, math.min(page.length * 2, 1 << 30))
      ensureAcquireMemory(newNumWords * 8L)
      val newPage = new Array[Long](newNumWords.toInt)
      Platform.copyMemory(page, Platform.LONG_ARRAY_OFFSET, newPage, Platform.LONG_ARRAY_OFFSET,
        cursor - Platform.LONG_ARRAY_OFFSET)
      val used = page.length
      page = newPage
      freeMemory(used * 8L)
    }
  }

  private def growArray(): Unit = {
    var old_array = array
    val n = array.length
    numKeys = 0
    ensureAcquireMemory(n * 2 * 8L)
    array = new Array[Long](n * 2)
    mask = n * 2 - 2
    var i = 0
    while (i < old_array.length) {
      if (old_array(i + 1) > 0) {
        updateIndex(old_array(i), old_array(i + 1))
      }
      i += 2
    }
    old_array = null  // release the reference to old array
    freeMemory(n * 8L)
  }

  /**
   * Try to turn the map into dense mode, which is faster to probe.
   */
  def optimize(): Unit = {
    val range = maxKey - minKey
    // Convert to dense mode if it does not require more memory or could fit within L1 cache
    // SPARK-16740: Make sure range doesn't overflow if minKey has a large negative value
    if (range >= 0 && (range < array.length || range < 1024)) {
      try {
        ensureAcquireMemory((range + 1) * 8L)
      } catch {
        case e: SparkException =>
          // there is no enough memory to convert
          return
      }
      val denseArray = new Array[Long]((range + 1).toInt)
      var i = 0
      while (i < array.length) {
        if (array(i + 1) > 0) {
          val idx = (array(i) - minKey).toInt
          denseArray(idx) = array(i + 1)
        }
        i += 2
      }
      val old_length = array.length
      array = denseArray
      isDense = true
      freeMemory(old_length * 8L)
    }
  }

  /**
   * Free all the memory acquired by this map.
   */
  def free(): Unit = {
    if (page != null) {
      freeMemory(page.length * 8L)
      page = null
    }
    if (array != null) {
      freeMemory(array.length * 8L)
      array = null
    }
  }

  private def writeLongArray(
      writeBuffer: (Array[Byte], Int, Int) => Unit,
      arr: Array[Long],
      len: Int): Unit = {
    val buffer = new Array[Byte](4 << 10)
    var offset: Long = Platform.LONG_ARRAY_OFFSET
    val end = len * 8L + Platform.LONG_ARRAY_OFFSET
    while (offset < end) {
      val size = Math.min(buffer.length, end - offset)
      Platform.copyMemory(arr, offset, buffer, Platform.BYTE_ARRAY_OFFSET, size)
      writeBuffer(buffer, 0, size.toInt)
      offset += size
    }
  }

  private def write(
      writeBoolean: (Boolean) => Unit,
      writeLong: (Long) => Unit,
      writeBuffer: (Array[Byte], Int, Int) => Unit): Unit = {
    writeBoolean(isDense)
    writeLong(minKey)
    writeLong(maxKey)
    writeLong(numKeys)
    writeLong(numValues)
    writeLong(numKeyLookups)
    writeLong(numProbes)

    writeLong(array.length)
    writeLongArray(writeBuffer, array, array.length)
    val used = ((cursor - Platform.LONG_ARRAY_OFFSET) / 8).toInt
    writeLong(used)
    writeLongArray(writeBuffer, page, used)
  }

  override def writeExternal(output: ObjectOutput): Unit = {
    write(output.writeBoolean, output.writeLong, output.write)
  }

  override def write(kryo: Kryo, out: Output): Unit = {
    write(out.writeBoolean, out.writeLong, out.write)
  }

  private def readLongArray(
      readBuffer: (Array[Byte], Int, Int) => Unit,
      length: Int): Array[Long] = {
    val array = new Array[Long](length)
    val buffer = new Array[Byte](4 << 10)
    var offset: Long = Platform.LONG_ARRAY_OFFSET
    val end = length * 8L + Platform.LONG_ARRAY_OFFSET
    while (offset < end) {
      val size = Math.min(buffer.length, end - offset)
      readBuffer(buffer, 0, size.toInt)
      Platform.copyMemory(buffer, Platform.BYTE_ARRAY_OFFSET, array, offset, size)
      offset += size
    }
    array
  }

  private def read(
      readBoolean: () => Boolean,
      readLong: () => Long,
      readBuffer: (Array[Byte], Int, Int) => Unit): Unit = {
    isDense = readBoolean()
    minKey = readLong()
    maxKey = readLong()
    numKeys = readLong()
    numValues = readLong()
    numKeyLookups = readLong()
    numProbes = readLong()

    val length = readLong().toInt
    mask = length - 2
    array = readLongArray(readBuffer, length)
    val pageLength = readLong().toInt
    page = readLongArray(readBuffer, pageLength)
  }

  override def readExternal(in: ObjectInput): Unit = {
    read(() => in.readBoolean(), () => in.readLong(), in.readFully)
  }

  override def read(kryo: Kryo, in: Input): Unit = {
    read(() => in.readBoolean(), () => in.readLong(), in.readBytes)
  }

  /**
   * Returns the average number of probes per key lookup.
   */
  def getAverageProbesPerLookup: Double = numProbes.toDouble / numKeyLookups
}

private[joins] class LongHashedRelation(
    private var nFields: Int,
    private var map: LongToUnsafeRowMap) extends HashedRelation with Externalizable {

  private var resultRow: UnsafeRow = new UnsafeRow(nFields)

  // Needed for serialization (it is public to make Java serialization work)
  def this() = this(0, null)

  override def asReadOnlyCopy(): LongHashedRelation = new LongHashedRelation(nFields, map)

  override def estimatedSize: Long = map.getTotalMemoryConsumption

  override def get(key: InternalRow): Iterator[InternalRow] = {
    if (key.isNullAt(0)) {
      null
    } else {
      get(key.getLong(0))
    }
  }

  override def getValue(key: InternalRow): InternalRow = {
    if (key.isNullAt(0)) {
      null
    } else {
      getValue(key.getLong(0))
    }
  }

  override def get(key: Long): Iterator[InternalRow] = map.get(key, resultRow)

  override def getValue(key: Long): InternalRow = map.getValue(key, resultRow)

  override def keyIsUnique: Boolean = map.keyIsUnique

  override def close(): Unit = {
    map.free()
  }

  override def writeExternal(out: ObjectOutput): Unit = {
    out.writeInt(nFields)
    out.writeObject(map)
  }

  override def readExternal(in: ObjectInput): Unit = {
    nFields = in.readInt()
    resultRow = new UnsafeRow(nFields)
    map = in.readObject().asInstanceOf[LongToUnsafeRowMap]
  }

  override def getAverageProbesPerLookup: Double = map.getAverageProbesPerLookup
}

/**
 * Create hashed relation with key that is long.
 */
private[joins] object LongHashedRelation {
  def apply(
      input: Iterator[InternalRow],
      key: Seq[Expression],
      sizeEstimate: Int,
      taskMemoryManager: TaskMemoryManager): LongHashedRelation = {

    val map = new LongToUnsafeRowMap(taskMemoryManager, sizeEstimate)
    val keyGenerator = UnsafeProjection.create(key)

    // Create a mapping of key -> rows
    var numFields = 0
    while (input.hasNext) {
      val unsafeRow = input.next().asInstanceOf[UnsafeRow]
      numFields = unsafeRow.numFields()
      val rowKey = keyGenerator(unsafeRow)
      if (!rowKey.isNullAt(0)) {
        val key = rowKey.getLong(0)
        map.append(key, unsafeRow)
      }
    }
    map.optimize()
    new LongHashedRelation(numFields, map)
  }
}

/** The HashedRelationBroadcastMode requires that rows are broadcasted as a HashedRelation. */
private[execution] case class HashedRelationBroadcastMode(key: Seq[Expression])
  extends BroadcastMode {

  override def transform(rows: Array[InternalRow]): HashedRelation = {
    transform(rows.iterator, Some(rows.length))
  }

  override def transform(
      rows: Iterator[InternalRow],
      sizeHint: Option[Long]): HashedRelation = {
    sizeHint match {
      case Some(numRows) =>
        HashedRelation(rows, canonicalized.key, numRows.toInt)
      case None =>
        HashedRelation(rows, canonicalized.key)
    }
  }

  override lazy val canonicalized: HashedRelationBroadcastMode = {
    this.copy(key = key.map(_.canonicalized))
  }
}

redpajama_set_name: RedPajamaGithub


In an effort to support early stage green businesses, Green For All is thrilled to launch our fourth annual Business Coaching Program. By pairing certified business coaches from the International Coaching Federation with green entrepreneurs, our program empowers business owners to grow their organizations and create green jobs. Specifically, our business coaches help selected entrepreneurs: (1) boost clarity and focus for their ventures, (2) craft a cohesive action plan for growing their business, (3) prioritize tasks and (4) set accountability mechanisms.
Entrepreneurs: For-profit companies should have 1-3 years of operating experience with a focus on green products, sustainable services, or renewable energy. Non-profit companies should have an established or planned social enterprise model, work with under-served communities to provide pathways out of poverty, and focus on both employment and the environment through green job creation, support, or training. Special preference will be extended to women and minority-owned or operated organizations, as well as enterprises located in or serving vulnerable communities.
In partnership with Accenture, Green For All is proud to host the third year of the Business Mentoring Program that pairs Accenture executives with established green entrepreneurs. Accenture Mentors work with leading entrepreneurs to address challenges in core business competency areas such as strategic business planning, human resources and financial operations.
Entrepreneurs must have at least two years of operating experience, positive revenues and an interest in growing their businesses with operational support from Accenture executives. Their businesses should be focused on green products, sustainable services or renewable energy. Special preference will be extended to women and minority-owned or operated organizations, as well as enterprises located in or serving vulnerable communities.


text:
For more information, call 325-651-4661.
Bethel United Methodist
Bethel United Methodist Church, 113 W. Ave. O, will hold a garage sale and breakfast burrito sal from 7 a.m. to 1 p.m. April 9.
First Christian
First Christian Church, 29 N Oakes St., will hold a court yard concert at 12:05 p.m. May 13. The concert will feature artist Ellen Meyer and is open to the public. Dinner will be available for love offering. Visitors can also bring their own lunch.
First Presbyterian Church, 32 N. Irving St. is holding registration for vacation Bible school 2016. This year's theme is Group Publishing's Cave Quest: Following Jesus the Light of the World.
The Bible school will take place from 9 a.m. to noon, May 31-June 3 at the main church campus. It is free. All children age 3 through fifth grade are invited to attend.
For more information and to volunteer, call 325-655-5694.
First United Methodist
First United Methodist, 37 E. Beauregard Ave., will have IlluMen Chorus of Men perform during their 8:30 a.m. and 10:45 a.m. Sunday worship services, and a musical show at 3 p.m. The services and show are open to the public.
PaulAnn Baptist
PaulAnn Baptist Church, 2531 Smith Blvd., will hold Mission Angelo on April 16. There will be a hamburger lunch at 11:30 a.m., the kickoff rally will begin at 12:15 p.m. and projects will begin at 1 p.m.
Sierra Vista United Methodist
Sierra Vista United Methodist Church, 4522 College Hills Blvd., will send the Senior Adult Circuit Singers at 9:45 a.m. Tuesday to New Haven Retirement Center where they will sing the old gospel hymns with the residents. Then they will have a Dutch-treat lunch in San Angelo.
Ron Knight, a Master Gardener will present a program on Texas Superstar Plants Gardening Workshop on perennials at 7 p.m. Tuesday in Room S-1 near the sanctuary.
The Life Center's Spencer and Kendra Glass Thomas will share mission information on Costa Rica at 6:30 p.m. Friday. A light meal will be served.

redpajama_set_name: RedPajamaCommonCrawl


text:
Memoirs of military service don't glorify war
SaltWire Network
Published: Jul 02 at 11:13 p.m.
Those who forget history are often bound to repeat it.
In 1905, George Santayana, a Spanish born philosopher, essayist and poet, made the comment those who cannot remember the past are condemned to repeat it. It was something former British Prime Minister Winston Churchill repeated in a speech to the House of Commons in 1948 following the horrors of the Second World War.
There is a presently a divisive debate taking place in Sackville, N.B. about whether the town should accept a retired armoured vehicle – a Cougar AVGP – from the 8th Canadian Hussars (Princess Louise's) regiment. While town council there voted to accept the gift in February to place in its memorial park others don't want the town to accept the vehicle because in their opinion it glorifies war and might frighten children.
One resident went as far as to suggest an armoured vehicle isn't the best way to commemorate veterans. If a vehicle that serves as an example of the thousands of Canadians who've served in peacekeeping and combat missions around the globe since the end of the Korean War is not something that should memorialize or commemorate their sacrifice, what should?
Sackville Memorial Park already features one armoured vehicle as well as a cenotaph that includes plaques that are inscribed with the names of Sackville's sons and fathers who lost their lives in two world wars.
Other memorial parks across Canada include examples of the weaponry of war. They're pieces of equipment too many young men took into battle to protect the freedoms we enjoy – and sometimes take for granted today. In some memorials, there are tanks, airplanes, jets, howitzers and other tools of destruction.
If these items glorify war, should we remove them public display? Should we go into all the memorial parks and museums across the country and remove everything that serves as a reminder of what our soldiers, sailors and airmen did – and continue to do today – to keep us safe?
Truth be known, Canada has done a terrible job of remembering the horrors of war. The people of northwest Europe sometimes appreciate the effort Canadians made to liberate them 75 years ago more than the ancestors of those liberators do. It's something that's been pointed out by historians and by those few veterans from the Second World War who remain.
It's not something that would be tolerated in the United States. You just have to visit former U.S. battlefields from the Civil War, Pearl Harbor in Hawaii, Anzio in Italy and Normandy in France to know how much our friends to the south remember the tremendous price that comes with freedom. Maybe we can learn something from them.
The day is going to come when there are no veterans remaining from the two world wars and Korea. With that, we run the risk of forgetting about the sacrifices made on foreign soil, in the air and on and under the seas to protect democracy from fascism. Those, indeed, would be troubling times.
More Editorials stories
EDITORIAL: Hope it doesn't spread
Published Feb 08, 2019 at 6 a.m.
EDITORIAL: Battle for the bottom
Updated Feb 21, 2019 at 10:48 a.m.
EDITORIAL: Patrolling for propaganda
EDITORIAL: Electoral homework
Updated Feb 22, 2019 at 1:25 p.m.
A perfect honour for a former premier
Published Jun 11, 2019 at 10:59 p.m.
EDITORIAL: Liberal sleight of hand
EDITORIAL: Problems of the .00000001 per cent
Updated Feb 05, 2019 at 9:10 a.m.
Thank you Dr. Ferguson
Published Jun 22, 2019 at 3:02 p.m.


text:
import rootNewSimulation from './components/root/NewSimulation';
import rootViewSimulation from '../generic/components/root/ViewSimulation';

import stepIntroduction from './components/steps/Introduction';
import stepStartViz from './components/steps/Visualization/Start';
import stepVisualizer from './components/steps/Visualization/View';

import logo from './logo.png';

export default {
  name: 'ParaViewWeb',
  logo,
  components: {
    NewSimulation: rootNewSimulation,
    ViewSimulation: rootViewSimulation,
  },
  config: {
    cluster: {
      'config.paraview.installDir': {
        type: 'text',
        label: 'ParaView Directory',
        description: 'Path to the home directory of ParaView.',
      },
    },
  },
  steps: {
    _order: ['Introduction', 'Visualization'],
    _initial_state: {
      Introduction: {
        type: 'information',
        metadata: {
          alwaysAvailable: true,
        },
      },
      Visualization: {
        type: 'output',
        metadata: {
          disabled: false,
        },
      },
    },
    Introduction: {
      default: stepIntroduction,
    },
    Visualization: {
      default: stepStartViz,
      run: stepVisualizer,
    },
  },
  taskFlows: {
    Visualization: 'hpccloud.taskflow.paraview.visualizer.ParaViewTaskFlow',
  },
  primaryJobs: {
    Visualization: 'paraview',
  },
  labels: {
    Introduction: {
      default: 'Introduction',
    },
    Visualization: {
      default: 'Visualization',
      run: 'Visualization (running)',
    },
  },
};


This course is designed to provide students with an understanding of basic finance. It covers various topics such as time value of money, capital budgeting, business evaluation, the cost of capital, capital structure, and risk analysis. Emphasis will be placed on developing analytical skills necessary for making decisions relevant to the hospitality industry. Prerequisite(s): Financial Accounting (MGMT-115). Prerequisite(s) or Corequisite(s): Marketing and Promoting Food (MGMT-205).


Comedian, writer, and stand-up comic J.B. Smoove will host the newest Hollywood awards show to be televised– The CLIOS: World's Best Commercials.
Smoove is best known for his role, alongside Larry David, as Leon Black on HBO's Curb Your Enthusiasm. In recent years, however, the comedian has established himself as a nationally headlining comedian, having landed his own Comedy Central hour special That's How I Dooz It and another show on the network, Russell Simmons Presents: The Ruckus, which Smoove hosted.
Some of the commercials nominated for CLIOS star the likes of Jason Bateman, Kevin Bacon, Will Arnett, Larry Bird, Kobe Bryant and Michael Jordan. And Smoove's brash comedy style and natural knack for commanding the stage should definitely translate well into hosting. The one-hour special airs Wednesday, July 25 from 8-9 pm EST on NBC.


Detailing the physical features, habits, territorial reach and other identifying qualities of the Iron Cross Blister Beetle.
Native to the Sonoran desert, the Iron Cross Blister Beetle is dangerous to touch and poisonous to eat, making it hazardous to people, pets and livestock.
Having body colors akin to a wasp, the bright yellow network of veins covering black elytra act as warning colors. WIth a bright, red head, the Iron Cross Blister Beetle gives off a bonafide visual alarm. A toxic chemical called cantharidin is secreted from the legs and antennae of an Iron Cross Beetle when handled or touched, which causes painful blisters on human skin as well as on animals. If eaten in enough quantities, it can kill. While most people would refrain from eating beetles, this insect is sometimes unwittingly consumed by horses and livestock feeding on the plants where the beetle is eating, causing death. Pets may also try to eat them. This same chemical has been used medicinally to kill and remove warts, so in a clinical sense, it is helpful to people, too.
A black cross is visible on the wings thanks to a separation of the yellow color on the wings at the midline as well as at the center of the elytra. This species eats native wildflowers and herbs as well as the leaves of crop plants like alfalfa, potatoes, beans, and clover. This agricultural diet increases the likelihood of a human encounter in the field. Adults are active in the day, and sometimes at night, and it is usually seen meandering on the ground or feeding on a plant, many times with others.
If seen, avoid contact with the Iron Cross Beetle and keep a wary eye for others that may be nearby.


Think about your reasons for exercising, and set goals that seem reasonable to you (you can always adjust these later as necessary). These goals will help enormously when it comes to keeping you on track; regardless of your motivation. Whether you want to be freakishly strong, shed a few excess pounds or simply have beach-worthy abs; goal-setting will help you on your way.
In 1952 a young English runner named Roger Gilbert Bannister found himself in the 1500m final. The race was to prove one of the most dramatic in Olympic history, and the outcome was not decided until the final metres. Bannister finished a disappointing fourth. Over the next two months Bannister considered a number of dramatic changes to his training; and even the idea of giving up running altogether. To say he was frustrated is an understatement. Ultimately, he decided on a new goal – he would run a mile in less than four minutes. At that time, nobody had ever achieved this. In fact, this was several seconds faster than the world record. Over the next couple of years he gradually took slices off his times. By the start of 1954 he was running a mile in just over 4min2secs. The day that was to change his life came in May 1954, during a meet in Oxford. In front of 3,000 incredulous spectators, Bannister ran the mile in 3min 59.4sec. He had finally done it.
The astonishing part is not just Bannister's achievement (although that's a big thing in itself); it's how quickly other runners were breaking the same barrier. Just 46 days later – in a meet in Turku, Finland – Australian John Landy broke the record with a 3m57.9s . Others soon followed. This to me outlines the power of a mental barrier to limit goals; particularly when it comes to fitness. The fact that something hasn't been done certainly doesn't mean it can't be done. It also highlights the importance of putting hard numbers in the goal. Whenever I've tried to 'lose a few kilos', 'increase my overall strength', 'run without gasping for breath' I've seen slight improvements at best. Aiming to 'lose 10kg', 'deadlift 200kg' etc has proven far more effective.
If you've ever tried a bit of body transformation (losing weight, gaining weight, redistributing it), you know what it's like. It can be a frustrating, disheartening process. Still, it doesn't have to be that way. As with anything, a bit of preparation makes all the difference. No matter what your body transformation goals are, here are the components of kitchen success.
You know what it's like. You've been sticking to the plan for a while now, eating healthy meals and steering clear of the bad stuff. One day you notice a lonely packet of potato chips in the back of the cupboard, and it's game on. Before you know it you're scouring the room for the simplest, tastiest ready-made snack you can find. Solution : clean out the cupboards before you start, and remove anything which doesn't fit in with your intended eating plan. No need to go overboard here, just get rid of the obvious 'shouldn't have' items. NB : if you're sharing the kitchen with others, just put your food – as much as possible – in a separate place.
After a nine year break, I began lifting weights again about four years ago. This absence had not done me any favors; and I was slow, weak and a little on the heavy side. Having eventually made the decision to begin doing something (and believe me – after 9 years, this didn't exactly come easily), I was faced with an all-too-common dilemma. Where?
Gyms can be intimidating places at the best of times. As an outsider, it seemed as though all the members were in pretty good shape to start with. I'd stick out like a sore thumb. Instead, I decided to set up a home gym. Get myself into a reasonable condition before I went anywhere near the commercial options. And then I discovered it – the art of working out alone.
Over the past few years, most people I've spoken to have become (or already were) environmentally conscious to some degree. What often begins simply as saving money – such as reducing the amount of electricity you use – turns out to have quite a positive impact. If, however, you want to do even more; there are several things you can do. Here are just 7 lifestyle changes which will help the environment.
1. Use the car less. This is perhaps the simplest change in this list – reduce the time you spend behind the wheel. In addition to the environmental benefits of doing this, you'll probably find that you become slightly fitter; and have more money in your pocket at the end of the week. In short, there's no downside. How do you do this? Here are a few suggestions.


text:
package de.sindzinski.wetter;

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;

import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;

/**
 * Created by steffen on 23.02.17.
 */

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule =
            new ActivityTestRule<>(MainActivity.class);

}


Hello! I can provide orders for the construction of houses, cottages or foundations, repair of the facade, roofing, repair of apartments, offices and other residential (non-residential) in Moscow and the region from private individuals and organizations. The applications contain a complete description of the work, contacts, city. About 10 to 15 applications are sent per day. The cost of mailing is 600 rubles per week, 2200 rubles per month.
Гаражи, ракушки, пеналы, в Истре, Звенигороде, Красногорске, Одинцово, Голицыно, Кубинке Cтроительные услуги Москва 30 000 руб.
Complex supply of building mixtures and materials Cтроительные услуги Москва 110 руб.
urgent All types of construction work Cтроительные услуги Москва 500 руб.


Austin, CorpusChristi, Dallas, Midland, Odessa, San Antonio, San Marcos, Greater Temple and Waco. Grande's affordably priced internet service delivered through our proprietary, fiber-rich network is perfect for Wi-Fi, streaming, watching TV online and internet home networking. Grande's cable TV packages offer the best in programming, TiVo DVRs, Netflix, On-Demand movies, and on-the-go-TV. We are dedicated to providing Texas with the best entertainment services at a fair price with 100% Texas-based customer support.
Schooley Mitchell delivers objective business optimization advice, offering telecom, merchant services, and small package shipping cost analysis.


It's a daunting prospect: you show up, CMA in hand, and walk into the house of a relative stranger. Their lives involve different rituals and habits than yours. Some people like a lived-in home, others keep their possessions spotless. How can you be prepared ahead of time to be a welcome guest in your client's home?
It starts with a very simple, common-sense idea: if you wouldn't want them to do it in your house, don't do it in theirs. Ignorance of personal in-home customs can be forgiven, so long as you display a desire to follow good manners.
Keep these simple ideas in mind, and you'll be on your way to a successful in-home client meeting!
Even if you just have time to stop for a cup of coffee for both you and the client, come with something in hand to give them. It shows that you are grateful for the invitation into their home.
Yes, many people leave their shoes on when walking around their own house, but the chances of really offending someone—or marking up their beautiful, clean home—are too much to assume. Kick off your shoes when you first get inside and leave them close to the door. You can always put them back on if your host insists. And don't forget to wear some nice socks!
3. Leave your pets in the car.
Your dog may come along with you to every client meeting, but Poochy can't come inside. Without explicit permission, leave your pets in a shaded area with some air flow and go out to check on them periodically. Better yet, leave your pets at home when you're meeting a client at their house.
If it looks like really nice furniture, ask if you can sit down. Don't assume that every chair and couch is for plopping down. Your client will likely offer you a seat, and if they don't, make a point of asking.
If you're thirsty it's perfectly okay to ask for water, but never ask for food. Water costs next to nothing to provide, while preparing a snack requires effort and resources. When offered food, however, feel free to eat! Avoid bad table manners but enjoy yourself. Your client will appreciate seeing their hospitality accepted so graciously.
6. Don't take phone calls.
If you must answer an important call, excuse yourself and go out to your car. Otherwise, remember to put your phone on silent before you even knock on the door.
7. Lend a hand in cleaning up.
8. Say please and thank you.
They might be your client, but you're still their guest!
What other tips would you share with your fellow real estate professionals on how to conduct yourself in a client's home? Tell us in the comments, and feel free to share what you like to bring along, too!


As the name suggests it is used for observing some objects. Observer watch for any change in state or property of subject. Suppose you are interested in particular object and want to get notified when its state changes then you observe that object and when any state or property change happens to that object,it get notified to you.
"Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically".
The observers will not monitor every time whether there is any change in state of subject or not, since they will be notified for every state change of subject, until they stop observing subject. So it follows hollywood principle-"Don't call us,we will call you".
You might have surfed "Flipkart.com-Online megastore".So when you search for any product and it is unavailable then there is option called "Notify me when product is available".If you subscribe to that option then when state of product changes i.e. it is available,you will get notification mail "Product is available now you can buy it".In this case,Product is subject and You are an observer.
When subject doesn't know about number of observers it has.
For being observed,class must extend this class. The subclass becomes observable and override methods of java.util.Observable and other objects can "observe" changes in state of this object.
public void update(Observable obj, Object arg) :This method is called whenever the observed object is changed. An application calls an Observable object's notifyObservers method for notifying to all the observers of change.
You might have surfed "Flipkart.com-Online megastore".So when you search for any product and it is unavailable then there is option called "Notify me when product is available".If you subscribe to that option then when state of product changes i.e. it is available,you will get notification mail "Product is available now you can buy it".
Below interface is our observer interface.It consists of single method called "update"


text:
Philadelphia Orchestra musicians strike on opening night, weekend performances cancelled
Strikes Philadelphia Orchestra
Handout Art/Philadelphia Orchestra
Yannick Nézet-Séguin, Music Director of the Philadelphia Orchestra.
The musicians of The Philadelphia Orchestra, who belong to the Philadelphia Musicians Union, Local, 77, went on strike Friday on the night of their opening gala.
The decision happened while fans filled seats in the Kimmel Center for the Performing Arts' Verizon Hall. The performers' contract expired earlier in September. The orchestra was expected to be conducted by Yannick Nézet-Séguin, which would have been the opening of his fifth year as the music director.
In a statement obtained by the New York Times, the musicians said that the strike is an opportunity to voice their concerns.
"We can no longer remain silent while we continue in a downward spiral," the musicians said in a statement.
The orchestra put out a statement on its website late Friday.
"The decision by the musicians to cancel the Season Opening Gala performance is naturally disappointing to all of us," said Allison Vulgamore, president and chief executive officer of The Philadelphia Orchestra in a statement. "However, even as our last several years have seen us overcome numerous challenges, we hope this, too, will soon lead to a mutually satisfactory agreement."
The orchestra filed for bankruptcy more than five years ago. The musicians' decision comes the same day as the Pittsburgh Symphony Orchestra musicians went on strike.
Aside from Friday's concert, Saturday and Sunday performances have also been cancelled. Negotiations are set to resume on Oct. 4.
With it musicians on strike Philadelphia Orchestra says it is canceling this weekend's concerts. pic.twitter.com/qKlc2JB84N
— John Rawlins (@JRawlins6abc) October 1, 2016
#NEW: Philadelphia Orchestra musicians go on strike https://t.co/vMIzfMhQwi pic.twitter.com/FXvm3FRUSI
— FOX 29 (@FOX29philly) October 1, 2016
Read more Strikes Philadelphia Orchestra Center City Philadelphia Performers Musicians Yannick Nézet-Séguin


text:
Arizona holds on to beat UCLA behind…
Arizona holds on to beat UCLA behind quarterback Grant Gunnell
Dorian Thompson-Robinson left late in the third quarter
Arizona quarterback Grant Gunnell celebrates after the team defeated UCLA 20-17 in an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
By Associated Press | |
PUBLISHED: September 28, 2019 at 11:39 pm | UPDATED: September 29, 2019 at 4:05 pm
Arizona quarterback Grant Gunnell (17) throws against UCLA in the first half of an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
Arizona running back Gary Brightwell, right, scores a touchdown against UCLA in the second half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
Arizona wide receiver Drew Dixon makes the catch for a first down against UCLA in the first half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
UCLA place kicker JJ Molson (17) misses a game tying field goal against Arizona in the second half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
UCLA tight end Matt Lynch (81) catches a touchdown over Arizona cornerback Jace Whittaker in the first half of an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
UCLA quarterback Dorian Thompson-Robinson (1) gets hit by Arizona defensive end Jalen Harris in the second half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Thompson-Robinson left the game and never returned, Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
UCLA defensive back Darnay Holmes drops back in coverage against Arizona in the first half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
Arizona cornerback Lorenzo Burns (2) runs with the ball after intercepting a pass against UCLA in the first half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
UCLA running back Joshua Kelley (27) dives for a first down in between Arizona linebacker Anthony Pandy and Colin Schooler (7) in the second half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
Arizona cornerback Christian Roland-Wallace defends the pass intended for UCLA wide receiver Jaylen Erwin (15) in the first half of an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
Arizona head coach Kevin Sumlin, left, and UCLA Bruins head coach Chip Kelly talk before an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
UCLA wide receiver Jaylen Erwin (15) runs for a first down against Arizona in the second half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
UCLA quarterback Austin Burton (12) runs away from Arizona defensive tackle Finton Connolly for a first down in the second half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
Arizona cornerback Christian Roland-Wallace (4) celebrates as UCLA place kicker JJ Molson (17) missed a game-tying field goal in the second half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
UCLA quarterback Dorian Thompson-Robinson throws against Arizona in the first half of an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. (AP Photo/Rick Scuteri)
Arizona cornerback Jace Whittaker knocks the ball away from UCLA wide receiver Jaylen Erwin (15) in the second half of an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
UCLA running back Joshua Kelley (27) runs for a first down against Arizona in the second half during an NCAA college football game, Saturday, Sept. 28, 2019, in Tucson, Ariz. Arizona defeated UCLA 20-17. (AP Photo/Rick Scuteri)
TUCSON, Ariz. (AP) — Grant Gunnell threw for 352 yards and a touchdown and Arizona held on to beat UCLA 20-17 Saturday night after JJ Molson missed a 39-yard field goal in the closing seconds.
Arizona (3-1, 1-0 Pac-12) played without its two best offensive players with quarterback Khalil Tate and running back J.J. Taylor out due to leg injuries.
Gunnell had seen spot action earlier this season, but was making his first collegiate start. The freshman played like he had been the starter all along, playing with poise while completing 29 of 44 passes.
UCLA (1-4, 1-1) pulled off an epic comeback last week, rallying from 35 points down to beat Washington State. The Bruins needed another, not-so-monumental comeback after Gary Brightwell scored on a 10-yard run to put Arizona up 20-17.
Dorian Thompson-Robinson led the comeback against the Cougars, but left late in the third quarter after Arizona defensive end Jalen Harris fell on his left leg from behind.
His replacement, sophomore Austin Burton, had a chance when UCLA forced a punt and got the ball at its 9-yard line with 2:52 left.
Burton worked the Bruins down the field quickly to Arizona's 21-yard line, but Molson pushed his field goal attempt wide right with 34 seconds left.
UCLA saved its season and potentially coach Chip Kelly's job last week with its 67-63 comeback win over then-No. 19 Washington State.
Thompson-Robinson had a school-record 564 yards of offense while accounting for seven touchdowns and looked like he was going to slice right through Arizona's defense as well.
UCLA went 85 yards — 40 on Thompson-Robinson runs — in 12 plays on its opening drive and scored on Matt Lynch's 2-yard touchdown catch.
The Bruins sputtered after that, managing 100 yards the rest of the half.
UCLA men take on Cal looking to break losing streak
USC women upset previously unbeaten No. 7 UCLA in double OT
UCLA LB Krys Barnes eyes final opportunity to play in Rose Bowl
UCLA DB Darnay Holmes announces he is leaving
Arizona was a little better at moving the ball — well, until it got to the red zone. The Wildcats crossed UCLA's 20-yard line three times in the first half and stalled each time, settling for two Lucas Havrisik field goals and another he missed.
Arizona didn't take long to get going in the second half, scoring on its first play when Darrius Smith took advantage of a breakdown in coverage by UCLA and streaked along the sideline alone for a 75-yard touchdown.
UCLA answered after Thompson-Robinson went down, scoring on a 3-yard run by Joshua Kelly after he broke off a 36-yard run to put UCLA up 17-13.
UCLA lost its starting quarterback and another chance at a comeback victory when Molson missed his kick.
Arizona pulled out a gritty win without two of its best players and may be hitting its stride after a disappointing season-opening loss to Hawaii.
UCLA hosts Oregon State next Saturday.
Arizona plays at Colorado next Saturday.
Lakers' Kyle Kuzma taking pride in getting more defensive – Daily News
A society of cheaters – Daily News
How Sierra Canyon's Robert Thibiant became a fan favorite 3,000 miles away from home – Daily News
UCLA DB Darnay Holmes announces he is leaving – Daily News
UCLA Football
More in UCLA


text:
{{Info/Competição esportiva
|carta=ciclismo
| nome          = Vuelta al Ecuador
| current_event =
| imagem        =
| legenda       =
| circuito      = Union Cycliste Internationale|UCI|2.2 (até 2010)
| data          = Novembro
| região        = Equador
| português     = Volta ao Equador
| disciplina    = Corrida de Estrada
| competição   = UCI America Tour
| tipo          = Corrida por etapas
| organizdor     =
| diretor      =
| primeira_edição =
| número       = 34 (desde 2014)
| primeiro_vencedor   =
| mais_vitorias   =  (5 vitórias)
| mais_recente    =
}}

A Volta ao Equador''' é uma prova de ciclismo por etapas que se desenvolve em dito país.
Organizada pela Concentração Desportiva Pichincha devido a um convénio com a Federação Equatoriana de Ciclismo para ser organizada até o ano 2012; conseguiu a partir do ano 2007 estar incluída no UCI America Tour, chegando a ser de categoria 2.2. No entanto, no ano 2011 a competição não se realizou perdendo assim a categoria do calendário UCI America Tour para esse e nos posteriores anos. Na atualidade não se conhece com certeza sobre a organização desta competição, pois apesar de ser a máxima concorrência ciclística do país, é concorrida por outras competições de carácter local como a Clássica Internacional de Tulcán, que apesar de ter menor nível apresentam equipas profissionais a cada ano.

A primeira edição disputou-se em 1966, mas a prova não tem contado com continuidade e teve anos em que não se disputou.
O vencedor mais vitorioso é o equatoriano Pedro Rodríguez com 5 vitórias gerais e só sete colombianos e um brasileiro têm sido os estrangeiros vencedores. Quanto a vencedores por província constam

Palmares

Palmarés por países

 Entre parêntese o número de ciclistas diferentes que têm conseguido vitórias para a cada país.

Ver também
 Campeonato do Equador de Ciclismo em Estrada
 Campeonato do Equador de Ciclismo Contrarrelógio

Competições de ciclismo do Equador

redpajama_set_name: RedPajamaWikipedia


text:
Gregory G. Johnson of Wong Fleming, PC attends Congressional Black Caucus TARP/TALF Access Summit
Gregory G. Johnson of Wong Fleming, PC attended the Congressional Black Caucus Economic Security Taskforce TARP/TALF Access Summit that was held in Washington, DC. Over 300 representatives of minority and women owned businesses were in attendance of the summit. The objective of the CBC's Summit was to address barriers for minority and women owned businesses and to aid in contracting opportunities related to new federal financial and economic recovery programs. Mr. Johnson noted that "Wong Fleming, PC is a minority and woman owned firm and our attendance at this summit was essential in promoting diversity through the use of qualified professional services providers like us for the TARP/TALF government bailout." Gregory Johnson said that "thanks to concerns voiced by the many minority and women owned firms at the Summit, federal officials have promised to commit to assuring diversity in the firms hired by the government."
In attendance at this summit were representatives for the Federal Reserve Board, Department of Treasury, Federal Deposit Insurance Incorporation, and the Federal Housing Finance Agency. Federal Reserve Chairman Ben Bernanke made a special appearance and gave remarks about how he values inclusion and welcomes feedback and suggestions from minority and women owned businesses. Mr. Bernanke also stated that the Federal Reserve has made a commitment to provide $1 trillion in loans to pump up the market for Asset Backed Securities to insure the availability of auto loans, student loans and credit loans in all sectors of the economy. Agency representatives also discussed the Troubled Asset Relief Program (TARP), the Term Asset-Backed Securities Lending Facility (TALF) and other programs designed to boost the economy. The CBC stated that they "look forward to building on today's discussion so that as we move forward, our financial institutions and economy become stronger, healthier and more diverse."


A brand experience should not stand alone but be the catalyst for an omni-channel marketing campaign.
Augmented reality is an underused technology that provides brands with immense value when incorporated into a brand experience.
Smart brands are using experiential marketing as a tool outside of direct consumer engagement, such as in developing relationships with influencers.
Consumer behavior and expectations are in a constant state of evolution, with the digital revolution only increasing the speed at which the marketplace changes. In response, marketers need to "follow the money," and use methods that resonate with an ever-changing audience. But now technology is not a novel concept, and with the Internet of Things and an increased integration of the physical and digital, smart brands have incorporated an omni-channel approach in improving interactions and the impact of the brand experience.
But executing an effective omni-channel strategy is not without its challenges. In addition to digital advertising, marketers are smart to consider and potentially incorporate influencer marketing, digital offers, email, and other elements of a healthy marketing ecosystem. Here Digital Agency Network shares steps that brands can follow when diversifying a brand experience into an omnichannel strategy.
From Outsidelands to Bestival, brands embrace the summer to pull out all the stops when meeting consumers at all of their favorite music venues. But the rising popularity of festivals also means the price of admission is rising, in some cases making these events inaccessible to some consumers. To better illustrate this phenomenon, the 2018 price to attend Coachella was $429, which only included admission into the festival. Factor in the cost of housing, food, transportation (Coachella is in the desert and is fairly secluded), and the cost for one weekend at the festival could be well over $1,000.
While we as a society have embraced technological advancements, for some there is still a fear of the unknown, such as the power of artificial intelligence. However, unlike AI, augmented reality has seen less concern, in large part because of gamification apps like Snapchat or Pokemon GO. For brands, AR presents a significant opportunity during brand activations as a way to engage attendees.
Due to the nature of AR (which superimposes a digital experience into reality with the help of a device like a phone or tablet), brands can get highly creative. A recent Event Marketer article outlines some of the most popular ways brands have incorporated AR during an activation, including using it to showcase a new product. Check out the full article here.
Despite a recent call for better endorsement transparency from online celebrities, influencer marketing is still a strong tool in marketing to consumers. While most people are aware that influencer marketing is a tactic, they are willing to be marketed to as long as it is authentic and transparent. Some brands have achieved an authentic relationship with their influencer partners by designing influencer-only experiential marketing events.
A recent example of this technique was in the case of online fashion retailer, Revolve, who partnered with the Bermuda Tourism Authority for #RevolveSummer. The month-long activation brought together some of the biggest fashion influencers, and featured creative parties, catered events, and natural beaches. Revolve created not only a backdrop for influencers to create content, also cultivated a strong relationship with the influencers themselves.
We've previously shared the impact experiential retail can have on the longevity of brick-and-mortar stores. In fact, 72% of consumers say they positively view brands that provide quality events/experiences, and 74% say engaging with brand experiences makes them more likely to make a purchase. However, it is important to note that store experiences can vary dramatically. While an influencer-inspired vacation works for Revolve as detailed above, it may not work for others. Similarly, the measurement and demonstration of ROI for each experience will vary.
In this article, the creative director of XYZ agency puts it best: brands need to understand the value of context. More specifically, "by controlling the circumstances in which their products and services are experienced gives brands a far more powerful way to tell the stories and develop a more empathetic relationship." This article goes further in discussing the context of measurement across different types of activations. Check out the full article here.
As mentioned above, when it comes to creating an experiential retail space, one-size does not fit all. Brands need to identify measurable goals, how they want to build and maintain the consumer relationship, and how they shape the experience to meet these needs. This translates to some highly-creative spaces that can effectively highlight the brands personality.
One recent example of a brand that took an experiential retail approach while maintaining their brand personality is L'Occitane en Provence. The skincare company recently invested in their flagship New York City store with the intention of creating an interactive, highly-personal customer experience. The store's aesthetic matches that of L'Occitane's brand history and signature products, which helps convey their brand narrative. Having found success with the New York store, the brand is looking to create similar, location-specific experiences in their stores globally.
Whether or not you attended the Museum of Ice Cream, chances are you've heard of the interactive experience. This is largely in part due to the fact that the space was well-known for its Instagram-able content. From an ice cream sandwich swing to a mint mochi garden, and the now infamous sprinkle pool, the experience set a new standard.
From the success of this and other similar events like the Color Factory, a new trend was born. Using the museum as inspiration, beauty brand Winky Lux created their own experience. The pop-up, which is slated to activate in 5 cities total and beginning in New York, looks to fully immerse customers into the world of beauty. Unsurprisingly, the pop-up also provides ample opportunity for customers to take photos and share across their social media channels.
When it comes to experiential marketing, brands that sell a service, as opposed to a physical product, sometimes have to approach experiential from a different angle. With no product to sample, test, or demo, these brands may have an added challenge related to consumer engagement. If the company is in insurance, finance, or other professional categories, add to that the additional challenge of often being labeled "boring" or "hard to understand." Not only does the brand have to creatively engage with consumers, they also need to make an impact strong enough to change how they are perceived.
Knowing this, Esurance faced these challenges head on. They created a multi-city activation that sought to turn around the bleakest of days (Monday of course). In Los Angeles, Denver and Boston, Esurance sent glam squads to the Department of Motor Vehicles to surprise and delight consumers who were waiting in line with free makeup and touch ups. Meanwhile in New York, Seattle, Austin, Chicago and Tampa, consumers got free pastry and coffee. By creating these positive activations, Esurance sought to change the perception of insurance while making people's days just a tiny bit better.


text:
Borkhausenia reprobata is een vlinder uit de familie van de sikkelmotten (Oecophoridae). De wetenschappelijke naam van de soort is voor het eerst geldig gepubliceerd in 1920 door Meyrick.

reprobata


text:
What Is The Wear-And-Tear Theory Of Aging?
Health » Aging
Jacob Lund/Shutterstock
By Beth Bradford/Updated: Jan. 23, 2023 10:20 am EST
Sometime around the age of 30, your body begins to lose bone mass. Granted, if you do weight-bearing exercise, you'll still be able to add bone mass to your body. Eventually, you'll reach an age when your bone-building ability can't keep up with the bone deterioration, according to the National Institute on Aging. Why, how, and when our bodies begin to decline is what is included in biological theories of aging (via Physiopedia).
According to a 2013 article in the Korean Journal of Audiology, there are two main perspectives on aging. The first perspective on aging is that humans are genetically programmed to age. For example, genetic program theory says that each species has a specified average lifespan. Although the average lifespan of humans has slowly increased, the maximum age that a single human can live hasn't changed much. These theories suggest that no matter what we do to maintain a healthy body, we can't stop the aging process (via Healthline).
The second perspective on aging is that there are harmful factors that contribute to our aging. This class of aging theories is known as damage or error theories, and the wear-and-tear theory of aging is considered to be a damage theory (via a 2010 article in Aging and Disease).
The basic principle of wear-and-tear theory
August Weismann conceived the wear-and-tear theory of aging in 1882 (via LibreTexts). Like a machine, the body wears out with use (via a 2015 article in Disease-a-Month). Various parts of the body such as our cells and tissues break down over time. Wear-and-tear theory relies on the concept of entropy, which is the principle that all matter reverts back to its random state (via Programmed Aging Theory Info).
Included with wear-and-tear theory (and other damage theories) is that obesity, food, alcohol, and lifestyle also contribute to aging (via a 2013 article in the Korean Journal of Audiology). Free radicals and oxidative stress damage the body, and this damage leads to disease (via a 2015 article in Antioxidants). As this damage increases, the repair functions begin to slow down.
A 2004 review in Rejuvenation Research suggests that the wear and tear that can lead to osteoarthritis puts the joints in the stage where they are no longer able to repair themselves.
Criticisms of the wear-and-tear theory
Try_my_best/Shutterstock
According to Programmed Aging Theory Info, wear-and-tear theory doesn't consider how the body repairs itself and continues to grow. Even if we break a fingernail, it eventually grows back. Nature uses energy to maintain organisms. Wear-and-tear theory also doesn't consider that some living organisms don't age, and others die not from aging but during reproduction. Because the aging process is more complex than wear and tear, modern biology doesn't follow this simplistic approach to aging.
A 2010 article in Rejuvenation Research said that because our bodies are capable of repairing and restoring themselves, we should be looking more toward what holds back this process. In other words, aging is about looking at what the point is when damage is faster than regeneration.
A 2015 article in Antioxidants suggests that there is more to aging than wear and tear. Instead, it says that many factors interact with one another to progress or slow aging. Therefore, it might help to look at what factors slow and progress the aging process.
Factors that slow aging
Inside Creative House/Shutterstock
According to Healthline, better nutrition and hygiene, improved access to health care, and medical breakthroughs have increased life expectancy around the world. One way to improve your health is through your diet. Eating fruits, vegetables, whole grains, and lean protein will slow some natural aging. Try to eat food that is natural, rather than processed, according to WebMD.
Blood pressure and cholesterol rise as muscle mass and our nervous system decline with age, according to Harvard Health Publishing. Endurance exercise can protect your body from some of the metabolic effects of age by reducing body fat, lowering blood glucose, and reducing cholesterol. Weight training improves muscle mass and bone strength, and flexibility and balance training help prevent injuries.
According to National Institute on Aging, you can slow aging and improve your cognitive health by reading books, taking classes, or learning a new hobby. Because chronic stress can affect your brain, find ways to reduce your stress such as journal writing, breath practices, or mindfulness meditation.
Factors that accelerate aging
fizkes/Shutterstock
WebMD says cigarette smoking leads to heart disease and lung disorders. Smoking also can make you biologically age one and a half times faster than non-smokers, according to a 2018 study in the European Respiratory Journal. Smoking also makes your skin age faster, which means more wrinkles (via Mayo Clinic).
A beer or a glass of wine after a hard day of work might be a nightly habit, but drinking more than that over time can lead to health problems such as cancer, liver damage, and immune system disorders, according to the National Institute on Aging. Alcohol can also make certain health conditions worse such as high blood pressure, osteoporosis, and mood disorders.
If you're sleep-deprived now, you might find your body will age faster, according to the American Academy of Sleep Medicine. Missing your required seven hours of sleep a night can age cells, which can lead to conditions such as multiple sclerosis, heart disease, and cancer.
Mindset sometimes matters
Evgeny Atamanenko/Shutterstock
The wear-and-tear theory of aging might focus on biological aging, but what about psychological aging? Harvard University's Ellen Langer conducted a landmark study in the 1970s where she had a group of men live in an environment with historical cues similar to 22 years earlier. By living in an environment that reminded them of their youth, the men's sight improved and they sat taller. One man who needed a wheelchair walked out with a cane (via The New York Times Magazine).
According to Baystate Health, your attitude toward aging can influence your health. In other words, if you believe that old people can't move or think, you could create this reality within yourself. Instead, you can change your stereotype of what an old person can do and find inspirational role models of aging. Having religious or spiritual beliefs can also create a positive mindset, which can increase longevity. Spending more time with positive people and nurturing good relationships can also improve your psychological health.