If you are a director or producer and are looking to put on a show, you already know that you are in for a lot of work. Rehearsing, performing, and executing a production may be one of the most time and labor intensive things out there. There are so many variables to figure out on the logistics end that many people give up before they even pick a musical to perform. However, say that you have gotten past that point. Say that you have figured out where you can rehearse. Say that you've figured out who can make your set and do your costumes. Say you even have a venue for the production (by the way, congratulations on making it this far. this is a huge accomplishment). Now it is time for you to pick what musical you are going to do. There are plenty of great ones out there, and we know that there is a lot of pressure to make sure you're doing the one that is best for you. However, don't worry. We've come up with some pointers on how to pick the musical that will be a smashing hit. Read on for more info!
This entry was posted in Theater.


CX Connect – The Smart Sourcing Solution for Businesses.
If you've ever tried to source someone to answer the phone, conduct telemarking, find a consultant or purchase some technology you'll know how hard it can be to find the right solution. Searching Google, making endless phone calls and emails and repeating the same conversation over and over.
Well now there is a better way!
Our expert team has decades' worth of experience in the call centre and CX industry and we help match customer requirements to suitably qualified outsourcing suppliers.
Put simply, we will help introduce you to suppliers that have the right level of experience, skill and pricing to meet your requirements. You are then free to select and negotiate directly with the supplier to ensure you get the right fit (and pricing) for your business.
So whether it's call centre outsourcing, Virtual Assistants, Consultants, Technology and more, we'll help connect you!
Less time, less stress and a better solution for your business!
If you've got any questions, contact our Australian based support team by calling us on 1300 CXCENTRAL (1300 292 368) or contact Justin Tippett on 0418 396 691 and we'll provide you with the support you need.


text:
#include <algorithm>
#include <limits>
#include <memory>
#include <string>

#include "webrtc/base/checks.h"
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/thread_annotations.h"
#include "webrtc/call/call.h"
#include "webrtc/config.h"
#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
#include "webrtc/modules/audio_coding/include/audio_coding_module.h"
#include "webrtc/modules/audio_mixer/audio_mixer_impl.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
#include "webrtc/system_wrappers/include/metrics_default.h"
#include "webrtc/test/call_test.h"
#include "webrtc/test/direct_transport.h"
#include "webrtc/test/drifting_clock.h"
#include "webrtc/test/encoder_settings.h"
#include "webrtc/test/fake_audio_device.h"
#include "webrtc/test/fake_decoder.h"
#include "webrtc/test/fake_encoder.h"
#include "webrtc/test/field_trial.h"
#include "webrtc/test/frame_generator.h"
#include "webrtc/test/frame_generator_capturer.h"
#include "webrtc/test/gtest.h"
#include "webrtc/test/rtp_rtcp_observer.h"
#include "webrtc/test/testsupport/fileutils.h"
#include "webrtc/test/testsupport/perf_test.h"
#include "webrtc/video/transport_adapter.h"
#include "webrtc/voice_engine/include/voe_base.h"

using webrtc::test::DriftingClock;
using webrtc::test::FakeAudioDevice;

namespace webrtc {

class CallPerfTest : public test::CallTest {
 protected:
  enum class FecMode {
    kOn, kOff
  };
  enum class CreateOrder {
    kAudioFirst, kVideoFirst
  };
  void TestAudioVideoSync(FecMode fec,
                          CreateOrder create_first,
                          float video_ntp_speed,
                          float video_rtp_speed,
                          float audio_rtp_speed);

  void TestMinTransmitBitrate(bool pad_to_min_bitrate);

  void TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
                          int threshold_ms,
                          int start_time_ms,
                          int run_time_ms);
};

class VideoRtcpAndSyncObserver : public test::RtpRtcpObserver,
                                 public rtc::VideoSinkInterface<VideoFrame> {
  static const int kInSyncThresholdMs = 50;
  static const int kStartupTimeMs = 2000;
  static const int kMinRunTimeMs = 30000;

 public:
  explicit VideoRtcpAndSyncObserver(Clock* clock)
      : test::RtpRtcpObserver(CallPerfTest::kLongTimeoutMs),
        clock_(clock),
        creation_time_ms_(clock_->TimeInMilliseconds()),
        first_time_in_sync_(-1),
        receive_stream_(nullptr) {}

  void OnFrame(const VideoFrame& video_frame) override {
    VideoReceiveStream::Stats stats;
    {
      rtc::CritScope lock(&crit_);
      if (receive_stream_)
        stats = receive_stream_->GetStats();
    }
    if (stats.sync_offset_ms == std::numeric_limits<int>::max())
      return;

    int64_t now_ms = clock_->TimeInMilliseconds();
    int64_t time_since_creation = now_ms - creation_time_ms_;
    // During the first couple of seconds audio and video can falsely be
    // estimated as being synchronized. We don't want to trigger on those.
    if (time_since_creation < kStartupTimeMs)
      return;
    if (std::abs(stats.sync_offset_ms) < kInSyncThresholdMs) {
      if (first_time_in_sync_ == -1) {
        first_time_in_sync_ = now_ms;
        webrtc::test::PrintResult("sync_convergence_time",
                                  "",
                                  "synchronization",
                                  time_since_creation,
                                  "ms",
                                  false);
      }
      if (time_since_creation > kMinRunTimeMs)
        observation_complete_.Set();
    }
    if (first_time_in_sync_ != -1)
      sync_offset_ms_list_.push_back(stats.sync_offset_ms);
  }

  void set_receive_stream(VideoReceiveStream* receive_stream) {
    rtc::CritScope lock(&crit_);
    receive_stream_ = receive_stream;
  }

  void PrintResults() {
    test::PrintResultList("stream_offset", "", "synchronization",
                          test::ValuesToString(sync_offset_ms_list_), "ms",
                          false);
  }

 private:
  Clock* const clock_;
  const int64_t creation_time_ms_;
  int64_t first_time_in_sync_;
  rtc::CriticalSection crit_;
  VideoReceiveStream* receive_stream_ GUARDED_BY(crit_);
  std::vector<int> sync_offset_ms_list_;
};

void CallPerfTest::TestAudioVideoSync(FecMode fec,
                                      CreateOrder create_first,
                                      float video_ntp_speed,
                                      float video_rtp_speed,
                                      float audio_rtp_speed) {
  const char* kSyncGroup = "av_sync";
  const uint32_t kAudioSendSsrc = 1234;
  const uint32_t kAudioRecvSsrc = 5678;

  metrics::Reset();
  VoiceEngine* voice_engine = VoiceEngine::Create();
  VoEBase* voe_base = VoEBase::GetInterface(voice_engine);
  FakeAudioDevice fake_audio_device(
      FakeAudioDevice::CreatePulsedNoiseCapturer(256, 48000),
      FakeAudioDevice::CreateDiscardRenderer(48000), audio_rtp_speed);
  EXPECT_EQ(0, voe_base->Init(&fake_audio_device, nullptr, decoder_factory_));
  VoEBase::ChannelConfig config;
  config.enable_voice_pacing = true;
  int send_channel_id = voe_base->CreateChannel(config);
  int recv_channel_id = voe_base->CreateChannel();

  AudioState::Config send_audio_state_config;
  send_audio_state_config.voice_engine = voice_engine;
  send_audio_state_config.audio_mixer = AudioMixerImpl::Create();
  Call::Config sender_config(&event_log_);
  sender_config.audio_state = AudioState::Create(send_audio_state_config);
  Call::Config receiver_config(&event_log_);
  receiver_config.audio_state = sender_config.audio_state;
  CreateCalls(sender_config, receiver_config);

  VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock());

  // Helper class to ensure we deliver correct media_type to the receiving call.
  class MediaTypePacketReceiver : public PacketReceiver {
   public:
    MediaTypePacketReceiver(PacketReceiver* packet_receiver,
                            MediaType media_type)
        : packet_receiver_(packet_receiver), media_type_(media_type) {}

    DeliveryStatus DeliverPacket(MediaType media_type,
                                 const uint8_t* packet,
                                 size_t length,
                                 const PacketTime& packet_time) override {
      return packet_receiver_->DeliverPacket(media_type_, packet, length,
                                             packet_time);
    }
   private:
    PacketReceiver* packet_receiver_;
    const MediaType media_type_;

    RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(MediaTypePacketReceiver);
  };

  FakeNetworkPipe::Config audio_net_config;
  audio_net_config.queue_delay_ms = 500;
  audio_net_config.loss_percent = 5;
  test::PacketTransport audio_send_transport(sender_call_.get(), &observer,
                                             test::PacketTransport::kSender,
                                             MediaType::AUDIO,
                                             audio_net_config);
  MediaTypePacketReceiver audio_receiver(receiver_call_->Receiver(),
                                         MediaType::AUDIO);
  audio_send_transport.SetReceiver(&audio_receiver);

  test::PacketTransport video_send_transport(sender_call_.get(), &observer,
                                             test::PacketTransport::kSender,
                                             MediaType::VIDEO,
                                             FakeNetworkPipe::Config());
  MediaTypePacketReceiver video_receiver(receiver_call_->Receiver(),
                                         MediaType::VIDEO);
  video_send_transport.SetReceiver(&video_receiver);

  test::PacketTransport receive_transport(
      receiver_call_.get(), &observer, test::PacketTransport::kReceiver,
      MediaType::VIDEO,
      FakeNetworkPipe::Config());
  receive_transport.SetReceiver(sender_call_->Receiver());

  test::FakeDecoder fake_decoder;

  CreateSendConfig(1, 0, 0, &video_send_transport);
  CreateMatchingReceiveConfigs(&receive_transport);

  AudioSendStream::Config audio_send_config(&audio_send_transport);
  audio_send_config.voe_channel_id = send_channel_id;
  audio_send_config.rtp.ssrc = kAudioSendSsrc;
  audio_send_config.send_codec_spec.codec_inst =
      CodecInst{103, "ISAC", 16000, 480, 1, 32000};
  AudioSendStream* audio_send_stream =
      sender_call_->CreateAudioSendStream(audio_send_config);

  video_send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
  if (fec == FecMode::kOn) {
    video_send_config_.rtp.ulpfec.red_payload_type = kRedPayloadType;
    video_send_config_.rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
    video_receive_configs_[0].rtp.ulpfec.red_payload_type = kRedPayloadType;
    video_receive_configs_[0].rtp.ulpfec.ulpfec_payload_type =
        kUlpfecPayloadType;
  }
  video_receive_configs_[0].rtp.nack.rtp_history_ms = 1000;
  video_receive_configs_[0].renderer = &observer;
  video_receive_configs_[0].sync_group = kSyncGroup;

  AudioReceiveStream::Config audio_recv_config;
  audio_recv_config.rtp.remote_ssrc = kAudioSendSsrc;
  audio_recv_config.rtp.local_ssrc = kAudioRecvSsrc;
  audio_recv_config.voe_channel_id = recv_channel_id;
  audio_recv_config.sync_group = kSyncGroup;
  audio_recv_config.decoder_factory = decoder_factory_;
  audio_recv_config.decoder_map = {{103, {"ISAC", 16000, 1}}};

  AudioReceiveStream* audio_receive_stream;

  if (create_first == CreateOrder::kAudioFirst) {
    audio_receive_stream =
        receiver_call_->CreateAudioReceiveStream(audio_recv_config);
    CreateVideoStreams();
  } else {
    CreateVideoStreams();
    audio_receive_stream =
        receiver_call_->CreateAudioReceiveStream(audio_recv_config);
  }
  EXPECT_EQ(1u, video_receive_streams_.size());
  observer.set_receive_stream(video_receive_streams_[0]);
  DriftingClock drifting_clock(clock_, video_ntp_speed);
  CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed,
                                        kDefaultFramerate, kDefaultWidth,
                                        kDefaultHeight);

  Start();

  audio_send_stream->Start();
  audio_receive_stream->Start();

  EXPECT_TRUE(observer.Wait())
      << "Timed out while waiting for audio and video to be synchronized.";

  audio_send_stream->Stop();
  audio_receive_stream->Stop();

  Stop();
  video_send_transport.StopSending();
  audio_send_transport.StopSending();
  receive_transport.StopSending();

  DestroyStreams();

  sender_call_->DestroyAudioSendStream(audio_send_stream);
  receiver_call_->DestroyAudioReceiveStream(audio_receive_stream);

  voe_base->DeleteChannel(send_channel_id);
  voe_base->DeleteChannel(recv_channel_id);
  voe_base->Release();

  DestroyCalls();

  VoiceEngine::Delete(voice_engine);

  observer.PrintResults();

  // In quick test synchronization may not be achieved in time.
  if (!field_trial::IsEnabled("WebRTC-QuickPerfTest")) {
    EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AVSyncOffsetInMs"));
  }
}

TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithVideoNtpDrift) {
  TestAudioVideoSync(FecMode::kOff, CreateOrder::kAudioFirst,
                     DriftingClock::PercentsFaster(10.0f),
                     DriftingClock::kNoDrift, DriftingClock::kNoDrift);
}

TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithAudioFasterThanVideoDrift) {
  TestAudioVideoSync(FecMode::kOff, CreateOrder::kAudioFirst,
                     DriftingClock::kNoDrift,
                     DriftingClock::PercentsSlower(30.0f),
                     DriftingClock::PercentsFaster(30.0f));
}

TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithVideoFasterThanAudioDrift) {
  TestAudioVideoSync(FecMode::kOn, CreateOrder::kVideoFirst,
                     DriftingClock::kNoDrift,
                     DriftingClock::PercentsFaster(30.0f),
                     DriftingClock::PercentsSlower(30.0f));
}

void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
                                      int threshold_ms,
                                      int start_time_ms,
                                      int run_time_ms) {
  class CaptureNtpTimeObserver : public test::EndToEndTest,
                                 public rtc::VideoSinkInterface<VideoFrame> {
   public:
    CaptureNtpTimeObserver(const FakeNetworkPipe::Config& net_config,
                           int threshold_ms,
                           int start_time_ms,
                           int run_time_ms)
        : EndToEndTest(kLongTimeoutMs),
          net_config_(net_config),
          clock_(Clock::GetRealTimeClock()),
          threshold_ms_(threshold_ms),
          start_time_ms_(start_time_ms),
          run_time_ms_(run_time_ms),
          creation_time_ms_(clock_->TimeInMilliseconds()),
          capturer_(nullptr),
          rtp_start_timestamp_set_(false),
          rtp_start_timestamp_(0) {}

   private:
    test::PacketTransport* CreateSendTransport(Call* sender_call) override {
      return new test::PacketTransport(
          sender_call, this, test::PacketTransport::kSender, MediaType::VIDEO,
          net_config_);
    }

    test::PacketTransport* CreateReceiveTransport() override {
      return new test::PacketTransport(
          nullptr, this, test::PacketTransport::kReceiver, MediaType::VIDEO,
          net_config_);
    }

    void OnFrame(const VideoFrame& video_frame) override {
      rtc::CritScope lock(&crit_);
      if (video_frame.ntp_time_ms() <= 0) {
        // Haven't got enough RTCP SR in order to calculate the capture ntp
        // time.
        return;
      }

      int64_t now_ms = clock_->TimeInMilliseconds();
      int64_t time_since_creation = now_ms - creation_time_ms_;
      if (time_since_creation < start_time_ms_) {
        // Wait for |start_time_ms_| before start measuring.
        return;
      }

      if (time_since_creation > run_time_ms_) {
        observation_complete_.Set();
      }

      FrameCaptureTimeList::iterator iter =
          capture_time_list_.find(video_frame.timestamp());
      EXPECT_TRUE(iter != capture_time_list_.end());

      // The real capture time has been wrapped to uint32_t before converted
      // to rtp timestamp in the sender side. So here we convert the estimated
      // capture time to a uint32_t 90k timestamp also for comparing.
      uint32_t estimated_capture_timestamp =
          90 * static_cast<uint32_t>(video_frame.ntp_time_ms());
      uint32_t real_capture_timestamp = iter->second;
      int time_offset_ms = real_capture_timestamp - estimated_capture_timestamp;
      time_offset_ms = time_offset_ms / 90;
      time_offset_ms_list_.push_back(time_offset_ms);

      EXPECT_TRUE(std::abs(time_offset_ms) < threshold_ms_);
    }

    Action OnSendRtp(const uint8_t* packet, size_t length) override {
      rtc::CritScope lock(&crit_);
      RTPHeader header;
      EXPECT_TRUE(parser_->Parse(packet, length, &header));

      if (!rtp_start_timestamp_set_) {
        // Calculate the rtp timestamp offset in order to calculate the real
        // capture time.
        uint32_t first_capture_timestamp =
            90 * static_cast<uint32_t>(capturer_->first_frame_capture_time());
        rtp_start_timestamp_ = header.timestamp - first_capture_timestamp;
        rtp_start_timestamp_set_ = true;
      }

      uint32_t capture_timestamp = header.timestamp - rtp_start_timestamp_;
      capture_time_list_.insert(
          capture_time_list_.end(),
          std::make_pair(header.timestamp, capture_timestamp));
      return SEND_PACKET;
    }

    void OnFrameGeneratorCapturerCreated(
        test::FrameGeneratorCapturer* frame_generator_capturer) override {
      capturer_ = frame_generator_capturer;
    }

    void ModifyVideoConfigs(
        VideoSendStream::Config* send_config,
        std::vector<VideoReceiveStream::Config>* receive_configs,
        VideoEncoderConfig* encoder_config) override {
      (*receive_configs)[0].renderer = this;
      // Enable the receiver side rtt calculation.
      (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = true;
    }

    void PerformTest() override {
      EXPECT_TRUE(Wait()) << "Timed out while waiting for "
                             "estimated capture NTP time to be "
                             "within bounds.";
      test::PrintResultList("capture_ntp_time", "", "real - estimated",
                            test::ValuesToString(time_offset_ms_list_), "ms",
                            true);
    }

    rtc::CriticalSection crit_;
    const FakeNetworkPipe::Config net_config_;
    Clock* const clock_;
    int threshold_ms_;
    int start_time_ms_;
    int run_time_ms_;
    int64_t creation_time_ms_;
    test::FrameGeneratorCapturer* capturer_;
    bool rtp_start_timestamp_set_;
    uint32_t rtp_start_timestamp_;
    typedef std::map<uint32_t, uint32_t> FrameCaptureTimeList;
    FrameCaptureTimeList capture_time_list_ GUARDED_BY(&crit_);
    std::vector<int> time_offset_ms_list_;
  } test(net_config, threshold_ms, start_time_ms, run_time_ms);

  RunBaseTest(&test);
}

TEST_F(CallPerfTest, CaptureNtpTimeWithNetworkDelay) {
  FakeNetworkPipe::Config net_config;
  net_config.queue_delay_ms = 100;
  // TODO(wu): lower the threshold as the calculation/estimatation becomes more
  // accurate.
  const int kThresholdMs = 100;
  const int kStartTimeMs = 10000;
  const int kRunTimeMs = 20000;
  TestCaptureNtpTime(net_config, kThresholdMs, kStartTimeMs, kRunTimeMs);
}

TEST_F(CallPerfTest, CaptureNtpTimeWithNetworkJitter) {
  FakeNetworkPipe::Config net_config;
  net_config.queue_delay_ms = 100;
  net_config.delay_standard_deviation_ms = 10;
  // TODO(wu): lower the threshold as the calculation/estimatation becomes more
  // accurate.
  const int kThresholdMs = 100;
  const int kStartTimeMs = 10000;
  const int kRunTimeMs = 20000;
  TestCaptureNtpTime(net_config, kThresholdMs, kStartTimeMs, kRunTimeMs);
}

TEST_F(CallPerfTest, ReceivesCpuOveruseAndUnderuse) {
  // Minimal normal usage at the start, then 30s overuse to allow filter to
  // settle, and then 80s underuse to allow plenty of time for rampup again.
  test::ScopedFieldTrials fake_overuse_settings(
      "WebRTC-ForceSimulatedOveruseIntervalMs/1-30000-80000/");

  class LoadObserver : public test::SendTest,
                       public test::FrameGeneratorCapturer::SinkWantsObserver {
   public:
    LoadObserver() : SendTest(kLongTimeoutMs), test_phase_(TestPhase::kStart) {}

    void OnFrameGeneratorCapturerCreated(
        test::FrameGeneratorCapturer* frame_generator_capturer) override {
      frame_generator_capturer->SetSinkWantsObserver(this);
      // Set a high initial resolution to be sure that we can scale down.
      frame_generator_capturer->ChangeResolution(1920, 1080);
    }

    // OnSinkWantsChanged is called when FrameGeneratorCapturer::AddOrUpdateSink
    // is called.
    // TODO(sprang): Add integration test for maintain-framerate mode?
    void OnSinkWantsChanged(rtc::VideoSinkInterface<VideoFrame>* sink,
                            const rtc::VideoSinkWants& wants) override {
      // First expect CPU overuse. Then expect CPU underuse when the encoder
      // delay has been decreased.
      switch (test_phase_) {
        case TestPhase::kStart:
          if (wants.max_pixel_count < std::numeric_limits<int>::max()) {
            // On adapting down, ViEEncoder::VideoSourceProxy will set only the
            // max pixel count, leaving the target unset.
            test_phase_ = TestPhase::kAdaptedDown;
          } else {
            ADD_FAILURE() << "Got unexpected adaptation request, max res = "
                          << wants.max_pixel_count << ", target res = "
                          << wants.target_pixel_count.value_or(-1)
                          << ", max fps = " << wants.max_framerate_fps;
          }
          break;
        case TestPhase::kAdaptedDown:
          // On adapting up, the adaptation counter will again be at zero, and
          // so all constraints will be reset.
          if (wants.max_pixel_count == std::numeric_limits<int>::max() &&
              !wants.target_pixel_count) {
            test_phase_ = TestPhase::kAdaptedUp;
            observation_complete_.Set();
          } else {
            ADD_FAILURE() << "Got unexpected adaptation request, max res = "
                          << wants.max_pixel_count << ", target res = "
                          << wants.target_pixel_count.value_or(-1)
                          << ", max fps = " << wants.max_framerate_fps;
          }
          break;
        case TestPhase::kAdaptedUp:
          ADD_FAILURE() << "Got unexpected adaptation request, max res = "
                        << wants.max_pixel_count << ", target res = "
                        << wants.target_pixel_count.value_or(-1)
                        << ", max fps = " << wants.max_framerate_fps;
      }
    }

    void ModifyVideoConfigs(
        VideoSendStream::Config* send_config,
        std::vector<VideoReceiveStream::Config>* receive_configs,
        VideoEncoderConfig* encoder_config) override {
    }

    void PerformTest() override {
      EXPECT_TRUE(Wait()) << "Timed out before receiving an overuse callback.";
    }

    enum class TestPhase { kStart, kAdaptedDown, kAdaptedUp } test_phase_;
  } test;

  RunBaseTest(&test);
}

void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) {
  static const int kMaxEncodeBitrateKbps = 30;
  static const int kMinTransmitBitrateBps = 150000;
  static const int kMinAcceptableTransmitBitrate = 130;
  static const int kMaxAcceptableTransmitBitrate = 170;
  static const int kNumBitrateObservationsInRange = 100;
  static const int kAcceptableBitrateErrorMargin = 15;  // +- 7
  class BitrateObserver : public test::EndToEndTest {
   public:
    explicit BitrateObserver(bool using_min_transmit_bitrate)
        : EndToEndTest(kLongTimeoutMs),
          send_stream_(nullptr),
          converged_(false),
          pad_to_min_bitrate_(using_min_transmit_bitrate),
          min_acceptable_bitrate_(using_min_transmit_bitrate
                                      ? kMinAcceptableTransmitBitrate
                                      : (kMaxEncodeBitrateKbps -
                                         kAcceptableBitrateErrorMargin / 2)),
          max_acceptable_bitrate_(using_min_transmit_bitrate
                                      ? kMaxAcceptableTransmitBitrate
                                      : (kMaxEncodeBitrateKbps +
                                         kAcceptableBitrateErrorMargin / 2)),
          num_bitrate_observations_in_range_(0) {}

   private:
    // TODO(holmer): Run this with a timer instead of once per packet.
    Action OnSendRtp(const uint8_t* packet, size_t length) override {
      VideoSendStream::Stats stats = send_stream_->GetStats();
      if (stats.substreams.size() > 0) {
        RTC_DCHECK_EQ(1, stats.substreams.size());
        int bitrate_kbps =
            stats.substreams.begin()->second.total_bitrate_bps / 1000;
        if (bitrate_kbps > min_acceptable_bitrate_ &&
            bitrate_kbps < max_acceptable_bitrate_) {
          converged_ = true;
          ++num_bitrate_observations_in_range_;
          if (num_bitrate_observations_in_range_ ==
              kNumBitrateObservationsInRange)
            observation_complete_.Set();
        }
        if (converged_)
          bitrate_kbps_list_.push_back(bitrate_kbps);
      }
      return SEND_PACKET;
    }

    void OnVideoStreamsCreated(
        VideoSendStream* send_stream,
        const std::vector<VideoReceiveStream*>& receive_streams) override {
      send_stream_ = send_stream;
    }

    void ModifyVideoConfigs(
        VideoSendStream::Config* send_config,
        std::vector<VideoReceiveStream::Config>* receive_configs,
        VideoEncoderConfig* encoder_config) override {
      if (pad_to_min_bitrate_) {
        encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps;
      } else {
        RTC_DCHECK_EQ(0, encoder_config->min_transmit_bitrate_bps);
      }
    }

    void PerformTest() override {
      EXPECT_TRUE(Wait()) << "Timeout while waiting for send-bitrate stats.";
      test::PrintResultList(
          "bitrate_stats_",
          (pad_to_min_bitrate_ ? "min_transmit_bitrate"
                               : "without_min_transmit_bitrate"),
          "bitrate_kbps", test::ValuesToString(bitrate_kbps_list_), "kbps",
          false);
    }

    VideoSendStream* send_stream_;
    bool converged_;
    const bool pad_to_min_bitrate_;
    const int min_acceptable_bitrate_;
    const int max_acceptable_bitrate_;
    int num_bitrate_observations_in_range_;
    std::vector<size_t> bitrate_kbps_list_;
  } test(pad_to_min_bitrate);

  fake_encoder_.SetMaxBitrate(kMaxEncodeBitrateKbps);
  RunBaseTest(&test);
}

TEST_F(CallPerfTest, PadsToMinTransmitBitrate) { TestMinTransmitBitrate(true); }

TEST_F(CallPerfTest, NoPadWithoutMinTransmitBitrate) {
  TestMinTransmitBitrate(false);
}

TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) {
  static const uint32_t kInitialBitrateKbps = 400;
  static const uint32_t kReconfigureThresholdKbps = 600;
  static const uint32_t kPermittedReconfiguredBitrateDiffKbps = 100;

  class VideoStreamFactory
      : public VideoEncoderConfig::VideoStreamFactoryInterface {
   public:
    VideoStreamFactory() {}

   private:
    std::vector<VideoStream> CreateEncoderStreams(
        int width,
        int height,
        const VideoEncoderConfig& encoder_config) override {
      std::vector<VideoStream> streams =
          test::CreateVideoStreams(width, height, encoder_config);
      streams[0].min_bitrate_bps = 50000;
      streams[0].target_bitrate_bps = streams[0].max_bitrate_bps = 2000000;
      return streams;
    }
  };

  class BitrateObserver : public test::EndToEndTest, public test::FakeEncoder {
   public:
    BitrateObserver()
        : EndToEndTest(kDefaultTimeoutMs),
          FakeEncoder(Clock::GetRealTimeClock()),
          time_to_reconfigure_(false, false),
          encoder_inits_(0),
          last_set_bitrate_kbps_(0),
          send_stream_(nullptr),
          frame_generator_(nullptr) {}

    int32_t InitEncode(const VideoCodec* config,
                       int32_t number_of_cores,
                       size_t max_payload_size) override {
      ++encoder_inits_;
      if (encoder_inits_ == 1) {
        // First time initialization. Frame size is known.
        // |expected_bitrate| is affected by bandwidth estimation before the
        // first frame arrives to the encoder.
        uint32_t expected_bitrate = last_set_bitrate_kbps_ > 0
                                        ? last_set_bitrate_kbps_
                                        : kInitialBitrateKbps;
        EXPECT_EQ(expected_bitrate, config->startBitrate)
            << "Encoder not initialized at expected bitrate.";
        EXPECT_EQ(kDefaultWidth, config->width);
        EXPECT_EQ(kDefaultHeight, config->height);
      } else if (encoder_inits_ == 2) {
        EXPECT_EQ(2 * kDefaultWidth, config->width);
        EXPECT_EQ(2 * kDefaultHeight, config->height);
        EXPECT_GE(last_set_bitrate_kbps_, kReconfigureThresholdKbps);
        EXPECT_GT(
            config->startBitrate,
            last_set_bitrate_kbps_ - kPermittedReconfiguredBitrateDiffKbps)
            << "Encoder reconfigured with bitrate too far away from last set.";
        observation_complete_.Set();
      }
      return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size);
    }

    int32_t SetRateAllocation(const BitrateAllocation& rate_allocation,
                              uint32_t framerate) override {
      last_set_bitrate_kbps_ = rate_allocation.get_sum_kbps();
      if (encoder_inits_ == 1 &&
          rate_allocation.get_sum_kbps() > kReconfigureThresholdKbps) {
        time_to_reconfigure_.Set();
      }
      return FakeEncoder::SetRateAllocation(rate_allocation, framerate);
    }

    Call::Config GetSenderCallConfig() override {
      Call::Config config = EndToEndTest::GetSenderCallConfig();
      config.event_log = &event_log_;
      config.bitrate_config.start_bitrate_bps = kInitialBitrateKbps * 1000;
      return config;
    }

    void ModifyVideoConfigs(
        VideoSendStream::Config* send_config,
        std::vector<VideoReceiveStream::Config>* receive_configs,
        VideoEncoderConfig* encoder_config) override {
      send_config->encoder_settings.encoder = this;
      encoder_config->max_bitrate_bps = 2 * kReconfigureThresholdKbps * 1000;
      encoder_config->video_stream_factory =
          new rtc::RefCountedObject<VideoStreamFactory>();

      encoder_config_ = encoder_config->Copy();
    }

    void OnVideoStreamsCreated(
        VideoSendStream* send_stream,
        const std::vector<VideoReceiveStream*>& receive_streams) override {
      send_stream_ = send_stream;
    }

    void OnFrameGeneratorCapturerCreated(
        test::FrameGeneratorCapturer* frame_generator_capturer) override {
      frame_generator_ = frame_generator_capturer;
    }

    void PerformTest() override {
      ASSERT_TRUE(time_to_reconfigure_.Wait(kDefaultTimeoutMs))
          << "Timed out before receiving an initial high bitrate.";
      frame_generator_->ChangeResolution(kDefaultWidth * 2, kDefaultHeight * 2);
      send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy());
      EXPECT_TRUE(Wait())
          << "Timed out while waiting for a couple of high bitrate estimates "
             "after reconfiguring the send stream.";
    }

   private:
    rtc::Event time_to_reconfigure_;
    int encoder_inits_;
    uint32_t last_set_bitrate_kbps_;
    VideoSendStream* send_stream_;
    test::FrameGeneratorCapturer* frame_generator_;
    VideoEncoderConfig encoder_config_;
  } test;

  RunBaseTest(&test);
}

}  // namespace webrtc

redpajama_set_name: RedPajamaGithub


An MR license or a Medium Rigid truck driving license is used to permit you to drive any truck or bus with axles, weighing under eight tons. There are many MR truck driver training providers who give their students competent lessons on following road safety and handling huge vehicles with care. They take assessments, get an eyesight checkup, and analyze road skills of individuals before giving the license.
MR license is the intermediate class of heavy vehicles. It most commonly obtained a license as it allows for more flexibility to drive a wide range of vehicles as compared to an LR license.
There are four steps to fill before you apply for MR license. Driving a heavy vehicle isn't easy, that is why the screening process is relatively comprehensive.
The applicant for MR truck license must hold a car license (not learner's permit) for at least a year before applying.
Must complete the driver's knowledge test.
Get enrolled in an MR license driver training provider and learn to drive an MR vehicle.
Successfully complete the Medium Rigid license test.
These may vary depending on the requirements of different schools, but they all follow the same method more or less.
Shipment of a heavy automobile or machinery parts.
Food delivery in bulk for restaurants.
Delivery, allocation or removal of furniture (furniture rental service providers use it more often).
Towing cars and other automobiles.
Basically, it includes any such job roles that require individual to be able to handle a Medium Rigid truck with ease.
Before getting yourself enrolled with a Medium Rigid truck license training and assessment school you should look for one that is accredited, competent, and their training location should be closer to where you live. Otherwise, it will become difficult to show up on time.
Secondly, for people who have jobs with unpredictable hours should look for schools with flexible training hours. Meet with the instructor so you can later develop a rapport, study the curriculum and see if it fits your needs, and ask them about their training methods. The cost of training lessons and assessment is also provided on the websites of many major driving schools, you can contact also them to know about their dues.
You can also get your eyesight tested and get a number if you have poor eyesight, this is a pre-requisite for many schools, but if not, it's for your own safety.
What Vehicles Can You Drive with an MR License?
A heavy vehicle with two axles and a GVM greater than 8 tons (e.g. two-axle trucks, buses, and tippers).
A heavy vehicle included in two towing a single trailer (other than a semi-trailer) with a GVM under nine tons.
A special purpose vehicle greater than eight tones (you can get training from driver schools who provide specific vehicles, most relevant to the company that you are likely to join later).
There are many driving schools that can get you trained and tested early, even in a single day. The minimum requirement of hours of training ranges from 5 to 8 hours for obtaining the driver's license and ten to twenty hours for mastering the training (specialization according to job roles).
In order to get your MR, license the first thing you need to do is go over your driver's knowledge to complete the test successfully and look for a driving school that suits your need. We hope this blog post answered your questions and provided comprehensive information on what an MR license is.


Local, Regional & OTR Positions Available!
Up to $10,000 Sign On Bonus and Up to $40,000 Sign On For Team Drivers!
We work with over a 100 of some of the highest paying trucking companies in the industry that are willing pay top dollar for YOU!
With the current driver shortage trucking companies are offering better pay and benefits to attract drivers. With HireMaster.com we match you with these high paying trucking companies in our network which are offering up to a $10,000 sign on bonus and $40,000 for teams, top pay, excellent home time and some of the best benefits you could ask for!
Join the thousands of truck drivers who have found jobs through our network today!
Let us help you find a better job!


36 puppies in 8 litters.
Tip, born on November 7th 2008, is a Border collie breed and comes from the Mawlch kennel in Croatia from Alen Mareković.
Although I'm not a big fan of border collies Tip's character and behavior fascinated me from early on. He never shows fear of anything, loves people and dogs and is always ready for any type of work. In addition to agility, from time to time we work with the sheep for which he showed great interest and talent.
He expresses a strong prey drive but, as he is in everyday life - calm and never shows signs of nervousness - there is no difference in that regard when we work together doing agility or herding. Since always he behaves like a little puppy but when he works he is fully concentrated on it not letting playfulness to get in the way.
Tip began to compete when he was eighteen months old and after a short period achieved very good results. After just two months of his agility career he won 3rd place at the European Open Championship. That same year, 2010, he qualified for the World Championship in Germany winning 7th place before his second birthday.
Since 2010 Tip has been member of the Croatian team at the World Championships (except for the year 2013) and the European Open.


text:
Optometry Professionals
Sports + Athletes
Moving forward into 2021 – A letter from Binovi Executive Chairman Terry Booth and CEO Adam Cegielski
Terry Booth
Adam Cegielski
Founder + CEO
The new year is upon us, and while we may not be celebrating quite the same way we normally would, this time of year does give us an opportunity to reflect on the last 12 months and appreciate how far we've come.
Back in March, we outlined the steps the Binovi Team was taking in light of the growing concerns of the COVID-19 pandemic, and we're happy to report that, despite some initial growing pains and a bump or two in the road, the transition has been largely seamless. Our team continues to work largely from home, and work continues on a number of projects in all departments. We're still working hard to ensure we can bring you the best possible products and service we can to help you —regardless of whether you're a vision care provider, a sports vision trainer, or a patient or athlete.
COVID-19 aside, much has changed since that spring check-in. In May, we welcomed our new Executive Chairman, Terry Booth, to the company, and initiated our plans to bring our Noble and Global vision for Binovi into the education space, with the goal of being able to screen and coordinate care for the approximately 20% of students K-8 who suffer from an undiagnosed vision issue.
This year also brought the acquisition of VIMA, makers of the VIMA Rev strobes for sports and tactical applications, bringing another hardware offering to the Binovi Platform. Our development team is hard at work on the full integration of VIMA products into the Binovi software you know and love.
We recently announced the development of another new product for the Binovi Platform, in the form of Binovi Connect. This web-based video conferencing app will allow prospective patients and vision care providers to connect through Binovi, perform screening tests, and determine whether vision therapy is warranted. Our goal is to launch Binovi Connect to the general public early next year, and to use proprietary software to help screen not only individuals, but to incorporate vision screening, testing, and therapy to the educational curriculum for students to help bolster reading skills and success in the classroom and in life.
Most recently, we announced the acquisition of Visual Efficiency Rating (VERA) technology, a proven screen-based screening tool designed specifically for children and teens to help identify and classify vision-related issues beyond simple visual acuity issues. VERA will be integrated directly into Binovi Connect, making for a simple, streamlined, and easy-to-use remote testing process.
Part of our work in advancing and expanding on the expert knowledge of Binovi involves creating key relationships with specialists and experts in their fields, and this year's progress has been nothing short of spectacular. In April, we teamed up with Eli Wilson Goaltending to bring Binovi to his hockey goaltending schools and camps, already world-renowned for their results. We also brought on Dr. Leonard Press, a long-time Binovi advocate, as Chief Scientific Officer to lead our Scientific Advisory Board. Working alongside Dr. Press are new advisors Dr. Sandra Stoddard and Dr. Jason Dyck, experts in their own rights. This amazing team was joined in November by Dr. Susan Barry and in December by Dr. Michael Gallaway to help drive our resources in the right direction
As part of our commitment to expert knowledge, we were proud to welcome Olympic and World Champion Jennifer Botterill to the Binovi Performance Advisory Board. We're also working with Dr. David Boynton, a coach, chiropractor, and athlete, who will be working with the team here at Binovi to bring sport-specific training programs to the Platform.
Finally, we've announced that we'll be partnering with Babe Ruth League to provide sports vision training to their more than 1 million youth athletes in the United States. As the Official Provider of Health Programming for Babe Ruth League, we'll be providing players, coaches, and umpires with vision screening, and the necessary tools and services they'll need to increase awareness of, and treat, vision-related deficiencies.
It's been a busy year, and there's still a lot to come and a lot going on behind the scenes that we're very excited to share with everyone shortly. We want to ensure that we're prepared to tackle 2021 with a renewed sense of purpose and an even greater drive. On behalf of Terry and the rest of the Binovi Team, I hope that everyone is staying safe and doing the best they can, and look forward to being able to interact with everyone in person soon.
We're looking forward to what's ahead of us in 2021, and invite you to join us.
Adam Cegielski, Founder and CEO
A Special Thank You to Our Supporting Partners
Binovi Appoints Dr. Michael Gallaway to the Binovi Scientific Advisory Board
Binovi Announces Election of Directors and Annual General and Special Meeting Results
Previous post Binovi Appoints Dr. Michael Gallaway to the Binovi Scientific Advisory Board
Binovi Technologies Corp.
info@binovi.com
Binovi
About Binovi
Stay Updated on Binovi
© 2020 Binovi Technologies Corp.

redpajama_set_name: RedPajamaCommonCrawl


Do we have to do this at the gym tomorrow?! Is this a new Strongman event?! What if I don't own a saw?! What if I'm a tree-hugger?!
No, no, sillies...this is about the importance of sleep, catching Zs, sawing logs.
Sometimes, we get so focused on what we have to do that sleep gets placed on the back burner of our priority stove...but, sleep--how much you get and the quality of sleep you get--is arguably just as important as the food you eat and the way you move your body.
Good sleep, helps our bodies and minds recover, keeping us lean, happy, mentally focused, and healthy. But chronically poor/inadequate sleep slathers on body fat, screws up our hormones, ages us faster, increases chronic illnesses, and drains our IQ and mojo.
Studies show that, "People who get at least seven hours of sleep per night tend to have less body fat than people who don't...In a study involving 9,000 people between 1982 and 1984 (NHANES I), researchers found that people who averaged six hours of sleep per night were 27 percent more likely to be overweight than their seven-to-nine hour counterparts; and those averaging five hours of sleep per night were 73 percent more likely to be overweight.
Glucose tolerance goes down. This is a well-known phenomenon, and it's probably one reason why chronic sleep loss is a big risk factor for developing Type 2 diabetes.
Appetite increases. Leptin, the hormone that signals [fullness], is lowest in people with sleep deprivation. This is one reason that people who haven't slept tend to crave carbohydrates and junk food more than any other food. Their ability to resist these cravings also decreases.
Cortisol rhythm gets out of whack. Normally, cortisol is highest in the morning (to wake you up) and drops through the day until the evening, when it's lowest (to let you get to sleep). Under sleep deprivation, cortisol is still high in the morning, but the drop-off throughout the day is far more gradual – and at night, cortisol can remain elevated enough to disrupt the quality of sleep, creating a vicious lack-of-sleep + chronically elevated-cortisol level.
So, how do we improve our sleep quality?
Well, I'm glad you asked! Just as we benefit from our wake-up routines, our weekly and monthly routines, our nutrition routines and our exercise routines, we can benefit by building a solid sleep routine. Here are some helpful tips to get you sawing the biggest (loudest) logs in the forest!
I. Create and maintain a regular sleep schedule.
Most people need 7-9 hours of sleep per night. 7 should be your baseline. If you know you have to wake up at 5:15 to get ready for work, then be in bed by 9:30 and asleep by 10. Getting in bed at 10:15 doesn't count. Also factor in transition time. Don't stop what you're doing at 9:29 and expect to be snoring by 9:30. Start moving in the direction of bed by 9:00.
Try to go to bed and wake up at the same time every day and night. While it might be unrealistic to do this seven days a week, try to be as consistent as possible. If you're consistent, your body will know when to release calming hormones before bed, and stimulating hormones to help you wake up. You'll feel sleepy when it's time for bed and wake up more refreshed. Heck, you may not even need that annoying alarm!
Digital devices stimulate our brain with light, noise, and mental demands. Unplug from all screens — TVs, computers, phones, tables — at least 30 minutes before bed. (If you must read your tablet, switch the screen to the black or dimmer background. And if you're going to be on your computer, download a program like f.lux, which decreases your screen's color temperature at night.) Our brain produces melatonin as light levels decrease. Melatonin ensures deep sleep, and may also help regulate our metabolism. If we have too much light at night, we don't get proper melatonin production.
What de-stresses you? Do that! This could include: Gentle movement — such as stretching, foam rolling, or yoga, or even a slow stroll around the block. Try meditation, deep breathing, or other simple relaxation exercises? Even 5-15 minutes can release tension and activate calm-down chemicals.
Whatever is in your brain, get it out and on to paper. Keep a brain dump journal by your bed.
D. Read a book before bed — but make sure it's not too engaging — otherwise you'll be tempted to stay up with that thrilling detective novel until the wee hours.
E. Take a bath or shower.
In addition to creating a nightly sleep routine to help improve your sleep quality and duration, you should ensure that your sleeping environment is conducive to sleep.
A. Keep the room as dark as possible.
Melatonin is a hormone produced by your brain that signals to your body it is time for sleep. Making your room as dark as possible will maximize your melatonin production. Dim your lights at night. Install low-wattage bulbs in your bedroom, and keep things as dim as possible in the hour before your planned bedtime. Cover your windows well. Use a motion-sensitive or dim night light if you need something to illuminate your midnight path to the bathroom. Put your iPhone in another room or flip it face down. Cover or dim the alarm clock, or look for one that illuminates only when touched. Again, if you have to use a computer late at night, download the software f.lux, which changes the brightness and tone of your screen in time with sunset and sunrise, reducing evening blue light.
B. Create a relaxing sleep area that is quiet and free of clutter.
Your bedroom should be relatively organized and peaceful. The sight of clothes strewn all over the floor or furniture, boxes or books toppling over, and tangled cords can make you feel stressed and interfere with your ability to relax. A messy room can also be dangerous if you have to get up at night to use the bathroom. Set your room to an appropriate temperature. Most people sleep better when it's cool (around 67 F); others sleep better at a neutral temperature. Use white noise if needed. If you live in an urban environment and you tend to pop awake at the slightest sound, then a steady source of white noise could really help. Using some nature sounds on your iPhone, or even just turning on a fan (or an old radio turned to static) can be enough to drown out other noises and lull you to sleep. A HEPA filter can also work well for this purpose, serving double duty by keeping your air cleaner as well.
IV. How to wake up.
While a jarring alarm will certainly get us out of bed, it doesn't exactly start the day on an enjoyable note. Not only that, it jacks up our stress hormones immediately, starting our day in "fight or flight" mode.
Here are some more humane solutions.
A. Take advantage of natural rhythms.
Sleep occurs in multiple stages, alternating between deeper and lighter sleep. We sleep more and more lightly as the night goes on. If we wake up at just the right moment in our lighter sleep stages, we'll feel reasonably good and snap into alertness quickly. But if we're forced to wake up while in a deep sleep phase, we'll feel groggy, disoriented, and sleepy — suffering from sleep inertia. There are many gadgets and apps that will sense your sleep cycles and wake you up when you're sleeping your lightest.
You can also track your sleep with gadgets and apps like Zeo or the Fitbit, which will help you gauge where to improve your sleep and wake routines.
B. Wake up to light.
Use a dawn-simulating alarm clock. Research shows that when people are slowly roused by gradually increasing light levels, they feel much more alert and relaxed than when they're woken up by a sudden, blaring alarm.
Increasing light has also been shown to raise cortisol in the morning (which is an important signal to your body to wake up), and to improve sleep quality.
C. Wake up to soft, slowly-building noise.
Some types of alarm clocks (such as the Progressive Alarm Clock app) will also gradually increase noise or music, so that you're slowly lifted out of sleep rather than being suddenly whacked in the ear with a loud morning DJ.
D. Get moving right away.
When your alarm goes off, one of the worst things you can do is hit snooze. Snoozing seems to increase sleep inertia. Instead, once that alarm goes off, simply sit up and put your feet on the floor. Start shambling towards the bathroom, or anywhere else that isn't your bed.
E. Expose yourself to more light.
Throughout the day, get as much light as you can. Most folks can sneak outside for 5-10 minutes. Run errands at lunch or eat outside. Do as much as you can to get that sunshine. The more bright natural light you can get during your normal waking time, the more your body will know to gear down at your normal sleeping time.
V. Throughout each and every day.
A. Keep alcohol and caffeine moderate.
Genuinely restful and restorative sleep comes from deep sleep. Even though it seems like booze is relaxing, more than 1-2 drinks in the evening can interfere with deep sleep, as can too much caffeine. So limit alcohol to the suggested amounts (max of 2 drinks per night for men and 1 per night for women), and reduce caffeine after 2 pm. Otherwise, although you may "sleep" for 7 hours, your sleep won't be high quality, and you won't get the recovery benefits.
B. Eat and drink appropriately.
Having a large meal immediately before bed can disrupt your ability to fall and stay asleep. Instead, eat a regular-sized (or even smallish) meal a few hours before bedtime. A nice blend of protein, carbs and fats will help to keep you satiated, and might even improve your ability to fall asleep as your brain converts carbs to serotonin. In addition, try to limit your fluids 2-3 hours before bedtime. Drinking too much liquid shortly before bed can result in frequent waking for bathroom breaks. While total sleep time is important, uninterrupted sleep time is even better.
Exercising regularly helps normalize circadian rhythms, tone down the sympathetic nervous system, and regulate endocrine function. However, save the intense exercise for during the day, if possible — a weights or interval workout in the evening can rev us up and make it tougher to get to sleep.
Just like you can't go from 0 to 100 first thing in the morning, you can't do the reverse at night — going from "on" to "off" in a few minutes. Thus, the first step to getting more and better sleep is to create a nighttime routine and environment that tells your body that you are preparing to go to sleep. Over time, if you're consistent, your body will start the process of gearing down automatically.


text:
Lorenzo Sabatini (* 1530 in Bologna; † 1576 in Rom) war ein italienischer Maler des Manierismus und war hauptsächlich in Florenz, Bologna und im Vatikan tätig. Er ist auch unter dem Namen Lorenzino da Bologna bekannt.

Er studierte bei Prospero Fontana, sein Stil wurde jedoch auch von Giorgio Vasari und Parmigianino beeinflusst.
Ab 1573 arbeitete er in Rom, z. B. im Vatikan in der Cappella Paolina und der Sala Regia.
Einer seiner Schüler ist der flämische Maler Denys Calvaert.

Weblinks
 Abbildungen einiger Kupferstiche Sabatinis

Einzelnachweise

Maler des Manierismus
Historische Person (Italien)
Geboren 1530
Gestorben 1576
Mann

redpajama_set_name: RedPajamaWikipedia


text:
The problem with public education and NAPLAN
By Tim Badrick | 19 April 2011, 3:20pm | comments |
Tim Badrick thinks public education in Australian too many chiefs and not enough Indians and airs his suspicions about the real reason the Government wants NAPLAN testing.
I thought long and hard before writing this, because as I am not a parent and haven't got any children who go to school, I may seem a bit underqualified to talk about the public education system in Australia.
Nevertheless, it is my own personal belief that there are too many Chiefs and not enough Indians running our schools at an administration level. That means that most children at public schools are not getting the objectively simple education they need to teach them the basics of maths and English. Instead, they get all the impractical and excessively intellectual syllabuses, which shouldn't be heaped upon any student until they at least get to high school.
From an observation – and not experience – point of view, I believe the public school system in Australia has been taken over at an administration level by an amalgam of some of the most left-wing sleeper fraternities outside the trade union movement. Assuming the various teachers unions outside Queensland are tarred with the same brush as the Queensland Teachers Union, an organisation which I am familiar with, then it's no wonder that the present Y-Generation of children and up-and-coming teenagers in our public schools are already preaching the virtues of Marxism and the Labor Party a lot of the time by the time they leave school and head to university.
The QTU is so unobjective, it's a wonder that any conservatively minded parent in Queensland would knowingly send their child to a public school in the first place if they understood just how manipulated the school curriculums are in the name of promoting closet communism at a community level. I'm assuming there is very little difference between the QTU and its interstate equivalents.
The National Assessment Program - Literacy and Numeracy (NAPLAN), which was implemented in 2008, is the most definitive and glaring example of political interference in our public education system, despite it being dressed up by the federal government as a well-meaning and apolitical initiative to improve the literacy and numeracy skills of Australian children. According to what a well-seasoned principal in a Queensland private school recently suggested was going on behind closed doors as to maintaining the confidentiality of NAPLAN data and not allowing it to become accessible to bureaucrats with a political agenda, I'd have to say that Gillard and her leftist bureaucratic shadows in the education system have to convince a few people, including me, that every single exam, every single essay, in fact everything that school children are being accessed on, isn't been screened by a bunch of unelected Big Brothers loyal to the Labor Party when no one is watching as a means of identifying the voting habits of their parents and the potential future voting habits of the children themselves once they become adults.
That's the kind of meddling in people's private affairs which you would have expected in an eastern bloc country before the fall of the Berlin Wall, not in 21st century Australia. Paul Thompson, principal of Kimberley College in Logan City, Queensland, is one of the few 'rebels' in the education system who doesn't mind locking horns with the commo powers that be that rule the entire public education system in Queensland and even influence the decision makers in many left-of-centre private schools. His school, a private one itself, has been audited a conspicuous amount of times for no reason by the Department of Education because of his outspoken views against the establishment. On top of Thompson's wish list is the abolition of NAPLAN, which he rightfully infers is a massive politically motivated 'invasion of privacy' and a 'half-baked scheme' which is not helping one iota to address the growing problem of illiteracy and innumeracy in school aged children.
I agree wholeheartedly with Thompson.Let's can NAPLAN and instead of having Gillard's snoops looking over everything Australian school children put down on paper, let's set a classroom limit of 20 students for every teacher, both in private and public schools. Let's get back to some no-nonsense one-on-one straightforward education. What the public education system needs across Australia are pro-active agitators like Paul Thompson and not teachers unions who preach their propaganda from only one political textbook.
QUEENSLAND EDUCATION
education private schools QTU Tim Badrick
Recent articles by admin
Saving cricket by shortening it
5 February 2012, 9:30pm Making one day games shorter and cutting the length of test match — two ideas Tim ...
Queensland Government wants CSG come hell or high water
3 December 2011, 11:28am The Queensland Government seeks to massively expand CSG development in Queensland ...
Blogging and the revival of citizen journalism
12 September 2011, 12:00am [caption id="attachment_10040" align="alignleft" caption="by Tim Badrick"][/capt ...
view all 13 articles by admin


Armored Kantus are first shown in a cutscene in Act IV and are then encountered later in the act, when Delta Squad attempts to let in the water needed to get the submarine into actual waters.
As their name implies, these Kantus comes with armor upgrades and dual wielded Gorgon Pistols. As bullets ricochet off their armor, and as suggested in game, the best way to deal with these Locust troops is to simply use grenades.
Tagging an armored Kantus with a frag grenade will always cause it to die instantly. Try tagging it when it is shooting someone else, or when it is doing its shriek.
Try to keep your distance, because the Armored Kantus does a lot of damage with its akimbo Gorgon Pistols, and with its roll.
Using any explosive on them will cause them to expose their glowing mouths, this is their weak spot and is highly vulnerable to damage. They will do it on occasion regardless of being hit by explosives.
Another very effective strategy like with any other armored Locust is to use a Flamethrower to weaken the Kantus armor and then just blast away. This work great in Horde Mode!


The edible candies "look very innocent and safe, so you take another and another, and slowly it is being absorbed. And then you start to feel awful, before you complete the absorption, and that can lead to a psychotic episode," Dr. Volkow said.
The new study found that though edibles represented less than one-third of 1 percent of the state's total cannabis sales by weight of THC between 2014 and 2016, they accounted for 238 of the 2,432 cannabis-triggered visits to the UCHealth University of Colorado Hospital Emergency Department, or about 10 percent. The authors calculated that there was 309 times more THC sold in flower or smoked form compared with edible products during the three-year period examined.
Symptoms also tended to vary depending on whether the pot was consumed as an edible or smoked. Nearly half of the emergency room patients who had consumed edibles complained of intoxication or altered mental status, often accompanied by anxiety, compared with less than a third of those who had smoked the pot.
About a quarter of both the smokers and those who consumed edibles experienced psychiatric problems, but those who used edibles were more likely to exhibit acute psychiatric symptoms, while the smokers were more likely to complain of an exacerbation of a chronic condition like depression.
In addition, 8 percent of edible users had cardiovascular symptoms, including rapid or irregular heart rate, compared with only 3 percent of pot smokers. Serious cardiovascular events, including heart attacks, occurred in both groups. Other studies have also reported on the emerging concern of cardiovascular problems being associated with pot use, Dr. Volkow said.
Concerns about edibles are not new, and many states that have legalized recreational or medical cannabis, including Colorado, California, Rhode Island, Nevada and Oregon, require packaged edibles to carry a warning that the intoxicating effects may not be felt immediately, said Camille Gourdet, a researcher who studies state cannabis policies at RTI International, a nonprofit research organization.
Many states also require edibles to be clearly marked with a symbol warning consumers that the products contain cannabis and are not regular food items, Ms. Gourdet said. Several states also require edibles to have even distribution of THC content throughout the product so it is not all concentrated in a single bite of a cookie or brownie.
Dr. Monte, who sits on the Colorado Retail Marijuana Public Health Advisory Committee, said he does not think edibles should be available in the retail recreational market. He said the important message for consumers is that there are more adverse drug events associated with edibles than with inhaled products, and that edibles are more likely to trigger psychiatric illness. First-time users — a group that, in Colorado, often includes tourists, are at particular risk, he said.
Last week, the state medical societies of New York, New Jersey, Connecticut and Delaware put out a joint statement saying that while they support changing the legal status of the drug to facilitate research, they oppose the legalization of recreational marijuana because there is not enough research proving that marijuana is safe.


Luxuriant floral designs paired with friendly colours, as a result, the Viora collection beams with a summertime feeling, even on the greyest of English days. The Glowing florals in colours like cherry red, pale yellow, ice blue, lilac, light grey and white create expressive embossed structures. Turn walls into a sea of waving flowers!


A baking oven that mounts easily on top of both Tent and Camp stove models.
This baking oven flat meaning it ís highly portable. Featuring a handled lid and a thermometer.
Bake your own freshly baked bread, jacket potatoes or pizzas off the beaten track!


On the call of Joint Resistance Leadership (JRL), the leaders and activists of the leadership on Friday staged a protest demonstration demanding the release of JKLF chief Muhammad Yasin Malik and revocation of ban on Jama'at-e-Islami Jammu and Kashmir.
Family members of JKLF Chief Muhammad Yasin Malik outside Kothibagh Police station when was being shifted to Kot Balwal Jail on March 7, 2019, from his Maisuma residence.
An eyewitness said that soon after the culmination of Friday prayers scores of the leaders and activists of Hurriyat and Jammu and Kashmir Liberation Front (JKLF) gathered at Maisuma and sought the release of Malik and revocation of ban on Jama'at.
On February 22, Malik was arrested and kept under detention at police station Kothibagh Srinagar. Fifteen days after his detention, Malik was booked under PSA and shifted to Kot Balwal jail.
Earlier, the central government banned Jama'at-e-Islami Jammu and Kashmir for five years under "anti-terror law" on grounds that it was in "close touch" with militant outfits and was expected to "escalate secessionist movement" in the state.


I just got news that my sabbatical application has been approved by my campus. Now, of course, it has to be approved by the governing folks. But historically, they've approved sabbaticals if the state university campuses have approved them (because the university campuses, when they approve, say that they can cover them budget-wise).
This is bright news for me in a difficult semester. And boy, I can't even say how relieved and happy I am; words, as always, fail me. Or I fail them, I suppose.
I'm going to start a new label in celebration!
The big question in this post is about safety pins. Are you seeing them around? I'm sympathetic, but I guess I feel like we're going to forget really quickly. What do you think?
Other than that, I've been muddling through. That's how it's been.
I've been ill; just a head cold, but miserable in the head cold way for almost three weeks. (It's MUCH better now, and has been steadily improving since about Thursday, thanks for asking.) For most of those past three weeks, I've been coughing a lot, and waking up every couple of hours during the night coughing. So I've been barely sleeping.
I've been involved with interviews, many of them. All good, but they take a lot of time. And then there's the related paperwork, which takes a lot of time, too.
I'm involved in a task force which will come to partial fruition this coming week. Fingers crossed that it goes well. I have a couple hours (maybe) of prep to do for my part, then the actual event.
Much of the week was spent doing 20 minute conferences with all my writing students. It's a lot of time, but very helpful to all of them, I think. I hope.
I've been feeling like I'm juggling, and something's always about to drop and break. It's not a good feeling.
I've fallen behind on grading. I need to rethink this sort of assignment because the grading's onerous, even though the assignment is really valuable in getting students to read critically.
The one bright thing is practicing the violin when I haven't been coughing too much. It totally takes my mind off everything else, just focusing on trying not to sound really bad.
This is a big one. I thought there were big ones before, but this seems way, way more important.
I drove by my polling place (it's on the best route to work) this morning at about 7:15, and the parking lot was full, and the street parking was close to full.
Vote well, USians; please, please, please vote well.
Have you folks seen this site, McMansion Hell?
Basically, the writer is an architectural critic who explains why it is that McMansions are so darned ugly. They basically do two sorts of posts. One is the broad explanatory post, taking some issue and explaining how it works in the architecture. It may be an overview, as here, or it may focus on a specific aspect of houses, and show different ones with explanations, as with this on front entries, or this one on landscaping, or this one on roofs. The second sort of post takes a specific house, staged by realtors for the market, and critiques it. Here's one on a house in Virginia. And here's one from Georgia.
So I have a bit of a love/hate, or maybe more a love/fear relationship with this site. I love it because it explains so much about that aesthetic and why McMansions seem so unpleasing aesthetically.
But I hate/fear it because every post makes me more aware that I live in a sort of ugly McMansion, not guilty of the highest level of McMansion excesses, perhaps, but pretty up there.
For example, if you look at the Georgia house, and scroll down to the kitchen, where the writer talks about white appliances? Yeah, I can see my white kitchen appliances from where I sit. And I'm not getting new ones any time soon (I hope!). So white appliances, check.
My house is probably a 7 on the scale of 1-10 horribleness. Maybe a 6.
In addition to the ugliness, the architect talks about the cheapness of materials and building techniques used to build McMansions, and here's where my house falls squarely in. Bad roof shingles, check (now not bad, because I had the whole thing replaced). Vinyl siding, check (but seriously, I would hate to have to restain or repaint every three or so years). Minimal insulation (well, at least I had a lot added when I had the roof redone, so hopefully that is solved). And so on. It's sort of worrisome.
When I bought my house, it was in a newish neighborhood, on a cul-de-sac where all the houses were built, but also near areas that didn't have streets through and such. For a while, it stayed like that. But in the last three years or so, there's been a building boom, streets have been put through, and a lot of new houses are going in, and they're all so McMansion. My house is already one of the smaller houses on my street of 9 houses, maybe the smallest. But the new houses going in are way bigger than most of the houses on my street (there's one that's way bigger than the others, and about the size of the new houses).
So, there we are, something fun to read; or, if you're like me, something fun and perhaps anxiety-producing!
Surf Scoters are pretty rare up in the North Woods. They're way more common in the way up North.
I spent all weekend in grading jail, and now I'm out! At least until Friday.
I gave midterms last week (in two different courses), and had several students not take them for a variety of health-ish reasons. And because some of those involve time to get better, they weren't able to schedule makeups until this week, after I'd given back midterms in class and gone over them (I can't see making 20+ people wait to get midterms back because one or two people were ill). So I had to write two new midterms. And I'm willing to do that, and did it, and without complaining to the students, but dang, it's frustrating to have to write make up midterms.
I was talking to one of my colleagues about it, and he said it feels like we're having more students with mental health issues. That may be. Is that your experience?
Of course, we want students with mental health issues to get the help they need, to not feel stigmatized, and to succeed.
But, for example, that means we have to write extra midterms, so it takes extra time. And we're all already working more than 40 hours a week. Where does the extra time come from?
I guess the questions for me are: are other folks seeing more students with mental health issues (and having those issues require additional work for instructors and such)?
How do you balance the additional needs of those students with all the other demands on your time?
Every so often, I'll look at a blogroll, and think how much I miss certain blogging voices. And maybe I'll click over, just in case.
Today, I found a link to a State Park place where I may have been before (or not); I have vague memories of a place that looks a lot like the pictures on line. But maybe a lot of places look like that and I just don't realize it?
It did some interesting things, choices the director made, and the theme of tale-telling. But there were a couple of parts that were, well, problematic. Or is it just me?
In short, a 19th century white European male goes off to see for adventure, ends up stranded on an island off Australia, where he eventually meets some Aboriginal people. He saves the people, and then is basically offered his choice of brides, choosing a woman he met early on. Later, homesick, he leaves his wife and family and returns to Europe where he writes and sells his story, to both acclaim and doubt.
The problematic, initially, for me, was the representation of the Aboriginal people. They weren't played in blackface (thank dog) but were played in tattery looking clothes (think caveman pictures from the 50s more than not) and did more grunting than not. Like those old caveman pictures, they were played stooped, mostly. The crowd seemed to find the effect comic.
Now, I get that by the end the audience is supposed to question his tale, to wonder if he's ever seen Aboriginal people, or had these adventures. But while the Aboriginal people are on stage, there was nothing to suggest that the performance was thinking about what it means to present Aboriginal people in this sort of way.
The lesser problematic part was during the choosing a wife scene, where one of the potential brides was played in broad drag. Again, the audience laughed.
But, I wonder, how would it feel to sit with my African American or Native American students to see this play? How would it feel to sit with a transgender student to see this play?
I don't think it would feel comfortable. The fact is, of course, most African American or Native American students have seen far worse, experienced far worse. But this would be like yet another paper cut in the skin of life. I wouldn't want to participate in giving that paper cut.
To put it another way, it's not a good sign that I was grateful, ever so grateful that at least they weren't in blackface.
As tends to be the case here, the theater audience was very white. So as the play was presenting the Aboriginal people, it felt like a bunch of white people secretly (or maybe not secretly, but imagining themselves as the only possible audience) enjoying the racism of the representation.
I haven't read the play, so maybe this performance wasn't at all what the text suggests, or not at all like the play that premiered in New York.
I did read a couple reviews (including in The New York Times), and they didn't seem to notice race issues. But then, theater often seems like a bastion of white privilege, with white folks just not noticing racism because they imagine they're in an all white space.
Has anyone else seen the play? Thoughts?
I saw a play last year by a Nigerian-American playwright, set in Africa, with all African characters, but played by white folks (in this Midwestern area), and it didn't feel racist in this way. It felt like the African characters were represented with respect in a way that just didn't come across in Shipwrecked. I think that other play was played as a sort of timeless story, a story set in a culture, but a story that they expected to speak to all humanity and represent all humanity, in the way that we imagine Shakespeare speaks to all humanity, if you know what I mean.
Is there a way this play can be performed that doesn't feel racist?
That's the day when we remember that we don't remember well, but are easily manipulated by patriotic rhetoric. Or, at least, it we should remember that we don't remember.
In Shakespeare's Henry V, the play's most memorable (at least to me) passage comes in Henry's speech before the battle of Agincourt.
I seem to post about St. Crispin's Day every few years.
Last week, I made the mistake of asking another colleague (who's in a position where they're supposed to answer these sorts of questions) a question in the department office, and then since I didn't understand the shorthand of her answer, a followup question. And she blew up at me and started ranting at me for being so so rude. So I apologized, said I hadn't meant to be rude, but had just not understood. And she blew up at me more. So, again, I apologized, and said I hadn't meant to be rude, and she blew up at me more, and then she turned and walked into her office.
That was really unpleasant. Let's just say, I'm averse to conflict. If the zombie apocalypse comes, you don't want me on your side. If you need a latrine dug, then you may want my help. If you need someone to visit while you're in the hospital, then you may want me to. But if it comes to a verbal fight, in a hallway or anywhere, then no, I'm crap at that.
I used to feel like, mostly, the folks in my department treated each other decently, and that somehow made the nastiness of the state government, the nastiness of state and local politics, the nastiness of administrative desperation... survivable.
And now, I don't feel that.
Shakespeare Writes a New Play!
The Guardian has an article this morning that talks about the new edition of The New Oxford Shakespeare (ed. Gary Taylor), which credits Marlowe with collaborating on the Henry VI plays and names Shakespeare as the author of Arden of Faversham.
I'm not much into authorship issues. I think it's pretty clear to me that theater is wildly collaborative, but I wouldn't have thought Marlowe would write with Shakespeare at that point in their careers, when Marlowe was already popular, and Shakespeare was a beginner.
As to Arden, which is a blast of a play to teach, I'm reminded of Don Foster's work claiming that "Elegy" as Shakespeare's based on computer analysis, and then deciding later that it wasn't. Of course, everyone would love to find another work by Shakespeare.
I don't think it's the first time Shakespeare's been suggested as the author of Arden. The question is, how does it change things?
For folks who use The New Oxford to teach (and I don't think Shakespeare anthologies sell much outside of teaching requirements), then it will make it easy to include Arden in a Shakespeare course. I don't know if that will happen much, though. I think it's easy to choose, say, Titus as one of the tragedies to teach in a survey, especially if you're going to teach Hamlet later, or Othello, because it brings forward revenge tragedy as a genre and race, both of which make for fruitful discussion. And there's lots to talk about re gender, violence, masculinities, social order, etc. But I don't think I'd choose Arden to do the same work in a class. I'm sure some folks will choose it, and make it work well for them.
Other than that, how do these findings change what we write or teach about Shakespeare? How do they change what we see on stage?
Maybe Arden will get some more stage time, which is good, because I think it would work really well on stage (I've never seen it).
I doubt it changes much for the Henry VI plays; they'll still get taught in Shakespeare courses, and in drama courses, and maybe they'll get added to the occasional Marlowe course.
I got an email from a colleague today, asking about one of the requirements for an interdisciplinary program (for which I chair a committee, so it made sense). I looked at my print out of the requirements, and then I looked at last year's catalog.
And then I answered with some confidence, both that this year's catalog and last year's catalog agreed about the requirement.
So, as an advisor, it was helpful to keep several years of printed catalogs on hand to be able to check requirement changes and such.
So how are we going to figure out if, say, a student comes in under the 2016-17 catalog, and then we change a major requirement in 2017 at some point. We won't have back catalogs to check (nor will students), and requirements can now change at any time during the year (rather than just once a year when the catalog went to print). That gives the university lots of flexibility, but seems like it has potential to cause advising nightmares.
The nightmares will probably be minimized if we keep going on our current trajectory or reducing requirements, of course, since it will always be "advantageous" for a student to move to a new catalog.
Has anyone out there been using only on-line catalogs for a while now? (It makes a lot of sense in many ways, of course.) How does your school track changes in programs so they're visible to students, faculty, and anyone else?
In my writing class today, students had an optional journal due, and about half the students turned one in.
It was also revision day, a day for taking the responses from peer editors and working on revising papers. We talked about revision a bit, talked about writing mini-conclusions for paragraphs, using transitions not at the end of paragraphs, but at the beginning of paragraphs, and also about writing conclusions. The journal was, in one sense, a possible rough draft of a conclusion, though they didn't necessarily realize it until we were talking about writing conclusions and one student asked if they could basically use their journal. Yes, I said, that's what it's for. And several of them laughed.
And once again, I told them that the journals for class should help them with assignments in some way or other. Pretty much all the journal assignments feed in, give them practice, or have some building relationship to the larger writing assignment.
I think some of them get it. Tomorrow, I'm going to talk to them about learning to trust the process of education.
That trust, it's really difficult. It's difficult as an instructor to earn the trust, and probably more difficult to give it to an instructor. But if you can build that trust at least somewhat, build a sense that what the instructor is asking the student to do will build skills, is do-able with work, and will contribute to their overall learning, then (I think? I hope?) students will feel like there's more of a partnership, more mentoring rather than judging.
And I'm back to violin lessons again. My teacher suggests I try X. And because I've consciously decided that I trust her teaching, I try X. And by golly, X is hard. But when I get a bit of a handle on X, then it helps me do Y, something more obviously musical, perhaps.
X this week is a D-minor scale. It's a bit hard. But I trust that it will help me when I start playing the D-minor part of the next Suzuki piece.
The past week just blew by.
I got and graded a big stack of papers, and some small stacks (journals, rewrites).
I've been to endless meetings (well, it feels like they're endless, even if they're good meetings). And student conferences; I've met with every student in my writing class at least once since 8am on Thursday.
I spent most of the weekend in grading jail. Except I went to a concert that my violin teacher was playing in. Way good!
Today, I don't teach, so I slept in, and am about to practice, and then start to grade a big stack of papers. Then, around noon, I'll go to campus for a meeting and then conferences with students.
The stack of papers I turned back in my Shakespeare class have led to some worried students wanting conferences. And my writing students are working on a paper which they'll do peer revision work on tomorrow in class. This is a hard assignment, and I think most of them are on track (since I've talked to them all in conference, I have a pretty good idea where they were). But several want more feedback before peer revision.
I seem to have an especially heavy committee load right now, and can I say, when you work with someone on a committee, you get a different sense of them. I'm on one committee with an administrator, and while I respected her before, my respect has redoubled. She's fantastic at facilitating discussion and progress.
And I'm on a committee with a young faculty colleague, and I'm astounded by how set in stone she thinks things must be. For example, we came up with issue X, and she said that she's heard that at some schools, issues X is always handled in Y way. And more experienced committee members said, yes, that's true at some schools, but we don't, because handling issue X in Y way may mislead people and thus be hurtful. And she insisted that at some schools, issue X is handled in Y way, and she wanted to make sure we knew that. And once again, other folks said, yes, we know, but we don't because doing that is problematic. She came back to the Y practice two or three more times, as if she couldn't quite believe that we'd rejected Y practice for reasons we believe are good.
And it was like that for several issues. Color me unimpressed.
Yesterday, I went to a recital by a university string student my teacher teaches. (If you want to learn an instrument, one helpful thing is to pay attention to other people who play. At the least, you get a bit more familiar with some repertoire.) The student did a really good job. Really good.
And once again, I was so impressed by how poised our music students are, at least the ones who give recitals. (I'm sure there are some music students who aren't so good, etc.) But the ones at this recital, the pianist, a chamber group, they're so good at looking confident and comfortable on stage. It's not that they don't make mistakes, but they're poised.
And watching the chamber group, it's so cool to see how closely they attend to each other, looking, listening. Way cool!
I went camping up at a State Park this past weekend, probably the last hurrah of the season.
So, naturally, I took some pictures. It was (according to WU) 26F at night, and boy is that cold. But the morning was totally worth it!
I'm reading job applications, and got one from someone who did their degree at a for-profit, on-line outfit. Everything about the application makes me feel like this person got ripped off and doesn't really realize it.
I feel sort of sickened. We're searching for a, let's say, Mathematical Forester, and this person is getting a degree in Underwater Basketweaving. But somehow they think they're a good applicant for our job.
It's not like I can sit down with them and tell them they got ripped off. And if I could, what good would it do them at this point? None that I can think of.
Yeah, so I'm feeling a bit sick at this point.
The text of the day is?
Stick Figure Lit - What's the Poem Today?
I taught a poem today, and now I did some art. The poem seemed fitting for today.
I came to my office to take care of a few things, finish some prep, enter grades, the usual.
And, yes, to check what I'm teaching in my intro to poetry class tomorrow. "My Last Duchess." What a sweet thing to read on my syllabus! What a glorious poem to teach!
Of course, most of the poems I teach in the class make me happy; I'm sure I'm not the only person who teaches a lot of favorites in intro courses, right?
I still have several more hours of grading, reading, and prep for tomorrow (I've spent much of the day grading already).
4 more in a stack of 20.
I get a small stack of grading on Monday, and another on Wednesday (different courses).
I have one biggish meeting to chair. Another meeting to prep and attend. Three obligatory (well, two obligatory and one a joy) campus social events.
Busy week ahead. Back to prepping!


text:
FILE - In this Jan. 8, 2020, file photo a rescue worker searches the scene where a Ukrainian plane crashed in Shahedshahr southwest of the capital Tehran, Iran. The downing of a Ukrainian jetliner near Tehran highlights the limits of the civilian arm of Iran's government against the absolute power of the Shiite theocracy and the paramilitary forces beneath it. (AP Photo/Ebrahim Noroozi, File)
DUBAI, United Arab Emirates (AP) — The Ukrainian jetliner stood ready for takeoff at Iran's main international airport bound for Kyiv, packed with passengers and so many bags on one of the cheapest routes to the West that the ground crew rushed to unload some luggage to make its weight for flight...
Democratic presidential candidate, former New York City Mayor Michael Bloomberg, speaks to campaign workers and supporters in Minneapolis, Thursday, Jan. 23, 2020, as he opens the first field office in Minnesota and meets with local community leaders and voters to share his vision for the country. (AP Photo/Jim Mone)
NEW YORK (AP) — Michael Bloomberg on Sunday made his case for the presidency to fellow Jewish Americans, vowing not to revisit U.S. aid to Israel -- an approach that contrasts Bloomberg with several of his Democratic rivals, including his only fellow Jewish candidate in the race, Bernie Sanders...
In this photo released by an official website of the office of the Iranian supreme leader, Supreme Leader Ayatollah Ali Khamenei delivers his sermon in the Friday prayers at Imam Khomeini Grand Mosque in Tehran, Iran, Friday, Jan. 17, 2020. Iran's supreme leader said President Donald Trump is a "clown" who only pretends to support the Iranian people but will "push a poisonous dagger" into their backs, as he struck a defiant tone in his first Friday sermon in Tehran in eight years. (Office of the Iranian Supreme Leader via AP)
Iran's top leader strikes defiant tone amid month of turmoil
TEHRAN, Iran (AP) — Iran's supreme leader lashed out at Western countries as he led Friday prayers in Tehran for the first time in eight years, dismissing "American clowns" who he said pretend to support the Iranian nation but want to stick their "poisoned dagger" into its back. Ayatollah Ali...
TEHRAN, Iran (AP) — Iran's supreme leader lashed out at Western countries as he led Friday prayers in Tehran for the first time in eight years, dismissing "American clowns" who he said pretend to support the Iranian nation but want to stick their "poisoned dagger" into its back. Khamenei used his...
Acting Russian Foreign Minister Sergey Lavrov speaks during his annual roundup news conference summing up his ministry's work in 2019, in Moscow, Russia, Friday, Jan. 17, 2020. (AP Photo/Alexander Zemlianichenko)
Russia's foreign minister slams 'aggressive' US policies
MOSCOW (AP) — Russia's foreign policy chief on Friday blamed what he described as "aggressive" U.S. policies for growing global tensions, noting Washington's reluctance to extend a key nuclear arms pact. Sergey Lavrov, who serves as acting foreign minister in the wake of Wednesday's resignation of...
In this Feb. 3, 2012 photo released by an official website of the Iranian supreme leader's office, Iranian supreme leader Ayatollah Ali Khamenei delivers his sermons of Friday prayers at the Tehran University campus in Tehran, Iran. Iran's supreme leader will deliver a Friday sermon on Jan. 17, 2020 in Tehran for the first time since 2012, as the Islamic Republic grapples with the fallout from the targeted killing of its top general in a U.S. airstrike and popular anger at its accidental shootdown of a passenger plane. (Office of the Supreme Leader via AP)
Top Iran leader: Trump is a 'clown' who will betray Iranians
TEHRAN, Iran (AP) — Iran's supreme leader said President Donald Trump is a "clown" who only pretends to support the Iranian people but will "push a poisonous dagger" into their backs, as he struck a defiant tone in his first Friday sermon in Tehran in eight years. Ayatollah Ali Khamenei said the...
Iran's top leader: Trump is 'clown' who will betray Iranians
TEHRAN, Iran (AP) — Iran's supreme leader said President Donald Trump is a "clown" who only pretends to support the Iranian people, as he addressed Friday prayers In Tehran for the first time since 2012. Ayatollah Ali Khamenei says Trump will "push a poisonous dagger" into the nation's back. He...


Hi, My name is Kristin Miller. I have been a stylist for 20 years. I am a blonde specialist. I am certified balayage artist. I am also certified in extensions and keratin smoothers. Keratin smoothers help to soften curl and wave to make your hair super easy to style for 4-6 months. I love doing vivid colors so I can make you a mermaid/unicorn. I am an innovative colorist no color is to much for me including corrective colors. I also can take any picture you give me and give you the cut and color you are looking for. I do men, women, and kids cuts, colors, perms, smoothers, gentle relaxers, extensions, facial waxes, buzz fades, blondes, browns, Bronde and every color inbetween. If you are looking for a stylist I would love to have you in my chair.