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

#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <sys/param.h>

#include "esp_attr.h"
#include "esp_err.h"
#include "esp_pm.h"
#include "esp_log.h"
#include "esp_crosscore_int.h"
#include "esp_clk.h"

#include "soc/rtc.h"

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/xtensa_timer.h"
#include "xtensa/core-macros.h"

#include "pm_impl.h"
#include "pm_trace.h"
#include "esp_timer_impl.h"
#include "esp32/pm.h"

/* CCOMPARE update timeout, in CPU cycles. Any value above ~600 cycles will work
 * for the purpose of detecting a deadlock.
 */
#define CCOMPARE_UPDATE_TIMEOUT 1000000

/* When changing CCOMPARE, don't allow changes if the difference is less
 * than this. This is to prevent setting CCOMPARE below CCOUNT.
 */
#define CCOMPARE_MIN_CYCLES_IN_FUTURE 1000

/* When light sleep is used, wake this number of microseconds earlier than
 * the next tick.
 */
#define LIGHT_SLEEP_EARLY_WAKEUP_US 100

/* Minimal divider at which REF_CLK_FREQ can be obtained */
#define REF_CLK_DIV_MIN 10

#define MHZ 1000000

#ifdef CONFIG_PM_PROFILING
#define WITH_PROFILING
#endif

static portMUX_TYPE s_switch_lock = portMUX_INITIALIZER_UNLOCKED;
/* The following state variables are protected using s_switch_lock: */
/* Current sleep mode; When switching, contains old mode until switch is complete */
static pm_mode_t s_mode = PM_MODE_CPU_MAX;
/* True when switch is in progress */
static volatile bool s_is_switching;
/* When switch is in progress, this is the mode we are switching into */
static pm_mode_t s_new_mode = PM_MODE_CPU_MAX;
/* Number of times each mode was locked */
static size_t s_mode_lock_counts[PM_MODE_COUNT];
/* Bit mask of locked modes. BIT(i) is set iff s_mode_lock_counts[i] > 0. */
static uint32_t s_mode_mask;

/* Divider and multiplier used to adjust (ccompare - ccount) duration.
 * Only set to non-zero values when switch is in progress.
 */
static uint32_t s_ccount_div;
static uint32_t s_ccount_mul;

#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
/* Indicates if light sleep entry was successful for given CPU.
 * This in turn gets used in IDLE hook to decide if `waiti` needs
 * to be invoked or not.
 */
static bool s_entered_light_sleep[portNUM_PROCESSORS];
#endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE

/* Indicates to the ISR hook that CCOMPARE needs to be updated on the given CPU.
 * Used in conjunction with cross-core interrupt to update CCOMPARE on the other CPU.
 */
static volatile bool s_need_update_ccompare[portNUM_PROCESSORS];

/* A flag indicating that Idle hook has run on a given CPU;
 * Next interrupt on the same CPU will take s_rtos_lock_handle.
 */
static bool s_core_idle[portNUM_PROCESSORS];

/* When no RTOS tasks are active, these locks are released to allow going into
 * a lower power mode. Used by ISR hook and idle hook.
 */
static esp_pm_lock_handle_t s_rtos_lock_handle[portNUM_PROCESSORS];

/* Lookup table of CPU frequency configs to be used in each mode.
 * Initialized by esp_pm_impl_init and modified by esp_pm_configure.
 */
rtc_cpu_freq_config_t s_cpu_freq_by_mode[PM_MODE_COUNT];

/* Whether automatic light sleep is enabled */
static bool s_light_sleep_en = false;

/* When configuration is changed, current frequency may not match the
 * newly configured frequency for the current mode. This is an indicator
 * to the mode switch code to get the actual current frequency instead of
 * relying on the current mode.
 */
static bool s_config_changed = false;

#ifdef WITH_PROFILING
/* Time, in microseconds, spent so far in each mode */
static pm_time_t s_time_in_mode[PM_MODE_COUNT];
/* Timestamp, in microseconds, when the mode switch last happened */
static pm_time_t s_last_mode_change_time;
/* User-readable mode names, used by esp_pm_impl_dump_stats */
static const char* s_mode_names[] = {
        "SLEEP",
        "APB_MIN",
        "APB_MAX",
        "CPU_MAX"
};
#endif // WITH_PROFILING

static const char* TAG = "pm_esp32";

static void update_ccompare();
static void do_switch(pm_mode_t new_mode);
static void leave_idle();
static void on_freq_update(uint32_t old_ticks_per_us, uint32_t ticks_per_us);

pm_mode_t esp_pm_impl_get_mode(esp_pm_lock_type_t type, int arg)
{
    (void) arg;
    if (type == ESP_PM_CPU_FREQ_MAX) {
        return PM_MODE_CPU_MAX;
    } else if (type == ESP_PM_APB_FREQ_MAX) {
        return PM_MODE_APB_MAX;
    } else if (type == ESP_PM_NO_LIGHT_SLEEP) {
        return PM_MODE_APB_MIN;
    } else {
        // unsupported mode
        abort();
    }
}

esp_err_t esp_pm_configure(const void* vconfig)
{
#ifndef CONFIG_PM_ENABLE
    return ESP_ERR_NOT_SUPPORTED;
#endif

    const esp_pm_config_esp32_t* config = (const esp_pm_config_esp32_t*) vconfig;
#ifndef CONFIG_FREERTOS_USE_TICKLESS_IDLE
    if (config->light_sleep_enable) {
        return ESP_ERR_NOT_SUPPORTED;
    }
#endif

    int min_freq_mhz = config->min_freq_mhz;
    int max_freq_mhz = config->max_freq_mhz;

    if (min_freq_mhz == 0 && max_freq_mhz == 0) {
        /* For compatibility, handle deprecated fields, min_cpu_freq and max_cpu_freq. */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
        min_freq_mhz = rtc_clk_cpu_freq_value(config->min_cpu_freq) / MHZ;
        max_freq_mhz = rtc_clk_cpu_freq_value(config->max_cpu_freq) / MHZ;
#pragma GCC diagnostic pop
    }

    if (min_freq_mhz > max_freq_mhz) {
        return ESP_ERR_INVALID_ARG;
    }

    rtc_cpu_freq_config_t freq_config;
    if (!rtc_clk_cpu_freq_mhz_to_config(min_freq_mhz, &freq_config)) {
        ESP_LOGW(TAG, "invalid min_freq_mhz value (%d)", min_freq_mhz);
        return ESP_ERR_INVALID_ARG;
    }

    int xtal_freq_mhz = (int) rtc_clk_xtal_freq_get();
    if (min_freq_mhz < xtal_freq_mhz && min_freq_mhz * MHZ / REF_CLK_FREQ < REF_CLK_DIV_MIN) {
        ESP_LOGW(TAG, "min_freq_mhz should be >= %d", REF_CLK_FREQ * REF_CLK_DIV_MIN / MHZ);
        return ESP_ERR_INVALID_ARG;
    }

    if (!rtc_clk_cpu_freq_mhz_to_config(max_freq_mhz, &freq_config)) {
        ESP_LOGW(TAG, "invalid max_freq_mhz value (%d)", max_freq_mhz);
        return ESP_ERR_INVALID_ARG;
    }

    int apb_max_freq = max_freq_mhz; /* CPU frequency in APB_MAX mode */
    if (max_freq_mhz == 240) {
        /* We can't switch between 240 and 80/160 without disabling PLL,
         * so use 240MHz CPU frequency when 80MHz APB frequency is requested.
         */
        apb_max_freq = 240;
    } else if (max_freq_mhz == 160 || max_freq_mhz == 80) {
        /* Otherwise, can use 80MHz
         * CPU frequency when 80MHz APB frequency is requested.
         */
        apb_max_freq = 80;
    }

    apb_max_freq = MAX(apb_max_freq, min_freq_mhz);

    ESP_LOGI(TAG, "Frequency switching config: "
                  "CPU_MAX: %d, APB_MAX: %d, APB_MIN: %d, Light sleep: %s",
                  max_freq_mhz,
                  apb_max_freq,
                  min_freq_mhz,
                  config->light_sleep_enable ? "ENABLED" : "DISABLED");

    portENTER_CRITICAL(&s_switch_lock);
    rtc_clk_cpu_freq_mhz_to_config(max_freq_mhz, &s_cpu_freq_by_mode[PM_MODE_CPU_MAX]);
    rtc_clk_cpu_freq_mhz_to_config(apb_max_freq, &s_cpu_freq_by_mode[PM_MODE_APB_MAX]);
    rtc_clk_cpu_freq_mhz_to_config(min_freq_mhz, &s_cpu_freq_by_mode[PM_MODE_APB_MIN]);
    s_cpu_freq_by_mode[PM_MODE_LIGHT_SLEEP] = s_cpu_freq_by_mode[PM_MODE_APB_MIN];
    s_light_sleep_en = config->light_sleep_enable;
    s_config_changed = true;
    portEXIT_CRITICAL(&s_switch_lock);

    return ESP_OK;
}

static pm_mode_t IRAM_ATTR get_lowest_allowed_mode()
{
    /* TODO: optimize using ffs/clz */
    if (s_mode_mask >= BIT(PM_MODE_CPU_MAX)) {
        return PM_MODE_CPU_MAX;
    } else if (s_mode_mask >= BIT(PM_MODE_APB_MAX)) {
        return PM_MODE_APB_MAX;
    } else if (s_mode_mask >= BIT(PM_MODE_APB_MIN) || !s_light_sleep_en) {
        return PM_MODE_APB_MIN;
    } else {
        return PM_MODE_LIGHT_SLEEP;
    }
}

void IRAM_ATTR esp_pm_impl_switch_mode(pm_mode_t mode,
        pm_mode_switch_t lock_or_unlock, pm_time_t now)
{
    bool need_switch = false;
    uint32_t mode_mask = BIT(mode);
    portENTER_CRITICAL(&s_switch_lock);
    uint32_t count;
    if (lock_or_unlock == MODE_LOCK) {
        count = ++s_mode_lock_counts[mode];
    } else {
        count = s_mode_lock_counts[mode]--;
    }
    if (count == 1) {
        if (lock_or_unlock == MODE_LOCK) {
            s_mode_mask |= mode_mask;
        } else {
            s_mode_mask &= ~mode_mask;
        }
        need_switch = true;
    }

    pm_mode_t new_mode = s_mode;
    if (need_switch) {
        new_mode = get_lowest_allowed_mode();
#ifdef WITH_PROFILING
        if (s_last_mode_change_time != 0) {
            pm_time_t diff = now - s_last_mode_change_time;
            s_time_in_mode[s_mode] += diff;
        }
        s_last_mode_change_time = now;
#endif // WITH_PROFILING
    }
    portEXIT_CRITICAL(&s_switch_lock);
    if (need_switch && new_mode != s_mode) {
        do_switch(new_mode);
    }
}

/**
 * @brief Update clock dividers in esp_timer and FreeRTOS, and adjust CCOMPARE
 * values on both CPUs.
 * @param old_ticks_per_us old CPU frequency
 * @param ticks_per_us new CPU frequency
 */
static void IRAM_ATTR on_freq_update(uint32_t old_ticks_per_us, uint32_t ticks_per_us)
{
    uint32_t old_apb_ticks_per_us = MIN(old_ticks_per_us, 80);
    uint32_t apb_ticks_per_us = MIN(ticks_per_us, 80);
    /* Update APB frequency value used by the timer */
    if (old_apb_ticks_per_us != apb_ticks_per_us) {
        esp_timer_impl_update_apb_freq(apb_ticks_per_us);
    }

    /* Calculate new tick divisor */
    _xt_tick_divisor = ticks_per_us * MHZ / XT_TICK_PER_SEC;

    int core_id = xPortGetCoreID();
    if (s_rtos_lock_handle[core_id] != NULL) {
        ESP_PM_TRACE_ENTER(CCOMPARE_UPDATE, core_id);
        /* ccount_div and ccount_mul are used in esp_pm_impl_update_ccompare
         * to calculate new CCOMPARE value.
         */
        s_ccount_div = old_ticks_per_us;
        s_ccount_mul = ticks_per_us;

        /* Update CCOMPARE value on this CPU */
        update_ccompare();

#if portNUM_PROCESSORS == 2
        /* Send interrupt to the other CPU to update CCOMPARE value */
        int other_core_id = (core_id == 0) ? 1 : 0;

        s_need_update_ccompare[other_core_id] = true;
        esp_crosscore_int_send_freq_switch(other_core_id);

        int timeout = 0;
        while (s_need_update_ccompare[other_core_id]) {
            if (++timeout == CCOMPARE_UPDATE_TIMEOUT) {
                assert(false && "failed to update CCOMPARE, possible deadlock");
            }
        }
#endif // portNUM_PROCESSORS == 2

        s_ccount_mul = 0;
        s_ccount_div = 0;
        ESP_PM_TRACE_EXIT(CCOMPARE_UPDATE, core_id);
    }
}

/**
 * Perform the switch to new power mode.
 * Currently only changes the CPU frequency and adjusts clock dividers.
 * No light sleep yet.
 * @param new_mode mode to switch to
 */
static void IRAM_ATTR do_switch(pm_mode_t new_mode)
{
    const int core_id = xPortGetCoreID();

    do {
        portENTER_CRITICAL_ISR(&s_switch_lock);
        if (!s_is_switching) {
            break;
        }
        if (s_new_mode <= new_mode) {
            portEXIT_CRITICAL_ISR(&s_switch_lock);
            return;
        }
        if (s_need_update_ccompare[core_id]) {
            s_need_update_ccompare[core_id] = false;
        }
        portEXIT_CRITICAL_ISR(&s_switch_lock);
    } while (true);
    s_new_mode = new_mode;
    s_is_switching = true;
    bool config_changed = s_config_changed;
    s_config_changed = false;
    portEXIT_CRITICAL_ISR(&s_switch_lock);

    rtc_cpu_freq_config_t new_config = s_cpu_freq_by_mode[new_mode];
    rtc_cpu_freq_config_t old_config;

    if (!config_changed) {
        old_config = s_cpu_freq_by_mode[s_mode];
    } else {
        rtc_clk_cpu_freq_get_config(&old_config);
    }

    if (new_config.freq_mhz != old_config.freq_mhz) {
        uint32_t old_ticks_per_us = old_config.freq_mhz;
        uint32_t new_ticks_per_us = new_config.freq_mhz;

        bool switch_down = new_ticks_per_us < old_ticks_per_us;

        ESP_PM_TRACE_ENTER(FREQ_SWITCH, core_id);
        if (switch_down) {
            on_freq_update(old_ticks_per_us, new_ticks_per_us);
        }
        rtc_clk_cpu_freq_set_config_fast(&new_config);
        if (!switch_down) {
            on_freq_update(old_ticks_per_us, new_ticks_per_us);
        }
        ESP_PM_TRACE_EXIT(FREQ_SWITCH, core_id);
    }

    portENTER_CRITICAL_ISR(&s_switch_lock);
    s_mode = new_mode;
    s_is_switching = false;
    portEXIT_CRITICAL_ISR(&s_switch_lock);
}

/**
 * @brief Calculate new CCOMPARE value based on s_ccount_{mul,div}
 *
 * Adjusts CCOMPARE value so that the interrupt happens at the same time as it
 * would happen without the frequency change.
 * Assumes that the new_frequency = old_frequency * s_ccount_mul / s_ccount_div.
 */
static void IRAM_ATTR update_ccompare()
{
    uint32_t ccount = XTHAL_GET_CCOUNT();
    uint32_t ccompare = XTHAL_GET_CCOMPARE(XT_TIMER_INDEX);
    if ((ccompare - CCOMPARE_MIN_CYCLES_IN_FUTURE) - ccount < UINT32_MAX / 2) {
        uint32_t diff = ccompare - ccount;
        uint32_t diff_scaled = (diff * s_ccount_mul + s_ccount_div - 1) / s_ccount_div;
        if (diff_scaled < _xt_tick_divisor) {
            uint32_t new_ccompare = ccount + diff_scaled;
            XTHAL_SET_CCOMPARE(XT_TIMER_INDEX, new_ccompare);
        }
    }
}

static void IRAM_ATTR leave_idle()
{
    int core_id = xPortGetCoreID();
    if (s_core_idle[core_id]) {
        // TODO: possible optimization: raise frequency here first
        esp_pm_lock_acquire(s_rtos_lock_handle[core_id]);
        s_core_idle[core_id] = false;
    }
}

void esp_pm_impl_idle_hook()
{
    int core_id = xPortGetCoreID();
    uint32_t state = portENTER_CRITICAL_NESTED();
    if (!s_core_idle[core_id]) {
        esp_pm_lock_release(s_rtos_lock_handle[core_id]);
        s_core_idle[core_id] = true;
    }
    portEXIT_CRITICAL_NESTED(state);
    ESP_PM_TRACE_ENTER(IDLE, core_id);
}

void IRAM_ATTR esp_pm_impl_isr_hook()
{
    int core_id = xPortGetCoreID();
    ESP_PM_TRACE_ENTER(ISR_HOOK, core_id);
#if portNUM_PROCESSORS == 2
    if (s_need_update_ccompare[core_id]) {
        update_ccompare();
        s_need_update_ccompare[core_id] = false;
    } else {
        leave_idle();
    }
#else
    leave_idle();
#endif // portNUM_PROCESSORS == 2
    ESP_PM_TRACE_EXIT(ISR_HOOK, core_id);
}

void esp_pm_impl_waiti()
{
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
    int core_id = xPortGetCoreID();
    if (!s_entered_light_sleep[core_id]) {
        asm("waiti 0");
    } else {
        s_entered_light_sleep[core_id] = false;
    }
#else
    asm("waiti 0");
#endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE
}

#if CONFIG_FREERTOS_USE_TICKLESS_IDLE

void IRAM_ATTR vApplicationSleep( TickType_t xExpectedIdleTime )
{
    portENTER_CRITICAL(&s_switch_lock);
    if (s_mode == PM_MODE_LIGHT_SLEEP && !s_is_switching) {
        /* Calculate how much we can sleep */
        int64_t next_esp_timer_alarm = esp_timer_get_next_alarm();
        int64_t now = esp_timer_get_time();
        int64_t time_until_next_alarm = next_esp_timer_alarm - now;
        int64_t wakeup_delay_us = portTICK_PERIOD_MS * 1000LL * xExpectedIdleTime;
        int64_t sleep_time_us = MIN(wakeup_delay_us, time_until_next_alarm);
        if (sleep_time_us >= configEXPECTED_IDLE_TIME_BEFORE_SLEEP * portTICK_PERIOD_MS * 1000LL) {
            esp_sleep_enable_timer_wakeup(sleep_time_us - LIGHT_SLEEP_EARLY_WAKEUP_US);
#ifdef CONFIG_PM_TRACE
            /* to force tracing GPIOs to keep state */
            esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
#endif
            /* Enter sleep */
            int core_id = xPortGetCoreID();
            ESP_PM_TRACE_ENTER(SLEEP, core_id);
            int64_t sleep_start = esp_timer_get_time();
            esp_light_sleep_start();
            int64_t slept_us = esp_timer_get_time() - sleep_start;
            ESP_PM_TRACE_EXIT(SLEEP, core_id);

            uint32_t slept_ticks = slept_us / (portTICK_PERIOD_MS * 1000LL);
            if (slept_ticks > 0) {
                /* Adjust RTOS tick count based on the amount of time spent in sleep */
                vTaskStepTick(slept_ticks);

                /* Trigger tick interrupt, since sleep time was longer
                 * than portTICK_PERIOD_MS. Note that setting INTSET does not
                 * work for timer interrupt, and changing CCOMPARE would clear
                 * the interrupt flag.
                 */
                XTHAL_SET_CCOUNT(XTHAL_GET_CCOMPARE(XT_TIMER_INDEX) - 16);
                while (!(XTHAL_GET_INTERRUPT() & BIT(XT_TIMER_INTNUM))) {
                    ;
                }
            }
            s_entered_light_sleep[core_id] = true;
        }
    }
    portEXIT_CRITICAL(&s_switch_lock);
}
#endif //CONFIG_FREERTOS_USE_TICKLESS_IDLE

#ifdef WITH_PROFILING
void esp_pm_impl_dump_stats(FILE* out)
{
    pm_time_t time_in_mode[PM_MODE_COUNT];

    portENTER_CRITICAL_ISR(&s_switch_lock);
    memcpy(time_in_mode, s_time_in_mode, sizeof(time_in_mode));
    pm_time_t last_mode_change_time = s_last_mode_change_time;
    pm_mode_t cur_mode = s_mode;
    pm_time_t now = pm_get_time();
    portEXIT_CRITICAL_ISR(&s_switch_lock);

    time_in_mode[cur_mode] += now - last_mode_change_time;

    fprintf(out, "Mode stats:\n");
    for (int i = 0; i < PM_MODE_COUNT; ++i) {
        if (i == PM_MODE_LIGHT_SLEEP && !s_light_sleep_en) {
            /* don't display light sleep mode if it's not enabled */
            continue;
        }
        fprintf(out, "%8s  %3dM %12lld  %2d%%\n",
                s_mode_names[i],
                s_cpu_freq_by_mode[i].freq_mhz,
                time_in_mode[i],
                (int) (time_in_mode[i] * 100 / now));
    }
}
#endif // WITH_PROFILING

void esp_pm_impl_init()
{
#ifdef CONFIG_PM_TRACE
    esp_pm_trace_init();
#endif
    ESP_ERROR_CHECK(esp_pm_lock_create(ESP_PM_CPU_FREQ_MAX, 0, "rtos0",
            &s_rtos_lock_handle[0]));
    ESP_ERROR_CHECK(esp_pm_lock_acquire(s_rtos_lock_handle[0]));
#if portNUM_PROCESSORS == 2
    ESP_ERROR_CHECK(esp_pm_lock_create(ESP_PM_CPU_FREQ_MAX, 0, "rtos1",
            &s_rtos_lock_handle[1]));
    ESP_ERROR_CHECK(esp_pm_lock_acquire(s_rtos_lock_handle[1]));
#endif // portNUM_PROCESSORS == 2

    /* Configure all modes to use the default CPU frequency.
     * This will be modified later by a call to esp_pm_configure.
     */
    rtc_cpu_freq_config_t default_config;
    if (!rtc_clk_cpu_freq_mhz_to_config(CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ, &default_config)) {
        assert(false && "unsupported frequency");
    }
    for (size_t i = 0; i < PM_MODE_COUNT; ++i) {
        s_cpu_freq_by_mode[i] = default_config;
    }
}


Can You Manage SSH Keys in Microsoft® Active Directory®?
Home » Blog » Can You Manage SSH Keys in Microsoft® Active Directory®?
Can you manage SSH keys in Microsoft® Active Directory®? Well, we'd like to say that the short answer is yes, but it isn't nearly that simple. To modify Active Directory (MAD or AD) to be an SSH key public store takes some significant time and effort. It is possible, but painful.
In an era where AWS® and Google Cloud Platform are so popular, SSH key management has become a critical part of what an identity provider should do. IT admins and DevOps engineers either manually manage SSH access or rely on configuration management tools such as Chef, Puppet, and many others to distribute public keys. While both of these options are viable, they come with significant hassle and issues.
So, given that Active Directory is one of the more widely used identity providers, shouldn't it be able to succinctly manage SSH keys? Well, in practice, AD SSH key management is a lengthy process, with several steps requiring painstaking care from both the admin and the engineer. Managing SSH keys in AD includes extending the AD Schema, which can be a troublesome task for even the savviest of admins. The process gets even more tedious if the end user is leveraging a Mac® or Linux® workstation.
Once the SSH keys are up and running in AD, however, there are still some limitations. Ultimately, Active Directory requires admins to create scripts to facilitate their SSH key management. While they allow for complete customizability, SSH key management scripts have a checklist of considerations in order to ensure that the SSH keys being managed are properly secure and, most of all, usable. These include binding user identities to LDAP via Kerberos, leveraging the TLS protocol for key transfer, caching user keys on a per-user basis, SSH key event logging and more. When you boil it down, managing SSH keys in Active Directory can be quite the hassle.
The good news is that there is a modern approach to SSH key management that is an alternative to Active Directory. Not only can this cloud directory service be a public SSH key store, but it also can be an identity provider for the cloud era. IT admins and DevOps engineers can centralize an identity and securely manage and connect users to their IT resources.
This solution is called JumpCloud® Directory-as-a-Service®. Directory-as-a-Service (DaaS) utilizes agent-based endpoint management to create a basis for unified user identities. With regards to SSH key management, DevOps engineers can create and manage their SSH key access entirely on their own. Once they have generated their SSH key pair, they can upload the public key to their JumpCloud User Portal account. This key is then automatically disseminated across all systems they have access to that require SSH key authentication. When it's time to rotate SSH keys, the user just has to follow the same process, and the new keys are automatically dispersed to the necessary systems. Additionally, IT admins can maintain these keys remotely via the JumpCloud Admin console, and subsequently deactivate these keys at the same time of deactivating the associated user account during offboarding. This feature ensures that keys that are no longer in use remain inactive, cutting off potential attack vectors.
So, can you manage SSH keys in Active Directory? Not easily, but you can with JumpCloud Directory-as-a-Service. To learn more about Directory-as-a-Service's SSH key management, as well as a host of other features the platform offers, feel free to contact our support team or check out our YouTube channel. As always, you can sign up for JumpCloud to get the most out of the DaaS product. Signing up includes ten users forever, and is completely free.


This video was created to goes along Music for 18 musicians from Steve Reich.
It uses videos recorded from train windows, with landscapes that moves from right to left, to train a machine learning (ML) algorithm. First, it learns how to predict the next frame of the videos, by analyzing examples. Then it produces a frame from a first picture, then another frame from the one just generated, etc. The output becomes the input of the next calculation step. So, except for the initial image that I chose, all the other frames were generated by the algorithm. In other words, the process is a feedback loop made of an artificial neural network.


text:
Statistics, research and strategies
Indigenous Education Strategy
Tony's Message
Indigenous Education Strategy - Issue 16
Navigating New Pathways To Employment
Consistency The Key In Arlparra
Transition Camp Builds On Strength
New Skin Group Uniforms At Lajamanu
Learning On Country At Bawaka
Families as first teachers recognised
Sky Is The Limit For Stars
I am pleased to report that negotiations to secure Federal Government funding are nearing completion and that planning for Stage Two of the 10 year Indigenous Education Strategy is now well underway.
Planning will be driven by the results of external performance evaluations and the feedback many of you provided throughout the consultation process.
This feedback will enable the continuous improvement of programs being delivered in Stage Two - so I thank everyone who took the time to make a contribution.
Recently, we have been working with schools in relation to their trainers and we met with teaching principals in Alice Springs to identify ways of making our programs even more effective in those schools.
It was particularly pleasing to see Employment Pathways tracking so far ahead of schedule and to hear everyone's suggestions to drive its continued success.
As the end of the year rapidly approaches, we expect to see a number of substantial projects reaching major milestones.
The Social and Emotional Learning Curriculum is now in the final stages of proofing and an online edition will be made available to schools in early 2018.
The Indigenous Language and Culture Curriculum is also nearing completion.
The new curriculum comprises four different language pathways that reflect the diversity of students in the NT. From first language pathways for students using Aboriginal language in everyday communication, to second language and language revival pathways where students are learning and further developing proficiency, through to language and cultural awareness pathways to help students enhance their general understanding and appreciation of an Aboriginal language and associated culture.
Finally, I take great pleasure in sharing with you some of the stories and experiences we have seen unfold in this latest edition of the newsletter.
If you would like further information about anything in this newsletter please contact ierinews.doe@nt.gov.au
Tony Considine, General Manager Indigenous Education Review Implementation
Print all pages in this section
URL: https://education.nt.gov.au/statistics-research-and-strategies/indigenous-education-strategy/indigenous-education-strategy-issue-16/tonys-message

redpajama_set_name: RedPajamaCommonCrawl


I have two friends that have crashed in the last couple of weeks. I wrote this post last year when I took a spill out on the trace.
No one likes to talk about crashing on the bike. It happens. You need to be prepared. When you are hurt and limping around you don't want to have to go to the store and find the stuff you need.
I have been wanting to write about what to have on hand but you just don't do that without being prompted. Someone, somewhere would crash and I would be blamed for the bad mojo.
First, if you are hurt beyond superficial cuts, scraps, bumps or bruises please seek medical attention. Play it smart.
You have that horrible sound of metal and carbon hitting the pavement stuck in your head. You just had a tumble on the bike and you have some bumps and bruises and probably some road rash.
1. Road Rash – Abrasion (How to treat) - The first thing that you need to do is print out this pdf. Next read it. Put it in you medicine cabinet. Do it right now, I'll wait. There, you are already more prepared than before. I feel better.
2. Acetaminophen / Ibuprofen (Tylenol, Advil) - You probably have this on hand. It is a pain reliever / fever reducer. You do not want to use aspirin in this case because of the blood thinning qualities. Take only the recommended doses.
3. Pain-relief cream (aspercreme) – You rub this into the bumps and bruises. It will take away the pain. Even better if you know a PT and can get the acetaminophen pain relief cream (prescription). DO NOT RUB THIS INTO ROAD RASH!
4. Topical Antibiotics (Neosporin) – After cleaning the wounds and abrading rash you want to goop up the area liberally with the antibiotic cream. And I do mean liberally.
5. 2nd Skin type breathable Gauze (Adaptic, duoderm, tegaderm) – This is a breathable gauze to drape over your road rash. Buy this stuff online. It is much cheaper online and you don't want to be wandering around a CVS late on a Sunday night. It can be very difficult to find locally. I got lucky a while back and found several boxes of the following on clearance.
2nd Skin type breathable gauze.
6. Ice packs – This will help with the swelling. You can use anything that you want – frozen peas, plastic ice bags, etc. I found the following a few years back. I bought 4 sheets. That way I can have two in the freezer while I have two on my body. They thaw pretty quick so I rotate often. These ice sheets will conform to just about any body part.
7. New helmet – Even if the helmet looks brand new, YOU MUST REPLACE IT. They are designed to take one impact, that's it, nothing more. My most recent crash sent me head first into the pavement. I had a palm sized red area on my forehead and the top of my head. The helmet spread the impact over a wide area and saved my noggin. I have no doubt that I would have received some form of brain trauma if I had not been wearing a helmet (and wearing said helmet correctly but that is for another post).
I am an opportunist. I buy things when they are on sale and don't necessary wait until I need them. I found this helmet a couple of months ago for a very good deal (with coupon and free shipping). I have kept the new helmet in a dark closet since I got it – they do have a shelf life. However, I am glad I have the helmet on hand. I will not ride my bike without one. I have cracked two helmets in the past 4 years. Better to crack a helmet than my head.
Bike crashes happen. Be prepared. Stock the medicine cabinet today.


Aya Sofya (Sancta Sophia) at night.
Offering some of the world's most iconic sights, best museums and superb cuisines, Europe is always an attractive and exciting destination, though overpriced hotels, extortionate entry fees and eye-wateringly priced restaurants in many parts of the continent can make travel here feel less than a bargain at times. Below we give you our tips for the best value destinations in the continent that has it all – whether it's a city break with style or an extreme sports adventure, these are the places to go in Europe to get the best travel experiences for your money in 2013.
It's perhaps worth noting that old fallacy that the Chinese word for 'crisis' is the same as that for 'opportunity.' While Greece's economic miseries may continue, there's never been a better time to island hop, with perceived instability deterring many regular visitors. As a result Greece's normally packed beaches will be far quieter than usual this summer, more welcoming than ever and island economies are likely to be far cheaper especially if you travel outside of peak season. Some of our favourite spots include Hydra, Kefallonia, Ikaria and Santorini.
Fortifications protecting small port of Hydra island. Photo by Mariusz Kluzniak / Getty Images.
In the charming and dramatically hilly Portuguese capital of Lisbon your money goes a long way: delicious coffee or a pastel de nata (traditional custard tart) in the sun tend to cost less than a euro, and you can eat well and ride around town on the rickety but romantic network of old trams for similarly bargain prices. Free museums such as the contemporary collection of the Museu Colecção Berardo are further deal sweeteners – and there are always the beaches to the south of the city to enjoy on a day trip if you tire of the city's plentiful urban pursuits.
The rooftops of Lisbon. Photo by Tom Masters / Lonely Planet.
It may never become a true budget destination, but Iceland is cheaper that it has been in a decade following several economically tumultuous years and a currency devaluation that suddenly made its once outrageous prices far more reasonable. This makes now a superb time to discover this stunning North Atlantic island where volcanoes, geysers, glaciers and hot springs create one of the planet's most exciting landscapes. For those on a very tight budget, wild camping is allowed across Iceland and is a great hotel alternative for those that don't mind roughing it.
Strokkur (the Churn), Geysir, Golden Circle, Iceland. Photo by Peter Adams / Getty Images.
Surprisingly, Berlin, the capital of Europe's largest economy is also one of its cheapest cities. And what a city: where else can you see Cold War and WWII relics in the flesh, enjoy a selection of some of Europe's best contemporary art and shopping before dining on traditional German food with a modern twist and then spending a pittance as you bar hop between some of the coolest and most fun bars and clubs on the planet? What's more, mid-range accommodation is at rock bottom prices here, just a fraction of what you'll pay in cities of similar stature such as London, Paris or Rome.
Berlin mural. Photo by Tom Masters / Lonely Planet.
Where? Few people can place the treeless Danish-ruled Faroe Islands approximately halfway between Scotland and Iceland, and that's a shame as the 18 extraordinary-looking volcanic creations that soar out of the Atlantic offer some of Europe's best-value hiking and bird watching. With the Danish government generously subsidising the helicopters and boats that function like buses between the islands, you can zip about very affordably and enjoy world-class walking without seeing so much as another soul. Accommodation is in surprisingly comfortable hostels and increasingly popular homestays arranged by the tourist board.
Hiking the Faroe Islands. Photo by Tom Masters / Lonely Planet.


text:
Are we too clean?
Photo: pfly via FlickrDearests, with yesterday's Clorox wipes letter on my mind, I was intrigued to read the following headline in today's Wall Street Journal: Can Dirt Do a Little Good? The story talks about the new film Babies, a Focus feature following the first year of life for four babies living in Namibia, Mongolia, […]
Ask Umbra®
Climate + Culture
Photo: pfly via FlickrDearests, with yesterday's Clorox wipes letter on my mind, I was intrigued to read the following headline in today's Wall Street Journal: Can Dirt Do a Little Good?
The story talks about the new film Babies, a Focus feature following the first year of life for four babies living in Namibia, Mongolia, Tokyo, and San Francisco, and the varying standards of hygiene in these kids' lives. The flick doesn't even mention hygiene, per se, but it brings up an interesting question, as posed by the WSJ piece and seemingly enforced by the reader question about overcleaning in yesterday's column: Are we too clean?
On a small family farm in Mongolia, a rooster struts around little Bayar's bed, a goat drinks from his bathwater and livestock serve as babysitters.
By contrast, Mari, growing up in high-rise, high-tech Tokyo, and Hattie, whose doting parents live a "green" lifestyle in San Francisco, both have modern conveniences and sanitation.
Statistically, Mari and Hattie are healthier. Some 42 out of 1,000 children in Namibia, and 41 out of 1,000 in Mongolia die before their 5th birthday; compared with only 8 in 1,000 in the U.S. and only 4 in Japan.
Yet the upscale urban infants are at higher risk for some health problems—including allergies, asthma and autoimmune diseases like Type 1 diabetes, multiple sclerosis and inflammatory bowel disease—than the babies in the rural developing world.
Obviously, we in the developed world get the way better deal—allergies instead of a far-too-early demise—but is our obsession with cleanliness (Clorox wipes, hand sanitizers, antibacterial soap, etc.) what's causing an increase in allergies and autoimmune diseases? This article raises some compelling questions.
But during the regular flu season (or the swine flu craze of '09/'10), you'd be hard pressed to find someone without hand sanitizer at the ready or sneezing into their elbows like the CDC taught us. And with good reason, as these illnesses are highly contagious. However, I think we may have taken our anal-retentive nature too far.
Many experts advise common sense. "We don't want to say to children, 'OK, play by the dirty river bank and catch whatever you can,'" says Dr. [Joel] Weinstock, [chief of gastroenterology/heptology at Tufts Medical Center in Boston]. "But we can say there's nothing wrong with kids playing in the dirt. They don't have to live in total sanitation, and they won't die from eating something off the floor. It's probably more healthy than not."
Excuse me while I go after the grape I dropped at lunch.
Obama's ocean chief dismisses loop current threat: 'Very little tarballs!'
Brad Johnson Politics
Amazon's 'The Rig' brings new energy to old eco terrors
John McCracken
In this Swedish bestseller, a young Sámi woman fights for survival
'Alcarrás' review: In a new Spanish film, solar power threatens a family farm
Lylla Younes
Climate activists' new, confrontational tactics aren't popular. That's kind of the point.


Wonderful and beneficial product in gold.
Originally I wasn't going to order a miter, but so pleased with doing so. The fit is perfect and the material and embroidery absolutely matches the coordinating cope. The detail and structure are superb. Definitely would recommend this to others.


text:
HostelShelter for Gasienicowa
Shelter for Gasienicowa
Czarny Staw Gąsienicowy (północ)
Królowa Rówień
czarnyin the direction of:
Psia Trawka (Dolina Suchej Wody)
żółtyin the direction of:
Dolina Pańszczyca
Wolarczyska
Kolej Gąsienicowa
PTTK shelter "Murowaniec" on Gasienicowa - lodge in the mountains at an altitude of 1500 m above sea level, Gasienicowa. Was built between 1921-1925 by the Polish Tatra Society. After a fire in 1964 it was rebuilt. It has 120 beds in 3 -, 4 -, 5 -, 8 - and 10-passenger. It is managed by the Polish Tourist Country-Lovers.
"Murowaniec" staged in the years 1921-1925 Warsaw Branch of the PTT, mainly thanks to the efforts of the President Stanislaw Osiecki (plaque, 1969). The first sketches of buildings "with a large boulder nieobrabianych outside" outlined in the spring of 1914, architect John Koszczyc Witkiewicz, authors of the final draft were Zdzislaw Siciński Kalinowski and Charles. The construction of a lot of effort put three climbing Company Podhale Rifle Regiment. From 1923 to build shelters, the majority were 5 Engineer Regiment based in Krakow (the Kosciuszko Mound) and 1 Railway Engineer Regiment also from Krakow.
Opened by July 12, 1925 President of Poland, Stanisław Wojciechowski in the presence of the Speaker of the Senate and General Wojciech Trąmpczyńskiego Zaruskiego Marius. In 1950-51 was built west. wings and converted interior, increasing the facility to its present size. In 1963, the lodge burned down in part, and was rebuilt (by the way, without the famous room in the attic, called the "coffin"). The head of the site is from 1983 and TOPR Mountain Rescue lifeguard, Andrew Kusion who leads in recent years, the modernization of the object.
At the entrance to the shelter hangs a tablet in memory of Adam Asnyka, built in 1929, unveiled in 1930. The project of 1927 provided wkucie her one of the rocks above the Sea Eye.
Curious about the shelter is to put in a staircase balustrade marks the swastika, called by the Highlanders' cross the unexpected. " It was also a favorite symbol of Mieczyslaw Karlowicz and Valery Elijah-Radzikowskiego.
http://www.murowaniec.pttk.pl


I had a weird dream last night. In the dream, I owned or ran a "weird Austin blog." Basically, I would ride around Austin in a bike or in my car looking for weird "Austin" things to photograph and to write about.
I was going to photograph a guy that had a weird business that was able to exist because the City of Austin passed an ordinance that made it technically legal to piss in the street as long as you were being towed in a cage like structure. So this dude built a cage with hexagonal doors so that people could stand inside and pee while being driven around town.
This guy would drive around 6th street on the weekends or during festivals etc. and people would pay him a few bucks to get towed around so they could pee in the street.
I was there, not just to photograph the carrier, but also to talk about the controversy generated by it being a standing room only contraption. There were some women that were upset that they could not use the "porta-pisser" unless they could pee standing up.
After much deliberation, it turns out that the city wrote the ordinance in such a way that having seating in the apparatus that was going to be towed would make the contraption illegal. There was no way around it. If a woman wanted to use the contraption, she had to pee standing up.
They compromised by making a Shewee type device available for women to use so they could use the porta pisser too. Everyone left the meeting happy, and I got my photograph and story for the blog.
Yeah, I have weird dreams from time to time.


text:
Q: Any chance using input$radio button as argument in group_by I have tried to use radio button as an argument in group_by. Since I'm new to Shiny with no JS script background so quite being blind in render/output. and how to adapt with normal R-code.
Please show me some useful document/example in applying input to normal R-code
(not as simple as what's shown in shiny- widget gallery)
dat <- read_csv("VN_MAT as of 202001.csv")
datasetInput <- reactive({
switch(input$radio3,
       "A" = "PROD_MANUFACTURER, PROD_BRAND, MKT_SDESC",
       "B" = "PROD_MANUFACTURER, PROD_LDESC, MKT_SDESC" )
})
dat_brand <- reactive({
dat %>%
data.frame() %>%
group_by(datasetInput()) %>%
summarise(PER_MAT.TY = round(sum(PER_MAT.TY),digit = 2), PER_MAT.YA = round(sum(PER_MAT.YA), digit
=2)) %>%
arrange(MKT_SDESC) %>%
data.frame() %>%
add_count(MKT_SDESC, wt = PER_MAT.TY) %>%
mutate("VALUE_SHARE_TY" = round(PER_MAT.TY/n, digit = 4)) %>%
select(-n) %>%
add_count(MKT_SDESC, wt = PER_MAT.YA) %>%
mutate("VALUE_SHARE_LY" = round(PER_MAT.YA/n, digit = 4)) %>%
select(-n) %>%
mutate("DIFF_SHARE_YA" = round(VALUE_SHARE_TY - VALUE_SHARE_LY, digit = 4)) %>%
mutate("VALUE_GROWTH" = round(PER_MAT.TY/PER_MAT.YA - 1, digit =4))
})

A: After trial & error, I can figure out the answer as following code
I have overcome it with using if + choice of code
server <- function(input, output, session){
library(shiny)
library(ggplot2)
library(tidyverse)
Principal <- c("a","a","a","a","b","b","b","b","c","c")
Value <- as.numeric(c(4,1,1,3,4,2,2,3,2,1))
g <- c("t1","t1","t1","t1","t1","t2","t2","t2","t2","t2")
b <- as.numeric(c(4,1,1,3,4,2,2,3,2,1))
df <- data.frame(Principal,Value,g,b)
output$plot <- renderPlot({
if(input$radio1 == 1){
df%>%
group_by(g,b) %>%
summarize(total = sum(Value)) %>%
ggplot(aes(x = total, y = b))+
geom_point()
}else{
df%>%
group_by(Principal,b) %>%
summarize(total = sum(Value)) %>%
ggplot(aes(x = total, y = b))+
geom_point()}
})
}
ui <- basicPage(
radioButtons(
inputId = "radio1",
label = "Radio1",
choices = c(1, 2)
),
plotOutput("plot")
)
shinyApp(ui = ui, server = server)

redpajama_set_name: RedPajamaStackExchange


text:
Cyprus Excluded from the Russian Black List of Offshore Zones
Cyprus out of Russian Black List
Cyprus Excluded from the Russian Black List of Offshore Zones; Russia has ratified its Pending Double Tax Treaty with Cyprus last March, which removes the country from being included in its Black List of Offshore Zones. With this settled, it is expected that Cyprus will further attract more Russian nationals to consider investing in the island after attractive tax rates has been approved by both parties of the region. This is expected to gain effect on January 2013; thus, a few more days allocated for investors to study its beneficial effects on their business international tax planning strategies.
One of the reasons for the delay of the ratification of the Treaty is related to disputes concerning the restrictive clauses on the disclosure of information associated with their investors. Fortunately, the OECD Model Tax Convention on Income and Capital's Article 26 or the Article on the Exchange of Information assisted both countries in resolving this matter. According to the Article, fishing enquiries that will cause harm to the state, investor, or anyone protected by the state of law under their jurisdiction is to be prevented by stressing the absolute necessity to hand over information if and only if detailed prior knowledge pertaining to the requested information can be proved by the requesting body. Otherwise, no one can force the state to obtain this information may it be for investigative purposes. This protects the Right to Privacy of any individual, which is in accordance with the International Humanitarian Rights upheld and supported by the United Nations. Moreover, this allows the pursuance of tax incentives to Russian Nationals who were long interested to enjoy the many benefits the Cypriot Government has prepared for them.
The DTT states that zero profit tax rate would be applied to the dividends of non-Cypriot residents, which includes Russian companies not registered under Cyprus laws, as long as it owns no more than 50% of the Cyprus shares for the past 365 days. Nevertheless, a tax rate of 10% is to be applied to direct investments of less than EUR 100,000; 5% if it is more than EUR 100,000, and a zero percent tax rate on royalties and interests. Furthermore, dividends are to be distinguished from mutual funds and collective investment vehicles. Tax rate on this type of investment is to be calculated using the normal withholding tax rates except for real estate investment funds that receives revenue from immovable properties.
Interest and Royalty Rate
Interest that has been classified by the Russian tax authorities as dividends will be taxed according to the above mentioned rules of calculation. In any case, other types of interests and royalties will enjoy a zero percent rate. This would include income gained from debt claims but will not cover penalty charges for late payment that has been classified as dividends.
Limitation of Treaty Benefits
These benefits are to be gained only by companies that have been incorporate inRussia or Cyprus and does not apply to tax residents of Cyprus or Russia, unless otherwise granted rights by the tax authorities of the countries.
Definition of Permanent Establishment
A structure or enterprise is only to be classified as a permanent establishment if and only representatives offering services under the jurisdiction of the company has performed duties and obligations in its territory for more than 183 days within a 12 month period.
Income from Immovable Property and International Traffic
Real estate investment trusts or funds organized under the jurisdiction of Russian Laws are to be taxed in the country where the said property is located. Said income would then be referred to as Income from Immovable Property. The same will be applied to income gained from international traffic. The country where management of the said transaction took place will be given the right to earn taxes gained from it.
Moreover, in cases wherein it is hard to discern the residency of a particular company; Russia and Cyprus should enter into a mutual agreement before proceeding with the tax rates to be applied on these companies.


The IP address 164.215.39.203 is not blacklisted by trusted security services such as Spamhaus and StopForumSpam. The IP address should be safe and it should not be involved in spamming activities or malware incidents. It is important for an online shop to host the website in a dedicated server to reduce the risks of being infected like it may happen in a shared hosting, with many websites hosted in the same server.
The domain name seems to be configured to use name servers (NS) that are located in Finland, Netherlands the. This information should be useful to have more details regarding the list of possible countries that are associated with the website owner, with the website location and are also useful to identify from where is potentially operating the website.


text:
Aleksander Dobrzański (??? – 15. září 1866 Jurowce) byl rakouský řeckokatolický duchovní a politik polské národnosti z Haliče, během revolučního roku 1848 poslanec Říšského sněmu, v 60. letech 19. století poslanec rakouské Říšské rady.

Biografie
Během revolučního roku 1848 se zapojil do veřejného dění. Ve volbách roku 1848 byl zvolen na ústavodárný Říšský sněm. Zastupoval volební obvod Sanok. Profesí se tehdy uváděl coby řeckokatolický farář. Patřil k sněmovní levici.

V 60. letech se s obnovou ústavního systému vlády zapojil opět do vysoké politiky. V zemských volbách byl zvolen na Haličský zemský sněm, kde zastupoval kurii velkostatkářskou. Zemským poslancem byl až do své smrti roku 1866. Působil také coby poslanec Říšské rady (celostátního parlamentu Rakouského císařství), kam ho delegoval Haličský zemský sněm roku 1861 (Říšská rada tehdy ještě byla volena nepřímo, coby sbor delegátů zemských sněmů). V restříku poslanců pro zasedání Říšské rady od roku 1864 se již neuvádí. V době svého působení ve vídeňském parlamentu byl uveden jako rytíř Alexander von Dobrzanski, řeckokatolický farář v obci Jurowce. Ačkoliv pocházel z řeckokatolické komunity, hlásil se k Polákům a na Říšské radě i zemském sněmu patřil do polského bloku.

Zemřel v září 1866.

Odkazy

Reference

Polští řeckokatoličtí kněží
Ukrajinští řeckokatoličtí duchovní
Polští šlechtici
Rakouští šlechtici
Poslanci Říšského sněmu (Rakouské císařství)
Poslanci rakouské Říšské rady
Poslanci haličského zemského sněmu
Politici Rakouského císařství polské národnosti
Osoby s nejistým datem narození
Úmrtí v roce 1866
Úmrtí 15. září
Muži

redpajama_set_name: RedPajamaWikipedia


Our development depends on the advanced equipment, excellent talents and continuously strengthened technology for Hand Crank Small Manual Ice Crusher , Portable Manual Ice Crusher , Home Portable Manual Ice Crusher , We're devoted to supply skilled purification technology and options for you personally!
We insist on offering good quality generation with very good business enterprise concept, honest income as well as best and fast assistance. it will bring you not only the premium quality product or service and huge profit, but probably the most significant is usually to occupy the endless market for Hand Crank Small Manual Ice Crusher , Portable Manual Ice Crusher , Home Portable Manual Ice Crusher , We warmly welcome domestic and overseas customers to visit our company and have business talk. Our company always insists on the principle of "good quality reasonable price the first-class service". We have been willing to build long-term friendly and mutually beneficial cooperation with you.


text:
using System;
using System.Text.RegularExpressions;
using NUnit.Framework;

namespace DocoptNet.Tests
{
    [TestFixture]
    public class GenerateCodeTests
    {
        [Test]
        public void Should_generate_code()
        {
            // TODO: not a very useful test, more of a sanity check

            const string USAGE = @"Test host app for T4 Docopt.NET

Usage:
  prog command ARG <myarg> [OPTIONALARG] [-o -s=<arg> --long=ARG --switch]
  prog files FILE...

Options:
 -o           Short switch.
 -s=<arg>     Short option with arg.
 --long=ARG   Long option with arg.
 --switch     Long switch.

Explanation:
 This is a test usage file.
";
            const string expected = @"
public bool CmdCommand { get { return _args[""command""].IsTrue; } }
public string ArgArg { get { return _args[""ARG""].ToString(); } }
public string ArgMyarg  { get { return _args[""<myarg>""].ToString(); } }
public string ArgOptionalarg { get { return _args[""OPTIONALARG""].ToString(); } }
public bool OptO { get { return _args[""-o""].IsTrue; } }
public string OptS { get { return _args[""-s""].ToString(); } }
public string OptLong { get { return _args[""--long""].ToString(); } }
public bool OptSwitch { get { return _args[""--switch""].IsTrue; } }
public bool CmdFiles { get { return _args[""files""].IsTrue; } }
public ArrayList ArgFile { get { return _args[""FILE""].AsList; } }
";
            var s = new Docopt().GenerateCode(USAGE);
            Assert.AreEqual(NormalizeNewLines(expected), NormalizeNewLines(s));
        }

        private static string NormalizeNewLines(string s)
        {
            return string.Join(Environment.NewLine, s.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
        }

        [Test]
        public void Short_and_long_option_lead_to_only_one_property()
        {
            const string usage = @"Usage:
  naval_fate -h | --help

Options:
  -h --help     Show this screen.";

            var generatedCode = new Docopt().GenerateCode(usage);

            Assert.AreEqual(1, Regex.Matches(generatedCode, "OptHelp").Count);
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
Q: Python Windows cannot stat files with invalid characters I'm trying to make a quick Python script to rename a bunch of files. These files were made in a Linux system on this NTFS drive, but I'm now on Windows. The naming convention looks like this:
Screenshot at 2016-12-11 21:12:56.png

The : character is illegal in Windows filenames, so the behaviour of this script is a little strange to me.
for i in os.listdir("."):
    print(i)
    x = i.replace(":", "-")
    comm = """mv "{}" "{}" """.format(i, x)
    os.system(comm)

In the above code, the print(i) prints the filenames happily. However when I try to run os.system(comm) to rename my files, I get this error:
mv: cannot stat 'Screenshot at 2016-12-24 14:54:57.png': No such file or directory

Firstly, I find it a little strange that Python under Windows can tell that these naughty files exist, but isn't able to actually move them. Secondly, what's the best way to get around this issue?
I've also tried shutil.move() and os.rename() with no luck. This SO question seems to discuss the issue, but seems more concerned with prevention than fixing it. I could obviously switch back to Linux and fix it, but I'm wondering if I can't fix it on Windows.

A: You can find them because they're in the directory. You can't access them, because the colon symbol is parsed differently in a path. This means the files cannot be reached by common path functions including MoveFile. You basically have two options: finding a method that doesn't rely on the name, like OpenFileById, or finding an alternate name for the file, like dir /x. The latter gets you the short name (8.3), which should not contain any colons. I don't know if there's a ready function to access those names from Python, so the shortest clear (to me) workaround is executing dir /x and parsing its output.
I think paths relative to directory descriptors is as close as Python's standard library gets to the first method, but I don't know if it would be enough. The underlying FindFirstFile/FindNextFile functions do produce both names in WIN32_FIND_DATA (cFileName and cAlternateFileName), but Python expects the first one to be valid. Either method would also have made sense in PowerShell, but it looks like it is wholly unaware of short names and also tracks files by name, not IDs. Otherwise FileInfo.MoveTo would've done the trick neatly.
To prevent this situation in the first place, ntfs-3g supports a windows_names option. This causes it to balk when trying to create the files.
Conclusion: as discussed in https://superuser.com/questions/31587/how-to-force-windows-to-rename-a-file-with-a-special-character there is no clear solution. All of my attempted methods (and a handful others) have been discussed there. Probably the least messy option is to mount the disk in Linux again and rename from there; the filesystem is technically corrupt because the characters are invalid, but Microsoft's repair solution is deletion, not renaming.
Cygwin merely emulated the colon by using a private unicode character (':'+0xf000).


The Regional Universities Network (RUN) welcomed today's announcement that the Morrison Government will offer scholarships to tertiary domestic and international students who study at regional campuses and an extra year of temporary residency in Australia for international students who study in the regions.
The announcement formed part of the government's decentralisation strategy, and ensures regional higher education is embedded in broader regional development.
Professor Helen Bartlett, Chair of RUN, said that the network of six universities with headquarters in regional Australia was delighted with the announcement.
"In recent submissions to government reviews, RUN has advocated for more scholarships for regional and international students to encourage study at regional campuses.
"The government's announcement of 1,100 new scholarships for both domestic and international students of up to $15,000 each per year will make a real difference to the recipients.
"Financial issues are the reason many domestic regional students drop out of university, so the new scholarships will be of great assistance," Professor Bartlett said.
"International students will be attracted to study in regional Australia both by the scholarships, and by the offer of an extra year of temporary residency in Australia. The students will be able to work unlimited hours if they have studied at a regional university campus and remain in a regional location.
"This joined-up approach, which embeds initiatives for tertiary students in the Planning for Australia's Future Population broader regional development and immigration strategy, should contribute to regional economic growth.
"In fact, seven out of ten graduates from RUN universities already work in regional Australia," Professor Bartlett said.


Regis College can be found in Weston, MA, a nonprofit private college which focuses on only a select few programs offered. About a thousand students are enrolled at Regis College.
Students can submit either the ACT or SAT exam scores at Regis College. A score in the range of 1260 to 1580 on the SAT exam, or 19 to 23 on the ACT exam is among the 25th - 75th percentile range among admitted students. By applying sampled GPA data from over 150 schools, we are able to estimate that the Regis College average GPA ranges from 2.89 to 3.18 for accepted students. Regis College accepts roughly 70% of applicants per year. Of those that are accepted, around 17% attended the school. You can get more information from the admissions office website at regiscollege.edu.
The overall acceptance rate for Regis College was reported as 72.4% in Fall 2013 with over 2,160 applications submitted to Regis College. Both in state and out of state applicants are included in these figures. We do not have data on transfer acceptance rates currently.
How Hard Is It to Get into Regis College?
When determining how difficult it is for students to get into Regis College, ACT/SAT test scores and high school average GPA ranges of accepted students of previous years can help estimate the selectivity of a school.
The historical trend chart shows acceptance rates from the previous years, from which we have projected the acceptance rate for the 2019-2020 school year. The overall acceptance rate trend for Regis College has been staying about the same from year to year.
How Does Regis College Compare?
The acceptance rate for Regis College is thirty percent higher than the national average of all colleges which is around 55.5%.


text:
Nathan Stubbs
Council defers action on Greyhound
by Nathan Stubbs
At last night's meeting, the city-parish council delayed a hard decision on whether to block Greyhound Bus Lines' controversial move into a neighborhood on Moss Street. The council tabled the issue in order to allow more time for a possible compromise being negotiated by the city-parish administration, which would bring Greyhound back into plans for the yet-to-be completed Rosa Parks Transportation Center.
The deferred ordinance, by councilman Kenneth Boudreaux, repeals a zoning change that allows Greyhound's bus station (classified as a light industrial facility) to operate out of the Moss Street location. Last year, the previous city-parish council went against staff recommendations in approving the industrial zoning for Greyhound. Area residents have strongly opposed Greyhound's move into the neighborhood and have threatened to file suit over the issue of "spot" or inconsistent zoning. Greyhound has countered with its own threat of legal action if the council repeals its zoning. Read more about the issue here .
Wed, May 7, 2008, 10:45 AM


Welcome to the biggest ArmA2 CTF contest around the world!
are pleased to announce that on February 01, 2010 will start the second season of the in CTF mode.
The novelty of this year is that teams will fight 6vs6 and each team may register a maximum of 9 players.
1st place* 35% discount for new hires , during 1 month a free 20 slots VOIP voice chat Mumble and a special gamer edition for each team member.
2nd place* 25% discount for new hires and during 1 month a free 15 slots VOIP voice chat Mumble.
3rd place* 15% discount for new hires and during 1 month a free 12 slots VOIP voice chat Mumble.
For more information please visit our or contact our Staff. Sign up now and after the January 15th, 2010!
Due to the success of the current APL league, I think there is room for another competition.
However, the success of this league depends not on the sponsors and their prizes, but the amount of community involvement.
My involvement highly depends on real life activities that have consumed my would-be play time. I am interested in seeing the maps this league has to offer.
I wish success for this league and their administrators.


1. I started a pay day-based budget.
I started my budget by listing my monthly expenses from highest to lowest and noting the due dates, if applicable. Then I listed my paycheck amounts (two per month from my full-time job, and two for my regular side hustle), and my pay dates. The rest was a matter of playing around with the numbers so that I assigned expenses to be paid out of each paycheck, being sure to leave a little slush from each for my unbudgeted expenses. When I was done, I calculated that 80% of my income goes toward debt reduction and savings (because I'm aggressively paying off debt right now), and I live on the remaining 20%.
2. I made myself a "budgeted savings" system.
One of the line items that comes out of my first paycheck of the month is what I call my "budgeted savings." My "budgeted savings" is the money I set aside for things that I know I'll need to spend money on, but that are treated differently than monthly expenses. For example, this would be things like medical and veterinary expenses, automotive repairs and maintenance, attending weddings and baby showers, etc. I use my bank credit card to make any purchases that fall into my "budget savings" categories. At the end of the month, I transfer money straight from the "budgeted savings" account to pay off the credit card in full. My credit card earns cash rewards, which I have set up to automatically deposit into this savings account.
3. I gave my accounts nicknames.
I've always done a lot with online banking and now I check my accounts daily, so I took advantage of the "nickname" feature for my different accounts. My checking account became Minimum $500! Checking, because I wanted a constant reminder that I should always keep a $500 buffer in my checking account. No more overdrafts! This is also when I made my Budgeted Savings account, and I named my credit card Budgeted CC to remind myself that the credit card is not for emergencies, but for those planned, budgeted expenses that will get paid out of my Budgeted Savings account each month.
4. I got a high-yield savings account.
Paying off my debt is incredibly important to me, but so is saving for a down payment to buy property, and for that, I wanted a high-yield savings account. I did my research on NerdWallet to compare my options, and I settled on a Barclay Dream account. The regular interest rate is competitive (1.5%), but what I really love about the account is that it rewards good savings habits. If I make a deposit every month for six months, I get a retroactive 2.5% interest on that money.
While my plan is to use the money to buy property, the account also serves as my emergency fund. When I do buy property, I will leave at least three months (but hopefully closer to six months) worth of expenses in the account as my emergency fund. After I buy my property, I plan to keep depositing faithfully every month into this account to maintain it.
5. I made spreadsheets galore.
In addition to tracking my monthly budget and my savings, I have a couple of other Excel workbooks that track aspects of my financial well-being. One has pages for each of my debts so I can easily track my remaining balance and estimate when the debt will be paid off. If I make an extra payment, I record it as the last payment, so that I can clearly see that I've shaved off a month of my debt-elimination journey (time is money!). I have another workbook in which I record all my secondary income, using all the data from my paystubs, so that I can see at a glance how much I'm banking from each side hustle.
6. I started using a spending tracker app.
Once all my set expenses were accounted for, I realized I needed to get a better sense of where the rest of my money was going. I chose to download a spending tracker app, and now I manually have to enter my expenses, and sometimes the mere thought of having to log an expense keeps me from making a purchase. I made a whole list of highly-specific spending categories (snacks is separate from groceries, for instance), and my app gives me a detailed map of my spending habits.
7. I created Money Rules of the Month.
Last but not least, I use data from my spending tracker, as well as inspiration from TFD articles and other sources, to create a set of Money Rules of the Month. Some are consistent month to month, such as making the last week of the month a "no-spend week." Some rules come and go as needed, such as setting limits on particular spending categories based on trends observed from my spending tracker app.
In my experience, I need to be actively paying attention to my finances on multiple fronts in order to have the best opportunity to successfully meet my goals. I quickly found that if I slack at entering my purchases in the spending tracker, or don't record my "budgeted savings" expenses, my spending gets out of control FAST. All of these systems may seem like overkill, but they help immensely to remind me of the diligence needed to reach my goals.


text:
Why Xen Project?
Automotive / Embedded
The Hypervisor (x86 & ARM)
Windows PV Drivers
Mirage OS
HVMI
Xen Project Archives
Community Jobs
twitter facebook linkedin youtube stackexchange
Xen Project 4.4.3 Maintenance Release is Available
By Lars KurthAugust 25, 2015March 4th, 2019Announcements
I am pleased to announce the release of Xen 4.4.3. We recommend that all users of the 4.4 stable series update to this latest maintenance release.
Xen 4.4.3 is available immediately from its git repository:
xenbits.xenproject.org/gitweb/?p=xen.git;a=shortlog;h=refs/heads/stable-4.4
(tag RELEASE-4.4.3)
or from the Xen Project download page at www.xenproject.org/downloads/xen-archives/xen-44-series/xen-443.html.
This release contains many bug fixes and improvements. For example:
A number of bug fixes that affected libvirt, in particular when used with OpenStack (this release contains all changes that we use in the Xen Project OpenStack CI loop; also see related OpenStack news, Latest News on Xen Support in libvirt & Xen and OpenStack);
Stability improvements to CPUPOOL handling, in particular when used with different schedulers;
Stability improvements to EFI support on some x86 platforms;
Security fixes since the release of Xen 4.4.2
For a complete list of changes in this release, please check lists of changes on the download page.
Archives Select Month December 2022 March 2022 December 2021 September 2021 August 2021 June 2021 May 2021 April 2021 March 2021 February 2021 December 2020 November 2020 October 2020 September 2020 August 2020 July 2020 May 2020 March 2020 February 2020 January 2020 December 2019 November 2019 October 2019 September 2019 July 2019 May 2019 April 2019 March 2019 February 2019 January 2019 December 2018 October 2018 September 2018 August 2018 July 2018 June 2018 May 2018 April 2018 March 2018 February 2018 January 2018 December 2017 November 2017 October 2017 September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008
Commentary 20
HowTo 10
Press Releases 35
Technical 18
User Story 31
Xen Summit 3
AnnouncementsPress ReleasesReleases
Xen Project Releases Version 4.17 with Enhanced Security, Higher Performance, Improved Embedded Static Configuration and Speculative Mitigation Support
George DunlapDecember 14, 2022
MirageOS Announces Latest Release v4.0, dedicated to Lars Kurth
George DunlapMarch 30, 2022
XEN PROJECT SHIPS VERSION 4.16 WITH FOCUS ON IMPROVED PERFORMANCE SECURITY AND HARDWARE SUPPORT
Roger Pau MonneDecember 2, 2021
About The Xen Project
Logos & Mascots
The Linux Foundation
Copyright © The Linux Foundation®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page. Linux is a registered trademark of Linus Torvalds. Privacy Policy and Terms of Use


text:
2 youths, 2 adults found dead in Colorado Springs home
EL PASO COUNTY, Colo. (KDVR) – Authorities say four people were found dead at the scene of a home in an incident that prompted a shelter-in-place order Saturday in a Colorado Springs neighborhood.
Two youths and two adults were found dead in a home in the 14th-century block of Pleier Drive in what police say is a homicide-suicide.
The El Paso County Sheriff's Office said about 6 p.m. 10:00 a.m., deputies were sent to the home on a report of a person at the scene who was seriously injured and in need of assistance.
Police say the inverted 911, otherwise known as a shelter-in-place or Everbridge, was dispatched when the Sheriff's Office Tactical Support Unit was asked to respond on the spot, and they collected evidence at the time. The sheriff's office says the alarm was sent without having all the details available at the time, and that was out of an abundance of caution.
The sheriff's office says there is no threat to society at this time and the investigation is underway.
Police have not identified the victims.
Anyone with information about the case is encouraged to contact 719-520-6666.
fox news denverfox31kdvr


These black and gold open roses are gorgeous, unique additions to your wedding cake decorations. This flower is absolutely my best seller, and with good reason! I make each rose by hand when you order, so they are truly a work of custom art!
These sugar flowers feature a metallic gold center that is complemented by the delicate gold edging around black petals.


text:
El Anatsui: Material Wonder
Submitted by october gallery on 7 February 2019 - 4:59pm
Exhibition Type:
How many artists:
How many exhibition works:
Thursday, 28 February 2019 to Saturday, 6 April 2019
Wednesday, 27 February 2019 -
28 February – 6 April 2019
October Gallery will mark the fortieth anniversary of its opening, in February, 1979, with an exhibition of works celebrating the force and creative vision of El Anatsui, an artist who has had a tremendous impact on the international artistic landscape. El Anatsui: Material Wonder will coincide with the largest retrospective of the artist's work to date, El Anatsui: Triumphant Scale, at the Haus der Kunst, in Munich. A significant new publication by Prestel will accompany this show. Moreover, in February 2019, TSIATSIA – searching for connection will be installed in the atrium of the Zeitz MOCAA, in Cape Town. El Anatsui won the prestigious Charles Wollaston Award when this immense work first covered the façade of the Royal Academy, in 2013.
El Anatsui is undoubtedly one of the most influential artists of the present time. Throughout his long career, El Anatsui has focused his many interests to examine a wide range of subjects. He has also explored an extraordinary range of media from cement, ceramics and tropical hardwoods in his early years, to corrugated iron, cassava graters, milk-tin lids and aluminium bottle-tops in his later installations. Today, he is best known for these mesmerising works composed of many thousands of aluminium bottle tops laboriously sewn together.
The triumphant success of these works owes much to the protean nature of the material itself, which being light and flexible yet robust, is capable of being repeatedly reshaped and re-formed. Speaking of the plastic qualities of his metallic composites, El Anatsui remembers:
"I was playing with this idea of a 'fabric' as something that's not fixed. The folds in the material have their own way of running – I don't create them – they happen naturally, by themselves. The amazing thing about working with these 'fabrics' is that each time you display one of them – it becomes an entirely new work of art."
The metal wall sculptures will also be accompanied by a series of prints made in collaboration with Factum Arte, Madrid. El Anatsui has always been fascinated by the physical history of the materials he uses and the journeys they undergo. The basic materials for his 'fabrics' are made by a team of assistants, who cut and pierce the aluminium strips on tables and smaller wooden 'flats.' After years of repetitive pricking and piercing, these wooden worktops present a scored landscape of textured relief. Using Factum Arte's cutting-edge, 3-D scanning and plate-making technologies, these scarred surfaces are translated into printing plates. Given Factum Arte's expertise in traditional printmaking, the resulting prints encapsulate the hidden histories of the making of the aluminium works. The very fabrication process itself is thereby 'recycled' into a major new series of prints by El Anatsui.
In 2014, El Anatsui was made an Honorary Royal Academician and elected into the American Academy of Arts and Sciences. In 2015, he was awarded the Golden Lion for Lifetime Achievement at the 56th Venice Biennale – All the World's Futures, and, in 2016, the University of Cape Town conferred an Honorary Doctorate upon him. In 2017, he was awarded the prestigious Praemium Imperiale Award for Sculpture. El Anatsui has been represented by October Gallery since 1993.
Exhibition: El Anatsui: Material Wonder
Dates: 28th February – 6th April 2019
Private View Wednesday, 27th February, 6.00 - 8.30pm
Venue: October Gallery, 24 Old Gloucester Street, London, WC1N 3AL
Opening hours: Tuesday – Saturday 12.30 - 5.30pm
Website: www.octobergallery.co.uk
Email: press@octobergallery.co.uk or paige@octobergallery.co.uk
Nearest tubes: Holborn/Russell Square
Buses: 19, 38, 55, 168 and 188
Press contact: Paige Ashley - 020 7242 7367
Image Credit: El Anatsui, Change in Fortune (detail), 2018, aluminium and copper, 294 x 290 cm. Photo: Jonathan Greet. October Gallery, London.
Artist ( Name ):
El Anatsui
http://www.octobergallery.co.uk
Venue ( Name ):
Venue ( Address ):
October Gallery, 24 Old Gloucester Street, London, WC1N 3AL
Other shows from October Gallery
Present Moment
Tian Wei
Aubrey Williams
Rachid Koraïchi:Les Maîtres du Temps (Masters of Time)
Rachid Koraïchi:Les Maître...
Related Shows This Week in UK
Rex Southwick: 'Querencia'
Rex Southwick: 'Querencia...
KTW London
Tyburn Gallery
A Secret Beauty: The Spirit of Japanese Maki-e
A Secret Beauty: The Spirit of...
The Brunei Gallery,SOAS,University of London
Newlyn Art Gallery & The Exchange
Johannah Latchem: No Whole Truths
Johannah Latchem: No Whole Tru...
Emii Alrai: Tutelaries
PUBLIC Gallery
On the Edge of Infinity/Coastal Resonance
On the Edge of Infinity/Coasta...
Artizan Gallery
Event Inquire
Hi, I'm interested in this event. Could you please provide more information about the ... ?
Art Gallery Jobs


text:
Feds Bust Alleged Plot To Kidnap MI Governor
Federal prosecutors are outlining charges against six men they say hatched a plot to kidnap Michigan Governor Gretchen Whitmer as part of their plan to overthrow the government and establish a new regime. The Detroit News broke the news of the arrest and charges on Thursday morning, based on an FBI affidavit filed in federal court hours earlier.
The court filing also alleges the conspirators twice conducted surveillance at Whitmer's vacation home and discussed kidnapping her to a remote location in Wisconsin to stand "trial" for treason prior to the Nov. 3 election.
"Several members talked about murdering 'tyrants' or 'taking' a sitting governor," an FBI agent wrote in the affidavit. "The group decided they needed to increase their numbers and encouraged each other to talk to their neighbors and spread their message."
The affidavit was filed hours after a team of FBI agents raided a Hartland Township home Wednesday and comes amid an ongoing investigation into the death of a Metro Detroit man killed during a shootout with FBI agents.
The Michigan home that was raided by the FBI is the residence of 24-year old Ty Garbin, who's one of the six men named in the court filing.
According to the FBI affidavit, the men first popped up on law enforcement's radar back in February, when they were alerted to social media posts discussing the "violent overthrow of several state governments." Months later, the six men met with at least seven other individuals in Dublin, Ohio, but at least one of those in attendance was actually serving as an informant for the FBI, and recorded the meetings.
In an effort to recruit new members to their cause, the government alleges that one of the suspects named Alan Fox reached out to a Michigan-based militia, which was already under surveillance by law enforcement.
The FBI was already tracking the militia in March after a local police department learned members were trying to obtain addresses of local law-enforcement officers, the FBI agent wrote.
"At the time, the FBI interviewed a member of the militia group who was concerned about the group's plans to target and kill police officers, and that person agreed to become a (confidential source)," the agent wrote.
In late June, Fox posted on Facebook a video in which he complained about the state's judicial system and COVID-19 restrictions on gyms operating in Michigan.
"Fox referred to Governor Whitmer as 'this tyrant b—-,' and stated, 'I don't know, boys, we gotta do something," according to the court affidavit. "You guys link with me on our other location system, give me some ideas of what we can do."
Honestly, what were these guys thinking would happen if they carried out their plan to fruition? They'd kidnap the governor and hold some sort of mock trial charging her with treason, and then… what? Residents in Michigan would shrug their shoulders and say, "Well, I guess these guys are in charge now"?
While law enforcement officials describe the plot on the part of the six men as "elaborate," it's unclear how close the group was to attempting to carry out their plan. Officials say that Fox spoke in June about needing "200 men" to help storm the state capitol building before Election Day in order to take hostages, including Whitmer, but also discussed ways to kidnap or even kill the governor at her vacation residence. The affidavit also refers to several training sessions that the men allegedly conducted in August and September, all of which were monitored by either confidential sources or undercover agents.
It's worth noting that while these self-proclaimed patriots were allegedly plotting to overthrow the state government in Michigan over Whitmer's COVID-19 executive orders, a lawsuit challenging those same orders was making its way through the court system, and the state's Supreme Court declared her mask mandate unconstitutional just a few days ago. It may very well be that one day the United States will have to face the real question of living under tyranny or fighting against it, but we certainly haven't reached that point yet, and there are plenty of legal means to address unconstitutional power grabs without trying to kidnap politicians or kick off a civil war, starting with voting in November.
Tags: MICHIGAN KIDNAPPING GRETCHEN WHITMER


The Vice-President, Prof. Yemi Osinbajo (SAN), says the Federal Government is open to collaboration with the arbitration community in the country as part of strategies to attract more Foreign Direct Investments.
According to the Vice-President, the existence of a strong and effective dispute resolution mechanism, such as arbitration, is crucial for encouraging investors, both local and foreign.
He noted that beyond pure economic fundamentals, investors, whether domestic or foreign, always want to be assured that there is a credible judicial system in place where disputes arising in the course of transactions would be easily and effectively resolved.
The Vice-President said this last week while addressing participants at the 3rd International Chamber of Commerce Africa Regional Arbitration Conference, which held at the Civic Centre, Victoria Island, in Lagos.
He was represented by the Senior Special Assistant to the President on Industry, Trade and Investment, Dr Jumoke Oduwole.
"If we have a strong legal framework for arbitration, including judicial reform, there will be increased FDI as a country and as a region.
"…Nigeria is fast becoming a leading seat of arbitration and the settlement of investment disputes, a synergy between government and the arbitration community can achieve a lot more," Osinbajo said.
He noted that as part of efforts to encourage arbitration in the country, the Senate, in February, passed into law the Arbitration and Concilliation Act Cap A18 LFN (Repeal and Enactment) Bill 2018.
He, however, shared in the concern raised by the ICC in its 2014 Statistical Report that despite the availability of competent arbitrators in sub-Saharan Africa, many multinationals operating in the region still export their business disputes abroad for resolution.
While charging the arbitration community to do all it can to reverse the trend, Osinbajo said the the Federal Government, through its Presidential Enabling Business Enviroment Council, was ready to give them all the necessary support.
"We need to ensure that the expertise is there and the centres are well-equiped. The government has to be seen to be encouraging arbitration," Savage said.
The conference attracted many indigenous and foreign arbitration enthusiasts, including the President, ICC International Court of Arbitration, Mr Alexis Mourre.


text:
Home Entertainment TEENAGE MUTANT NINJA TURTLES still bring thrills across the generations
TEENAGE MUTANT NINJA TURTLES still bring thrills across the generations
Still going strong after thirty-five years, the Teenage Mutant Ninja Turtles belong to the fans
AJ Frost
One of the underrated anniversaries that wasn't as widely celebrated as it should have been at this year's San Diego Comic-Con was that of a certain team of terrapins trained in the mystical arts of the ninja. Yes, the Teenage Mutant Ninja Turtles turned 35 this year and over the decades, what started as a lark between two cartoonists has become one of the biggest media franchises in the world.
SDCC is almost like a second home for the Turtles. Whether dominating the exhibition floor — through interactive booths, new toy displays, or colored bandanas affixed on thousands of faces — or simply being present through hundreds of comics pages, the power and pull of TMNT is always hard to resist.
Archival Photo Peter Laird (L) and Kevin Eastman (R).
Once the admitted strangeness of the concept is overcome, the heart of Teenage Mutant Ninja Turtles has always been its core elements: its primary characters, the ability to place said characters in any multitude of story situations and media, and the nimbleness of appealing to different generations of readers and viewers. As the brainchild of Kevin Eastman and Peter Laird, what started off as an amusing goof quickly became a multimedia monster of merchandising, cartoons, and memories. It's these memories—the unyielding lure of nostalgia—that not only has propelled the Turtles through the years, but has kept long-time fans interested while new fans accrue through new movies and television programs.
This year, Nickelodeon celebrated the Turtles' milestone anniversary by taking a holistic view of the brand's legacy. On hand to gaze into the past and peer into the future was none other than Eastman himself as well as Ciro Nieli, the executive producer of the 2012-2017 Teenage Mutant Ninja Turtles iteration of the dudes, as well as Andy Suriano and Ant Ward, the co-executive producers of the network's current show, dubbed Rise of the Teenage Mutant Ninja Turtles, which debuted in 2018.
At SDCC, I started our interview on a broad note, asking what the Turtles mean not only in a business sense but as an ongoing entertainment entity.
"It's amazing," Ward said, "It's a testament to not only the fans for giving all these different generations a chance, but it's a testament to the characters holding up so well. Kevin and Peter created something iconic in its inception."
The 2012 TMNT iteration at SDCC '13
Adding onto that point, Suriano remarked: "It's very clear this is bigger than all of us as individuals. We're part of something that's in perpetual motion. It's bigger than an idea. It's shoulder to shoulder with huge things like Star Wars or Batman. It's humbling."
"I was fortunate in my slot where I got to contribute," Nieli reflected. He went onto to say that the Turtles are "still early in the pantheon of the life that the Turtles are going to have. They'll around for hundreds of years… if the planet exists."
As the co-creator, Eastman sees the Turtles through a more direct manifestation of understanding. "We wrote it for ourselves," Eastman said, referring back to that momentous timeframe of the early eighties when he and Laird were still struggling to find their footing. "If we sold a couple of hundred copies back in those days, that that would be pretty much it and we would have been thrilled. When it became something that we could actually make a living on and follow that dream with all our passion, it was a dream come true. There could be nothing better."
Over the course of talking with these keepers of the Turtle flame, it's plain to see the elementary, eternal, and ever-expanding appeal of such a strange concept. It's not only the gadgets or the weapons, the mash-up of different genres, or even the technology that brings the Turtles to the screen. It all goes back to the openness of the characters themselves, where any individual fan can ascribe meaning to the Hero in a Half-shell of his of her choice.
It doesn't matter where Eastman may go, because the "fanbase is the same. It doesn't matter where they are or what the background is. They've found something in the Turtles to love."
Ant Ward
CIRO NIELI
Previous articleFinally! It's time for a Marvel TV crossover with Cloak and Dagger and Runaways
Next articleINTERVIEW: Jen Bartel on BLACKBIRD, strong female characters, and storytelling influences
AJ Frost is an editor/writer based out of Phoenix, AZ.
RECAP: THE EXPANSE S5E8 — "Hard Vacuum"
EXCLUSIVE PREVIEW: The madness and mayhem continue in the SPACE BASTARDS...


The upcoming Netflix thriller sees Coel unraveling the truth about her past with devasting consequences that could affect her future.
Michaela Coel is hunting for the truth in the devastating new trailer for Black Earth Rising.
Co-starring John Goodman, the Netflix flick sees Coel's Kate Ashby butting heads with her adopted mother, renowned international lawyer, Eve (Harriet Walter), who has taken the case of an African militia leader. Things begin to unravel as Kate, a survivor of the Rwandan genocide, seeks the truth about her past, putting her future in danger.
Fans of Coel's work should be prepared to see the actress and writer in a whole new light as she continues to expand her resumé.
Black Earth Rising premieres January 25 on Netflix.


text:
Go to SPEX
Standards Approval Board
Innovators wanted to enhance standards content
Develop standards
Comment on draft standards
Standards New Zealand work programme
Do you want to be involved?
Project proposals
Review of aged standards
Standards and Law
Standards information
Access standards
Keep me up-to-date
Fire formal interpretations
Sponsored standards
Health care services standards
Testing and decontamination of methamphetamine-contaminated properties
Building-related standards
Self containment of motor caravans and caravans
ISO & IEC new work proposals
Technical barriers to trade (TBT)
International Protocol
Touchstone & other news
World Standards Day
Questions about standards and regulations, and updates to standards
Copyright and standards
Purchasing overseas standards
Ordering and fulfilment
Webshop/Technical questions
Network licences
Joint Australian and New Zealand Standards
NZS 3902:2004 Housing, alterations and small buildings contract
Q&As on NZS 8510 Testing and decontamination of methamphetamine-contaminated properties
Tips on opening ebooks
Electrical installations - Known as the Australian/New Zealand Wiring Rules
This document has been re-assessed by the committee, and judged to still be up to date.
It is intended that the Electricity (Safety) Regulations will reference this edition of the standard, AS/NZS 3000:2018, as a means of compliance. Please contact WorkSafe - Energy Safety for more information.
Note for hard copy purchasers
The hard copy AS/NZS 3000:2018 is printed with a plastic coil bind and does not include the Electrical (Safety) Regulations.
Sets out requirements for the design, construction and verification of electrical installations, including the selection and installation of electrical equipment forming part of such electrical installations. These requirements are intended to protect persons, livestock, and property from electric shock, fire and physical injury hazards that may arise from an electrical installation that is used with reasonable care and with due regard to the intended purpose of the electrical installation. In addition, guidance is provided so that the electrical installation will function correctly for the purpose intended and takes into account mitigating the foreseeable adverse effects of disruption to supply. Part 1 provides uniform essential elements that constitute the minimum regulatory requirements for a safe electrical installation. It also provides an alternative regulatory vehicle for Australian and New Zealand regulators seeking to move from the present prescription of AS/NZS 3000 in electrical installation safety and licensing legislation. Part 2 provides installation practices that are deemed to comply with the essential safety requirements of Part 1. This edition is bound with a plastic coil, not with a ring binder as in the previous edition.
Table of contents are automatically generated, and may not be 100% accurate.
$135.00 NZD (ex GST)
Click Buy for Online Library subscription
Preview sample of document
AS/NZS 3000:2007 as of 26/06/2018
Committee: EL/01
ICS codes
International Classification for Standards (ICS) is an international classification system for technical standards. It is designed to cover every economic sector and virtually every activity of the humankind where technical standards may be used.
Follow these links to find other Standards similar to the one you are viewing.
13.260 Protection against electric shock
29.020 Electrical engineering in general
91.140.50 Electricity supply systems
01.100.25 Electrical and electronics engineering drawings
13.110 Safety of machinery
Other people who purchased this product also bought...
AS/NZS ISO 9001:2016
Quality management systems - Requirements
AS/NZS ISO 31000:2009
Risk management - Principles and guidelines
Electrical installations - Verification guidelines
NZS 3910:2013
Conditions of contract for building and civil engineering construction
In-service safety inspection and testing of electrical equipment
Essential safety requirements for electrical equipment
You may be interested in this related standard
Management programs for medical equipment
© 2016 Standards New Zealand


TRUST has outstanding rinsability, with chemistry that releases from fabrics for better and faster rinsing, avoiding costly rinses, and detergent buildup in the textiles. TRUST costs less by delivering unbelievable cleaning at a low use cost. Packaged in 5 gallon pails for easy handling and convenience. Trust is a non-phosphate formulation.


These words impart the single tree standing on the school grounds in Martinsried with a symbolic significance and also explain why the chestnut tree is the focus of the design of the school complex. The sports hall and school building are located opposite to each other, enclosing the schoolyard dominated by the chestnut tree. Classrooms are arranged in a U-shape around a two-storey entrance hall including gallery, which opens up towards the schoolyard across its entire breadth.
The assembly hall is the heart of the school building, a place to come together and to part. Views in many directions facilitate easier orientation of the students allowing them to settle in more quickly. The roof support structure of the semi-lowered sports hall next to the street looks like a large "table", separating school space from public space, while at the same time leaving open a large entrance to the schoolyard and school.
Essential design themes include simple materials, spatial order, colour and light effects, surface textures, and visibility of the fair-faced concrete supporting structure. The utilisation of simple and comprehensible constructions and materials allows the children to develop a personal relationship to the school as a learning environment and to an architectural structure. Informal and comfortable spaces to learn, live and grow in have been created.


Your business profile features promotions and coupons, along with a direct link to your website, a map to your location, your contact information and direct access to your social profiles. Business profiles also receive the advantage of SuperSavings.com's continuous SEO efforts by boosting your business's search engine ranking and visibility.
When things are heating up on your profile we make sure everyone knows about it! We make it even easier for visitors to find you by featuring your business in the Hot Deals section on our home page.
Attract customers with our searchable directory of happy hour times and specials for local restaurants, bars, and grills.


text:
COVID-19 hospital surge further taxes health care providers
December 1, 2021 9:02AM CST
MINNEAPOLIS (AP) — The number of people hospitalized for COVID-19 has surged above 1,500 in Minnesota, causing further strains on those working to care for them. Monday's 1,532 coronavirus hospitalizations included 343 people in intensive care. Hospitals are trying to reduce non-COVID-19 admissions by delaying some non-emergency surgeries. The record 1,864 coronavirus hospitalizations in Nov. 29, 2020 combined with non-COVID cases to fill 6,991 inpatient beds. That is 7% lower than the hospital bed usage in Minnesota now. According to the Centers for Disease Control and Prevention, Minnesota ranks 22nd among the states with about 73% of people 5 and older receiving a first dose of COVID-19 vaccine, but that leaves more than 1.4 million eligible people unvaccinated.


When you try something for 99 years and the situation keeps getting worse, it is time to try something else.
When wealthy people espouse left-wing causes, such as redistribution of wealth, those on the right often label them hypocrites.
Are we already entering the age of 'hack back'?
Can economics shake its long-held assumptions?
Though economics aspires to the rigor of the natural sciences, at the end of the day it is still a social science.
One of the great strengths of democracy is that bad policies are often reversed.
Can the Mueller report provide any resolution?
Robert Mueller's final report should present Congress with a clean choice: Either the facts warrant impeachment of U.S. President Donald Trump, or they don't.


text:
/*
 Author:     Andy, nkuwjg@gmail.com
 Date:       Jan 20, 2015
 Problem:    Palindrome Partitioning
 Difficulty: Easy
 Source:     https://oj.leetcode.com/problems/palindrome-partitioning/
 Notes:
 Given a string s, partition s such that every substring of the partition is a palindrome.
 Return all possible palindrome partitioning of s.
 For example, given s = "aab",
 Return
 [
  ["aa","b"],
  ["a","a","b"]
 ]

 Solution: ...
 */

public class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> res = new ArrayList<List<String>>();
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
        for (int i = n - 1; i >= 0; --i) {
            for (int j = i; j < n; ++j) {
                dp[i][j]=(s.charAt(i)==s.charAt(j))&&(j<i+2||dp[i+1][j-1]);
            }
        }
        ArrayList<String> path = new ArrayList<String>();
        dfs(s, dp, 0, path, res);
        return res;
    }
    public void dfs(String s, boolean[][] dp, int start, ArrayList<String> path, List<List<String>> res) {
        if (s.length() == start) {
            res.add(new ArrayList<String>(path));
            return;
        }
        for (int i = start; i < s.length(); ++i) {
            if (dp[start][i] == false) continue;
            path.add(s.substring(start,i+1));
            dfs(s, dp, i+1,path,res);
            path.remove(path.size()-1);
        }
    }
}