text:
Devoted Dog Fights For His Life After Saving His Tiny Human From A Rattlesnake
Regina Lizik
Editor, Viral Content
Seven year old Molly DeLuca's best friend almost died saving her life, last week. Haus, the aforementioned best friend, is a two year old German Shepherd.
Molly and Haus were playing in the backyard and everything seemed normal, but then Molly's grandmother saw something strange. The pup was jumping back and forth in a threatening posture, practically guarding Molly from something. That something was a rattlesnake.
Everything happened so quickly that the DeLucas didn't have time to react to the situation. Molly's mother, Donya, told Fox 13:
Next thing we know is, there's blood and he was limping and crying.
Despite the imminent danger to himself, Haus "kept taking hits" to block the snake from attacking Molly or her grandmother.
Haus spent the past few days fighting for his life at BluePearl Veterinary Partners in Tampa, Florida. This morning, the vet clinic updated their Facebook page with wonderful news – Haus is alert and showing signs of progress!
Carrie O'Brion, BluePearl's Communications Manager, told us:
Haus is still in the ICU at BluePearl but he is doing well. He's making and steady progress toward recovery. Doctors are optimistic about his prognosis but he'll still have to be hospitalized for at least a few more days.
In an update on Facebook, Donya said that there is still venom in the pup's blood. His fight it not over yet, but it does look like it's a fight he will win.
As for Molly's family, on Thursday her mother said:
I couldn't even sleep last night. I barely slept because it is bittersweet. I am doing everything I can. I feel like I owe it to him to keep trying to save him.
The DeLucas set up a GoFundMe to help cover Haus' medical costs, but since the story has gone viral, tons of generous humans have donated enough money (nearly $53,000!) that the family is now asking people to donate to Heidi's Legacy Dog Rescue, in lieu of making donations for Haus. No only did Haus save his best friend, but now his newfound fame will help save dogs in need!
Watch Molly and her mother talk about their life-saving friend in the news report below:
High paws, Haus! And a huge four paws up for the pup's doctors who performed miracles to help this guy!
We've reached out to BluePearl Veterinary Partners for more detailed information and we will update everyone on Haus' condition when they respond.
Which Dog Breeds Are Bad At Listening?
How Do You Prepare Your Dog For A New Baby?
How Do I Know If My Dog Needs To Go To the Vet?


text:
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32f10x_adc.h"
#include "stm32f10x_dma.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_iwdg.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
#include "misc.h"
#include "core_cm3.h"

#include "debug.h"
#include "string.h"
#include "draw.h"
#include "display_HAL.h"
#include "timework.h"
#include "TxRx.h"
#include "UI.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
#define BitGet(p,m) ((p) & (m))
#define BitSet(p,m) ((p) |= (1<<(m)))
#define BitReset(p,m) ((p) &= ~(1<<(m)))
#define BitToggle(p,m) ((p) ^= (m))
#define BitWrite(c,p,m) ((c) ? BitSet(p,m) : BitReset(p,m))
#define BitIsSet(reg, bit) ((reg & (1<<(bit))) != 0)
#define BitIsReset(reg, bit) ((reg & (1<<(bit))) == 0)

#define abs(x)  ( (x)<0 ) ? (-(x)) : (x)

/* Private variables ---------------------------------------------------------*/
volatile uint16_t delay;					//for delay function
volatile uint16_t lowSpinCounter=0;			//step down counter for under spinning detection

volatile uint8_t step = 0;

volatile bool flagGoodSpeed = FALSE;
volatile bool flagNewLap = FALSE;
volatile bool flagNewStep = FALSE;

	//uint32_t RX_data = 255;

	//uint16_t fmNumReports = 0;
	//uint16_t fmFAILReports=0;

	//char  sss[20]={"123"};

	//uint32_t spinFreq=12000;

/* Extern variables ----------------------------------------------------------*/
extern volatile uint8_t DispBuf[12];
//extern SettingsArray sett;

extern TextDispStruct Text[30];
extern ObjDispStruct Object[30];

extern const char font3x5[];
extern const char font5x8[];

//extern uint8_t TX_counter;
extern volatile uint16_t transCounter;

extern volatile signed int metronomePos;
extern volatile signed int metronomePeriod;

/* Private function prototypes -----------------------------------------------*/
int Dispatcher();

/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name  : __delay_ms
* Description    : Delay the code on the N cycles of SysTick Timer.
* Input          : N Delay Cycles.
*******************************************************************************/
void __delay_ms( volatile uint32_t nTime )
{
	delay = nTime;
	while(delay);
}

/*******************************************************************************
* Function Name  : SysTick_Handler
* Description    : Handles SysTick Timer Interrupts every 1ms.
*******************************************************************************/
void SysTick_Handler(void)
{
	if(delay) delay--;
	if(transCounter) transCounter--;
	if(lowSpinCounter) lowSpinCounter--;

	if(metronomePeriod)
	{
		static bool metrDir = FALSE;
		if(metrDir)
		{
			if(++metronomePos >= metronomePeriod)
			{
				metronomePos = metronomePeriod;
				metrDir = FALSE;
			}
		}
		else
		{
			if(--metronomePos <= -metronomePeriod)
			{
				metronomePos = -metronomePeriod;
				metrDir = TRUE;
			}
		}
	}
	else
		metronomePos = 0;
}

/*******************************************************************************
* Function Name  : Init
* Description    : Initialize the chip peripheral.
*******************************************************************************/
void Init()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef TimeBaseInitStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_ICInitTypeDef TIM_ICInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

	RCC_DeInit();

	// Enable HSI
	RCC_HSEConfig(RCC_HSE_OFF);
	RCC_HSICmd(ENABLE);

	// Enable Prefetch Buffer
	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
	// Flash 2 wait state
	FLASH_SetLatency(FLASH_Latency_2);

	// HCLK = SYSCLK
	RCC_HCLKConfig(RCC_SYSCLK_Div1);
	// PCLK2 = HCLK
	RCC_PCLK2Config(RCC_HCLK_Div1);
	// PCLK1 = HCLK
	RCC_PCLK1Config(RCC_HCLK_Div1);
	// PLL Clock
	RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);
	// Enable PLL
	RCC_PLLCmd(ENABLE);
	while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
	// Select PLL as system clock source
	RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
	// Wait till PLL is used as system clock source
	while (RCC_GetSYSCLKSource() != 0x08);

	//System Clock = (64Mhz) / 64000 = 1000Hz = 1ms reload
	//System Clock = (64Mhz) / 12800 = 5000Hz = 0.2ms reload
	SysTick_Config(64000);

	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable , ENABLE);

//RTC
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

	/* Disable Backup Domain write protection */
	PWR->CR |= PWR_CR_DBP;

	/* Enable LSI */
	RCC_BackupResetCmd(ENABLE);
	RCC_BackupResetCmd(DISABLE);

	/* Enable LSE - it starts very long */
	RCC_ITConfig(RCC_IT_LSERDY, ENABLE);
	NVIC_InitStructure.NVIC_IRQChannel = RCC_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 10;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 8;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	NVIC_EnableIRQ(RCC_IRQn);
	RCC_LSEConfig(RCC_LSE_ON);

//Peripheral clocking
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
			| RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

//GPIO
	//ADC - Vsens
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	//PWM
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	//SPI
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);

	//FM in
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

//Timer
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //200 step counting
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //PWM
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //FM capture
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //frame capture

	//TIM1 - 200 step counting
	TimeBaseInitStructure.TIM_Prescaler = 3;
	TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TimeBaseInitStructure.TIM_Period = 10000;
	TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM1, &TimeBaseInitStructure);

	TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
	NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 10;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 8;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	NVIC_EnableIRQ(TIM1_UP_IRQn);

	//TIM2
	TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TimeBaseInitStructure.TIM_Prescaler = 0;
	TimeBaseInitStructure.TIM_Period = 1000;
	TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TimeBaseInitStructure);

	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_Pulse = 1000;

	TIM_OC3Init(TIM2, &TIM_OCInitStructure);
	TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);

	//TIM3 - 18-30 khz capture
	TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TimeBaseInitStructure.TIM_Prescaler = 0;
	TimeBaseInitStructure.TIM_Period = 8000;
	TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3, &TimeBaseInitStructure);

	TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;//TIM_ICPolarity_Falling
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//TIM_ICSelection_DirectTI
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//TIM_ICPSC_DIV1
	TIM_ICInitStructure.TIM_ICFilter = 3;//3
	TIM_ICInit(TIM3, &TIM_ICInitStructure);

	TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);
	TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
	TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	NVIC_EnableIRQ(TIM3_IRQn);

	//TIM4 - 15-40 Hz frame capture
	/* Hz - Counter value [63800/Hz = Counter value]
 	 * 40 - 1594 * 35 - 1823 * 30 - 2126
 	 * 25 - 2552 * 20 - 3190 * 18 - 3545
	 * 15 - 4254 * 12 - 5318 * 10 - 6380 */
	TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TimeBaseInitStructure.TIM_Prescaler = 999; //64.000 hz count //63800 exact
	TimeBaseInitStructure.TIM_Period = 65000;
	TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM4, &TimeBaseInitStructure);

	TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	TIM_ICInitStructure.TIM_ICFilter = 0;//3
	TIM_ICInit(TIM4, &TIM_ICInitStructure);

	TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);
	TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);

	TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);
	TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 10;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 10;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	NVIC_EnableIRQ(TIM4_IRQn);

	TIM_Cmd(TIM1, ENABLE);
	TIM_Cmd(TIM2, ENABLE);
	TIM_Cmd(TIM3, ENABLE);
	TIM_Cmd(TIM4, ENABLE);

	/* Watchdog - Base frequency 40kHz */
	//DOG-Time(sec.) = reloadValue * prescaler / 40000
	//ReloadValue = DOG-Time(sec.) * 40000 / prescaler
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
	IWDG_SetPrescaler(IWDG_Prescaler_8);
	IWDG_SetReload(500); //100ms
	IWDG_ReloadCounter();
	IWDG_Enable();
}

/*******************************************************************************
* Function Name  : main
* Description    : Main cycle
*******************************************************************************/
int main(void)
{
	Init();
	HALDisplayInit();
	DebugInit();
	UI_Init();

	/* wait until rotor spins up */
/*	while(!Dispatcher())
		IWDG_ReloadCounter();

	TxAddMessage(Message_GetTimeDateSett);*/

    while(1)
    {
    	Dispatcher();
    	IWDG_ReloadCounter();

    	/* New Lap */
    	if(flagNewLap == TRUE)
    	{
    		flagNewLap = FALSE;

/*todo
* voltage sensor on GPIOA.0 - ?
* ...
*/

#if 0
    		char s[40];

    		/* spin frequency */
    		itoa_(/*spinFreq*/emp, s);
			DisplayTextAdd(0,s, &font5x8[0], BLUE, 40, 28-8-8, ROUTE_BOTTOM, 3);

    		/* debug FM */
    		/*itoa_(RX_data, s);
			DisplayTextAdd(1, s, &font5x8[0], GREEN, 60+50, 28-8, ROUTE_BOTTOM, 3);

			itoa_(fmFAILReports, s);
			DisplayTextAdd(2, s, &font5x8[0], RED, 30, 28-8, ROUTE_TOP, 3);

			itoa_(fmNumReports, s);
			DisplayTextAdd(3, s, &font5x8[0], MAGENTA, 1, 28-8, ROUTE_TOP, 3);

			if(sss[0]=='G')
				DisplayTextAdd(5, sss, &font5x8[0], BLUE, 150, 28-8, ROUTE_TOP, 3);
			else
				DisplayTextAdd(5, sss, &font5x8[0], RED, 150, 28-8, ROUTE_TOP, 3);*/

    		//GPIOA->BRR = GPIO_Pin_4;
    		//GPIOA->BRR = GPIO_Pin_6;
#endif
    	}
    }
}

/*******************************************************************************
* Function Name  : RCC_IRQHandler
* Description    : "LSE is stable" - ~1.1sec after system start
*******************************************************************************/
void RCC_IRQHandler(void)
{
	if(RCC_GetITStatus(RCC_IT_LSERDY) != RESET)
	{
		RCC_ClearITPendingBit(RCC_IT_LSERDY);

		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
		RCC_RTCCLKCmd(ENABLE);

		RTC_SetPrescaler(0x7FFF); // divide/32768
		RTC_WaitForSynchro();
	}
}

/*******************************************************************************
* Function Name  : TIM3_IRQHandler
* Description    : FM input handler
*******************************************************************************/
void TIM3_IRQHandler(void)
{
	/* New FM period capture */
	if(TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET)
	{
		TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

		static uint8_t RX_debounce = 0;
		static volatile uint32_t RX_prevCapture = 0;

		/* Debounce (if new frequency appears) */
		if(RX_debounce)
		{
			RX_debounce--;
			return;
		}

		uint32_t RX_currCapture = TIM_GetCapture2(TIM3);

		/* Is Frequency belongs to FM interval */
		if( RX_currCapture > 3100 || RX_currCapture < 2110 ) return;

		/* New Frequency appeared */
		if( abs(RX_currCapture - RX_prevCapture) > 70 )
		{
			RX_debounce = 7; //8
			RX_prevCapture = RX_currCapture;
			return;
		}
		else
			RX_prevCapture = RX_currCapture;

																	//FREQ  					  Counter value
																	//0		- FREQ20 - Default	- 3208-3215
		if(      RX_currCapture > 3020 && RX_currCapture < 3090 )	//I 	- FREQ21 - START	- 3054-3058
			RX_Dispatcher(1);
		else if( RX_currCapture > 2890 && RX_currCapture < 2960 )	//II 	- FREQ22 **->00		- 2914-2925
			RX_Dispatcher(2);
		else if( RX_currCapture > 2760 && RX_currCapture < 2840 )	//III 	- FREQ23 **->01		- 2792-2800
			RX_Dispatcher(3);
		else if( RX_currCapture > 2640 && RX_currCapture < 2705 )	//IV 	- FREQ24 **->10		- 2675-2685
			RX_Dispatcher(4);
		else if( RX_currCapture > 2540 && RX_currCapture < 2590 )	//V 	- FREQ25 **->11		- 2568-2572
			RX_Dispatcher(5);
		else if( RX_currCapture > 2450 && RX_currCapture < 2495 )	//VI 	- FREQ26 **->00		- 2472-2475
			RX_Dispatcher(6);
		else if( RX_currCapture > 2340 && RX_currCapture < 2400 )	//VII 	- FREQ27 **->01		- 2374-2379
			RX_Dispatcher(7);
		else if( RX_currCapture > 2260 && RX_currCapture < 2315 )	//IIX 	- FREQ28 **->10		- 2290-2294
			RX_Dispatcher(8);
		else if( RX_currCapture > 2190 && RX_currCapture < 2240 )	//IX 	- FREQ29 **->11		- 2214-2219
			RX_Dispatcher(9);
		else if( RX_currCapture > 2115 && RX_currCapture < 2160 )	//X 	- FREQ30 - END		- 2140-2145
			RX_Dispatcher(10);
	}

	if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
	{	//No Power+FM transmitting
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
	}
}

/*******************************************************************************
* Function Name  : TIM4_IRQHandler
* Description    : New lap handler
*******************************************************************************/
void TIM4_IRQHandler(void)
{
	/* New Lap */
	if(TIM_GetITStatus(TIM4, TIM_IT_CC2) == SET)
	{
		TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);

		static uint32_t prevCapture = 0;
		uint32_t tempCapture = TIM_GetCapture2(TIM4);

		if(tempCapture >= 16000 || tempCapture < 800)
		{/* Not enough rotation speed */
			flagGoodSpeed = DISABLE;
			TIM1->ARR = 16000;
			TIM1->EGR = TIM_PSCReloadMode_Immediate;
		}
		else
		{/* Enough rotation speed */
			// = 8 000 000 * capture_tim_4 / (Nsteps * 64000)
			TIM1->ARR = (uint16_t)( ((uint32_t)( (prevCapture+tempCapture) *5)) >>3 );// /*5/4
			TIM1->EGR = TIM_PSCReloadMode_Immediate;

			prevCapture = tempCapture;

			step = STEPSHIFT; //compensation for not-12-hour sensor position

//	spinFreq = tempCapture; // ************************ FOR DEBUG

			flagNewLap = TRUE;
			flagGoodSpeed = TRUE;
			lowSpinCounter = 1000;
		}

		return;
	}

	if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
	{
		TIM_ClearITPendingBit(TIM4, TIM_IT_Update);

		/* Not enough rotation speed */
		if(!lowSpinCounter)
		{
			flagGoodSpeed = FALSE;
			TIM1->ARR = 16000;
			TIM1->EGR = TIM_PSCReloadMode_Immediate;
		}
		return;
	}
}

/*******************************************************************************
* Function Name  : TIM1_UP_IRQHandler
* Description    : Step (200/round) handler
*******************************************************************************/
void TIM1_UP_IRQHandler()
{
	if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
	{
		DMA_Cmd(DMA1_Channel3, DISABLE);
		DMA_SetCurrDataCounter(DMA1_Channel3, 12);
		DMA_Cmd(DMA1_Channel3, ENABLE);

		TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
		flagNewStep = ENABLE;
	}
}

/*******************************************************************************
* Function Name  : Dispatcher
* Description    : Main picture dispatcher
*******************************************************************************/
int Dispatcher()
{
	/* New Step */
	if(flagNewStep == TRUE)
	{
		flagNewStep = FALSE;

		/* Wait until 96 bit DMA transfer complete */
		while(SPI1->SR & SPI_I2S_FLAG_BSY);

		/* Send "LOAD" impulse to 595 registers */
		GPIOA->BSRR = GPIO_Pin_6;
		GPIOA->BRR = GPIO_Pin_6;

		if(++step >= 200) step = 0;

		ColOff();

		if(flagGoodSpeed)
		{
			/* IR Transmitter */
			TX_Process(step);

			//Text dispatcher
			for(uint8_t i=0; i<25; i++)
			{
				if(Text[i].flagEn) DisplayTextProcess(step, i);
			}

			//Object dispatcher
			for(uint8_t i=0; i<30; i++)
			{
				if(Object[i].flagEn) DisplayObjectProcess(step, i);
			}

			static uint8_t backCnt = 0;
			if(++backCnt >= 50)
			{
				backCnt = 0;
				UI_Dispatcher();
			}

			/* if the new second appears... */
			/*static uint32_t prevRTC = 0;
			if(prevRTC != RTC_GetCounter())
			{
				prevRTC = RTC_GetCounter();
			}*/
			return 1;
		}
		else
		{
			/* turn on first and last RED led's */
			uint8_t position = 31*3 + 1;
			BitWrite(1, DispBuf[(11-position/8)], position%8);//31-st
			position = 0*3 + 1;
			BitWrite(1, DispBuf[(11-position/8)], position%8);//0-s

			return 0;
		}

#if 0
//STRAIGHT LINEs
		if(step <100)
		{
			for(uint8_t i=0; i<32; i++)
			{
				signed char x=0, y=0;
				XYfromRa(i, step, &x, &y);

				if(x==10)// && (((k*x+b)-y)<2))//((y<=(k*x+b)))
				{
					PixelWrite(i, GREEN, 1);
				}
			}
		}
#endif
	}

	return 0;
}

redpajama_set_name: RedPajamaGithub


✅ CAPTURE PICTURES / VIDEO WIRELESSLY ►Perfect wireless solution for taking selfies or recording vlogs without holding your phone / tablet in your hand. Ideal for posting on Snapchat, Facebook, Instagram, YouTube, etc.
✅ LANYARD AND CARABINER INCLUDED ►The neck strap features a detachable ring mount that can be released by pressing a button. With carabiner for attaching the Shutter Remote to your bag, belt, etc.
✅ 30 FT (10 M) WIRELESS RANGE ►Control the camera shutter of your phone or tablet wirelessly from a distance of up to 30 feet (10 meters).
✅ FOR IPHONE AND ANDROID ►This wireless remote control camera shutter will work perfectly with your iOS (6.0 and up) or Android (4.2.2 and up) phone / tablet.
✅ BLUETOOTH® CERTIFIED ►The CamKix Remote Control Camera Shutter uses Certified Bluetooth® Wireless Technology for maximum reliability and fast operation.


GB has embarked on an extensive R&D programme to establish continuous upgrade of product quality, cost efficiency and new product development.
GB Industries strives to achieve maximum customer satisfaction by providing quality products and services. As the company grows from strength to strength, GB has embarked on an extensive R&D programmed to establish continuous upgrades in product quality, cost efficiency and new safety product development.
The safety gloves are put through a series of stringent tests to ensure that they can withstand different operating conditions to meet customer requirements.
The above is evident of the company's commitment to product excellence that has gained confidence and acceptance by our customers worldwide.


The Nigerian Meteorological Agency (NiMet) has just raised the alarm on predictable flooding in which 11 states in the country were listed as potentially in danger of flooding. And promptly, the National Emergency Management Authority (NEMA) has come out to allay any fears by the public and to reiterate government's readiness to effectively mitigate any flooding crisis.
It is perhaps important to mention the states here, which are Akwa Ibom, Bauchi, Benue, Borno, Cross River, Delta, Kaduna, Kwara, Nasarawa, Yobe and Zamfara.
Interestingly, NiMet, having considered measures the larger society can put in place to forestall preventable disasters that usually lead to humanitarian catastrophes, advised "Governments, communities and individuals in these vulnerable parts to take proactive actions, such as clearing water channels and drainages, and also avoid activities that block the free flow of water.
"Closer attention should also be paid to NiMet's daily weather forecasts and alerts. It is further advised that relevant agencies should perfect their emergency evacuation plans and activate them as soon as necessary,"it added.
What I find most striking in this development is the emphasis laid on the collective roles of everyone including the citizens in securing our environment.
The fact is NEMA, the nation's disaster management body, is over-burdened with the demand of the overwhelming number and deplorable conditions of the Internally Displaced Persons (IDPs) across the country, daily occurrence of collapsed buildings and road accidents amongst others. Therefore the agency truly needs the support of equally committed, proactive and responsible institutions and citizenry in averting all these emergency situations.
Following is an abridged version of a piece I did months backwhich I have found relevant to this discourse.
While NEMA under the leadership of Mr. Sani Sidi has shown unusual competence in the delivery of its duties and has earned garlands for the agency's exemplary performance and responses to both human-induced and natural crises in Nigeria as it obtains in many civilised climes, most Nigerians have often displayed sheer inhumaneness at the instance of these unfortunate occurrences. This stands in contrast to the voluntary altruism usually demonstrated by the citizens of those countries that are regularly compared with Nigeria in such crises.
When London woke up to the horror of a series of coordinated suicide bomb attacks on 7th July 2005, the whole of Britain rose to assist the victims, and to mitigate the spread of the ideologies of terrorism. And the country's emergency service and heroes of the 7/7 bombing who risked all to help hapless fellow citizens that were caught in the carnage got deserved adulations for their efforts afterwards.
That is the type of concerted humanitarianism that is required and expected of citizens of a nation facing satanic terrorism and devastating natural disasters.
Right now, Nigeria is confronted with arguably the worst humanitarian challenge since the civil war that left the world in utter shock just the same way the spectre of the Boko Haram sect and militant groups is presently troubling Nigerians as well as the international community.
Chillingly, the demographic survey of the Internally Displaced Persons (IDPs) conducted by NEMA in collaboration with the International Office for Migration (IOM) reveals that 52 per of the IDPs population are female and 48 per cent are male. Children of less than 18 constitute 56 per cent of the IDPs population and more than half of them are five years old or younger.
During his two-day visit to Nigeria couple of months ago, the United Nations Secretary General, Mr. Ban Ki Moon could not conceal his concern for the 1.5 million IDPs in north-eastern Nigeria and the horrible humanitarian consequence the situation portends. He also echoed the predicament of the Chibok girls who had spent over 500 days in captivity as disturbing.
Still, the conditions of the IDP camps across the country remain an eyesore. Their occupiers' cry for basic necessities of life as little as clothing, food and water continues to receive little or no attention from the immediate society. And this has led to growing concern for the pregnant women and new births amongst them who will be most vulnerable should there be an outbreak of diseases in any of these centres. Can we dare talk about the promise of an atmosphere for learning and the process of integration when the basics are not there?
Unsurprisingly though, the privileged ones amongst us are moving on with their lives as if nothing has happened, this occurrence leaves a disgraceful insignia on our sense of care as a people.
In actual fact, nothing validates the measure of our collective sense of humanity than the response we as a society have so far given to the needy amongst us.
The picture of Melinda Gates, the wife of the world's richest man, Bill Gates, carrying a bucket of water along with two women in Malawi is a simple idea of what it means to be humane. That's a scenario I doubt can ever be emulated by the high and mighty in the Nigerian society. And this, I suppose, rather unfortunately, is the missing link in the government's commitment to serving its people especially the most vulnerable.
Thus, the level of assistance being offered by NEMA as extant laws demand, and the agency is adjudged to be doing well, should be complimented by collective positive citizen-efforts to get greater results.


text:
The Caramoor Jazz Festival this year, in collaboration with Jazz at Lincoln Center, brought a wealth of young talent to the garden oasis in Katonah, New York.
Andromeda Turre: If she doesn't become a star, there's no justice. (Jim Motavalli photo)
A case in point: Andromeda Turre wasn't even on the bill. She turned up to sing an unlikely song, "Old McDonald's Farm," during an East Lawn set by Endea Owens and the Cookout. The daughter of trombone player Steve Turre, she came out swinging. In one brief three-minute song she demonstrated via a big, brassy voice every possible nuance of the great jazz singer, including scat. More please!
Owens, a bass player, had just delivered her own strong set. She was Lincoln Center's emerging artist of 2019, and is quickly building a reputation that could provide competition to Esmerelda Spaulding. I could have done without "Imagine," but "Idea" was a strong original from a front line that included a very strong Jeffrey Miller on trombone. He was later seen with Charles Turner. It was like Newport, with some musicians appearing multiple times.
Alexa Tarantino in full song. (Jim Motavalli photo)
Alto saxophonist Alexa Tarantino is a talent deserving of wider recognition, as Downbeat puts it. She's a fluent player and writer, and featured an adept quartet. "It's amazing to play for real humans," she said. Her mostly original set included Herbie Hancock's "One Finger Snap." Strong Tarantino writes, mostly from her new album Firefly (described as "a day in the life of COVID"), were the limpid "Daybreak" and the very bright and busy "Surge Capacity." I wrote down, "Maybe everybody doesn't have to solo on every song."
Brandon Goldberg has been playing since he was 3. Now he's 15 and a veteran. (Jim Motavalli photo)
Brandon Goldberg is just 15 and (having started playing at 3) is already a jazz veteran. He played a set with a trio that sounded informed by life experiences not usually visited on one so young. Close your eyes and it was Cedar Walton up there. Goldberg's many originals have frequent changes in tempo. It was windy so his written music sheets went flying, but he didn't miss a beat. Goldberg's new album In Good Time, produced by the late drummer Ralph Peterson, is out September 17. Most likely, his originals "Time" and "96" will be on it.
I've been fascinated by Nicole Glover since hearing her on a Gene Perla record. She's now a member of all-female group Artemis (with such old souls as Anat Cohen, Renee Rosnes and vocalist Cécile McLorin Salvant). At Caramoor, she was heard in duo with bassist Daniel Duke.
Nicole Glover channels the masters, playing standards on tenor. (Jim Motavalli photo)
Glover, on tenor, played a program of standards with a huge tone and timing reminiscent of the jazz masters. I couldn't get enough of it.
Charles Turner was polished, with Bobby McFerrin in his sights. (Jim Motavalli photo)
Charles Turner and Uptown Swing were very polished. Turner is a very, very promising jazz singer, immensely talented and a wonderful host. Bobby McFerrin comes to mind. Miller on trombone added a lot. Turner's ultra-fast "Honeysuckle Rose" reminded me of Betty Carter's take on "My Favorite Things." He brought down the house with his original, "Black Lives Matter"—which was straight out of the gospel choir.
In the Sunken Garden, veteran bassist Larry Grenadier—one of the few players who was on the stand back in the '80s—played solo. Grenadier started at 16, and was soon working with Johnny Griffin, Bobby Hutcherson, Art Farmer, Johnny Coles and Frank Morgan. Solo bass is an acquired taste, but I was totally on board when he took out his bow.
I missed headliner Sean Jones, but I'm sure he was fine. If you want a reason to come get embraced by the loveliness that is Caramoor consider a visit August 20 to see the female folk ensemble Della Mae.
Posted on August 4, 2021 by Jim Motavalli.	Bookmark the permalink.
← The Caramoor American Roots Festival is Back! And Jazz on Saturday.
The Green River Festival, New Site, Same Good Time →
2 thoughts on "The 2021 Caramoor Jazz Festival Brings on the Young Talent"
Andromeda Turre says:
You have no idea how much it means to me to be included in this. Thank you so much for your powerful words, they inspire me to keep going! -Andromeda Turre
Jim Motavalli says:
Andromeda, I'd love to have you on my radio show at WPKN: jmotavalli@gmail.com.

redpajama_set_name: RedPajamaCommonCrawl


text:
Rethinking Aziz Ansari
Armando Gallo/ZUMA
You may recall that comedian Aziz Ansari fell afoul of the #MeToo movement a year ago when a woman wrote that Ansari had pressured her for sex on a date a few months earlier. She sent him a text message about it the morning after the date and he apologized. "Clearly, I misread things in the moment and I'm truly sorry." Ansari says the sex was entirely consensual.
He got pretty beat up regardless, and in the New Yorker last year Eren Orbey wrote about how the incident had affected Ansari's comedy:
In his latest set, Ansari suggests that collective anger has overcorrected; now, rather than hold power to account, it targets the slightest and least consequential controversies. "Why is everyone weighing in on this shit?" Ansari asked of the Twitter users who flocked to debate whether an American teen-ager's choice of prom dress constituted so-called cultural appropriation. "Everyone weighs in on everything. They don't know anything. People don't wanna just say, 'I don't know.' "…Without ever mentioning the #MeToo movement—or his own experience as one of its most disputed casualties—Ansari decries the destructive performativity of Internet activism and the fickle, ever-changing standards of political correctness.
….In his public statement in January, Ansari made a point of affirming the #MeToo movement as "necessary and long overdue." One might have hoped that, nearly a year later, he could find a way to reckon with one of the movement's messiest lessons: that even men who wish to serve as allies of women can, intentionally or not, hurt them in private. Perhaps doing so might help Ansari to regain the trust of the women who feel that he has lost theirs. Instead, like other men who have reëmerged in recent months, he seems to have channelled his experience into a diffuse bitterness.
Anna North comments further today, writing about both Louis C.K. and Ansari:
Whatever the case, the trajectories of C.K. and Ansari are doubly disappointing — first, because men whose work had a feminist bent were accused of hurting women, and second, because they let those accusations destroy the nuanced social awareness their earlier work displayed….That's sad for all of us. We don't get to see the comedy these men could have created if they'd wanted to face, rather than flee from, our current moment in history.
….Ever since the #MeToo movement gained mainstream attention in 2017, there's been a lot of talk about what accused men can do to redeem themselves. Now, more than a year in, it's certainly possible to imagine some of the accused truly reckoning with their pasts — Dan Harmon's apology for sexually harassing a writer on his show offers a view of what that might look like. But it's hard to hold out much hope for such a reckoning on a large scale when two men who seemed like they, of all people, might be able to look deeply at their own behavior have instead chosen to pander to those who would excuse them.
I think it's a mistake to lump Louis C.K. and Ansari together here. C.K.'s behavior was clearly sexual abuse from a man with power over women and it happened multiple times. What's more, he never truly reckoned with it in any sort of public way. He deserved to be shunned, and questions about his "comeback" are perfectly well deserved.
But Ansari's case is entirely different, and produces a different lesson. What he did was obviously in a gray area; it happened once; he apologized at the time; and he apologized again when it became public. Nonetheless, he endured an epic beatdown on social media, much of it driven not so much by what he did, but by disappointment that it ruined the fantasy image his fans had built up of him.
And now we're disappointed that Ansari (a) feels sort of bitter about this, and (b) has a different view of social media mobs. But maybe he has a point? His offense was obviously minor and he clearly apologized for it. And yet, the mob came for him anyway, dumping him in the same bin as a serial sexual abuser like C.K. What conclusion should he have drawn from that?
Well, he's human, and social media mobs are no fun. And that leads us to something that progressives don't always acknowledge: when someone apologizes and comes over to your side—or was on your side all along—accept the apology and welcome them aboard. Don't expect sackcloth and ashes for months on end. Max Boot recently wrote a book repudiating his entire past as a conservative and has since become an effective spokesman against Trump and for liberal causes, but on social media he's harassed endlessly as a murderous neocon because he supported the Iraq War. What does this accomplish except to eventually convince him that trying to engage with progressives was never worth it in the first place? Ditto for Ansari. He probably figures—reasonably enough—that if social media mobs do what they did to him, maybe social media mobs aren't such a great thing after all.
I think progressives need to do a better job of understanding human nature. If someone gets attacked relentlessly, you can't expect them to simply absorb it all with perfect humility. Most of us aren't saints. Before long we get resentful, and that resentment makes us question the whole progressive project. And then we've lost another ally.
Social media is a headless monster, and progressive leaders are way too unwilling to rein it in. They could, by sometimes suggesting that the mob stand down because the offense in question isn't that big a deal. But most of them won't, because they know that they'll pay a price for taking the non-woke side of anything, regardless of reason. Better to just go along and keep their street cred safe.
That's not really leadership, though. We could use more of the real thing.


text:
Climate Change, the U.S. Military, and "the Intersection of Politics and Events"
November 1, 2016 By Schuyler Null
There may not have been a single question about climate change in the 2016 presidential debates, but it remains a hotly contested, partisan issue for many in the United States. That climate change is happening and requires a response is not up for debate within the upper echelons of the U.S. military, however.
Many hearings, reports, and candid observations have given testimony to this. But for those still wondering if political pressure is behind it all, a new issue of the U.S. Marine Corps Press Journal outlines some of the recent history of climate change policy in the U.S. military, from Nixon to Obama.
The special issue of the peer-reviewed journal is its first foray into climate change and the editors acknowledge it is a new direction. "Readers might wonder how this global topic impacts the U.S. Marine Corps; however, the two are not such disparate concepts, particularly when we consider the connection between climate change impacts and humanitarian aid and disaster relief operations the Corps has supported as early as 1895," write the editors. "While it is not our intent to take a political or philosophical stance on the issue, we do intend to use this medium to inspire discussion on how U.S. agencies and Service branches address the subject based on operational demands, political pressure, and public opinion."
The five articles, four book reviews, plus an introduction run the gamut from an examination of how climate change is impacting operations in the Pacific and a breakdown of two centuries of public dialogue on climate change to how the Office of Operational Energy is different than past efforts to "green" the military.
A transition from passive neglect to active concern
The introduction by Edward J. Erickson, a professor at the Marine Corps University and retired U.S. Army officer, is a concise summary of how climate change has been incorporated into the Pentagon's operations and policy over the last decade. He traces the transition "from passive neglect in 2006 to active concern in 2015," instigated through a mix of presidential direction and an evolution of priorities within the department itself.
The 2010 National Security Strategy, President Obama's first, was also the first to introduce U.S. government climate policy (though Nixon received and seemed to seriously consider a memo on climate change from White House Counsel Daniel Patrick Moynihan). The National Security Strategy, which is prepared by the White House, gives direction to the military but also other branches of government, and in 2010 it noted "the danger from climate change is real, urgent, and severe."
Afterwards, the Pentagon produced a Quadrennial Defense Review in 2010, an every-four years report to Congress on priorities, threats, and doctrine, and a National Military Strategy in 2011, which describes expected activities and resource allocations. Both of these documents take direction from the National Security Strategy, but otherwise were produced by the military itself and reflect how conceptions of climate change were evolving.
The Quadrennial Defense Review "presented climate change as a problem to be dealt with rather than a problem to be solved," writes Erickson, noting a focus on the operating environment and how climate change will affect various missions and roles. The 2011 strategy, headed by the Chairman of the Joint Chiefs of Staff Admiral Mike Mullen, introduced the idea that demographics will affect strategic risk. Increasing population density in "underdeveloped littoral areas" may make some countries more vulnerable to natural disasters.
In 2014, the next Quadrennial Defense Review reiterated that the U.S. military considers climate change a serious risk, and the Department of Defense released a climate adaptation roadmap in response to executive orders from the White House (the 2014 roadmap is actually the second iteration for the department, but the 2012 version has apparently been taken offline).
"While some might assume that DOD officials are just going through the motions in terms of implementing climate change policies," writes Erickson, "the stipulations for adaptation, and even mitigation, are leading to extensive changes in the department that trickle down into the activities of various U.S. military branches worldwide."
"American service members will find themselves at the intersection of politics and actual events"
Indeed, in response to a congressional inquiry in 2015 asking for specific examples of how climate change was affecting each of the Geographic Combatant Commands (e.g., U.S. Central Command, which coordinates activities in the Middle East and Central Asia), the Pentagon quickly released a detailed response. "The Department of Defense sees climate change as a present security threat, not strictly a long-term risk," the report reads. Each of the Geographic Combatant Commands "share a common assessment of its significance" and "incorporate the risks posed by current and projected climate variations into their planning, resource requirements, and operational considerations."
Over the last 10 years, Erickson notes a trend from "from generalizations to explicit understandings about risk, adaptation, and mitigation." The 2015 National Security Strategy listed eight major risks in order of priority, with climate change coming in at number six – more important than a disruption to the energy market or failed states, but behind an attack on the homeland or allies, a global economic crisis, weapons of mass destruction, and a severe global disease outbreak. The incorporation of climate change into strategy, planning, and doctrine is notable – and the political dialogue has clearly not caught up.
"The DOD has positions and policies about climate changes that are unrelated to causal agencies," Erickson writes, alluding to debate about whether climate change is man-made. "As a matter of policy, the DOD accepts climate change as a reality affecting the present and future operating environment and accepts that American military forces must deal with its operational consequences."
"Regardless of whether the high-level policy decisions resolve themselves, there is absolutely no question that the DOD will have to deal with the real-world consequences of climate change, man-made or otherwise, that have been seen in recent years," he concludes. "Instability driven by natural disasters, migration, and water and food scarcity will surely continue into the future, and American service members will find themselves at the intersection of politics and actual events."
Sources: Marine Corps University Journal, U.S. Department of Defense, Vox, The White House.
Photo Credit: A Marine Sea Knight helicopter provides flood relief in Sindh, Pakistan, September 2010, courtesy of the U.S. Marine Corps.
Topics: adaptation, climate change, conflict, democracy and governance, demography, disaster relief, energy, environment, featured, humanitarian, military, mitigation, population, security, U.S.
A_Siegel
This is a rich issue that is a welcomed addition to the discussion of climate change and national security interests/concerned.
Amid the 'no questions in the debates', the assertion of a desire not to take a 'political or philosophical stance' is a (yet another) sad indicator of how science denial (about climate change) is inhibiting sensible discussion/debate about best paths to deal with real issues.
Tomorrow May Be Too Late: Military Leaders Testify on National Security Challenges of Climate Change


Rowena has been working in Conveyancing in Tasmania since 2001 and joined the Ogilvie Jennings team in 2018. She has extensive experience managing conveyancing files. Rowena has not only worked in law firms but also established and ran her own very successful practice as a Licensed Conveyancer for a number of years.
Rowena knows how stressful property transactions can be for clients. She prides herself on providing high quality service and constant communication to all parties and has good industry relationships with other solicitors, conveyancers, real estate agents and financial institutions, which all make for as smooth as possible outcomes.
Rowena works in our Kingston office and can assist in all aspects of buying, selling and transfer of residential and commercial properties anywhere in Tasmania.


WHITTIER, Calif. (Jan. 24, 2018) – Junior guard Nika Haleftiras (San Diego, Calif. / Our Lady of Peace) of the Caltech women's basketball team picked up the offense with a greater emphasis on three-point shooting at Whittier College on Wednesday evening.
Haleftiras attempted a personal-high 10 three-pointers and connected on three of them to help her to 11 points while playing nearly the entire game. Sophomore guard Samantha D'Costa (San Jose, Calif. / St. Francis) supported Haleftiras with a team-high 16 points and did half of her damage from the free throw line with an 8-for-10 shooting line. She also came up with six rebounds, all of which came on the defensive side and added three assists and two steals. Sophomore guard Grace Peng (San Ramon, Calif. / California) also hit double-figures with 10 points, all of which came from the field.
Caltech put together its best all-around 10 minutes in the fourth quarter, where they outscored Whittier, 17-14. Six different players scored in the quarter and the team defense held the Poets to their fewest points since the opening frame.
Head Coach Bridgette Reyes and the Beavers will return to Pasadena for a 7 p.m. game on Saturday, Jan. 27 against first-place Chapman University.


text:
Q: Django Admin inline for recursive ManyToMany I have the following model with a many-to-many relationship to itself
class Ticket(models.Model):

    STATUS = (
        (0, "Open"),
        (1, "Closed"),
    )
    status = models.SmallIntegerField(default=0,choices=STATUS)
    title = models.CharField(max_length=100)
    replies = models.ManyToManyField('self')
    description = models.TextField()

i am trying to display this model as an inline in the admin, using the following code
class TicketReply(admin.TabularInline):
    model = Ticket.replies.through

however i keep getting this error
<class 'tsn.ticket.models.Ticket_replies'> has more than 1 ForeignKey to <class 'tsn.ticket.models.Ticket'>

so im i doing this wrong, or is this not supported ?

A: May be its' to late, but I try answer this question. Ticket.replies.through is a table to manage many-to-many relations, it has fields from_ticket and to_ticket(FK to model Ticket) and you can set this fields as option fk_name for TabularInline.
class TicketReply(admin.TabularInline):
    model = Ticket.replies.through
    fk_name = 'from_ticket'

redpajama_set_name: RedPajamaStackExchange


text:
Concacaf Champions League: NYCFC makes it look easy in 2022 opener
by Paul Kennedy @pkedit, Feb 16, 2022
New York City FC got two goals from 2021 MLS Golden Boot winner Taty Castellanos in the first half and cruised to a 2-0 win at Costa Rica's Santos de Guapiles in the opening game of the 2022 Concacaf Champions League.
The 2021 MLS champions had plenty of chances for more goals -- Maxi Moralez had a shot that hit off both sides of the goal -- and held on for the last 21 minutes after Uruguayan Santiago Rodriguez was sent off for a red card.
"We had full control of the game," said NYCFC coach Ronnie Deila. "You can see that (Santos) didn't create anything. Even with 10 men, we were really solid and disciplined. Also the big chances we created, we should have scored a little more. When we got the ball to the front three players, we created chances over and over again."
Castellanos, Moralez and Rodriguez were among seven starters in MLS Cup 2021 who started on Tuesday night. With James Sands now at Rangers and Alfredo Morales out with Covid, Gedion Zelalem got the start in midfield. The former Arsenal protege, now 25, started only one game in his first two seasons at NYCFC but was re-signed for 2022.
"I've believed in Gedion all the time," said Deila. "He has been here for two years but has been injured all the time. The reason we have kept him was because we know he has quality that not many players have this in this league. Technically, very gifted, good awareness, good understanding of the game. I have a lot of expectation of Gedion for the future. He's on the right path to get to the level he was at before."
Next up. No stadium in the New York area is available or suitable for Concacaf standards, so the return match will be played at LAFC's Banc of California Stadium on Feb. 23.
2 comments about "Concacaf Champions League: NYCFC makes it look easy in 2022 opener".
R2 Dad, February 16, 2022 at 12:21 p.m.
Santos were so poor, this was not a huge accomplishment. Zalelem in the Pirlo role seems promising--he's just about as mobile, unfortunately. NYCFC outside backs are useless. I just saw backpass after backpass after backpass--it was hurting my eyes, really. Good result, considering.
Santiago 1314, February 16, 2022 at 11:50 p.m.
WOW.... "No stadium in the New York area is available or suitable for Concacaf standards"... Really, with all the Stadiums in New York !!!... Have you seen the Fields in CONcacaCrApF.!?!?!?.... And NY can't find a Field for Home Game.???... We'll I guess we know what City WON'T Be Hosting a World Cup '26 Game.!!!!
More from Soccer America Site
Efrain 'Chico' Chacurian (1924-2019): 'A giant of soccer in the Northeast'
USA-Mexico: A test of youth movements
NWSL: Royals' depth will get early test
USSF's 1988 AGM: The Development Plan, Havelange, Blatter and bananas


text:
Q: How to mock component method using Jest and Enzyme I have a React component that has a text input as one of the children inside the main wrapper. When the input gains focus it calls a function via its onFocus property. So the component's structure is something like this:
<div className="main-wrapper">
  <input type="text" onFocus={this.focusHandler} />
</div>
Elsewhere in the class there is a method named focusHandler that looks something like this
focusHandler = () => {
  //Do whatever it is that focus handlers do.
  //In this case that involves changing the local state, so there is something like
  this.setState({ fieldHasFocus: true });
}
What I would like to do is to have a test (in Jest) that would verify that when the input gains focus the focusHandler() method is called. However, I can't figure out how to put a mock into my test for focusHandler() and to  check whether or not it is called when I simulate('focus') on the input field.

A: You can spy on the before you render the component. You don't need to force update the instance of the component. Declare the spy function at the top of the file before your spec/describe block.
const focusHandlerSpy = jest.spyOn(YourComponent.prototype, 'focusHandler');

Then ...
describe('When the input field is focused', () => {
  beforeEach(() => {
    component.find('input').simulate('focus');
  });

  it('should invoke the focusHandlerSpy function', () => {
    expect(focusHandlerSpy).toHaveBeenCalled();
  });
});

A: Try something like this:
const wrapper = shallow(<YourComponent />);
const focusHandlerSpy = jest.spyOn(wrapper.instance(), 'focusHandler');
wrapper.instance().forceUpdate();

Now your focusHandlerSpy will be called on focus.


text:
Embassy of the Kingdom of Spain
Hightlight
The Embassy of the Kingdom of Spain in Belgrade has updated contact details for the mission, including address, telephone numbers and email address. The page also offers information about who is the head of the embassy and office hours, in addition to information about other Embassy representations located in neighbouring countries. Entry into Spain, if the stay is shorter than ninety days during a period of six months, is regulated by the conditions set out in Regulation (EC) no. 562/2006 of the European Parliament and of the Council of 15 March 2006
Prote Mateje 45, Beograd 11000, Serbia
emb.belgrado@maec.es
http://www.exteriores.gob.es/Embajadas/BELGRADO/en/Pages/inicio.aspx
web@koznazna.com
Hello, I am interested in [Embassy of the Kingdom of Spain]
0 Base on 0 Reviews
Djokovic is not going to Montenegro – Adria Tour canceled!
A new easing of measures introduced during the coronavirus epidemic on June 1
Embassy of the United States of America
Embassy of the United Arab Emirates
Embassy of the United Kingdom of Great Britain and Northern Ireland
Embassy of Ukraine


text:
Q: I Changed the Menu Order, But the Page Order Didn't Change on Front Page First-timer here! I'm trying to change the order of pages on my boardgame webpage, as displayed on the top banner www.mangakagame.com .
Basically, I've used "Edit" in the Dashboard and adjusted all the "order" attributes, but nothing changes. It's still using chronological ordering. The "Simple Page Ordering" plugin didn't do anything either.
Weirder still, I tried to set one of the pages to "Private" but it still shows up in the banner! :/ It just links to an "Oops! That page can not be found." So I had to set it to public again, at least temporarily...
I assume this may be due to something in the WP theme I'm using (Auberge), but I can't figure it out. If this requires fiddling with the actual CSS, I don't even know where to begin. If anyone has any suggestions, I'd be super grateful.
Many thanks,
Jason (@mockman)

A: By default, posts and pages are sorted after the date. If you want sort pages by "order" field, which is visible on edit page, you have to set orderby parameter:
add_action('pre_get_posts', 'change_order');

function change_order($query) {
    if ( is_front_page() || is_home() ) {
        $query->set( 'orderby', 'menu_order' );
        $query->set( 'order', 'ASC' );
    }
    return $query;
}

Put code in functions.php file.
More about orderby parameters you will find here.


text:
The Great Mosque of Salé (, Masjid Al Aadam) is a mosque in Salé, Morocco. Covering an area of , it is the third-largest mosque in Morocco, and was originally built between 1028 and 1029. It has been destroyed and rebuilt several times since the original construction. It was built in Almoravid and Almohad architectural styles, and the mosque features nine gates. It was severely damaged in the Bombardment of Salé of 1851, and was briefly closed during the French protectorate in Morocco.

History

The mosque has been destroyed and rebuilt many times since the beginning of the city's history. A first mosque was built under the orders of Temim Ibn Ziri from 1028 to 1029. A new, larger mosque was built in 1196 under Abu Yusuf Yaqub al-Mansur's orders after the old mosque's roof had collapsed. The architect of the Almohad building was known as al-Gharnati – a name which suggests he was from Granada in Al-Andalus. According to historian Abd Al-Mun'im Al-Hasidi, 700 French slaves were involved in the reconstruction under al-Mansur's orders.

In 1260 Salé was sacked and occupied by Castilian forces, during which 3000 women, children and elderly residents of the city were gathered in the mosque and taken as slaves for Seville. The Marinid sultan Abu Yusuf Yaqub reconquered the city soon afterwards. In 1342 another Marinid sultan, Abu al-Hasan, built the Madrasa of Abu al-Hasan next to the mosque, adding to its development as a religious and intellectual center of the city.

The mosque was largely rebuilt and modified over time, and its present appearance dates from the 18th century, when the city was part of the Republic of Bou Regreg. In 1851, Salé was bombarded by French forces, and the mosque was severely damaged after being struck by six cannonballs.

During the French protectorate in Morocco, the mosque was used for nationalist gatherings in the 1930s, led by people such as Said Hajji, Ahmed Maaninou, Boubker el-Kadiri, and Abu Bakr Zniber. The French protectorate later closed the mosque to prevent it being used as a place to awaken awareness of nationalist sentiment, but it later re-opened.

Gallery

See also
 Madrasa of Abu al-Hasan
List of mosques in Morocco

References

Religious buildings and structures completed in 1029
11th-century mosques
Mosques in Morocco
Almohad architecture
Buildings and structures in Salé

redpajama_set_name: RedPajamaWikipedia


One of the most lovely things to do in the area is Lake Vyrnwy, and we find that this beautiful attraction has so much charm. We see visitors all through the year because the attraction, by its very nature, is a treat both in summer and winter. Attractions like this in the Snowdonia region are an excellent reason to invest in a holiday home to take advantage of them whenever you would like.
We've enjoyed quite a few trips to the lake in spring, summer, autumn and winter. As such, we've taken the time to put together a few routes for your enjoyment.
Probably the most popular of all of the walks around Lake Vyrnwy, and it is very much one of the most enjoyable. Starting, and finishing at the Rhiwargor Car Paark, this trail is 2.3 miles of sights and sounds, featuring mountain views as well as the gorgeous Rhiwargor waterfall. All-in-all, the walk is a pleasant one which takes place over grass tracks with no steep climbs, though it should be noted that you will have to cross a stream with stepping stones in order to get the most of it – making it not so wonderful for those with mobility issues.
The Llechwedd-du Walk is absolutely perfect for those that may struggle with some of the more challenging treks in the area, but it is also a walk that certainly doesn't shortchange you when it comes to things to see. Llechwedd-du starts from the track opposite the boathouse on the south side of the lake, and takes place over 5 miles through the forest. The track is well-maintained and takes you through clearings, conifers and birch trees, while being nice and gentle. For those who don't want to risk a slightly boggy section, you can retrace your outward route in order to continue on without risking any mishaps.
For those who prefer a slightly shorter route for their walk, the Llechwedd-du short trail affords 1.7 miles. It starts from the RSPB shop and leads along roads and tracks, while also allowing you fantastic views of the lake, tower, dam and all of the woodland birds you might be fortunate enough to happen upon as you go.
Starting from the northernmost part of Lake Vyrnwy, this trail is 4.3 miles long, and goes along forest tracks as well as roads, and has a very gentle incline. You'll be able to take in the sight of majestic, mature conifer trees on this walk, as well as enjoy a view of the lake that is quite charming.
Only a mile to stroll, but a very good one. This walk beginds at Llanwyddyn Villages' car park, and takes you alongside the river and the forest. A short one, but fantastic should woodland walks be your happy place.
We hope that this little list is a good starting point for your adventures! Please keep in mind that Lake Vyrnwy is a RSPB Reserve, which affords you a look at all manner of rare species of birds. This place is one of the very loveliest in the region, and we very much look forward to hearing your impressions of this beautiful attraction.


* NOTE: If Multi-Orders are placed (from different companies) Shipping Policies & Returns are handled differently. Please read! All orders, reguardless of where your items(s) are shipped from, is one low shipping rate of $8.95. Overnight Shipping not available at this time.
* If item(s) are not in-stock, your purchase amount for those items will be credited back to you within 24 hours.
* All order invoices and tracking numbers will be emailed to you.
Items will be shipped within 24 to 48 hours, Monday thru Friday, EST. Multi –orders may be shipped separately, at no extra charge to you, and may arrive at different times depending on the location of the delivery address. If orders are multi-orders expect items to arrive from T&A within 2 to 10 days of placement.
*If an item selected is not in stock, our representatives will contact you via e-mail with the status of your order, with an averaged time the item(s) will be shipped to you. If your entire order is not in stock, we will credit back your enire purchase amount within 24 hours. If you would like to cancel your order please contact our customer service representatives.
All packages will be shipped from T&A are in discreet packaging; Plain box or envelope, or Priority packaging. The return address will only appear on the packaging, without the word "lingerie".
All packages are sent with a Signature Confirmation slip to insure the package is sent directly to you or to the Party being sent to. All orders that meet or exceed $250.00 are subject to a security check. A T&A Lingerie representative will contact you via phone, to verify the card holder is as stated. We provide this service to secure identity and card theft to protect all of our clients.
We ship Priority Mail, Express Mail, and UPS Ground based on the value of the package and location of the delivery address.
We ship to billing addresses *Street addresses, and PO Boxes. If your package needs to be shipped UPS, and your billing address is a PO Box, we will contact you via e-mail for an alternate address. UPS will not deliver to PO Boxes.
- All clothing MUST have original tags attached with NO sign of wear or damage.
- If item includes a thong or a g-string, they MUST be attached to the side of the garment as originally sent.
- Packaged clothing MUST be unopened.
* Due to the nature of these products, the laws on Health Regulation, and the policies set forth by T&A Lingerie all listed are final sale. No exceptions.
All exchanges must be postmarked within 14 days of initial receipt. A copy of the receipt must be included. The customer is responsible for all shipping costs.
We will be happy to hold any item(s) you choose for exchange, as long as the item(s) are in stock. To insure you receive the item(s) of choice, please call (800) 481-0069, Mon.-Fri. 11am-6pm, EST. Exchange item(s) will only be sent upon arrival of previous purchase. All rules and conditions on exchanging item(s) MUST apply, or your exchange will be null and void, and shipped back to you, at your expense.
Allure Leather Lingerie ships UPS or FedEx, Ground. Packages are expected to arrive to you within 6-24 days of placement. PO Boxes, are not supported.
Regardless of price or quantity of your order, shipping fee's are one low rate of $8.95. Your payment will refunded within 24 hours if the item(s) ordered are not in-stock. If placing a multi order (items being shipped from other companies, as well), all items will be shipped separately in discrete packaging. Order Invoices, Return Policies and Tracking Numbers will be emailed to you.
*All North Carolina Residents will have sales tax of 8.25% added to the order according to the merchandise total. Sorry, it's State Law.
Return Policy: All Items listed under this company are Final Sale!
Exchange ONLY can be done if the item that was shipped was not the item ordered, or has a factory defect. All items that fall under this category have to be Shipped to T&A Lingerie for inspection, before it can be exchanged. Inspections include product verification and wear/damage. If item(s) pass inspection there will be a 10% restocking fee along with a $5.00 charge to cover the Shipping charges, when being sent back to Allure Leather Lingerie. These fee's will be taken out your original order. The original Shipping Fee's will NOT be refunded. All shipping fee's are the sole responsibility of the buyer. If you have any questions Contact your Customer Service Representative.
Body Language Fashions ships UPS or FedEx, Ground. Packages are expected to arrive to you within 6-14 days of placement. PO Boxes, are not supported.
Exchange ONLY can be done if the item that was shipped was not the item ordered, or has a factory defect. All items that fall under this category have to be Shipped to T&A Lingerie for inspection, before it can be exchanged. Inspections include product verification and wear/damage. If item(s) pass inspection there will be a 10% restocking fee along with a $5.00 charge to cover the Shipping charges, when being sent back to Body Language Fashions. These fee's will be taken out your original order. The original Shipping Fee's will NOT be refunded. All shipping fee's are the sole responsibility of the buyer. If you have any questions Contact your Customer Service Representative.
Ellie Shoes ships UPS or FedEx, Ground. Packages are expected to arrive to you within 6-14 days of placement. PO Boxes, are not supported.
Exchange ONLY can be done if the item that was shipped was not the item ordered, or has a factory defect. All items that fall under this category have to be Shipped to T&A Lingerie for inspection, before it can be exchanged. Inspections include product verification and wear/damage. If item(s) pass inspection there will be a 10% restocking fee along with a $5.00 charge to cover the Shipping charges, when being sent back to Ellie Shoes. These fee's will be taken out your original order. The original Shipping Fee's will NOT be refunded. All shipping fee's are the sole responsibility of the buyer. If you have any questions Contact your Customer Service Representative.
Our price for shipping and handling on Domestic orders is $15 per item, and are automatically added to your Shopping Cart. Your order will ship in discrete packaging via US Postal Service. Shipping and handling fees are non refundable.
* We do not accept International Orders at this time.
If an order is returned to us for non-delivery due to an error in your address details, then we reserve the right to invoice for any additional delivery charges, which will be deducted from your original purchase.
Because our products may come in contact with bodily fluids during use, we sell only brand new products. We cannot accept returns unless there is a manufacturing defect. We make every effort to ship only high quality items and we examine each item carefully before shipping. If you do find a manufacturing fault in our product, please contact us within 10 days following receipt to arrange for returning the item to us. Upon receipt of your return, we will determine whether repair or replacement is needed. Once you have approval for the return, please clean your item, pack it carefully, and return it to us.
If you believe your item may be damaged in transit, do not accept the merchandise. Request a damage notification slip from the shipper and notify us immediately.


Long before the Trump trade war was propelling the agriculture economy into new realms of uncertainty, many producers were already struggling with persistently low commodity prices.
Under the yoke of a depressed agriculture economy, a growing cadre of family farmers have found success with value-added agriculture and tapping into growing markets for organic and local and regional food and farm products.
Originally created in the early 2000s, during another time of low commodity prices, the Value Added Producer Grant Program (VAPG) has been a critical tool in helping family farmers and ranchers diversify their operations, be less dependent on commodity markets and become price-makers instead of price-takers.
Earlier this summer the U.S. Department of Agriculture (USDA) quietly made the latest round of awards for the program, combining fiscal year (FY) 2017 and FY 2018 funding to provide 248 farm businesses in 47 states and Puerto Rico with $36.4 million in VAPG grants.
Authorized and funded through the Farm Bill, VAPG is a popular program that routinely receives far more applications than the program has resources to support.
Sadly, at a time when family farmers and ranchers are desperately in need of new tools to address risk and diversify their operations, the future of VAPG is twisting in the wind.
A recent Economic Research Service study, released earlier this year, demonstrated what many producers and sustainable agriculture advocates already knew – VAPG is an effective tool for supporting farm viability, job creation and fostering the entrepreneurial spirit.
Despite the success of the program and the need for new tools to help producers diversify their operations and manage risk, especially in context of the ongoing trade disruptions, the future of VAPG is uncertain.
A lapsed Farm Bill will be highly problematic for VAPG because farmers and ranchers have already used all of the mandatory funding provided by the 2014 Farm Bill (a total of $63 million). This means that no farm bill funding will be available for the program unless the new farm bill (or a farm bill extension) provides it. We expect available dollars for the program to be cut by at least 50 percent in the absence of farm bill funding. Fortunately, the program will not come to complete hault because, in addition to its farm bill funding, it receives a limited amount of discretionary funding through the annual appropriations process. However, without the significant investment of mandatory funding through the farm bill, USDA's capacity to help family farmers and ranchers develop and tap-into new markets will be severely limited.
Administered by the USDA Rural Business Cooperative Service (RBCS), VAPG provides competitive grants to individual independent agricultural producers, groups of independent producers, producer-controlled entities, producer associations, and farmer or rancher cooperatives to create or develop value-added producer-owned businesses. These grants may be used to fund business and marketing plans, feasibility studies, or to acquire working capital to operate and expand a value-added business venture or alliance.
The Mill at Janie's Farm was awarded a $90,000 working capital grant to expand regional marketing and sales, and assist in ongoing new product development. The Mill at Jaine's Farm is an outgrowth of Janie's Farm Organics a family farm in central Illinois that raises organic corn, soybeans, wheat and oats on over 2,400 acres of USDA Certified Organic cropland. The Mill at Janie's Farm is milling and marketing both grains grown by Jaine's Farm Organics and other family farmers in the region.
Doudlah Farms, in Wisconsin, was awarded $189,730 grant to support branding their own organic beans and grains, and begin selling directly into regional markets. Over the last ten years, owner Mark Doudlah has been transitioning his conventional crop fields to organic, and in the process has developed innovative production practices that he shares with other farmers at conference presentations across the country. Now with 1800+ acres in organic production, Mark and his wife Lucy are partnering with processors, market resources, and retail operations (including CSAs, cooperatives, and others) to sell their new labeled product.
Much is at stake in the coming days and weeks for VAPG and the farmers, ranchers, and communities who benefit from the program. The National Sustainable Agriculture Coalition will continue to urge Congress to quickly pass a farm bill that includes funding and authority for value-added agriculture as part of the new Local Agriculture Market Program. Stay tuned for regular updates on the status of ongoing farm bill negotiations!


March 11, 2010 (La Mesa) – Try your luck at Monte Carlo-style gaming tables amid a night of glitz, glamour and prizes galore at La Mesa Chamber of Commerce's Casino Royale Night on Thursday, March 18th . The event takes place in the Golden Ballroom at the Town & Country Hotel, where a silent auction, raffle, and elegant food stations will all be part of the fun.
Last year's event drew more than 175 guests who tried their luck at roulette, blackjack, and other favorites of James Bond, the dashing fictional character popularized in Ian Fleming novels and action movie thrillers. At the 2009 Casino Night, Jeff Hallman of Hallman Jewelers portrayed Bond, while England obligingly filled the role of a "Bond girl" aglitter in jewels and evening gown.
Festivities will take place from 5:30 to 8:30 p.m. Cocktail wear or business attire is suggested. Tickets cost $50. Major sponsorships are also available.
For more information or to RSVP, visit http://www.lamesachamber.net/casino.php or call Mary England at (619)251-7730.