text:
package stage0

//
// rkt is a reference implementation of the app container specification.
//
// Execution on rkt is divided into a number of stages, and the `rkt`
// binary implements the first stage (stage 0)
//

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"path"
	"path/filepath"
	"runtime"
	"strconv"
	"strings"
	"syscall"
	"time"

	"github.com/coreos/rkt/Godeps/_workspace/src/github.com/appc/spec/schema"
	"github.com/coreos/rkt/Godeps/_workspace/src/github.com/appc/spec/schema/types"
	"github.com/coreos/rkt/common"
	"github.com/coreos/rkt/common/apps"
	"github.com/coreos/rkt/pkg/aci"
	"github.com/coreos/rkt/pkg/fileutil"
	"github.com/coreos/rkt/pkg/label"
	"github.com/coreos/rkt/pkg/sys"
	"github.com/coreos/rkt/pkg/tpm"
	"github.com/coreos/rkt/pkg/uid"
	"github.com/coreos/rkt/store"
	"github.com/coreos/rkt/version"
)

const (
	// Default perm bits for the regular files
	// within the stage1 directory. (e.g. image manifest,
	// pod manifest, stage1ID, etc).
	defaultRegularFilePerm = os.FileMode(0640)

	// Default perm bits for the regular directories
	// within the stage1 directory.
	defaultRegularDirPerm = os.FileMode(0750)
)

var debugEnabled bool

// configuration parameters required by Prepare
type PrepareConfig struct {
	*CommonConfig
	Apps               *apps.Apps          // apps to prepare
	InheritEnv         bool                // inherit parent environment into apps
	ExplicitEnv        []string            // always set these environment variables for all the apps
	Ports              []types.ExposedPort // list of ports that rkt will expose on the host
	UseOverlay         bool                // prepare pod with overlay fs
	SkipTreeStoreCheck bool                // skip checking the treestore before rendering
	PodManifest        string              // use the pod manifest specified by the user, this will ignore flags such as '--volume', '--port', etc.
	PrivateUsers       *uid.UidRange       // User namespaces
}

// configuration parameters needed by Run
type RunConfig struct {
	*CommonConfig
	Net         common.NetList // pod should have its own network stack
	LockFd      int            // lock file descriptor
	Interactive bool           // whether the pod is interactive or not
	MDSRegister bool           // whether to register with metadata service or not
	Apps        schema.AppList // applications (prepare gets them via Apps)
	LocalConfig string         // Path to local configuration
	RktGid      int            // group id of the 'rkt' group, -1 if there's no rkt group.
}

// configuration shared by both Run and Prepare
type CommonConfig struct {
	Store        *store.Store // store containing all of the configured application images
	Stage1Image  types.Hash   // stage1 image containing usable /init and /enter entrypoints
	UUID         *types.UUID  // UUID of the pod
	RootHash     string       // Hash of the root filesystem
	ManifestData string       // The pod manifest data
	Debug        bool
	MountLabel   string // selinux label to use for fs
	ProcessLabel string // selinux label to use for process
}

func init() {
	// this ensures that main runs only on main thread (thread group leader).
	// since namespace ops (unshare, setns) are done for a single thread, we
	// must ensure that the goroutine does not jump from OS thread to thread
	runtime.LockOSThread()
}

func InitDebug() {
	debugEnabled = true
}

func debug(format string, i ...interface{}) {
	if debugEnabled {
		log.Printf(format, i...)
	}
}

// MergeEnvs amends appEnv setting variables in setEnv before setting anything new from os.Environ if inheritEnv = true
// setEnv is expected to be in the os.Environ() key=value format
func MergeEnvs(appEnv *types.Environment, inheritEnv bool, setEnv []string) {
	for _, ev := range setEnv {
		pair := strings.SplitN(ev, "=", 2)
		appEnv.Set(pair[0], pair[1])
	}

	if inheritEnv {
		for _, ev := range os.Environ() {
			pair := strings.SplitN(ev, "=", 2)
			if _, exists := appEnv.Get(pair[0]); !exists {
				appEnv.Set(pair[0], pair[1])
			}
		}
	}
}

func imageNameToAppName(name types.ACIdentifier) (*types.ACName, error) {
	parts := strings.Split(name.String(), "/")
	last := parts[len(parts)-1]

	sn, err := types.SanitizeACName(last)
	if err != nil {
		return nil, err
	}

	return types.MustACName(sn), nil
}

// deduplicateMPs removes Mounts with duplicated paths. If there's more than
// one Mount with the same path, it keeps the first one encountered.
func deduplicateMPs(mounts []schema.Mount) []schema.Mount {
	var res []schema.Mount
	seen := make(map[string]struct{})
	for _, m := range mounts {
		if _, ok := seen[m.Path]; !ok {
			res = append(res, m)
			seen[m.Path] = struct{}{}
		}
	}
	return res
}

// MergeMounts combines the global and per-app mount slices
func MergeMounts(mounts []schema.Mount, appMounts []schema.Mount) []schema.Mount {
	ml := append(appMounts, mounts...)
	return deduplicateMPs(ml)
}

// generatePodManifest creates the pod manifest from the command line input.
// It returns the pod manifest as []byte on success.
// This is invoked if no pod manifest is specified at the command line.
func generatePodManifest(cfg PrepareConfig, dir string) ([]byte, error) {
	pm := schema.PodManifest{
		ACKind: "PodManifest",
		Apps:   make(schema.AppList, 0),
	}

	v, err := types.NewSemVer(version.Version)
	if err != nil {
		return nil, fmt.Errorf("error creating version: %v", err)
	}
	pm.ACVersion = *v

	if err := cfg.Apps.Walk(func(app *apps.App) error {
		img := app.ImageID

		am, err := cfg.Store.GetImageManifest(img.String())
		if err != nil {
			return fmt.Errorf("error getting the manifest: %v", err)
		}
		appName, err := imageNameToAppName(am.Name)
		if err != nil {
			return fmt.Errorf("error converting image name to app name: %v", err)
		}
		if err := prepareAppImage(cfg, *appName, img, dir, cfg.UseOverlay); err != nil {
			return fmt.Errorf("error setting up image %s: %v", img, err)
		}
		if pm.Apps.Get(*appName) != nil {
			return fmt.Errorf("error: multiple apps with name %s", am.Name)
		}
		if am.App == nil && app.Exec == "" {
			return fmt.Errorf("error: image %s has no app section and --exec argument is not provided", img)
		}
		ra := schema.RuntimeApp{
			// TODO(vc): leverage RuntimeApp.Name for disambiguating the apps
			Name: *appName,
			App:  am.App,
			Image: schema.RuntimeImage{
				Name:   &am.Name,
				ID:     img,
				Labels: am.Labels,
			},
			Annotations: am.Annotations,
			Mounts:      MergeMounts(cfg.Apps.Mounts, app.Mounts),
		}

		if execOverride := app.Exec; execOverride != "" {
			// Create a minimal App section if not present
			if am.App == nil {
				ra.App = &types.App{
					User:  strconv.Itoa(os.Getuid()),
					Group: strconv.Itoa(os.Getgid()),
				}
			}
			ra.App.Exec = []string{execOverride}
		}

		if execAppends := app.Args; execAppends != nil {
			ra.App.Exec = append(ra.App.Exec, execAppends...)
		}

		if cfg.InheritEnv || len(cfg.ExplicitEnv) > 0 {
			MergeEnvs(&ra.App.Environment, cfg.InheritEnv, cfg.ExplicitEnv)
		}
		pm.Apps = append(pm.Apps, ra)
		return nil
	}); err != nil {
		return nil, err
	}

	// TODO(jonboulle): check that app mountpoint expectations are
	// satisfied here, rather than waiting for stage1
	pm.Volumes = cfg.Apps.Volumes
	pm.Ports = cfg.Ports

	pmb, err := json.Marshal(pm)
	if err != nil {
		return nil, fmt.Errorf("error marshalling pod manifest: %v", err)
	}
	return pmb, nil
}

// validatePodManifest reads the user-specified pod manifest, prepares the app images
// and validates the pod manifest. If the pod manifest passes validation, it returns
// the manifest as []byte.
// TODO(yifan): More validation in the future.
func validatePodManifest(cfg PrepareConfig, dir string) ([]byte, error) {
	pmb, err := ioutil.ReadFile(cfg.PodManifest)
	if err != nil {
		return nil, fmt.Errorf("error reading pod manifest: %v", err)
	}
	var pm schema.PodManifest
	if err := json.Unmarshal(pmb, &pm); err != nil {
		return nil, fmt.Errorf("error unmarshaling pod manifest: %v", err)
	}

	appNames := make(map[types.ACName]struct{})
	for _, ra := range pm.Apps {
		img := ra.Image

		if img.ID.Empty() {
			return nil, fmt.Errorf("no image ID for app %q", ra.Name)
		}
		am, err := cfg.Store.GetImageManifest(img.ID.String())
		if err != nil {
			return nil, fmt.Errorf("error getting the image manifest from store: %v", err)
		}
		if err := prepareAppImage(cfg, ra.Name, img.ID, dir, cfg.UseOverlay); err != nil {
			return nil, fmt.Errorf("error setting up image %s: %v", img, err)
		}
		if _, ok := appNames[ra.Name]; ok {
			return nil, fmt.Errorf("multiple apps with same name %s", ra.Name)
		}
		appNames[ra.Name] = struct{}{}
		if ra.App == nil && am.App == nil {
			return nil, fmt.Errorf("no app section in the pod manifest or the image manifest")
		}
	}
	return pmb, nil
}

// Prepare sets up a pod based on the given config.
func Prepare(cfg PrepareConfig, dir string, uuid *types.UUID) error {
	if err := os.MkdirAll(common.AppsInfoPath(dir), defaultRegularDirPerm); err != nil {
		return fmt.Errorf("error creating apps info directory: %v", err)
	}
	debug("Preparing stage1")
	if err := prepareStage1Image(cfg, cfg.Stage1Image, dir, cfg.UseOverlay); err != nil {
		return fmt.Errorf("error preparing stage1: %v", err)
	}

	var pmb []byte
	var err error
	if len(cfg.PodManifest) > 0 {
		pmb, err = validatePodManifest(cfg, dir)
	} else {
		pmb, err = generatePodManifest(cfg, dir)
	}
	if err != nil {
		return err
	}

	cfg.CommonConfig.ManifestData = string(pmb)

	debug("Writing pod manifest")
	fn := common.PodManifestPath(dir)
	if err := ioutil.WriteFile(fn, pmb, defaultRegularFilePerm); err != nil {
		return fmt.Errorf("error writing pod manifest: %v", err)
	}

	if cfg.UseOverlay {
		// mark the pod as prepared with overlay
		f, err := os.Create(filepath.Join(dir, common.OverlayPreparedFilename))
		if err != nil {
			return fmt.Errorf("error writing overlay marker file: %v", err)
		}
		defer f.Close()
	}

	if cfg.PrivateUsers.Shift > 0 {
		// mark the pod as prepared for user namespaces
		uidrangeBytes := cfg.PrivateUsers.Serialize()

		if err := ioutil.WriteFile(filepath.Join(dir, common.PrivateUsersPreparedFilename), uidrangeBytes, defaultRegularFilePerm); err != nil {
			return fmt.Errorf("error writing userns marker file: %v", err)
		}
	}

	return nil
}

func preparedWithOverlay(dir string) (bool, error) {
	_, err := os.Stat(filepath.Join(dir, common.OverlayPreparedFilename))
	if os.IsNotExist(err) {
		return false, nil
	}
	if err != nil {
		return false, err
	}

	if !common.SupportsOverlay() {
		return false, fmt.Errorf("the pod was prepared with overlay but overlay is not supported")
	}

	return true, nil
}

func preparedWithPrivateUsers(dir string) (string, error) {
	bytes, err := ioutil.ReadFile(filepath.Join(dir, common.PrivateUsersPreparedFilename))
	if os.IsNotExist(err) {
		return "", nil
	}
	if err != nil {
		return "", err
	}

	return string(bytes), nil
}

// Run mounts the right overlay filesystems and actually runs the prepared
// pod by exec()ing the stage1 init inside the pod filesystem.
func Run(cfg RunConfig, dir string, dataDir string) {
	useOverlay, err := preparedWithOverlay(dir)
	if err != nil {
		log.Fatalf("error: %v", err)
	}

	privateUsers, err := preparedWithPrivateUsers(dir)
	if err != nil {
		log.Fatalf("error: %v", err)
	}

	debug("Setting up stage1")
	if err := setupStage1Image(cfg, dir, useOverlay); err != nil {
		log.Fatalf("error setting up stage1: %v", err)
	}
	debug("Wrote filesystem to %s\n", dir)

	for _, app := range cfg.Apps {
		if err := setupAppImage(cfg, app.Name, app.Image.ID, dir, useOverlay); err != nil {
			log.Fatalf("error setting up app image: %v", err)
		}
	}

	destRootfs := common.Stage1RootfsPath(dir)
	flavor, err := os.Readlink(filepath.Join(destRootfs, "flavor"))
	if err != nil {
		log.Printf("error reading flavor: %v\n", err)
	}
	if flavor == "kvm" {
		err := kvmCheckSSHSetup(destRootfs, dataDir)
		if err != nil {
			log.Fatalf("error setting up ssh keys: %v", err)
		}
	}

	if err := os.Setenv(common.EnvLockFd, fmt.Sprintf("%v", cfg.LockFd)); err != nil {
		log.Fatalf("setting lock fd environment: %v", err)
	}

	if err := os.Setenv(common.EnvSELinuxContext, fmt.Sprintf("%v", cfg.ProcessLabel)); err != nil {
		log.Fatalf("setting SELinux context environment: %v", err)
	}

	debug("Pivoting to filesystem %s", dir)
	if err := os.Chdir(dir); err != nil {
		log.Fatalf("failed changing to dir: %v", err)
	}

	ep, err := getStage1Entrypoint(dir, runEntrypoint)
	if err != nil {
		log.Fatalf("error determining 'run' entrypoint: %v", err)
	}
	args := []string{filepath.Join(destRootfs, ep)}
	debug("Execing %s", ep)

	if cfg.Debug {
		args = append(args, "--debug")
	}

	args = append(args, "--net="+cfg.Net.String())

	if cfg.Interactive {
		args = append(args, "--interactive")
	}
	if len(privateUsers) > 0 {
		args = append(args, "--private-users="+privateUsers)
	}
	if cfg.MDSRegister {
		mdsToken, err := registerPod(".", cfg.UUID, cfg.Apps)
		if err != nil {
			log.Fatalf("failed to register the pod: %v", err)
		}

		args = append(args, "--mds-token="+mdsToken)
	}

	if cfg.LocalConfig != "" {
		args = append(args, "--local-config="+cfg.LocalConfig)
	}

	args = append(args, cfg.UUID.String())

	// make sure the lock fd stays open across exec
	if err := sys.CloseOnExec(cfg.LockFd, false); err != nil {
		log.Fatalf("error clearing FD_CLOEXEC on lock fd")
	}

	tpmEvent := fmt.Sprintf("rkt: Rootfs: %s Manifest: %s Stage 1 args: %s", cfg.CommonConfig.RootHash, cfg.CommonConfig.ManifestData, strings.Join(args, " "))
	// If there's no TPM available or there's a failure for some other
	// reason, ignore it and continue anyway. Long term we'll want policy
	// that enforces TPM behaviour, but we don't have any infrastructure
	// around that yet.
	_ = tpm.Extend(tpmEvent)
	if err := syscall.Exec(args[0], args, os.Environ()); err != nil {
		log.Fatalf("error execing init: %v", err)
	}
}

// prepareAppImage renders and verifies the tree cache of the app image that
// corresponds to the given app name.
// When useOverlay is false, it attempts to render and expand the app image
func prepareAppImage(cfg PrepareConfig, appName types.ACName, img types.Hash, cdir string, useOverlay bool) error {
	debug("Loading image %s", img.String())

	am, err := cfg.Store.GetImageManifest(img.String())
	if err != nil {
		return fmt.Errorf("error getting the manifest: %v", err)
	}

	if _, hasOS := am.Labels.Get("os"); !hasOS {
		return fmt.Errorf("missing os label in the image manifest")
	}
	if _, hasArch := am.Labels.Get("arch"); !hasArch {
		return fmt.Errorf("missing arch label in the image manifest")
	}

	if err := types.IsValidOSArch(am.Labels.ToMap(), ValidOSArch); err != nil {
		return err
	}

	appInfoDir := common.AppInfoPath(cdir, appName)
	if err := os.MkdirAll(appInfoDir, defaultRegularDirPerm); err != nil {
		return fmt.Errorf("error creating apps info directory: %v", err)
	}

	if useOverlay {
		if cfg.PrivateUsers.Shift > 0 {
			return fmt.Errorf("cannot use both overlay and user namespace: not implemented yet. (Try --no-overlay)")
		}
		treeStoreID, _, err := cfg.Store.RenderTreeStore(img.String(), false)
		if err != nil {
			return fmt.Errorf("error rendering tree image: %v", err)
		}

		if !cfg.SkipTreeStoreCheck {
			hash, err := cfg.Store.CheckTreeStore(treeStoreID)
			if err != nil {
				log.Printf("Warning: tree cache is in a bad state: %v. Rebuilding...", err)
				var err error
				treeStoreID, hash, err = cfg.Store.RenderTreeStore(img.String(), true)
				if err != nil {
					return fmt.Errorf("error rendering tree image: %v", err)
				}
			}
			cfg.CommonConfig.RootHash = hash
		}

		if err := ioutil.WriteFile(common.AppTreeStoreIDPath(cdir, appName), []byte(treeStoreID), defaultRegularFilePerm); err != nil {
			return fmt.Errorf("error writing app treeStoreID: %v", err)
		}
	} else {
		ad := common.AppPath(cdir, appName)
		err := os.MkdirAll(ad, defaultRegularDirPerm)
		if err != nil {
			return fmt.Errorf("error creating image directory: %v", err)
		}

		shiftedUid, shiftedGid, err := cfg.PrivateUsers.ShiftRange(uint32(os.Getuid()), uint32(os.Getgid()))
		if err != nil {
			return fmt.Errorf("error getting uid, gid: %v", err)
		}

		if err := os.Chown(ad, int(shiftedUid), int(shiftedGid)); err != nil {
			return fmt.Errorf("error shifting app %q's stage2 dir: %v", appName, err)
		}

		if err := aci.RenderACIWithImageID(img, ad, cfg.Store, cfg.PrivateUsers); err != nil {
			return fmt.Errorf("error rendering ACI: %v", err)
		}
	}
	if err := writeManifest(*cfg.CommonConfig, img, appInfoDir); err != nil {
		return err
	}
	return nil
}

// setupAppImage mounts the overlay filesystem for the app image that
// corresponds to the given hash. Then, it creates the tmp directory.
// When useOverlay is false it just creates the tmp directory for this app.
func setupAppImage(cfg RunConfig, appName types.ACName, img types.Hash, cdir string, useOverlay bool) error {
	ad := common.AppPath(cdir, appName)
	if useOverlay {
		err := os.MkdirAll(ad, defaultRegularDirPerm)
		if err != nil {
			return fmt.Errorf("error creating image directory: %v", err)
		}
		treeStoreID, err := ioutil.ReadFile(common.AppTreeStoreIDPath(cdir, appName))
		if err != nil {
			return err
		}
		if err := copyAppManifest(cdir, appName, ad); err != nil {
			return err
		}
		if err := overlayRender(cfg, string(treeStoreID), cdir, ad, appName.String()); err != nil {
			return fmt.Errorf("error rendering overlay filesystem: %v", err)
		}
	}

	return nil
}

// prepareStage1Image renders and verifies tree cache of the given hash
// when using overlay.
// When useOverlay is false, it attempts to render and expand the stage1.
func prepareStage1Image(cfg PrepareConfig, img types.Hash, cdir string, useOverlay bool) error {
	s1 := common.Stage1ImagePath(cdir)
	if err := os.MkdirAll(s1, defaultRegularDirPerm); err != nil {
		return fmt.Errorf("error creating stage1 directory: %v", err)
	}

	treeStoreID, _, err := cfg.Store.RenderTreeStore(img.String(), false)
	if err != nil {
		return fmt.Errorf("error rendering tree image: %v", err)
	}

	if !cfg.SkipTreeStoreCheck {
		hash, err := cfg.Store.CheckTreeStore(treeStoreID)
		if err != nil {
			log.Printf("Warning: tree cache is in a bad state: %v. Rebuilding...", err)
			var err error
			treeStoreID, hash, err = cfg.Store.RenderTreeStore(img.String(), true)
			if err != nil {
				return fmt.Errorf("error rendering tree image: %v", err)
			}
		}
		cfg.CommonConfig.RootHash = hash
	}

	if err := writeManifest(*cfg.CommonConfig, img, s1); err != nil {
		return fmt.Errorf("error writing manifest: %v", err)
	}

	if !useOverlay {
		destRootfs := filepath.Join(s1, "rootfs")
		cachedTreePath := cfg.Store.GetTreeStoreRootFS(treeStoreID)
		if err := fileutil.CopyTree(cachedTreePath, destRootfs, cfg.PrivateUsers); err != nil {
			return fmt.Errorf("error rendering ACI: %v", err)
		}
	}

	fn := path.Join(cdir, common.Stage1TreeStoreIDFilename)
	if err := ioutil.WriteFile(fn, []byte(treeStoreID), defaultRegularFilePerm); err != nil {
		return fmt.Errorf("error writing stage1 treeStoreID: %v", err)
	}
	return nil
}

// setupStage1Image mounts the overlay filesystem for stage1.
// When useOverlay is false it is a noop
func setupStage1Image(cfg RunConfig, cdir string, useOverlay bool) error {
	s1 := common.Stage1ImagePath(cdir)
	if useOverlay {
		treeStoreID, err := ioutil.ReadFile(filepath.Join(cdir, common.Stage1TreeStoreIDFilename))
		if err != nil {
			return err
		}

		// pass an empty appName: make sure it remains consistent with
		// overlayStatusDirTemplate
		if err := overlayRender(cfg, string(treeStoreID), cdir, s1, ""); err != nil {
			return fmt.Errorf("error rendering overlay filesystem: %v", err)
		}

		// we will later read the status from the upper layer of the overlay fs
		// force the status directory to be there by touching it
		statusPath := filepath.Join(s1, "rootfs", "rkt", "status")
		if err := os.Chtimes(statusPath, time.Now(), time.Now()); err != nil {
			return fmt.Errorf("error touching status dir: %v", err)
		}
	}

	return nil
}

// writeManifest takes an img ID and writes the corresponding manifest in dest
func writeManifest(cfg CommonConfig, img types.Hash, dest string) error {
	mb, err := cfg.Store.GetImageManifestJSON(img.String())
	if err != nil {
		return err
	}

	debug("Writing image manifest")
	if err := ioutil.WriteFile(filepath.Join(dest, "manifest"), mb, defaultRegularFilePerm); err != nil {
		return fmt.Errorf("error writing image manifest: %v", err)
	}

	return nil
}

// copyAppManifest copies to saved image manifest for the given appName and
// writes it in the dest directory.
func copyAppManifest(cdir string, appName types.ACName, dest string) error {
	appInfoDir := common.AppInfoPath(cdir, appName)
	sourceFn := filepath.Join(appInfoDir, "manifest")
	destFn := filepath.Join(dest, "manifest")
	if err := fileutil.CopyRegularFile(sourceFn, destFn); err != nil {
		return fmt.Errorf("error copying image manifest: %v", err)
	}
	return nil
}

// overlayRender renders the image that corresponds to the given hash using the
// overlay filesystem.
// It mounts an overlay filesystem from the cached tree of the image as rootfs.
func overlayRender(cfg RunConfig, treeStoreID string, cdir string, dest string, appName string) error {
	cachedTreePath := cfg.Store.GetTreeStoreRootFS(treeStoreID)
	fi, err := os.Stat(cachedTreePath)
	if err != nil {
		return err
	}
	imgMode := fi.Mode()

	destRootfs := path.Join(dest, "rootfs")
	if err := os.MkdirAll(destRootfs, imgMode); err != nil {
		return err
	}

	overlayDir := path.Join(cdir, "overlay")
	if err := os.MkdirAll(overlayDir, defaultRegularDirPerm); err != nil {
		return err
	}

	// Since the parent directory (rkt/pods/$STATE/$POD_UUID) has the 'S_ISGID' bit, here
	// we need to explicitly turn the bit off when creating this overlay
	// directory so that it won't inherit the bit. Otherwise the files
	// created by users within the pod will inherit the 'S_ISGID' bit
	// as well.
	if err := os.Chmod(overlayDir, defaultRegularDirPerm); err != nil {
		return err
	}

	imgDir := path.Join(overlayDir, treeStoreID)
	if err := os.MkdirAll(imgDir, defaultRegularDirPerm); err != nil {
		return err
	}

	// Also make 'rkt/pods/$STATE/$POD_UUID/overlay/$IMAGE_ID' to be readable by 'rkt' group
	// As 'rkt' status will read the 'rkt/pods/$STATE/$POD_UUID/overlay/$IMAGE_ID/upper/rkt/status/$APP'
	// to get exit status.
	if err := os.Chown(imgDir, -1, cfg.RktGid); err != nil {
		return err
	}

	upperDir := path.Join(imgDir, "upper", appName)
	if err := os.MkdirAll(upperDir, imgMode); err != nil {
		return err
	}
	if err := label.SetFileLabel(upperDir, cfg.MountLabel); err != nil {
		return err
	}

	workDir := path.Join(imgDir, "work", appName)
	if err := os.MkdirAll(workDir, defaultRegularDirPerm); err != nil {
		return err
	}
	if err := label.SetFileLabel(workDir, cfg.MountLabel); err != nil {
		return err
	}

	opts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", cachedTreePath, upperDir, workDir)
	opts = label.FormatMountLabel(opts, cfg.MountLabel)
	if err := syscall.Mount("overlay", destRootfs, "overlay", 0, opts); err != nil {
		return fmt.Errorf("error mounting: %v", err)
	}

	return nil
}

redpajama_set_name: RedPajamaGithub


Congrats are in order for Jaime King—the model and actress is pregnant with her second child. King announced the news via Instagram on Thursday, posting a photo of her adorable son James Knight blowing bubbles next to a DIY sign that reads, "I'm gonna be a big brother! Who da boss now. I'm so excited!"
"So excited to announce THE SEQUEL Coming later this year!! ... #BabyTown2 - Created by @kyle_newman and @jaime_king. Also starring #JamesKnight," she caption the shot (above). Her husband, director Kyle Newman, also shared the same photo. King and Newman married in 2007 and welcomed James in October of 2013. Congratulations again to the growing family.


text:
SUBHEAD: Let go, let yourself fall into the deindustrial future. It's difficult to think of anything more frightening, or more necessary.
By John Michael Greer on 6 June 2012 for the Archdruid Report - (http://thearchdruidreport.blogspot.com/2012/06/collapse-now-and-avoid-rush.html)
Image above: "The Fall of Rome" in 476AD preceded the Middle Ages that lasted for 1,000 years. From (http://www.dipity.com/uggy/MEDiVAL_TiMELiNE/).
I'm not sure how many people outside the writer's trade realize how much of writing is a cooperative process. That's as true of those of us who write late at night in the privacy of a silent room as it is of the more gregarious sort of writer, the kind you can expect to find in a crowded café, surrounded by voices and music and the clatter of street noises coming in the door: every writer is simply one voice in an ongoing conversation that includes many other voices, some living, some dead and some not yet born.
As I write this week's post, for example, it's difficult not to notice some of the other voices in this particular conversation. The bookshelf an easy reach to my left has a row of brightly colored trade paperbacks by some of my fellow peak oil authors—William Catton, Richard Heinberg, Jim Kunstler, Sharon Astyk, Dmitry Orlov, Carolyn Baker and more. Close by, the rolling brown landscape of Arnold Toynbee's A Study of History, all ten volumes, confronts the twin black monoliths of Oswald Spengler's The Decline of the West, while Giambattista Vico's New Science offers an ironic Italian commentary from one side.
Other shelves elsewhere in the room contribute other voices: biology and ecology textbooks from my college days; appropriate tech manuals from the Seventies brimfull of unfulfilled hopes; old texts on the magical philosophy that forms the usually unmentioned foundation from which all my thinking unfolds; and a great deal more. Poets, as often as not, these days: Robinson Jeffers, William Butler Yeats, T.S. Eliot. Without the contributions of all these other voices, the conversation and thus my contributions to it would not be what it is.
Still, there are times when the conversational nature of what I'm doing becomes more obvious and more direct than usual, and one of those happened the weekend before last, at the Age of Limits conference I discussed in last week's post. One of my presentations to that conference was a talk entitled "How Civilizations Fall;" longtime readers of this blog will know from the title that what I was talking about that afternoon was the theory of catabolic collapse, which outlines the way that human societies on the way down cannibalize their own infrastructure, maintaining themselves for the present by denying themselves a future.
I finished talking about catabolic collapse and started fielding questions, of which there were plenty, and somewhere in the conversation that followed one of the other participants made a comment. I don't even remember the exact words, but it was something like, "So what you're saying is that what we need to do, individually, is to go through collapse right away."
"Exactly," I said. "Collapse now, and avoid the rush."
Outside of that conversation, I doubt I would have thought of the phrase at all. By the end of the conference, though, it was on the lips of a good many of the attendees, and for good reason: I can't think of a better way to sum up the work ahead of us right now, as industrial society lurches down the far side of its trajectory through time. Longtime readers of this blog know most of the reasoning behind that suggestion, but it may be worth walking through it again step by step.
First, industrial society was only possible because our species briefly had access to an immense supply of cheap, highly concentrated fuel with a very high net energy—that is, the amount of energy needed to extract the fuel was only a very small fraction of the energy the fuel itself provided. Starting in the 18th century, fossil fuels—first coal, then coal and petroleum, then coal, petroleum and natural gas—gave us that energy source.
All three of these fossil fuels represent millions of years of stored sunlight, captured by the everyday miracle of photosynthesis and concentrated within the earth by geological processes that took place long before our species evolved. They are nonrenewable over any time scale that matters to human beings, and we are using them up at astonishing rates.
Second, while it's easy to suggest that we can simply replace fossil fuels with some other energy source and keep industrial civilization running along its present course, putting that comfortable notion into practice has turned out to be effectively impossible. No other energy source available to our species combines the high net energy, high concentration, and great abundance that a replacement for fossil fuel would need. Those energy sources that are abundant (for example, solar energy) are diffuse and yield little net energy, while those that are highly concentrated (for example, fissionable uranium) are not abundant, and also have serious problems with net energy.
Abundant fossil fuels currently provide an "energy subsidy" to alternative energy sources that make them look more efficient than they are—there would be far fewer wind turbines, for example, if they had to be manufactured, installed, and maintained using wind energy. Furthermore, our entire energy infrastructure is geared to use fossil fuels and would have to be replaced, at a cost of countless trillions of dollars, in order to replace fossil fuels with something else.
Third, these problems leave only one viable alternative, which is to decrease our energy use, per capita and absolutely, to get our energy needs down to levels that could be maintained over the long term on renewable sources. The first steps in this process were begun in the 1970s, with good results, and might have made it possible to descend from the extravagant heights of industrialism in a gradual way, keeping a great many of the benefits of the industrial age intact as a gift for the future.
Politics closed off that option in the decade that followed, however, and the world's industrial nations went hurtling down a different path, burning through the earth's remaining fossil fuel reserves at an accelerating pace and trusting that economic abstractions such as the free market would suspend the laws of physics and geology for their benefit. At this point, more than three decades after that misguided choice, industrial civilization is so far into overshoot that a controlled descent is no longer an option; the only path remaining is the familiar historical process of decline and fall.
Fourth, while it's fashionable these days to imagine that this process will take the form of a sudden cataclysm that will obliterate today's world overnight, all the testimony of history and a great many lines of evidence from other sources suggests that this is the least likely outcome of our predicament.
Across a wide range of geographical scales and technological levels, civilizations take an average of one to three centuries to complete the process of decline and fall, and there is no valid reason to assume that ours will be any exception. The curve of decline, to be sure, is anything but smooth; it has a fractal structure, taking the form of a succession of crises on many different scales, affecting different regions, social classes, and communities in different ways, interspersed with periods of stabilization and even partial recovery that are equally variable in scale, duration, and relevance to different places and groups. This ragged arc of decline is already under way; it can be expected to accelerate in the months, years, and decades to come; and it defines the deindustrial age ahead of us.
Fifth, individuals, families, and communities faced with this predicament still have choices left. The most important of those choices parallels the one faced, or more precisely not faced, at the end of the 1970s: to make the descent in a controlled way, beginning now, or to cling to their current lifestyles until the system that currently supports those lifestyles falls away from beneath their feet.
The skills, resources, and lifeways needed to get by in a disintegrating industrial society are radically different from those that made for a successful and comfortable life in the prosperous world of the recent past, and a great many of the requirements of an age of decline come with prolonged learning curves and a high price for failure. Starting right away to practice the skills, assemble the resources, and follow the lifeways that will be the key to survival in a deindustrializing world offers the best hope of getting through the difficult years ahead with some degree of dignity and grace.
Collapse now, in other words, and avoid the rush.
There's a fair amount of subtlety to the strategy defined by those words. As our society stumbles down the ragged curve of its decline, more and more people are going to lose the ability to maintain what counts as a normal lifestyle—or, rather, what counted as a normal lifestyle in the recent past, and is no longer quite so normal today as it once was. Each new round of crisis will push more people further down the slope; minor and localized crises will affect a relatively smaller number of people, while major crises affecting whole nations will affect a much larger number.
As each crisis hits, though, there will be a rush of people toward whatever seems to offer a way out, and as each crisis recedes, there will be another rush of people toward whatever seems to offer a way back to what used to be normal. The vast majority of people who join either rush will fail. Remember the tens of thousands of people who applied for a handful of burger-flipping jobs during the recent housing crash, because that was the only job opening they could find? That's the sort of thing I mean.
The way to avoid the rush is simple enough: figure out how you will be able to live after the next wave of crisis hits, and to the extent that you can, start living that way now. If you're worried about the long-term prospects for your job—and you probably should be, no matter what you do for a living—now is the time to figure out how you will get by if the job goes away and you have to make do on much less money.
For most people, that means getting out of debt, making sure the place you live costs you much less than you can afford, and picking up some practical skills that will allow you to meet some of your own needs and have opportunities for barter and informal employment. It can mean quite a bit more, depending on your situation, needs, and existing skills. It should certainly involve spending less money—and that money, once it isn't needed to pay off any debts you have, can go to weatherizing your home and making other sensible preparations that will make life easier for you later on.
For the vast majority of people, it probably needs to be said, collapsing now does not mean buying a survival homestead somewhere off in the country. That's a popular daydream, and in some well-off circles it's long been a popular way to go have a midlife crisis, but even if you have the funds—and most of us don't—
if you don't already have the dizzyingly complex skill set needed to run a viable farm, or aren't willing to drop everything else to apprentice with an organic farmer right now, it's not a realistic option. In all likelihood you'll be experiencing the next round of crises where you are right now, so the logical place to have your own personal collapse now, ahead of the rush, is right there, in the place where you live, with the people you know and the resources you have at hand.
Now of course the strategy of collapsing ahead of the rush is not going to be a popular thing to suggest. When I've brought it up, as of course I've done more than once, I've inevitably fielded a flurry of protests, by turns angry and anguished, insisting that it's not reasonable to expect anybody to do that, and how can I be so heartless as to suggest it? Fair enough; let's take a look at the alternatives.
One alternative strategy that gets brought up now and then has at least the advantage of utter honesty. It has two parts. The first part, while the benefits of industrial society are still available, is to enjoy them; the second, when those benefits go away, is to die. Often, though not always, the people who bring up this option have serious health conditions that will probably be fatal in a deindustrial world. I have no quarrel with those who choose this path; it's an honest response to a very challenging predicament—though I admit I wonder how many people who say they've chosen it will be comfortable with their choice once part one gives way to part two.
The problem with most other proposed strategies for dealing with our predicament is that whatever they claim to do in theory, in practice, they amount to these same two steps. Consider the very widely held notion that advocating for some alternative energy technology is a workable response to the twilight of fossil fuels.
I have no quarrel, again, with people who are actually doing something concrete to get some alternative energy technology into use—for example, the people whose enthusiasm for the Bussard fusion reactor leads them to build a prototype in their basement, or to help fund one of the half dozen or so experimenters who have already done this—but that's rarely what this approach entails; rather, it seems to consist mostly of posting long screeds on the internet insisting that thorium reactors, or algal biodiesel, or what have you, will solve all our energy problems.
As Zen masters like to say, talk does not cook the rice, and blog posts do not build reactors; with every day that passes, despite any amount of online debate, more oil, coal, and natural gas are extracted from the planet's dwindling endowment, and the next round of crises comes closer.
In the same way, those who put their hopes on grand political transformations, or conveniently undefinable leaps of consciousness, or the timely arrival of Jesus or the space brothers or somebody else who will spare us the necessity of inhabiting a future that is the exact result of our own collective actions, are not doing anything that hasn't been tried over and over again in the decades just past, without doing anything to slow the headlong rush into overshoot or the opening stages of decline and fall.
Check out the glossy magazines and well-funded websites dedicated to portraying "positive futures" and you can find the same sort of thinking taken to its logical extreme: soothing pablum about this or that person doing this or that wonderful thing, and this or that deep thinker coming up with this or that wonderful idea, all of it reminiscent of nothing so much as the cheerful tunes the Titanic's band played to keep the passengers calm as water poured into the hull.
There's quite a lot of money to be made these days insisting that we can have a shiny new future despite all evidence to the contrary, and pulling factoids out of context to defend that increasingly dubious claim; as industrial society moves down the curve of decline, I suspect, this will become even more popular, since it will make it easier for those who haven't yet had their own personal collapse to pretend that it can't happen to them.
The same principle applies to the people who donate to environmental causes and put solar panels on their roofs in the same spirit that led medieval Christians to buy high-priced indulgences from the Church to cancel out their sins. T.S. Eliot countered that sort of attitude unanswerably when he described salvation as "a condition of complete simplicity, costing not less than everything".
What we're discussing belongs to a much less exalted plane, but the same rule applies: if you're trying to exempt yourself from the end of the industrial age, nothing you can do can ever be enough. Let go, let yourself fall forward into the deindustrial future, and matters are different.
It's difficult to think of anything more frightening, or more necessary. "In order to arrive at what you do not know"—that's Eliot again—"you must go by a way which is the way of ignorance. In order to possess what you do not possess, you must go by the way of dispossession." Which is to say: collapse now, and avoid the rush.
Ea O Ka Aina: Limitless Wisdom in he Age of Limits 6/03/12
Ea O Ka Aina: Rumbling of Distant Thunder 5/30/12
Ea O Ka Aina: Sustainable Living as Religion 5/30/12
Ea O Ka Aina: Ponzi's End 5/28/12
INDEX: Collapse , De-Industrialize , Self-Sufficiency

redpajama_set_name: RedPajamaCommonCrawl


text:
2022 BMW CCA Club Racing National Award Winners
Chairman, January 20, 2023 January 20, 2023 , Uncategorized, 0
The 2022 BMW CCA Club Racing Rookie of the Year Award is sponsored by Tony Salloum's VAC Motorsports and is presented to the Club Racing rookie BMW racer earning the most points for the year and is awarded to Rick Black. Rick is an April 2022 BimmerWorld Club Race School graduate who campaigned in B Modified in his 2011 E92 M2. Rick gathered up 173 National event points on the way to gaining this RoY recognition.
The 2022 Glenn Lucas Memorial Award, presented to the Club Racer who most represents the Spirit of Club Racing both on and off the track is awarded to Wayne Dobson. Wayne joined the BMW CCA in 2007, graduating from our BimmerWorld sponsored school at Mosport in May 2011. He received his race license in 2012 and has enjoyed considerable success in the IS class over the years, consistently achieving podium placement in BMW Club Racing's National rankings.
As most know, Wayne has led our much-admired BimmerWorld BMW CCA Club Race School program since 2021 and has been a regular member of Club Racing instructing community for many years. He is recognized for his ability to generously share what is important with our members, both on and off the track.
Wayne is also a member of the Club Racing Licensing team, and over the past few seasons has also volunteered his time to help deliver many of our most memorable race events, joining our stewards to ensure our drivers enjoy safe, competitive, exciting races.
Wayne's ongoing efforts to help improve and advance our racing program made his selection by the National Stewards as the 2022 Glen Lucas Memorial Award winner an easy decision.
Our BMW CCA Club Racing annual Driver awards are both accompanied by a $1000 monetary recognition.
Congratulations to Rick and Wayne!
Club Racing Rules Organization Update2022 National Podium Winners


One of the many cool tattoos created on season 4 of Ink Master.
I don't have a tattoo and I don't ever intend on getting one. I don't even like the tattoos I've seen on most people, usually military ones with an eagle or snake or something. It's often hard to tell because over time the greenish tattoos become faded or smudgy.
Jacques Torres is hoping to get $11,000 for his New York City themed chocolate Easter egg.
Would you spend $10,000 for a chocolate Easter egg? How about $11,000? Pastry chef Jacques Torres, aka Mr. Chocolate, is hoping to get at least that much for a 120-pound chocolate egg he decorated to look like the New York City skyline at night.
Pastry Chef Julia Usher is renowned for her 3D cookie creations. What's nicer than a beautiful cookie box filled with cookies?
You have to have a special character to make ephemeral art from cookie dough. Unlike fancy dancy decorated wedding cakes which couples will pay thousands of dollars for, cookies, not so much. They're smaller, generally simpler and not on the radar as "must have" edible artwork. There are cake decorating competitions on the Food Network, and another show on cable called Amazing Wedding Cakes, but no shows devoted to cookie decorating.
When homeowners in El Paso County, Colorado put two toilets and a sink on the property line in their front yard, neighbor Angela Johnson got upset. She didn't want to look at those crappy old things. The homeowners wouldn't remove them, so Angela built a fence so she wouldn't have to look at them.
TKTS Line, a 2005 painting, yes painting, by Richard Estes.
Richard Estes is not a photographer, he just plays one in the art world. His paintings are so amazingly real, I dare you not to think they're snapshots at first glance.
Sometimes human beings just can't appreciate the fine art produced by members of the animal kingdom. Like many struggling artists, the work of Bailey and other wanna be canine artistes is misunderstood. Look at Bailey's sad, pained look. Her Jackson Pollock-esque work now destined for the dustbin. Don't worry Bailey, true art can not be denied. I suspect you'll get another chance to express your doggone creativity.
Chef Charles Draghi, an artist in the kitchen of Erbaluce in Boston.
Fine dining is a rare splurge on my meager salary, so when I go out to eat, it needs to be worth it. I'm sorry to say that quite often I'm disappointed with fancy restaurants and "haute cuisine." Their menus are often pretentious, with artfully arranged pieces of stuff, and overpriced wine lists ($85 for a bottle that retails for $19.99 at the local wine shop), served in a room as quiet as a morgue.
My husband and I recently dined at a highly-touted fine dining restaurant in New York City, left hungry, and stopped for a slice of pizza at Patsy's in East Harlem on our way home.


John Kerry has effectively won the Democratic nomination for President of the United States. And according to President Bush's advisors, the gloves are now coming off and there will be "no more Mr. Nice Guy."
GEE. I AM SO SHOCKED.
Sayeth Kerry – "He proposed to amend the Constitution of the United States for political purposes, and we say that he has no right to misuse the most precious document in our history in an effort to divide this nation and distract us from our goals. We resoundingly reject the politics of fear and distortion."
Amen, brother Kerry. Preach on!
And this just in - blow jobs can kill.


Jiansheng Lighting, experienced staff and advanced equipment, is one of the best wind solar hybrid street light with 300w wind turbine manufacturers and suppliers in China. We now have the highest quality and competitive price wind solar hybrid street light with 300w wind turbine for sale. Welcome to buy our cheap products made in China or experience our customized service, and welcome to check the pricelist and quotation with us.
Security bolts used to fasten cover. Battery box hanging on the pole to reduce vandalism and theft opportunities.
Q3. Do you have any MOQ limit for solar led street light order?
Q5. How to proceed an order for solar led street light?


text:
Football players on the field play
Home/Sports/How many football players on the field can play at a time? The Numbers Explained
How many football players on the field can play at a time? The Numbers Explained
Sonal Send an email
1 All for you to know about how many football players are on the field at once in a single match
2 How many football players are on the field?
2.1 Offensive teams
2.2 Defensive team players
3 Substitutions in football
All for you to know about how many football players are on the field at once in a single match
When we talk about the most popular sports in the world, American football often comes in the conversation. In the US, it is more than just a simple sporting activity.
It's just not about a team scoring more points than the other. The game is also about claiming and dominating the opposition's territory. Even if you are new to the concept of football, if you end up watching a regular NFL game, you will be surprised how serious people are about the sport.
The tension in the stadium is at its peak and the atmosphere is something to admire. The crowd is always charged up and there is a sense of excitement all around.
In general, football can a bit confusing sometimes. There are so many things going on the pitch which makes it difficult to know who is playing and who is not. If you are having trouble finding out how many football players on the field play at once, there's nothing to be embarrassed about.
How many football players are on the field?
Any football team whether it's a college team or even one of the top NFL teams will have 11 players on the field.
If we generally divide football teams into different types, there are three different categories obtained. These include defensive, offensive, and specialized teams.
How many football players on the field play at once
Offensive teams
These are the players who you usually see scoring in football matches. They are always on the frontline, trying to get to the other side of the pitch. The most important player up front is in the quarterback position. The quarterback's main role is to throw the ball to players on the wings or in difficult spaces.
Next comes a running back and attacking linemen. The running back is the player who runs with the ball in the opposite half. On the other hand, the role of attacking linemen is to protect all of their team's offensive players.
Defensive team players
The role of this category is quite simple. These are the players who are responsible for stopping the attacking group from scoring points. The positions included in the defensive roles are cornerbacks, linebackers, tackles, and ends.
'Special' team players
In this particular category, you may find players suited to specific game situations. Most of the NFL scoring opportunities arise from special situations such as set-pieces that ultimately lead to field goals.
A prime example of this could be a player in the kicker position aiming for a shot between the posts to score while the special team sets up a defensive approach.
Substitutions in football
Another confusing part for most of the game audience is regarding player substitutions. To make a matchday squad, an average NFL team could have 46 players on the list.
An important thing to note here is that the official roster number is 53 for a league team. An NFL team coach has to leave behind 7 players from the roster to make up the squad. The players excluded are usually injured or unfit due to the physically demanding nature of the game.
In the case of substitutions, there are some players at specific positions that play out the entire game. An example of such a player is in the quarterback position that usually remains unchanged during the game.
However, other playing spots such as wide receivers and running backs can be substituted as many times as the coach wants, depending on tactical decisions and the situation of the game.
In case of injuries, the particular injured player is removed from the pitch for the remainder of the match and is replaced by any of the 46 players in the squad.
When it comes to friendly games or a casual backyard practice, there is no limit to the number of football players in a team. The numbers matter more in pro college leagues or the NFL games as there is a fixed set of rules to be followed.
However, you should know that the game is more structured and easier to play with 11 players in each team. The number automatically balances any kind of formation or strategy that a team has to apply to the match.
11 players 11 players in football American football coring in footbal NFL game NFL scoring NFL team Substitutions in football
Sonal
Makes Noise is managed by Sonal, a beginner blogger & trend-follower. Sonal has a bachelor's degree in engineering technology and digs all things computer and technology-related, but doesn't stop there. She also follows all the latest trends and loves sharing her knowledge and expertise with you.
A Guide to Indian Wedding Dresses
Getting to Know How Many Players are there in a Soccer Team
Steve Smith And Wife Endure Intense Xmas Sadness
Stream your favorite sports on the go; all you need is a Smartphone and an internet connection.
Live Football Streaming with the top FirstRowSports Alternatives
Sports like Paragliding
Effective Solutions for Bad Pixie Hair Cut
How long is a Football Game? The Actual Figures Revealed
All about Tom Cruise- Net Worth 2020 – Assets, Career, Family, Personal Life & More
Vagabond Season 2 Release Date, Renewal and All You Need to Know
Helene Boshoven Samuel – Everything About Heidi Klum's Daughter
How to Check-up on your Facebook Followers
The Best Alternatives for Anilinkz – Watch Free HD Anime Online
Where To Stream Anime When Masteranime Is Down
PUBG, Relevant Again?
Here's Everything You Need To Know About Showbox APK


Welcome to my homepage! I'm an assistant professor in the Cognitive Systems Group at the Computer Science Department of the University of Hamburg, Germany. Previously (until 1998) I had worked at the Fraunhofer-Institute for Computer Graphics in Rostock, where I did most of the work for my PhD thesis. My research interests include Computer Vision (especially image segmentation and feature extraction) and Reusable Software (reusable algorithms and generic programming) in the context of Computer Vision. Take a look at my publications. I'm also maintaining the semi-official list of German computer vision research groups and companies for the DAGM (German Association for Pattern Recognition).
Image Segmentation: Segmentation is the partitioning of an image into meaningful regions which correspond to (parts of) the objects to be seen. The better your initial segmentation the greater your chance to extract correct semantic information from the image. Among other topics, I've written papers on how to integrate edge and junction detection in order to get correct boundary topology, how to obtain and represent topological partitionings optimally in a computer, and on how sampling affects the correct representation of geometric shapes.
Reusable Software for Computer Vision: Software reuse has been a goal for a long time, but does not work as well as it should. I've written some design patterns which catalog some of the basic ideas of reusable architectures. At the level of algorithms, these ideas are best realized by generic programming (the programming style of the C++ Standard Library). Therefore, I developed a novel computer vision library VIGRA which is based on generic programming. A number of papers and, most comprehensively, my PhD thesis describe the ideas of this library and report our experiences with reusable algorithms.
The VIGRA Library: I'm the author of the free computer vision library VIGRA, which applies the above techniques to implement extremely flexible, yet efficient image processing algorithms. You can read the online documentation or download VIGRA 1.4.0.
3D Reconstruction: While I was at Fraunhofer-Institute for Computer Graphics in Rostock, I helped developing a system which allows to extract 3-dimensional object models from image sequences. I.e., to develop a virtual reality simulation containing natural objects (such as buildings), one takes some photos of each object and uses our system to generate realistic geometric models (including textures). Here are the official descriptions of the projects REKO and ERSO. A description of the ERSO project and the underlying concepts can be found in this paper.


text:
LMD TV
Tharindu Perera November 29, 2021 LMD TV2021-11-29T22:15:30+00:00 LMDtv Article
"The ideology of the Colombo Club stems from the fact that it's a very old, established organisation, which was formed for the purpose
"The legal profession is traditionally one that wasn't privy to a lot of legal tech advancements; but since of late, there has been progress
"Banks can play multiple roles – apart from their traditional role of providing loans and financing," said the Chief Executive Officer
In the Ernst & Young Global Integrity Report 2020, nine out of 10 respondents said that the pandemic has threatened ethical business
BRAND INVESTMENT
Tharindu Perera November 29, 2021 BRAND INVESTMENT2021-11-29T21:04:39+00:00 THE BRAND STORY
Commenting on the 18 years of the publication of Sri Lanka's Most Valuable Brands in the Brands Annual, Sujeewa Rajapakse says that
Tharindu Perera November 29, 2021 LMD TV2021-11-29T15:26:20+00:00
"The most significant con of the Port City Colombo Commission Act is its propensity to be misinterpreted as having some other political
BRANDING FOR VALUE
Tharindu Perera November 29, 2021 BRANDING FOR VALUE2021-11-29T14:49:06+00:00 THE BRAND STORY
Discussing the impact of Sri Lanka's Most Valuable Brands listing, Hemaka Amarasuriya says: "Over the years, Brand Finance and LMD
MYLAND DEVELOPMENTS LIMITED
Tharindu Perera November 29, 2021 MYLAND DEVELOPMENTS LIMITED2021-11-29T13:58:44+00:00 MEDIA RELEASES
Real estate developer, Myland Developments Limited (MDL) has announced an Initial Public Offering (IPO), via offering a 17.24% stake
EXPORT DEVELOPMENT BOARD (EDB)
Tharindu Perera November 29, 2021 EXPORT DEVELOPMENT BOARD (EDB)2021-11-29T13:42:39+00:00 MEDIA RELEASES
Sri Lanka Export Development Board (EDB) is organizing the 24th Presidential Export Awards Ceremony on 26th November 2021
Tharindu Perera November 29, 2021 FITIS2021-11-29T13:32:10+00:00 MEDIA RELEASES
Amidst a fast-paced technological revolution, which has pushed the world to increasingly embrace digitalization, the apex body of the ICT
Tharindu Perera November 29, 2021 TAG HEUER2021-11-29T13:21:18+00:00 PARTNER NEWS
Luxury watch brand TAG Heuer partnered with the Royal Colombo Golf Club (RCGC) to jointly host the club's 100th championship tournament
Tharindu Perera November 29, 2021 FOREWORD2021-11-29T11:43:38+00:00
A brand is a financial asset that adds value to a business by generating sales, attracting talent, and building partnerships with suppliers


Handicap Bathroom Designs Pictures have 50 picture of interior design, it's including Handicap Bathroom Designs Pictures Startling Quality Design Small Kitchen And Interior 1. Handicap Bathroom Designs Pictures Phenomenal Remodel Culpeper VA Ramcom Kitchen Bath Interior Design 2. Handicap Bathroom Designs Pictures Magnificent Remodels For Handicapped HANDICAPPED BATHROOM Ms Interior Design 3. Handicap Bathroom Designs Pictures Doubtful Ideas Bathrooms Traditional Interior Design 4. Handicap Bathroom Designs Pictures Wonderful 23 With Showers MessageNote Interior Design 5.


Are you a martial arts professional? And you want to start a martial arts school with small startup budget? Here is this post, I put every details and resource on how to start a small-scale martial arts school. Check it out.
Revenue wise martial arts school business is very lucrative. As it focuses on a specialized instruction. Generally, martial arts are the different systems of self-defense. Simply, you can say, it is an art to physically defeat opponents and defend against threats.
Martial arts are very popular globally. Even it is a well-accepted form of workout. Among the different types of arts, mixed martial art is most popular. Although the industry serves a demographically diverse clientele, we can expect a potential market in the industry. The major portion of clientele include males and the youth.
There are five distinct categories in the industry. These are stand-up or striking styles, grappling styles, low impact styles, weapons based styles, and MMA (A Hybrid Sports Style).
Finally, this is most popular. In addition, it gives better revenue. This is mixed martial art.
Check whether you have the proper qualification or not. You must have the necessary qualifications. However, they vary depending on the province you are starting the school. Having a master arts black belt is the must for starting a school. Generally, a black belt is at least very proficient in a style's techniques. In many cases, true experts may have degrees attached to their black belts (2nd-degree black belt, for example) or are actually called masters of their art.
Alike any business, this is most important. You will need to decide how mush are you require. Determine your target demographic. In addition, How you will attract clients. What will be your marketing strategy? Set your business goal and plan to reach there. Furthermore, determine your business objective. You must craft the financial part also. Calculate the startup budget with working capital cost. And calculate an expected ROI with cash flow.
You must find a location to start your school. It is better to establish near the posh residential area. According to your requirement secure a space. However, there are certain space requirements for setting up a dojo. Don't go for purchasing a space. Start with a rental space.
First of all, you must offer a professional and comfortable interior to your clients. Ask an interior designer to craft a floor plan. Secure space for waiting and changing room. Decorate the inside walls with large mirrors and martial arts related paintings. Have a notice board to fix the schedule of classes or tournaments. Concentrate on flooring. In addition, get them full matting. Display a belt rack.
Fix the charges carefully. However, you can offer free sessions to attract new customers. Common forms of martial arts classes include karate, Tae Kwon Do, Kung Fu, Aikido, and Judo. There is little cost variance among the different types. However, you can offer different charges for children and adults.
According to your plan hire employees. However, you instructors must have proficient knowledge of the subject. And of course, a passion for teaching others.
Advertising and promotion are the musts. Promote your school offline and online both. Have your own website. Promote on social media. Find a relevant team, school, or group to sponsor. You'll need to do a cost-benefit analysis. However, this can make your school look really good in your community and boost your presence.
Have some printed stickers. They are really very effective tools to boost the awareness. In addition, you can offer the after-school programme for the children. Offer free demonstrations at local schools. Try every possible option for promoting your martial art school online. Some of the most potential options are the Facebook advertisement, Google Adwords etc.
If you want to start your own martial arts school, I will recommend you to read the book 'Small Dojo Big Profits.' This is the classic text on starting a martial arts school – the martial arts business plan trusted by thousands of martial arts school owners for over a decade. The author of this book Mike Massie has shared the valuable detailed guide to starting a successful martial arts school of your own. Click Here.


Incompatibility issue with iPod source function on specific Pioneer models.
Following the recent Apple iOS update to 11.3x, Pioneer has discovered an incompatibility issue with the USB-Direct iPod function on five Australian headunit models.
Recent product testing discovered users will receive an error message when they connect an iPhone or iPod touch (running iOS 11.3x) to the USB input and select the iPod source function.
The five models impacted; AVH-295BT, AVH-285BT, AVH-275BT, MVH-AV290BT and MVH-AV280BT.
• Users can still connect their iPhone or iPod touch to any of the five Pioneer models listed above, by Bluetooth.
• Android OS devices are not affected.
• Pioneer will continue to update everyone with announcements on the Australian website and Facebook page.
• If you have any questions or queries about whether your Pioneer headunit will be impacted by this announcement, please contact Pioneer Customer Support on 1800-672-102, Monday through Friday, 9am – 5pm.


The 35th Infantry Regiment Association salutes our fallen brother, CPL John Cobos Lazalde, RA19323864, who died in the service of his country on November 27th, 1950 in Kuryong River, North Korea. The cause of death was listed as Captured-Died POW. At the time of his death John was 20 years of age. He was from California. John's Military Occupation Specialty was 4745-Light Weapons Infantryman.
The decorations earned by CPL John Cobos Lazalde include: the Combat Infantryman Badge, the Purple Heart, the National Defense Service Medal, the Korean Service Medal, the United Nations Korea Service Medal, and the Republic of Korea War Service Medal.
Sergeant Lazalde was a member of Company B, 1st Battalion, 35th Infantry Regiment, 25th Infantry Division. He was taken Prisoner of War while fighting the enemy in North Korea on November 27, 1950 and died while a prisoner on April 30, 1951. His remains were not recovered. Sergeant Lazalde was awarded the Combat Infantryman's Badge, the Prisoner of War Medal, the Korean Service Medal, the United Nations Service Medal, the National Defense Service Medal, the Korean Presidential Unit Citation and the Republic of Korea War Service Medal.


text:
2022 May Bishop Kulick's Talk On "Bodily Resurrection."
Bishop Larry J. Kulick spoke to the Oblates of Saint Benedict of Saint Vincent Archabbey on "Bodily Resurrection" on Sunday, May 15, 2022.https://vimeo.com/711252882
Bishop Kulick's Visit With The Oblates
Enjoy some photos by Grace Alverson of Bishop Kulick's afternoon and dinner with the Oblates of Saint Vincent of Saint Vincent Archabbey on May 15,
May 2022 Oblate Talk
Father Justin Nolan's talk to the Oblates on May 15 on "Walking with the Lord." https://vimeo.com/710510268
Bishop Kulick To Speak On "Bodily Resurrection"
The Most Rev. Larry Kulick, J.C.L., Bishop of the Diocese of Greensburg, will give a presentation on "Bodily Resurrection" at 7 p.m. Sunday, May 15
April 2022 Oblate Talk
Father Earl Henry, O.S.B., spoke to the Oblates in April. Take a look.
March 2022 Oblate Talk
Father Nathanael Polinski, O.S.B., spoke to the Oblates in March on the topic of Holiness in Benedictine Spirituality.
Retreat Program Registration Now Open!
Four Archabbey retreats will be offered on campus in 2022. Please refer to the website: www.saintvincentretreats.org for descriptions and links to the online registration. Online
February 2022 Oblate Talk
Father Jude Brady, O.S.B., spoke to the Oblates on the topic of Obedience in Benedictine Spirituality.
January 2022 Oblate Talk On Silence
Father Donald Raila, O.S.B., spoke to the Oblates in January of 2022 on the topic of Silence. https://vimeo.com/manage/videos/667404628
2021 December Oblate Talk
Father Basil Burns, O.S.B., spoke on holiness at the December 2021 Oblate meeting. https://vimeo.com/manage/videos/661974408
Assembly of Deanery Representatives on Saturday, June 4, 2022
The semi-annual Assembly of Deanery Representatives, postponed from last year because of the pandemic, is tentatively scheduled for Saturday, June 4. One or two representatives
Plans for the 5th World Congress of Benedictine Oblates
The international Oblate Congress originally for scheduled for November of 2021 has been rescheduled again for September 9-16, 2023. Presumably the pandemic will be over
« Previous Page1 Page2 Page3 Page4 Page5 Page6 Page7 Page8 Page9 Page10 Next »


text:
Visit Sunshine Coast
Noosa Heads visitor guide
View latest deals
Noosa Heads is one of the world's most sought-after holiday destinations, and with good reason: it combines all the finer things in life with stunning beaches offset by the beauty of Noosa National Park, all in one compact area you can explore by foot.
Noosa's stylish, low-rise architecture takes nothing away from its stunning natural environment, with the community's environmental ethic having led to it being declared Queensland's first UNESCO Biosphere Reserve. Even in trendy Hastings Street, the subtropical trees and greenery form as much a part of the landscape as the designer boutiques, cool cafes, bustling bars and alfresco restaurants. Visit Noosa and you will feel like you've entered another world, where the pursuit of pleasure comes easily, with the best of what nature and culture have to offer.
Whatever level of accommodation you choose in Noosa Heads, you can be assured it will be of a high standard and within easy access of spectacular beaches. Spare no expense and rent a private waterfront holiday home, or select from more than 120 establishments within a five-kilometre radius of the main town, from luxury villas and five-star resorts with absolute beach frontage, to self-contained apartments, backpackers and naturalist's retreats. Or if you'd like to immerse yourself fully in Noosa's beautiful natural environment, have a laid-back camping holiday at Noosa North Shore, an unspoilt wilderness within close vicinity of Noosa's social and cultural attractions.
Much of Noosa life takes place around the stunning Noosa Main Beach, one of the only north-facing beaches on the east coast of Australia. Its gentle waves are favoured by families and those learning to surf, and its soft white sand is dotted with sun worshippers all year round. There are also spectacular bays and beaches hidden inside private pockets of the Noosa National Park, such as the nudist beach Alexandria Bay. For a change from the beach, you can venture up the Noosa River, which extends through a series of lakes up to the Noosa Everglades and is best experienced by canoe, kayak or river cruise.
Hastings Street is a hub of activity day and night, with a steady stream of diners relishing the cuisine and cocktails of exclusive restaurants and bars. Noosa's cafes, ice-cream parlours, bars and fashion boutiques are always full of life.
Further afield, you can go hiking to some of Noosa's many mountaintop lookouts, or spend an adventurous day abseiling, hiking or mountain biking at the volcanic formation of Mount Tinbeerwah.
Foodies from far and wide descend on Noosa in May for Noosa Food and Wine four days of gastronomic indulgence that showcase the best of the region's fresh produce. Creative types flock to Noosa in July for the Noosa Longweekend, ten days of arts, literature, food and fun. The Noosa Triathlon, held in late October and early November, is one of Australia's largest sporting events and the Noosa Festival of Surfing also attracts visitors from far and wide. There is also the Noosa Jazz Festival and Winter Festival.
With the Sunshine Coast Airport only 30 minutes from Noosa and Brisbane International Airport only 1.5 hours, the Noosa and surrounds area of the Sunshine Coast is exceptionally convenient for interstate and international travellers. There are also plenty of hire cars available, as well as local Noosa buses and taxi services.
Luxury trekking in the Sunshine Coast Hinterland
Sunshine Coast Hinterland Great Walks
Best next-level hikes, mountain climbs and waterfall walks on the Sunshine Coast
Sign up for deals, events, specials & secrets
#visitsunshinecoast
Copyright © 2020 Sunshine Coast | All rights reserved
FoodTrails


Spatial and temporal data (EVENT DATA) from a total of 178 sampling events of marine benthic invertebrates from two sampling project periods: 27 events from coastal areas near Arendal and deeper parts of Skagerrak collected in June 2006 with research vessel R/V "G.M. Dannevig". The sampling was organised by Christoffer Schander, University of Bergen. 151 events from deep areas of Skagerrak collected in May 2009 with research vessel R/V "Håkon Mosby". The sampling was organised by Christoffer Schander, University of Bergen in collaboration with the the Swedish Species Information Centre.


text:
Page B4
Home » Feature
Remembrances and gratitude
By Samuel Chao Chung Ting | February 27, 2010, Saturday | Print Edition
SAMUEL Chao Chung Ting was born in 1936 in the US state of Michigan, but his ancestry is rooted in China's Shandong Province. In 1976, Ting and Burton Richter shared the Nobel Prize in Physics for their discovery of a meson nuclear particle. Ting was named an Honorary Professor by the University of Science and Technology of China, and he is also a member of the Institute of High Energy Physics of the Chinese Academy of Sciences. Ting is the principal investigator for the Alpha Magnetic Spectrometer project, which is scheduled to be installed on the International Space Station in 2010.
The first time I was ever in Shanghai was in 1946. My impression was that it had many good restaurants. The second time I was in Shanghai was 1948. At that time the streets were filled with refugees and defeated soldiers. My impression was that the end of the world was near.
The third time I was in Shanghai was 1977. At that time my impression was that there were few cars and everyone wore the same style of clothing.
The fourth time I was in Shanghai was in 1983. The Shanghai Institute of Ceramics, under academician Yan Dongsheng, produced 12 tons of special crystals for my experiment studying the fundamental building blocks of nature. The quality and quantify of the crystals produced by the institute were world class.
Since 2002, my present experiment to search for antimatter and dark matter via the International Space Station has brought me to Shanghai many times. Shanghai now has many trees and parks, and the streets are very clean, although now filled with traffic. It is a dynamic and well managed city similar to the city where I reside, Geneva, Switzerland. Professor Yang Yupu of Shanghai Jiao Tong University has made extraordinary contributions to the software of my experiment to be conducted in space.
Over the years, Jiang Zemin, Zhu Rongji, Wu Bangguo, Han Zheng, Yan Junqi, Yang Dinghua and other Shanghai leaders have provided great encouragement and support for my research. However, since I am a physicist, I do not feel qualified to make recommendations on how to build and manage better cities.
The Shanghai government is very capable and efficient, and I am confident that the 2010 World Expo in Shanghai will be a great success.


This week I took my two toddlers ice skating. Alone. It was hilarious. If there ever was a scene in Bridget Jones, and she was a Mum of two and they went ice skating? It would have been that. My gusset was round my knees. I screamed continuously. A lad, who was so young I probably could have taught him, had to help me scrape my children off the floor. It was hilarious. Probably dangerous. But just brilliant. Seriously brilliant. You see. When I am with my children? We are untouchable. Together they can drive me mad. There's sometimes where I cry and they cry and we all cry. But then there's times? When the world stops. There's just us three. And we are team. Best friends. Like Bros. I'm probably Craig.
On 'ice skating day' we were out of the house for nearly four hours. And I can't tell you how we spent the time. I do know I ended up getting conned into buying the dog a jumper and a ridiculously overpriced 'elf' for the playroom. We just walked around chatting and going for wees and eating and falling over and the odd shout or scrap. But I couldn't tell you if anyone else looked. Or tutted. Or raised their eyebrows. But I did see the odd smile as I shouted "put down that glass". And I defo heard a giggle as my girl did a full on dance routine to the very festive All Saint Pure Shores in the cafe.
Four hours in a garden centre. We could have lived there!
I have learnt that the best thing to do when I'm with two toddlers is block out everyone else. And just focus on us. If I feel like taking the two of them to a theme park alone. I will. If I want to brave shopping. I will. The best advice my Dad ever gave me when I used to worry about the children crying endlessly in public was that everyone has been a child. Or knows a child. And everyone has been there. Yeah sometimes they forget and have a little moan. And believe you me I have had the odd shout at old ladies who've passed a rude comment or six.
My advice for anyone when they are going out with their kid is? Just be a team. There will be some games you lose (for example when I took the two of them alone to Cadbury's World and my girl screamed so loudly over a pack of mishapes we had to leave after twenty minutes) but there are some games you win. And those seven to ten minutes ice skating where we screamed and laughed, right up until the point we put the overpriced jumper on the dog hours later and screamed and laughed all over again? We were perfect. We were? Untouchable.
how can you make me laugh one minute and cry the next. Beautifully written and brilliant advice.
Go on - tell us, how mych was that dog jumper?!
The Team Price Christmas card this year features all 4 kids, smiling, looking at the camera sitting in that very there deer drawn carriage. No #wickedWednesdays photo for us this year - boom!!!
I'm all over the ignoring everyone else! Your right there are crappy times but the smiles and laughs far outweigh the bad times.
Oh I love this so much - soppy AND funny! Very good point about ignoring everyone else though. I tend to worry too much about what others think of my parenting but goodness knows why, really.
Awww this is the sweetest post. I love it.


The terracosms are planted with a native Willamette Valley grassland plant community. This community is ideal because it reaches a maturity within a few years, and the plants have small stature and fit well within the chambers.
We used plant surveys performed by the Institute for Applied Ecology to select 14 of the most common species in native-dominated areas, plus one rare, but easily grown native species. The final species list included annuals and perennials, forbs and grasses, and a nitrogen-fixer.
One of the unique features of the experimental design is all of the terracosms were planted in the same layout (above). That means in every chamber the same species can be found in the same location, with the same neighbors! This consistency improves our ability to separate the impacts of the temperature treatments from a plant's immediate environment. The replicated grid also helps reduce noise in other measurements that plants might impact. When we measure soil nutrient concentrations or soil respiration, we know that the plants immediately surrounding the measurement location are the same in every chamber.
The plants were started from seedlings in 2005 and allowed to become established for a year under ambient conditions before temperature treatments began.
Measuring plant variables with the "hovercraft".


text:
Home Entertainment Salman Khan's new look from Bharat inflames the internet
Salman Khan's new look from Bharat inflames the internet
Image tweeted by Ali Abbas Zafar
Continuing the trend of releasing his films on Eid, superstar Salman Khan will treat cinephiles with his much-awaited movie Bharat on upcoming Eid. The big-ticket film, which features Katrina Kaif as the female lead, has been in news ever since it was officially announced last year. It is being touted as one of the biggest Bollywood releases of 2019.
A couple of months ago, a teaser of the movie had been released, which largely received positive response from audiences. Today, the makers dropped a poster from the film, wherein Salman Khan can be seen in the avatar of a middle-aged man with salt and pepper look.
The poster has gone viral ever since coming out, with almost everyone praising Khan's look in it. The official remake of the Korean film, Ode to My Father, Bharat is a story of a man and a country together which pans through over 50 years. The makers are expected to drop a few more posters ahead of the official release of the film's trailer on 24th April.
Bharat is directed by Ali Abbas Zafar and marks his third collaboration with Salman Khan after Sultan (2016) and Tiger Zinda Hai (2017). The movie has been jointly produced by T-Series, Salman Khan Films and Reel Life Production.
It is slated to roll into theatres on 5th June, 2019.
Tiger Zinda Hai
Previous articleDharma Productions keen to sign Rajkummar Rao for a sequel
Next articleBangladesh to call Shakib back from IPL for World Cup camp


text:
Q: Disable anchor tag using button click I need to disable anchor tag using button click event. I handled both server-side and client-side events for my requirement. I modified the 'href' attribute in client-side click event as follows.
[ASPX]
 <asp:Button ID="Button1" runat="server" Text="Disable" OnClick="disable"  CausesValidation="false" OnClientClick="disable();"  />

[Script]
     function disable() {
        $('a.ClassName').attr("href", "#")
    }

It gets set properly. But after the server-side process, anchor tag again sets with the old href attributes. How to resolve this?

A: When you PostBack to the server, a fresh page is rendered.
Any changes you made via javascript will be lost.
You should detect the condition(button being pressed earlier), at server side and make the necessary changes to url server side too.
You can store this state change in a hidden input and get it at server side.

A: you have to disable the link as soon as the page loaded useing ,
preventDefault();

so try to do something like this ,
function disable_link(event) {

    event.preventDefault();
    return false;
}

but instead just bind it to the specific element that you want

redpajama_set_name: RedPajamaStackExchange


text:
Cops In Cuffs
Jailer Suspected of Child Molestation Sued by Inmates who say he Raped them
In August 2017, the Eureka Police Department received information about Fisher, a jailer working at the Humboldt County jail at the time, regarding possible long term sexual and physical abuse of minors.
An investigation was launched and probable cause for a warrant was obtained to arrest Fisher, 30, on charges for the crimes of oral copulation with a minor 10 years old or younger, sodomy with a child 10 years or younger, lewd acts with a child under 14 years old, lewd acts with a child under 15 years old and continuous sex with a minor under 14 years old.
Fisher was arrested and taken into custody on September 15, 2017 by US Marshals and held on a $3 million bail.
In a lawsuit filed against the county last Thursday, a victim named "John Doe I" says Fisher bullied him into performing oral sex while he was still working in the facility as a correctional officer.
Another inmate named as "John doe II" claims Fisher, after squeezing his penis, threatened to him to keep quiet or he would report the prisoner had attacked him, according to the Lost Coast Outpost.
Plaintiff Doe I alleges Fisher woke him up on two occasions by groping his buttocks.
After the second time, the suit alleges, Doe I asked Fisher "What the fuck are you doing?"
"Be quiet or else I'll call a code and say you assaulted me," Fisher threatened.
Fisher later came into Doe I's cell, waking him up.
"Before I leave I have something I need you to do," he told the inmate.
"I need you to suck on this," Fisher said, after unzipping his pants and pulling out his penis.
"Fuck no," the inmate told him.
"Fisher then came closer," the lawsuit says, and put his taser to the back of the inmate's head.
"Yes you are," Fisher told him.
"With the taser to his head, (the inmate) performed oral sex on Mr. Fisher."
Doe II makes similar claims as Doe I, stating he was sexually assaulted by Fisher on three different occasions.
The first two involve Fisher fondling the inmate's buttocks and legs. On the third time, Fisher woke up the inmate by squeezing his penis.
When he protested, Fisher pulled out a taser and his radio and threatened him to calm down or he would radio in to report he was assaulted.
John Doe I and John Doe II, who are represented by San Francisco attorney Tyler Smith, ask for damages in excess of $25,000.
in a third claim, filed by attorneys Shelley Mack and Peter Martin on behalf of plaintiffs John Doe III and IV, the plaintiffs claim one of the men "endured aggressive and highly sexualized frisks prior to entering the shower facility" on six or seven different occasions.
The "frisks" involved Fisher manipulating Doe III's genitals, rubbing and touching them.
Does III and IV allege that when they were showering, Fisher "ogled" them, harassing them with makeshift binoculars made of two toilet paper rolls glued together.
Jail employees laughed as they looked on, the complaint says.
Those two inmates filed official written grievances after the "ogling" incident.
Their grievance was denied by a jail sergeant who called it "untimely" in his response.
When they appealed, their appeal was denied with the response "filed to late" as their reason along with "no good."
A sheriff's detective, who interviewed Does III and IV, promised to get back to them to investigate their claims, but reportedly never has.
Does III and Iv are asking for $50,000 each.
Fisher, 31, worked as a jailer for over 11 years, and only resigned after he got wind he was being investigated by Eureka police.
Fisher was arrested on September 15, 2017, about a month after quitting his job at the Humboldt County Jail and moving to San Bernardino.
today_is_the_day
Local Victim of Alleged Rape by Las Vegas Cop Speaks Out
A Las Vegas police officer was arrested for felony sexual assault last Saturday, and his alleged victim is a San Diego woman who was…
www.nbcsandiego.com
17th Woman Accuses Deputy Fischer of Misconduct
A 17th woman has come forward accusing San Diego County Sheriff's Deputy Richard Fischer of inappropriate behavior.
Ohio Cop Sentenced to Prison for Urinating on Girl Sitting at Bus Stop
Cleveland police officer Solomon Nhiwatiwa will have to register as a sex offender upon release from prison.
EvershineDan
Oklahoma Officer Charged with Selling His Department Issued Guns to Pawn Shop
This cop is accused of pawning his own department's guns for some extra cash
Cop Sentenced to 150 Days in Jail for Repeatedly Raping his Friends' Child
An Oregon judge sentenced a cop for sexually abusing a girl under the age of 16.
PigletSmiglet
Texas Deputy Charged for Slapping Man after telling Man to Slap him First
Harris County sheriff's deputy Ellison Collins was indicted by a grand jury Tuesday on a misdemeanor assault charge.
Jethroe
Atlanta Cop gets 5 Years for Beating Walmart Customer over Tomato he Paid for
An Atlanta cop has been sentenced to five years in prison after he was found guilty for beating a man over a tomato.
UtterPirate
Missouri Deputy Charged with Shooting Woman in Back after Video Proves she Lied
The woman had been riding on a scooter the wrong way down a one-way street before she was shot in the back.
NYPD Cop facing Prison after Breaking into Family's Home, Calling them "N*ggers"
NYPD cop Michael J. Reynolds pleaded no contest to three counts of assault. He will be sentenced in November.
deboinair
Deputy Resigns after Slamming K9 to the Ground Several Times, Fracturing its Leg
A deputy who slammed the dog he worked with to the ground multiple times has resigned amid an investigation's findings.
NJ Cop who Beat Black Suspect "Like he Owed me Money" gets 2.5 Years in Prison
"Everything we do is illegal," the 7th New Jersey cop wrote in a text message to another cop in his department.
Trust None
Oklahoma Cop Kills Police Chief during Public Safety Conference in Florida
The cop is being held with no bond.
gburg61


text:
Q: Import eclipse project into android studio, apk size is Increased I was converted eclipse project into android studio project, apk size is increased 10mb to 17mb. I don't how to resolve this my grade file look like this,
apply plugin: 'com.android.application'
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}
dependencies {
    testCompile 'junit:junit:4.12'
    repositories {
        mavenCentral()
    }
    compile fileTree(dir: 'libs', include: '*.jar')
    androidTestCompile 'com.android.support.test:runner:0.3'
    androidTestCompile 'com.android.support.test:rules:0.4'

    compile 'com.jayway.android.robotium:robotium-solo:5.5.4'

}

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    aaptOptions.setProperty("cruncherEnabled", false)

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')

        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
    android {
        packagingOptions {
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/LICENSE.txt'
        }
    }
buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

Please help me to get original size of my apk file thank you

A: Focus on this line:
compile 'com.jayway.android.robotium:robotium-solo:5.5.4'

It is the robotium jar,should not be compiled in build config debug/release.
Try modify it to 'androidTestCompile'.
androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.5.4'


text:
Fletcher Family History
Albert Fletcher Bios
Albert Fletcher
Show other Albert Fletchers
Albert Fletcher (1928 - 2011)
Albert Fletcher was born on July 24, 1928. He died on July 5, 2011 at age 82. He was buried in Calverton National Cemetery Section 33 Site 1971, Calverton, New York.
Branch of service: Us Navy Rank attained: STM3 Wars/Conflicts: World War Ii.
Find records of Albert Fletcher
Find records of Albert
Albert Fletcher's biography is built and maintained by people like you. Create an online profile of Albert so that his life is remembered forever. If any factual information is incorrect, please edit Albert's biography.
Albert Fletcher Biography & Family History
This genealogy profile is dedicated to the life and ancestry of Albert Fletcher and his immediate Fletcher family. Add to Albert Fletcher's genealogy page to share your memories & historical research with his family and other genealogy hobbyists.
There is no cause of death listed for Albert.
Calverton National Cemetery Section 33 Site 1971, 210 Princeton Boulevard - Rt 25, in Calverton, New York
Did Albert move a lot? Did he emigrate from another country? Add Albert's last known location.
Albert Fletcher lived 13 years longer than the average Fletcher family member when he died at the age of 82.
Did Albert finish grade school, get a GED, go to high school, get a college degree or masters? What schools or universities did Albert attend? Add education.
Share what Albert did for a living or if he had a career or profession. Add Profession.
Branch of service: Us Navy
Rank attained: STM3
Wars/Conflicts: World War Ii
Unknown. Add Albert's ethnicity.
Unknown. Add Albert's nationality.
Unknown. Was Albert a religious man? Add Albert's religion
We currently do not have photos of Albert Fletcher. Below are potential family photos that share Albert's last name or surname. Pictures really do say a thousand words. Add photos of Albert during various points of his life
Walter Wiliam Durman
Eleanor Schodle obituary
1953 Kodiak Naval High School
Bernard Fletcher
James T Fletcher
James Fletcher
Faith E. Shibler, 1976 Florida
Mattie Daisy Fletcher Hinson, 1895
Jim Thorpe, Moose McCormick and the 1913 New York Giants
Russle Colleen Carmen
Jay Willard
Sala-Bughi Children & Grandchildren
1928 - In the year that Albert Fletcher was born, aviatrix Amelia Earhart, age 31, became the first woman to fly solo across North America and back in August. In June, she had been part of a 3 man crew that flew the Atlantic Ocean but since she had no instrument training, she couldn't fly the plane - she kept the flight log. The North American flight became one of her many "firsts" as a female pilot.
1935 - Albert was just 7 years old when on September 8th, Louisiana Senator Huey Long was shot by Dr. Carl Weiss. Weiss was shot and killed immediately by Long's bodyguards - Long died two days later from his injuries. Long had received many death threats previously, as well as threats against his family. He was a powerful and controversial figure in Louisiana politics (and probably gained power through multiple criminal acts). His opponents became frustrated with their attempts to oust him and Dr. Weiss was the son-in-law of one of those opponents. His funeral was attended by 200,000 mourners.
1959 - Albert was 31 years old when on August 8th, Hawaii became the 50th state of the United States. The US flag was changed to show 50 stars.
1962 - Albert was 34 years old when on October 1st, African-American James H. Meredith, escorted by federal marshals, registered at the University of Mississippi - becoming the first African-American student admitted to the segregated college. He had been inspired by President Kennedy's inaugural address to apply for admission.
Albert Fletcher Family Tree
Who was Albert's parents? Did he get married and did they have children? Share Albert's family tree to share his legacy and genealogy pedigree.
Albert's Family
You can add or remove people from Albert's family tree by clicking here.
This obit of Albert Fletcher is updated by the community. Edit this biography to contribute to his obituary. Include details such as cemetery, burial, newspaper obituary and grave or marker inscription if available.
Albert Fletcher passed away on July 5, 2011 at 82 years old. No cause of death has been listed. He was buried in Calverton National Cemetery Section 33 Site 1971, Calverton, New York. He was born on July 24, 1928. We are unaware of information about Albert's family or relationships.
Share a Memory about Albert Fletcher
What do you remember about Albert Fletcher? Share your memories of special moments and stories you have heard about him. Or just leave a comment to show the world that Albert is remembered.
Other Records of Albert Fletcher
Explorers of the 20th Century See the true faces of the men and women explorers who pushed the limits of our knowledge by daring to dream and challenge our boundaries. These historic explorers and adventurers have helped us...
Does This 1950's 4th of July Homemade Video Bring Back Childhood Memories? Fun times! This home movie of a neighborhood 4th of July celebration in Rockaway Beach, MD could have been taken anywhere in the U.S. in the 1950s. Decorated bikes and trikes, lots of balloons and...
Fashion in the Early 1900s This video shows the fashions, hairstyles, contraptions (okay, buggies and cars), and activities of the early 1900's. The dresses are lovely - but how did people move and breathe in that...
Thanksgiving Traditions In The Past You've probably spent your whole life with the same traditions on Thanksgiving: Family and friends gathering for turkey, dressing (or stuffing), mashed potatoes, gravy, yams, sweet potatoes, green...
Other Albert Fletchers
Albert William Fletcher
Albert William Fletcher (1896 - 1917)
Albert Thomas Fletcher (1921 - 1944)
Albert Robert Fletcher (1880 - 1916)
Albert Joseph Fletcher (1884 - 1916)
Albert John Fletcher (1926 - 1945)
Albert Henry Fletcher (1890 - 1917)
Albert Harry Fletcher (died 1917)
Albert Frederick Fletcher (1913 - 1942)
Albert Ernest Fletcher (1905 - 1941)
Albert Edward Victor Fletcher (1886 - 1915)
Albert Edward Fletcher (1917 - 1941)
Albert E. Fletcher (died 1915)
Albert Douglas Fletcher (1918 - 1943)
Albert Fletcher (died 1941)
Other Fletchers
Eugene Laverne Fletcher (1940 - 2011)
Viola Fletcher (1922 - 2011)
Mary Lou Fletcher (1934 - 2007)
Charles Calvin Fletcher (1929 - 2011)
Kenneth Joe Fletcher (1934 - 1998)
Doris Eugene Fletcher Jr (1926 - 2011)
David Ray Fletcher (1939 - 2011)
Wayne Lee Fletcher (1956 - 2011)
Milton Fletcher (1946 - 2011)
Thomas H Fletcher Jr (1917 - 2012)
Anthony L Fletcher (1956 - 2011)
Harry O Fletcher
Winford E Fletcher (1931 - 2012)
Michael Dennis Fletcher (1948 - 2011)
Nathan Davis Fletcher (1926 - 2012)
Marjorie Ann Fletcher (1933 - 2010)
Kenneth Gordon Munro (1955 - 2011)
Mia Janae Royster (2011 - 2011)
Mary Ellen Wendel Neitge How (1918 - 2011)
Christine M Romaine (1926 - 2011)
William L Slaten (1922 - 2011)
Norman E Niemuth (1933 - 2011)
Thomas Edward Willis (1951 - 2011)
Regina A Wittrock (2011 - 2011)
James William Russell (1938 - 2011)
Thomas J McLaughlin (1920 - 2011)
Edward Morris Scott (1936 - 2011)
Elbert Armee Moore (1939 - 2011)
Charles William Christman (1930 - 2011)
Edward James Moran (1940 - 2011)
William Thomas Roberts (1928 - 2011)
Elsie M Nichols (1920 - 2011)
Carmen Rodriguez (1925 - 2011)
John Norville Frick (1934 - 2011)
Esteban Josilva Tanagon (1930 - 2011)
Marie J Allen (1923 - 2011)
Source(s): U.S. Department of Veterans Affairs
Success Stories from Biographies like Albert Fletcher


DRDO – Snow and Avalanche Study Establishment Research (SASE), Chandigarh has recently invited applications for the 5 post of Junior Research Fellow. Candidates who's age is not more than as specified in DRDO SASE jobs notification and having qualification of BE/ B.Tech/ ME/ M.Tech/ PG Degree with NET/ GATE from the University/ Institute recognized by the Government of India are eligible to apply for the post.
For more detail information on educational qualification follow the DRDO SASE notification link below.
Reader's are requested to follow DRDO SASE official advertisement for complete details.