text:
"""Tests for the flow."""

import time

# pylint: disable=unused-import,g-bad-import-order
from grr.lib import server_plugins
from grr.lib.flows import tests
# pylint: enable=unused-import,g-bad-import-order

from grr.client import actions
from grr.client import vfs
from grr.lib import aff4
from grr.lib import data_store
from grr.lib import flags
from grr.lib import flow
from grr.lib import flow_runner
from grr.lib import rdfvalue
from grr.lib import scheduler
from grr.lib import test_lib
from grr.lib import type_info

class FlowResponseSerialization(flow.GRRFlow):
  """Demonstrate saving responses in the flow."""

  @flow.StateHandler(next_state="Response1")
  def Start(self, unused_message=None):
    self.CallClient("ReturnBlob",
                    rdfvalue.EchoRequest(data="test"),
                    next_state="Response1")

  @flow.StateHandler(next_state="Response2")
  def Response1(self, messages):
    """Record the message id for testing."""
    self.state.Register("messages", messages)
    self.CallClient("ReturnBlob",
                    rdfvalue.EchoRequest(data="test"),
                    next_state="Response2")

  @flow.StateHandler()
  def Response2(self, messages):
    # We need to receive one response and it must be the same as that stored in
    # the previous state.
    if (len(list(messages)) != 1 or
        messages.status.status != rdfvalue.GrrStatus.ReturnedStatus.OK or
        list(messages) != list(self.state.messages)):
      raise RuntimeError("Messages not serialized")

class NoRequestChildFlow(flow.GRRFlow):
  """This flow just returns and does not generate any requests."""

  @flow.StateHandler()
  def Start(self, unused_message):
    return

class CallClientChildFlow(flow.GRRFlow):
  """This flow just returns and does not generate any requests."""

  @flow.StateHandler()
  def Start(self, unused_message):
    self.CallClient("GetClientStats", next_state="End")

class NoRequestParentFlow(flow.GRRFlow):

  child_flow = "NoRequestChildFlow"

  @flow.StateHandler(next_state="End")
  def Start(self, unused_message):
    self.CallFlow(self.child_flow)

  @flow.StateHandler()
  def End(self, unused_message):
    pass

class CallClientParentFlow(NoRequestParentFlow):
  child_flow = "CallClientChildFlow"

class FlowCreationTest(test_lib.FlowTestsBaseclass):
  """Test flow creation."""

  def testInvalidClientId(self):
    """Should raise if the client_id is invalid."""
    self.assertRaises(ValueError, flow.GRRFlow.StartFlow,
                      "hello", "FlowOrderTest", token=self.token)

  def testUnknownArg(self):
    """Check that flows reject unknown args."""
    self.assertRaises(type_info.UnknownArg, flow.GRRFlow.StartFlow,
                      self.client_id, "FlowOrderTest", token=self.token,
                      foobar=1)

  def testTypeAttributeIsNotAppendedWhenFlowIsClosed(self):
    session_id = flow.GRRFlow.StartFlow(self.client_id, "FlowOrderTest",
                                        token=self.token)

    flow_obj = aff4.FACTORY.Open(session_id, aff4_type="FlowOrderTest",
                                 age=aff4.ALL_TIMES, mode="rw",
                                 token=self.token)
    flow_obj.Close()

    flow_obj = aff4.FACTORY.Open(session_id, aff4_type="FlowOrderTest",
                                 age=aff4.ALL_TIMES, token=self.token)

    types = list(flow_obj.GetValuesForAttribute(flow_obj.Schema.TYPE))
    self.assertEqual(len(types), 1)

  def testFlowSerialization(self):
    """Check that we can unpickle flows."""
    session_id = flow.GRRFlow.StartFlow(self.client_id, "FlowOrderTest",
                                        token=self.token)

    flow_obj = aff4.FACTORY.Open(session_id, aff4_type="FlowOrderTest",
                                 age=aff4.ALL_TIMES, token=self.token)

    self.assertEqual(flow_obj.__class__, test_lib.FlowOrderTest)

  def testFlowSerialization2(self):
    """Check that we can unpickle flows."""

    class TestClientMock(object):

      in_rdfvalue = rdfvalue.EchoRequest
      out_rdfvalue = rdfvalue.DataBlob

      def __init__(self):
        # Register us as an action plugin.
        actions.ActionPlugin.classes["ReturnBlob"] = self

      def ReturnBlob(self, unused_args):
        return [rdfvalue.DataBlob(integer=100)]

    # Run the flow in the simulated way
    for _ in test_lib.TestFlowHelper("FlowResponseSerialization",
                                     TestClientMock(), token=self.token,
                                     client_id=self.client_id):
      pass

  def testTerminate(self):
    session_id = flow.GRRFlow.StartFlow(self.client_id, "FlowOrderTest",
                                        token=self.token)

    flow.GRRFlow.TerminateFlow(session_id, token=self.token)
    flow_obj = aff4.FACTORY.Open(session_id, aff4_type="FlowOrderTest",
                                 age=aff4.ALL_TIMES, token=self.token)
    self.assertEqual(flow_obj.IsRunning(), False)
    self.assertEqual(flow_obj.state.context.state,
                     rdfvalue.Flow.State.ERROR)

    reason = "no reason"
    session_id = flow.GRRFlow.StartFlow(self.client_id, "FlowOrderTest",
                                        token=self.token)
    flow.GRRFlow.TerminateFlow(session_id, reason=reason, token=self.token)

    flow_obj = aff4.FACTORY.Open(session_id, aff4_type="FlowOrderTest",
                                 age=aff4.ALL_TIMES, token=self.token)
    self.assertEqual(flow_obj.IsRunning(), False)
    self.assertEqual(flow_obj.state.context.state,
                     rdfvalue.Flow.State.ERROR)
    self.assertTrue(reason in flow_obj.state.context.status)

  def testChildTermination(self):
    session_id = flow.GRRFlow.StartFlow(self.client_id, "CallClientParentFlow",
                                        token=self.token)
    flow_obj = aff4.FACTORY.Open(session_id, token=self.token)
    children = list(flow_obj.ListChildren())
    self.assertEqual(len(children), 1)

    reason = "just so"

    flow.GRRFlow.TerminateFlow(session_id, reason=reason, token=self.token)

    flow_obj = aff4.FACTORY.Open(session_id,
                                 aff4_type="CallClientParentFlow",
                                 token=self.token)
    child = aff4.FACTORY.Open(children[0],
                              aff4_type="CallClientChildFlow",
                              token=self.token)
    self.assertEqual(flow_obj.IsRunning(), False)
    self.assertEqual(flow_obj.state.context.state,
                     rdfvalue.Flow.State.ERROR)

    self.assertTrue("user test" in flow_obj.state.context.status)
    self.assertTrue(reason in flow_obj.state.context.status)
    self.assertEqual(child.IsRunning(), False)
    self.assertEqual(child.state.context.state,
                     rdfvalue.Flow.State.ERROR)

    self.assertTrue("user test" in child.state.context.status)
    self.assertTrue("Parent flow terminated." in child.state.context.status)

  def testNotification(self):
    session_id = flow.GRRFlow.StartFlow(self.client_id, "FlowOrderTest",
                                        token=self.token)
    flow_obj = aff4.FACTORY.Open(session_id, aff4_type="FlowOrderTest",
                                 age=aff4.ALL_TIMES, mode="rw",
                                 token=self.token)
    msg = "Flow terminated due to error"
    flow_obj.Notify("FlowStatus", session_id, msg)
    flow_obj.Close()

    user_fd = aff4.FACTORY.Open(rdfvalue.RDFURN("aff4:/users").Add(
        self.token.username), mode="r", token=self.token)
    notifications = user_fd.ShowNotifications(reset=False)
    self.assertEqual(len(notifications), 1)
    for notification in notifications:
      self.assertTrue(notification.message.endswith(": " + msg))
      self.assertEqual(notification.subject, rdfvalue.RDFURN(session_id))

  def testFormatstringNotification(self):
    session_id = flow.GRRFlow.StartFlow(self.client_id, "FlowOrderTest",
                                        token=self.token)
    flow_obj = aff4.FACTORY.Open(session_id, aff4_type="FlowOrderTest",
                                 age=aff4.ALL_TIMES, mode="rw",
                                 token=self.token)
    # msg contains %s.
    msg = "Flow reading %system% terminated due to error"
    flow_obj.Notify("FlowStatus", session_id, msg)
    flow_obj.Status(msg)
    flow_obj.Close()

  def testSendRepliesAttribute(self):
    # Run the flow in the simulated way. Child's send_replies is set to False.
    # Parent flow will raise if number of responses is > 0.
    for _ in test_lib.TestFlowHelper(
        "ParentFlowWithoutResponses", ClientMock(), client_id=self.client_id,
        check_flow_errors=False, token=self.token,):
      pass

    self.assertEqual(ParentFlowWithoutResponses.success, True)

  notifications = {}

  def CollectNotifications(self, queue, session_ids, priorities, **kwargs):
    now = time.time()
    for session_id in session_ids:
      self.notifications.setdefault(session_id, []).append(now)
    self.old_notify(queue, session_ids, priorities, **kwargs)

  def testNoRequestChildFlowRace(self):

    self.old_notify = scheduler.SCHEDULER._MultiNotifyQueue
    scheduler.SCHEDULER._MultiNotifyQueue = self.CollectNotifications
    try:
      session_id = flow.GRRFlow.StartFlow(self.client_id, "NoRequestParentFlow",
                                          token=self.token)
    finally:
      scheduler.SCHEDULER._MultiNotifyQueue = self.old_notify

    self.assertIn(session_id, self.notifications)

    f = aff4.FACTORY.Open(session_id, token=self.token)

    # Check that the first notification came in after the flow was created.
    self.assertLess(int(f.Get(f.Schema.TYPE).age),
                    1e6 * min(self.notifications[session_id]),
                    "There was a notification for a flow before "
                    "the flow was created.")

  def testCallClientChildFlowRace(self):
    session_id = flow.GRRFlow.StartFlow(self.client_id,
                                        "CallClientParentFlow",
                                        token=self.token)

    client_requests = data_store.DB.ResolveRegex(self.client_id, "task:.*",
                                                 token=self.token)
    self.assertEqual(len(client_requests), 1)

    f = aff4.FACTORY.Open(session_id, token=self.token)

    for (_, _, timestamp) in client_requests:
      # Check that the client request was written after the flow was created.
      self.assertLess(int(f.Get(f.Schema.TYPE).age), timestamp,
                      "The client request was issued before "
                      "the flow was created.")

class FlowTest(test_lib.FlowTestsBaseclass):
  """Tests the Flow."""

  def testBrokenFlow(self):
    """Check that flows which call to incorrect states raise."""
    self.assertRaises(flow_runner.FlowRunnerError, flow.GRRFlow.StartFlow,
                      self.client_id, "BrokenFlow", token=self.token)

  def SendMessages(self, response_ids, session_id, authenticated=True):
    """Send messages to the flow."""
    for response_id in response_ids:
      message = rdfvalue.GrrMessage(
          request_id=1,
          response_id=response_id,
          session_id=session_id)

      if authenticated:
        auth_state = rdfvalue.GrrMessage.AuthorizationState.AUTHENTICATED
        message.auth_state = auth_state

      self.SendMessage(message)

  def SendMessage(self, message):
    # Now messages are set in the data store
    response_attribute = flow_runner.FlowManager.FLOW_RESPONSE_TEMPLATE % (
        message.request_id,
        message.response_id)

    data_store.DB.Set(
        flow_runner.FlowManager.FLOW_STATE_TEMPLATE % message.session_id,
        response_attribute,
        message, token=self.token)

  def SendOKStatus(self, response_id, session_id):
    """Send a message to the flow."""
    message = rdfvalue.GrrMessage(
        request_id=1,
        response_id=response_id,
        session_id=session_id,
        type=rdfvalue.GrrMessage.Type.STATUS,
        auth_state=rdfvalue.GrrMessage.AuthorizationState.AUTHENTICATED)

    status = rdfvalue.GrrStatus(status=rdfvalue.GrrStatus.ReturnedStatus.OK)
    message.payload = status

    self.SendMessage(message)

    # Now also set the state on the RequestState
    request_state, _ = data_store.DB.Resolve(
        flow_runner.FlowManager.FLOW_STATE_TEMPLATE % message.session_id,
        flow_runner.FlowManager.FLOW_REQUEST_TEMPLATE % message.request_id,
        decoder=rdfvalue.RequestState, token=self.token)

    request_state.status = status

    data_store.DB.Set(
        flow_runner.FlowManager.FLOW_STATE_TEMPLATE % message.session_id,
        flow_runner.FlowManager.FLOW_REQUEST_TEMPLATE % message.request_id,
        request_state, token=self.token)

    return message

  def testReordering(self):
    """Check that out of order client messages are reordered."""
    flow_obj = self.FlowSetup("FlowOrderTest")

    # Simultate processing messages arriving in random order
    message_ids = [2, 1, 4, 3, 5]
    self.SendMessages(message_ids, flow_obj.session_id)

    # Send the status message
    message = self.SendOKStatus(6, flow_obj.session_id)

    runner = flow_runner.FlowRunner(flow_obj)
    runner.ProcessCompletedRequests([message])

    # Check that the messages were processed in order
    self.assertEqual(flow_obj.messages, [1, 2, 3, 4, 5])

  def testCallClient(self):
    """Flows can send client messages using CallClient()."""
    flow_obj = self.FlowSetup("FlowOrderTest")

    # Check that a message went out to the client
    tasks = scheduler.SCHEDULER.Query(self.client_id, limit=100,
                                      token=self.token)

    self.assertEqual(len(tasks), 1)

    message = tasks[0]

    self.assertEqual(message.session_id, flow_obj.session_id)
    self.assertEqual(message.request_id, 1)
    self.assertEqual(message.name, "Test")

  def testAuthentication1(self):
    """Test that flows refuse to processes unauthenticated messages."""
    flow_obj = self.FlowSetup("FlowOrderTest")

    # Simultate processing messages arriving in random order
    message_ids = [2, 1, 4, 3, 5]
    self.SendMessages(message_ids, flow_obj.session_id,
                      authenticated=False)

    # Send the status message
    message = self.SendOKStatus(6, flow_obj.session_id)

    runner = flow_runner.FlowRunner(flow_obj)
    runner.ProcessCompletedRequests([message])

    # Now messages should actually be processed
    self.assertEqual(flow_obj.messages, [])

  def testAuthentication2(self):
    """Test that flows refuse to processes unauthenticated messages.

    Here we try to simulate an attacker injecting unauthenticated
    messages midstream.

    The current implementation actually fails to process the entire
    flow since the injected messages displace the real ones if they
    arrive earlier. This can be an effective DoS against legitimate
    clients but would require attackers to guess session ids.
    """
    flow_obj = self.FlowSetup("FlowOrderTest")

    # Simultate processing messages arriving in random order
    message_ids = [1, 2]
    self.SendMessages(message_ids, flow_obj.session_id,
                      authenticated=True)

    # Now suppose some of the messages are spoofed
    message_ids = [3, 4, 5]
    self.SendMessages(message_ids, flow_obj.session_id,
                      authenticated=False)

    # And now our real messages arrive
    message_ids = [5, 6]
    self.SendMessages(message_ids, flow_obj.session_id,
                      authenticated=True)

    # Send the status message
    message = self.SendOKStatus(7, flow_obj.session_id)

    runner = flow_runner.FlowRunner(flow_obj)
    runner.ProcessCompletedRequests([message])

    # Some messages should actually be processed
    self.assertEqual(flow_obj.messages, [1, 2, 5, 6])

  def testWellKnownFlows(self):
    """Test the well known flows."""
    test_flow = self.FlowSetup("WellKnownSessionTest")

    # Make sure the session ID is well known
    self.assertEqual(test_flow.session_id,
                     test_lib.WellKnownSessionTest.well_known_session_id)

    # Messages to Well Known flows can be unauthenticated
    messages = [rdfvalue.GrrMessage(args=str(i)) for i in range(10)]

    for message in messages:
      test_flow.ProcessMessage(message)

    # The messages might be processed in arbitrary order
    test_flow.messages.sort()

    # Make sure that messages were processed even without a status
    # message to complete the transaction (Well known flows do not
    # have transactions or states - all messages always get to the
    # ProcessMessage method):
    self.assertEqual(test_flow.messages, range(10))

  def testArgParsing(self):
    """Test that arguments can be extracted and annotated successfully."""

    # Should raise on parsing default.
    self.assertRaises(type_info.TypeValueError, flow.GRRFlow.StartFlow,
                      self.client_id, "BadArgsFlow1", arg1=False,
                      token=self.token)

    # Should not raise now if we provide the correct type.
    flow.GRRFlow.StartFlow(self.client_id, "BadArgsFlow1",
                           arg1=rdfvalue.PathSpec(), token=self.token)

class GeneralFlowsTest(test_lib.FlowTestsBaseclass):
  """Tests some flows."""

  def testCallState(self):
    """Test the ability to chain flows."""
    CallStateFlow.success = False

    # Run the flow in the simulated way
    for _ in test_lib.TestFlowHelper("CallStateFlow", ClientMock(),
                                     client_id=self.client_id,
                                     token=self.token):
      pass

    self.assertEqual(CallStateFlow.success, True)

  def Work(self, client_mock, worker_mock):
    while True:
      client_processed = client_mock.Next()
      flows_run = []
      for flow_run in worker_mock.Next():
        flows_run.append(flow_run)

      if client_processed == 0 and not flows_run:
        break

  def testDelayedCallState(self):
    """Tests the ability to delay a CallState invocation."""

    old_time = time.time
    try:
      time.time = lambda: 10000

      client_mock = ClientMock()
      client_mock = test_lib.MockClient(self.client_id, client_mock,
                                        token=self.token)
      worker_mock = test_lib.MockWorker(check_flow_errors=True,
                                        token=self.token)

      flow.GRRFlow.StartFlow(self.client_id, "DelayedCallStateFlow",
                             token=self.token)

      self.Work(client_mock, worker_mock)

      # We should have done the first CallState so far.
      self.assertEqual(DelayedCallStateFlow.state, 1)

      time.time = lambda: 10050

      # 50 seconds more is not enough.
      self.Work(client_mock, worker_mock)
      self.assertEqual(DelayedCallStateFlow.state, 1)

      # But 100 is.
      time.time = lambda: 10100
      self.Work(client_mock, worker_mock)
      self.assertEqual(DelayedCallStateFlow.state, 2)

    finally:
      time.time = old_time

  def testChainedFlow(self):
    """Test the ability to chain flows."""
    ParentFlow.success = False

    # Run the flow in the simulated way
    for _ in test_lib.TestFlowHelper("ParentFlow", ClientMock(),
                                     client_id=self.client_id,
                                     token=self.token):
      pass

    self.assertEqual(ParentFlow.success, True)

  def testBrokenChainedFlow(self):
    """Test that exceptions are properly handled in chain flows."""
    BrokenParentFlow.success = False

    # Run the flow in the simulated way
    for _ in test_lib.TestFlowHelper(
        "BrokenParentFlow", ClientMock(), client_id=self.client_id,
        check_flow_errors=False, token=self.token):
      pass

    self.assertEqual(BrokenParentFlow.success, True)

  def testIteratedDirectoryListing(self):
    """Test that the client iterator works."""
    # Install the mock
    vfs.VFS_HANDLERS[rdfvalue.PathSpec.PathType.OS] = MockVFSHandler
    path = "/"

    # Run the flow in the simulated way
    client_mock = test_lib.ActionMock("IteratedListDirectory")
    for _ in test_lib.TestFlowHelper(
        "IteratedListDirectory", client_mock, client_id=self.client_id,
        pathspec=rdfvalue.PathSpec(path="/",
                                   pathtype=rdfvalue.PathSpec.PathType.OS),
        token=self.token):
      pass

    fd = aff4.FACTORY.Open(self.client_id.Add("fs/os").Add(path),
                           token=self.token)
    directory = [ch for ch in fd.OpenChildren()]
    pb = rdfvalue.PathSpec(path=path,
                           pathtype=rdfvalue.PathSpec.PathType.OS)
    directory2 = list(vfs.VFSOpen(pb).ListFiles())
    directory.sort()
    result = [x.Get(x.Schema.STAT) for x in directory]

    # Make sure that the resulting directory is what it should be
    for x, y in zip(result, directory2):
      self.assertEqual(x.st_mode, y.st_mode)
      self.assertProtoEqual(x, y)

  def testClientEventNotification(self):
    """Make sure that client events handled securely."""
    received_events = []

    class Listener1(flow.EventListener):  # pylint: disable=unused-variable
      well_known_session_id = rdfvalue.SessionID("aff4:/flows/W:test2")
      EVENTS = ["Event2"]

      @flow.EventHandler(auth_required=True)
      def ProcessMessage(self, message=None, event=None):
        # Store the results for later inspection.
        received_events.append((message, event))

    event = rdfvalue.GrrMessage(
        session_id="W:SomeFlow",
        name="test message",
        source="C.1395c448a443c7d9",
        auth_state=rdfvalue.GrrMessage.AuthorizationState.AUTHENTICATED,
        payload=rdfvalue.PathSpec(
            path="foobar"))

    flow.PublishEvent("Event2", event, token=self.token)

    worker = test_lib.MockWorker(token=self.token)
    while worker.Next():
      pass
    worker.pool.Join()

    # This should not work - the event listender does not accept client events.
    self.assertEqual(received_events, [])

    class Listener2(flow.EventListener):  # pylint: disable=unused-variable
      well_known_session_id = rdfvalue.SessionID("aff4:/flows/W:test3")
      EVENTS = ["Event2"]

      @flow.EventHandler(auth_required=True, allow_client_access=True)
      def ProcessMessage(self, message=None, event=None):
        # Store the results for later inspection.
        received_events.append((message, event))

    flow.PublishEvent("Event2", event, token=self.token)

    worker = test_lib.MockWorker(token=self.token)
    while worker.Next():
      pass
    worker.pool.Join()

    # This should now work - the event listener does accept client events.
    self.assertEqual(len(received_events), 1)

  def testFlowNotification(self):
    event_queue = "EV"

    received_events = []

    class FlowDoneListener(flow.EventListener):  # pylint: disable=unused-variable
      well_known_session_id = rdfvalue.SessionID(
          "aff4:/flows/%s:FlowDone" % event_queue)
      EVENTS = ["Not used"]

      @flow.EventHandler(auth_required=True)
      def ProcessMessage(self, message=None, event=None):
        _ = event
        # Store the results for later inspection.
        received_events.append(message)

    # Install the mock
    vfs.VFS_HANDLERS[rdfvalue.PathSpec.PathType.OS] = MockVFSHandler
    path = rdfvalue.PathSpec(path="/",
                             pathtype=rdfvalue.PathSpec.PathType.OS)

    # Run the flow in the simulated way
    client_mock = test_lib.ActionMock("IteratedListDirectory")
    for _ in test_lib.TestFlowHelper(
        "IteratedListDirectory", client_mock, client_id=self.client_id,
        notification_event=rdfvalue.SessionID(
            "aff4:/flows/%s:FlowDone" % event_queue),
        pathspec=path, token=self.token):
      pass

    # The event goes to an external queue so we need another worker.
    worker = test_lib.MockWorker(queue=rdfvalue.RDFURN(event_queue),
                                 token=self.token)
    while worker.Next():
      pass
    worker.pool.Join()

    self.assertEqual(len(received_events), 1)
    self.assertEqual(received_events[0].session_id,
                     rdfvalue.SessionID("aff4:/flows/EV:FlowDone"))
    self.assertEqual(received_events[0].source,
                     rdfvalue.RDFURN("IteratedListDirectory"))

    flow_event = rdfvalue.FlowNotification(received_events[0].args)
    self.assertEqual(flow_event.flow_name, "IteratedListDirectory")
    self.assertEqual(flow_event.client_id, "aff4:/C.1000000000000000")
    self.assertEqual(flow_event.status, rdfvalue.FlowNotification.Status.OK)

  def testEventNotification(self):
    """Test that events are sent to listeners."""
    received_events = []

    class Listener1(flow.EventListener):  # pylint: disable=unused-variable
      well_known_session_id = rdfvalue.SessionID("aff4:/flows/W:test1")
      EVENTS = ["Event1"]

      @flow.EventHandler(auth_required=True)
      def ProcessMessage(self, message=None, event=None):
        # Store the results for later inspection.
        received_events.append((message, event))

    event = rdfvalue.GrrMessage(
        session_id="aff4:/W:SomeFlow", name="test message",
        payload=rdfvalue.PathSpec(path="foobar", pathtype=1))

    # Not allowed to publish a message not from a valid source.
    self.assertRaises(RuntimeError, flow.PublishEvent, "Event1", event,
                      token=self.token)

    event.source = "Source"

    # First make the message unauthenticated.
    event.auth_state = rdfvalue.GrrMessage.AuthorizationState.UNAUTHENTICATED

    # Publish the event.
    flow.PublishEvent("Event1", event, token=self.token)

    # Now emulate a worker.
    worker = test_lib.MockWorker(token=self.token)
    while worker.Next():
      pass
    worker.pool.Join()

    # This should not work - the unauthenticated message is dropped.
    self.assertEqual(received_events, [])

    # Now make the message authenticated.
    event.auth_state = rdfvalue.GrrMessage.AuthorizationState.AUTHENTICATED

    # Publish the event.
    flow.PublishEvent("Event1", event, token=self.token)

    # Now emulate a worker.
    while worker.Next():
      pass
    worker.pool.Join()

    # This should now work:
    self.assertEqual(len(received_events), 1)

    # Make sure the source is correctly propagated.
    self.assertEqual(received_events[0][0].source, "aff4:/Source")
    self.assertEqual(received_events[0][1].path, "foobar")

    received_events = []
    # Now schedule ten events at the same time.
    for i in xrange(10):
      event.source = "Source%d" % i
      flow.PublishEvent("Event1", event, token=self.token)

    # Now emulate a worker.
    while worker.Next():
      pass
    worker.pool.Join()

    self.assertEqual(len(received_events), 10)
    for i in range(10):
      self.assertEqual(received_events[i][0].source,
                       "aff4:/Source%d" % i)
      self.assertEqual(received_events[i][1].path, "foobar")

  def testClientPrioritization(self):
    """Test that flow priorities work on the client side."""

    result = []
    client_mock = PriorityClientMock(result)
    client_mock = test_lib.MockClient(self.client_id, client_mock,
                                      token=self.token)
    worker_mock = test_lib.MockWorker(check_flow_errors=True,
                                      token=self.token)

    # Start some flows with different priorities.
    args = [(rdfvalue.GrrMessage.Priority.LOW_PRIORITY, "low priority"),
            (rdfvalue.GrrMessage.Priority.MEDIUM_PRIORITY, "medium priority"),
            (rdfvalue.GrrMessage.Priority.LOW_PRIORITY, "low priority2"),
            (rdfvalue.GrrMessage.Priority.HIGH_PRIORITY, "high priority"),
            (rdfvalue.GrrMessage.Priority.MEDIUM_PRIORITY, "medium priority2")]

    for (priority, msg) in args:
      flow.GRRFlow.StartFlow(
          self.client_id, "PriorityFlow", msg=msg,
          priority=priority, token=self.token)

    while True:
      client_processed = client_mock.Next()
      flows_run = []
      for flow_run in worker_mock.Next():
        flows_run.append(flow_run)

      if client_processed == 0 and not flows_run:
        break

    # The flows should be run in order of priority.
    self.assertEqual(result[0:1],
                     [u"high priority"])
    self.assertEqual(sorted(result[1:3]),
                     [u"medium priority", u"medium priority2"])
    self.assertEqual(sorted(result[3:5]),
                     [u"low priority", u"low priority2"])

  def testWorkerPrioritization(self):
    """Test that flow priorities work on the worker side."""

    result = []
    client_mock = PriorityClientMock(result)
    client_mock = test_lib.MockClient(self.client_id, client_mock,
                                      token=self.token)
    worker_mock = test_lib.MockWorker(check_flow_errors=True,
                                      token=self.token)

    # Start some flows with different priorities.
    args = [(rdfvalue.GrrMessage.Priority.LOW_PRIORITY, "low priority"),
            (rdfvalue.GrrMessage.Priority.MEDIUM_PRIORITY, "medium priority"),
            (rdfvalue.GrrMessage.Priority.LOW_PRIORITY, "low priority2"),
            (rdfvalue.GrrMessage.Priority.HIGH_PRIORITY, "high priority"),
            (rdfvalue.GrrMessage.Priority.MEDIUM_PRIORITY, "medium priority2")]

    server_result = []
    PriorityFlow.storage = server_result

    for (priority, msg) in args:
      flow.GRRFlow.StartFlow(
          self.client_id, "PriorityFlow", msg=msg,
          priority=priority, token=self.token)

    while True:
      # Run all the clients first so workers have messages to choose from.
      client_processed = 1
      while client_processed:
        client_processed = client_mock.Next()
      # Now process the results, this should happen in the correct order.
      flows_run = []
      for flow_run in worker_mock.Next():
        flows_run.append(flow_run)

      if not flows_run:
        break

    # The flows should be run in order of priority.
    self.assertEqual(server_result[0:1],
                     [u"high priority"])
    self.assertEqual(sorted(server_result[1:3]),
                     [u"medium priority", u"medium priority2"])
    self.assertEqual(sorted(server_result[3:5]),
                     [u"low priority", u"low priority2"])

class ResourcedWorker(test_lib.MockWorker):
  USER_CPU = [1, 20, 5, 16]
  SYSTEM_CPU = [4, 20, 2, 8]
  NETWORK_BYTES = [180, 1000, 580, 2000]

class FlowLimitTests(test_lib.FlowTestsBaseclass):

  def RunFlow(self, flow_name, **kwargs):
    result = {}
    client_mock = CPULimitClientMock(result)
    client_mock = test_lib.MockClient(self.client_id, client_mock,
                                      token=self.token)
    worker_mock = ResourcedWorker(check_flow_errors=True,
                                  token=self.token)

    flow.GRRFlow.StartFlow(self.client_id, flow_name,
                           token=self.token, **kwargs)

    while True:
      client_processed = client_mock.Next()
      flows_run = []
      for flow_run in worker_mock.Next():
        flows_run.append(flow_run)

      if client_processed == 0 and not flows_run:
        break

    return result

  def testNetworkLimit(self):
    """Tests that the cpu limit works."""
    result = self.RunFlow("NetworkLimitFlow", network_bytes_limit=10000)
    self.assertEqual(result["networklimit"], [10000, 9820, 8820, 8240])

  def testCPULimit(self):
    """Tests that the cpu limit works."""
    result = self.RunFlow("CPULimitFlow", cpu_limit=300)
    self.assertEqual(result["cpulimit"], [300, 295, 255])

class MockVFSHandler(vfs.VFSHandler):
  """A mock VFS handler with fake files."""
  children = []
  for x in range(10):
    child = rdfvalue.StatEntry(pathspec=rdfvalue.PathSpec(
        path="Foo%s" % x, pathtype=rdfvalue.PathSpec.PathType.OS))
    children.append(child)

  supported_pathtype = rdfvalue.PathSpec.PathType.OS

  def __init__(self, base_fd, pathspec=None):
    super(MockVFSHandler, self).__init__(base_fd, pathspec=pathspec)

    self.pathspec.Append(pathspec)

  def ListFiles(self):
    return self.children

  def IsDirectory(self):
    return self.pathspec.path == "/"

class PriorityClientMock(object):

  in_rdfvalue = rdfvalue.DataBlob

  def __init__(self, storage):
    # Register us as an action plugin.
    actions.ActionPlugin.classes["Store"] = self
    self.storage = storage

  def Store(self, data):
    self.storage.append(self.in_rdfvalue(data).string)
    return [rdfvalue.DataBlob(string="Hello World")]

class PriorityFlow(flow.GRRFlow):
  """This flow is used to test priorities."""

  flow_typeinfo = type_info.TypeDescriptorSet(
      type_info.String(
          name="msg",
          default=""))

  @flow.StateHandler(next_state="Done")
  def Start(self):
    self.CallClient("Store", string=self.state.msg, next_state="Done")

  @flow.StateHandler()
  def Done(self, responses):
    _ = responses
    try:
      self.storage.append(self.state.msg)
    except AttributeError:
      pass

class CPULimitClientMock(object):

  in_rdfvalue = rdfvalue.DataBlob

  def __init__(self, storage):
    # Register us as an action plugin.
    actions.ActionPlugin.classes["Store"] = self
    self.storage = storage

  def HandleMessage(self, message):
    self.storage.setdefault("cpulimit", []).append(message.cpu_limit)
    self.storage.setdefault("networklimit",
                            []).append(message.network_bytes_limit)

class CPULimitFlow(flow.GRRFlow):
  """This flow is used to test the cpu limit."""

  @flow.StateHandler(next_state="State1")
  def Start(self):
    self.CallClient("Store", string="Hey!", next_state="State1")

  @flow.StateHandler(next_state="State2")
  def State1(self):
    self.CallClient("Store", string="Hey!", next_state="State2")

  @flow.StateHandler(next_state="Done")
  def State2(self):
    self.CallClient("Store", string="Hey!", next_state="Done")

  @flow.StateHandler()
  def Done(self, responses):
    pass

class NetworkLimitFlow(flow.GRRFlow):
  """This flow is used to test the network bytes limit."""

  @flow.StateHandler(next_state="State1")
  def Start(self):
    self.CallClient("Store", next_state="State1")

  @flow.StateHandler(next_state="State2")
  def State1(self):
    # The mock worker doesn't track usage so we add it here.
    self.CallClient("Store", next_state="State2")

  @flow.StateHandler(next_state="State3")
  def State2(self):
    self.CallClient("Store", next_state="State3")

  @flow.StateHandler(next_state="Done")
  def State3(self):
    self.CallClient("Store", next_state="Done")

  @flow.StateHandler()
  def Done(self, responses):
    pass

class ClientMock(object):
  """Mock of client actions."""

  in_rdfvalue = None
  out_rdfvalue = rdfvalue.RDFString

  def __init__(self):
    # Register us as an action plugin.
    actions.ActionPlugin.classes["ReturnHello"] = self

  def ReturnHello(self, _):
    return [rdfvalue.RDFString("Hello World")]

class ChildFlow(flow.GRRFlow):
  """This flow will be called by our parent."""

  @flow.StateHandler(next_state="ReceiveHello")
  def Start(self):
    self.CallClient("ReturnHello", next_state="ReceiveHello")

  @flow.StateHandler()
  def ReceiveHello(self, responses):
    # Relay the client's message to our parent
    for response in responses:
      self.SendReply(rdfvalue.RDFString("Child received"))
      self.SendReply(response)

class BrokenChildFlow(ChildFlow):
  """A broken flow which raises."""

  @flow.StateHandler()
  def ReceiveHello(self, responses):
    raise IOError("Boo")

class ParentFlow(flow.GRRFlow):
  """This flow will launch a child flow."""

  # This is a global flag which will be set when the flow runs.
  success = False

  @flow.StateHandler(next_state="ParentReceiveHello")
  def Start(self):
    # Call the child flow.
    self.CallFlow("ChildFlow",
                  next_state="ParentReceiveHello")

  @flow.StateHandler()
  def ParentReceiveHello(self, responses):
    responses = list(responses)
    if (len(responses) != 2 or "Child" not in unicode(responses[0]) or
        "Hello" not in unicode(responses[1])):
      raise RuntimeError("Messages not passed to parent")

    ParentFlow.success = True

class ParentFlowWithoutResponses(flow.GRRFlow):
  """This flow will launch a child flow."""

  success = False

  @flow.StateHandler(next_state="ParentReceiveHello")
  def Start(self):
    # Call the child flow.
    self.CallFlow("ChildFlow",
                  send_replies=False,
                  next_state="ParentReceiveHello")

  @flow.StateHandler()
  def ParentReceiveHello(self, responses):
    if responses:
      raise RuntimeError("Messages are not expected to be passed to parent")

    ParentFlowWithoutResponses.success = True

class BrokenParentFlow(flow.GRRFlow):
  """This flow will launch a broken child flow."""

  # This is a global flag which will be set when the flow runs.
  success = False

  @flow.StateHandler(next_state="ReceiveHello")
  def Start(self):
    # Call the child flow.
    self.CallFlow("BrokenChildFlow",
                  next_state="ReceiveHello")

  @flow.StateHandler()
  def ReceiveHello(self, responses):
    if (responses or
        responses.status.status == rdfvalue.GrrStatus.ReturnedStatus.OK):
      raise RuntimeError("Error not propagated to parent")

    BrokenParentFlow.success = True

class CallStateFlow(flow.GRRFlow):
  """A flow that calls one of its own states."""

  # This is a global flag which will be set when the flow runs.
  success = False

  @flow.StateHandler(next_state="ReceiveHello")
  def Start(self):
    # Call the receive state.
    self.CallState([rdfvalue.RDFString("Hello")],
                   next_state="ReceiveHello")

  @flow.StateHandler()
  def ReceiveHello(self, responses):
    if responses.First() != "Hello":
      raise RuntimeError("Did not receive hello.")

    CallStateFlow.success = True

class DelayedCallStateFlow(flow.GRRFlow):
  """A flow that calls one of its own states with a delay."""

  # This is a global flag which will be set when the flow runs.
  state = 0

  @flow.StateHandler(next_state="ReceiveHello")
  def Start(self):
    # Call the child flow.
    self.CallState([rdfvalue.RDFString("Hello")],
                   next_state="ReceiveHello")

  @flow.StateHandler(next_state="DelayedHello")
  def ReceiveHello(self, responses):
    if responses.First() != "Hello":
      raise RuntimeError("Did not receive hello.")
    DelayedCallStateFlow.state = 1

    # Call the child flow.
    self.CallState([rdfvalue.RDFString("Hello")],
                   next_state="DelayedHello", delay=100)

  @flow.StateHandler()
  def DelayedHello(self, responses):
    if responses.First() != "Hello":
      raise RuntimeError("Did not receive hello.")
    DelayedCallStateFlow.state = 2

class BadArgsFlow1(flow.GRRFlow):
  """A flow that has args that mismatch type info."""

  flow_typeinfo = type_info.TypeDescriptorSet(
      type_info.RDFValueType(
          name="arg1",
          rdfclass=rdfvalue.PathSpec))

class FlowTestLoader(test_lib.GRRTestLoader):
  base_class = test_lib.FlowTestsBaseclass

def main(argv):
  # Run the full test suite
  test_lib.GrrTestProgram(argv=argv, testLoader=FlowTestLoader())

if __name__ == "__main__":
  flags.StartMain(main)


There are couples that thrive on being distinct from each other, and there are couples that thrive on sharing. 'His' and 'hers' is not for everyone, as for some that amounts to a type of co-opted identity, or it simply isn't for them. But for some couples, 'his' and 'hers' is an affirmation of their love and their union, whatever form that union may take. They want the matching robes and the identical scarves and the designer ensembles that are two sides of the same coin. And the world be damned!
Watches are no different. There are couples that love the idea of having matching watches from the same watchmaker and collection. It could be for their wedding, to celebrate an anniversary or just on a delicious whim. All in the name of love. And luxury watchmakers have fulfilled that niche by offering select matching men's and ladies' watches.
Tissot is one such Swiss watchmaker. Renowned for its innovative craftsmanship and superlative designs, this historic watch brand has an enviable array of paired watches for men and women. And each pair is distinct and speaks to different people, as with any watch.
The Tissot Chemin Des Tourelles watch for men and women as shown here is a vision in silver. This watch is the epitome of classic and class. Its legacy is that it's named after the the street in Le Locle, Switzerland, where the Tissot factory was established in 1907, and where it is still located to this day.
The watch case is made of stainless steel and equipped with a sapphire glass. This collection is hugely versatile in the number of style options for both men and women in dial designs, colour accents on the dial and bezel and strap or bracelet offerings. In addition, the watch comes with a automatic ETA Powermatic 80 movement and is water resistant to 5 bar.
This pair are perfect for the couple who appreciate the legacy of its name and the classic lines of its design. They are a worldly couple, quietly sophisticated and comfortable in their taste and the watch that they wear. There is no ostentation here - just class and taste.
The Tissot PR 100 is a timepiece that fits into one's daily routine as easily as the most comfortable pair of shoes. A most elegant pair of shoes, mind you! These watches for men and women are as understated as they are perfect for any occasion, at any time of the day.
The Tissot PR100 sports a stainless steel case, as well as a stainless steel bracelet, quartz movement and sapphire glass. In addition, it is water resistant to 10 ATM. The entire look is functional and practical, yet never dull or pedestrian in design or craftsmanship.
This pair of watches is an exact fit for the couple that word hard, strive hard and don't wish to show off about it. They enjoy the good things in life and appreciate each other for that, which is why they are drawn to these matching watches from Tissot. Simplicity can be captivating.
The Tissot Bridgeport is a watch for men and women that is timeless in design yet with a sense of playful 'otherness' about it. The dial design and tapered Roman numerals are elegant, whilst the models pictured here have the bezel and hour, minute and second hands all in rose (pink) gold, which is delightfully eye-catching.
The watch has the usual Tissot credentials and superlative crafting, with a case made of stainless steel and equipped with sapphire glass. In addition, the watch comes with a automatic movement and is water resistant to 5 ATM. The styling is Tissot to the core - clean and smart.
The Tissot Bridgeport is for the couple who can appreciate that the dial has 1853 prominently displayed (the year in which Tissot was founded) yet love the quirky rose gold accents. This is a couple who are comfortable with each other and for whom irreverence is a shared pleasure.
The Tissot Le Locle was released in 2013 to celebrate the 160th anniversary of Tissot's founding. It is appropriately named after the hometown of this legendary and highly respected Swiss watchmaker. The Le Locle is crisp and clean, with superb design features.
This watch is an ode to stainless steel and the colour silver, pictured here as beautifully complemented by a dramatically white dial. It offers an automatic movement with a sapphire crystal glass, and a water resistance to 3 bar. A skeleton caseback gives the watch a dramatic edge.
The Le Locle will appeal to the couple that are trendy in a way that is discreet and understated. Theirs is an uncluttered lifestyle and design aesthetic. Subtlety is what they appreciate. They may even appreciate the minimalist, but with a sense of flair - as with this stunning watch.
The word 'luxury' can veer into the cluttered, the fussy and the overdone. This supremely discerning watch is the opposite - it is uncluttered, unfussy, unexpected. The Tissot Luxury exudes confidence, and will be owned by a couple with confidence to match.
The watch case here is of stainless steel and equipped with a sapphire glass. It comes with a automatic ETA Powermatic 80 movement and is water resistant to 5 bar. A skeleton caseback gives the Tissot Luxury a dramatic twist, unexpected in a watch with such an effortless design.
The couple who opt for these Tissot watches have nothing to declare because they are as assured about their choice and taste in a watch as they are about each other. Serenity and contentment are what this couple are about, with refined watches to match.


The novel technology of mobile telephony has over the last years become the focus point of numerous discussions, both in academia and business environments, due to its tremendously social penetrating abilities. Making the conveyance from telephone's cultural heritage to that of the mobile's augmented reality has generated as much support from various critics, as it has discontent. But the fact still remains that for the privileged developed half of the world, mobiles have become to be viewed as a trendy necessity as well as a social networking tool.
An electronic telecommunications device, the mobile phone or cellular phone, commonly referred to as the "cell," has become one of those personal property items that can fit the criteria of being both a gadget and a tool. Offering its communicating services since the early to mid 1980s, the considerably larger version of the mobile phone was permanently installed in vehicles as car phones. As technological innovations made miniaturization possible, the majority now of mobile phones are easily controlled and operated single-handed. Moreover, the standard voice feature has been enhanced with additional services, like text messaging, camera capabilities, internet browsing and MMS features for sending and receiving photos and video.
Mainly due to their low establishment costs and rapid deployments, mobile phones have since their first introduction spread rapidly throughout the world, outstripping the growth of fixed telephony. From Europe and Australia, to Asia and America, mobile phones are now widely used, with the majority of adults, teenagers and even children now owning at least one model. Packed with widely diverse features, from alarms to teleconference abilities, mobile phones have set the pace to a new type of communication based culture. But the extreme overload of cell phones has not resulted in closer or more genuine communication principles. Still people, in most cultures, base their business deals and personal affiliations to face-to-face interaction, leaving mobile telephony less ground to grow as a meaningful type of communication. After all, it is not that different than having a fixed telephone line; the difference mainly being that you carry that line whenever you might be.
Yet, mobile telephony use has become ubiquitous due to the interoperability factor telecom networks have endorsed and most have allowed it to spread across continents. In fewer than twenty years, mobile phones have indeed gone from being rare and expensive devices mainly used by businesses, to low-cost, trendy and personal items, used by everyone who wishes to have the ability to reach and be reached by others. But, interestingly enough, sociologists have realized that, as any other type of social networking device, mobile users began to develop vastly different practices based on their own cultural biases.


text:
Montblanc Pays Tribute To One Of World's Most Revered Scientists
by Editorial TeamPublished 7 January 2013 at 03:02
Montblanc has started 2013 by releasing two Great Characters Limited Edition writing instruments in tribute to one of the world's most renowned and influential physicists of the 20th century, Albert Einstein (1879 – 1955).
The Great Characters series has been designed and created in honour of great individuals who, through their unique talent and vision, have made an enduring impact on mankind.
With an unparalleled ability to understand the most complex mysteries of the physical universe and an insatiable desire to break new boundaries, no man of science has achieved such widespread recognition for his contribution to the advancement of human knowledge. The now famous equation "e=mc2" gave the scientific community a way of unlocking the previously unknown mysteries of the Universe. He was awarded the Nobel Prize in Physics in 1921 for his overall achievements in Theoretical Physics and his discovery of the law of the Photoelectric Effect. In addition to profoundly altering our understanding of space, time, and energy with his scientific discoveries, Einstein became a passionate advocate of peace, world order, and cooperation.
Now on sale, this writing masterpiece, available in an Albert Einstein Limited Edition of just 99 pieces (priced at £19,656.00 including VAT) and an Albert Einstein Limited Edition of 3000 units (costing £2,352.00 including VAT), celebrates Einstein's remarkable legacy. The former makes reference to the chemical element ʻEinsteinium' with the ordinal number 99, and every detail brings to life the ground-breaking work that earned him such respect and admiration internationally. Crafted from 750 solid white gold, the body of this precious piece is covered with a skeleton net with a filigree overlay representing the space-time curve, Einstein's disruptive discovery that demonstrated how in his universe, space and time are no longer flat but can pushed and pulled, stretched and warped by matter.
The filigree engravings on the barrel and cone of the pen reflect his most famous formulas, and the nib is enriched with the engraving of the chemical element ʻEinsteinium' or ʻEs', a rare radioactive metal named after Einstein to honour his achievements. The pen's clip is bejewelled with a sapphire bowl of approximately 1,3 ct, while the iconic star-shaped Montblanc emblem carved out of moonstone crowns this masterpiece with its luminous display of colours.
A numerical reference to Einstein's outstanding body of work, the limitation number of Albert Einstein Limited Edition 3000 refers to the speed of light measured at ~300.000.000 m/s. While platinum-plated lines defined in the dark blue lacquer of the pen's cap represent the space-time curve, the platinum barrel is engraved with his most famous scientific formulas. This 750 gold nib delivers an unparalleled writing experience. Crowning the top of the cap, the iconic Montblanc emblem is covered with sapphire glass.
www.montblanc.com
D-Type Jaguar Racer Becomes Automotive Art With Limited Edition Clock
First Copy of The Who's 1965 My Generation Album Sells for £11,000
Creative Lab is the Shortcut to Becoming an Interior Design Maestro
A Look Back at Rolls-Royce Motor Cars Bespoke Creations in 2020

redpajama_set_name: RedPajamaCommonCrawl


• to develop an appreciation of physics as a creative activity, using informed intuition and imagination to create an understanding of the beauty, simplicity and symmetry in nature.
The syllabus will be assessed under the headings knowledge, understanding, skills, and competence. The attitudinal objectives will be assessed where feasible. All material within the syllabus is examinable. It should be noted that STS is examinable. Students will be expected to have a knowledge of general applications but will not be required to have a detailed knowledge of specific applications. Practical work is an integral part of the study of physics; it will initially be assessed through the medium of the written examination paper. An element of practical assessment may be included as part of the overall assessment at a later stage.


A/V Revolution web technology has identified free-times.com as a music/media content website operating primarily under the function of Publishers.
Our database currently shows 2 social media links connected to free-times.com.
152 queries in 2.251 seconds.


text:
Jazz giants to share the stage at Montgomery College in Rockville
Publication: Maryland Gazette.Com
Author: Cody Calamaio
After more than a decade of working together in a quartet, Grammy Award-winning saxophonist Branford Marsalis and his longtime piano player Joey Calderazzo are setting out on their own. The idea for a duo collaboration album was not born in the studio, but rather on a golf course.
As amateur golf buffs, Marsalis and Calderazzo often would play together in celebrity tournaments. Sometimes, the organizers would ask the pair to perform something, but Marsalis would beg off with the excuse that there was no acoustic piano on the course.
"One year they invited us and there was a damn piano," Marsalis recalls.
Enjoying the music they made together on the green, Marsalis decided to just invite Calderazzo to play with him as a duo at the 2009 Newport Jazz Festival.
"At the end of that concert in August, I said, 'Hey, I'm booking studio time,'" Marsalis says.
The studio session resulted in this summer's release of the pair's debut duo album "Songs of Mirth and Melancholy" on Marsalis' own label. The pair will perform songs from the album on Monday evening at Montgomery College's Robert E. Parilla Performing Arts Center in Rockville.
Marsalis is a member of a family jazz dynasty that earned him, his father and three brothers the Jazz Masters Fellowship Award from the National Endowment for the Arts in 2011. His career includes three Grammy Awards, a Tony Award nomination for the score of the Broadway revival of "Fences," a stint as music director of "The Tonight Show with Jay Leno" in the 1990s, and acting roles in movies such as "Throw Mama from the Train" and "School Daze." In addition to his work with his quartet, Marsalis performs as a soloist with classical ensembles and orchestras.
The collaboration with Calderazzo is not the jazz and classical saxophonist's first duo recording, having also recorded with his father Ellis Marsalis Jr. ("Loved Ones," 1995) and longtime friend Harry Connick Jr. ("Occasion," 2005).
Calderazzo joined Marsalis' quartet in 1998, replacing the late Kenny Kirkland.
"Being his piano player, it is sort of a natural progression to scale down and play something like this," Calderazzo says.
For Calderazzo, playing in a duo is more difficult than working as part of the Branford Marsalis Quartet because he must think about providing all the elements usually filled by the other instruments of the quartet.
"There is no bass, there are no drums, but I have to supply all of that for Branford," Calderazzo says. "I have a big job, but it's rewarding."
Marsalis found the experience of just working with Calderazzo very much the same as working with him in the quartet in terms of the interplay of their instruments, but felt they each had a heavier load to carry.
"Much like chamber music we have to achieve a maximum of musical efficiency with fewer instruments," Marsalis says.
Showing his chops on tenor and soprano saxophone, "Songs of Mirth and Melancholy" stays true to its name with compositions evoking a range of emotions. The nine-track album consists of seven original songs and covers of Wayne Shorter's "Face On the Barroom Floor" and Johannes Brahms' "Die Trauernde." The album features three new compositions by Marsalis including "Precious," inspired by the movie of the same name. Much of the collaboration album's composition was figured out separately ahead of time before meshing together in two days in the recording studio in North Carolina.
Calderazzo "wrote tunes, I wrote tunes, and it all sort of worked itself out," Marsalis says.
The pianist contributed two new compositions "One Way" and "La Valse Kendall" and new versions of two songs from other albums.
"I can do anything and Branford will follow, and vice versa," Calderazzo says.
Besides cues in the title of the album, Marsalis enjoys allowing the listener to project their own thoughts and experiences onto the music.
"Instrumental music can be about whatever you want it to be about," he says.
Marsalis feels his live show provides a "respite" from the normal concert-going experience where the listener is bound into the lyrics of the songwriter.
"I want people to have a musical open mind and let the songs mean whatever they mean," he says.
Currently the pair are performing as a duo in between gigs with the quartet, and Calderazzo believes they will continue to grow when they are able to spend time on their duo collaboration exclusively.
"We've done maybe 10 shows and they've been spread out," he says. "The real growth will be when we have three weeks of shows and six shows in a row and that's when the evolution will take place."
Marsalis says that in preparing for this first duo record with Calderazzo, he has not worried about directly marketing the record because he believes the project has staying power and will be embraced over time.
"I feel this record will have a very long life span because of the nature of what is it," he says.
jazz masters
songs of mirth and melancholy
June News from Marsalis Music
Tue, 2015-06-02
Coltrane's A Love Supreme: Live in Amsterdam reissue from the Branford Marsalis Quartet out now and available on vinyl for the very first time Read more »
Branford Marsalis Branford Marsalis Quartet ellis marsalis four mfs playin' tunes Joey Calderazzo Justin Faulkner Marsalis Family marsalis music metamorphosen miguel zenon music redeems new orleans
Filter by Artist
Alvin Batiste
Bob French
Claudia Acuña
Doug Wamble
Harry Connick, Jr.
Kate Connick
Michael Carvin
Miguel Zenón
The Marsalis Family


I found two really useful scripts in Red/Blue!
In addition there is one that could be useful for Lorelei's room, if there is an equivalent script in Japanese Red/Green/Blue.
0x10: Although it first appears to have no use other than hiding the player sprite, an invisible menu with options is opened (possibly badge describer man). If the player waits until a description has finished and holds down at the entrance, they may successfully leave Lorelei's room. It is unknown whether a similar effect occurs in the Japanese versions, which could be useful for badge describer glitch.
Only possible valid reaction right there. Well, aside from awe at the time it must have taken to find these, of course.
What action would result in setting $D64C to 0E upon entering Blue's Champion room?
That's, like, what, 172 for Gen 1 now?
In fairness though, most if not all meta-script locations have ACE, just this one seemed particularly easy to pull off. However, on hindsight you may not be able to set it up with expanded PC items as it would be an item beyond slot 127, hence is inaccessible if item 0-127 items repeat like they do in the items pack.


text:
info@businessghana.com
Hong Kong braces for new mass protests against planned extraditions to China
12th Jun 2019 | Source: reuters.com
World News June 11, 2019 / 3:20 AM / Updated 12 minutes ago Hong Kong braces for new mass protests against planned extraditions to China Clare Jim, Jessie Pang 6 Min Read HONG KONG (Reuters) - Hong Kong braced for strikes, transport go-slows and another mass demonstration in protest against a proposed extradition law that would allow people to be sent to China for trial, as the Chinese-ruled city's leader vowed defiance. Hong Kong Chief Executive Carrie Lam said she would push ahead with the bill despite deep concerns across vast swaths of the Asian financial hub that triggered its biggest political demonstration since its handover from British to Chinese rule in 1997. In a rare move, prominent business leaders warned that pushing through the extradition law could undermine investor confidence in Hong Kong and erode its competitive advantages. Related Coverage China says Hong Kong matters purely an internal affair The extradition bill, which has generated unusually broad opposition at home and abroad, is due for a second round of debate on Wednesday in the city's 70-seat Legislative Council. The legislature is controlled by a pro-Beijing majority. An online petition has called for 50,000 people to surround the legislature building at 10 p.m. (1400 GMT) on Tuesday and remain until Wednesday. Britain handed Hong Kong back to China under a "one-country, two-systems" formula, with guarantees that its autonomy and freedoms, including an independent justice system, would be protected. But many accuse China of extensive meddling, denying democratic reforms, interfering with local elections and the disappearance of five Hong Kong-based booksellers, starting in 2015, who specialized in works critical of Chinese leaders. Sunday's protests plunged Hong Kong into political crisis, just as months of pro-democracy "Occupy" demonstrations did in 2014, heaping pressure on Lam's administration and her official backers in Beijing. She warned against any "radical actions", following clashes in the early hours of Monday between some protesters and police after Sunday's otherwise peaceful march. Police erected metal barriers to secure the council building as a small number of protesters started to gather on Tuesday evening despite torrential rain and thunderstorm warnings. Police conducted random ID checks at train stations. Pro-democracy legislator Claudia Mo and protest organiser Jimmy Sham demonstrate outside the Legislative Council building in Hong Kong, China June 11, 2019
Hong Kong braced for strikes, transport go-slows and another mass demonstration in protest against a proposed extradition law that would allow people to be sent to China for trial, as the Chinese-ruled city's leader vowed defiance.
Hong Kong Chief Executive Carrie Lam said she would push ahead with the bill despite deep concerns across vast swaths of the Asian financial hub that triggered its biggest political demonstration since its handover from British to Chinese rule in 1997.
In a rare move, prominent business leaders warned that pushing through the extradition law could undermine investor confidence in Hong Kong and erode its competitive advantages.
The extradition bill, which has generated unusually broad opposition at home and abroad, is due for a second round of debate on Wednesday in the city's 70-seat Legislative Council. The legislature is controlled by a pro-Beijing majority.
An online petition has called for 50,000 people to surround the legislature building at 10 p.m. (1400 GMT) on Tuesday and remain until Wednesday.
Britain handed Hong Kong back to China under a "one-country, two-systems" formula, with guarantees that its autonomy and freedoms, including an independent justice system, would be protected.
But many accuse China of extensive meddling, denying democratic reforms, interfering with local elections and the disappearance of five Hong Kong-based booksellers, starting in 2015, who specialized in works critical of Chinese leaders.
Sunday's protests plunged Hong Kong into political crisis, just as months of pro-democracy "Occupy" demonstrations did in 2014, heaping pressure on Lam's administration and her official backers in Beijing.
She warned against any "radical actions", following clashes in the early hours of Monday between some protesters and police after Sunday's otherwise peaceful march.
Police erected metal barriers to secure the council building as a small number of protesters started to gather on Tuesday evening despite torrential rain and thunderstorm warnings. Police conducted random ID checks at train stations.
Pro-democracy lawmaker Claudia Mo urged people to join the rally and encouraged businesses to strike "for a day, or two, or probably for one whole week".
Nearly 2,000 mostly small retail shops, including restaurants, grocery, book and coffee shops, have announced plans to strike, according to an online survey, a rare move in the staunchly capitalist economy.
Eaton HK Hotel, which is owned by Langham Hospitality Investments and operated by Great Eagle Holdings, said it respected workers' "political stances" and would allow them to rally.
The student union of several higher education institutions and the Hong Kong Professional Teachers' Union urged people to strike on Wednesday. Nearly 4,000 teachers said they would rally.
Human rights groups have repeatedly cited the alleged use of torture, arbitrary detentions, forced confessions and problems accessing lawyers in China, where the courts are controlled by the Communist Party, as reasons why the Hong Kong bill should not proceed.
"When the fugitive extradition bill is passed, Hong Kong will become a 'useless Hong Kong'" said Jimmy Sham, convenor of Civil Human Rights Front. "We will be deep in a place where foreign investors are afraid to invest and tourists are afraid to go. Once the 'Pearl of the Orient' (it) will become nothing."
The Catholic Diocese of Hong Kong called on the government not to pass the bill "hurriedly" and urged all Christians to pray for the former colony.
A staff union affiliated to a pro-democracy labor group under the New World First Bus Company called on its members to drive at the speed of 20-25 kmh (12-15 mph) to show their opposition to the proposed law.
A Facebook post called on people to enjoy a picnic next to government offices on Wednesday, describing the area as "among the best picnic sites". The post has attracted close to 10,000 responses from people promising to attend.
Beijing-based consultancy Gavecal said some bankers in Hong Kong were reporting that many mainland clients were shifting their accounts to Singapore, fearing they could come under scrutiny in the financial hub.
"MISSTEPS COULD BE COSTLY"
Many residents of the financial center, both expatriate and local, are increasingly unnerved by Beijing's tightening grip over the city.
China's foreign ministry said on Tuesday that Hong Kong matters are purely a Chinese internal affair and China demands the United States stops interfering in Hong Kong's affairs.
The comments came after Washington said on Monday it was gravely concerned about the proposed law and warned that such a move could jeopardize the special status Washington affords Hong Kong.
Prominent business figures urged the government to tread cautiously to protect Hong Kong's competitiveness.
"The integrity and independence of (Hong Kong's) legal system are absolutely central to Hong Kong's future," said Fred Hu, founder and chairman of China-based private equity firm, Primavera Capital Group.
Activist investor David Webb, in a post on Lam's Facebook page, urged her to send the bill to the Law Reform Commission for further study.
"If you press ahead and bulldoze the bill through LegCo, then you will probably get the legislation passed, but at huge political cost and damage to the international credibility of HK for due process when reforming its legislation," Webb said.
--Advertisements--
Ebola declared health emergency
Powerful earthquake shakes Athens
I am optimistic to win Madina seat in 2020
WFP,Luxembourg to boost telecommunication
Potable water project for Tamale
NDC:31 Aspirants pick forms in WR
New rural finance project in Mozambique
Public universities not deviated
Conversion of Wa Campus will enhance devt
Ebola: Reminder to strengthen measures
EC must engage more with IPAC
South Sudan jails prominent economist
Legal	Copyright © BusinessGhana. All Rights Reserved.


EUR/USD is in a broad consolidation, after bottoming at 1.2331 (Oct.28,2008). Technical indicators are neutral, and trading is situated above the 50- and 200-Day SMA, currently projected at 1.4037 and 1.3372.
As expected, the test of 1.4310-4330 resistance failed and the pair is in a downtrend for a break below 1.4096, en route to 1.3830 and 1.3746 major support zone. Intraday bias is negative with nearest resistance around 1.4164.
A minor consolidation unfolds above 1.6275, aiming at 1.6428 resistance. Although current intraday bias is positive for 1.6428, we will expect later today a downtrend to emerge, targeting 1.6215 dynamic support, en route to 1.5980. The trigger will be 1.6323 minor support.
The brief consolidation above 1.4045 is already complete and we are expecting a break below 1.4070 to trigger a massive sell-off towards 1.3830, en route to 1.3746. The pair is in extremely bearish condition on the 1h. chart, so a downtrend for 1.3830 seems inevitable.
With yesterday's reversal at 1.6372 the pair is in an uptrend towards 1.6663, en route to 1.6752. Nearest support comes at 1.6475 and the bias on the 1h. and 4h. charts is neutral.
Yesterday's consolidation was limited above 1.4172 support and the uptrend is expected to continue towards 1.4330-50 resistance.
A minor downtrend unfolds from last week's high at 1.4378 and the pair is currently testing 1.4267 support zone. We favor the idea, that a break below that level will aim directly at 1.4167, en route to 1.4006. Crucial on the upside is 1.4340.
Current bias remains negative for 1.6270 and 1.6030. Crucial on the upside is 1.6430, as if we see a break above that level it will signal, that the corrective phase above 1.6273 is not over yet.
The slide from 95.07 has potential for one more downswing to 93.65, before advancing towards 95.50 resistance.
Yesterday's test of 1.4350 resistance provoked a sharp sell-off to 1.4209 support zone. Current rebound is corrective in nature and we expect it to be limited below 1.4280 before next leg downwards, to 1.4123.
Last week's rebound above 1.6150 was limited below 1.6380 and the pair renewed its downtrend for 1.5980. Intraday resistance comes at 1.6230, and crucial is 1.6298.
We continue to believe, that current rebound above 1.6150 is corrective in nature, thus precedes next leg downwards, to 1.5980. Intraday bias is still positive and a break below 1.6254 is needed to confirm, that a top is in place. Important resistance on the 4 h. chart is 1.6430-50.
Yesterday's break below 1.4320 confirmed, that a minor top is in place at 1.4378 and a sharp sell-off followed, bottoming at 1.4176. Current rebound is corrective and we expect it to be limited below 1.4280 resistance zone, before next slide towards 1.4110. Intraday bias is positive with a risk limit below 1.4204.
Current rebound above 1.6111 is impulsive in nature and we rather prefer the idea, that a significant bottom is already in place. Intraday bias is positive for 1.6382 major resistance with a risk limit below 1.6235. We expect a break above 1.6382 to target directly 1.6663.
Yesterday's peak at 1.4348 completed the rise from 1.4177, so the pair is again in ranging mode in the 1.4310-4207 area. A break above 1.4348 will renew the overall uptrend for 1.4444, en route to 1.4650.
Yesterday's brief consolidation is already over and the pair renewed its uptrend for 1.4444, en route to 1.4560. Intraday support comes at 1.4363 and crucial is 1.4326.


text:
Content Services / Featured / OnBase Technology
How ECM became content services (and why you should care)
by Bill Priemer · 10/05/2017
Organizations are awash in content. Invoices. Reports. Emails. Whether it's a hospital network managing patient information, an insurance company handling claims or a mortgage lender reviewing loan applications, organizations thrive via their ability to effectively manage their content. After all, the information contained within that content informs the decisions, impacts the service and drives the business processes that determine success or failure in the marketplace.
Recognizing the need to harness all this content and securely deliver it to the people, systems and processes that rely on it, many organizations are launching digital transformation initiatives.
The birth of ECM
It might be the "it" phrase on the minds of business and IT leaders alike, but digital transformation is really nothing new. We used to call it "going paperless." In fact, Hyland grew out of this very idea. In 1991, Packy Hyland, Jr. created our flagship software platform, OnBase, as a way to help Necedah Bank eliminate the costs of printing paper reports every evening.
In the early days, the industry categorized solutions such as ours as "document imaging software." As solutions evolved to include search and retrieval capabilities, the term became "document management software." The solutions grew more complex, accounting for the full lifecycle of content across the enterprise and incorporating workflow tools to route content to the right people at the right time. Thus, "document management" became "enterprise content management (ECM)."
ECM evolves into content services
The evolution continues. In late 2016, IT research and advisory firm Gartner announced it was retiring the term "enterprise content management" in favor of "content services." "Going forward," Gartner's analysts reasoned, "the practice of managing content will be enabled as a set of services that coordinate content usage by all parties: users, systems and applications."
Gartner's decision reflects a big change in the way organizations create, use and share content, both internally and externally. Whereas ECM has primarily been a means of transforming paper documents into electronic information and distributing that information to employees and staff, today's digital organizations demand more comprehensive content services. They don't need monolithic document repositories; they need platforms that can aggregate content across multiple repositories to connect disparate applications and minimize IT sprawl. They need to provide business users with complete, centralized views of the information required to work most effectively—ideally within the applications those users already know and use. And they need ways to securely share content with stakeholders, customers and collaborators outside of company firewalls.
What content services means to Hyland
Gartner's shift to redefine the market to a more inclusive content services moniker mirrors the evolution of OnBase. While its origins were in content management, OnBase has become so much more than ECM. It's an enterprise information platform that provides a variety of services for managing content, processes and cases, deployable in the cloud or on premises. It connects to and helps consolidate systems to reduce sprawling applications across the enterprise. It scales to meets the needs of small credit unions and colossal online retailers alike. It integrates with and content enables core applications, enabling insurers to pull up relevant claims documentation without navigating away from Guidewire ClaimCenter; providing civil engineers with access to building plans directly from ESRI maps; and helping college administrators evaluate student transcripts in PeopleSoft. And it seamlessly connects to ShareBase, our cloud-based file sharing and collaboration product, supporting secure collaboration with stakeholders outside company firewalls.
At Hyland, we're all-in with the shift to content services. But what does it mean for your organization? If you're aiming for digital transformation, embracing a content services platform will help you hit your target. Even at organizations with mature ECM implementations, an enormous amount of critical content hides in information silos across the enterprise—in applications, email inboxes, network drives and consumer-grade file-sharing tools. As a result, employees waste time looking in multiple systems in an attempt to see the whole picture. Or they fail to see the whole picture. Either way, service suffers. By taking advantage of content services, you establish an information strategy that delivers your content to the right people, at the right time, right where they need to see it.
The content services paradigm shift has the potential to liberate organizations from the one-size-fits-all ECM systems of the past. With a content services layer to tie everything together, organizations can choose applications and components à la carte to meet specific business needs. Content services platforms empower organizations to harness their information no matter where their content resides; flow it into workflow and case management tools to drive critical business processes and casework; surface it within the context of core business applications where employees are already working; and securely share it with others, both inside and outside company walls. These platforms deliver information on desktops, laptops and mobile devices, anywhere across the globe, even while offline.
We're ready for content services. We've been ready. In fact, we were even named a 'Leader' in Gartner's Magic Quadrant for Content Services Platforms.
In this mobile, connected world, where everything is electronic and the speed of business is constantly accelerating, content services enable organizations to keep pace—to work toward the promise of true digital transformation. Are you ready?
Tags: case managementcontent servicesdigital transformationdocument imaging softwaredocument management softwareECMEnterprise content managemententerprise information platformmanaging contentworkflow
Bill Priemer
Bill Priemer is president and chief executive officer of Hyland. Bill joined the company in 1997 as vice president of Marketing. He was promoted to Vice President of Sales & Marketing in 2001, named Chief Operating Officer in 2005 and became the company's CEO in January 2013.
Next story Hyland a 'Leader' in Gartner's Magic Quadrant for Content Services Platforms
Previous story It's Customer Appreciation Week at Hyland!


text:
08/28/2014 08:39 am ET Updated Dec 06, 2017
Angelina Jolie And Brad Pitt Are Married
By Lauren Zupkus
Matt Sayles/Invision/AP
The Associated Press reports that Angelina Jolie and Brad Pitt were married on Aug. 23 in Chateau Miraval, France, according to a spokesman for the couple.
BREAKING: Angelina Jolie and Brad Pitt were married Saturday in France, says a spokesman for the couple.
— The Associated Press (@AP) August 28, 2014
The couple reportedly married in a private ceremony attended by family and friends. Pitt and Jolie obtained a marriage license from a local California judge, who also conducted the ceremony in France.
Pitt and Jolie's six children were also in the wedding. Jolie walked the aisle with her eldest sons Maddox, 13, and Pax, 11. Zahara, 9, and Vivienne, 6, threw flower petals while Shiloh, 8, and Knox, 6, served as ring bearers.
Jolie, 39, and Pitt, 50, started dating while working together on the 2005 film "Mr. And Mrs. Smith." The couple, dubbed Brangelina, got engaged in April 2012 after seven years of dating.
The "Maleficent" star spoke to People about her wedding plans in May 2014:
"We're just waiting for it to be the right time with the kids, with work, when it feels right," Jolie said.
"We talk about it occasionally, and the kids talk about it with us, which is verging on hysterical, how kids envision a wedding. They will in a way be the wedding planners. It's going to be Disney or paintball - one or the other! We've got a lot of different personalities in the house. They've got some strong opinions," she continued.
"It will be fun. That's the important thing. When we do it, it will feel like a great day for our family," Jolie said.
This is a developing story. Check back for updates.
The Beautiful Angelina Jolie
Lauren Zupkus
Social Media Editor, Huffpost Entertainment
Brad Pitt Angelina Jolie Wedding Angelina Jolie Brad Pitt Married Brad Pitt Angelina Jolie Married Angelina Jolie Brad Pitt Brad Pitt Angelina Jolie


text:
D.J. Moore Sports Football Professional football NFL football
Carolina Panthers Atlanta Falcons
Panthers WR Moore doesn't regret costly TD celebration
By STEVE REED - Nov. 04, 2022 02:49 PM EDT
Carolina Panthers wide receiver DJ Moore (2) catches a touchdown pass as Atlanta Falcons safety Dean Marlowe (21) defends during the second half of an NFL football game Sunday, Oct. 30, 2022, in Atlanta. (AP Photo/John Amis)
CHARLOTTE, N.C. (AP) — Carolina Panthers wide receiver D.J. Moore said he doesn't have any regrets about taking his helmet off after hauling in a 62-yard touchdown on a Hail Mary pass from P.J. Walker last Sunday against the Atlanta Falcons -- a play that may have cost his team first place in the NFC South.
Moore's unlikely TD catch tied the game at 34 with 12 seconds left, but he and tight end Stephen Sullivan both removed their helmets while celebrating the score and the Panthers were flagged for unsportsmanlike conduct.
That backed up Carolina 15 yards on the extra point attempt, which Eddy Pineiro missed, sending the game into overtime where the Panthers eventually lost 37-34.
"Regrets? Nah, not to that extent," Moore said Friday. "Should I not have did it? No. Did I do it? Yeah. And I own up to that. It was just like an in-the-moment type of deal. ... (Would I) do it differently in that moment? Nah, probably not."
Instead of being tied with Tampa Bay, Atlanta and New Orleans in the division at 3-5 — and being 3-0 in the division — the Panthers (2-6) are now in last place and find themselves two games behind the Falcons (4-4) entering Sunday's game at Cincinnati.
Moore noticed on Friday that he was listed No. 1 on ESPN's "not Top 10" plays of the week.
"Whatever," Moore said with a smile. "I was like, all right, I guess nobody ever got emotional and did something out of emotion. Granted, I don't show emotion, but that was like an emotional thing."
When asked if he feels like the rule should be changed to allow such celebrations, Moore replied, "I don't care. At the end of the day whether I was off the field or on the field, it shouldn't have mattered. I don't think it was excessive, but it is what it is."
By Fred Goodall 2 hrs ago


The mosquito ringtone, also known as teen buzz, works by emitting a sound wave at the high end of the sound spectrum, usually around 14 - 17kHz (17,000 hertz). The human ear can theoretically hear in the range of 20 to 20,000 Hertz, but as we age, this range diminishes due to condition called presbycusis, or age-related hearing loss. Volume of the sound also affects your ability to hear it, the same way that if you turn your speakers down, you can't hear your song anymore.
To give you an idea of the range, a human cannot hear too low or high of a frequency. A human heart beats at 1 to 2 Hertz and a dolphin emits sonar sound at 100,000 to 150,000 Hertz, neither of which any human can hear.
As you get older, the range in which you can hear high-pitched sounds gets lower and lower. At the volume of 60 decibels (the volume of a normal conversation), a sound played at 15,500 Hertz can usually only be heard by people under 24. A sound played at 13,500 Hertz can usually only be heard by people under 40. While there are always some exceptions, the older you get, the less you are able to hear in the high frequency range.
There's really nothing special about the ringtone – it's just a sound that is reproduced at that high frequency range – anyone with good sound editing equipment can create it. Also, virtually any speaker system or tweeter that can reproduce a sound in a high frequency range can emit this sound. Some cell phones do not have good speakers therefore the ringtone "doesn't work" but if you have a newer, better cell phone that plays mp3 ringtones, you'll be able to download and listen to this ringtone. Depending on the range in the sound, the older the person listening to it, the less chance he or she will be able to hear it.
So to sum it up, if your teacher is 25, you might not be able to get away with playing the mosquito ringtone in your class, but if she's 55, you should be ok. Unless she's an alien. Then you have bigger problems to contend with.
Click here to download the ringtone for free and see for yourself.


Nespresso Vs Verismo Espresso Makers - Which is better?
Many people get confused when choosing right espresso makers to their personal or commercial use. Nespresso is one of best brand as review on previous post on this blog Nesspreso Pixie Vs Citiz. But, Nespreso is not alone in espresso makers. There are a lot of available products on this category, Versimo is one of them, backed by the famous Starbucks. Through this post, we will find out the differences between Nespresso Vs Verismo Espresso Makers.
Don't confuse a Nespresso machine getting a Keurig or other capsule type coffee maker as this is a totally different animal. First, the coffee is more preferable. Next, you obtain true espresso getting an attractive, brown crema on top. The positive thing is always that you don't need to spend a while tamping grounds and cleaning them within the machine. The only real maintenance you must do might be the periodic descaling and draining the inside bin of used capsules. If you buy this while using Aeroccino Plus, then cappuccino and lattes are merely minutes away. You possibly can make two cup dimensions while using Pixie, espresso and lungo, that's roughly two occasions the amount of espresso but, clearly, also weakened. Not weak, really, while not as strong as espresso.
Height-adjustable drip tray benefits different sized cups. Auto-off triggers following a couple of minutes to be able to save energy. Variable temperature system allows for optimum coffee extraction and milk steaming. Integrated rinse function helps to keep machine clean. High-pressure brewing system will get warmer and has the capacity to make Local coffee shop-quality drinks within only a couple of seconds.
– Auto-off activates after 5 minutes to save energy.
– Built-in used pod removal automatically moves up to 10 pods to storage for easy cleanup.
Verismo is not a good choice based on customer ratings. So the winner will absolutely Nespresso. On the table above, you can get best deal on the market on discounted price for both products.


Bonza Bike Tours, in Sydney, Australia, has been using TourConnect for 4 years. They have found new partners by searching the network for buyers that sell Australia. Bonza's team has also managed their annual rates, and partner contracts, in TourConnect to track which partners were taking action on their rates. The result has been over $24,000 of new business generated over 4 years. Click below to learn more about Bonza's success story.
Wyndham Hotels & Resorts, in Gold Coast, Australia, has been using TourConnect for 3 years. Their international sales team has used TourConnect to manage rates and contracts for nearly 30 properties. They have saved time, energy, and money while generating more revenue across their portfolio of properties. Click below to learn more about Wyndham's success story.
Pacific Destinations, in Auckland, New Zealand, has been using TourConnect for 1 year. They have managed over a thousand supplier contracts for the products they sell across Australia and New Zealand. They have streamlined their contracting process workflow and minimized manual data entry of rates into their booking system. Click below to learn more about Pacific Destinations' success story.
Ireland Unlocked Tours, in Tennessee, United States, has been using TourConnect for 2 years. As a small team, they have been able to quickly grow supplier relationships throughout Ireland. Ireland Unlocked Tours has significantly increased the number of tour offerings, as well as the diversity of the products they sell. Click below to learn more about Ireland Unlocked Tours' success story.


Calming sounds resonate deeply and transport us back to a time that is tranquil and hypnotic. The intensity of the swell and the swiftness of the retreat is the balance by which stress is measured. When given the opportunity to sit beside the ocean for a moment, one can gauge the motion and balance the internal rhythm. It might not be a coincidence that more than 70 percent of the earth is covered in ocean. Perhaps we are too immersed to listen.
So that I might proudly display this symbol of freedom, courage, and strength, I thank you. Your sacrifices are the threads from which this fabric is woven. Remembering you on this Memorial Day.
So I was watching the family dynamics as they unraveled in this nest. When mom came back from fishing the stronger of the two siblings wanted more than just a snack. It's when "all you can eat" takes on a whole different meaning!
Cats. They are elusive, contradictory, fickle, and a slew of other adjectives that describe a creature that uses humans to better their own circumstances. Our house has four such creatures and we are well trained. Kuma is a master vocalist and the stalker.
And then… you can combine a road trip to include cars and landscapes. That is a good day!


This paper presents a novel attention mechanism to improve stereo-vision based object recognition systems in terms of recognition performance and computational efficiency at the same time. We utilize the Stixel World, a compact medium-level 3D representation of the local environment, as an early focus-of-attention stage for subsequent system modules. In particular, the search space of computationally expensive pattern classifiers is significantly narrowed down. We explicitly couple the 3D Stixel representation with prior knowledge about the object class of interest, i.e. 3D geometry and symmetry, to precisely focus processing on well-defined local regions that are consistent with the environment model.
Experiments are conducted on large real-world datasets captured from a moving vehicle in urban traffic. In case of vehicle recognition as an experimental testbed, we demonstrate that the proposed Stixel-based attention mechanism significantly reduces false positive rates at constant sensitivity levels by up to a factor of 8 over state-of-the-art. At the same time, computational costs are reduced by more than an order of magnitude.


2016 was a milestone year for me: I landed my first job in infosec. A real live security internship. A new world opened up for me, and at the same time, as I started to settle into my brand new role, I couldn't help but get the feeling, "Hey, I've done this before".
As I mentioned in Part 1, and in my un-talk at CircleCityCon, broadcasting the fact that there are countless paths to a security career will help bring in more people with a wide variety of life experiences. This is glossed over way too much in the way hackers are presented to the world -- prevailing narratives frame us as having special l33t skillz that no one else has. Some of it I'm sure is internally-generated -- I think that some people who have only worked in one field perceive their job's processes and learning curves to be unique to their industry. But those of us who started in other fields bring knowledge and skills from our "past lives" that are not only incredibly transferrable to infosec, but often lacking in the current infosec workforce.
So where did I come from? Hi, my name is Kat, and I'm a recovering political staffer.
When I graduated from college, I wanted to work in politics, having already put in a lot of thankless volunteer work during previous elections. I brought a solid writing background, a knack for doing independent research, and a healthy dose of cynicism -- plus, it was an election year and it seemed like a good idea at the time. Over the course of the next few years, I worked both on the campaign side (finance and fundraising, more specifically) and the legislative side, working my way from page to legislative aide. However, in addition to it not being a great fit for my personality, the job market was limited and incredibly volatile. After my and several others' jobs disappeared as a result of an election, I decided that politics and I should see other people.
It was a couple more years before I got the idea to learn how to code (if you're curious, it was Ruby, and there was a lot of nervous crying), which led me to "I'm not a dev, but this tech stuff is interesting. Hey, this security stuff is really interesting. But all of the security people have been hacking since childhood, so I guess maybe I'll try to get a non-tech job at a tech company." I had gone to a few security cons, speaking and volunteering but feeling like I didn't have a real claim to be there. I was legitimately embarrassed by my resume. A turning point was watching Eve Adams' and Johnny Xmas' presentation at DerbyCon in 2014 -- all about how to break into infosec from other fields. As I re-watched that presentation, and as I started to meet more people in security, it started to sink in that I was not a blank slate.
Communication with diverse populations: I wrote a lot of words, and I spent a lot of time on the phone with strangers whose lives were vastly different than mine, many of whom hated everything I stood for. Being a legislative staffer is simultaneously behind-the-scenes and very public-facing: I made thousands of constituent contacts without having my name attached to any of the correspondence. Security work can be similarly invisible-yet-impactful, and the sheer amount of communication that security work requires can't be overlooked. Whether you're a pentester writing a report, an analyst responding to a user, or a manager justifying your budget to the C-suite, we are tasked with communicating security to those who are not in a security state of mind. The ability to understand the viewpoints and values of others and get our message across accordingly is a vital skill for promoting better security.
Staying current: This is a skill that often gets downplayed compared to other non-tech like writing, teamwork, time management, etc. I don't think it even fully occurred to me to label it a job skill until I started interviewing for tech positions, when the question of how I kept up with infosec news reliably came up. Political staffers would religiously read feeds like WisPolitics and the Wheeler Report the way security professionals would with threat intelligence feeds. Twitter wasn't very big yet when I left, but I'd imagine that nowadays every legislative and campaign team has eyes trained on Twitter as much as any security team. Working in politics got me into the mindset of seeing a news release, evaluating how it affected our environment, and figuring out what actions to take as a result.
Politics to infosec may seem an odd path, but many others have found ways to connect their past work to their practice of security. If we hope to move forward as an industry, we need to make more of these connections. Security affects everyone in the world, therefore we need to bring in perspectives from all kinds. Homogeneity does not serve us well.
Coming into security with a background in another industry doesn't show that we're indecisive or lacking dedication -- it shows that we're adaptable, and that even if we didn't get it quite right on the first try, we'll keep hacking harder.


text:
Charlie Sheen on a Special Drug Called "Charlie Sheen" and More in Promo Video
Travis Leamons | February 27, 2011 | News | No Comments
Well, the trainwreck that is Charlie Sheen continues to spiral. Now that the plug has been pulled on Two and Half Men after he screwed up the serving size of hookers and blow, it seems that people can't get enough of the controversy.
Knowing that people will be watching the Oscars, ABC has cut together a 30-second promo teasing the network's special one-hour edition of 20/20 airing on Tuesday.
Sheen, who entered rehab earlier this year, proclaims, "I am on a drug, it's called Charlie Sheen."
"I have one speed, one gear, Go!…I dare you to keep up with me," Sheen adds.
"There's some wrongs to be righted and stories to tell. But people need to hear my side of it," he says.
A source told the Hollywood Reporter that Sheen picked the program because he saw Canning on the air and "thought she was very fair."
I'm sure "fair" is just code for "fine."
And because I couldn't resist:
And this is somebody who is sad to see Charlie leave:
Tags: charlie sheen, Ferris Bueller's Day Off, Two and a Half Men
Travis Leamons is one of the Inside Pulse Originals and currently holds the position of Managing Editor at Inside Pulse Movies. He's told that the position is his until he's dead or if "The Boss" can find somebody better. I expect the best and I give the best. Here's the beer. Here's the entertainment. Now have fun. That's an order!