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

package cmd

import (
	"context"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"os"
	"sync"

	"encoding/hex"

	humanize "github.com/dustin/go-humanize"
	sha256 "github.com/minio/sha256-simd"
)

const (
	// Represents XL backend.
	formatBackendXL = "xl"

	// formatXLV1.XL.Version - version '1'.
	formatXLVersionV1 = "1"

	// formatXLV2.XL.Version - version '2'.
	formatXLVersionV2 = "2"

	// formatXLV3.XL.Version - version '3'.
	formatXLVersionV3 = "3"

	// Distribution algorithm used.
	formatXLVersionV2DistributionAlgo = "CRCMOD"
)

// Offline disk UUID represents an offline disk.
const offlineDiskUUID = "ffffffff-ffff-ffff-ffff-ffffffffffff"

// Healing is only supported for the list of errors mentioned here.
var formatHealErrors = map[error]struct{}{
	errUnformattedDisk: {},
	errDiskNotFound:    {},
}

// List of errors considered critical for disk formatting.
var formatCriticalErrors = map[error]struct{}{
	errCorruptedFormat: {},
	errFaultyDisk:      {},
}

// Used to detect the version of "xl" format.
type formatXLVersionDetect struct {
	XL struct {
		Version string `json:"version"`
	} `json:"xl"`
}

// Represents the V1 backend disk structure version
// under `.minio.sys` and actual data namespace.
// formatXLV1 - structure holds format config version '1'.
type formatXLV1 struct {
	formatMetaV1
	XL struct {
		Version string `json:"version"` // Version of 'xl' format.
		Disk    string `json:"disk"`    // Disk field carries assigned disk uuid.
		// JBOD field carries the input disk order generated the first
		// time when fresh disks were supplied.
		JBOD []string `json:"jbod"`
	} `json:"xl"` // XL field holds xl format.
}

// Represents the V2 backend disk structure version
// under `.minio.sys` and actual data namespace.
// formatXLV2 - structure holds format config version '2'.
type formatXLV2 struct {
	Version string `json:"version"`
	Format  string `json:"format"`
	XL      struct {
		Version string `json:"version"` // Version of 'xl' format.
		This    string `json:"this"`    // This field carries assigned disk uuid.
		// Sets field carries the input disk order generated the first
		// time when fresh disks were supplied, it is a two dimensional
		// array second dimension represents list of disks used per set.
		Sets [][]string `json:"sets"`
		// Distribution algorithm represents the hashing algorithm
		// to pick the right set index for an object.
		DistributionAlgo string `json:"distributionAlgo"`
	} `json:"xl"`
}

// formatXLV3 struct is same as formatXLV2 struct except that formatXLV3.XL.Version is "3" indicating
// the simplified multipart backend which is a flat hierarchy now.
// In .minio.sys/multipart we have:
// sha256(bucket/object)/uploadID/[xl.json, part.1, part.2 ....]
type formatXLV3 struct {
	Version string `json:"version"`
	Format  string `json:"format"`
	XL      struct {
		Version string `json:"version"` // Version of 'xl' format.
		This    string `json:"this"`    // This field carries assigned disk uuid.
		// Sets field carries the input disk order generated the first
		// time when fresh disks were supplied, it is a two dimensional
		// array second dimension represents list of disks used per set.
		Sets [][]string `json:"sets"`
		// Distribution algorithm represents the hashing algorithm
		// to pick the right set index for an object.
		DistributionAlgo string `json:"distributionAlgo"`
	} `json:"xl"`
}

// Returns formatXL.XL.Version
func newFormatXLV3(numSets int, setLen int) *formatXLV3 {
	format := &formatXLV3{}
	format.Version = formatMetaVersionV1
	format.Format = formatBackendXL
	format.XL.Version = formatXLVersionV3
	format.XL.DistributionAlgo = formatXLVersionV2DistributionAlgo
	format.XL.Sets = make([][]string, numSets)

	for i := 0; i < numSets; i++ {
		format.XL.Sets[i] = make([]string, setLen)
		for j := 0; j < setLen; j++ {
			format.XL.Sets[i][j] = mustGetUUID()
		}
	}
	return format
}

// Returns formatXL.XL.Version information, this code is specifically
// used to read XL `format.json` and capture any version information
// that it may have.
func formatXLGetVersion(formatPath string) (string, error) {
	format := &formatXLVersionDetect{}
	b, err := ioutil.ReadFile(formatPath)
	if err != nil {
		return "", err
	}
	if err = json.Unmarshal(b, format); err != nil {
		return "", err
	}
	return format.XL.Version, nil
}

// Returns format meta format version from `format.json`. This code
// is specifically used to detect meta format.
func formatMetaGetFormatBackendXL(formatPath string) (string, error) {
	meta := &formatMetaV1{}
	b, err := ioutil.ReadFile(formatPath)
	if err != nil {
		return "", err
	}
	if err = json.Unmarshal(b, meta); err != nil {
		return "", err
	}
	if meta.Version != formatMetaVersionV1 {
		return "", fmt.Errorf(`format.Version expected: %s, got: %s`, formatMetaVersionV1, meta.Version)
	}
	return meta.Format, nil
}

// Migrates all previous versions to latest version of `format.json`,
// this code calls migration in sequence, such as V1 is migrated to V2
// first before it V2 migrates to V3.
func formatXLMigrate(export string) error {
	formatPath := pathJoin(export, minioMetaBucket, formatConfigFile)
	backend, err := formatMetaGetFormatBackendXL(formatPath)
	if err != nil {
		return err
	}
	if backend != formatBackendXL {
		return fmt.Errorf(`Disk %s: found backend %s, expected %s`, export, backend, formatBackendXL)
	}
	version, err := formatXLGetVersion(formatPath)
	if err != nil {
		return err
	}
	switch version {
	case formatXLVersionV1:
		if err = formatXLMigrateV1ToV2(export); err != nil {
			return err
		}
		fallthrough
	case formatXLVersionV2:
		if err = formatXLMigrateV2ToV3(export); err != nil {
			return err
		}
		fallthrough
	case formatXLVersionV3:
		// format-V3 is the latest verion.
		return nil
	}
	return fmt.Errorf(`%s: unknown format version %s`, export, version)
}

// Migrates version V1 of format.json to version V2 of format.json,
// migration fails upon any error.
func formatXLMigrateV1ToV2(export string) error {
	formatPath := pathJoin(export, minioMetaBucket, formatConfigFile)
	version, err := formatXLGetVersion(formatPath)
	if err != nil {
		return err
	}
	if version != formatXLVersionV1 {
		return fmt.Errorf(`Disk %s: format version expected %s, found %s`, export, formatXLVersionV1, version)
	}

	formatV1 := &formatXLV1{}
	b, err := ioutil.ReadFile(formatPath)
	if err != nil {
		return err
	}
	if err = json.Unmarshal(b, formatV1); err != nil {
		return err
	}

	formatV2 := &formatXLV2{}
	formatV2.Version = formatMetaVersionV1
	formatV2.Format = formatBackendXL
	formatV2.XL.Version = formatXLVersionV2
	formatV2.XL.DistributionAlgo = formatXLVersionV2DistributionAlgo
	formatV2.XL.This = formatV1.XL.Disk
	formatV2.XL.Sets = make([][]string, 1)
	formatV2.XL.Sets[0] = make([]string, len(formatV1.XL.JBOD))
	copy(formatV2.XL.Sets[0], formatV1.XL.JBOD)

	b, err = json.Marshal(formatV2)
	if err != nil {
		return err
	}
	return ioutil.WriteFile(formatPath, b, 0644)
}

// Migrates V2 for format.json to V3 (Flat hierarchy for multipart)
func formatXLMigrateV2ToV3(export string) error {
	formatPath := pathJoin(export, minioMetaBucket, formatConfigFile)
	version, err := formatXLGetVersion(formatPath)
	if err != nil {
		return err
	}
	if version != formatXLVersionV2 {
		return fmt.Errorf(`Disk %s: format version expected %s, found %s`, export, formatXLVersionV2, version)
	}
	formatV2 := &formatXLV2{}
	b, err := ioutil.ReadFile(formatPath)
	if err != nil {
		return err
	}
	err = json.Unmarshal(b, formatV2)
	if err != nil {
		return err
	}

	if err = os.RemoveAll(pathJoin(export, minioMetaMultipartBucket)); err != nil {
		return err
	}
	if err = os.MkdirAll(pathJoin(export, minioMetaMultipartBucket), 0755); err != nil {
		return err
	}

	// format-V2 struct is exactly same as format-V1 except that version is "3"
	// which indicates the simplified multipart backend.
	formatV3 := formatXLV3{}

	formatV3.Version = formatV2.Version
	formatV3.Format = formatV2.Format
	formatV3.XL = formatV2.XL

	formatV3.XL.Version = formatXLVersionV3

	b, err = json.Marshal(formatV3)
	if err != nil {
		return err
	}
	return ioutil.WriteFile(formatPath, b, 0644)
}

// Returns true, if one of the errors is non-nil and is Unformatted disk.
func hasAnyErrorsUnformatted(errs []error) bool {
	for _, err := range errs {
		if err != nil && err == errUnformattedDisk {
			return true
		}
	}
	return false
}

// countErrs - count a specific error.
func countErrs(errs []error, err error) int {
	var i = 0
	for _, err1 := range errs {
		if err1 == err {
			i++
		}
	}
	return i
}

// Does all errors indicate we need to initialize all disks?.
func shouldInitXLDisks(errs []error) bool {
	return countErrs(errs, errUnformattedDisk) == len(errs)
}

// Check if unformatted disks are equal to write quorum.
func quorumUnformattedDisks(errs []error) bool {
	return countErrs(errs, errUnformattedDisk) >= (len(errs)/2)+1
}

// loadFormatXLAll - load all format config from all input disks in parallel.
func loadFormatXLAll(storageDisks []StorageAPI) ([]*formatXLV3, []error) {
	// Initialize sync waitgroup.
	var wg = &sync.WaitGroup{}

	// Initialize list of errors.
	var sErrs = make([]error, len(storageDisks))

	// Initialize format configs.
	var formats = make([]*formatXLV3, len(storageDisks))

	// Load format from each disk in parallel
	for index, disk := range storageDisks {
		if disk == nil {
			sErrs[index] = errDiskNotFound
			continue
		}
		wg.Add(1)
		// Launch go-routine per disk.
		go func(index int, disk StorageAPI) {
			defer wg.Done()

			format, lErr := loadFormatXL(disk)
			if lErr != nil {
				sErrs[index] = lErr
				return
			}
			formats[index] = format
		}(index, disk)
	}

	// Wait for all go-routines to finish.
	wg.Wait()

	// Return all formats and nil
	return formats, sErrs
}

func saveFormatXL(disk StorageAPI, format interface{}) error {
	// Marshal and write to disk.
	formatBytes, err := json.Marshal(format)
	if err != nil {
		return err
	}

	// Purge any existing temporary file, okay to ignore errors here.
	defer disk.DeleteFile(minioMetaBucket, formatConfigFileTmp)

	// Append file `format.json.tmp`.
	if err = disk.AppendFile(minioMetaBucket, formatConfigFileTmp, formatBytes); err != nil {
		return err
	}

	// Rename file `format.json.tmp` --> `format.json`.
	return disk.RenameFile(minioMetaBucket, formatConfigFileTmp, minioMetaBucket, formatConfigFile)
}

// loadFormatXL - loads format.json from disk.
func loadFormatXL(disk StorageAPI) (format *formatXLV3, err error) {
	buf, err := disk.ReadAll(minioMetaBucket, formatConfigFile)
	if err != nil {
		// 'file not found' and 'volume not found' as
		// same. 'volume not found' usually means its a fresh disk.
		if err == errFileNotFound || err == errVolumeNotFound {
			var vols []VolInfo
			vols, err = disk.ListVols()
			if err != nil {
				return nil, err
			}
			if len(vols) > 1 || (len(vols) == 1 &&
				vols[0].Name != minioMetaBucket &&
				vols[0].Name != "lost+found") {
				// 'format.json' not found, but we
				// found user data.
				return nil, errCorruptedFormat
			}
			// No other data found, its a fresh disk.
			return nil, errUnformattedDisk
		}
		return nil, err
	}

	// Try to decode format json into formatConfigV1 struct.
	format = &formatXLV3{}
	if err = json.Unmarshal(buf, format); err != nil {
		return nil, err
	}

	// Success.
	return format, nil
}

// Valid formatXL basic versions.
func checkFormatXLValue(formatXL *formatXLV3) error {
	// Validate format version and format type.
	if formatXL.Version != formatMetaVersionV1 {
		return fmt.Errorf("Unsupported version of backend format [%s] found", formatXL.Version)
	}
	if formatXL.Format != formatBackendXL {
		return fmt.Errorf("Unsupported backend format [%s] found", formatXL.Format)
	}
	if formatXL.XL.Version != formatXLVersionV3 {
		return fmt.Errorf("Unsupported XL backend format found [%s]", formatXL.XL.Version)
	}
	return nil
}

// Check all format values.
func checkFormatXLValues(formats []*formatXLV3) error {
	for i, formatXL := range formats {
		if formatXL == nil {
			continue
		}
		if err := checkFormatXLValue(formatXL); err != nil {
			return err
		}
		if len(formats) != len(formatXL.XL.Sets)*len(formatXL.XL.Sets[0]) {
			return fmt.Errorf("%s disk is already being used in another erasure deployment. (Number of disks specified: %d but the number of disks found in the %s disk's format.json: %d)",
				humanize.Ordinal(i+1), len(formats), humanize.Ordinal(i+1), len(formatXL.XL.Sets)*len(formatXL.XL.Sets[0]))
		}
	}
	return nil
}

// Get backend XL format in quorum `format.json`.
func getFormatXLInQuorum(formats []*formatXLV3) (*formatXLV3, error) {
	formatHashes := make([]string, len(formats))
	for i, format := range formats {
		if format == nil {
			continue
		}
		h := sha256.New()
		for _, set := range format.XL.Sets {
			for _, diskID := range set {
				h.Write([]byte(diskID))
			}
		}
		formatHashes[i] = hex.EncodeToString(h.Sum(nil))
	}

	formatCountMap := make(map[string]int)
	for _, hash := range formatHashes {
		if hash == "" {
			continue
		}
		formatCountMap[hash]++
	}

	maxHash := ""
	maxCount := 0
	for hash, count := range formatCountMap {
		if count > maxCount {
			maxCount = count
			maxHash = hash
		}
	}

	if maxCount < len(formats)/2 {
		return nil, errXLReadQuorum
	}

	for i, hash := range formatHashes {
		if hash == maxHash {
			format := *formats[i]
			format.XL.This = ""
			return &format, nil
		}
	}

	return nil, errXLReadQuorum
}

func formatXLV3Check(reference *formatXLV3, format *formatXLV3) error {
	tmpFormat := *format
	this := tmpFormat.XL.This
	tmpFormat.XL.This = ""
	if len(reference.XL.Sets) != len(format.XL.Sets) {
		return fmt.Errorf("Expected number of sets %d, got %d", len(reference.XL.Sets), len(format.XL.Sets))
	}

	// Make sure that the sets match.
	for i := range reference.XL.Sets {
		if len(reference.XL.Sets[i]) != len(format.XL.Sets[i]) {
			return fmt.Errorf("Each set should be of same size, expected %d got %d",
				len(reference.XL.Sets[i]), len(format.XL.Sets[i]))
		}
		for j := range reference.XL.Sets[i] {
			if reference.XL.Sets[i][j] != format.XL.Sets[i][j] {
				return fmt.Errorf("UUID on positions %d:%d do not match with, expected %s got %s",
					i, j, reference.XL.Sets[i][j], format.XL.Sets[i][j])
			}
		}
	}

	// Make sure that the diskID is found in the set.
	for i := 0; i < len(tmpFormat.XL.Sets); i++ {
		for j := 0; j < len(tmpFormat.XL.Sets[i]); j++ {
			if this == tmpFormat.XL.Sets[i][j] {
				return nil
			}
		}
	}
	return fmt.Errorf("Disk ID %s not found in any disk sets %s", this, format.XL.Sets)
}

// saveFormatXLAll - populates `format.json` on disks in its order.
func saveFormatXLAll(ctx context.Context, storageDisks []StorageAPI, formats []*formatXLV3) error {
	var errs = make([]error, len(storageDisks))

	var wg = &sync.WaitGroup{}

	// Write `format.json` to all disks.
	for index, disk := range storageDisks {
		if formats[index] == nil || disk == nil {
			errs[index] = errDiskNotFound
			continue
		}
		wg.Add(1)
		go func(index int, disk StorageAPI, format *formatXLV3) {
			defer wg.Done()
			errs[index] = saveFormatXL(disk, format)
		}(index, disk, formats[index])
	}

	// Wait for the routines to finish.
	wg.Wait()

	writeQuorum := len(storageDisks)/2 + 1
	return reduceWriteQuorumErrs(ctx, errs, nil, writeQuorum)
}

// relinquishes the underlying connection for all storage disks.
func closeStorageDisks(storageDisks []StorageAPI) {
	for _, disk := range storageDisks {
		if disk == nil {
			continue
		}
		disk.Close()
	}
}

// Initialize storage disks based on input arguments.
func initStorageDisks(endpoints EndpointList) ([]StorageAPI, error) {
	// Bootstrap disks.
	storageDisks := make([]StorageAPI, len(endpoints))
	for index, endpoint := range endpoints {
		storage, err := newStorageAPI(endpoint)
		if err != nil && err != errDiskNotFound {
			return nil, err
		}
		storageDisks[index] = storage
	}
	return storageDisks, nil
}

// formatXLV3ThisEmpty - find out if '.This' field is empty
// in any of the input `formats`, if yes return true.
func formatXLV3ThisEmpty(formats []*formatXLV3) bool {
	for _, format := range formats {
		if format == nil {
			continue
		}
		// NOTE: This code is specifically needed when migrating version
		// V1 to V2 to V3, in a scenario such as this we only need to handle
		// single sets since we never used to support multiple sets in releases
		// with V1 format version.
		if len(format.XL.Sets) > 1 {
			continue
		}
		if format.XL.This == "" {
			return true
		}
	}
	return false
}

// fixFormatXLV3 - fix format XL configuration on all disks.
func fixFormatXLV3(storageDisks []StorageAPI, endpoints EndpointList, formats []*formatXLV3) error {
	for i, format := range formats {
		if format == nil || !endpoints[i].IsLocal {
			continue
		}
		// NOTE: This code is specifically needed when migrating version
		// V1 to V2 to V3, in a scenario such as this we only need to handle
		// single sets since we never used to support multiple sets in releases
		// with V1 format version.
		if len(format.XL.Sets) > 1 {
			continue
		}
		if format.XL.This == "" {
			formats[i].XL.This = format.XL.Sets[0][i]
			if err := saveFormatXL(storageDisks[i], formats[i]); err != nil {
				return err
			}
		}
	}
	return nil
}

// initFormatXL - save XL format configuration on all disks.
func initFormatXL(ctx context.Context, storageDisks []StorageAPI, setCount, disksPerSet int) (format *formatXLV3, err error) {
	format = newFormatXLV3(setCount, disksPerSet)
	formats := make([]*formatXLV3, len(storageDisks))

	for i := 0; i < setCount; i++ {
		for j := 0; j < disksPerSet; j++ {
			newFormat := *format
			newFormat.XL.This = format.XL.Sets[i][j]
			formats[i*disksPerSet+j] = &newFormat
		}
	}

	// Initialize meta volume, if volume already exists ignores it.
	if err = initFormatXLMetaVolume(storageDisks, formats); err != nil {
		return format, fmt.Errorf("Unable to initialize '.minio.sys' meta volume, %s", err)
	}

	// Save formats `format.json` across all disks.
	if err = saveFormatXLAll(ctx, storageDisks, formats); err != nil {
		return nil, err
	}

	return format, nil
}

// Make XL backend meta volumes.
func makeFormatXLMetaVolumes(disk StorageAPI) error {
	// Attempt to create `.minio.sys`.
	if err := disk.MakeVol(minioMetaBucket); err != nil {
		if !IsErrIgnored(err, initMetaVolIgnoredErrs...) {
			return err
		}
	}
	if err := disk.MakeVol(minioMetaTmpBucket); err != nil {
		if !IsErrIgnored(err, initMetaVolIgnoredErrs...) {
			return err
		}
	}
	if err := disk.MakeVol(minioMetaMultipartBucket); err != nil {
		if !IsErrIgnored(err, initMetaVolIgnoredErrs...) {
			return err
		}
	}
	return nil
}

var initMetaVolIgnoredErrs = append(baseIgnoredErrs, errVolumeExists)

// Initializes meta volume on all input storage disks.
func initFormatXLMetaVolume(storageDisks []StorageAPI, formats []*formatXLV3) error {
	// This happens for the first time, but keep this here since this
	// is the only place where it can be made expensive optimizing all
	// other calls. Create minio meta volume, if it doesn't exist yet.
	var wg = &sync.WaitGroup{}

	// Initialize errs to collect errors inside go-routine.
	var errs = make([]error, len(storageDisks))

	// Initialize all disks in parallel.
	for index, disk := range storageDisks {
		if formats[index] == nil || disk == nil {
			// Ignore create meta volume on disks which are not found.
			continue
		}
		wg.Add(1)
		go func(index int, disk StorageAPI) {
			// Indicate this wait group is done.
			defer wg.Done()

			errs[index] = makeFormatXLMetaVolumes(disk)
		}(index, disk)
	}

	// Wait for all cleanup to finish.
	wg.Wait()

	// Return upon first error.
	for _, err := range errs {
		if err == nil {
			continue
		}
		return toObjectErr(err, minioMetaBucket)
	}

	// Return success here.
	return nil
}

// Get all UUIDs which are present in reference format should
// be present in the list of formats provided, those are considered
// as online UUIDs.
func getOnlineUUIDs(refFormat *formatXLV3, formats []*formatXLV3) (onlineUUIDs []string) {
	for _, format := range formats {
		if format == nil {
			continue
		}
		for _, set := range refFormat.XL.Sets {
			for _, uuid := range set {
				if format.XL.This == uuid {
					onlineUUIDs = append(onlineUUIDs, uuid)
				}
			}
		}
	}
	return onlineUUIDs
}

// Look for all UUIDs which are not present in reference format
// but are present in the onlineUUIDs list, construct of list such
// offline UUIDs.
func getOfflineUUIDs(refFormat *formatXLV3, formats []*formatXLV3) (offlineUUIDs []string) {
	onlineUUIDs := getOnlineUUIDs(refFormat, formats)
	for i, set := range refFormat.XL.Sets {
		for j, uuid := range set {
			var found bool
			for _, onlineUUID := range onlineUUIDs {
				if refFormat.XL.Sets[i][j] == onlineUUID {
					found = true
				}
			}
			if !found {
				offlineUUIDs = append(offlineUUIDs, uuid)
			}
		}
	}
	return offlineUUIDs
}

// Mark all UUIDs that are offline.
func markUUIDsOffline(refFormat *formatXLV3, formats []*formatXLV3) {
	offlineUUIDs := getOfflineUUIDs(refFormat, formats)
	for i, set := range refFormat.XL.Sets {
		for j := range set {
			for _, offlineUUID := range offlineUUIDs {
				if refFormat.XL.Sets[i][j] == offlineUUID {
					refFormat.XL.Sets[i][j] = offlineDiskUUID
				}
			}
		}
	}
}

// Initialize a new set of set formats which will be written to all disks.
func newHealFormatSets(refFormat *formatXLV3, setCount, disksPerSet int, formats []*formatXLV3, errs []error) [][]*formatXLV3 {
	newFormats := make([][]*formatXLV3, setCount)
	for i := range refFormat.XL.Sets {
		newFormats[i] = make([]*formatXLV3, disksPerSet)
	}
	for i := range refFormat.XL.Sets {
		for j := range refFormat.XL.Sets[i] {
			if errs[i*disksPerSet+j] == errUnformattedDisk || errs[i*disksPerSet+j] == nil {
				newFormats[i][j] = &formatXLV3{}
				newFormats[i][j].Version = refFormat.Version
				newFormats[i][j].Format = refFormat.Format
				newFormats[i][j].XL.Version = refFormat.XL.Version
				newFormats[i][j].XL.DistributionAlgo = refFormat.XL.DistributionAlgo
			}
			if errs[i*disksPerSet+j] == errUnformattedDisk {
				newFormats[i][j].XL.This = ""
				newFormats[i][j].XL.Sets = nil
				continue
			}
			if errs[i*disksPerSet+j] == nil {
				newFormats[i][j].XL.This = formats[i*disksPerSet+j].XL.This
				newFormats[i][j].XL.Sets = nil
			}
		}
	}
	return newFormats
}


text:
Serving Clients Across Texas
Asset & Debt Division
Business Owner Divorce
Common Law Divorce
Gay & Lesbian Family Law
High Net Worth Divorce
Post-Marital Agreements
Temporary Orders
Benefits of Consultation Fees
Michelle May O'Neil
Michael D. Wysocki
David W. Wynne
LeAnn W. Diamond
Jennifer Satagaj
Jeff Branch
Lynne Milford
Brook Fulks
Erica Eslinger
Julie Aguilar
Karri Bertrand
Jordan Ezell
Kassie Hines
Presumption of MATERNITY in Texas?
By O'Neil Wysocki
Did you know that the presumptions of paternity apply also to presumptions of maternity? Little known Texas Family Code section 160.106 says that the provision of Chapter 160 relating to the determination of paternity apply to a determination of maternity. In looking at the provisions related to paternity, the presumption of parentage would apply to a child born during a marriage, to a parent who signs an acknowledgment of parentage, or to persons voluntarily named as a parent on a child's birth certificate. What about in 160.202 (5) where paternity is presumed for a man who, during the first 2 years of a child's life, resides in the household with the child and represented to others that the child was his own — does that paternity presumption apply also to maternity? According to 160.106 it does. This is one of the sticky situations that may come with the recognition of same-sex marriages in Texas involves the parental presumptions that will arise with children of such relationships. Take a lesbian couple where one mother decides to give birth to a child during the marriage. Once Texas recognizes those marriages, the non-biological partner could claim a presumption of maternity by virtue of being married at the time of the birth. Or, even if the couple were not married, but lived together during the first 2 years of the child's life and represented to others that they were both mothers, a presumption of parentage could apply. This statute is part of the Uniform Parentage Act which was also adopted by California. There, the case In re D.S. actually finds that the presumption of maternity code section was designed to provide an avenue for presumed parentage for same-sex couples:
"[I]n the context of same-sex relationships involving two women, courts have found a child may have a biological mother and a presumed mother, to the extent the woman who is the nonbiological [or nonadoptive] parent meets the requirements of one or more of the presumptions listed in section 7611." (In re Bryan D. (2011) 199 Cal.App.4th 127, 138–139; see, e.g., S.Y. v. S.B. (2011) 201 Cal.App.4th 1023 [upholding application of section 7611, subdivision (d) to give parental rights to a former partner in a same-sex relationship who had received the adoptive mother's children into her home and held them out as her own].)
Insupportability
Jan 04 Child Custody: An Unexpected Battleground in the Era of COVID-19
At this point, most of us have probably felt the effects of the COVID-19 pandemic in our day-to-day lives. The pandemic expanded ...
Jan 10 How to co-parent with an unreasonable ex
If you and your ex-spouse got along without any conflict, there is a good chance that there would be no need for a divorce to have ...
Jan 03 Best Interest of the child standard in Texas family law cases
The best interest of the child is the overarching factor in deciding Texas family law custody cases. The specifics of how a judge ...
5323 Spring Valley Road, Suite 150
2630 West Freeway, Suite 218

redpajama_set_name: RedPajamaCommonCrawl


This is question is asked and answered on Stack Overflow before, but it always surprises me how many people still don't know the difference.
Deleted everything in the cache that is owned by Magento.
Deletes everything in the cache storage, no matter if it's owned by Magento or not.
That is a little bit abstract. Let's explain this by example. Imagine you have an Magento 2 store that has it's cache configured to be saved in Redis. On the same server you have a Laravel application that also has it's cache configured to be saved in Redis. Normally you would set this up to have them both use different databases within Redis, but this is not always the case. Imagine that 60% of the cache items are created by Magento, and 40% of the items by Laravel.
This would flush 60% of the cache items. This number varies a little as Magento tries to deletes all known cache keys, but you might have a custom cache from a module that does not follow all rules.
This will delete 100% of all keys in the cache, including the keys owned by Laravel. It doesn't make a distinction between the Laravel and Magento keys.
So when to choose which?
It's good to start to flush only the Magento cache, as it is the cleanest one. But if that doesn't solve your current issue, try the Flush Cache Storage variant as it is the most rigorous of the two. If your site is down and you need to find out why, slam this button to see if it helps.
Also, it depends a little on which cache driver you are using. If it is configured to use the database or the file system, there isn't much difference. If it is configured to use Redis, but Magento is the only consumer, then there is still little to none difference.
It all depends a little bit on your setup, but i think that in 99% of the cases there is little to none difference, that's why i'm most of the time defaulting to the Flush Cache Storage option.


text:
@class IOSByteArray;
@class JavaIoOutputStream;
@class JavaUtilZipCRC32;

#include "J2ObjC_header.h"
#include "java/util/zip/DeflaterOutputStream.h"

@interface JavaUtilZipGZIPOutputStream : JavaUtilZipDeflaterOutputStream {
 @public
  JavaUtilZipCRC32 *crc_;
}

- (instancetype)initWithJavaIoOutputStream:(JavaIoOutputStream *)os;

- (instancetype)initWithJavaIoOutputStream:(JavaIoOutputStream *)os
                               withBoolean:(jboolean)syncFlush;

- (instancetype)initWithJavaIoOutputStream:(JavaIoOutputStream *)os
                                   withInt:(jint)bufferSize;

- (instancetype)initWithJavaIoOutputStream:(JavaIoOutputStream *)os
                                   withInt:(jint)bufferSize
                               withBoolean:(jboolean)syncFlush;

- (void)finish;

- (void)writeWithByteArray:(IOSByteArray *)buffer
                   withInt:(jint)off
                   withInt:(jint)nbytes;

@end

J2OBJC_EMPTY_STATIC_INIT(JavaUtilZipGZIPOutputStream)

J2OBJC_FIELD_SETTER(JavaUtilZipGZIPOutputStream, crc_, JavaUtilZipCRC32 *)

CF_EXTERN_C_BEGIN
CF_EXTERN_C_END

J2OBJC_TYPE_LITERAL_HEADER(JavaUtilZipGZIPOutputStream)

#endif // _JavaUtilZipGZIPOutputStream_H_

redpajama_set_name: RedPajamaGithub


text:
Click here to subscribe to our Daily News Updates
The DI Wire
Home News Caliber to Develop Behavioral Health Hospital in Downtown Phoenix Opportunity Zone
Caliber to Develop Behavioral Health Hospital in Downtown Phoenix Opportunity Zone
Caliber, a full-service real estate investment company based in Scottsdale, plans to develop a 62,600-square-foot behavioral health hospital located in a downtown Phoenix opportunity zone.
Caliber, a full-service real estate investment company based in Scottsdale, plans to develop a 62,600-square-foot behavioral health hospital located in a downtown Phoenix opportunity zone. The 96-bed facility will be occupied by Medical Behavioral Hospital of Phoenix LLC and will care for patients struggling with medical and psychiatric conditions.
Caliber purchased the facility, located near 14th Street and McDowell Road, for $10 million and plans to complete $9.5 million of renovations in the next year. Initial site demolition is already underway, and renovations are expected to be complete by 2020.
The new Medical Behavioral Hospital of Phoenix will primarily serve Medicare and Medicaid patients, and the company said that it will help ease the strain on traditional emergency departments and hospitals.
The facility is located within 15 miles of 27 medical hospitals and is expected to form agreements with other medical organizations to provide care for patients with complex medical, behavioral and neuropsychiatric issues.
"This is a great example of how opportunity zones can truly make a positive impact on communities by enabling projects that are profitable, yet otherwise may not have attracted traditional funding," said Chris Loeffler, chief executive officer and co-founder of Caliber. "The hospital is expected to bring 80 high-income jobs into downtown Phoenix and, more importantly, serve a population in desperate need for advanced care."
The hospital is the fourth investment to be included in the Caliber Tax Advantaged Opportunity Zone Fund LP and is one of the country's first healthcare opportunity zone properties.
Caliber's opportunity zone fund has raised more than $40 million since its launch in the fourth quarter of 2018. The company said that the fund is expected to reach its $500 million goal within two years.
"The partnership with Caliber has allowed us to expand our reach and bring proven behavioral healthcare programming to an additional 4,500 patients each year," said Dr. Cameron Gilbert, chairman and CEO of the Medical Behavioral Hospital of Phoenix.
Dr. Gilbert currently operates four facilities in Indiana, and this project will be the organization's first location in Arizona, with plans for future expansion throughout the Southwest already in the works.
Headquartered in Scottsdale, Arizona with an investment focus in the Greater Southwest growth markets, Caliber provides individual accredited investors and registered investment advisors with alternatives to traditional investments. The company has more than $750 million in assets under management and development in commercial, residential, and hospitality real estate in Arizona, Colorado, Texas, Nevada, Utah and Alaska.
The company currently offers four private real estate funds, two focused on income and two focused on growth, including its $500 million qualified opportunity zone investment fund.
Click here to visit The DI Wire directory sponsor page.
Caliber Tax Advantaged Opportunity Zone Fund
Chris Loeffler
OZ Fund
QOZ
qualified opportunity zone
Previous articlePlatform Ventures Launches DST Offering for Nine-Facility Dialysis Portfolio
Next articleFormer Woodbridge Group CEO Pleads Guilty to Running $1.3 Billion Ponzi Scheme
Federal Opportunity Zone Program Under Investigation by Treasury's Internal Watchdog
Hines Global REIT Sells Office Complex Near Boston for $235 Million
Pacific Oak Completes First DST Offering of Multifamily Property in the Permian Basin
DIRECTORY SPOTLIGHT
Contact us: info@thediwire.com
The DI Wire is the definitive news source for the illiquid alternative investment industry. The only media site dedicated exclusively to the coverage of non-traded REITs, business development companies, interval funds, closed-end funds, DSTs and the full range of private placement offerings, The DI Wire has grown to become the most trusted news source for the community of sponsors, broker-dealers and wealth advisors who provide these investment offerings to millions of American retail investors. Visited more than 50,000 times per month by wealth advisors and industry leaders, www.TheDIWire.com is an invaluable resource for anyone interested in the illiquid alternative investment industry.
© 2019 The DI Wire. All rights reserved.


this is going to be a very busy week for us! Jenn and David are getting married!!!! In fact Jenn's birthday is Tuesday, they are getting married on Wednesday and David's birthday is Thursday! mercy!
Here is a close up of the flower on their card. the flower is from SVG cuts - their first flower bundle! LOVE< LOVE< LOVE IT!!!!
The skittle I dyed myself! fun stuff! then I used my cuttle bug to emboss the green and the white paper. added a little bit of sparkle with clear stickles. Now what to put inside of the card? hmmmm - maybe money???? LOL!
Lorene that is a spectacular card. I love what you did with the flower cut..
Lorene, that is a beautiful card you made. Love the flower! Thank you so much for sharing.


text:
Q: how to install ssl on windows IIS server 2008 I am trying to enable https on windows server 2008. I followed below link.
https://www.sslshopper.com/article-installing-an-ssl-certificate-in-windows-server-2008-iis-7.0.html
https://www.digicert.com/ssl-certificate-installation-microsoft-iis-7.htm
A ssl certificate get added but at the time of binding with https, it doesn't show any certificate added. please give me some reference link or tell me if i am doing any wrong config?

A: https://blog.lextudio.com/2015/06/the-whole-story-of-server-certificate-disappears-in-iis-77-588-510-0-after-installing-it-why/
Just make sure you create a PFX file as IIS wishes. Then you can import it easily.

redpajama_set_name: RedPajamaStackExchange


Mazda Raceway Laguna Seca has added a vintage racing event to its 2017 calendar, the Spring Classic set for May 19-21.
Mazda Raceway Laguna Seca has added a vintage racing event to its 2017 calendar, the Spring Classic set for May 19-21. The three-day event was created to showcase racing in nine classes from several different era,s but the primary focus is on race cars from the 1970s, '80s, and '90s.
"Adding the Spring Classic to an exciting slate of events this season is a great way to celebrate 60 years of Mazda Raceway Laguna Seca," said Gill Campbell, the track's chief executive and general manager.
The groups set to run in May include 1967-72 Formula B, 1973-84 SCCA Production GT Cars, 1966-72 Trans-Am, 1966-74 Can-Am, 1973-79 Formula Atlantic, 1966-72 Trans-Am 2.5 Liter, 1983-2007 World Sports Car/Le Mans Prototype, 1979-2006 Historic Stock Cars, and 1967-84 Formula 1.
"We've had a great response from the entrants in the Trans-Am groups, which have been popular categories among the fans" said Campbell.
"The Can-Am group is also a popular one for fans and participants alike as they represent the true definition of win at any cost," said Campbell.
Qualifying will take place Friday, May 19, with racing May 20 and 21.
Owners and drivers interested in participating may complete an entry request online. Cars will be evaluated by a panel of experts who will examine each car's authenticity and relevance to the group.


Celadrin or cetyl myristoleate - is one of a number of supplements taken by arthritis sufferers, but it really came into its own recently when the government withdrew popular painkillers like Vioxx from the market due to health concerns. This left many arthritis suffers with no option but to consider an operation to relieve their pain. An operation or a supplement like Celadrin? Many decided to try the less invasive option first.
Traditionally, doctors have not been keen to offer supplements to their patients, but many are increasingly coming to see that products like Celadrin may be a suitable alternative for those people who for some reason cannot - or choose not to - have an operation.
A scientist who was trying to understand why he couldnt induce arthritis into mice discovered Celadrin about a decade ago. It contains a blend of eight stable fatty acids that can easily penetrate cell membranes and by providing lubrication to the cell membranes and decreasing inflammation it supports joint health. In fact, research has shown that it definitely improves not only the range of motion in a joint affected by arthritis, but balance, strength and endurance were also improved.
Placebo-controlled studies in 2002 showed that the subjects were able to perform several day-to-day functions like climbing stairs and even simply walking that had been painfully difficult before. Some subjects were even able to return to jogging, an exercise that had been impossible for some time due to the pain and stiffness experienced from arthritis.
University bio-chemist Dr. Daniel Gallaher PhD, prescribes Celadrin for many of his patients and has had no side-effects reported. The pills may need to be taken for at least two months before improvement is noticed, though in some cases this time is considerably shorter. Some patients have noted a dramatic improvement within a few days of applying the lotion.
Daniel Hoeffal MD, advises his patients to take the product scientifically. That is, no more than one supplement at a time and stick to the instructions on the bottle. If several supplements are taken at once, there is no way of determining which was the one responsible for giving relief.


text:
Archive for the 'Rendez-vous' Category
Amadou and Mariam to perform in Addis
March 1, 2014 arefe	Leave a comment
The Grammy Award-nominated musical duo from Mali, Amadou & Mariam will perform at an outdoor concert in Addis Ababa's Alliance Alliance éthio-française on March 19, 2014 as part of the Francophonie week.
The blind husband-and-wife whose last album, 'Folila' (which means "music" in their country's Bambara language) released on April 2012, are coming to Addis for the first time to perform in Ethiopia. On March 20, they would also be playing at Hilton Hotel hall.
Amadou and Mariam have been playing together since the 1970s, rising through the African and European music scenes to become one of the hottest world music acts today, sharing the stage with artists including Coldplay, U2, Alicia Keys and Pink Floyd's David Gilmour. The piece Dimanche à Bamako was a global hit.
Categories: Music, Rendez-vous Tags: Amadou, Francophonie week, Mali, Mariam
A book on photography and Emperor Menelik to be launched
May 8, 2013 arefe	Leave a comment
A new book chronicling the use of photography as communication and propaganda medium in Emperor Menelik II's palace is set to launch next week here in Addis Ababa. The book entirely written in French and entitled, 'Le Roi des rois et la photographie. Politique de l'image et pouvoir royal en Ethiopie sous le règne de Ménélik II' is the offering from the French scholar, Estelle Sohier.The author said her book is about the history of the creation of photographs by the court, their uses, and their political stakes. "These documents bring a new perspective to the history of Ethiopian royalty at the beginning of the 20th century and its relations with the outside world," she said.
Estelle received her PhD in history from the University of Paris 1 Panthéon-Sorbonne and the University of Naples in 2007. She is now a lecturer at the Department of Geography of the University of Geneva. Her current research focuses on the history of photography and its political uses between 1880 and 1930.
The book would be launched on 14 May at two different venues, one at the French Center for Ethiopian Studies (CFEE) at 12.30 pm and at the Alliance Ethio-française at at 6.30 pm.
Categories: Books, Rendez-vous Tags: Estelle Sohier, Le Roi des rois et la photographie. Politique de l'image et pouvoir royal en Ethiopie sous le règne de Ménélik II
Major Tibebe Terffa exhibition to open in Addis
May 2, 2012 arefe	2 comments
A major new exhibition showcasing one of Ethiopia's most exciting contemporary artists is to open at Lela Art Gallery, Addis Ababa on Saturday May 5th. Curated by Leo Lefort and supported by Castel Beer, the exhibition includes a collection of works by the prominent professional studio artist living and working in Addis Ababa.
Over the years, Tibebe has exhibited at various galleries and institutes in Addis Ababa, Dire Dawa and Harar. His work has also been exhibited internationally in Canada, Germany, Switzerland, Spain and the U.S.A. In Canada, he gained popularity during many residency programs he participated in at St Norbert's Art Center in Winnipeg, Manitoba.
Categories: Arts, Exhibition, Rendez-vous Tags: Lela Art Gallery, Tewodros Tsegie Markos, Tibebe Terffa
Sultan to be crowned in Afar
October 29, 2011 arefe	4 comments
Hanfare Ali mirah
A ceremony to celebrate a new sultan's accession to the throne will be held in Afar Region in a week's time. Hanfareh Ali Mirah will succeed his late father, Sultan Ali Mirah as the spiritual chief of the Afars. The new sultan will be crowned at an outdoor coronation ceremony to be held in Asayta, capital of the Afar region on November 10, 2011.
Both spiritual and traditional leader to the two million Afar people who live in a triangle shape region between Eritrea, Ethiopia and Djibouti, the sultan will assume important responsibilities at both regional and national levels, Aramis Houmed, advisor to the new sultan, told Addis Journal. The move follows the death last April of Sultan Ali Mirah.Aramis said the appointment will make the process of succession smoother and more orderly.While traditional leaders hold few constitutional powers, they continue to exert significant influence, the advisor said.They are seen as custodians of both religion and tradition.
Categories: In the news, Rendez-vous, Sultan Ali Mirah
Young artist to present debut show
September 20, 2011 arefe	2 comments
Wendimagegn Gashaw, an emerging artist who makes his solo debut at Alliance Ethio-Française, recreates images of people in a realist style. After graduating from Entoto College last year, the 26-year-old artist has been creating portraiture, intimate close-ups of people that have spoken to him in some way. He says he is drawn to the unique features of faces and the story he glimpses behind them. Children working as shoeshine boy, lottery seller, schoolboys on their way back home, most of them from his neighborhood Ferensay Legasion, have been featured in his works. Read more…
Categories: Arts, Exhibition, Rendez-vous
Art of Ethiopia exhibition coming
July 20, 2011 arefe	2 comments
The fourth edition of Art of Ethiopia exhibition will take place next month. The exhibition will open in Addis on 26th August at Sheraton Addis, the hotel announced. It will go on till 28th August.
More than 43 Ethiopian artists selected by a jury, will present a comprehensive panorama of contemporary art. Each individual work not only speaks for itself but also creates new perspectives when seen juxtaposed against the unique backdrop offered by the Sheraton's Addis Lalibela Grand Ballroom, it was said. More than 400 new works created specifically for the occasion covering a wide range of subjects in a variety of media, including painting, drawing, sculpture bronze castings and wood carvings will be showcased. Read more…
Categories: Arts, Exhibition, Rendez-vous Tags: Art of Ethiopia, Sheraton Addis, Sheraton Addis Art Endowment Fund
ICES to be held in Addis
The 17th International Conference of Ethiopian Studies (ICES) will be held at the Addis Ababa University from November 2 to 6, 2009.Shiferaw Bekele, a teacher at Department of History and Heritage Management of Addis Ababa University, has written a long article about the event and its background in October 25th edition of the Ethiopian Herald.The article isn't available online. So I am publishing an excerpt here.
The 17th International Conference of Ethiopian Studies will be held in the Akaki campus of Addis Ababa University from November 2 to 6, 2009.A few hundred scholars-Ethiopians and foreigners-are expected to take part in the proceedings: Scholars will come from Japan; Europe; the US, Israel, Russia and some other countries. Ethiopians will constitute a formidable presence. By any standard, this is a large gathering of scholars. The current congress marks the golden jubilee celebration because the first was held in Rome from 2 to 4 April 1959. Read more…
Categories: Rendez-vous
Girma to give a piano recital
February 3, 2009 arefe	1 comment
How about this for classical music lovers? The renowned Ethiopian pianist, Girma Yifrashewa will give a piano recital at Sheraton Addis on 19 February, it has been announced. The event, organized by the Alliance Ethio-Francaise in partnership with Sheraton Addis, is one of the most important musical events of the season.
Grima who has made many great records like "The Shepherd with the Flute" "Meleya Kelem" and "Elilata" will be performing some newer compositions and interpretation of French composers, Debussy and Ravel. The harmonic innovations of Claude Debussy (1862-1918) and Maurice Ravel (1875-1937) helped pave the way for the musical upheavals of the twenty century.
Girma who is venturing the interpretation of those musical giants has been introduced to the piano at the age of 16, marking turning point in his life. He studied at the Yared School of Music in Addis for four years and graduated with a diploma in piano. He then received a five-year scholar ship from the Ethiopian government to study at the Sofia State Conservatory of Music and graduated with a Masters in piano. Girma has held many concerts and tours in Africa and in Europe.
For more biographical information, go to Girma's website.
Photo by Wondi.
Art show at Lela Gallery
October 3, 2008 arefe	Leave a comment
An art exhibition is opening at Lela Art gallery tomorrow, October 4th 2008. The exhibition gives visitors an opportunity to see a wide range of original artwork and would feature five artists from Nubia Studio, Dereje Demissie, Kerima Ahmed, Merikokeb Berahun, Samuel Endalalmaw and Yonas Sahele.An e-mail dispatch from the Gallery explains, this is part of Lela gallery's effort to encourage the artist's future development and experimentation.Composed of 2002 graduates of the Addis Ababa School of Fine Arts & Design, the Nubia Studio played a distinct & marked role in the Addis art scene for the past six years. Actively working & organizing art shows in their own studio they defined a relevant alternative to the lack of art dedicated venues, the statment states. In a group or individually, they have traveled and exhibited in Ethiopia, Germany, Uganda, Sudan and Djibouti. Nubia Studio has made great efforts to achieve their goal of depicting beauty in a contemporary urban landscape, which stands out as a fabric woven from the buildings of so-called modern culture and their antithesis – the aged constructions of corrugated iron sheets encrusted with rust and decay-. Gleaned over the city eucalyptus scaffolding, wrapped buildings, blurred faces, architectural patterns, masked sweepers, ghostlike silhouettes, white and blue taxis are waiting to be discovered by visitors to the exhibition… Duration of the show: October 4th – 26th, 2008
Opening Hours: Tuesday to Saturday: 10:30am – 6:30pm
Sundays 2:00pm – 6:00pm & by appointment
A Phiosophical Conference in Addis
March 9, 2008 arefe	4 comments
The Embassy of Mexico in association with the Addis Ababa University is organizing a conference on "Theology, philosophy, Thought, Ethics and Responsibilitiy" on Tuesday March 11, 2008 at 4,00 PM at Social Sciences Faculty room G-17.
The lectutre would be given by Gerardo Martinez Cristerna, Mexican writer and essayist.
It is interesting and heartwarming to have this conference here in Addis.


Cancer is a serious health problem that affects million people. Thanks to research and numerous studies, we have found many ways that can help us fight this disease. You should know that cancer isn't infectious disease. It occurs because our own cells change DNA and start growing abnormally. Usually our immune system eliminates all of them, but in some case, it may fail. Luckily, there are several ways that can help you prevent this. Also, several ways can help you in the fight against cancer. One of them is food.
1. If you don't like broccoli, you should start loving it. Many different vegetables have compounds that can help you in the fight against cancer. However, broccoli contains sulforaphane. This compound is important in flushing chemicals that may cause cancer out of a body.
2. Berries are also useful. All of them contain phytonutrients, a cancer-fighting substance. However, black raspberries are even better. They contain anthocyanins that prevents growth of cancerous cells and prevent forming of new blood vessels. These berries are effective against: skin, oral, colon and esophageal cancer.
3. Tomatoes are not just delicious, they are also useful against cancer. They contain a high level of lycopene. This compound gives tomatoes, red color. But, lycopene is important in a battle versus cancer. Tomatoes are especially important against: lung, stomach and prostate cancers.
4. Walnuts are the best against breast and prostate cancers.
5. Maybe you don't like garlic, but you should eat it anyway. It is useful against breast, stomach and colon cancers. According to several studies, it is very important for women.


Sen. Marco Rubio has strongly and consistently defended the sanctity of life in his political career and presidential campaign.
He says that moral issues, like the definition of life and marriage, are not political issues. They are foundational principles to our society.
John Kasich: Champion of Christian Values and Religious Liberty?
Presidential candidate John Kasich has announced that, if he becomes President, he will create a government agency that exists to spread Judeo-Christian values around the world.
The agency would exist to protect and expand religious liberty, free speech, democracy and other human rights.
The problem? Kasich doesn't even defend these values here, under their Constitutional protections.
We need our government to protect our Judeo-Christian values and Constitutional rights – not try to impose them on everyone else.
One of the fundamental Judeo-Christian values is the sanctity of marriage – but John Kasich has capitulated to the Supreme Court's power grab in redefining this fundamental institution. He passed the buck on this controversy.
If you don't uphold religious liberty as written and protected in the Constitution of a Judeo-Christian nation, the attempt to spread Christian values and freedoms to the most anti-Christian parts of the world is a farce.
I know it's the year of the outsider, but I've had enough of an inexperienced president who doesn't have any idea how to work with his party, let alone the opposition, to govern. Electing another one just because his politics line up with mine makes no sense to me. I want someone who's politics I agree with, but that knows how to govern.
I've seen too many races lost by being so far right that the bulk of the middle opts left. California has become so blue, because Republican primary voters have refused to elect anyone with the slightest purplish tinge.
The past 50+ years of election campaign rhetoric followed by actual evidence of governance makes clear that NO RHETORIC FROM DEMOCRAT/SOCIALIST OR 'ESTABLISHMENT' GOP CANDIDATES IS TO BE TRUSTED.
Only an investigation of their voting records and associations looking for evidence of constitutional-deconstructionism AS A DISQUALIFICATION or constitutional governance as qualification is to be considered – if America's trajectory toward national suicide is to be altered to a trajectory toward restoration.
Luke 12:57 – Yea, and why even of yourselves judge ye not what is right?
Moreover, for America's pulpits to continue to 'edit through omission' the portions of God's Word requiring we engage in 'works' to evidence our faith is real and not assumed, has Christians failing to represent Christ in society and government to aid the needy and to the exclusion of anti-Christian world-views. Other than a few rare pulpits, the fact is that IF those populating today's pulpits, had populated the pulpits in early America, we would likely have remained under European tyranny and slavery may well be legal.
Romans 13 requires we "give unto Caesar." America's version of the biblical Caesar is "the original intent of America's amended constitution." This, because like Caesar represented to Rome the same 'rule of law' the constitution is in America. Also, as military personnel and government officials did in Rome by taking an 'oath to Caesar,' those working in government and the military take an oath to "preserve, protect, and defend the constitution." 98-million Americans claiming Christ are obligated to ensure their candidates will "preserve, protect, and defend the constitution" consistent with their oath of office – not compromise with democratic socialist/globalists as the governance records of 'establishment' candidates Rubio and Bush evidence.
The GOP can win every future election and America still be destroyed – if the GOP is not cleansed of the constitutional-deconstructionists and 'new world order' global engineers that infected the GOP like a cancer.
Believing in the campaign rhetoric of Rubio and Bush thereby allowing one of them to be elected merely insurers another election cycle whereby GOP voters must choose within the context of a dialectical 'loose/loose.' Either expediting America's destruction with a Democrat, or destruction in different ways and slower with a constitutionally-schizophrenic 'establishment' GOP politician – merchandised to us by there conservative-relativist accomplices in the mainstream media.


text:
Q: Java custom exception class I am having a rather trivial problem creating my own exception class. I have extending it and am trying to recieve a double in the constructor but I keep getting errors.
Error inside of bankaccount @withdraw "incompatible types: InsufficientFundsException cannot be converted to throwable"
Exception class:
    public class InsufficientFundsException extends RuntimeException {

    private double shortFall;

    public InsufficientFundsException(double a) {
        super("Insufficient funds");
        shortFall = a;
    }

    public double getAmount() { return shortFall; }

}

Bank Account class:
public class BankAccount {

    private int accountNumber;
    private double balance;

    // Class constructor
    public BankAccount(int account) {
        accountNumber = account;
        balance = 0.0;
    }

    public int getAccountNumber() {

        return accountNumber;
    }

    public double getBalance()
    {
        return balance;
    }

    public void deposit(double b) {
        balance += b;
    }

    public void withdraw(double w) throws InsufficientFundsException {

        double difference;
        if(w > balance) {
            difference = w - balance;
        } else {
            balance -= w;
        }
    }

I would like to withdraw money unless the withdraw is greater than the current balance. In which case I want to throw an exception. I also tried to throw and exception inside of the if but I get:
constructor InsufficientFundsException in class InsufficientFundsException cannot be applied to gived types;
required: no arguments
found: double
reason: actual and formal argument lists differ in length
 public void withdraw(double w)  {

        double difference;
        if(w > balance) {
            difference = w - balance;
            Exception ex =  new InsufficientFundsException(difference);
        } else {
            balance -= w;
        }
    }

I only have the one constructor though. Any advice or help is appreciated.

A: Have you tried...
throw new InsufficientFundsException(difference);

in place of
Exception ex =  new InsufficientFundsException(difference);

That's generally how exceptions are thrown.
Updated code snippet...
public void withdraw(double w) throws InsufficientFundsException {

    double difference;
    if(w > balance) {
        difference = w - balance;
        throw new InsufficientFundsException(difference);
    } else {
        balance -= w;
    }
}

Ran with...
public static void main(String[] args){
    BankAccount account = new BankAccount(1);
    account.withdraw(5.0);
}

Got....
Exception in thread "main" com.misc.help.InsufficientFundsException:     Insufficient funds
at com.misc.help.BankAccount.withdraw(BankAccount.java:32)
at com.misc.help.BankAccount.main(BankAccount.java:40)


Yellow brings joy, white brings beauty and green is goodness, life and hope.
In May and June, my commute to and from work takes me through tunnels of sunlit green. The hedges on either side of the lanes become utterly verdant; the trees exude life; the grasses in the fields catch the breeze and the light just beautifully.
There is nothing like a walk in all this green to raise the spirits even more. Stood in a field of grass or wandering down a quiet lane amid the May hedgerows feels safe and pure. My heart brims, where before it was weary or subdued.
The birds sing as loudly as they can, punctuating the quiet like church bells. The flowers, in all their colours and shapes, are sweetly abundant all through the hedges.
At home, a salad of avocado and lettuce or a sparkling tonic with lime and mint bring a simple, summery refreshment.
As evening draws in, the darkening sky softens the green of the trees outside the window, making them velvety, but just as strong and safe and good as the sunlight showed them to be.


Load up your handgun with this high performing self defense ammo from Italian leader Fiocchi.
These 40 S&W jacketed hollow point rounds will not let you down when you're fighting off an assailant. The 165 grain weight bullet delivers the expansion you need to stop them in their tracks. This product is loaded with similar grain weights as Fiocchi's Exacta line, but for a much more affordable price. You can stock up and practice as much as you want without breaking the bank.
For those interested in ballistics, the muzzle velocity of this ammo is 1100 feet per second and muzzle energy is 443 ft. lbs. Your 50 rounds will be delivered to you in brand new condition. The Boxer primed brass casing are reloadable and non-corrosive.
Fiocchi Shooting Dynamics ammunition provides great quality and consistency for the high-volume shooter. Most of Fiocchi's ammunition is loaded at their plant in Ozark, Missouri. They also import ammo and reloading components from their plant in Italy. The company is still family owned.


text:
In Africa, Money Isn't Only Reason Young Girls Are Sexually Exploited
By Judith Matloff Staff writer of The Christian Science Monitor
Wendy (not her real name) was 14 when her father sold her into marriage. Her husband was an older man she had never met who paid her family $25 as a lobola, or bride price.
He took the girl away from her village in northern Zambia to a shantytown on the edge of the capital 300 miles away. Now she sits, aged 16, in a loveless marriage in a shack, forced to cook, clean, and have sex with a man she doesn't like but who continually reminds her he "owns" her.
Did she want to get married? "No." Does she want to continue her marriage? "No!" Why did her parents do it? The slender girl shrugs. "They needed the money. It's the way things are done here." Poverty and the low status of women are fuelling the sexual exploitation of girls in Africa, the world's poorest continent.
Paying lobola for children is among the more traditional forms of abusing girls, who are seen as mere commodities to be traded away. But the practice is just a tiny element of the problem, experts say. AIDS, hunger, and wars have weakened family structures and sent thousands, if not millions, of young orphans and desperate girls onto the streets for prostitution as a means to somehow survive.
The myth that having sex with a young girl will cure AIDS is also contributing to demand.
From the refugee camps of Sierra Leone to the city streets of Nairobi and truck routes of Tanzania, children are offering their bodies for as little as a sandwich or shoes. The offenders are employers, foreign peacekeepers, soldiers, and even guardians who encourage girls to earn money by whatever means.
Experts say child sexual exploitation in Africa differs from other parts of the world, where the motivation is primarily money. In Africa, victims are often abused by soldiers in such battlefields as Angola, Rwanda, or Liberia; taken as slaves in Sudan; or forced into sex while working as domestic workers across the continent.
"It's not overt commercialized sexual exploitation as in parts of Asia. Transactions are frequently power- or fear-related rather than monetary," says Martin Mogwanja, UNICEF's deputy director for West and Central Africa.
A notable exception is South Africa, one of Africa's richest countries, where a child sex industry is developing in the tourist ports of Cape Town and Durban. Boys and girls as young as 6 are kidnapped by gangs and forced into prostitution, sometimes catering to foreigners, says Bernadette van Vuuren, advocacy director of the Cape Town-based Resources Aimed at Prevention of Child Abuse and Neglect.
Experts say it is impossible to estimate how many thousands, if not millions, of African children are being sexually exploited. But with conflicts in at least half a dozen countries and 5 million AIDS orphans expected in Africa by the year 2000, the number of cases is expected to soar.
An idea of the crisis can be gleaned by studies in individual communities. A YWCA survey in Bo, Sierra Leone's second-largest city, which is overrun by war refugees, showed that 54 of 90 girls surveyed were involved in prostitution. And in Ethiopia's capital, Addis Ababa, more than half of 100,000 prostitutes are under 18, according to Save the Children, an international charity.
One of the worst places for the sexual exploitation of minors is Zambia, where one of Africa's highest levels of AIDS and five years of harsh austerity measures that have curtailed free social services have sent armies of girls into the streets.
Among them was Justine Kalandanya, 15, who has been a prostitute for four years, along with her mother and older sister. "It all began when my daddy died, and I had to earn money for school fees," she said, cradling a baby, her third. She joined a rehabilitation center, Tacintha, but now the program is running out of money. Justine has returned to the streets to earn money for food.
Signs of Hope in Africa
In Sierra Leone and Mozambique, both of which are emerging from civil wars, many girls who were used as "comfort women" for soldiers are being given help to reenter society.
A combination of Western-style counseling and traditional healing methods are favored by Boia Efraeme, a psychologist with the Mozambican Association of Public Health. He says "rebirth" rituals vary from sprinkling water on the person to elaborate all-night ceremonies involving the whole village and animal sacrifices.
"Many times the cleansing rituals can help relieve the girl of shame or guilt from being sexually abused. They believe they are cured so they can more easily get on with their lives," he says.
In Sierra Leone's capital, Freetown, Roman Catholic priest Michael Hickey runs a program for child war victims that reunites families, pays school fees, and offers counseling. He says that all but one of the original 10 girls brought into the program three years ago have readjusted to normal life.
Social workers in Zambia favor getting children off the streets and teaching them skills. But local nongovernmental organizations (NGOs) complain of a lack of resources, free education, and jobs to prevent the children from returning to the streets.
The YWCA in Zambia holds education workshops in shantytowns to discourage exploitation of children by adults. One group known as Tacintha rides through the streets looking for prostitutes and then brings them to its shelter and training center. Fountain of Hope finds sponsors to pay the school fees of street children.
Similar methods are used in the West African nation of Benin, where NGOs are teaching girls income-generating activities so they can stop being maids in homes, where they are often exploited sexually.
In Mauritania, an educational workshop on children's rights by NGOs led to a government order for airport police to ban children from flying to the Middle East to work as domestics, when they are often abused.
Africa Monitor Not just 'Lost Boys,' but 'Lost Girls' – in war-torn South Sudan
The Monitor's View Ending the hypersexualization of girls
UN peacekeepers are again accused of sexual exploitation


Unlike other sciences whose secrets are hidden within breathing bodies or mechanized forms, astronomy is open to all eyes. As children we reach for those white specks patterned against a blue-black canvas. We cannot believe that the stars are really that far. Yet the appeal and mystery of the heavens never truly fades. Although astronomy is a precise, meticulous science, it is also part fiction, poetry, philosophy, and theology. Astronomers, like writers, return anew to ancient canvases in hopes of that one unusual discovery. Here are nine such works of literature that gaze skyward.
Nick Ripatrazone shares nine examples of literature centered around astronomy. A few are science fiction. I'm sure most at ASTRA would enjoy these.
For fathers to compete with mothers' love.
How can a father resent his son and his son's love?
'You know Orion always comes up sideways.
A weapon in our human fight,' he said.
More literary and poetic approaches to astronomy.
The Romantics period was led by seven poetic pioneers. Percy Shelley, John Keats, William Wordsworth, Lord Byron, Samuel Coleridge, William Blake, and Robert Burns each gave us a new perspective into the natural world in addition to creating this new form of poetry. These seven poets each share characteristics in their writing similar to that of the characteristics of seven distinctive astronomical objects in various different ways.
In my thread about 19th Century Astronomical Drawings (viewtopic.php?f=3&t=959) , the article's author mentions Emma Converse. Like Carl Sagan, she popularized astronomy with her writing.
Unsurprisingly, Brainpickings also has an article covering her work.
"We are the universe observing itself"
John Quincy Adams wrote a sonnet about eclipses in 1846.
Not writing, just street art.
Though its celestial ceiling is impressive, the true star is the vast collection of French books.
"When one gets quiet, then something wakes up inside one, something happy and quiet like the stars."
"If the stars should appear but one night every thousand years, how man would marvel and stare"
Aha, here's the full Ralph Waldo Emerson quote!
And you would I sing, fair stripling! welcome to you from me, sweet boy of England!
Remember you surging Manhattan's crowds, as you pass'd with your cortege of nobles?
Year of comets and meteors transient and strange!—lo! even here, one equally transient and strange!
What am I myself but one of your meteors?
The King and his official astronomer are alone in the study viewing the heavenly bodies through the monstrous telescope. They go out on the balcony and the gay old ruler is much absorbed in the phenomenon, and spends some time in studying the stars and planets. The evening has been well spent with the many mysteries which have made such a deep impression upon the King's mind that they are still with him in his dreams. Upon retiring for the night he has a wonderful nightmare, in which he imagines that he is climbing up a long ladder to the planet Jupiter. He passes all the other planets and receives an official salute from each one in honor of his exalted position upon the earth. Finally arriving at Jupiter, he is admitted to the palace of the King, where he is granted an audience with the high potentate. They become so effusive in their welcome and so strenuous in their mode of entertaining that he wishes to be back on earth once more. Finally, after witnessing all that is to be seen, he expresses a desire to return home, so he is picked up bodily and thrown off of the planet, but luckily for him he grabs the ladder and starts to descend. As he is passing Mercury, someone cuts the ladder, his royal highness is precipitated through the air, where he lands with an awful bump on earth. And then he woke up, only to find himself groveling on the floor of his room.
Gustave Doré's depictions of the moon.


text:
Aleem Khan richest lawmaker in Punjab, beats CM Hamza and Buzdar
According to the ECP, Aleem Khan owns assets worth 1.7b, compared to CM Hamza's Rs414.3 million and Buzdar's Rs58 million.
Dissident Pakistan Tehreek-i-Insaf (PTI) leader Aleem Khan was the richest lawmaker in Punjab Assembly in 2020-21, with a net worth of over 1.70 billion rupees, according to the asset details released by the Election Commission of Pakistan (ECP) on Monday.
That makes Khan wealthier than the incumbent and former Punjab Chief Ministers, Hamza Shehbaz and Usman Buzdar, who own assets worth Rs414.3 million and Rs58 million, respectively.
Aleem Khan is no longer an MPA as he is among 25 MPAs who were de-seated by the electoral body last month for voting in favour of Hamza Shehbaz in the election of CM Punjab in April against the party policy.
Read more: Accountability for all: Aleem Khan sent to jail
According to Geo News, Hamza Shehbaz owns 11 houses worth Rs130.64 million and declared himself in debt of Rs90.71 million.
The CM Punjab's first wife, Mehrun Nisa, owns assets worth Rs5 million, while his second wife Rabia Hamza possesses wealth worth Rs30.74 million.
According to the details, Former provincial education minister Murad Raas owns assets worth Rs380 million. Meanwhile, former provincial home minister Mian Mehmood ur Rashid is in possession of assets worth more than Rs180 million.
According to the ECP, Punjab Assembly speaker Pervez Elahi owns assets worth Rs231.4 million, including agricultural land worth Rs67.8 million and a flour mill worth Rs9.9 million. Elahi's wife owns assets worth Rs100 million.
Leader of the Opposition in the Punjab Assembly, Sibtain Khan, owns assets worth more than Rs10 million, but he did not disclose the value of his agricultural land holdings.
Read more: Aleem Khan rejects reports of clash with Hamza Shehbaz
Minister of Finance Department and Revenue Punjab Owais Leghari owns assets worth Rs440 million. Whereas MPA Hina Pervaiz Butt disclosed assets of Rs99.4 million along with two homes she cited as gifts. However, she did not disclose their value.
Former provincial health minister Dr. Yamin Rashid declared assets worth over Rs20 million, while MPA Sania Ashiq declared assets of Rs3.5 million.
The data revealed that Punjab Assembly Deputy Speaker Sardar Dost Muhammad Mazari possesses assets worth over Rs20 million.
Status of GSP+ extension for Pakistan
5 battles to look out for as Pakistan prepares for 7 T20Is against England


text:
Taylor Sr.
WILLIAM JOSEPH TAYLOR SR. was born in Philadelphia, Pennsylvania on November 2, 1885. William Taylor married Mary Hammond around 1907. The 1910 Census shows William and Mary Taylor living at 761 Mt. Vernon Street, along with Mary's mother, Laura Hammond. The Taylor's first child, son Charles Louis Taylor, was born in 1917. When he registered for the draft in September of 1918, William J. Taylor was still living at 761 Mt. Vernon Street in South Camden. He was then working as a riveter at the New York Shipbuilding Corporation shipyard. When the war ended and shipyard work fell off, he returned to work as a house painter.
William J. Taylor Sr. was appointed to the Camden Fire Department on November 22, 1920. He reported for duty with Engine Company 8, 619 Kaighn Avenue, on January 1, 1921.
The Taylor's were still at 761 Mt. Vernon Street when the 1924 City Directory was compiled. Mary Taylor gave birth to another son, William J. Taylor Jr., around 1925. The 1927 City Directory shows that William J. Taylor had moved to 712 Mt. Vernon Street. On August 2, 1928 William J. Taylor was transferred to Engine Company 7, 1115 Kaighn Avenue.
When the census was taken in April of 1930, William J. Taylor, his wife, sons, and niece Bertha Powell, 23, whom he had raised since childhood, were still living at 712 Mt. Vernon Street. Fire Department records from 1931 show William J. Taylor living at 833 South 6th Street. On April 30, 1936 William J. Taylor was reassigned to Engine Company 3, 1815 Broadway.
The 1940 City Directory shows William J. Taylor and his wife Mary at 576 Spruce Street. He was still at that address when he registered for the draft in the spring of 1942. By the end of the year the Taylors had moved to 836 South 6th Street. On November 27, 1945 he was transferred to the Electrical Bureau. In July of 1949 William J. Taylor's son, William J. Taylor Jr., was appointed to the Camden Fire Department.
Mandatory retirement at age 65 was instituted in late 1948, however, then-current employees were not then forced to immediately retire. William J. Taylor finally did go out with his pension on May 15, 1951, having served the City of Camden for over 30 years. Last a resident of 836 South 6th Street, William J. Taylor Sr. passed away on February 11, 1954 and was buried at New St. Mary's Cemetery in Bellmawr, New Jersey. He was survived by his wife and sons. Mary Taylor joined her husband on September 25, 1974.
William J. Taylor Jr. also made a career of fire service. He retired in February of 1981. Between father and son, there was a Taylor on the Fire Department every day for over 60 years.
World War I Draft Card
Camden Post-Telegram * December 30, 1920
Peter B. Carter - Thomas Nicholas - Walter Browning - George B. Wade - William W. Patterson
Francis Ford Patterson Jr. - Charles H. Ellis - David Jester - Joseph Forsyth
Engine Co. 1 - Alfred E. Green - Charles Errickson Charles W Cooke - Leroy Hatchett
Engine Co. 2 - Howard Landon - John K. Voll
Edgar Ellender - Harold Lohrang - Chester Andrus Harry G. Layton
Engine Co. 3 - Charles B. Haines - Charles Clements
August Haverkamp - Frank Kuda - Louis Quinton
Engine Co. 4 - Frank A. Obermann - Walter B. Gray
Albert Raeuber - Fred Schucker - Harry Kleinfelder
Engine Co. 5 - Richard A. Farris - Frank Fennrio
Engine Co. 6 - William H. Reed - Manuel J. Kane Edward Perairia - Thomas Shanahan
Rocco De Varro
"Frank Fennrio" is for the moment a mystery
Engine Co. 7 - August Scholl - Nicholas Romaine
Lawrence H. Mathews
Engine Co. 8 - Samuel Oshushek - Edward C. Crane Adam Mead - Frank Sapp - William J. Taylor Sr.
Engine Co. 9 - Kennard Naylor - Daniel McSurdy John Mohrfeld
Engine Co. 10 - William Schwartz - Hugh Rementer Harry Greenan - Rocco Abbott
Hose & Chemical Co. 2 - Laurence Newton
Edward Hauser - William Getner
Ladder Co. 1 - Thomas Cunningham
Leonard Megee
Ladder Co. 2 - John Gaylor - Walter White
Ladder Co. 3 David Ellis - George W. Attison
John Mulligan - David Humphries - Albert Dukes
Tennie G. Hutchison Jr. - Ladder Co. 4 - George A. Quimby
Camden Post-Telegram
John H. Lennox - John A.S. Hunt
Engine Company 1
Benny Waters
Camden Courier-Post - June 4, 1932
...continued...
Benjamin Simon - Roy R. Stewart - John W. Golden - George Zeitz - William Taylor
Clifford A. Baldwin - Walter Keown - L. Scott Cherchesky - Garfield S. Pancoast
Charles Wilder - Liberty Street
Camden Courier-Post - February 9, 1933
COPS AND FIREMEN WILL ELECT TODAY
Herbert Bott Is Unopposed for Presidency of Camden Association
The Camden Police and Firemen's Association will hold election of officers today at its headquarters, 1175 Whitman Avenue, from 1:00 PM to 9:00 PM.
Herbert Bott is unopposed for re-election as president. William Thorn is unopposed to replace Richard Middleton for financial secretary and Walter Vecander is unopposed for the new post of assistant financial secretary. All these are police officers.
The police trustees will be named from the following nine candidates: William Marter, George Ward, William Britner, Joseph Shreeve, William Schriber, Joseph Mardino, Joseph Dunnett, Leon Feltz and Russell Young. Two police sergeant-at-arms will be chosen from among Stanley Wirtz, Harry Cattell, Joseph Schultz and George Clayton.
Three candidates are seeking the post of vice president, which goes to a fireman. They are William Spencer, Charles Edwards and Albert Dukes. Warren Rich, a fireman, is slated to succeed himself as recording secretary and Winfield Leviseur is unopposed for the new post of assistant recording secretary, which goes to a fireman.
Four fireman trustees will be chosen from ten candidates. They are Charles Cook, Henry Baumgartel, Walter Eastlack, Arthur Batten, William Getner, William Toy, Lawrence Newton, James Young, Russell Anderson and William Taylor. Three firemen are seeking two posts as sergeants-at-arms. They are William Judge, John Mulligan and Furman Price.
Camden Courier-Post - February 10, 1933
BOTT CHOSEN HEAD OF POLICEMEN, FIREMEN
Spencer Wins 3-Corner Fight for Vice-President of Association
Lauded by the members for his splendid work in behalf of the club, Herbert Bott, a patrolman attached to the Third Police District, last night was re-elected president of the Camden Police and Firemen's Association.
The praise was heaped upon the patrolman following announcement that he had received 107 of 110 votes cast in yesterday's balloting. He was unopposed for reelection.
In a three-cornered fight, William P. Spencer, a fireman, was elected vice president of the association. He received 73 votes. His opponents were Charles Edwards, given 12 votes, and Albert Dukes, 18 votes. Both are firemen.
Others unopposed for office were: William Thorn, financial secretary; Walter Vecander, assistant financial secretary; Warren Rich, recording secretary, and Winfield Leviseur, assistant recording secretary. The last two are firemen while the first two are policemen.
Lieutenant George Ward, Patrolman William Marter, and Firemen William Taylor, William Getner, James Young and Lawrence Newton were elected to the board of trustees.
Sergeants-at-arms named were Stanley Wirtz and George Clayton, police, and William Judge and John Mulligan, firemen. All had opposition.
After the ballots had been counted William H. Iszard, former assemblyman, appeared on behalf of the Elks Crippled Kiddies Committee, and asked police to support the wrestling show to be staged by that group February 13..
World War II Draft Card
Camden Courier-Post * May 5, 1951
RETURN TO CAMDEN'S INTERESTING PEOPLE PAGE
RETURN TO DVRBS.COM HOME PAGE


Wednesday - Sunday 10:00am-5:00pm PST - 10:00am-6:00pm PDT Monday & Tuesday: CLOSED After Hours Wednesday: Please call if you would like to shoot after hours, we will stay open until the last shooter is done.
Born and raised here in the Pacific Northwest, I first took to a shotgun, hunting pheasants with my father. It was during my high school years that I started to realize that shooting clays was shifting from a fun activity into a passion. So, I began to practice and compete, with the objective of securing a position on the US Olympic Team. During this time, I incorporated tips from other shooters and developed my skills as an Olympic contender. It's these skills that I will enjoy sharing with my students, beginner or novice, to help them meet their shooting goals.


Influence of neuromuscular conditioning on centric relation registrations.
A comprehensive treatment rationale combining prosthodontics and periodontics.
The subepithelial connective tissue graft. A new approach to the enhancement of anterior cosmetics.
[Effects of morphazinamide in monomedicamentous therapy per os and intravenously in pulmonary tuberculosis].
Innovations in horizontal, nonparallel pin splints.
The alteration of lingual mucosa with free gingival grafts. Protection of a denture bearing surface.


text:
SGS Gains Approved Verifier Status for Climate Bonds Certification
SGS, the world's leading inspection, verification, testing and certification company, has been awarded 'Approved Verifier' status by the Climate Bonds Initiative, under the Climate Bond Standards and Certification Scheme.
The Climate Bonds Initiative, a not-for-profit organization, aims to promote investment into projects and assets that will speed up transition to a low carbon and climate resilient economy. The standard allows investors and intermediaries to easily assess the climate credentials and environmental integrity of bonds claiming to be green and funding the low-carbon future.
The award made on May 21, 2020, gives SGS the authority to act as a third-party verifier to assess whether issuer and green bonds meet the requirements for certification against the Climate Bonds Standard.
Jeffrey McDonald, Executive Vice President, SGS Certification & Business Enhancement, said: "We are proud to have gained 'Approved Verifier' status from the Climate Bonds Initiative which is committed to accelerating the transition to low carbon and climate resilient economies. SGS's range of sustainability certification services has been developed to support our global customers across all sectors in adopting more environmentally friendly business practices and we welcome the opportunity to broaden these services through the initiative."
The Climate Bonds Initiative anticipates that investor demand for green bonds and climate bonds will increase in line with the delivery of quality products into the market. However, it warns that investor concerns about the credibility of green labeling are also growing. Its standards, assurance and certification are seen as essential for improving confidence and transparency, and boosting growth in the market.
SGS will provide verification services within the following sectors of the Climate Bonds Standard worldwide:
Low-carbon buildings
Low-carbon transport
Certification services from SGS
SGS's world-leading certification services enable organizations to demonstrate that their products, processes, systems or services are compliant with national and international regulations and standards.
Ms Zonta Yung
Business Development, Assistant Manager
www.sgs.com/certification
South Korea Revises Standards and Specifications for Food Contact Materials and Articles
South Korea has incorporated, among other things, volatile organic matter into its standards and specifications for food contact materials and articles. The revisions became effective on May 29, 2020.
Serbia Issues Rule Book on Toy Safety
Serbia has published a set of rules for toy safety to ensure a high level of protection of human health. Toys have until November 9, 2020 to conform with the new requirements.


This entry was posted on August 26, 2013 by Paul Frederick Productions. It was filed under Corporate Videos, Misc. Videos and was tagged with action, Adirondack, bobsled, Canon C100, Corporate video, fun, GoPro Hero 3 Black, luge, new york, Olympic, ski jumping, SONY EX1.


The Brooke by Bassett is a beautiful traditional style and the teal fabric makes it a one of a kind attraction for your living room. The Brooke is the perfect piece of furniture for someone who would love to play with beautiful blue colors! The Brooke is available for the perfect sofa, loveseat, chair, and ottoman for any room and any decor.


Department advisers at UNT have seen a sudden increase in attendance rates for advising appointments with the addition of Appointment Manager — an online portal allowing current and new coming students to book advising appointments — an Information Technology spokesperson said.
UNT went live with Appointment Manager in May 2017, starting with the College of Visual Arts and Design as the pilot college, said Jennifer Lee, director of student success technology.
Since the pilot program launched, other departments and colleges offer Appointment Manager scheduling and the College of Engineering is expected to join the other colleges spring 2019, Lee said.
So far, Lee has heard from department advisers that there has been a decrease in no-shows to advising appointments due to Appointment Manager.
"Because of the email confirmation, the text reminders, I think [the advisers] are reporting an increase in students showing up for their appointments," Lee said.
Senior IT program and analyst Maureen Saringer said one of the main reasons why the university decided to implement Appointment Manager is so the students can manage and book their appointments at any time.
"Maybe they think in the middle of the night, 'Oh, I need to remember to make an appointment with my adviser,' so they don't have to wait until the office is open now," Saringer said.
The online portal is convenient and is easily accessible to students, allowing students to book, cancel and reschedule appointments, Lee said.
If wanted, students can still book their advising appointments in-person at the advising office or by phone call, Application Support Analyst Irene Frank said. Students who go this route will still receive the same confirmation emails and text reminders if they had done it online through Appointment Manager.
Frank said the benefit of booking an appointment online is students get to play around with the different scheduling options. Students can view the adviser's schedules up to a week's time in advance (varies by department) and see open time slots.
Psychology senior Chelsea Bonsu said she prefers the online option because it's more efficient and it doesn't coincide with her work schedule. Bonsu said she works most days of the week and doesn't get out until 5 p.m., which is around the same time her advising office closes.
Senior academic adviser Nola Moudry said she likes the new Appointment Manager software because it makes it easier for the students to schedule appointments, and she attributes the increase in attendance to the software.
Data collected from the College of Education Student Advising Office from June 1 to Nov. 14, 2017, and for 2017 as a whole, show an 8.8 percent decrease in no-shows, Moudry said. Between the months June to Nov. 2017, there was a total of 12.8 percent of no-shows, [compared to] 4 percent in 2018 during the same time.
Though Moudry said Appointment Manager makes booking appointments online easier for students, she believes it does not make it any easier for advisers. She said the new technology isn't easier, it's just different.
"Rather than having the student's information, reasons for the appointment, etc. on our calendars in Microsoft Outlook, we now have to go two, or more clicks into appointment manager to find the same information," Moudry said.


Earlier this month, GamesIndustry.biz ran an interview with a developer who lowered her game's price coming out of Early Access. Today we're doing the same with a developer that took the opposite approach. SkyRogue officially launched in August, and increased its price in the process from $10 to $20. It's not entirely uncommon for Early Access games to see a price hike when they hit a 1.0 release, but a full doubling of the asking price is more unusual.
While one might expect such a move to be met with a bit of consumer backlash, Kenny Backus of developer Fractal Phase said there was no such problem.
"Some people said, like, 'Oh, that's really bad news.' It sounded like they didn't think it was an intentional decision, like I was forced to bring up the price to the point I chose because it would lead to less sales," Backus said. "And technically it does lead to less sales, but not necessarily less revenue."
Backus figured that would be the case going in, and he gave a few reasons for why he and the game's artist Charles Blanchard settled on that price point in spite of the effect on sales.
First of all, SkyRogue is more or less a flight simulator. It's a fairly accessible flight simulator, more concerned with blowing up enemy planes, ground forces, and naval units in procedurally generated stages than flipping a dozen switches to prepare for take-off, but a flight simulator nonetheless.
"The non-linearity creates this environment where it's more of a playground or a sandbox, and not so much a theme park. So the dissonant elements just seem to fit better."
"There are so many games where you run around as a character and I see the ways they're more accessible than a flying game," Backus said. "So it just seems like a somewhat small-ish niche. I'm not even sure quite how big it is. And niche players will generally accept higher prices more easily."
The second element that pushed Fractal Phase to embrace $20 was the game's Steam Workshop support for user mods.
"I grew up with modded games, playing a ton of Counter-Strike, for example," Backus said. "When I bought the original Half-Life, I bought it specifically to play mods. I didn't really care about the single-player campaign or anything for that buying decision. So it seemed very natural to have a moddable game."
The .gif mods were a significant part of the game's marketing push, Backus said, and drew plenty of reactions from people interested in buying the game because one specific mod appealed to them. At the moment, there are more than 300 player-made mods on SkyRogue's Steam Workshop page.
While Backus is wary of giving one-size-fits-all advice, he did encourage developers to consider whether their game would lend itself well to mods. Games with a heavy narrative context may suffer when player-made non-sequiturs pop up in gameplay, but Backus said games like SkyRogue have more tolerance for such aberrations.
"The non-linearity, the fact the islands and missions are procedurally generated, creates this environment where it's more of a playground or a sandbox, and not so much a theme park," Backus said. "So the dissonant elements just seem to fit better."
Another key reason for opting to double the price was simply that Backus was in a position where he was comfortable doing so. Backus has a day job at Uken Games, and an agreement with the company that lets him work on his own projects in his spare time. That arrangement meant he didn't need to worry about being open with his co-workers about his game on the side, he didn't have the stress of needing the game to sell to put food on the table, and he didn't have a set timeframe or cutoff date to finish the game by.
"Of course the other side of that coin is you really have to make up some deadlines at some point or else the project would go on forever," Backus said. "Because that financial pressure isn't there, you need to add other forms of pressure to get the game out and have it in the state you need it for release."
"I really believe players don't see [development time] when it comes to opening their wallet and buying a game."
He estimates he spent roughly 10 hours a week over four years on SkyRogue, but that number was prone to great variation. Some weeks SkyRogue didn't get that much attention. At other times--like when he was asked to take a month of accrued vacation rather than cash it out--he was able to work on SkyRogue essentially full-time. While he was more productive during that month of focused work, the weeks where it was more spaced out let him more deeply consider the game and the decisions he was making. Put simply, how the hours were spaced out was as impactful on the game's development as the total number of hours worked.
"It's really hard to get any sort of math around that because there are two opposing forces right there, where getting a batch of time would be really useful most of the time, but being able to reflect is useful in its own way," Backus said.
However that math would work out, Backus was insistent that it didn't impact the decision to set the game's price at $20.
"It had nothing to do with the amount of development time or anything like that," Backus said. "I really believe players don't see any of that and don't understand any of that when it comes to opening their wallet and buying a game."
SkyRogue currently has a "Very Positive" review score average on Steam, with 92% of user reviews giving the game a thumbs up. As for the negative reviews, Backus said he's seen nothing in them that suggests a $15 price point would have made those people any happier with the game than a $20 price.


Will House move to eliminate minimum wage and overtime protections for seasonal workers?
In a surprise move yesterday, the House Finance Committee voted to eliminate state minimum wage and overtime protections for certain seasonal workers and amusement park employees. But a glimmer of hope remains for workers after key Republicans on the panel pledged to address concerns over the minimum wage and the bill was kept off the House calendar for today.
As WRAL reported yesterday, the Committee debated a proposed committee substitute for SB 363, legislation that originally regulated food carts but was stripped and replaced by entirely new language that changed the state's wage and hour laws for certain seasonal employees. Under the new version considered by the committee, employees of seasonal camps and amusement parks would no longer be eligible for minimum wage and overtime protections under North Carolina's Wage and Hour Act—likely a response to the US Department of Labor's recent announcement raising the eligibility of salaried overtime workers from those earning $23,660 to $47,476 per year.
And since these workers are already exempted from federal protections—a loophole in the federal Fair Labor Standards Act created specifically to benefit circus operator Barnum & Bailey—the proposed change in the state's law effectively ensures that these workers will no longer have any legal entitlement to earn a minimum wage or overtime.
Rep. Paul Luebke from Durham specifically raised concerns over the loss of minimum wage protections during debate, questioning why anyone would want to lower wages for workers at a time of historic middle class income stagnation. Over the course of the debate, it became clear that a number of Republican lawmakers shared these concerns over the minimum wage provision, while supporting the elimination of overtime for these particular workers. Ultimately, the committee passed the bill by voice vote, but key Republican leader Rep. Skip Stam agreed to address the minimum wage provision through a floor amendment next week—an important step forward.
The upshot is that seasonal camp and amusement park workers are almost certainly going to lose their overtime protections, but we'll have to wait and see whether they'll lose the right to earn a minimum wage as well.
But in either case, workers will earn lower wages than they do today, moving North Carolina's economy in exactly the wrong direction. That's because our economy does best when workers can afford the basics—earning enough to put food on the table, gas in the car, and a roof over their heads. And every dollar they spend on the basics is a dollar that goes into the pockets of local businesses as higher sales and more profits. In contrast, policies that cut wages only hurt businesses by reducing customers, sales, and profits.
So here's hoping the general Assembly abandons its plans to cut wages and votes down SB 363, or at the very least maintains minimum wage protections for seasonal and amusement park workers.
How far short does women's pay still fall? This far.


At the 20th Anniversary Visionary Awards on June 8th, 2017, we had the pleasure to welcome back our past Visionary Honorees Vint Cerf, Ann Winblad and Ray Kurzweil for a panel discussion on the Future of Technology moderated by Silicon Valley Forum board chair Kevin Surace.
At the 21st Annual Visionary Awards on May 17th, 2018, we had the privilege to honor Caterina Fake, Co-Founder, Flickr.
Linda Rottenberg, CEO and Co-Founder of Endeavor is being interviewed by Jitendra Kavathekar, Managing Director of Accenture Ventures.
Megan Smith is being interviewed by Jitendra Kavathekar, Managing Director of Accenture Ventures, and Board Member of Silicon Valley Forum.


This is a placeholder page for Tera Knobbe, which means this person is not currently on this site. We do suggest using the tools below to find Tera Knobbe.
You are visiting the placeholder page for Tera Knobbe. This page is here because someone used our placeholder utility to look for Tera Knobbe. We created this page automatically in hopes Tera Knobbe would find it. If you are not Tera Knobbe, but are an alumni of Pass Christian High School, register on this site for free now.