text:
Linguana
It is a rare occasion that I jump into a book knowing absolutely nothing about the story or author. The reason this showed up on my radar was Seanan McGuire raving about it on the SF Squeecast. She managed to make it sound juicy and fun without giving anything away and, having now read it, I believe the best way to experience The Girl With All The Gifts is to just dive in. The synopsis from GoodReads does an okay job, giving you a feel of what to expect without spoiling the little twists. Still, it doesn't hurt to skip it.
by M.R. Carey
Published by: Orbit, January 2014
My rating: 7,5/10
First sentence: Her name is Melanie.
Melanie is a very special girl. Dr Caldwell calls her 'our little genius'. Every morning, Melanie waits in her cell to be collected for class. When they come for her, Sergeant keeps his gun pointing at her while two of his people strap her into the wheelchair. She thinks they don't like her. She jokes that she won't bite, but they don't laugh. Melanie loves school. She loves learning about spelling and sums and the world outside the classroom and the children's cells. She tells her favourite teacher all the things she'll do when she grows up. Melanie doesn't know why this makes Miss Justineau look sad.
Melanie's world is small but beloved. Her entire world is made up of her cell, the corridor outside it, and the two doors at each end. One – the red one – leads to the classroom, a place where she learns about the world, about the laws of physics and mathematics, but especially about stories. Her favorites are the Greek Myths, and of those, her favorite is the story of Pandora's box. The door at the other end of the corridor has been closed for as long as Melanie can remember...
Reading The Girl With All The Gifts is a little bit like poking through a tiny window into Melanie's life. Over time, the window opens up a little and we get to see more of what goes on around her. But at first, we – like Melanie – know only her cell, the classroom, and the showers. It's not too hard to guess why school children are kept in a bunker-like building if you read closely. Something devastating must have happened to the outside world and for an avid reader of SFF it becomes fairly obvious what the cause is.
However, there are more layers to this story than a simple post-apocalyptic how-to-keep-on-living narrative. Melanie is front and center for a long time. As the story opens up, chapters switch between her viewpoint and that of other characters, but Melanie remained my absolute favorite. Now it's getting really hard to talk about this book without giving too much away. Let's just say: This story uses a trope. A very, very well-known trope with a newish spin. I'm not particularly fond of this kind of book because it's been done to death and there's usually not anything new to discover. But The Girl With All the Gifts has one thing going for it that kept me hooked even after the mysteries were solved: Melanie.
Melanie sees the world through the eyes of a much younger child. Being approximately 10 years old, she may well be classified as a genius. Her hunger for knowledge is insatiable and she enjoys making connections. But even for a smart kid, being suddenly thrown into a vast world is overwhelming, especially if you've only heard about it in lessons but never experienced it for yourself. There is a good reason Melanie and her classmates were kept locked up. The side characters – Sergeant Parks, Helen Justineau, Dr. Caldwell, and young Kieran Gallagher – were all sympathetic and interesting in their way, but like I said before, none of them drew me in as much as Melanie did.
The plot as such starts out wonderfully intriguing. If you go in completely oblivious it's a thrillride to figure out what is going on. Once certain truths about the world are established, however, the story drifts off into territory that is plastered with cliché. Melanie's presence still lends it originality and enough to keep readers interested, but for me it was a little sad to see such a great idea end up more or less like any other story involving the same SFnal trope. Not that it isn't well done. It's just not something that I haven't seen many times before.
As the characters meander through their devastated world, Melanie in tow, the focus of the story shifts toward problem-solving and exploring what it means to be human. I wasn't bored exactly because I had come to care for the characters (even the despicable one) but my interest wasn't anywhere near the level it held at the beginning of the book. This may all have to do with me not liking the central trope very much. That said, I was all the more thrilled to read the ending. I don't think in all the movies I've watched, and books I've read, the make use of you-know-what I've ever come across an ending quite as poignant and sad and full of hope. It left me breathless.
MY RATING: 7,5/10 – Very good
https://sffbookreview.wordpress.com/2014/04/28/m-r-carey-the-girl-with-all-the-gifts/


text:
//-----------------------------------------------------------------------------
// F3xx_Blink_Control_F340.c
//-----------------------------------------------------------------------------
// Copyright 2005 Silicon Laboratories, Inc.
// http://www.silabs.com
//
// Program Description:
//
// Contains functions that control the LEDs.
//
//
// How To Test:    See Readme.txt
//
//
// FID             3XX000003
// Target:         C8051F32x/C8051F340
// Tool chain:     Keil C51 7.50 / Keil EVAL C51
//                 Silicon Laboratories IDE version 2.6
// Command Line:   See Readme.txt
// Project Name:   F3xx_BlinkyExample
//
// Release 1.1
//    -Added feature reports for dimming controls
//    -Added PCA dimmer functionality
//    -16 NOV 2006
// Release 1.0
//    -Initial Revision (PD)
//    -07 DEC 2005
//
//-----------------------------------------------------------------------------
// Header Files
//-----------------------------------------------------------------------------
#include "C8051F3xx.h"
#include "F3xx_Talk_Control.h"
#include "F3xx_USB0_InterruptServiceRoutine.h"
#include "F3xx_USB0_Register.h"

//-----------------------------------------------------------------------------
// Definitions
//-----------------------------------------------------------------------------
#define SYSCLK             12000000    // SYSCLK frequency in Hz

// USB clock selections (SFR CLKSEL)
#define USB_4X_CLOCK       0x00        // Select 4x clock multiplier, for USB
#define USB_INT_OSC_DIV_2  0x10        // Full Speed
#define USB_EXT_OSC        0x20
#define USB_EXT_OSC_DIV_2  0x30
#define USB_EXT_OSC_DIV_3  0x40
#define USB_EXT_OSC_DIV_4  0x50

// System clock selections (SFR CLKSEL)
#define SYS_INT_OSC        0x00        // Select to use internal oscillator
#define SYS_EXT_OSC        0x01        // Select to use an external oscillator
#define SYS_4X_DIV_2       0x02

//	sbit Led1 = P2^2;                      // LED='1' means ON
//	sbit Led2 = P2^3;
sbit Oem = P2^0;

#define ON  1
#define OFF 0

//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F32x
//-----------------------------------------------------------------------------
sfr16 TMR2RL   = 0xca;                   // Timer2 reload value
sfr16 TMR2     = 0xcc;                   // Timer2 counter

// ----------------------------------------------------------------------------
// Global Variable Declarations
// ----------------------------------------------------------------------------
//unsigned char BLINK_PATTERN[8] = {0x1,0x2,0x1,0x2,0x1,0x2,0x1,0x2};
//unsigned int xdata BLINK_RATE=100;
//unsigned char xdata BLINK_SELECTOR;
//unsigned char xdata TALK_ENABLE=0;
//unsigned char xdata TALK_DATA;
//unsigned char xdata BLINK_SELECTORUPDATE;
unsigned char xdata TALK_STATE=0;
//unsigned char xdata BLINK_LED2ACTIVE;
//unsigned char xdata BLINK_DIMMER;
//unsigned char xdata BLINK_DIMMER_SUCCESS;
// ----------------------------------------------------------------------------
// Local Function Prototypes
// ----------------------------------------------------------------------------
void Timer0_Init(void);
void Sysclk_Init(void);
void Port_Init(void);
void Usb_Init(void);
void Timer2_Init(void);
void Adc_Init(void);
void Timer0_Init(void);
void PCA_Init(void);
void Delay(void);

//void Blink_Update(void);

// ----------------------------------------------------------------------------
// Global Variables
// ----------------------------------------------------------------------------
// Last packet received from host
unsigned char xdata OUT_PACKET[9] = {0,0,0,0,0,0,0,0,0};

// Next packet to send to host
unsigned char xdata IN_PACKET[3]  = {0,0,0};

//-----------------------------------------------------------------------------
// Interrupt Service Routines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Timer0_ISR
//-----------------------------------------------------------------------------

void Timer0_ISR (void) interrupt 1
{
	//Led1 = ~Oem;
	//Led1 = ~Led1;
	if(!Oem)
	{
		TALK_STATE = 0x1;
			//Led1 = 1;
			PCA0CPH0 = 0x6;
    	PCA0CPH1 = 0x6;
	}
	else
	{
		TALK_STATE = 0x0;
			//Led1 = 0;
			PCA0CPH0 = 0xFF;
  		PCA0CPH1 = 0xFF;
	}

}

//-----------------------------------------------------------------------------
// Adc_ConvComplete_ISR
//-----------------------------------------------------------------------------
// Called after a conversion of the ADC has finished
// - Updates the appropriate variable for potentiometer
//
//
void Adc_ConvComplete_ISR(void) interrupt 10
{

   AD0INT = 0;
}

// ----------------------------------------------------------------------------
// Initialization Routines
// ----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// System_Init (void)
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// This top-level initialization routine calls all support routine.
//
// ----------------------------------------------------------------------------
void System_Init(void)
{
   PCA0MD &= ~0x40;                    // Disable Watchdog timer

   Sysclk_Init();                      // Initialize oscillator
   Port_Init();                        // Initialize crossbar and GPIO
   Usb_Init();                         // Initialize USB0
   Timer2_Init();                      // Initialize timer2
   Adc_Init();
   Timer0_Init();
   PCA_Init();

}

//-----------------------------------------------------------------------------
// Sysclk_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// Initialize system clock to maximum frequency.
//
// ----------------------------------------------------------------------------
void Sysclk_Init(void)
{
#ifdef _USB_LOW_SPEED_

   OSCICN |= 0x03;                     // Configure internal oscillator for
                                       // its maximum frequency and enable
                                       // missing clock detector

   CLKSEL  = SYS_INT_OSC;              // Select System clock
   CLKSEL |= USB_INT_OSC_DIV_2;        // Select USB clock
#else
   OSCICN |= 0x03;                     // Configure internal oscillator for
                                       // its maximum frequency and enable
                                       // missing clock detector

   CLKMUL  = 0x00;                     // Select internal oscillator as
                                       // input to clock multiplier

   CLKMUL |= 0x80;                     // Enable clock multiplier
   Delay();                            // Delay for clock multiplier to begin
   CLKMUL |= 0xC0;                     // Initialize the clock multiplier
   Delay();                            // Delay for clock multiplier to begin

   while(!(CLKMUL & 0x20));            // Wait for multiplier to lock
   CLKSEL  = SYS_INT_OSC;              // Select system clock
   CLKSEL |= USB_4X_CLOCK;             // Select USB clock
#endif  /* _USB_LOW_SPEED_ */
}

//-----------------------------------------------------------------------------
// ADC0_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Configures ADC for single ended continuous conversion or Timer2
//
// ----------------------------------------------------------------------------
void Adc_Init(void)
{
   REF0CN  = 0x0E;                     // Enable voltage reference VREF
   AMX0P       = 0x04;                 // switch to potentiometer
   ADC0CF      = 0xFC;                 // place ADC0 in left-adjusted mode
   AMX0N = 0x1F;                       // Single ended mode
                                       // (negative input = gnd)

   ADC0CF  = 0xFC;                     // SAR Period 0x1F, Left adjusted output

   ADC0CN  = 0xC2;                     // Continuous converion on timer 2
                                       // overflow with low power tracking
                                       // mode on

   EIE1   |= 0x08;                     // Enable conversion complete interrupt
}

// ----------------------------------------------------------------------------
// Port_Init
// ----------------------------------------------------------------------------
// Routine configure the Crossbar and GPIO ports.
//
void Port_Init(void)
{
   P0SKIP = 0xFF;                      // Route no peripherals to Port 0
   P1SKIP = 0xFF;                      // Route no peripherals to Port 1
   P2SKIP = 0x03;                      // Skip switches
   P2MDIN   = ~(0x20);                 // Port 2 pin 5 set as analog input
   P2MDOUT |= 0x0C;                    // Port 2 pins 2,3 set high impedance
   P2SKIP  |= 0x20;                    // Port 2 pin 5 skipped by crossbar*/
   XBR0     = 0x00;
   XBR1     = 0x42;                    // Enable Crossbar, enable 2 PCA chan.

	//Led1 = 0;
}

// ----------------------------------------------------------------------------
// PCA_Init
// ----------------------------------------------------------------------------
// Configures two PCA channels to act in 8-bit PWM mode.
//
void PCA_Init (void)
{
   PCA0CN = 0x40;                      // Enable PCA counter
   PCA0MD = 0x08;                      // PCA operation suspended when in idle
   PCA0CPM0 = 0x42;                    // Configure channel 0 to 8-bit PWM
   PCA0CPM1 = 0x42;                    // Configure channel 1 to 8-bit PWM
}

//-----------------------------------------------------------------------------
// USB0_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Initialize USB0
// - Enable USB0 interrupts
// - Enable USB0 transceiver
// - Enable USB0 with suspend detection
//
// ----------------------------------------------------------------------------
void Usb_Init(void)
{
   POLL_WRITE_BYTE(POWER,  0x08);      // Force Asynchronous USB Reset
   POLL_WRITE_BYTE(IN1IE,  0x07);      // Enable Endpoint 0-2 in interrupts
   POLL_WRITE_BYTE(OUT1IE, 0x07);      // Enable Endpoint 0-2 out interrupts
   POLL_WRITE_BYTE(CMIE,   0x07);      // Enable Reset, Resume, and Suspend
                                       // interrupts
#ifdef _USB_LOW_SPEED_
   USB0XCN = 0xC0;                     // Enable transceiver; select low speed
   POLL_WRITE_BYTE(CLKREC, 0xA0);      // Enable clock recovery; single-step
                                       // mode disabled; low speed mode enabled
#else
   USB0XCN = 0xE0;                     // Enable transceiver; select full speed
   POLL_WRITE_BYTE(CLKREC, 0x80);      // Enable clock recovery, single-step
                                       // mode disabled
#endif /* _USB_LOW_SPEED_ */

   EIE1 |= 0x02;                       // Enable USB0 Interrupts
   EA = 1;                             // Global Interrupt enable
                                       // Enable USB0 by clearing the USB
                                       // Inhibit bit
   POLL_WRITE_BYTE(POWER,  0x01);      // and enable suspend detection
}

//-----------------------------------------------------------------------------
// Timer_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Timer 2 reload, used to check if switch pressed on overflow and
// used for ADC continuous conversion
//
// ----------------------------------------------------------------------------
void Timer2_Init(void)
{
   TMR2CN  = 0x00;                     // Stop Timer2; Clear TF2;

   CKCON  &= ~0xF0;                    // Timer2 clocked based on T2XCLK;
   TMR2RL  = 0;                        // Initialize reload value
   TMR2    = 0xffff;                   // Set to reload immediately

   TR2     = 1;                        // Start Timer2
}

//-----------------------------------------------------------------------------
// Timer0_Init()
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// Configure and enable Timer 0.
//
//-----------------------------------------------------------------------------
void Timer0_Init()
{
   TCON      = 0x10;
   TMOD      = 0x02;
   CKCON     = 0x02;
   TH0       = -0xFA;
   ET0 = 1;                            // Enable Timer 0 as interrupt source
}

//-----------------------------------------------------------------------------
// Delay
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// Used for a small pause, approximately 80 us in Full Speed,
// and 1 ms when clock is configured for Low Speed
//
// ----------------------------------------------------------------------------
void Delay(void)
{

   int x;
   for(x = 0;x < 500;x)
      x++;

}

redpajama_set_name: RedPajamaGithub


Shared Time Human Resources Management, Inc. works with your company to identify position requirements, implement recruitment programs, and initiate employee assessments to get the most out of your recruiting effort. Shared Time Human Resources Management, Inc. can place a qualified recruiter with your company to handle the complete hiring process.
Once your company has hired the best employees, the next step is getting the most from them. Shared Time Human Resources Management, Inc. works with our client companies to develop performance systems, job analytics and retention programs that leverage employee talent and align to organizational goals. Talent management services from Shared Time Human Resources Management, Inc. help your company minimize staffing turnover costs and maximize employee strengths.
Stay competitive in the job market. Shared Time Human Resources Management, Inc. works with clients to develop budget friendly and attractive employee compensation plans. We can put together executive, merit budget, and sales compensation plans.
Keep rising employee health care costs down. An employer's total benefit costs can be as much as 40 percent of the company's operating budget. Shared Time Human Resources Management, Inc. develops cost-containment strategies that meet business objectives. We offer health care benefits planning, benefit programs, and employee contribution programs.
Workplace conflict can become a costly and time-consuming process if it isn't quickly addressed and fairly managed. Resolve employee relations issues before they escalate. Shared Time Human Resources Management, Inc. performs unbiased employee investigations that quickly and discretely resolve workplace concerns.
Mitigate workplace issues before they escalate. Shared Time Human Resources Management, Inc. conducts risk management and workplace audits to identify potential areas of improvement before they become costly issues.
Employers are required by the federal Employee Retirement Income Security Act of 1974 (ERISA) to disclose health and pension benefit plan details to employees. Shared Time Human Resources Management, Inc. works with your team to develop ERISA compliance wraps and documents that share this information and meet federal requirements.
Middle market businesses sell for record valuations today and many business owners have taken notice. STHRM, Inc. conducts pre-sale human resources due-diligence audits to spot HR problems before the buyer does and fix them before the sale process starts, leading to a smooth sale at a higher price.
Shared Time Human Resources, Inc. works with you to develop your company's employee handbook. Your employee handbook is a valuable written communication tool for both the employer and employee.


text:
var comeOnStagePrefix = 'comeOnStage_';
var maxFrameNum4Stage = 19;

var ComeOnStageAnimation = cc.Sprite.extend({
  ctor: function() {
    this._super();
    this.init();
  },

  init: function() {
    if(this._super()){
      // come on stage sprite
      var comeOnStageSprite = cc.Sprite.createWithSpriteFrameName(comeOnStagePrefix + "1.png");
      comeOnStageSprite.setPosition(0, 0);
      this.addChild(comeOnStageSprite);

      var animFrames = [];
      for (var i = 1; i <= maxFrameNum4Stage; i++) {
        var frame = gSpriteFrameCache.getSpriteFrame(comeOnStagePrefix + i + ".png");
        animFrames.push(frame);
      }

      var rawAnim = cc.Animation.create(animFrames, 0.1);
      var animation = cc.Animate.create(rawAnim);
      comeOnStageSprite.runAction(cc.RepeatForever.create(animation));
      // comeOnStageSprite.runAction(animation);
    }
  }
});


text:
Q: Is it OK for Time Machine to take a long time to decrypt a freshly formatted encrypted disk? I'm new to Time Machine. I just this week got an external hard disk and am starting to use it. My Time Machine backups were spending a significant amount of time in the encryption phase. Upon reading this:
https://www.howtogeek.com/305540/how-to-encrypt-your-macs-time-machine-backup/
I thought a better option would be to format the disk as Mac OS Extended (Journaled, Encrypted) instead of the corresponding unencrypted format. If I understand things right I could then do decrypted backups via Time Machine instead of encrypted backups, leaving the encryption up to the OS's writing to the disk via the encrypted file system format. It seems, judging from the question and answers here, that what I'm doing should be reasonable:
Difference between enabling Time Machine's "Encrypt Backups" option, and encrypting from Disk Utility?
So I erased my external drive which only had a few days backups anyway and reformatted it as Mac OS Extended (Journaled, Encrypted). But when I added the disk via Time Machine, selected to not encrypt it, and entered my encryption password, I get a message saying this:
This Core Storage logical volume is already decrypting.

Wait, what? It's decrypting?  Why does it need to decrypt anything? The disk is formatted, empty, and ready to fill with data, right?  I suppose it doesn't know how full or empty the disk is because the entire disk is encrypted? It has been running, decrypting, for quite a few hours and diskutil cs list shows it as only 12% done:
$ diskutil cs list
CoreStorage logical volume groups (1 found)
|
+-- Logical Volume Group XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    =========================================================
    Name:         <name>
    Status:       Online
    Size:         2000021315584 B (2.0 TB)
    Free Space:   9392128 B (9.4 MB)
    |
    +-< Physical Volume XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    |   ----------------------------------------------------
    |   Index:    0
    |   Disk:     disk2s2
    |   Status:   Online
    |   Size:     2000021315584 B (2.0 TB)
    |
    +-> Logical Volume Family XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
        ----------------------------------------------------------
        Encryption Type:         AES-XTS
        Encryption Status:       Unlocked
        Conversion Status:       Converting (backward)
        Reversion State:         Decrypting
        High Level Queries:      Not Fully Secure
        |                        Has Visible Users
        |                        Has Volume Key
        |
        +-> Logical Volume XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
            ---------------------------------------------------
            Disk:                  disk3
            Status:                Online
            Size (Total):          1999659597824 B (2.0 TB)
            Conversion Progress:   12%
            Revertible:            No
            LV Name:               WDExternalDrive
            Volume Name:           WDExternalDrive
            Content Hint:          Apple_HFS

Note, in particular:
Reversion State:         Decrypting

and:
Conversion Progress:   12%

Can someone explain to me what is going on? I'm concerned I'm doing something wrong. When it says that it is decrypting, is it decrypting the freshly encrypted drive so that my snapshots will be stored plaintext on the drive? That's clearly not what I want.

Update
After waiting all weekend, the status now shows that the disk conversion process is completed:
$ diskutil cs list
CoreStorage logical volume groups (1 found)
|
+-- Logical Volume Group XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    =========================================================
    Name:         WDExternalDrive
    Status:       Online
    Size:         2000021315584 B (2.0 TB)
    Free Space:   9392128 B (9.4 MB)
    |
    +-< Physical Volume XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    |   ----------------------------------------------------
    |   Index:    0
    |   Disk:     disk2s2
    |   Status:   Online
    |   Size:     2000021315584 B (2.0 TB)
    |
    +-> Logical Volume Family XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
        ----------------------------------------------------------
        Encryption Type:         None
        |
        +-> Logical Volume XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
            ---------------------------------------------------
            Disk:                  disk3
            Status:                Online
            Size (Total):          1999659597824 B (2.0 TB)
            Conversion Progress:   Complete
            Revertible:            No
            LV Name:               WDExternalDrive
            Volume Name:           WDExternalDrive
            Content Hint:          Apple_HFS

But now Time Machine won't let me use the disk because the volume is not encrypted.

Indeed, Disk Utility shows that the format is no longer encrypted:

So it looks like I did something wrong, which was my concern that led me to make the post in the first place. Oh well, it was just machine time. Is what I'm doing misguided? Did I miss a step somewhere or take a wrong turn?
My question still remains: can someone tell me what is wrong with my process? I want to use the filesystem encyrypted format to backup my machine without Time Machine needing to encrypt the disk as a post process operation. Is this possible?

A: I've had the same question, and after a bit of research (and based on my own experience) I've come to some conclusions:

*

*Encryption made by TimeMachine and Encryption made by disk utility is the SAME thing and it is done only one time.

*Based on your question I think that this part of TM is poorly implemented (and NOT explained by apple), in fact when you, after encrypting the backup, selected the option to NOT encrypt it in TM the system asked you for the encryption password and done a (I guess) total decryption of all the free memory on the disk, instead of simply reformat that (and I think that TM does that to be "transparent" in that operation without having to ask to reformat the disk in an encrypted format).
THEN TO ANSWER YOUR QUESTION
" My question still remains: Can someone tell me what is wrong with my process? I want to use the filesystem encrypted format to backup my machine without Time Machine needing to encrypt the disk as a post-process operation. Is this possible?"
YES, this is possible, given what I said in "1.", the best method that you can use (and that I use too) to achieve that is:

*

*Format the disk in "Mac OS Extended (Journaled) Encrypted"

*set the disk as the backup disk for TM, checking the option to set the backup as ENCRYPTED
Let it do the backup (which will not do additional encrypting processes etc.) and then you're done!

A: In your case for 2 TB drive it can take up to few days.
To keep it working overnight go to System Preferences > Energy Saver and leave the disk running.
Of course leave it plugged in.
Just to make sure it stays awake, you can use the caffeinate in Terminal.
You can check the status from the terminal with diskutil cs info /Volumes/<your drive name> and look for Conversion State and LV Conversion Progress

redpajama_set_name: RedPajamaStackExchange


text:
from typing import Any, Dict, Iterable, List, Optional, Tuple, Union, cast
from unittest import mock

import orjson

from zerver.actions.custom_profile_fields import (
    do_remove_realm_custom_profile_field,
    do_update_user_custom_profile_data_if_changed,
    try_add_realm_custom_profile_field,
    try_reorder_realm_custom_profile_fields,
)
from zerver.lib.external_accounts import DEFAULT_EXTERNAL_ACCOUNTS
from zerver.lib.markdown import markdown_convert
from zerver.lib.test_classes import ZulipTestCase
from zerver.lib.test_helpers import queries_captured
from zerver.lib.types import ProfileDataElementUpdateDict, ProfileDataElementValue
from zerver.models import (
    CustomProfileField,
    CustomProfileFieldValue,
    custom_profile_fields_for_realm,
    get_realm,
)

class CustomProfileFieldTestCase(ZulipTestCase):
    def setUp(self) -> None:
        super().setUp()
        self.realm = get_realm("zulip")
        self.original_count = len(custom_profile_fields_for_realm(self.realm.id))

    def custom_field_exists_in_realm(self, field_id: int) -> bool:
        fields = custom_profile_fields_for_realm(self.realm.id)
        field_ids = [field.id for field in fields]
        return field_id in field_ids

class CreateCustomProfileFieldTest(CustomProfileFieldTestCase):
    def test_create(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        data: Dict[str, Any] = {"name": "Phone", "field_type": "text id"}
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, 'Argument "field_type" is not valid JSON.')

        data["name"] = ""
        data["field_type"] = 100
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Label cannot be blank.")

        data["name"] = "*" * 41
        data["field_type"] = 100
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "name is too long (limit: 40 characters)")

        data["name"] = "Phone"
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Invalid field type.")

        data["name"] = "Phone"
        data["hint"] = "*" * 81
        data["field_type"] = CustomProfileField.SHORT_TEXT
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "hint is too long (limit: 80 characters)")

        data["name"] = "Phone"
        data["hint"] = "Contact number"
        data["field_type"] = CustomProfileField.LONG_TEXT
        data["display_in_profile_summary"] = "true"
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Field type not supported for display in profile summary.")

        data["field_type"] = CustomProfileField.USER
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Field type not supported for display in profile summary.")

        data["field_type"] = CustomProfileField.SHORT_TEXT
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_success(result)

        field = CustomProfileField.objects.get(name="Phone", realm=realm)
        self.assertEqual(field.id, field.order)

        data["name"] = "Name "
        data["hint"] = "Some name"
        data["field_type"] = CustomProfileField.SHORT_TEXT
        data["display_in_profile_summary"] = "true"
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_success(result)

        field = CustomProfileField.objects.get(name="Name", realm=realm)
        self.assertEqual(field.id, field.order)

        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(
            result, "Only 2 custom profile fields can be displayed in the profile summary."
        )

        data["display_in_profile_summary"] = "false"
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "A field with that label already exists.")

    def test_create_select_field(self) -> None:
        self.login("iago")
        data: Dict[str, Union[str, int]] = {}
        data["name"] = "Favorite programming language"
        data["field_type"] = CustomProfileField.SELECT

        data["field_data"] = "invalid"
        result = self.client_post("/json/realm/profile_fields", info=data)
        error_msg = 'Argument "field_data" is not valid JSON.'
        self.assert_json_error(result, error_msg)

        data["field_data"] = orjson.dumps(
            {
                "python": ["1"],
                "java": ["2"],
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "field_data contains a value that is not an allowed_type")

        data["field_data"] = orjson.dumps(
            {
                "0": {"text": "Python"},
                "1": {"text": "Java"},
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "order key is missing from field_data")

        data["field_data"] = orjson.dumps(
            {
                "0": {"text": "Python", "order": ""},
                "1": {"text": "Java", "order": "2"},
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, 'field_data["order"] cannot be blank.')

        data["field_data"] = orjson.dumps(
            {
                "": {"text": "Python", "order": "1"},
                "1": {"text": "Java", "order": "2"},
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "'value' cannot be blank.")

        data["field_data"] = orjson.dumps(
            {
                "0": {"text": "Python", "order": 1},
                "1": {"text": "Java", "order": "2"},
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "field_data contains a value that is not an allowed_type")

        data["field_data"] = orjson.dumps({}).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Field must have at least one choice.")

        data["field_data"] = orjson.dumps(
            {
                "0": {"text": "Duplicate", "order": "1"},
                "1": {"text": "Duplicate", "order": "2"},
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Field must not have duplicate choices.")

        data["field_data"] = orjson.dumps(
            {
                "0": {"text": "Python", "order": "1"},
                "1": {"text": "Java", "order": "2"},
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_success(result)

    def test_create_default_external_account_field(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        field_type: int = CustomProfileField.EXTERNAL_ACCOUNT
        field_data: str = orjson.dumps(
            {
                "subtype": "twitter",
            }
        ).decode()
        invalid_field_name: str = "Not required field name"
        invalid_field_hint: str = "Not required field hint"

        result = self.client_post(
            "/json/realm/profile_fields",
            info=dict(
                field_type=field_type,
                field_data=field_data,
                hint=invalid_field_hint,
                name=invalid_field_name,
            ),
        )
        self.assert_json_success(result)
        # Silently overwrite name and hint with values set in default fields dict
        # for default custom external account fields.
        with self.assertRaises(CustomProfileField.DoesNotExist):
            field = CustomProfileField.objects.get(name=invalid_field_name, realm=realm)
        # The field is created with 'Twitter username' name as per values in default fields dict
        field = CustomProfileField.objects.get(name="Twitter username")
        self.assertEqual(field.name, DEFAULT_EXTERNAL_ACCOUNTS["twitter"].name)
        self.assertEqual(field.hint, DEFAULT_EXTERNAL_ACCOUNTS["twitter"].hint)

        result = self.client_delete(f"/json/realm/profile_fields/{field.id}")
        self.assert_json_success(result)

        # Should also work without name or hint and only external field type and subtype data
        result = self.client_post(
            "/json/realm/profile_fields", info=dict(field_type=field_type, field_data=field_data)
        )
        self.assert_json_success(result)

        # Default external account field data cannot be updated except "display_in_profile_summary" field
        field = CustomProfileField.objects.get(name="Twitter username", realm=realm)
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={"name": "Twitter", "field_type": CustomProfileField.EXTERNAL_ACCOUNT},
        )
        self.assert_json_error(result, "Default custom field cannot be updated.")

        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": field.name,
                "hint": field.hint,
                "field_type": field_type,
                "field_data": field_data,
                "display_in_profile_summary": "true",
            },
        )
        self.assert_json_success(result)

        result = self.client_delete(f"/json/realm/profile_fields/{field.id}")
        self.assert_json_success(result)

    def test_create_external_account_field(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        data: Dict[str, Union[str, int, Dict[str, str]]] = {}
        data["name"] = "Twitter username"
        data["field_type"] = CustomProfileField.EXTERNAL_ACCOUNT

        data["field_data"] = "invalid"
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, 'Argument "field_data" is not valid JSON.')

        data["field_data"] = orjson.dumps({}).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "subtype key is missing from field_data")

        data["field_data"] = orjson.dumps(
            {
                "subtype": "",
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, 'field_data["subtype"] cannot be blank.')

        data["field_data"] = orjson.dumps(
            {
                "subtype": "123",
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Invalid external account type")

        non_default_external_account = "linkedin"
        data["field_data"] = orjson.dumps(
            {
                "subtype": non_default_external_account,
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Invalid external account type")

        data["field_data"] = orjson.dumps(
            {
                "subtype": "twitter",
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_success(result)

        twitter_field = CustomProfileField.objects.get(name="Twitter username", realm=realm)
        self.assertEqual(twitter_field.field_type, CustomProfileField.EXTERNAL_ACCOUNT)
        self.assertEqual(twitter_field.name, "Twitter username")
        self.assertEqual(orjson.loads(twitter_field.field_data)["subtype"], "twitter")

        data["name"] = "Reddit"
        data["field_data"] = orjson.dumps(
            {
                "subtype": "custom",
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "Custom external account must define URL pattern")

        data["field_data"] = orjson.dumps(
            {
                "subtype": "custom",
                "url_pattern": 123,
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "field_data contains a value that is not an allowed_type")

        data["field_data"] = orjson.dumps(
            {
                "subtype": "custom",
                "url_pattern": "invalid",
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "URL pattern must contain '%(username)s'.")

        data["field_data"] = orjson.dumps(
            {
                "subtype": "custom",
                "url_pattern": "https://www.reddit.com/%(username)s/user/%(username)s",
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "URL pattern must contain '%(username)s'.")

        data["field_data"] = orjson.dumps(
            {
                "subtype": "custom",
                "url_pattern": "reddit.com/%(username)s",
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, 'field_data["url_pattern"] is not a URL')

        data["field_data"] = orjson.dumps(
            {
                "subtype": "custom",
                "url_pattern": "https://www.reddit.com/user/%(username)s",
            }
        ).decode()
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_success(result)

        custom_field = CustomProfileField.objects.get(name="Reddit", realm=realm)
        self.assertEqual(custom_field.field_type, CustomProfileField.EXTERNAL_ACCOUNT)
        self.assertEqual(custom_field.name, "Reddit")
        field_data = orjson.loads(custom_field.field_data)
        self.assertEqual(field_data["subtype"], "custom")
        self.assertEqual(field_data["url_pattern"], "https://www.reddit.com/user/%(username)s")

        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_error(result, "A field with that label already exists.")

    def test_create_field_of_type_user(self) -> None:
        self.login("iago")
        data = {
            "name": "Your mentor",
            "field_type": CustomProfileField.USER,
        }
        result = self.client_post("/json/realm/profile_fields", info=data)
        self.assert_json_success(result)

    def test_not_realm_admin(self) -> None:
        self.login("hamlet")
        result = self.client_post("/json/realm/profile_fields")
        self.assert_json_error(result, "Must be an organization administrator")
        result = self.client_delete("/json/realm/profile_fields/1")
        self.assert_json_error(result, "Must be an organization administrator")

class DeleteCustomProfileFieldTest(CustomProfileFieldTestCase):
    def test_delete(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        field = CustomProfileField.objects.get(name="Phone number", realm=realm)
        result = self.client_delete("/json/realm/profile_fields/100")
        self.assert_json_error(result, "Field id 100 not found.")

        self.assertTrue(self.custom_field_exists_in_realm(field.id))
        result = self.client_delete(f"/json/realm/profile_fields/{field.id}")
        self.assert_json_success(result)
        self.assertFalse(self.custom_field_exists_in_realm(field.id))

    def test_delete_field_value(self) -> None:
        iago = self.example_user("iago")
        self.login_user(iago)
        realm = get_realm("zulip")

        invalid_field_id = 1234
        result = self.client_delete(
            "/json/users/me/profile_data",
            {
                "data": orjson.dumps([invalid_field_id]).decode(),
            },
        )
        self.assert_json_error(result, f"Field id {invalid_field_id} not found.")

        field = CustomProfileField.objects.get(name="Mentor", realm=realm)
        data: List[ProfileDataElementUpdateDict] = [
            {"id": field.id, "value": [self.example_user("aaron").id]},
        ]
        do_update_user_custom_profile_data_if_changed(iago, data)

        iago_value = CustomProfileFieldValue.objects.get(user_profile=iago, field=field)
        converter = field.FIELD_CONVERTERS[field.field_type]
        self.assertEqual([self.example_user("aaron").id], converter(iago_value.value))

        result = self.client_delete(
            "/json/users/me/profile_data",
            {
                "data": orjson.dumps([field.id]).decode(),
            },
        )
        self.assert_json_success(result)

        # Don't throw an exception here
        result = self.client_delete(
            "/json/users/me/profile_data",
            {
                "data": orjson.dumps([field.id]).decode(),
            },
        )
        self.assert_json_success(result)

    def test_delete_internals(self) -> None:
        user_profile = self.example_user("iago")
        realm = user_profile.realm
        field = CustomProfileField.objects.get(name="Phone number", realm=realm)
        data: List[ProfileDataElementUpdateDict] = [
            {"id": field.id, "value": "123456"},
        ]
        do_update_user_custom_profile_data_if_changed(user_profile, data)

        self.assertTrue(self.custom_field_exists_in_realm(field.id))
        self.assertEqual(user_profile.customprofilefieldvalue_set.count(), self.original_count)

        do_remove_realm_custom_profile_field(realm, field)

        self.assertFalse(self.custom_field_exists_in_realm(field.id))
        self.assertEqual(user_profile.customprofilefieldvalue_set.count(), self.original_count - 1)

class UpdateCustomProfileFieldTest(CustomProfileFieldTestCase):
    def test_update(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        result = self.client_patch(
            "/json/realm/profile_fields/100",
            info={"name": "Phone number"},
        )
        self.assert_json_error(result, "Field id 100 not found.")

        field = CustomProfileField.objects.get(name="Phone number", realm=realm)
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={"name": ""},
        )
        self.assert_json_error(result, "Label cannot be blank.")

        self.assertEqual(CustomProfileField.objects.count(), self.original_count)
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={"name": "New phone number"},
        )
        self.assert_json_success(result)
        field = CustomProfileField.objects.get(id=field.id, realm=realm)
        self.assertEqual(CustomProfileField.objects.count(), self.original_count)
        self.assertEqual(field.name, "New phone number")
        self.assertIs(field.hint, "")
        self.assertEqual(field.field_type, CustomProfileField.SHORT_TEXT)

        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={"name": "*" * 41},
        )
        msg = "name is too long (limit: 40 characters)"
        self.assert_json_error(result, msg)

        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": "New phone number",
                "hint": "*" * 81,
            },
        )
        msg = "hint is too long (limit: 80 characters)"
        self.assert_json_error(result, msg)

        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": "New phone number",
                "hint": "New contact number",
                "display_in_profile_summary": "invalid value",
            },
        )
        msg = 'Argument "display_in_profile_summary" is not valid JSON.'
        self.assert_json_error(result, msg)

        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": "New phone number",
                "hint": "New contact number",
                "display_in_profile_summary": "true",
            },
        )
        self.assert_json_success(result)

        field = CustomProfileField.objects.get(id=field.id, realm=realm)
        self.assertEqual(CustomProfileField.objects.count(), self.original_count)
        self.assertEqual(field.name, "New phone number")
        self.assertEqual(field.hint, "New contact number")
        self.assertEqual(field.field_type, CustomProfileField.SHORT_TEXT)
        self.assertEqual(field.display_in_profile_summary, True)

        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={"name": "Name ", "display_in_profile_summary": "true"},
        )
        self.assert_json_success(result)
        field.refresh_from_db()
        self.assertEqual(field.name, "Name")
        self.assertEqual(field.display_in_profile_summary, True)

        field = CustomProfileField.objects.get(name="Favorite editor", realm=realm)
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={"name": "Favorite editor", "field_data": "invalid"},
        )
        self.assert_json_error(result, 'Argument "field_data" is not valid JSON.')

        field_data = orjson.dumps(
            {
                "0": "Vim",
                "1": {"order": "2", "text": "Emacs"},
            }
        ).decode()
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={"name": "Favorite editor", "field_data": field_data},
        )
        self.assert_json_error(result, "field_data is not a dict")

        field_data = orjson.dumps(
            {
                "0": {"order": "1", "text": "Vim"},
                "1": {"order": "2", "text": "Emacs"},
                "2": {"order": "3", "text": "Notepad"},
            }
        ).decode()
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": "Favorite editor",
                "field_data": field_data,
                "display_in_profile_summary": "true",
            },
        )
        self.assert_json_success(result)

        field = CustomProfileField.objects.get(name="Birthday", realm=realm)
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": field.name,
                "hint": field.hint,
                "display_in_profile_summary": "true",
            },
        )
        self.assert_json_error(
            result, "Only 2 custom profile fields can be displayed in the profile summary."
        )

    def test_update_is_aware_of_uniqueness(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        field_1 = try_add_realm_custom_profile_field(realm, "Phone", CustomProfileField.SHORT_TEXT)

        field_2 = try_add_realm_custom_profile_field(
            realm, "Phone 1", CustomProfileField.SHORT_TEXT
        )

        self.assertTrue(self.custom_field_exists_in_realm(field_1.id))
        self.assertTrue(self.custom_field_exists_in_realm(field_2.id))
        result = self.client_patch(
            f"/json/realm/profile_fields/{field_2.id}",
            info={"name": "Phone"},
        )
        self.assert_json_error(result, "A field with that label already exists.")

    def assert_error_update_invalid_value(
        self, field_name: str, new_value: object, error_msg: str
    ) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        field = CustomProfileField.objects.get(name=field_name, realm=realm)

        # Update value of field
        result = self.client_patch(
            "/json/users/me/profile_data",
            {"data": orjson.dumps([{"id": field.id, "value": new_value}]).decode()},
        )
        self.assert_json_error(result, error_msg)

    def test_update_invalid_field(self) -> None:
        self.login("iago")
        data = [{"id": 1234, "value": "12"}]
        result = self.client_patch(
            "/json/users/me/profile_data",
            {
                "data": orjson.dumps(data).decode(),
            },
        )
        self.assert_json_error(result, "Field id 1234 not found.")

    def test_update_invalid_short_text(self) -> None:
        field_name = "Phone number"
        self.assert_error_update_invalid_value(
            field_name, "t" * 201, f"{field_name} is too long (limit: 50 characters)"
        )

    def test_update_invalid_date(self) -> None:
        field_name = "Birthday"
        self.assert_error_update_invalid_value(field_name, "a-b-c", f"{field_name} is not a date")
        self.assert_error_update_invalid_value(
            field_name, "1909-3-5", f"{field_name} is not a date"
        )
        self.assert_error_update_invalid_value(field_name, [123], f"{field_name} is not a string")

    def test_update_invalid_url(self) -> None:
        field_name = "Favorite website"
        self.assert_error_update_invalid_value(field_name, "not URL", f"{field_name} is not a URL")

    def test_update_invalid_user_field(self) -> None:
        field_name = "Mentor"
        invalid_user_id = 1000
        self.assert_error_update_invalid_value(
            field_name, [invalid_user_id], f"Invalid user ID: {invalid_user_id}"
        )

    def test_update_profile_data_successfully(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        fields: List[Tuple[str, Union[str, List[int]]]] = [
            ("Phone number", "*short* text data"),
            ("Biography", "~~short~~ **long** text data"),
            ("Favorite food", "long short text data"),
            ("Favorite editor", "0"),
            ("Birthday", "1909-03-05"),
            ("Favorite website", "https://zulip.com"),
            ("Mentor", [self.example_user("cordelia").id]),
            ("GitHub username", "zulip-mobile"),
        ]

        data: List[ProfileDataElementUpdateDict] = []
        expected_value: Dict[int, ProfileDataElementValue] = {}
        expected_rendered_value: Dict[int, Optional[str]] = {}
        for i, field_value in enumerate(fields):
            name, value = field_value
            field = CustomProfileField.objects.get(name=name, realm=realm)
            data.append(
                {
                    "id": field.id,
                    "value": value,
                }
            )
            expected_value[field.id] = value
            expected_rendered_value[field.id] = (
                markdown_convert(value).rendered_content
                if field.is_renderable() and isinstance(value, str)
                else None
            )

        # Update value of field
        result = self.client_patch(
            "/json/users/me/profile_data",
            {"data": orjson.dumps([{"id": f["id"], "value": f["value"]} for f in data]).decode()},
        )
        self.assert_json_success(result)

        iago = self.example_user("iago")

        for field_dict in iago.profile_data():
            self.assertEqual(field_dict["value"], expected_value[field_dict["id"]])
            self.assertEqual(
                field_dict["rendered_value"], expected_rendered_value[field_dict["id"]]
            )
            for k in ["id", "type", "name", "field_data"]:
                self.assertIn(k, field_dict)

        # Update value of one field.
        field = CustomProfileField.objects.get(name="Biography", realm=realm)
        data = [
            {
                "id": field.id,
                "value": "foobar",
            }
        ]

        result = self.client_patch(
            "/json/users/me/profile_data", {"data": orjson.dumps(data).decode()}
        )
        self.assert_json_success(result)
        for field_dict in iago.profile_data():
            if field_dict["id"] == field.id:
                self.assertEqual(field_dict["value"], "foobar")

    def test_update_invalid_select_field(self) -> None:
        field_name = "Favorite editor"
        self.assert_error_update_invalid_value(
            field_name, "foobar", f"'foobar' is not a valid choice for '{field_name}'."
        )

    def test_update_select_field_successfully(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        field = CustomProfileField.objects.get(name="Favorite editor", realm=realm)
        data = [
            {
                "id": field.id,
                "value": "1",
            }
        ]

        result = self.client_patch(
            "/json/users/me/profile_data", {"data": orjson.dumps(data).decode()}
        )
        self.assert_json_success(result)

    def test_null_value_and_rendered_value(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")

        quote = try_add_realm_custom_profile_field(
            realm=realm,
            name="Quote",
            hint="Saying or phrase which you known for.",
            field_type=CustomProfileField.SHORT_TEXT,
        )

        iago = self.example_user("iago")
        iago_profile_quote = iago.profile_data()[-1]
        value = iago_profile_quote["value"]
        rendered_value = iago_profile_quote["rendered_value"]
        self.assertIsNone(value)
        self.assertIsNone(rendered_value)

        update_dict: ProfileDataElementUpdateDict = {
            "id": quote.id,
            "value": "***beware*** of jealousy...",
        }
        do_update_user_custom_profile_data_if_changed(iago, [update_dict])

        iago_profile_quote = self.example_user("iago").profile_data()[-1]
        value = iago_profile_quote["value"]
        rendered_value = iago_profile_quote["rendered_value"]
        self.assertIsNotNone(value)
        self.assertIsNotNone(rendered_value)
        self.assertEqual("<p><strong><em>beware</em></strong> of jealousy...</p>", rendered_value)

    def test_do_update_value_not_changed(self) -> None:
        iago = self.example_user("iago")
        self.login_user(iago)
        realm = get_realm("zulip")

        # Set field value:
        field = CustomProfileField.objects.get(name="Mentor", realm=realm)
        data: List[ProfileDataElementUpdateDict] = [
            {"id": field.id, "value": [self.example_user("aaron").id]},
        ]
        do_update_user_custom_profile_data_if_changed(iago, data)

        with mock.patch(
            "zerver.actions.custom_profile_fields.notify_user_update_custom_profile_data"
        ) as mock_notify:
            # Attempting to "update" the field value, when it wouldn't actually change,
            # shouldn't trigger notify.
            do_update_user_custom_profile_data_if_changed(iago, data)
            mock_notify.assert_not_called()

    def test_removing_option_from_select_field(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        field = CustomProfileField.objects.get(name="Favorite editor", realm=realm)
        self.assertTrue(
            CustomProfileFieldValue.objects.filter(field_id=field.id, value="0").exists()
        )
        self.assertTrue(
            CustomProfileFieldValue.objects.filter(field_id=field.id, value="1").exists()
        )

        new_options = {"1": {"text": "Emacs", "order": "1"}}
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={"name": "Favorite editor", "field_data": orjson.dumps(new_options).decode()},
        )
        self.assert_json_success(result)
        self.assertFalse(
            CustomProfileFieldValue.objects.filter(field_id=field.id, value="0").exists()
        )
        self.assertTrue(
            CustomProfileFieldValue.objects.filter(field_id=field.id, value="1").exists()
        )

    def test_default_external_account_type_field(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        field_data = orjson.dumps(
            {
                "subtype": "twitter",
            }
        ).decode()

        field = CustomProfileField.objects.get(name="GitHub username", realm=realm)
        # Attempting to change subtype here.
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": "GitHub username",
                "field_type": CustomProfileField.EXTERNAL_ACCOUNT,
                "field_data": field_data,
            },
        )
        self.assert_json_error(result, "Default custom field cannot be updated.")

        field_data = orjson.dumps(
            {
                "subtype": "github",
            }
        ).decode()

        # Attempting to change name here.
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": "GitHub",
                "field_type": CustomProfileField.EXTERNAL_ACCOUNT,
                "field_data": field_data,
            },
        )
        self.assert_json_error(result, "Default custom field cannot be updated.")

        field_data = orjson.dumps(
            {
                "subtype": "github",
                "url_pattern": "invalid",
            }
        ).decode()

        # Verify cannot change URL pattern
        result = self.client_patch(
            f"/json/realm/profile_fields/{field.id}",
            info={
                "name": "GitHub username",
                "field_type": CustomProfileField.EXTERNAL_ACCOUNT,
                "field_data": field_data,
            },
        )
        self.assert_json_error(result, "Default custom field cannot be updated.")

class ListCustomProfileFieldTest(CustomProfileFieldTestCase):
    def test_list(self) -> None:
        self.login("iago")
        result = self.client_get("/json/realm/profile_fields")
        content = self.assert_json_success(result)
        self.assertEqual(200, result.status_code)
        self.assert_length(content["custom_fields"], self.original_count)

    def test_list_order(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        order = (
            CustomProfileField.objects.filter(realm=realm)
            .order_by("-order")
            .values_list("order", flat=True)
        )
        # Until https://github.com/typeddjango/django-stubs/issues/444 gets resolved,
        # we need the cast here to ensure the value list is correctly typed.
        assert all(isinstance(item, int) for item in order)
        try_reorder_realm_custom_profile_fields(realm, cast(Iterable[int], order))
        result = self.client_get("/json/realm/profile_fields")
        content = self.assert_json_success(result)
        self.assertListEqual(
            content["custom_fields"], sorted(content["custom_fields"], key=lambda x: -x["id"])
        )

    def test_get_custom_profile_fields_from_api(self) -> None:
        iago = self.example_user("iago")
        test_bot = self.create_test_bot("foo-bot", iago)
        self.login_user(iago)

        with queries_captured() as queries:
            response = self.client_get(
                "/json/users", {"client_gravatar": "false", "include_custom_profile_fields": "true"}
            )

        self.assert_length(queries, 4)

        raw_users_data = self.assert_json_success(response)["members"]

        iago_raw_data = None
        test_bot_raw_data = None

        for user_dict in raw_users_data:
            if user_dict["user_id"] == iago.id:
                iago_raw_data = user_dict
                continue
            if user_dict["user_id"] == test_bot.id:
                test_bot_raw_data = user_dict
                continue

        if (not iago_raw_data) or (not test_bot_raw_data):
            raise AssertionError("Could not find required data from the response.")

        expected_keys_for_iago = {
            "delivery_email",
            "email",
            "user_id",
            "avatar_url",
            "avatar_version",
            "is_admin",
            "is_guest",
            "is_billing_admin",
            "is_bot",
            "is_owner",
            "role",
            "full_name",
            "timezone",
            "is_active",
            "date_joined",
            "profile_data",
        }
        self.assertEqual(set(iago_raw_data.keys()), expected_keys_for_iago)
        self.assertNotEqual(iago_raw_data["profile_data"], {})

        expected_keys_for_test_bot = {
            "delivery_email",
            "email",
            "user_id",
            "avatar_url",
            "avatar_version",
            "is_admin",
            "is_guest",
            "is_bot",
            "is_owner",
            "is_billing_admin",
            "role",
            "full_name",
            "timezone",
            "is_active",
            "date_joined",
            "bot_type",
            "bot_owner_id",
        }
        self.assertEqual(set(test_bot_raw_data.keys()), expected_keys_for_test_bot)
        self.assertEqual(test_bot_raw_data["bot_type"], 1)
        self.assertEqual(test_bot_raw_data["bot_owner_id"], iago_raw_data["user_id"])

        response = self.client_get("/json/users", {"client_gravatar": "false"})
        raw_users_data = self.assert_json_success(response)["members"]
        for user_dict in raw_users_data:
            with self.assertRaises(KeyError):
                user_dict["profile_data"]

    def test_get_custom_profile_fields_from_api_for_single_user(self) -> None:
        self.login("iago")
        expected_keys = {
            "result",
            "msg",
            "max_message_id",
            "user_id",
            "avatar_url",
            "full_name",
            "email",
            "is_bot",
            "is_admin",
            "is_owner",
            "is_billing_admin",
            "role",
            "profile_data",
            "avatar_version",
            "timezone",
            "delivery_email",
            "is_active",
            "is_guest",
            "date_joined",
        }

        url = "/json/users/me"
        response = self.client_get(url)
        raw_user_data = self.assert_json_success(response)
        self.assertEqual(set(raw_user_data.keys()), expected_keys)

class ReorderCustomProfileFieldTest(CustomProfileFieldTestCase):
    def test_reorder(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        order = list(
            CustomProfileField.objects.filter(realm=realm)
            .order_by("-order")
            .values_list("order", flat=True)
        )
        result = self.client_patch(
            "/json/realm/profile_fields", info={"order": orjson.dumps(order).decode()}
        )
        self.assert_json_success(result)
        fields = CustomProfileField.objects.filter(realm=realm).order_by("order")
        for field in fields:
            self.assertEqual(field.id, order[field.order])

    def test_reorder_duplicates(self) -> None:
        self.login("iago")
        realm = get_realm("zulip")
        order = list(
            CustomProfileField.objects.filter(realm=realm)
            .order_by("-order")
            .values_list("order", flat=True)
        )
        order.append(4)
        result = self.client_patch(
            "/json/realm/profile_fields", info={"order": orjson.dumps(order).decode()}
        )
        self.assert_json_success(result)
        fields = CustomProfileField.objects.filter(realm=realm).order_by("order")
        for field in fields:
            self.assertEqual(field.id, order[field.order])

    def test_reorder_unauthorized(self) -> None:
        self.login("hamlet")
        realm = get_realm("zulip")
        order = list(
            CustomProfileField.objects.filter(realm=realm)
            .order_by("-order")
            .values_list("order", flat=True)
        )
        result = self.client_patch(
            "/json/realm/profile_fields", info={"order": orjson.dumps(order).decode()}
        )
        self.assert_json_error(result, "Must be an organization administrator")

    def test_reorder_invalid(self) -> None:
        self.login("iago")
        order = [100, 200, 300]
        result = self.client_patch(
            "/json/realm/profile_fields", info={"order": orjson.dumps(order).decode()}
        )
        self.assert_json_error(result, "Invalid order mapping.")
        order = [1, 2]
        result = self.client_patch(
            "/json/realm/profile_fields", info={"order": orjson.dumps(order).decode()}
        )
        self.assert_json_error(result, "Invalid order mapping.")


It is America's Birthday Party. Lighten Up!
We live in America and it's our Nation's Birthday.
On the weekend is fine but during the week??? Some people have to get up early for work!
I see that censorship is growing in this once great and free land as posts questioning the safety of foreign made fireworks have been removed. Liberty is dying a slow death.
would shooting off guns like people did many years ago be more acceptable?


text:
We are part of the Technology Collaboration Programme by the International Energy Agency (IEA)
Knowledge, Data & Policies
Equal By 30
News: Blog post
Towards gender equality in the energy sector: Austrian success stories
Share this:Share on TwitterShare on FacebookShare on LinkedInShare in an email
The Austrian Federal Ministry for Climate Protection, Environment, Energy, Mobility, Innovation and Technology (BMK) is taking various measures to increase the visibility of women in energy professions, recognise women in leadership roles and highlight role models for young women to inspire them to pursue similar professions. This also includes various activities within the framework of the C3E International initiative.
Energy Breakfast Series
Recent activities in this context include the first Austrian Energy Breakfast as part of the initiative with a total of about 70 participants in November 2020. The Event was organised by the BMK, the Austrian Energy Agency and the Vienna University of Technology. It was deliberately aimed at female students from technical fields of study. The Austrian C3E Ambassadors as well as representatives of the Ministry and the Vienna University of Technology contributed with their various stories and experiences in order to be a role model for female students and encouraging them to follow their path in the energy industry.
The feedback from the participating female students on the event was very positive, as it gave them the unique opportunity to get in touch directly with women in leadership positions and to hear from them how they got there and what it is like for them to work in a leadership position today.
In April 2021, the Girls Pioneer Event took place virtually in Austria as part of the C3E initiative, organised by the Austrian Energy Agency for the BMK, with a total of about 110 participants. The aim of the event was to introduce high school girls to the opportunities available to them in the climate, energy, research and innovation sectors, thereby supporting them in their considerations for a future career path. The event served as an exchange between pupils, students and representatives from the public sector, energy companies and the scientific environment, in order to demonstrate to young women in an interactive way what a career in the energy sector has in store for them and what paths are open to them.
The feedback from the participating students was also very positive for this event. Many had not yet had a real insight into the energy sector and were thus able to learn about the diverse career opportunities available to them and also meet young role models who are already working in the energy field and were able to offer them insights into their career paths. The interest was so great that an Austrian energy supplier offered even a separate internship for the participants of the event in the energy sector afterwards.
The FEMtech initiative is one of the most important networks in Austria for improving the framework and access conditions for women in the technical and scientific field. It directly supports women in research and technology and aims to create equal opportunities in industrial and non-university research. FEMtech carries out different activities to raise awareness, make visible and promote the careers of women in research and technology.
This includes the FEMtech Experts Database, where more than 2000 female experts from over 130 fields are registered. This makes it the most comprehensive database of female experts in Austria. With the experts database, FEMtech has been making women professionals visible and supporting their chances of success in their careers since 2005.
Another important activity is the FEMtech Expert of the Month award, which has also been in existence since 2005. An independent jury from research, business, human resources management and the media selects the female expert on the basis of three nominations. The FEMtech Expert of the Month is communicated in a press release by the BMK and receives an image video.
To support networking between women in technology and research FEMtech organises network meetings twice a year. These take place in Vienna and other locations in Austria. They inform about news from the funding focus and highlight current FEMtech topics. Afterwards, there is the opportunity for an informal exchange and for funding advice from the Austrian Research Promotion Agency (FFG). Childcare is also provided during each network meeting.
The BMK also funds FEMtech internships for female students of Austrian universities and universities of applied sciences. The aim is to offer female STEM students interested in research attractive internships at Austria's innovative companies and non-university research institutions, thus facilitating their entry into a research career.
Role Models_Girls Pioneer Event April 2021
What Are The Equality In Energy Transitions Members Working On Outside The Initiative? (Part #3)
Read more What Are The Equality In Energy Transitions Members Working On Outside The Initiative? (Part #3)
The power of diversity – Solving challenges in energy transition calls for many kinds of talents
Read more The power of diversity – Solving challenges in energy transition calls for many kinds of talents
Gender Equality, Diversity and Inclusivity at COP26 in Glasgow
Read more Gender Equality, Diversity and Inclusivity at COP26 in Glasgow
America's Engagement in a Gender-Inclusive Climate Fight
Read more America's Engagement in a Gender-Inclusive Climate Fight
© 2023 Equality in Energy Transitions
C3E International
https://www.equality-energytransitions.org/privacy-policy/
analytics.equality-energytransitions.org

redpajama_set_name: RedPajamaCommonCrawl


Qi Ye Yi Zhi Hua (Zao Xiu, Chong Lou) is bitter, slightly cold, slightly toxic.
Qi Ye Yi Zhi Hua (Zao Xiu, Chong Lou) influences Liver.
Cools the Liver and settles fright.
Qi Ye Yi Zhi Hua is one of the most precious Chinese herbs in China. It is best known for its strong action in reducing swelling, clearing heat, and resolving toxicity in cases of skin boils, carbuncles and sores. It is also the most often used Chinese herb for snake bites. The Chinese herb can be taken internally or applied topically to the affected area. If you love outdoor activities or hike in the mountains you may consider keeping it handy.
Today, Qi Ye Yi Zhi Hua is also a commonly prescribed Chinese herb in China to help the body's ability to contain various tumors. Studies have found several components from Qi Ye Yi Zhi Hua that possess anticancer properties in petri dish and mice models.1 Qi Ye Yi Zhi Hua is an integral part of our Signature formula Tumoclear™.
Qi Ye Yi Zhi Hua (Zao Xiu, Chong Lou) is slightly toxic. Please do not take a higher than recommended daily dosage.


After all the controversy of Rick Ross' deplorable verse on "U.O.E.N.O.," Rocko is looking to separate his single as much as possible from the Miami rapper. That is where the new remix comes into play. The track features Wiz Khalifa along with Future from the original.


text:
United Nations Public Service Day
Quick Facts - GB
#Publicserviceday
#APSD2021, #BuildingForwardBetter, #ThankYou
United Nations Public Service Day in 2022
Thursday, 23 Jun
United Nations Public Service Day History
The United Nations Public Service Day celebrates and recognizes the public services in the community. The organization highlights the importance of having people working on the public sector and encourages young people to work on the field. The observance occurs yearly on June 23rd.
Top Tweets for United Nations Public Service Day -
It's World Public Service Day! Queensland communities need public servants and public services in a thousand different ways. Today we're particularly thinking of Queensland's hardworking correctional officers. The government must deliver these workers a fair pay rise. https://t.co/X5hqhp0xQY
— Together Queensland (@togetherqld) June 22, 2021
Today is Public Service Day! We want to take this opportunity to thank those in our community who dedicate their lives to helping others 🙌 #PublicServiceDay #WorcestershireHour https://t.co/XJqOTZapCf
— Jukes Insurance Brokers (@jukesinsurance) June 23, 2021
Happy Public Service Day!! Here's to duty, diligence and what can be thankless service. Cheers to those of us who dedicate our lives to the betterment of this country and Region. https://t.co/kLafZ90Hfd
— Katzlyn Samson (@KatzlynS) June 23, 2021
In the News and Trending for United Nations Public Service Day
Updated 22:15 Public Service Day: Brighton MPs back key workers thank you
theargus.co.uk
United Nations Public Service Day | United Nations
Public Service Day 2020: 95% rise in Brighton's appreciation for public sector workers - Brighton Journal
brightonjournal.co.uk
United Nations Public Service Day SP | Naciones Unidas
United Nations Public Service Day Facts & Quotes
Every year the UN Department of Economic and Social Affairs (DESA) organizes a world forum with a host country. The forum operates as a space for world leaders, ministers, and other senior decision-makers to debate emerging issues and trends. It allows them to discuss good practices, strategies, actions, and innovative approaches that will improve and benefit the public sector.
Close to 24 million people worked within the public sector in the US in 2020. That is about 15% of the entire workforce.
Today, as we honour these essential workers and so many more, we must also reflect on how to better protect, recognize and invest in their well-being as we build back better, together. And I say directly to these inspiring public servants: We are all deeply indebted to you for your remarkable acts of service to humankind - UN Secretary-General António Guterres, UN Public Service Day, 2020
United Nations Public Service Day Top Events and Things to Do
Learn more about the role of public service workers. The Covid-19 pandemic has put a lot more responsbility and burden on public workers. The UN highlights their efforts and continued contributions.
Listen to the UN Symphony Orchestra's tribute to public service.
Watch the UN's video celebrating Public Service Day. It showcases people from all around the world thanking their public service workers.
United Nations Public Service Day - References and Related Sites
UN: Public Service Day
www.brookings.edu: Public Service and the Federal Government


Over the past four days I've been filming (and preparing...) non-stop for our new "Make Your Dream Trip a Reality" course. We kicked off on Tuesday morning with a live broadcast that many of you watched.
In the meantime, here's a special deal that just came out. If you're jumping into the world of miles and points this week, here's a way to get a bunch of extra points that aren't usually available.
Attention, everyone! My travel hacking colleague Stephanie Zito and I will be teaching an all-new online course starting later this month, and I'd love for you to join us.
For this one, we're teaching everything through 30 short, action-packed lessons (a new one unveiled each weekday once we begin on April 26) and focusing on something more specific. It's not just "earn a ton of miles and points," although we'll certainly show you how to do that. More importantly, it's about taking a dream trip, going somewhere you've always wanted to but haven't planned for or thought was too expensive.
Here's a fun thing: many of you already have the Chase Sapphire Preferred card. It's a great card for a lot of reasons, and is usually my #1 recommendation when people are just starting to get into the world of miles and points.
If you have the card, you can now earn extra miles for referring your friends.
It turned out that of the dozen or so folks that had an open tab at the bar that night, at least half of us were using the Chase Sapphire Preferred.


text:
China has more billionaires than US
Published time: 13 Oct, 2016 14:32
Light and laser illuminate the Lujiazui financial district of Pudong in Shanghai © Aly Song © Reuters
The number of dollar billionaires in China is growing despite a 20 percent drop in the domestic stock markets and the economic slowdown, the Hurun Report shows. China now tops the US in the number of billionaires.
Most of the world's millionaires live in Asia
However, none of China's super-rich make it into the global top 20.
"Mainland China has 594, down two from last year; Hong Kong, Taiwan and Macao have 94; and there are 66 others in the world, mainly in SE Asia. This compares with 535 billionaires in the US," said Hurun Report chairman Rupert Hoogewerf.
Chinese property magnate Wang Jianlin has defended his crown as the country's richest man. The CEO of Dalian Wanda Group has a personal fortune of $32.1 billion.
Alibaba founder Jack Ma took second spot. His wealth has risen 41 percent from last year to $30.6 billion. The head of internet and online gaming giant Tencent Pony Ma came in third with $24.6 billion.
The biggest increase came from Yao Zhengua, the chairman of investment and real estate firm Baoneng Group. His wealth skyrocketed by 820 percent to $17.2 billion, putting him in fourth position.
Yao represents a new wave of wealthy Chinese, whose money came from playing financial markets as opposed to more traditional routes like trade or manufacturing, said the head of the Hurun Report.
"There's a new type of wealth creation coming out," he told Reuters, adding China has to adapt as the wider economy was "very materially slowing down."
More billionaires than US? China! - Report https://t.co/Vy5JhOAPgNpic.twitter.com/Ox3y1YmR1i
— RT (@RT_com) February 25, 2016
According to the study, most of China's billionaires live in Beijing (322), followed by Shenzhen (195), and Shanghai (162).
Ninety-five percent of China's super-rich are self-made, with only five percent inheriting their wealth.
READ MORE: Chinese businessman completes $88mn Aston Villa takeover from US owner
The hottest wealth creating industries in 2016 are financial investments and IT.


text:
Westies fall to Xavier
WH falls 17-1 in home opener
(April 8, 2019) - After starting the season with a pair of road victories, the West Haven boys lacrosse team was eager to get home to play at Ken Strong Stadium. Unfortunately for the Westies, Xavier ruined the occasion.
Rich Wadeka (10) against Xavier, April 8, 2019. Photo courtesy of Todd Dandelske.
Led by four goals from Erik Fellenstein, and three goals apiece from Frank Romeo and JJ Ford, Xavier topped West Haven 17-1 in a Southern Connecticut Conference contest in West Haven Monday evening.
Charlie Miller scored the lone West Haven goal as the Westies fell to 2-1 on the year.
Westies top NDFF
WH improves to 5-2
(April 22, 2019) - The West Haven boys' lacrosse team posted an 8-5 victory over Notre Dame of Fairfield Monday evening at Ken Strong Stadium. With the win, West Haven improved to 5-2 on the year.
Trailing 2-0, the Westies cut the deficit in half 9:12 of the second quarter on a goal by Connor Fowler. Fowler evened the contest seven minutes later.
The Lancers were not going away easily and led 3-2 at the half. The Lancers led 4-2, before West Haven scored the next six times for an 8-4 lead.
Niko Kyle got West Haven within 4-3 with 5:24 left in the third quarter, before Justin Rivera evened the game with under two minutes to go in the quarter. West Haven took the lead for good when Rich Wadeka scored with 48.8 seconds remaining in the third quarter.
The fourth quarter was more of the same. Fowler gave the Westies a 6-4 advantage, and Tyler Moscato scored 44 seconds later for a three goal lead. Rivera gave the Westies all the insurance they would need with 6:24 remaining for an 8-4 lead.
Kevin Moriarty made 22 saves for West Haven in the win.
Westies top Foran
Kyle, Rivera lead the way in 7-2 victory
(April 24, 2019) - The West Haven boys lacrosse team won its third straight contest with a 7-2 victory over Foran in Milford Wednesday evening. With the victory, West Haven improved to 6-2 on the year.
Niko Kyle and Justin Rivera led the offense as each had two goals and an assist. Connor Fowler and Nick Zaino each had one goal and one assist, while Rich Wadeka added a goal, and Tyler Moscato had an assist.
Kevin Moriarty finished with 25 saves in a stellar effort for the Westies, who led 3-2 at the half before going on a 4-0 run in the second half to pull away from the Lions.
Four in a Row
Westies blank Windsor
(April 27, 2019) - The West Haven boys lacrosse team won its four straight contest and improved to 7-2 with a 10-0 victory over Windsor Saturday morning at Ken Strong Stadium in West Haven.
The Westies took control of the contest with seven goals in the first quarter.
Needing just 32 seconds, Tyler Moscato gave West Haven a 1-0 advantage, before Connor Fowler took over. The sophomore scored the next three goals, all 2:03 apart, for a 4-0 advantage.
Junior Shane Taulty increased the margin to 5-0, and fellow junior Andrew Newkirk gave West Haven a 6-0 lead less than a minute later. When Taulty scored his second of the game with under three minutes left in the opening quarter, West Haven led 7-0.
Moscato increased the margin to 8-0, Nick Zaino gave West Haven a 9-0 lead with 2:42 left in the opening half, and junior Terell Williams capped the scoring late in the third quarter.
Kevin Moriarty and Anthony Campagnuolo made two saves in goal.
For all your embroidery and screen printing needs, visit Vio's Sports Plus at the rear of 487 Campbell Ave., West Haven or call (203) 934-3368


text:
Home News Google to Place AI-Powered Virtual Agents in Call Centres
Google to Place AI-Powered Virtual Agents in Call Centres
IANS	- Last Updated: July 25, 2018 12:31 pm
Google has announced it is working with several partners like Cisco and Genesys to build Artificial Intelligence (AI) technology that will replace some of the work in call centres.
The software is called "Contact Center AI" which will install "virtual agents" that will be the first to pick up the phone when a customer connect to a call centre.
"When the customer asks something that the AI cannot do, it will automatically forward the call to a human," said Fei-Fei Li, Chief Scientist at Google, during the Cloud Next conference here late on Tuesday.
"Our true goal is to empower a contact centre's human agents, as well as the customers that rely on them.
"To do this, we built a complete solution with our partners that includes Dialogflow Enterprise Edition, as well as additional capabilities that are particularly useful for contact centres," Li added.
In this AI technology, when a call is placed, the caller is immediately greeted by a Virtual Agent that answers questions and fulfils tasks all on its own.
When a caller's needs surpass the Virtual Agent, it transitions to a human representative.
"From there, the system shifts to a supporting role whereby Contact Centre AI's Agent Assist system supports the conversation and provides the agent with relevant information," Google said.
The result is a flexible solution that adapts to the needs of each and every call, and provides a seamless experience between live and virtual agents, playing as big or as small a role as the situation demands.
"It's compliant with our data privacy and governance policies, and it does it all without infrastructure, on a platform that scales as much or as little as you need," Li noted.
"AI is empowerment, and we want to democratise that power for everyone and every business — from retail to agriculture, education to health care," she added.
TAGS Google AI
Google's "AutoFlip" Is Designed to Crop Videos Intelligently
Google's New Neural Networks Might Predict Smells
Google's VideoBERT Can Predict What Happens next in Videos
Google Open-Sources Hand Tracking AI "MediaPipe" for Smartphones
Google Now Uses AI to Predict Floods; Already Working in India
Andrew Moore to Take Over From Fei Fei Li as New Google Cloud AI Head
Former Google AI Chief Will Now Head Apple's Machine Learning and AI Strategy
Google Will Mentor AI, Machine Learning Startups Under Launchpad Accelerator India Program
Google Brings its Machine Learning Crash Course (MLCC) Study Jam Series to India
Google Duplex AI Calling System Will Go Live Soon For Restaurant Reservations And More
Google's AI Will Soon Be Able to Predict When a Patient Is Likely to Die