Since some of my family and friends who don't have food allergies are also trying recipes from here, from now on I'll include the baking times and any special instructions for normal baking too. There isn't much difference between the two versions because I deliberately pick recipes that don't require much change.
For these cookies, you can use whatever citrus fruit you have on hand! Oranges, lemons, they're all fine.
1. Preheat oven to 325°F and line two baking sheets with parchment paper or aluminum foil. Or, if you're like my tipsy friend, with both!
2. Beat the butter and sugar together on medium speed in a mixer for 5 minutes.
3. Mix in the vanilla and citrus zest.
4. Mix in salt. Stir in the flour and cocoa powder, then beat for 2 minutes. The dough will be somewhat soft and sticky. If it's too hard to work with, you can put it in the freezer for 10 minutes.
5. If you're feeling fancy, you can roll out the dough between two sheets of parchment paper to 1/4-inch thickness and use cookie cutters to make nice shapes. I'm lazy, so I just shaped the dough into 1-inch balls and squashed them into circles. Regardless of how you get cookies, space them 1 inch apart on the baking sheets.
6. Bake for 15-20 minutes if gluten-free OR 13-15 minutes if not. The cookies are done when the sides are slightly firm but still have some give when nudged with a fork. The center will be soft if poked, but the cookies will firm up as they cool.


Non-gmo, "naturally" raised goat on the menu today, so no salmon oil capsules. We also finished a liver detox with milk thistle extract. I normally give the supplements before they eat. Poor Miras kept waiting to eat and had to be repeatedly told it was ok to eat. She knew a step was being skipped and didn't want to be in trouble.
We are out of fish oil caps too, but I only give them maybe three times a week. Other than that, I have recently started giving ours spirulina for environmental allergies, and it seems to have done the job. I've never been big on supplements other than fish oil, but it really has worked well as an antihistamine. Once I get to order meats online that's much better quality I will possibly stop the fish oil, or at least back it off even more.
I'm not against supplementing if there proves to be a need (and you've done your research on the product). Every dog is different. Of course, some supplements are unnecessary and then there is the possibility of certain ones canceling each other out... And some can be downright harmful (especially if overdosed). A little research can go a long way in making the right decisions.
Salmon oil is the main supplement we use. Others include milk thistle extract and probiotics.
salmon oil is good suplement were use, it can improve the quality and shine of his fur.


Bronze Faucet With Stainless Sink have 50 picture of interior design, it's including Bronze Faucet With Stainless Sink Extraordinary Cambria Quartz Countertop Pinterest Interior Design 1. Bronze Faucet With Stainless Sink Dubious Avianfarms Interior Design 2. Bronze Faucet With Stainless Sink Amazing Interior Design 3. Bronze Faucet With Stainless Sink Phenomenal Oiled Steel Google Search Interior Design 4. Bronze Faucet With Stainless Sink Impressive Ecycleontario Interior Design 5.


text:
package kafka.manager

import akka.pattern._
import kafka.manager.features.KMDeleteTopicFeature
import java.util.concurrent.TimeUnit

import com.google.common.cache.{LoadingCache, CacheLoader, CacheBuilder}
import kafka.api.{PartitionOffsetRequestInfo, OffsetRequest}
import kafka.consumer.SimpleConsumer
import kafka.common.TopicAndPartition
import kafka.manager.utils.zero81.{ReassignPartitionCommand, PreferredReplicaLeaderElectionCommand}
import kafka.manager.utils.ZkUtils
import org.apache.curator.framework.recipes.cache.PathChildrenCache.StartMode
import org.apache.curator.framework.recipes.cache._
import org.apache.curator.framework.CuratorFramework
import org.joda.time.{DateTimeZone, DateTime}
import org.slf4j.{LoggerFactory, Logger}

import scala.collection.mutable
import scala.concurrent.{ExecutionContext, Future}
import scala.util.{Success, Failure, Try}

/**
 * @author hiral
 */
import ActorModel._
import kafka.manager.utils._
import scala.collection.JavaConverters._

trait OffsetCache {

  def getCacheTimeoutSecs: Int

  def getSimpleConsumerSocketTimeoutMillis: Int

  protected[this] implicit def ec: ExecutionContext

  protected[this] lazy val log : Logger = LoggerFactory.getLogger(this.getClass)

  protected[this] val loadOffsets: Boolean

  // Caches a map of partitions to offsets at a key that is the topic's name.
  private[this] val partitionOffsetsCache: LoadingCache[String, Future[PartitionOffsetsCapture]] = CacheBuilder.newBuilder()
    .expireAfterWrite(getCacheTimeoutSecs,TimeUnit.SECONDS) // TODO - update more or less often maybe, or make it configurable
    .build(
      new CacheLoader[String,Future[PartitionOffsetsCapture]] {
        def load(topic: String): Future[PartitionOffsetsCapture] = {
          if (loadOffsets)
            loadPartitionOffsets(topic)
          else
            emptyPartitionOffsetsCapture
        }
      }
    )

  // Get the latest offsets for the partitions of the topic,
  // Code based off of the GetOffsetShell tool in kafka.tools, kafka 0.8.2.1
  private[this] def loadPartitionOffsets(topic: String): Future[PartitionOffsetsCapture] = {
    // Get partition leader broker information
    val optPartitionsWithLeaders : Option[List[(Int, Option[BrokerIdentity])]] = getTopicPartitionLeaders(topic)

    val clientId = "partitionOffsetGetter"
    val time = -1
    val nOffsets = 1
    val simpleConsumerBufferSize = 256 * 1024

    val partitionsByBroker = optPartitionsWithLeaders.map {
      listOfPartAndBroker => listOfPartAndBroker.collect {
        case (part, broker) if broker.isDefined => (broker.get, part)
      }.groupBy(_._1)
    }

    def getSimpleConsumer(bi: BrokerIdentity) =
      new SimpleConsumer(bi.host, bi.port, getSimpleConsumerSocketTimeoutMillis, 256 * 1024, clientId)

    // Get the latest offset for each partition
    val futureMap: Future[PartitionOffsetsCapture] = {
      partitionsByBroker.fold[Future[PartitionOffsetsCapture]]{
        Future.failed(new IllegalArgumentException(s"Do not have partitions and their leaders for topic $topic"))
      } { partitionsWithLeaders =>
        try {
          val listOfFutures = partitionsWithLeaders.toList.map(tpl => (getSimpleConsumer(tpl._1), tpl._2)).map {
            case (simpleConsumer, parts) =>
              val f: Future[Map[Int, Option[Long]]] = Future {
                try {
                  val topicAndPartitions = parts.map(tpl => (TopicAndPartition(topic, tpl._2), PartitionOffsetRequestInfo(time, nOffsets)))
                  val request = OffsetRequest(topicAndPartitions.toMap)
                  simpleConsumer.getOffsetsBefore(request).partitionErrorAndOffsets.map(tpl => (tpl._1.asTuple._2, tpl._2.offsets.headOption))
                } finally {
                  simpleConsumer.close()
                }
              }
              f.recover { case t =>
                log.error(s"[topic=$topic] An error has occurred while getting topic offsets from broker $parts", t)
                Map.empty[Int, Option[Long]]
              }
          }
          val result: Future[Map[Int, Option[Long]]] = Future.sequence(listOfFutures).map(_.foldRight(Map.empty[Int, Option[Long]])((b, a) => b ++ a))
          result.map(m => PartitionOffsetsCapture(System.currentTimeMillis(), m.mapValues(_.getOrElse(0L))))
        }
        catch {
          case e: Exception =>
            log.error(s"Failed to get offsets for topic $topic", e)
            Future.failed(e)
        }
      }
    }

    futureMap onFailure {
      case t => log.error(s"[topic=$topic] An error has occurred while getting topic offsets", t)
    }
    futureMap
  }

  private[this] def emptyPartitionOffsetsCapture: Future[PartitionOffsetsCapture] = Future.successful(PartitionOffsetsCapture(System.currentTimeMillis(), Map()))

  protected def getTopicPartitionLeaders(topic: String) : Option[List[(Int, Option[BrokerIdentity])]]

  protected def getTopicDescription(topic: String) : Option[TopicDescription]

  def start()

  def stop()

  def getTopicPartitionOffsets(topic: String) : Future[PartitionOffsetsCapture] = partitionOffsetsCache.get(topic)

  def lastUpdateMillis : Long

  def getConsumerDescription(consumer: String) : Option[ConsumerDescription]

  def getConsumedTopicDescription(consumer:String, topic:String) : ConsumedTopicDescription

  def getConsumerList: ConsumerList
}

case class OffsetCacheActive(curator: CuratorFramework,
                                  clusterContext: ClusterContext,
                                  partitionLeaders: String => Option[List[(Int, Option[BrokerIdentity])]],
                                  topicDescriptions: String => Option[TopicDescription],
                                  cacheTimeoutSecs: Int,
                                  socketTimeoutMillis: Int)
                                 (implicit protected[this] val ec: ExecutionContext) extends OffsetCache {

  def getCacheTimeoutSecs: Int = cacheTimeoutSecs

  def getSimpleConsumerSocketTimeoutMillis: Int = socketTimeoutMillis

  val loadOffsets = clusterContext.config.pollConsumers

  private[this] val consumersTreeCacheListener = new TreeCacheListener {
    override def childEvent(client: CuratorFramework, event: TreeCacheEvent): Unit = {
      event.getType match {
        case TreeCacheEvent.Type.INITIALIZED | TreeCacheEvent.Type.NODE_ADDED |
             TreeCacheEvent.Type.NODE_REMOVED | TreeCacheEvent.Type.NODE_UPDATED =>
          consumersTreeCacheLastUpdateMillis = System.currentTimeMillis()
        case _ =>
        //do nothing
      }
    }
  }

  private[this] val consumersTreeCache = new TreeCache(curator, ZkUtils.ConsumersPath)

  @volatile
  private[this] var consumersTreeCacheLastUpdateMillis : Long = System.currentTimeMillis()

  private[this] def withConsumersTreeCache[T](fn: TreeCache => T) : Option[T] = {
    Option(fn(consumersTreeCache))
  }

  protected def getTopicPartitionLeaders(topic: String) : Option[List[(Int, Option[BrokerIdentity])]] = partitionLeaders(topic)

  protected def getTopicDescription(topic: String) : Option[TopicDescription] = topicDescriptions(topic)

  def start():  Unit = {
    log.info("Starting consumers tree cache...")
    consumersTreeCache.start()

    log.info("Adding consumers tree cache listener...")
    consumersTreeCache.getListenable.addListener(consumersTreeCacheListener)
  }

  def stop(): Unit = {
    log.info("Removing consumers tree cache listener...")
    Try(consumersTreeCache.getListenable.removeListener(consumersTreeCacheListener))

    log.info("Shutting down consumers tree cache...")
    Try(consumersTreeCache.close())
  }

  def lastUpdateMillis : Long = consumersTreeCacheLastUpdateMillis

  def getConsumerDescription(consumer: String) : Option[ConsumerDescription] = {
    val offsetPath = "%s/%s/%s".format(ZkUtils.ConsumersPath,consumer,"offsets")
    val topicOffsetOption : Option[Map[String, ChildData]] = Option(consumersTreeCache.getCurrentChildren(offsetPath)).map(_.asScala.toMap)

    val topicDescriptions: Option[Map[String, ConsumedTopicDescription]] =
      topicOffsetOption.map[List[(String, ConsumedTopicDescription)]] { topics: Map[String, ChildData] =>
        for {
          topicAndData: (String, ChildData) <- topics.toList
          topicDesc = getConsumedTopicDescription(consumer, topicAndData._1)
        } yield (topicAndData._1, topicDesc)
      }.map(_.toMap)

    topicDescriptions.map(ConsumerDescription(consumer, _))
  }

  def getConsumedTopicDescription(consumer:String, topic:String) : ConsumedTopicDescription = {
    val offsetPath = "%s/%s/%s/%s".format(ZkUtils.ConsumersPath, consumer, "offsets", topic)
    val ownerPath = "%s/%s/%s/%s".format(ZkUtils.ConsumersPath, consumer, "owners", topic)
    val partitionOffsets: Option[Map[Int, Long]] = for {
      offsetsByPartition: Map[String, ChildData] <- Option(consumersTreeCache.getCurrentChildren(offsetPath)).map(_.asScala.toMap)
      offsets : Map[Int, Long] = offsetsByPartition map {case (part, data) => (part.toInt, Option(data.getData).map(asString).getOrElse("-1").toLong)}
    } yield offsets

    val partitionOwners: Option[Map[Int, String]] = for {
      ownersByPartition: Map[String, ChildData] <- Option(consumersTreeCache.getCurrentChildren(ownerPath)).map(_.asScala.toMap)
      owners : Map[Int, String] = ownersByPartition map { case (part, data) => (part.toInt, Option(data.getData).map(asString).getOrElse("")) }
    } yield owners

    val optTopic = getTopicDescription(topic)
    val numPartitions: Int = math.max(optTopic.flatMap(_.partitionState.map(_.size)).getOrElse(0),
      partitionOffsets.map(_.size).getOrElse(0))
    ConsumedTopicDescription(consumer, topic, numPartitions, optTopic, partitionOwners, partitionOffsets)
  }

  def getConsumerList: ConsumerList = {
    withConsumersTreeCache { cache =>
      cache.getCurrentChildren(ZkUtils.ConsumersPath)
    }.fold {
      ConsumerList(IndexedSeq.empty, clusterContext)
    } { data: java.util.Map[String, ChildData] =>
      val filteredList: IndexedSeq[String] = data.asScala.filter{
        case (consumer, childData) =>
          if (clusterContext.config.filterConsumers)
          // Defining "inactive consumer" as a consumer that is missing one of three children ids/ offsets/ or owners/
            childData.getStat.getNumChildren > 2
          else true
      }.keySet.toIndexedSeq
      ConsumerList(filteredList, clusterContext)
    }
  }
}

case class OffsetCachePassive(curator: CuratorFramework,
                             clusterContext: ClusterContext,
                             partitionLeaders: String => Option[List[(Int, Option[BrokerIdentity])]],
                             topicDescriptions: String => Option[TopicDescription],
                             cacheTimeoutSecs: Int,
                             socketTimeoutMillis: Int)
                            (implicit protected[this] val ec: ExecutionContext) extends OffsetCache {

  def getCacheTimeoutSecs: Int = cacheTimeoutSecs

  def getSimpleConsumerSocketTimeoutMillis: Int = socketTimeoutMillis

  val loadOffsets = clusterContext.config.pollConsumers

  private[this] val consumersPathChildrenCacheListener = new PathChildrenCacheListener {
    override def childEvent(client: CuratorFramework, event: PathChildrenCacheEvent): Unit = {
      event.getType match {
        case PathChildrenCacheEvent.Type.INITIALIZED | PathChildrenCacheEvent.Type.CHILD_ADDED |
             PathChildrenCacheEvent.Type.CHILD_REMOVED | PathChildrenCacheEvent.Type.CHILD_UPDATED =>
          consumersTreeCacheLastUpdateMillis = System.currentTimeMillis()
        case _ =>
        //do nothing
      }
    }
  }

  private[this] val consumersPathChildrenCache = new PathChildrenCache(curator, ZkUtils.ConsumersPath, true)

  @volatile
  private[this] var consumersTreeCacheLastUpdateMillis : Long = System.currentTimeMillis()

  private[this] def withConsumersPathChildrenCache[T](fn: PathChildrenCache => T) : Option[T] = {
    Option(fn(consumersPathChildrenCache))
  }

  protected def getTopicPartitionLeaders(topic: String) : Option[List[(Int, Option[BrokerIdentity])]] = partitionLeaders(topic)

  protected def getTopicDescription(topic: String) : Option[TopicDescription] = topicDescriptions(topic)

  def start():  Unit = {
    log.info("Starting consumers path children cache...")
    consumersPathChildrenCache.start(StartMode.BUILD_INITIAL_CACHE)

    log.info("Adding consumers path children cache listener...")
    consumersPathChildrenCache.getListenable.addListener(consumersPathChildrenCacheListener)
  }

  def stop(): Unit = {
    log.info("Removing consumers path children cache listener...")
    Try(consumersPathChildrenCache.getListenable.removeListener(consumersPathChildrenCacheListener))

    log.info("Shutting down consumers path children cache...")
    Try(consumersPathChildrenCache.close())
  }

  def lastUpdateMillis : Long = consumersTreeCacheLastUpdateMillis

  def getConsumerDescription(consumer: String) : Option[ConsumerDescription] = {
    val offsetPath = "%s/%s/%s".format(ZkUtils.ConsumersPath,consumer,"offsets")
    val topicOffsetOption : Option[List[String]] = Try(Option(curator.getChildren.forPath(offsetPath)).map(_.asScala.toList)).toOption.flatten

    val topicDescriptions: Option[Map[String, ConsumedTopicDescription]] = topicOffsetOption.map {
      topics =>
        topics.map { topic =>
          val topicDesc = getConsumedTopicDescription(consumer, topic)
          (topic, topicDesc)
        }.toMap
    }

    topicDescriptions.map(ConsumerDescription(consumer, _))
  }

  private[this] def readConsumerOffsetByTopicPartition(consumer: String, topic: String, tpi: Map[Int, TopicPartitionIdentity]) : Map[Int, Long] = {
    tpi.map {
      case (p, _) =>
        val offsetPath = "%s/%s/%s/%s/%s".format(ZkUtils.ConsumersPath, consumer, "offsets", topic, p)
        (p, ZkUtils.readDataMaybeNull(curator, offsetPath)._1.map(_.toLong).getOrElse(-1L))
    }
  }

  private[this] def readConsumerOwnerByTopicPartition(consumer: String, topic: String, tpi: Map[Int, TopicPartitionIdentity]) : Map[Int, String] = {
    tpi.map {
      case (p, _) =>
        val ownerPath = "%s/%s/%s/%s/%s".format(ZkUtils.ConsumersPath, consumer, "owners", topic, p)
        (p, ZkUtils.readDataMaybeNull(curator, ownerPath)._1.orNull)
    }.filter(_._2 != null)
  }

  def getConsumedTopicDescription(consumer:String, topic:String) : ConsumedTopicDescription = {
    val optTopic = getTopicDescription(topic)
    val optTpi = optTopic.map(TopicIdentity.getTopicPartitionIdentity(_, None))
    val partitionOffsets = for {
      td <- optTopic
      tpi <- optTpi
    } yield {
      readConsumerOffsetByTopicPartition(consumer, topic, tpi)
    }
    val partitionOwners = for {
      td <- optTopic
      tpi <- optTpi
    } yield {
      readConsumerOwnerByTopicPartition(consumer, topic, tpi)
    }

    val numPartitions: Int = math.max(optTopic.flatMap(_.partitionState.map(_.size)).getOrElse(0),
      partitionOffsets.map(_.size).getOrElse(0))
    ConsumedTopicDescription(consumer, topic, numPartitions, optTopic, partitionOwners, partitionOffsets)
  }

  def getConsumerList: ConsumerList = {
    withConsumersPathChildrenCache { cache =>
      val currentData = cache.getCurrentData
      currentData
    }.fold {
      ConsumerList(IndexedSeq.empty, clusterContext)
    } { data: java.util.List[ChildData] =>
      ConsumerList(data.asScala.map(cd => cd.getPath.split("/").last).toIndexedSeq, clusterContext)
    }
  }
}

case class KafkaStateActorConfig(curator: CuratorFramework,
                                 clusterContext: ClusterContext,
                                 longRunningPoolConfig: LongRunningPoolConfig,
                                 partitionOffsetCacheTimeoutSecs: Int, simpleConsumerSocketTimeoutMillis: Int)
class KafkaStateActor(config: KafkaStateActorConfig) extends BaseQueryCommandActor with LongRunningPoolActor {

  override protected def longRunningPoolConfig: LongRunningPoolConfig = config.longRunningPoolConfig

  override protected def longRunningQueueFull(): Unit = {
    log.error("Long running pool queue full, skipping!")
  }

  // e.g. /brokers/topics/analytics_content/partitions/0/state
  private[this] val topicsTreeCache = new TreeCache(config.curator,ZkUtils.BrokerTopicsPath)

  private[this] val topicsConfigPathCache = new PathChildrenCache(config.curator,ZkUtils.TopicConfigPath,true)

  private[this] val brokersPathCache = new PathChildrenCache(config.curator,ZkUtils.BrokerIdsPath,true)

  private[this] val adminPathCache = new PathChildrenCache(config.curator,ZkUtils.AdminPath,true)

  private[this] val deleteTopicsPathCache = new PathChildrenCache(config.curator, ZkUtils.DeleteTopicsPath,true)

  @volatile
  private[this] var topicsTreeCacheLastUpdateMillis : Long = System.currentTimeMillis()

  private[this] val topicsTreeCacheListener = new TreeCacheListener {
    override def childEvent(client: CuratorFramework, event: TreeCacheEvent): Unit = {
      event.getType match {
        case TreeCacheEvent.Type.INITIALIZED | TreeCacheEvent.Type.NODE_ADDED |
             TreeCacheEvent.Type.NODE_REMOVED | TreeCacheEvent.Type.NODE_UPDATED =>
          topicsTreeCacheLastUpdateMillis = System.currentTimeMillis()
        case _ =>
        //do nothing
      }
    }
  }

  @volatile
  private[this] var preferredLeaderElection : Option[PreferredReplicaElection] = None

  @volatile
  private[this] var reassignPartitions : Option[ReassignPartitions] = None

  private[this] val adminPathCacheListener = new PathChildrenCacheListener {
    override def childEvent(client: CuratorFramework, event: PathChildrenCacheEvent): Unit = {
      log.info(s"Got event : ${event.getType} path=${Option(event.getData).map(_.getPath)}")
      event.getType match {
        case PathChildrenCacheEvent.Type.INITIALIZED =>
          event.getInitialData.asScala.foreach { cd: ChildData =>
            updatePreferredLeaderElection(cd)
            updateReassignPartition(cd)
          }
        case PathChildrenCacheEvent.Type.CHILD_ADDED | PathChildrenCacheEvent.Type.CHILD_UPDATED =>
          updatePreferredLeaderElection(event.getData)
          updateReassignPartition(event.getData)
        case PathChildrenCacheEvent.Type.CHILD_REMOVED =>
          endPreferredLeaderElection(event.getData)
          endReassignPartition(event.getData)
        case _ =>
        //do nothing
      }
    }

    private[this] def updatePreferredLeaderElection(cd: ChildData): Unit = {
      if(cd != null && cd.getPath.endsWith(ZkUtils.PreferredReplicaLeaderElectionPath)) {
        Try {
          self ! KSUpdatePreferredLeaderElection(cd.getStat.getMtime, cd.getData)
        }
      }
    }

    private[this] def updateReassignPartition(cd: ChildData): Unit = {
      if(cd != null && cd.getPath.endsWith(ZkUtils.ReassignPartitionsPath)) {
        Try {
          self ! KSUpdateReassignPartition(cd.getStat.getMtime, cd.getData)
        }
      }
    }

    private[this] def endPreferredLeaderElection(cd: ChildData): Unit = {
      if(cd != null && cd.getPath.endsWith(ZkUtils.PreferredReplicaLeaderElectionPath)) {
        Try {
          self ! KSEndPreferredLeaderElection(cd.getStat.getMtime)
        }
      }
    }

    private[this] def endReassignPartition(cd: ChildData): Unit = {
      if(cd != null && cd.getPath.endsWith(ZkUtils.ReassignPartitionsPath)) {
        Try {
          self ! KSEndReassignPartition(cd.getStat.getMtime)
        }
      }
    }
  }

  private[this] val offsetCache: OffsetCache = {
    if(config.clusterContext.config.activeOffsetCacheEnabled)
      new OffsetCacheActive(
        config.curator,
        config.clusterContext,
        getPartitionLeaders,
        getTopicDescription,
        config.partitionOffsetCacheTimeoutSecs,
        config.simpleConsumerSocketTimeoutMillis)(longRunningExecutionContext)
    else
      new OffsetCachePassive(
        config.curator,
        config.clusterContext,
        getPartitionLeaders,
        getTopicDescription,
        config.partitionOffsetCacheTimeoutSecs,
        config .simpleConsumerSocketTimeoutMillis)(longRunningExecutionContext)
  }

  @scala.throws[Exception](classOf[Exception])
  override def preStart() = {
    log.info(config.toString)
    log.info("Started actor %s".format(self.path))
    log.info("Starting topics tree cache...")
    topicsTreeCache.start()
    log.info("Starting topics config path cache...")
    topicsConfigPathCache.start(StartMode.BUILD_INITIAL_CACHE)
    log.info("Starting brokers path cache...")
    brokersPathCache.start(StartMode.BUILD_INITIAL_CACHE)
    log.info("Starting admin path cache...")
    adminPathCache.start(StartMode.BUILD_INITIAL_CACHE)
    log.info("Starting delete topics path cache...")
    deleteTopicsPathCache.start(StartMode.BUILD_INITIAL_CACHE)

    log.info("Adding topics tree cache listener...")
    topicsTreeCache.getListenable.addListener(topicsTreeCacheListener)
    log.info("Adding admin path cache listener...")
    adminPathCache.getListenable.addListener(adminPathCacheListener)

    if (config.clusterContext.config.pollConsumers) {
      log.info("Starting offset cache...")
      offsetCache.start()
    }
  }

  @scala.throws[Exception](classOf[Exception])
  override def preRestart(reason: Throwable, message: Option[Any]) {
    log.error(reason, "Restarting due to [{}] when processing [{}]",
      reason.getMessage, message.getOrElse(""))
    super.preRestart(reason, message)
  }

  @scala.throws[Exception](classOf[Exception])
  override def postStop(): Unit = {
    log.info("Stopped actor %s".format(self.path))

    if (config.clusterContext.config.pollConsumers) {
      log.info("Stopping offset cache...")
      Try(offsetCache.stop())
    }

    log.info("Removing admin path cache listener...")
    Try(adminPathCache.getListenable.removeListener(adminPathCacheListener))
    log.info("Removing topics tree cache listener...")
    Try(topicsTreeCache.getListenable.removeListener(topicsTreeCacheListener))

    log.info("Shutting down delete topics path cache...")
    Try(deleteTopicsPathCache.close())
    log.info("Shutting down admin path cache...")
    Try(adminPathCache.close())
    log.info("Shutting down brokers path cache...")
    Try(brokersPathCache.close())
    log.info("Shutting down topics config path cache...")
    Try(topicsConfigPathCache.close())
    log.info("Shutting down topics tree cache...")
    Try(topicsTreeCache.close())

    super.postStop()
  }

  def getTopicZookeeperData(topic: String): Option[(Int,String)] = {
    val topicPath = "%s/%s".format(ZkUtils.BrokerTopicsPath,topic)
    Option(topicsTreeCache.getCurrentData(topicPath)).map( childData => (childData.getStat.getVersion,asString(childData.getData)))
  }

  def getTopicDescription(topic: String) : Option[TopicDescription] = {
    for {
      description <- getTopicZookeeperData(topic)
      partitionsPath = "%s/%s/partitions".format(ZkUtils.BrokerTopicsPath, topic)
      partitions: Map[String, ChildData] <- Option(topicsTreeCache.getCurrentChildren(partitionsPath)).map(_.asScala.toMap)
      states : Map[String, String] = partitions flatMap { case (part, _) =>
        val statePath = s"$partitionsPath/$part/state"
        Option(topicsTreeCache.getCurrentData(statePath)).map(cd => (part, asString(cd.getData)))
      }
      partitionOffsets = offsetCache.getTopicPartitionOffsets(topic)
      topicConfig = getTopicConfigString(topic)
    } yield TopicDescription(topic, description, Option(states), partitionOffsets, topicConfig)
  }

  def getPartitionLeaders(topic: String) : Option[List[(Int, Option[BrokerIdentity])]] = {
    val partitionsPath = "%s/%s/partitions".format(ZkUtils.BrokerTopicsPath, topic)
    val partitions: Option[Map[String, ChildData]] = Option(topicsTreeCache.getCurrentChildren(partitionsPath)).map(_.asScala.toMap)
    val states : Option[Iterable[(String, String)]] =
      partitions.map[Iterable[(String,String)]]{ partMap: Map[String, ChildData] =>
        partMap.flatMap { case (part, _) =>
          val statePath = s"$partitionsPath/$part/state"
          Option(topicsTreeCache.getCurrentData(statePath)).map(cd => (part, asString(cd.getData)))
        }
      }
    val targetBrokers : IndexedSeq[BrokerIdentity] = getBrokers

    import org.json4s.jackson.JsonMethods.parse
    import org.json4s.scalaz.JsonScalaz.field
    states.map(_.map{case (part, state) =>
      val partition = part.toInt
      val descJson = parse(state)
      val leaderID = field[Int]("leader")(descJson).fold({ e =>
        log.error(s"[topic=$topic] Failed to get partitions from topic json $state"); 0}, identity)
      val leader = targetBrokers.find(_.id == leaderID)
      (partition, leader)
    }.toList)
  }

  private[this] def getTopicConfigString(topic: String) : Option[(Int,String)] = {
    val data: mutable.Buffer[ChildData] = topicsConfigPathCache.getCurrentData.asScala
    val result: Option[ChildData] = data.find(p => p.getPath.endsWith(topic))
    result.map(cd => (cd.getStat.getVersion,asString(cd.getData)))
  }

  override def processActorResponse(response: ActorResponse): Unit = {
    response match {
      case any: Any => log.warning("ksa : processActorResponse : Received unknown message: {}", any.toString)
    }
  }

  private[this] def getBrokers : IndexedSeq[BrokerIdentity] = {
    val data: mutable.Buffer[ChildData] = brokersPathCache.getCurrentData.asScala
    data.map { cd =>
      BrokerIdentity.from(nodeFromPath(cd.getPath).toInt, asString(cd.getData))
    }.filter { v =>
      v match {
        case scalaz.Failure(nel) =>
          log.error(s"Failed to parse broker config $nel")
          false
        case _ => true
      }
    }.collect {
      case scalaz.Success(bi) => bi
    }.toIndexedSeq.sortBy(_.id)
  }

  private[this] def asyncPipeToSender[T](fn: => T):  Unit = {
    implicit val ec = longRunningExecutionContext
    val result: Future[T] = Future {
      fn
    }
    result pipeTo sender
  }

  override def processQueryRequest(request: QueryRequest): Unit = {
    request match {
      case KSGetTopics =>
        val deleteSet: Set[String] = {
          if(config.clusterContext.clusterFeatures.features(KMDeleteTopicFeature)) {
            val deleteTopicsData: mutable.Buffer[ChildData] = deleteTopicsPathCache.getCurrentData.asScala
            deleteTopicsData.map { cd =>
              nodeFromPath(cd.getPath)
            }.toSet
          } else {
            Set.empty
          }
        }
        withTopicsTreeCache { cache =>
          cache.getCurrentChildren(ZkUtils.BrokerTopicsPath)
        }.fold {
          sender ! TopicList(IndexedSeq.empty, deleteSet, config.clusterContext)
        } { data: java.util.Map[String, ChildData] =>
          sender ! TopicList(data.asScala.keySet.toIndexedSeq, deleteSet, config.clusterContext)
        }

      case KSGetConsumers =>
        asyncPipeToSender {
          offsetCache.getConsumerList
        }

      case KSGetTopicConfig(topic) =>
        sender ! TopicConfig(topic, getTopicConfigString(topic))

      case KSGetTopicDescription(topic) =>
        sender ! getTopicDescription(topic)

      case KSGetTopicDescriptions(topics) =>
        sender ! TopicDescriptions(topics.toIndexedSeq.flatMap(getTopicDescription), topicsTreeCacheLastUpdateMillis)

      case KSGetConsumerDescription(consumer) =>
        asyncPipeToSender {
          offsetCache.getConsumerDescription(consumer)
        }

      case KSGetConsumedTopicDescription(consumer, topic) =>
        asyncPipeToSender {
          offsetCache.getConsumedTopicDescription(consumer, topic)
        }

      case KSGetAllTopicDescriptions(lastUpdateMillisOption) =>
        val lastUpdateMillis = lastUpdateMillisOption.getOrElse(0L)
        //since we want to update offsets, let's do so if last update plus offset cache timeout is before current time
        if (topicsTreeCacheLastUpdateMillis > lastUpdateMillis || ((topicsTreeCacheLastUpdateMillis + (config.partitionOffsetCacheTimeoutSecs * 1000)) < System.currentTimeMillis())) {
          //we have option here since there may be no topics at all!
          withTopicsTreeCache {  cache: TreeCache =>
            cache.getCurrentChildren(ZkUtils.BrokerTopicsPath)
          }.fold {
            sender ! TopicDescriptions(IndexedSeq.empty, topicsTreeCacheLastUpdateMillis)
          } { data: java.util.Map[String, ChildData] =>
            sender ! TopicDescriptions(data.asScala.keys.toIndexedSeq.flatMap(getTopicDescription), topicsTreeCacheLastUpdateMillis)
          }
        } // else no updates to send

      case KSGetAllConsumerDescriptions(lastUpdateMillisOption) =>
        val lastUpdateMillis = lastUpdateMillisOption.getOrElse(0L)
        if (offsetCache.lastUpdateMillis > lastUpdateMillis) {
          asyncPipeToSender {
            ConsumerDescriptions(offsetCache
              .getConsumerList
              .list
              .flatMap(c => offsetCache.getConsumerDescription(c)), offsetCache.lastUpdateMillis)
          }
        }

      case KSGetTopicsLastUpdateMillis =>
        sender ! topicsTreeCacheLastUpdateMillis

      case KSGetBrokers =>
        sender ! BrokerList(getBrokers, config.clusterContext)

      case KSGetPreferredLeaderElection =>
        sender ! preferredLeaderElection

      case KSGetReassignPartition =>
        sender ! reassignPartitions

      case any: Any => log.warning("ksa : processQueryRequest : Received unknown message: {}", any.toString)
    }
  }

  override def processCommandRequest(request: CommandRequest): Unit = {
    request match {
      case KSUpdatePreferredLeaderElection(millis,json) =>
        safeExecute {
          val s: Set[TopicAndPartition] = PreferredReplicaLeaderElectionCommand.parsePreferredReplicaElectionData(json)
          preferredLeaderElection.fold {
            //nothing there, add as new
            preferredLeaderElection = Some(PreferredReplicaElection(getDateTime(millis), s, None, config.clusterContext))
          } {
            existing =>
              existing.endTime.fold {
                //update without end? Odd, copy existing
                preferredLeaderElection = Some(existing.copy(topicAndPartition = existing.topicAndPartition ++ s))
              } { _ =>
                //new op started
                preferredLeaderElection = Some(PreferredReplicaElection(getDateTime(millis), s, None, config.clusterContext))
              }
          }
        }
      case KSUpdateReassignPartition(millis,json) =>
        safeExecute {
          val m : Map[TopicAndPartition, Seq[Int]] = ReassignPartitionCommand.parsePartitionReassignmentZkData(json)
          reassignPartitions.fold {
            //nothing there, add as new
            reassignPartitions = Some(ReassignPartitions(getDateTime(millis),m, None, config.clusterContext))
          } {
            existing =>
              existing.endTime.fold {
                //update without end? Odd, copy existing
                reassignPartitions = Some(existing.copy(partitionsToBeReassigned = existing.partitionsToBeReassigned ++ m))
              } { _ =>
                //new op started
                reassignPartitions = Some(ReassignPartitions(getDateTime(millis),m, None, config.clusterContext))
              }
          }
        }
      case KSEndPreferredLeaderElection(millis) =>
        safeExecute {
          preferredLeaderElection.foreach { existing =>
            preferredLeaderElection = Some(existing.copy(endTime = Some(getDateTime(millis))))
          }
        }
      case KSEndReassignPartition(millis) =>
        safeExecute {
          reassignPartitions.foreach { existing =>
            reassignPartitions = Some(existing.copy(endTime = Some(getDateTime(millis))))
          }
        }
      case any: Any => log.warning("ksa : processCommandRequest : Received unknown message: {}", any.toString)
    }
  }

  private[this] def getDateTime(millis: Long) : DateTime = new DateTime(millis,DateTimeZone.UTC)

  private[this] def safeExecute(fn: => Any) : Unit = {
    Try(fn) match {
      case Failure(t) =>
        log.error("Failed!",t)
      case Success(_) =>
      //do nothing
    }
  }

  private[this] def withTopicsTreeCache[T](fn: TreeCache => T) : Option[T] = {
    Option(fn(topicsTreeCache))
  }

}

redpajama_set_name: RedPajamaGithub


text:
JIM.fr – Live April 26: European Union is suing Astra
This daily watch allows you to quickly find some brief information about the current epidemic. Find all our articles on Covid-19
5:10 PM – Where is the pulse oximeter in the outpatient follow-up of Covid patients?
The General Directorate of Health publishes "Guidelines" for the use of pulse oximeters to monitor Covid + patients in the city.
Place the pulse oximeter in the follow-up of COVID-19 patients in the outpatient clinic
4:10 pm – delivery delay: European Commission takes legal action against AstraZeneca
The European Commission announces that it is in the process of taking legal action against AstraZeneca. " The terms of the contract were not respected and the company was not in a position to implement a reliable strategy to ensure the on-time delivery. »The European executive explains.
1 p.m. – Are the South African and Brazilian variants receding?
While visiting Roissy Airport, Jean Castex announced that the South African and Brazilian variants are "A little bit"And the"It tends to hold back"In France. Throughout the weekend, epidemiologists and infectious disease specialists reminded him of the latest data from Public Health France. Of course, we are not seeing an outbreak of these variants, but it is not yet time for a decline, rather a slight increase (4.2%, + 0.4%) Point).
1 p.m. – 2 hours left in quarantine for free: Good wrong idea?
At Le Parisien, epidemiologist Antoine Flahaut was questioned about the quarantine applied to travelers returning from 5 countries (India, Brazil, Chile, South Africa and Argentina).
It is estimated that two hours of " Freedom (From 10 AM until noon) granted to travelers is
Nonsense ». « It is two hours when the virus comes out. You must have the courage to go to the end of logic and create a complete airlock. Australia does this and it cannot be said to be a dictatorship. As long as there is no thorough vaccination, care must be taken. The slightest state can spread like wildfire through episodes of "super-breeding". "He considers it so.
READ Gabriel: A cafe opened in Paris in honor of New Zealand
12:00 PM – Travel between New Zealand and Australia has been suspended again
New Zealand was suspended on Friday, April 23rd.bubble"From the trips that I just opened with Australia after the re-emergence of the epidemic in Australia."According to our bubble protocols, travel between New Zealand and Western Australia has been suspendedHe thus refers to the New Zealand government in a press release.
11 a.m. – Details of upcoming vaccine deliveries in town
The General Directorate of Health is publishing a Memorandum outlining the organization of the following deliveries, in the city, of AstraZeneca and Johnson & Johnson vaccines.
Details of future deliveries of the vaccine that Janssen ordered on April 12 and 13 and about future deliveries of the AstraZeneca vaccine to pharmacists, clinicians and IDE
9:30 a.m. – Towards a lack of real-time interns in Ile-de-France?
While interns must change the training period on May 3, many heads of resuscitation services in Ile-de-France feel a shortage of trainees who would rather take internships in regions less affected by the pandemic.
9 AM – Update on immunization around the world
With regard to vaccination against Covid, the three countries that administered the most doses are: the United States (225,640,000 doses), China (220,310,000 doses), and India (138,380,000 doses). In terms of population, the countries that administered the largest doses were: Israel (120 doses per 100 population), United Arab Emirates (103.1 doses per 100 population), Chile (73.8 doses per 100 population). In France, 19,636,877 doses were administered (14,096,492 first injections and 5,539,585 second injections), or approximately 29.3 doses per 100 population.
READ It's time to re-launch pluralism
8am – France situation update
According to the latest data published by Public Health France last night, there are:
– 5,498,044 people who have tested positive for SARS-Cov-2 since March 1, 2020 (208,518 during the past seven days versus 230,846 in the previous seven days including 24,465 yesterday);
– 30,287 people were hospitalized due to Covid-19 (-502 balance during the past seven days versus + 118 in the previous seven days, and 881 people were admitted in the past 24 hours)
– 5,978 people in intensive care (+ 85 credit during the last 7 days versus + 55 during the previous seven days, 218 admissions in 24 hours);
– 102,887 people have died since March 1 (including 2,125 in the past seven days versus 1,984 in the previous seven days).
7 a.m. – worldwide update
According to data from Johns Hopkins University in Baltimore, 147,211,802 SARS-CoV-2 infections were identified worldwide last year (compared to 141,467,403 on April 19) and 3,110,124 associated deaths. With Covid-19 (versus 3,020,990 April 19.). The three countries with the most cases identified are the United States (31670353), India (17313163 versus 15.061805 on April 19), and Brazil (14340787 versus 13943.071 on April 19). The three countries that are heaviest in absolute terms are the United States (572,200 versus 567,217 deaths on April 19), Brazil (390,797 versus 373,335 on April 19), and Mexico (214,947 versus 212,339 deaths on April 19). April).
Previous First hydrogen bus ride to New Zealand
Next A woman is forced to leave a Hawaiian beach over a small target's bikini
Turkey does not release Osman Kavala despite the warning of the Council of Europe
Humanitarian aid begins to arrive in the Tonga Islands
After the eruption of the Tonga volcano, communications were damaged for at least a month
Tonga: the volcano and the disappearing island, photos
Red Bull joins Alinghi for a fantastic return to the America's Cup

redpajama_set_name: RedPajamaCommonCrawl


Before the panel dives into the substance of this issue, I'll take a few minutes to set the stage. It's no secret that the Department of Justice opposes the issuance of nationwide injunctions. But why is that? And how does this issue intersect with my own work there? I left private practice in 2017 to serve as the Assistant Attorney General leading the DOJ's Office of Legal Policy (or OLP). One of OLP's core functions is policy development and coordination for the Department of Justice, especially on issues that are top Departmental priorities. And one priority of this Department of Justice—from day one—has been upholding the rule of law.
From our strong criminal enforcement —especially on issues like human trafficking— to ending settlement payouts to third-party, favored groups that were not directly harmed by unlawful conduct, to our leadership on regulatory reform, you've seen, time and again, that this Department has made great strides in promoting the rule of law. And I'm confident that momentum will continue.
OLP has had the opportunity to be deeply involved in those efforts. A major initiative through which the Department is promoting the rule of law is our work shining a spotlight on, and arguing against, nationwide—sometimes called universal, or limitless (or as Justice Gorsuch called them "cosmic")—injunctions. This is a rule of law issue. That's why we care about it so much at the DOJ.
Nationwide injunctions, as we define them in the Justice Department, are injunctions that grant relief to parties outside the case, and outside of the class action framework, when such relief is not necessary to redress the plaintiff's injuries. The core problem, in other words, is not so much the geographic scope of the injunction, but its reach far beyond the confines of the case or controversy before the court. Injunctive relief should be no broader than necessary to provide complete relief to the parties.
The entry of nationwide injunctions is a relatively recent phenomenon: nationwide injunctions did not exist even sixty years ago. Before 1963, no court in this country had issued such a broad injunction, and they were exceedingly rare until President Reagan took office. Even after that, by Justice Department estimates, courts issued an average of only 1.5 nationwide injunctions per year against the Reagan, Clinton, and George W. Bush administrations, and 2.5 per year against the Obama administration. In President Trump's first year in office, however, judges issued a whopping 20 nationwide injunctions—an eightfold increase. This matches the entire eight-year total of such injunctions issued against President Obama during his two terms. We are now at 30, matching the total number of injunctions issued against the first 42 presidents combined.
This Justice Department has challenged the entry of nationwide injunctions on constitutional as well as equitable grounds, and we will continue to do so at every appropriate opportunity. Why? For several reasons. We believe that the erosion of our rules and norms by those duty-bound to uphold the law is always a serious concern. And we believe that the rash of nationwide injunctions strikes at the heart of our democratic system. A nationwide injunction seriously impedes decision-making in the federal courts by interfering with percolation of a contested legal issue. It also invites unvarnished "judge-shopping," undermining faith in our judiciary, and allows unelected district court judges to issue wholesale vetoes on the domestic policy and national security decisions of our elected officials. (I'm sure that some or all of these issues will be discussed in more detail by our panelists.) Again, this is not a partisan problem; it can be used—and has been used—against Presidents of both parties. But the frequency with which it has been employed against this President is unparalleled.
The Justice Department agrees. Our litigators are taking every appropriate opportunity to raise the question of the legality of nationwide injunctions to the appellate courts and ultimately to the Supreme Court. In furtherance of the Department's commitment to advocating for properly tailored injunctive relief, last fall, former Attorney General Sessions issued litigation guidelines for Department of Justice attorneys involved in litigation challenging a federal government program, regulation, order, or law. This memorandum outlines a series of arguments against the issuance of nationwide injunctions—many of which I'm sure will be discussed today. Its purpose is to ensure that DOJ litigators make strong, consistent, and principled arguments against nationwide injunctions in cases that present the possibility of overbroad injunctive relief. Armed with the guidelines—and with no shortage of opportunities to put them into practice in litigation—the Department of Justice will continue to pursue judicial recognition of the legal and equitable limits on injunctive relief.
In closing, it is worth recalling James Madison's Speech to the Virginia Ratifying Convention of 1788. There, he said, "There are more instances of the abridgment of the freedom of the people by gradual and silent encroachments of those in power than by violent and sudden usurpations." Starting in the 1960s, we have seen a new power invented and slowly employed. It has now reached alarming frequency. The fact that both the Obama and Trump Administrations have spoken with one voice on this should speak volumes.
In the meantime, the debate about the propriety of nationwide injunctions continues. I am looking forward to a robust discussion this afternoon. Thank you again for having me.


Promotes mental function and memory.
Supports circulation in the brain.
Other Ingredients: Modified cellulose (vegetarian capsule), rice powder, magnesium stearate (vegetable source).
Take 1 capsule once or twice a day with or without food. When taking two capsules daily, take one in the morning and one in the afternoon.
Disclaimer: The product descriptions and the statements on this page are from manufacturers and/or distributors and have not been evaluated by VitaSprings or the FDA. These products are not intended to diagnose, treat, cure, or prevent any disease. VitaSprings does not imply any medical claims from the customer reviews on this Extra Strength Ginkgo Extract 120 mg, Value Size product on this website.
Write a Review on this Extra Strength Ginkgo Extract 120 mg, Value Size product and share your experience or opinion with other customers.
Welcome to VitaSprings Online Store - Source of Your Healthy Life. We carry huge selections of vitamins and supplements, and other different health and beauty products, over 400 brands and 30,000 items now, with new products added frequently. Buy Extra Strength Ginkgo Extract 120 mg, Value Size from Doctor's Best at VitaSprings, and we guarantee you a safe, secure online shopping experience! We value your business greatly and do our best to honor any requests you might have. Our customer service hot line is here waiting for you: 1-626-579-2668.


Have you ever spent time with people that are talkers? You get done with a conversation and walk away thinking, "Whew, I didn't get a word in" – (I am one of those talkers I have walked away thinking "Whew, I didn't let them get a word in.") That isn't really a conversation. According to Merriam-Webster – conversation involves an exchange. Exchange implies two party involvement.
Listening goes both ways. How much time do you spend listening?
Cry out to the Lord, He hears and listens.
Listen to the voice of God. He speaks through His word, His Spirit, and others.


Please note - I have added Donna, Lesley, and Lauralyn-Marie's intentions as well.
Here is the "skeleton" list for intentions that we sometimes use, and some Catholic Critters prefer.
It doesn't matter to me either way, please do what is most convenient to you.
However, I would ask that if you choose to use the copy and paste into a new post method, please ensure that you have the *newest* post of the skeleton list, so no one's intentions get lost in the thread.
I'd love to join in! I'm going to pray on my intention and update when I know.
I am very excited that there is such an enthusiastic response!
It actually crossed my mind during prayertime this morning how much I missed this Novena! Will definitely join and will be thinking about what intentions I want to include! Thank you CJ!
I'd like to join! My intention involves a personal matter of the heart. Loooove that this will be ending on the feast of Our Lady of Fatima!
I would love to join you. Will be praying about what intention and update my post here.
Lesley - that definitely counts!
SLOWMO42 - glad you can join us! You may start when you like. Feel free to begin while on vacation if you wish.
My intention is for my daughter who left the church and is now agnostic.
I'm not sure if this counts but I'm afflicted with cancer.
I will be joining for this, but not starting until April 1st when I get back from vacation. Thanks for posting this, I was going to do it on my own anyway (first attempt) but this will help with accountability. Intention is for family members who have left the church.
Do you have any intentions for us to pray during the Novena?
Please post your intentions here for the 54-Day Rosary Novena starting 21 March 2017.


Composed and performed by Elodie Lauten.
Tronik Involutions is a set of twelve pieces about the earth's year cycle. The material of the piece expresses a series of correspondences between the I Ching, the year cycle (represented here by the twelve astrological signs), and a sequence of twelve key signatures. The starting point for the work was the determination of the "Earth Tone," or frequency corresponding to the earth's rotation around the sun, which was established at 136.1 Hz.
Produced by Elodie Lauten. Mixed by Ron Sunsinger. First release: Studio 21, 1994. Second release: O.O. Discs, 1996.
Composed and performed by Steven White.
Excerpts from the following sculptures: Molecular Roulette, Tooth Organ, Spider Bark, Grain Bin Sound Machine, Happy Apple Tree, and Insect Variation.
The Combine Project is a series of kinetic sound sculptures constructed from an abandoned 1964 Allis-Chalmers All-Crop combine harvester. The interactive nature of this work brings the viewer into direct physical contact with these sculptures and engages those viewers in creating playful soundscapes.
Recorded and mixed by Steven White, November 2009–January 2010, Owen Sound, Ontario.
Death By Water is from part two of Bluemouth Inc.'s site-specific performance trilogy Something About a River. Realized in the composer's home studio, this work consists almost entirely of manipulated found sounds: turntable noises, field recordings, the singing voice and shamisen of Japanese-Canadian musician Aki Takahashi (used with permission), and an archival recording of Hibari Misora singing Kanashiki Kuchibue.
Composed and performed by National Exit Strategy.
From Safety Sleeper Six, this track combines live and processed drumming with sonic textures derived in part from the Bluemouth Inc. performance work How Soon Is Now? (2007).
Performed by the Lollipop People: Julia Hambleton, clarinet; Jeff Burke, bassoon; Nichol S. Robertson, electric guitar; Kristen Theriault, harp; Kimberley Pritchard, accordion; Erik Ross, synthesizer; Gregory Oh, piano; Sly Juhas, drums; Brandon Valdivia, percussion; David Pell, trombone, Trevor Dunn, electric bass.
Recorded July 18, 2008 by James Paul at the Rogue Studios.
Performed by Nichol S. Robertson, electric guitar; Sly Juhas, drums; Jeremy Strachan, sax and clarinet; Gregory Oh, Farfisa Organ; Rich Marsella, voice, classical guitar; Tom Juhas, electric guitar. From the CD recording Friendly Rich presents The Sacred Prune of Remembrance (2010).
Recorded August 2009 by Greg Dawson at BWC Studios.
Produced by Friendly Rich and Greg Dawson.
West Jackson Avenue, Old City, March 26, 2010 (0:00 to 1:17), Big Ears Festival, annex patio, Old City, March 26, 2010 (1:17 to 1:43); Breakfast at Cracker Barrel, suburban Knoxville, March 27, 2010 (1:43 to 2:26); Gay Street, outside Tennessee Theatre, March 27, 2010 (2:26 to 3:04); Market Square, during the Knoxville Marathon, March 28, 2010 (3:04 to 4:08).
This sound experiment uses two semi-functioning AM transistor radios that I tampered with in order to make them more receptive to the electromagnetic interference emitted from electronic devices such as a cell phone and a digital camera. The nuances you hear were created by physically moving these devices over different parts of the exposed radio circuit or by touching different parts of live circuit with my hands.
Mixed and recorded in 2009 by Darsha Hewitt.
I created Backtack with the sounds of sewing machines, scissors, and steam, along with the voices of early twentieth-century immigrant garment workers from New York's Lower East Side. These voices were made available to me through New York's Tamiment Library oral history collection. The piece highlights these workers' very difficult working and living conditions—still the plight of many garment workers the world over.
Premièred in a twelve-channel spatialization, realized by Marilyn Lerner in collaboration with Darren Copeland, August 7, 2009, at the Sound Travels Festival of Sound Art, Toronto, Ontario.
Composed by Marilyn Lerner, Ken Filiano, and Lou Grassi.
Performed by Marilyn Lerner, piano; Ken Filiano, bass; Lou Grassi, drums.
From the trio's debut CD Arms Spread Wide, released on No Business Records.
Recorded at Acoustic Recording Studios, Brooklyn, New York, February 20, 2008. Engineered by Michael Brorby, mixed and mastered by Jim Clouse.
Performed by Ensemble Les enfants terribles: Cristian Gort, musical director; Étienne Pilon, actor; Vincent Ranallo, baritone; Danielle Richard, mezzo-soprano; Alice Ronfard, stage director.
Musical theator based on "Pour en finir avec le jugement de Dieu" and letters from Antonin Artraud. I have been interested in Artraud's writings because of their raw, explosive, excessive, and bodily language, and Artraud's efforts to go beyond the meaning of the words to let loose all the power of expression.
Produced by Codes d'Accès. Recorded at l'Espace Dell'Arte, Montreal, April 24, 2007.


text:
Newly elected Philippines President eyes renewables and nuclear as LNG prices soar
By Damon Evans
Newly elected President Ferdinand Marcos Jr reiterated his support for more renewable energy, as well as nuclear power, and natural gas, in the Philippines, one of Southeast Asia's fastest growing economies. The news comes as plans to import maiden liquefied natural gas (LNG) cargoes into the country have stuttered due to surging global prices.
Uncertainty for South Korea LNG imports as nuclear energy embraced
Following presidential elections earlier this month, energy-short South Korea looks set to pivot back towards nuclear power, leaving the outlook for liquefied natural gas (LNG) imports less certain.
Scottish energy minister loses seat after failing in bid to oust Tory
By Craig Paton, PA Scotland Political Reporter
Scottish Government minister Paul Wheelhouse has failed to reclaim a seat in the Scottish Parliament.
Anti-North Sea policy wrong and irrational
By Brian Wilson
Reading political party manifestos is, it must be said, a duty rather than a pleasure. So much verbiage, so little prospect of the vast majority of it ever being fulfilled.
Algeria goes to the polls
Algeria goes to the polls today in a widely disputed election that aims to move the country on from its political quagmire, although this seems unlikely.
Algerian power and paralysis
The Algerian government has set out steps intended to bring an end to the discontent that has left the country paralysed since February.
Venezuela opposition wins two-thirds majority in blow to Nicolas Maduro
By Energy Reporter
Venezuela's opposition has won a key two-thirds majority in the National Assembly.


XAnge Private Equity sees its investments as the start of a multi-year partnership based on transparency and mutual trust. A strategic ally of the portfolio companies, XAnge Private Equity works alongside the companies' chief executives, especially at key moments in the portfolio companies' development. XAnge focuses on contributing value-added without ever interfering in the company's day-to-day management.
Xenia Venture Capital is an investment firm founded in mid 2003 by a group of entrepreneurs with the vision of being an incubation powerhouse that will engage in the initiation and building of successful high-tech companies in the areas of IT and medical devices. Xenia is committed to provide portfolio companies with top-notch mentoring, business and strategic counseling, fund raising assistance and exit planning.
XG Ventures is a small group of ex-Googlers, who were early hires in strategic roles at Google. This group is now dedicated to advising and investing in supremely talented early stage teams. They learned a great deal at Google, including how its unique culture shaped a dynamic and fun enterprise. Together, with their complimentary expertise, their goal is to help successfully guide the start-up teams, in which they invest and advise, to the next stage.
X/Seed Capital is an independent, seed-focused, venture fund providing de-novo start-up capital for entrepreneurs pursuing breakthrough innovation.
Xuture provides start-up venture capital funding for seed stage, early stage and growth companies with a focus in the US technology sectors. They invest between $50 thousand and $50 million in exceptional companies. Average funding for startups is under $10 million. Based in Silicon Valley, innovation & leadership is their cornerstone business practice. At Xuture, they locate and attract seed & early stage capital and achieve best practices overall.


Jas Johal was elected MLA for Richmond-Queensborough in 2017. He is the Minister of Technology, Innovation and Citizens' Services.
Jas Johal is an award winning journalist and has spent over 23 years extensively traveling B.C. covering news and current affairs, focusing on a wide range of issues ranging from politics, business, transportation, health, and organized crime.
Jas Johal has served as Global Television's Asia bureau chief based in Beijing, and in New Delhi.
Jas also reported from conflict zones including Afghanistan, Pakistan, Korea, Israel, and Lebanon.
In Egypt, he witnessed the grass-roots revolution in Tahrir Square that ended Egyptian President Hosni Mubarak's 30-year reign and was in Tripoli, Libya covering the final days of Muammar Gaddafi's regime.
In 2014, Jas produced, "Our Energy Future: BC At A Crossroads." The one-hour long program looked at Asia's energy security needs and the impact on Canada. was most recently the Director of Communications at the BC LNG Alliance. Formed in 2014, the Alliance is the voice of British Columbia's liquefied natural gas export industry.
Now, as the BC Liberal candidate for Richmond-Queensborough, he has an opportunity to use that voice to do even more good work, this time from inside the Legislature.
Johal ended up with 8,225 votes compared to DP competitor Aman Singh's 8,101, after Elections BC counted 1,902 absentee ballots this week.
B.C. NDP announced Amandeep Singh as its candidate.Singh had a successful immigration and criminal law career in the early 2000s before, he said, alcoholism destroyed his life in 2008.He was born in India, moved to Hong Kong until he was 18, and then went to school at the University of California, Berkley, which kick-started years of activism and civil rights work that continued into his current legal work.


Webpack is an open-source command-line tool for automatically packing websites by shrinking them down without affecting the way they look or behave.Webpack is also useful for losslessly shrinking image collections and locating corrupted files. Webpack works by stripping unnecesary information from & optimising the compression of images, and removing comments/whitespace from html. This makes for a faster website for your users, and lower bandwidth usage/costs for you! (oh, and it's free - both as in speech and as in beer).
Webpack is in development, but works for us, and we need testers (that'd be you!). Webpack is "safe" in that it is designed to create a compressed replica of a directory tree, so your original files are not touched. Any files it doesn't know what to do with are copied verbatim. Basically you run webpack on your sites original files and upload the webpack-ed version to your webserver - easy!
Webpack is released under the terms of the GNU General Public License (GPL).
To install, simply copy "webpack" into ~/bin or /usr/local/bin (whichever is your preference), and make sure you have at least some of the requirements below.
a) change into the directory you want to 'webpack' eg "cd ~/mysite"
b) do a "webpack <output directory>" eg "webpack ~/mysitepacked"
.. and that's it - webpack will create a packed replica of the current directory (and subdirectories) in <output directory>.
Use the -b (brute) option if you want absolute maximum file reduction (makes JPG's a bit slower to process and PNG's a lot slower, no affect on other types yet).
Use the -q (quiet) option if you want to see only warnings/errors.
Webpack will remind you what to do with no arguments, and there is a bit of error checking in there to stop accidents. (at the moment it won't overwrite existing files so you can't do much harm).
Webpack relies on several readily available command line tools to process various types of files. You will need to install some (preferably all) of these for it to be useful. Most of them either come with your linux distribution or are easy to compile (usually ./configure; make; make install or less).
At an absolute minimum, install jpegtran and giftrans (which come with most linux distributions anyway), but if you have a lot of gifs to process, we strongly recommend gifsicle for processing them, as it significantly outperforms what giftrans can do (which isn't much).
If you don't have some of these tools installed webpack will just copy the particular type of file that tool would have processed.
This is a rough list of things to implement or that have been suggested from users.
Let us know if you find this useful,l and if you have suggestions/patches/praise/bugreports for it as they are most welcome.


These rigidly destroyed jeans by Mother Denim feature a tapered leg, thrashing at the knees and a frayed hem. The absolute must have cool-girl jean. Rise: 11", Inseam: 26", Leg opening: 12 1/2"
Hey! We aren't here for a long time, just a good time! Tees are a unisex cut.
AG Jeans Farrah Metallic Coated Skinny Jeans In Iced Silver - Ag farrah metallic coated skinny jeans in iced silver (clearance).
100% cotton. Made in France. Machine wash. Terry fleece fabric. Front kangaroo pocket.
Super fun and cute pink tank with blue glitter print.


GLADSTONE teen Lisa Davies' genuine passion for the region has launched her into her first career and has also seen her crowned Trainee of the Year.
The 19-year-old, who scored her dream gig as a trainee at Gladstone Area Promotion and Development Ltd said an internship she did two years ago inspired her.
"I did work experience in 2016 and it was just very good timing because the two days I was at GAPDL a cruise ship just happened to dock in at Gladstone," the former Chanel College girl said.
Lisa, who has lived in Gladstone her whole life, said events and tourism has always a been long-term goal for her and owes it all to her mentors at GAPDL.
"I always wanted to do something with events and tourism as a job and GADPL had both of these elements, which I have really enjoyed," Lisa said.
Lisa said her parents were very proud of how far she had come.
"When you say Gladstone to people they don't automatically see it the way I do," Lisa said.
"I want to help people see what a special place it is and how exciting our region really is.
Lisa grew up on her family's cattle property in Boyne Valley and said the events and tourism in Gladstone are offering a new experience to locals.
"I love when I meet tourists," she said.
"You get a chance to tell them about all the amazing things and give them the local tips on town life.
Lisa said she is often recommending day trips to visitors.
"The thing about the region is that you need to spend quality time here," she said.
The teen said despite the number of things there are to do in Gladstone she loved nothing more than going home to Boyne Valley.
"You've got to love the outdoors to love it here," Lisa said.
"I love that I still have that personal connection to this place.


The Surfing The Manual: Advanced - Finally, the first time ever, The Secret of professional surfing reveals in one best-seller book. Many of the world's top surfers gathered to make the best definitive skills and coaching manual for surfers. Surfing: The Manual has a Step-By-Step photo sequences with easy to understand caption including all the manoeuver in surfing. The chapters are prefered with expect tips and insight from over the fifty of the sport's icon such as Andy Irons, Laird Hamilton, Mike Parsons and Tom Carroll. The book includes great images that was captured by world's top surf photographers to illustrate every move. The book flows from ocean knowledge and wave understanding also to equip the right choice, survival and etiquette before getting take-offs, bottom turns, tube riding, tricks, aerials and every manoeuvre you could imagine. The final sections teaches how to be professional and how to win on every contests and how to ride huge waves. This book is a unique guide from the professionals who have taken the time to give away their great secrets and tips. You can even learn them by just looking at the pictures and hit the waves.


Determines a solution of a nonlinear system of equations in n dimensions beginning with a start point.
Determines a solution of a nonlinear system of equations in n dimensions beginning with a start point. You define the equations with formulas.
Determines a solution of a nonlinear system of equations in n dimensions beginning with a start point. You define the equations with a strictly typed VI reference.


← Brazil Bugs #3 – Gorgulho Enorme!
I found mais dos percevejos (more of the leaf-footed bugs) on the still-unnamed pink flowering shrub in back of the hotel in Campinas, Brazil. Not only am I convinced that they truly do belong to the family Coreidae (for the reasons mentioned in the earlier post and below), but also that despite the different color patterns shown by the two individuals in that post that they are indeed a single species. I also found the above individual, representing an even more heavily melanized version than the two shown previously. In looking at a large number of individuals on the shrubs (and subsequently encountering them in a different part of Campinas over the weekend), it became clear that there were not just two distinct color forms but a broad range of variability. I could believe maybe two species occurring together on a common resource, but it seems unlikely that each color variation represents a different species. Thus, it now seems that there is one highly variable species visiting these flowers.
I had an idea on how to find the name of this species that almost worked. Rather than Googling "leaf-footed bug" or "Coreidae," I tried "percevejo" instead, along with Brazil or Brasil. There were 3 or 4 photographs that showed up in the images search that I recognized instantly as belonging to the same species. Unfortunately, none of the links where the photos were found gave any information more specific than family (all, however, agreeing with family Coreidae). I think it's time to send an email to Harry Brailovsky, a coreid specialist at the Instituto de Biologia (UNAM) in Mexico City.
Photo 1: Canon MP-E 65mm 1-5X macro lens (ISO 100, 1/200 sec, f/13).
Photo 2: Canon 100mm macro lens (ISO 100, 1/200 sec, f/16).
Both photos: Canon 50D, Canon MT-24EX flash w/ oversized DIY concave diffuser. Typical post-processing (levels, color, unsharp mask).
Last minute edit: I just heard back from Harry Brailovsky as I was ready to post (thank you Harry!). The insect is, indeed, a species of Coreidae, which he identified as a member of the genus Hypselonotus. I did some searching online to see if I could find any additional clues as the species identity – I found no images that looked right but did find this key to the Hypselonotus of Costa Rica. The key relies on some ventral characters, and I'm a little uneasy about using it for something from southern Brazil, so I think I'll just wait until Harry has a chance to look it up when he returns to the museum.
Second update 1/26/11: Harry has confirmed the species as Hypselonotus interruptus, which was mentioned but not included in the key that I linked to above. The only online images I have found of this species are at this link. Either Harry is wrong (unlikely), the photos in the link are misidentified (maybe), or the species is enormously variable (perhaps quite likely).
This entry was posted in Coreidae, Hemiptera and tagged Brazil, Brazil Bugs, entomology, insects, leaf-footed bugs, nature, science, true bugs. Bookmark the permalink.
Didn't find it in the Biologia either!
It looks like your finding some great bugs just around your hotel!
I would like to see a general view of the shrub you are finding these bugs on, I'm curious what it is.
I've still got some other insects from around the hotel to post, and then this past weekend I went to a few other 'wilder' places in the Campinas area and found even more cool things.
The hotel staff gave me a name for the bush, but a Google search on it hasn't turned up anything so I think that's a dead end.
I'll take some photos of it tomorrow if I can – who'd a thunk the insects would be easier to ID than a common ornamental shrub!
I'm with Adrian – Let's see some foliage, etc.
Something in Euphorbiaceae, maybe Jatropha sp.?
Jatropha has a similar appearance, but the flowers in my bush are four-petaled rather than five and have a much longer tube than the Jatropha flowers I've seen photos of. No milky sap either – it really doesn't strike me as something euphorbiaceous.
I find it so interesting that highly variable forms could be reliably placed in a single species, and yet other taxa(such as Tetramorium "caespitum") that look almost identical are actually a tangled mess of multiple cryptic species. Systematics is just a never-ending battle, isn't it?
Can't argue with that. I suspect this might be a rather common and widespread species – as such its success may be fueled by having sufficient variability to adapt to a range of environmental conditions.
Of course, just because "we" say something is a single species doesn't necessarily make it true!
Nice shots, Ted! Are they still in drought conditions down in southern Brazil?
Thanks, Alex. It has rained almost daily since I've been here – usually in the late afternoon or early evening.
Anyway, it turns out Jatropha has a 5-lobed stigma.
Another look has me thinking Rubiaceae, but the 3-lobed stigma says otherwise.
Still a mystery. What was the Brazilian name for it?
I don't remember what they called it – seemed irrelevant since the name wasn't showing in any searches.
Very nice shots, Ted! The flowers could be that of Ixora.
I'm with Ani on Ixora being a possible genus for the shrub – commonly used as a hedging plant in the tropics, and well known as a popular nectar source.
I thought maybe Ixora, too, but that is supposed to have a bifid stigma, and these are clearly trifid.
Strange! Everything about Ixora – color, foliage, shape, common use as ornamental planting in the tropics – is right. Except for that stigma! I wonder if this might be a horticultural variety with some sort of mutant stigma, because everything else about it is right.
That's the site where I key I linked to came from. Harry Brailovsky did write back today to say that the bug is Hypselonotus interruptus, which was mentioned but not included in that key. The only online images I have found of that species are here. Either Harry is wrong (unlikely), the photos in that link are misidentified (maybe), or the species is enormously variable (perhaps quite likely).
Hypselonotus is a bit tricky because the last two substantial works (Horvath, 1913 and Whitehead, 1974) consider the genus to contain 20 and 9 species respectively . Both papers rely on small femoral spines for identification. It's a genus that would benefit from some good molecular work.
I had a look in the BMNH, London collection and there are few recently reliably identified specimens but they all have pale yellow lines on the pronotum with the red triangular marking in the middle.
None of the specimens identified as H. interruptus had the pronotal pattern like those in the Forestry Images website.
Hi Laurence – thanks for stopping by and for the great information. Any ideas on the identity of the Forestry Images specimen? There is no attibution for the source of the ID.
It's a genus that would benefit from some good molecular work.
Nice website! We need something similar for Buprestidae.
According to Whitehead (1974) the colour variation in Hypselonotus interruptus is the most complex in the genus and currently has 10 junior synonyms.
I looked in the collection and at Biologia Centrali Americana, Plate 14 Figures 25-27, which has illustrations of three H. interruptus synonyms, H. concinnus, H. concinnus var. propinquus and H. atratus. The BCA illustration and the type series of H. atratus look like the Forestry Images specimen.
Okay – Thanks for the additional information. it looks like the third scenario (widely distributed and highly variable species) is the winner.
I should remember to check BCA – what a nice resource to have all the color plates online!


Sure, you can have a wedding at Taco Bell (or at least, at the chain's Las Vegas Cantina). But what if that's nacho speed? Maybe you prefer to season the moment with a party instead. Taco Bell is now allowing fans to book a bash for up to 10 guests at select restaurants through December 22.
"After introducing Taco Bell Weddings in our Las Vegas Cantina and seeing the huge response -- we have had 110 weddings booked there in just over a year -- there was a clear need and opportunity to translate this intersection of fun, cool, and accessible entertaining to any kind of occasion," said Marisa Thalberg, Taco Bell's global chief brand officer. "For the most devout Taco Bell fans to those who will just find this kitschy cool, we are about to make it easy to become the perfect postmodern party host."
Interested taco partiers can surf to TacoBellParty.com to reserve their event at one of the participating locations. A TB party includes VIP seating for 2-10 guests and a Taco Bell Décor Kit, consisting of 1 table runner, 10 paper plates and a photo-prop kit, so you can drizzle your pics all over social media like hot sauce on an enchilada. Prices start at $25, and food is extra.
Not all Taco Bell locations are currently participating: When I plugged in my Seattle ZIP code, the closest location to me that offered the parties was 870 miles and two states away. Would-be partiers with no nearby option can buy a party pack or party accessories at the online store. The hot sauce-packet balloons would surely make a decoration to taco-bout. If you didn't know Taco Bell hosted weddings and parties, here are 25 things you don't know about your favorite fast-food chains.


text:
Sampson Battis (about 1752 - 1847) was an African-American slave who fought in the American Revolution.

Early life
Sampson was enslaved to Colonel Archelaus Moore, a farmer in Merrimack, New Hampshire, United States, who promised to free him if he would fight in the war. Battis agreed and Colonel Moore volunteered him to fill the local quota of men for the army.

Military
Sampson enlisted in the company of Captain Benjamin Sias (who married Archelaus Moore's youngest child Abigail) and was at Fort Edward, New York at the time of General Borgoyne's invasion, being in the service at that time from October 4 to October 26, 1777.

He was a volunteer for three months in Colonel Thomas Stickney's regiment. In the same year, he is on the muster roll of Captain Nathaniel Head's company. He enlisted for three months on August 20. November 20 he is recorded as a deserter. Since the company was actually discharged on November 25, Sampson may have anticipated his discharge.

Sampson Battis has a grave stone in the Moore section of the burial ground at Canterbury Center with the inscription "Sampson Battis, Head's Company, Reynold's New Hampshire, Rev. War."

Marriage
Sampson married Lucy, a slave who belonged to William Coffin.

Bouton states (p. 252) "William Coffin, the grandfather of Samuel Coffin, Esq., owned a negro woman named 'Lucy.' 'Sampson,' a negro belonging to Archelaus Moore, of Canterbury, wanted her for his wife; and there was an agreement that Sampson should work for one year for Mr. Coffin to pay for her. A man's wages at that time were about forty dollars a year, or the price of a yoke of oxen. Sampson was a famous fiddler, and for many years afforded fine fun for frolicsome fellows in Concord with his fiddle on election days."

Property
In 1802, John Moore, son of Colonel Archelaus, leased a lot in Canterbury between No. 51 and the Concord line to Sampson Battis for $1 for his natural life.

Death
Sampson died on October 23, 1847, at about age 95 in Canterbury, Merrimack County, New Hampshire and is buried at Canterbury Village Cemetery (also known as Canterbury Center Cemetery).

References

Bibliography
Lyford, J. O. (1912) History of the town of Canterbury, New Hampshire, -1912. Concord, N.H., Rumford. [Image] Retrieved from the Library of Congress, https://www.loc.gov/item/12024495/.

Moore, Howard Parker,. The descendants of Ensign John Moor of Canterbury, N.H., : born 1696-died 1786. Rutland, Vt.: Tuttle Co., 1918.

"The History of Concord, From Its First Grant in 1725 - To the Organization of the City Government In 1853, With a History of the Ancient Penacooks"
By Nathaniel Bouton. Published in Concord by Benning W. Sanborn, 1856.

1847 deaths
Year of birth uncertain

redpajama_set_name: RedPajamaWikipedia


Your landscape has different needs during the four seasons, but spring and fall are usually the most demanding seasons for maintenance and clean up. Groundshog Lawn and Landscape offers spring and fall cleanup as a standalone service or as part of a full-service, year-long lawn and landscape maintenance package to customers in Catonsville, Arbutus, Ellicott City, and Baltimore, Maryland.
As your lawn comes out of its winter dormancy period, it is particularly vulnerable to pests and diseases. In addition to leaf raking and removal of fallen branches and debris, we vigorously inspect your entire landscape for signs of pests like moles and grubs, as well as molds and other fungi and diseases. The thatch level of your lawn should also be checked after a long winter, to see if dethatching or aeration would benefit the grass.
Fertilizing during spring is essential, as your lawn and plants will have used much of their nutrient reserves up over the winter. We will apply various fertilizers and nutrients to make sure your soil is well balanced and providing sufficient nutrients to your grass, plants and trees. We also recommend the application of pre-emergents during the spring season to keep grassy weeds like crabgrass from taking hold.
Fall is a time of rapid change for the landscape, and your lawn is no exception. As the leaves fall and your plants, trees and lawn begin to go into a dormant winter mode, it's essential to take the correct steps to keep them healthy until spring.
Removing leaves all fall long will allow your lawn and plants to soak up as much sun as the days grow shorter. We recommend that leaves be removed once a week during the peak of fall, to keep your lawn looking neat and healthy.
Heavy summer use can wear down your grass. In high traffic areas, your lawn may benefit from reseeding or overseeding. This will help increase the thickness of your turf come springtime.
Applying fertilizer and winterization treatments during the fall will give your plants and lawn an added nutrient boost to help them make it through long, often dry, winter months.
We recycle 100% of all yard waste as well paper, aluminum, metal, and stone. We practice an integrated pest management program and use the least damaging products to any surfaces. We strive to achieve balance in the landscape with low-maintenance native plantings whenever possible.


pages 587-600, Providence, RI, April 2019.
pages 865-874, Vancouver, British Columbia, May 2018.
Article No. 63, 12 pages, Denver, Colorado, November 2017.
13 pages, Xi'an, China, April 2017.
Volume 13, Issue 4, Article No. 32, 27 pages, October 2016.
pages 507-522, Denver, Colorado, June 2016.
pages 245-257, Kyoto, Japan, May-June 2016.
pages 215-218, Kyoto, Japan, May-June 2016.
12 pages, Istanbul, Turkey, June 2016.
Volume 12, Issue 4, Article No. 36, 24 pages, January 2016.
pages 204-215, Waikiki, Hawaii, December 2015.
pages 39-50, San Francisco, California, October 2015.
pages 63-74, San Francisco, California, October 2015.
pages 25-35, Newport Beach, June 2015.
pages 105-116, New Orleans, Louisiana, November 2014.
pages 861-878, Portland, Oregon, October 2014.
pages 289-300, Edmonton, Alberta, Canada, August 2014.
pages 239-251, Vancouver, Canada, June 2014.
Volume 9, Issue 4, Article No. 45, 25 pages, January 2013.
Volume 9, Issue 4, Article No. 57, 20 pages, January 2013.
pages 487-498, Beijing, China, June 2012.
Languages and Operating Systems, pages 273-286, London, UK, March 2012.
Volume 8, Issue 4, Article No. 38, 21 pages, January 2012.
Volume 8, Issue 4, Article No. 46, 21 pages, January 2012.
pages 12-21, Galveston Island, Texas, October 2011.
pages 69-80, San Antonio, Texas, February 2011.
pages 189-200, San Antonio, Texas, February 2011.
pages 295-306, Vienna, Austria, September 2010.
pages 62-73, Toronto, Canada, June 2010.
pages 63-72, Toronto, Canada, June 2010.
pages 15-24, Vol. 43, No. 2, April 2009 (Invited Paper).
pages 1-10, Washington DC, March 2009.
pages 330-341, Lake Como, Italy, Nov. 2008.
pages 352-362, San Francisco, California, February 2005.
pages 38-47, San Antonio, Texas, February 1997.
Supercomputing'96, Article No. 25, 15 pages, Pittsburgh, Pennsylvania, November 1996.
pages 264-267, Portland, Oregon, December 1992.
special issue on Multicomputer Programming and Application, Vol. 16, No. 2, pages 92-107, October 1992.
pages 232-241, Oakland, California, April 1992.
pages 830-839, Minneapolis, Minnesota, November 1992.
pages 199-205, Albuquerque, New Mexico, November 1991.
pages 28-37, Orlando, Florida, December 1990.
pages 920-929, New York, November 1990.
pages 388-397, New York, November 1990.
pages 118-127, Seattle, Washington, March 1990.
Languages and Operating Systems, pages 54-64, Boston, April 1989.
11 pages, Montreal, Canada, May 2019.
12 pages, Washington DC, Feb. 2019.
pages 623-638, Pittsburgh, Pennsylvania, October 2015.
pages 98-108, Orlando, Florida, February 2014.
pages 1-11, Shenzhen, China, February 2013.
Vol. 32, No. 5, 36 pages, May 2010.
pages 81-88, Toronto, Canada, June 2010.
pages 105-114, Edmonton, Canada, September 2009.
pages 221-230, Edmonton, Canada, September 2009.
pages 356-365, Beijing, China, September 2008.
pages 97-106, Beijing, China, September 2008.
pages 167-178, Seattle, July 2008.
pages 143-154, Seattle, July 2008.
pages 445-454, Paris, September 2007.
pages 84-93, Paris, September 2007.
Vol. 4, No. 3, 31 pages, September 2007.
pages 207-218, London, July 2007.
pages 415-424, San Diego, June 2007.
pages 81-91, Portland, Oregon, November 2006.
pages 169-180, Ottawa, Canada, June 2006.
pages 272-281, Shanghai, China, May 2006.
pages 263-272, Long Beach, California, Nov. 2005.
pages 197-206, Lisbon, Portugal, September 2005.
Vol. 2, No. 3, pages 301-334, September 2005.
pages 17-26, St. Loius, Missouri, September 2005.
Vol. 27, No. 4, pages 631-661, July 2005.
pages 105-116, Portland, Oregan, December 2004.
pages 94-106, Washington D.C., June 2004.
pages 502-511, Edinburgh, UK, May 2004.
pages 251-262, San Jose, CA, March 2004.
ICSE Recipient of ICSE 2003 Distinguished Paper Award.
pages 319-329, Portland, Oregon, May 2003.
pages 325-336, San Francisco, CA, March 2003.
pages 180-190, Snowbird, Utah, June 2001.
LNCS 1687, Springer Verlag, pages 268-284, Toulouse, France, Sept. 1999.
Vol. 19, No. 6, pages 992-1030, November 1997.
Vol. 6, No. 4, pages 370-397, October 1997.
LNCS 1301, Springer Verlag, pages 361-377, Zurich, Switzerland, September 1997.
pages 575-586, Berlin, Germany, March 1996.
pages 29-40, Washington, DC, October 1995.
pages 348-357, Nice, France, October 1995.
pages 4-13, Victoria, British Columbia, September 1994.
Vol. 2, No. 3, pages 270-285, July 1993.
pages 299-308, Orlando, Florida, November 1992.
pages 37-48, San Francisco, California, January 1995.
pages 246-257, Albuquerque, New Mexico, January 1992.
pages 98-111, Victoria, Canada, October 1991.
pages 302-310, San Diego, CA, November 1990.
Vol. 8, No. 3, Article 14, 30 pages, October 2011.
in special issue of selected LCTES'03 papers, Vol. 4, No. 1, pages 3-37, Feb. 2005.
pages 30-40, Barcelona, Spain, Nov. 2005.
LNCS 3793, Springer Verlag, pages 251-265, Barcelona, Spain, Nov. 2005.
Vol. 9, No. 3, pages 354-384, July 2004.
ACM SIGPLAN Notices, Vol. 39, No. 4, pages 596-597, April 2004.
pages 12-23, San Jose, CA, October 2003.
pages 85-96, New Orleans, LA, January 2003.
Vol. 1, No. 1, pages 79-105, November 2002.
pages 197-207, Istanbul, Turkey, November 2002.
pages 69-78, Grenoble, France, October 2002.
pages 289-302, Sorrento, Naples, Italy, June 2001.
pages 258-265, Monterey, CA, December 2000.
Languages and Operating Systems, pages 150-159, Cambridge, MA, November 2000.
pages 321-333, Vancouver B.C., Canada, June 2000.
pages 170-176, Haifa, Israel, November 1999.
pages 294-302, Newport Beach, California, October 1999.
pages 64-76, Atlanta, Georgia, May 1999.
pages 258-269, Atlanta, Georgia, May 1999.
pages 4-12, Orlando, Florida, January 1999.
pages 118-123, Paris, France, October 1998.
pages 130-135, Paris, France, October 1998.
pages 1-14, Montreal, Canada, June 1998.
pages 80-89, Chicago, Illinois, May 1998.
pages 230-239, Chicago, Illinois, May 1998.
pages 558-568, Research Triangle Park, North Carolina, December 1997.
pages 102-115, San Francisco, California, November 1997.
pages 159-170, Las Vegas, Nevada, June 1997.
pages 146-158, Las Vegas, Nevada, June 1997.
IFIP Transactions A-50, pages 135-146, Montreal, Canada, August 1994.
Vol.2, Nos.1-4, pages 135-150, March-December 1994.
Vol. 16, No. 3, pages 370-386, May 1994.
pages 68-77, Albuquerque, New Mexico, June 1993.
IFIP Transactions A-23, pages 243-254, Orlando, Florida, January 1993.
pages 82-91, New York, November 1990.
pages 272-282, White Plains, NY, June 1990.
Vol. 16, No. 4, pages 421-431, April 1990.
pages 264-275, Portland, Oregon, June 1989.
Languages and Systems, pages 235-246, New Haven, July 1988.


I've had a copy of "The North Water" for ages and part of me wishes I'd read it in the midst of winter to add atmosphere to the reading experience. It's an immersive story so full of vivid descriptions it made me shiver as if I were trapped in a snowstorm and wrinkle my nose as if I could smell the pungency of sailors long at sea. This dramatic account of a treacherous ocean voyage follows a Yorkshire whaling ship, the Volunteer, as it journeys up the coast of Greenland into the arctic during the mid-1800s. An Irish surgeon named Patrick Sumner, who has a murky past working in the army in Delhi, joins the vessel's crew as they set out to hunt whales and skin polar bears. But others on the crew have alternative motives for the voyage including Captain Brownlee, first mate Cavendish and a terrifyingly violent harpooner Henry Drax. As they journey into the treacherous iceberg-laden seas Patrick and the crew face perils both within and outside of their ship. This novel is a gripping adventure story of the highest order which gives a penetrating look into the darkest acts that men are capable of.
There are plenty of thrills, but it is not simply about heart-racing scenes. I think McGuire is doing something more sophisticated in this account of the strife his characters encounter when they venture out into the raw and untamed elements. Here a person's identity is indelibly tied into their daily actions which involve life or death decision making. Patrick reasons that "Only actions count, he thinks for the ten thousandth time, only events." It's these events at sea which define these sailors' identities. Rather than meditating on purpose or how to go forward in the future there is only meaning in how these men conduct themselves under highly pressured circumstances. Later Patrick reasons "It is a grave mistake to think too much, he reminds himself, a grave mistake. Life will not be puzzled out, or blathered into submission, it must be lived through, survived, in whatever fashion a man can manage." The test of will these sailors pit themselves against determines whether they survive and only then does life shape into meaning.
The sailors also encounter communities of Inuit people in Greenland.
Since the majority of the novel takes place on the ship there are very few female characters. There is nothing polite or politically correct about these hard men whose language is full of racial invectives and disdain for women. It's a pleasure when these men come under critique themselves such as the wonderful line: "Pigs grunt, ducks quack and men tell lies: that is how it generally goes." Yet, the author skilfully draws distinctions between men who are ruled by selfish instinct and those who have more of a sensitivity and moral conscience. There's also a refreshing representation of a homosexual sailor who is neither a "pansy" nor someone who suppresses/denies his sexuality, but finds himself in an extremely difficult situation when events take a dark turn.
Periodically throughout their journey Sumner reads from The Illiad. It's interesting that he mediates upon this book rather than the Odyssey which is the journey he more inhabits. Yet, it's appropriate as the character is plagued by memories of what happened during his time at war in Delhi. The victims in this story (whether they be people in war or animals slaughtered during hunts) take residence in the minds of the men who manage to survive these battlefields. It creates a haunting message about the transformation of personality when men are involved in the most harrowing conditions imaginable. This novel is a true experience: brutal and completely gripping.


The Ottawa REDBLACKS played well in all three aspects of the game and pounded the visiting Saskatchewan Roughriders 40-17. Lewis Ward debut in his first professional game going 3 for 4 with his longest field goal being 44 yards. Trevor Harris completed 24/36 for 345 yards and 2 TDs. Defensively Kries Hebert lead the team with 6 tackles. All in all a great season opener for the REDBLACKS. Here are a few game day images.


My other half had some work in Plymouth the other weekend so my younger son and I decided to join him for a flying visit on a Friday night at The Moorland Garden Hotel in Yelverton, a few miles outside the city on the edge of the Dartmoor National Park.
The 80-year-old hotel was bought by Dragon's Den star Deborah Meaden's parents in 2011 and they're in the process of refurbishing it, to give it a fresh, modern feel.
We stayed in interconnecting rooms (my favourite way to stay en famille now my boys are older) which were nicely decorated with a bold wallpaper feature wall and new carpets. The rooms were warmly heated which was really welcoming to walk into on a chilly Autumn evening.
The hotel is set in nine acres of gardens – you can see the view from our room in the pic below – and there's a gated field where you can let your dogs have a run off-lead (away from the sheep which graze in clearings around the hotel).
We ate in the hotel's Wildflower Restaurant which overlooks the moorland garden and has glass doors leading out onto a dining terrace. The restaurant has recently won an AA Rosette and our food was delicious. We enjoyed delicate starters of Plymouth gin cured salmon with cucumber and wasabi plus a Pickled beetroot Carpaccio and syrup with Vulscombe goats' cheese and celery salad. Our mains were good too – Roast Wood pigeon with spinach, onion puree , Dawlish chanterelles and Plymouth sloe Gin jus plus a Tomato tart tatin with grilled halloumi wrapped in courgette and rocket salad. Dessert was a tasty chocolate delice with poached aged prunes and Earl Grey ice-cream. The only downside for me was the bright lighting in the restaurant – some 'mood' lighting would have given a more cosy ambience.
With its location on the edge of the Dartmoor National Park, you're spoilt for choice when it comes to walking. We tackled a short section of the West Devon Way between Yelverton and Tavistock.
Then it was into Plymouth – about a 10 minute drive away (which makes the hotel a good base if you're visiting your teenager at Plymouth University). We enjoyed a couple of hours wandering around the Barbican harbourside, looking at boats, having an ice cream and pottering around craft shops, as you do (we particularly liked Rockpool Trading a cosy shop selling locally made, handcrafted gifts and homeware).
There are plenty of places at the Barbican to stop for a coffee including Rockets & Rascals, a coffee and bike emporium (my other half, a keen road cyclist has a nose for sniffing out these types of places). The coffee (and cake) were great and they also offer bike hire for exploring the city or further afield. It's currently £45 for a family of four for the day (or you can hire for just two hours for £30 per family).
We spent the rest of the late afternoon exploring Plymouth Hoe, with its historic lighthouse Smeaton's Tower and outdoor lido. It was a lovely (if all too brief visit) to Plymouth and we hope to come back to further explore the city and get further out into the Dartmoor National Park in the future.