text:
MacroVoices Podcasts
MacroVoices All Stars
MacroVoices Energy Week
MacroVoices Hot Topic
MacroVoices Inside the Investment Committee
Timless Series
MacroVoices Videos
MacroVoices Live Videos
Timeless Series
All-Stars: Dr. Pippa Malmgren
All-Star Dr.Pippa Malmgren : Geopolitics is increasingly important for investors!
Today's MacroVoices All-Star is Dr.Pippa Malmgren. Erik and Pippa discuss:
U.S.-China Trade Talks and the Huawei debacle
Populism winning European Elections (and spreading elsewhere)
U.S.-Iran Situation
Get embed code for this episode. | For other embed code options click here. | Download the audio MP3 File (16.76 MB) .
Click to Play Now!
Dr. Philippa Malmgren (@DrPippaM on Twitter and social media) helps companies, investors, policymakers and the public better understand the interplay between politics, policy, geopolitics and economics. She is a regular commentator and guest anchor on CNBC, BBC, Bloomberg and Sky News. She also appears on popular radio shows like The Jerry Doyle Show. In 2015 her book Signals: the Breakdown of the Social Contract and the Rise of Geopolitics became a best-seller on Amazon in four categories after being crowdfunded on Indigogo (249% of the target in just 15 days). The updated version of Signals will be published by Weidenfeld & Nicholson in June 2016. The Chinese paid a near record price for the translation rights In April 2015 she also wrote "Geopolitics for Investors" which was commissioned by the CFA. She founded DRPM Group, an economic advisory firm whose clients include investment banks, fund managers and hedge funds as well as Sovereign Wealth Funds, pension funds, global corporations and family offices. She has an especially strong view on the importance of manufacturing in modern economies and cofounded H-Robotics, which manufactures commercial drones. She won the 2015 Intelligence Squared Robotics debate that the BBC broadcast to 80m people. Harpers Bazaar filmed her for their Women at Work series in December 2015. She serves on several advisory boards and working groups: Real Vision TV, the British Ministry of Defence Working Group on Global Strategic Trends, the Greater London Authority Infrastructure Advisory Board, MIT Media Lab Food Project and Indiana University School of Public Policy and Environmental Affairs as well as the Indiana University Manufacturing Initiative. She is a Governor and member of the Council of Management of the Ditchley Foundation which encourages global dialogue on policy issues. She also briefs Britain's top military leaders in the British Army Generalship Program. She has attended the Federal Reserve's Jackson Hole Meeting for more than ten years. She served as financial market advisor to the President in the White House and on the National Economic Council from 2001-2002. She was a member of the President's Working Group on Financial Markets and the Working Group on Corporate Governance through Enron and 911. Having a military history background, she was asked to work on terrorism risks to the economy after 911. She was the Deputy Head of Global Strategy at UBS and the Chief Currency Strategist for Bankers Trust. She headed the Global Investment Management business for Bankers Trust in Asia. In 2000 The World Economic Forum in Davos named Dr. Malmgren a Global Leader for Tomorrow. She is a popular speaker at conferences across a wide range of industries on behalf of The Financial Times, The Economist, Institutional Investor, The Millken Conference and diverse global firms. She has written for Wired Magazine, The International Economy, Economia, and Monocle. She writes a column for Rev Grand Prix Journal about F1 technologies and the real economy. Newsweek has asked to publish excerpts of her book. She has a B.A. from Mount Vernon College and a M.Sc. and Ph.D. from the London School of Economics. She completed the Harvard Program on National Security, briefed The Office of Net Assessment at the Pentagon and participated in the Pentagon's Joint Civilian Orientation Conference (JCOC). In July 2016, she will be the keynote speaker for the London School of Economics graduation ceremony. She is a member of the Council on Foreign Relations, Chatham House, The Institute for International Strategic Security and the Royal Geographical Society.
MACRO VOICES is presented for informational and entertainment purposes only. The information presented in MACRO VOICES should NOT be construed as investment advice. Always consult a licensed investment professional before making important investment decisions. The opinions expressed on MACRO VOICES are those of the participants. MACRO VOICES, its producers, and hosts Erik Townsend and Patrick Ceresna shall NOT be liable for losses resulting from investment decisions based on information or viewpoints presented on MACRO VOICES.
Copyright © 2016 Macro Voices. All rights reserved.
Site by Fourth Turning Capital Management


text:
package apply

import (
	"fmt"
	"net/http"

	"github.com/spf13/cobra"
	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/errors"
	"k8s.io/apimachinery/pkg/api/meta"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"k8s.io/apimachinery/pkg/types"
	"k8s.io/apimachinery/pkg/util/sets"
	"k8s.io/cli-runtime/pkg/genericclioptions"
	"k8s.io/cli-runtime/pkg/printers"
	"k8s.io/cli-runtime/pkg/resource"
	"k8s.io/client-go/discovery"
	"k8s.io/client-go/dynamic"
	"k8s.io/klog"
	"k8s.io/kubectl/pkg/cmd/delete"
	cmdutil "k8s.io/kubectl/pkg/cmd/util"
	"k8s.io/kubectl/pkg/scheme"
	"k8s.io/kubectl/pkg/util"
	"k8s.io/kubectl/pkg/util/i18n"
	"k8s.io/kubectl/pkg/util/openapi"
	"k8s.io/kubectl/pkg/util/templates"
	"k8s.io/kubectl/pkg/validation"
)

// ApplyOptions defines flags and other configuration parameters for the `apply` command
type ApplyOptions struct {
	RecordFlags *genericclioptions.RecordFlags
	Recorder    genericclioptions.Recorder

	PrintFlags *genericclioptions.PrintFlags
	ToPrinter  func(string) (printers.ResourcePrinter, error)

	DeleteFlags   *delete.DeleteFlags
	DeleteOptions *delete.DeleteOptions

	ServerSideApply bool
	ForceConflicts  bool
	FieldManager    string
	Selector        string
	DryRun          bool
	ServerDryRun    bool
	Prune           bool
	PruneResources  []pruneResource
	cmdBaseName     string
	All             bool
	Overwrite       bool
	OpenAPIPatch    bool
	PruneWhitelist  []string

	Validator       validation.Schema
	Builder         *resource.Builder
	Mapper          meta.RESTMapper
	DynamicClient   dynamic.Interface
	DiscoveryClient discovery.DiscoveryInterface
	OpenAPISchema   openapi.Resources

	Namespace        string
	EnforceNamespace bool

	genericclioptions.IOStreams

	// Objects (and some denormalized data) which are to be
	// applied. The standard way to fill in this structure
	// is by calling "GetObjects()", which will use the
	// resource builder if "objectsCached" is false. The other
	// way to set this field is to use "SetObjects()".
	// Subsequent calls to "GetObjects()" after setting would
	// not call the resource builder; only return the set objects.
	objects       []*resource.Info
	objectsCached bool

	// Stores visited objects/namespaces for later use
	// calculating the set of objects to prune.
	VisitedUids       sets.String
	VisitedNamespaces sets.String

	// Function run after the objects are generated and
	// stored in the "objects" field, but before the
	// apply is run on these objects.
	PreProcessorFn func() error
	// Function run after all objects have been applied.
	// The standard PostProcessorFn is "PrintAndPrunePostProcessor()".
	PostProcessorFn func() error
}

var (
	applyLong = templates.LongDesc(i18n.T(`
		Apply a configuration to a resource by filename or stdin.
		The resource name must be specified. This resource will be created if it doesn't exist yet.
		To use 'apply', always create the resource initially with either 'apply' or 'create --save-config'.

		JSON and YAML formats are accepted.

		Alpha Disclaimer: the --prune functionality is not yet complete. Do not use unless you are aware of what the current state is. See https://issues.k8s.io/34274.`))

	applyExample = templates.Examples(i18n.T(`
		# Apply the configuration in pod.json to a pod.
		kubectl apply -f ./pod.json

		# Apply resources from a directory containing kustomization.yaml - e.g. dir/kustomization.yaml.
		kubectl apply -k dir/

		# Apply the JSON passed into stdin to a pod.
		cat pod.json | kubectl apply -f -

		# Note: --prune is still in Alpha
		# Apply the configuration in manifest.yaml that matches label app=nginx and delete all the other resources that are not in the file and match label app=nginx.
		kubectl apply --prune -f manifest.yaml -l app=nginx

		# Apply the configuration in manifest.yaml and delete all the other configmaps that are not in the file.
		kubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/ConfigMap`))

	warningNoLastAppliedConfigAnnotation = "Warning: %[1]s apply should be used on resource created by either %[1]s create --save-config or %[1]s apply\n"
)

// NewApplyOptions creates new ApplyOptions for the `apply` command
func NewApplyOptions(ioStreams genericclioptions.IOStreams) *ApplyOptions {
	return &ApplyOptions{
		RecordFlags: genericclioptions.NewRecordFlags(),
		DeleteFlags: delete.NewDeleteFlags("that contains the configuration to apply"),
		PrintFlags:  genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme),

		Overwrite:    true,
		OpenAPIPatch: true,

		Recorder: genericclioptions.NoopRecorder{},

		IOStreams: ioStreams,

		objects:       []*resource.Info{},
		objectsCached: false,

		VisitedUids:       sets.NewString(),
		VisitedNamespaces: sets.NewString(),
	}
}

// NewCmdApply creates the `apply` command
func NewCmdApply(baseName string, f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
	o := NewApplyOptions(ioStreams)

	// Store baseName for use in printing warnings / messages involving the base command name.
	// This is useful for downstream command that wrap this one.
	o.cmdBaseName = baseName

	cmd := &cobra.Command{
		Use:                   "apply (-f FILENAME | -k DIRECTORY)",
		DisableFlagsInUseLine: true,
		Short:                 i18n.T("Apply a configuration to a resource by filename or stdin"),
		Long:                  applyLong,
		Example:               applyExample,
		Run: func(cmd *cobra.Command, args []string) {
			cmdutil.CheckErr(o.Complete(f, cmd))
			cmdutil.CheckErr(validateArgs(cmd, args))
			cmdutil.CheckErr(validatePruneAll(o.Prune, o.All, o.Selector))
			cmdutil.CheckErr(o.Run())
		},
	}

	// bind flag structs
	o.DeleteFlags.AddFlags(cmd)
	o.RecordFlags.AddFlags(cmd)
	o.PrintFlags.AddFlags(cmd)

	cmd.Flags().BoolVar(&o.Overwrite, "overwrite", o.Overwrite, "Automatically resolve conflicts between the modified and live configuration by using values from the modified configuration")
	cmd.Flags().BoolVar(&o.Prune, "prune", o.Prune, "Automatically delete resource objects, including the uninitialized ones, that do not appear in the configs and are created by either apply or create --save-config. Should be used with either -l or --all.")
	cmdutil.AddValidateFlags(cmd)
	cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)")
	cmd.Flags().BoolVar(&o.All, "all", o.All, "Select all resources in the namespace of the specified resource types.")
	cmd.Flags().StringArrayVar(&o.PruneWhitelist, "prune-whitelist", o.PruneWhitelist, "Overwrite the default whitelist with <group/version/kind> for --prune")
	cmd.Flags().BoolVar(&o.OpenAPIPatch, "openapi-patch", o.OpenAPIPatch, "If true, use openapi to calculate diff when the openapi presents and the resource can be found in the openapi spec. Otherwise, fall back to use baked-in types.")
	cmd.Flags().BoolVar(&o.ServerDryRun, "server-dry-run", o.ServerDryRun, "If true, request will be sent to server with dry-run flag, which means the modifications won't be persisted. This is an alpha feature and flag.")
	cmd.Flags().Bool("dry-run", false, "If true, only print the object that would be sent, without sending it. Warning: --dry-run cannot accurately output the result of merging the local manifest and the server-side data. Use --server-dry-run to get the merged result instead.")
	cmdutil.AddServerSideApplyFlags(cmd)

	// apply subcommands
	cmd.AddCommand(NewCmdApplyViewLastApplied(f, ioStreams))
	cmd.AddCommand(NewCmdApplySetLastApplied(f, ioStreams))
	cmd.AddCommand(NewCmdApplyEditLastApplied(f, ioStreams))

	return cmd
}

// Complete verifies if ApplyOptions are valid and without conflicts.
func (o *ApplyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
	o.ServerSideApply = cmdutil.GetServerSideApplyFlag(cmd)
	o.ForceConflicts = cmdutil.GetForceConflictsFlag(cmd)
	o.FieldManager = cmdutil.GetFieldManagerFlag(cmd)
	o.DryRun = cmdutil.GetDryRunFlag(cmd)

	if o.ForceConflicts && !o.ServerSideApply {
		return fmt.Errorf("--force-conflicts only works with --server-side")
	}

	if o.DryRun && o.ServerSideApply {
		return fmt.Errorf("--dry-run doesn't work with --server-side (did you mean --server-dry-run instead?)")
	}

	if o.DryRun && o.ServerDryRun {
		return fmt.Errorf("--dry-run and --server-dry-run can't be used together")
	}

	// allow for a success message operation to be specified at print time
	o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) {
		o.PrintFlags.NamePrintFlags.Operation = operation
		if o.DryRun {
			o.PrintFlags.Complete("%s (dry run)")
		}
		if o.ServerDryRun {
			o.PrintFlags.Complete("%s (server dry run)")
		}
		return o.PrintFlags.ToPrinter()
	}

	var err error
	o.RecordFlags.Complete(cmd)
	o.Recorder, err = o.RecordFlags.ToRecorder()
	if err != nil {
		return err
	}

	o.DiscoveryClient, err = f.ToDiscoveryClient()
	if err != nil {
		return err
	}

	dynamicClient, err := f.DynamicClient()
	if err != nil {
		return err
	}
	o.DeleteOptions = o.DeleteFlags.ToOptions(dynamicClient, o.IOStreams)
	err = o.DeleteOptions.FilenameOptions.RequireFilenameOrKustomize()
	if err != nil {
		return err
	}

	o.OpenAPISchema, _ = f.OpenAPISchema()
	o.Validator, err = f.Validator(cmdutil.GetFlagBool(cmd, "validate"))
	if err != nil {
		return err
	}
	o.Builder = f.NewBuilder()
	o.Mapper, err = f.ToRESTMapper()
	if err != nil {
		return err
	}

	o.DynamicClient, err = f.DynamicClient()
	if err != nil {
		return err
	}

	o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
	if err != nil {
		return err
	}

	if o.Prune {
		o.PruneResources, err = parsePruneResources(o.Mapper, o.PruneWhitelist)
		if err != nil {
			return err
		}
	}

	o.PostProcessorFn = o.PrintAndPrunePostProcessor()

	return nil
}

func validateArgs(cmd *cobra.Command, args []string) error {
	if len(args) != 0 {
		return cmdutil.UsageErrorf(cmd, "Unexpected args: %v", args)
	}
	return nil
}

func validatePruneAll(prune, all bool, selector string) error {
	if all && len(selector) > 0 {
		return fmt.Errorf("cannot set --all and --selector at the same time")
	}
	if prune && !all && selector == "" {
		return fmt.Errorf("all resources selected for prune without explicitly passing --all. To prune all resources, pass the --all flag. If you did not mean to prune all resources, specify a label selector")
	}
	return nil
}

func isIncompatibleServerError(err error) bool {
	// 415: Unsupported media type means we're talking to a server which doesn't
	// support server-side apply.
	if _, ok := err.(*errors.StatusError); !ok {
		// Non-StatusError means the error isn't because the server is incompatible.
		return false
	}
	return err.(*errors.StatusError).Status().Code == http.StatusUnsupportedMediaType
}

// GetObjects returns a (possibly cached) version of all the objects to apply
// as a slice of pointer to resource.Info. The resource.Info contains the object
// and some other denormalized data. This function should not be called until
// AFTER the "complete" and "validate" methods have been called to ensure that
// the ApplyOptions is filled in and valid. Returns an error if the resource
// builder returns an error retrieving the objects.
func (o *ApplyOptions) GetObjects() ([]*resource.Info, error) {
	if !o.objectsCached {
		// include the uninitialized objects by default if --prune is true
		// unless explicitly set --include-uninitialized=false
		r := o.Builder.
			Unstructured().
			Schema(o.Validator).
			ContinueOnError().
			NamespaceParam(o.Namespace).DefaultNamespace().
			FilenameParam(o.EnforceNamespace, &o.DeleteOptions.FilenameOptions).
			LabelSelectorParam(o.Selector).
			Flatten().
			Do()
		if err := r.Err(); err != nil {
			return nil, err
		}
		infos, err := r.Infos()
		if err != nil {
			return nil, err
		}
		o.objects = infos
		o.objectsCached = true
	}
	return o.objects, nil
}

// SetObjects stores the set of objects (as resource.Info) to be
// subsequently applied.
func (o *ApplyOptions) SetObjects(infos []*resource.Info) {
	o.objects = infos
	o.objectsCached = true
}

// Run executes the `apply` command.
func (o *ApplyOptions) Run() error {

	dryRunVerifier := &DryRunVerifier{
		Finder:        cmdutil.NewCRDFinder(cmdutil.CRDFromDynamic(o.DynamicClient)),
		OpenAPIGetter: o.DiscoveryClient,
	}

	if o.PreProcessorFn != nil {
		klog.V(4).Infof("Running apply pre-processor function")
		if err := o.PreProcessorFn(); err != nil {
			return err
		}
	}

	// Generates the objects using the resource builder if they have not
	// already been stored by calling "SetObjects()" in the pre-processor.
	infos, err := o.GetObjects()
	if err != nil {
		return err
	}
	if len(infos) == 0 {
		return fmt.Errorf("no objects passed to apply")
	}
	for _, info := range infos {

		// If server-dry-run is requested but the type doesn't support it, fail right away.
		if o.ServerDryRun {
			if err := dryRunVerifier.HasSupport(info.Mapping.GroupVersionKind); err != nil {
				return err
			}
		}

		o.MarkNamespaceVisited(info)

		if err := o.Recorder.Record(info.Object); err != nil {
			klog.V(4).Infof("error recording current command: %v", err)
		}

		if o.ServerSideApply {
			// Send the full object to be applied on the server side.
			data, err := runtime.Encode(unstructured.UnstructuredJSONScheme, info.Object)
			if err != nil {
				return cmdutil.AddSourceToErr("serverside-apply", info.Source, err)
			}

			options := metav1.PatchOptions{
				Force:        &o.ForceConflicts,
				FieldManager: o.FieldManager,
			}
			if o.ServerDryRun {
				options.DryRun = []string{metav1.DryRunAll}
			}

			obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(
				info.Namespace,
				info.Name,
				types.ApplyPatchType,
				data,
				&options,
			)
			if err != nil {
				if isIncompatibleServerError(err) {
					err = fmt.Errorf("Server-side apply not available on the server: (%v)", err)
				}
				if errors.IsConflict(err) {
					err = fmt.Errorf(`%v

Please review the fields above--they currently have other managers. Here
are the ways you can resolve this warning:
* If you intend to manage all of these fields, please re-run the apply
  command with the `+"`--force-conflicts`"+` flag.
* If you do not intend to manage all of the fields, please edit your
  manifest to remove references to the fields that should keep their
  current managers.
* You may co-own fields by updating your manifest to match the existing
  value; in this case, you'll become the manager if the other manager(s)
  stop managing the field (remove it from their configuration).

See http://k8s.io/docs/reference/using-api/api-concepts/#conflicts`, err)
				}
				return err
			}

			info.Refresh(obj, true)

			if err := o.MarkObjectVisited(info); err != nil {
				return err
			}

			if o.shouldPrintObject() {
				continue
			}

			printer, err := o.ToPrinter("serverside-applied")
			if err != nil {
				return err
			}

			if err = printer.PrintObj(info.Object, o.Out); err != nil {
				return err
			}
			continue
		}

		// Get the modified configuration of the object. Embed the result
		// as an annotation in the modified configuration, so that it will appear
		// in the patch sent to the server.
		modified, err := util.GetModifiedConfiguration(info.Object, true, unstructured.UnstructuredJSONScheme)
		if err != nil {
			return cmdutil.AddSourceToErr(fmt.Sprintf("retrieving modified configuration from:\n%s\nfor:", info.String()), info.Source, err)
		}

		if err := info.Get(); err != nil {
			if !errors.IsNotFound(err) {
				return cmdutil.AddSourceToErr(fmt.Sprintf("retrieving current configuration of:\n%s\nfrom server for:", info.String()), info.Source, err)
			}

			// Create the resource if it doesn't exist
			// First, update the annotation used by kubectl apply
			if err := util.CreateApplyAnnotation(info.Object, unstructured.UnstructuredJSONScheme); err != nil {
				return cmdutil.AddSourceToErr("creating", info.Source, err)
			}

			if !o.DryRun {
				// Then create the resource and skip the three-way merge
				options := metav1.CreateOptions{}
				if o.ServerDryRun {
					options.DryRun = []string{metav1.DryRunAll}
				}
				obj, err := resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, true, info.Object, &options)
				if err != nil {
					return cmdutil.AddSourceToErr("creating", info.Source, err)
				}
				info.Refresh(obj, true)
			}

			if err := o.MarkObjectVisited(info); err != nil {
				return err
			}

			if o.shouldPrintObject() {
				continue
			}

			printer, err := o.ToPrinter("created")
			if err != nil {
				return err
			}
			if err = printer.PrintObj(info.Object, o.Out); err != nil {
				return err
			}
			continue
		}

		if err := o.MarkObjectVisited(info); err != nil {
			return err
		}

		if !o.DryRun {
			metadata, _ := meta.Accessor(info.Object)
			annotationMap := metadata.GetAnnotations()
			if _, ok := annotationMap[corev1.LastAppliedConfigAnnotation]; !ok {
				fmt.Fprintf(o.ErrOut, warningNoLastAppliedConfigAnnotation, o.cmdBaseName)
			}

			patcher := newPatcher(o, info)
			patchBytes, patchedObject, err := patcher.Patch(info.Object, modified, info.Source, info.Namespace, info.Name, o.ErrOut)
			if err != nil {
				return cmdutil.AddSourceToErr(fmt.Sprintf("applying patch:\n%s\nto:\n%v\nfor:", patchBytes, info), info.Source, err)
			}

			info.Refresh(patchedObject, true)

			if string(patchBytes) == "{}" && !o.shouldPrintObject() {
				printer, err := o.ToPrinter("unchanged")
				if err != nil {
					return err
				}
				if err = printer.PrintObj(info.Object, o.Out); err != nil {
					return err
				}
				continue
			}
		}

		if o.shouldPrintObject() {
			continue
		}

		printer, err := o.ToPrinter("configured")
		if err != nil {
			return err
		}
		if err = printer.PrintObj(info.Object, o.Out); err != nil {
			return err
		}
	}

	if o.PostProcessorFn != nil {
		klog.V(4).Infof("Running apply post-processor function")
		if err := o.PostProcessorFn(); err != nil {
			return err
		}
	}

	return nil
}

func (o *ApplyOptions) shouldPrintObject() bool {
	// Print object only if output format other than "name" is specified
	shouldPrint := false
	output := *o.PrintFlags.OutputFormat
	shortOutput := output == "name"
	if len(output) > 0 && !shortOutput {
		shouldPrint = true
	}
	return shouldPrint
}

func (o *ApplyOptions) printObjects() error {

	if !o.shouldPrintObject() {
		return nil
	}

	infos, err := o.GetObjects()
	if err != nil {
		return err
	}

	if len(infos) > 0 {
		printer, err := o.ToPrinter("")
		if err != nil {
			return err
		}

		objToPrint := infos[0].Object
		if len(infos) > 1 {
			objs := []runtime.Object{}
			for _, info := range infos {
				objs = append(objs, info.Object)
			}
			list := &corev1.List{
				TypeMeta: metav1.TypeMeta{
					Kind:       "List",
					APIVersion: "v1",
				},
				ListMeta: metav1.ListMeta{},
			}
			if err := meta.SetList(list, objs); err != nil {
				return err
			}

			objToPrint = list
		}
		if err := printer.PrintObj(objToPrint, o.Out); err != nil {
			return err
		}
	}

	return nil
}

// MarkNamespaceVisited keeps track of which namespaces the applied
// objects belong to. Used for pruning.
func (o *ApplyOptions) MarkNamespaceVisited(info *resource.Info) {
	if info.Namespaced() {
		o.VisitedNamespaces.Insert(info.Namespace)
	}
}

// MarkNamespaceVisited keeps track of UIDs of the applied
// objects. Used for pruning.
func (o *ApplyOptions) MarkObjectVisited(info *resource.Info) error {
	metadata, err := meta.Accessor(info.Object)
	if err != nil {
		return err
	}
	o.VisitedUids.Insert(string(metadata.GetUID()))
	return nil
}

// PrintAndPrune returns a function which meets the PostProcessorFn
// function signature. This returned function prints all the
// objects as a list (if configured for that), and prunes the
// objects not applied. The returned function is the standard
// apply post processor.
func (o *ApplyOptions) PrintAndPrunePostProcessor() func() error {

	return func() error {
		if err := o.printObjects(); err != nil {
			return err
		}

		if o.Prune {
			p := newPruner(o)
			return p.pruneAll(o)
		}

		return nil
	}
}

// DryRunVerifier verifies if a given group-version-kind supports DryRun
// against the current server. Sending dryRun requests to apiserver that
// don't support it will result in objects being unwillingly persisted.
//
// It reads the OpenAPI to see if the given GVK supports dryRun. If the
// GVK can not be found, we assume that CRDs will have the same level of
// support as "namespaces", and non-CRDs will not be supported. We
// delay the check for CRDs as much as possible though, since it
// requires an extra round-trip to the server.
type DryRunVerifier struct {
	Finder        cmdutil.CRDFinder
	OpenAPIGetter discovery.OpenAPISchemaInterface
}

// HasSupport verifies if the given gvk supports DryRun. An error is
// returned if it doesn't.
func (v *DryRunVerifier) HasSupport(gvk schema.GroupVersionKind) error {
	oapi, err := v.OpenAPIGetter.OpenAPISchema()
	if err != nil {
		return fmt.Errorf("failed to download openapi: %v", err)
	}
	supports, err := openapi.SupportsDryRun(oapi, gvk)
	if err != nil {
		// We assume that we couldn't find the type, then check for namespace:
		supports, _ = openapi.SupportsDryRun(oapi, schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Namespace"})
		// If namespace supports dryRun, then we will support dryRun for CRDs only.
		if supports {
			supports, err = v.Finder.HasCRD(gvk.GroupKind())
			if err != nil {
				return fmt.Errorf("failed to check CRD: %v", err)
			}
		}
	}
	if !supports {
		return fmt.Errorf("%v doesn't support dry-run", gvk)
	}
	return nil
}

redpajama_set_name: RedPajamaGithub


However, the generic RV Plumbing diagram below will help clear up a few issues. If you find you need an actual RV Water schematic for your particular model, best to contact the manufacturer directly. Fresh Water Fresh water for your RV can be obtained 2 different ways. If you are hooked up to city water, it goes directly into the various lines within your RV and feeds water directly. We strongly encourage at least a basic water filter. It will keep small debris out of your water pump – it's designed to pump water – not debris! If you are NOT hooked up to city water, the fresh water tank must be filled to store fresh water for you.
Open Monday – Saturday 8 am to 7 pm or email waterhook3 yahoo. Call today to schedule your In Home consultation. Our water softeners or filters will make your water feel, taste, and look clear and clean the way it should be. We are a full service water treatment independent dealer for 29 years and can correct almost any contaminant issue your experiencing.
The costs associated with setting up a mobile home on an undeveloped piece of land can vary widely. If there is not already a relatively level spot to place the home then there will be grading work. The same may be said for an entry road if one.
Comments 33 Mobile homes are built on a chassis designed to be moved. The cost to relocate a unit is determined by the size, the distance to be traveled, and whether it is transport only or a full-service move which includes disconnect and reconnect of utilities, porches or other attachments. These rates are based on per-mile charges. Shorter distances will cost less, longer moves will cost more. Taller homes with cathedral or gable roofs typically cost more to move because possible travel routes may be limited, often resulting in more miles.
Call the local utility company to make sure electricity is turned off. Mobile home transport is best left to licensed movers as many details from correct-sized tow vehicle, lead cars permits, route selection based on side of load, and hookups must all be correctly completed. Mobile homes building standards are specific to the region in which they are built.
Because winds, snow loads and rains vary greatly across the country, the homes should never be moved to an area with completely different weather patterns. The data plate[ 3 ] on the mobile home will identify the unit's proper zone. A transit-only move should include all necessary permits, liability insurance, lead and chase vehicles, hookup and transport to the new site, followed by unhooking at the end site.
This vacant house is near grocery store, schools and Hwy This property needs renovation and is being sold AS IS. Click on picture at left for more pictures of this listing.
Find Campgrounds Near you with the premier campground finder and RV service directory in America. Search campgrounds nearby or as far as Europe.
Well water often benefits from basic filtration, and a simple sediment filter is an uncomplicated way to make your household water supply a bit more appealing to drink and bathe in. Contaminants Potential contaminants in well water are varied, ranging from bacteria to mineral and chemical compounds that can make water unhealthy and taste bad.
Well water also often is contaminated with particulate matter such as sand and sediment that can make the water gritty. Removing chemical and biological contaminants requires a relatively expensive filter, but you can get rid of particulate matter with an inexpensive paper filter you attach to the main water supply line from your well. Where to Install Installing the filter involves placing it in the main water supply line where it enters the house, before it enters your water softener or storage tank.
Installation is not complicated, but it requires you be able to cut the copper supply line and properly install fittings and new lines. If you're not comfortable with this type of job, a plumber or water-treatment technician can accomplish it quickly. Filter Bypass A convenient addition to the the filter installation is a bypass line that allows water to pass around the filter into the rest of the system; with a bypass installed, you can change the filter without shutting off the water supply to the rest of the house.
Shut-off valves on either side of the filter allow water to pass through the filter when they're open, and isolate the filter when they're closed. A valve on the bypass line keeps water from running through the bypass while the filter is being used. Point-of-Use Filters A sediment filter on the main water supply acts as a pre-filtration system for well water. In order to remove bacteria, chemicals and microscopic contaminants, you need different types of filtration in other areas of your home, such as activated carbon or reverse osmosis filters at sinks or other sources of drinking water.
Whole-house sediment filters, however, reduce the workload on point-of-use filters, and provide inexpensive basic filtration for your home's entire water supply.
Water Water – but not everywhere At home we don't need to think much about utilities like water – it's all there quite literally 'on tap'. The simplest answer of course is to use a container to collect water from a nearby tap as caravanners do. In practice this means having another container as well to take the waste water but these are not very convenient in a motorcaravan where you are frequently on the move – even if just for days out.
In practice then almost all modern motorhomes of any size will have both fresh tanks as permanent fixtures and many will have waste tanks too. The tanks are kept dark either in a cupboard or by being made from black polythene to help prevent algae growth. The filler is usually outside with a locking cap – and a clear symbol for water, to discourage anyone from filling up the water tank with fuel – but this is not unknown – nb!!
Sep 17, · The only reason you have water flowing back out of the black tank flush is the hose for the tank flush goes up behind the shower to the vacuum breaker and back down to the black tank.
Alyse Nelson On June 27, at 6: In most places, tiny houses run afoul of every one of these sets of rules, and often in several ways. The net effect is to make tiny-house dwellers a band of outlaws. Removing the legal strictures could quickly provide affordable, sustainable housing choices to thousands of people across Cascadia and beyond, at no cost to public treasuries, in neighborhoods already provided with urban infrastructure and well served by transit, schools, community centers, libraries, and parks.
And some cities, such as Portland, are already working towards policy solutions that will bring tiny houses in from the cold. Tiny houses on foundations: Size matters In Oregon and Washington local laws specify that permanent homes must be built to one of two standards: Tiny houses have a terribly hard time fitting these regulations , not so much because of the safety and fire protection provisions, as because of things like minimum size and height rules.
The IRC, for example, requires that habitable rooms have at least 70 square feet of floor space, and not be less than 7 feet wide and tall. This rules out many tiny home designs. In , the International Code Council reduced this requirement from square feet , making building tiny to code much more feasible. Sheepherder Wagon by Irving Rusinow license Tiny homes on wheels: But these wheels present another challenge to legalizing tiny houses, placing them in a regulatory gray zone between standard houses and vehicles.
This unit is now installed at my house to power my Motor Home RV. The installation went off without a hitch. Again, your service was outstanding- Thanks" M. We ordered on Monday and received them on Tuesday just like you mentioned we would. That is really "Bang for your Buck", good service, good product and speedy delivery.
Mobile Home Park for Sale – Page 1 of 5 Mobile Home Park Information Also known as trailer parks, mobile home parks serve as a solid investment despite the negative connotations and stereotypes that cloud their image.
Master Plumber Call us for honest, straightforward pricing Mobile homes offer a convenient, cost-effective housing option for individuals and families who value a simpler way of life or want the flexibility and freedom to move around as they desire. If you have chosen a mobile home, getting the right plumbing services is essential for the cleanliness, convenience, and comfort of your home. No job is too big or too small for us!
Budgeting is essential for planning your plumbing services. Give us a call to schedule an in-home estimate so we can evaluate your needs, offer honest recommendations for your services, and give you straight forward pricing so you can plan with confidence. Our family owned and operated team can give you commercial, residential, or new construction services. Professional hook up for your plumbing Effective installation and hook-ups are essential for ensuring your mobile home's plumbing is clean, reliable, and convenient.
This requires an understanding of the available sewer system and hook-ups. Look to our licensed, bonded, insured team for extensive knowledge gained over our 47 years of experience to ensure your plumbing is healthy, safe, and dependable.
Following is a closer look at the main types of pipes. Rigid Copper Pipe Rigid copper pipe is widely preferred for water supply piping. Hard supply pipe is sold in three thicknesses: M thin wall , L medium wall , and K thick wall. Most above-ground plumbing is Type M. Soft Copper Pipe Soft copper pipe is more expensive than hard copper pipe, but it is flexible enough that it can be routed without the need for as many fittings as rigid copper.
It completes the installation from buried water line to above ground water connection, or supply pipe with shut-off valve, needed for each mobile or manufactured home. .
You have two parallel water supplies. You can fill the water tank and use the pump to pressurize the system or you can hook up to "City" water and run off the supplied pressure. There is a check valve in the water pump that will keep the "City" water from running through the pump and backfilling overflowing the tank. There should be two places for water supply a tank fill, that you can pour water into no direct connection and your "city" water hookup that a garden hose hooks up to.
You should have a hose from the fresh tank to the pump, and then a hose from the pump to the trailer system. Unless something was done custom, there is no connection to pump into the tank. Search on winterizing and tank sanitizing for how to's on both. You need to sanitize the system before using it for drinking water. This is from the Sunline Spring Startup Guide: If your water has a bad taste or strange odor, take these steps to kill bacteria that may be present: Fill fresh water tank half way with clean, fresh water.


Beats co-founder Jimmy Iovine has never been a fan of free streaming music. Now, as the longtime record exec helps Apple prepare for the relaunch of Beats Music next year, he hopes the industry will do away with the freemium model that so many competing services have come to rely on.
According to a New York Post report, sources say that even though Iovine isn't Apple's official spokesman on the topic, he's pushing to slash the price of a Beats Music subscription from $10 a month, to $5 a month. Presumably, the thinking goes, if Apple takes the lead, the rest of the streaming industry will follow suit.
Apple purchased Beats Music in January along with the company's highly lucrative headphone business. But while the latter acquisition made sense, many were baffled by what Apple, which already launched iTunes Radio, wanted to do with Beats Music.
Wasn't one Pandora killer enough?
Turns out, Apple, like many music streaming startups before it, wants to be all things to every listener, and along the lines of my earlier prediction, may be planning to make Beats Music a component of its overall digital music offering next year, according to the Wall Street Journal.
This means Apple will take on Pandora, the leading streaming jukebox, and Spotify, the not-quite master of scale with 10 million paying subscribers. Will it be easy? No, but Iovine bets that if customers want to ditch the free ad-supported services that dominate the industry, they'll be willing to shell out $5 a month or more for a family plan--and more will sign up.
"Research is showing the $10.99 all-you-can-eat price point actually exceeds the amount of money that a large number of music buyers spent on downloads or physical products before," Matt Pincus, founder and chief executive of Songs Publishing, a music publishing firm, tells Inc. So "there may be a limit to how many customers [these companies] can capture."
Apple may also see potential in what Pincus describes as "subsets of repertoire," or what musicheads like me call curation. "It's not clear that everyone wants every record in the world," he says, pointing to services like Spotify, so some customers may be willing to pay a set fee to stream the Billboard Hot 100 or to have access to songs in a certain genre.
"These companies are serving hours and hours of music and it costs a lot to convert subscribers from a free to a paid model; in fact, it's not even clear that it works," he continues, so "to the degree that Apple can eliminate that, the better off everyone's going to be."
For one thing, startups won't be so hard-pressed to add hordes of subscribers in order to achieve scale like Spotify, and artists may finally get paid a decent fee. Music publishers, meanwhile, might have an easier time handling royalties since channels for payment would be established up front.
Some experts, like one quoted in the New York Post, disagree with Iovine's stance and argue that it's better to have two pathways to revenue rather than one $5 subscription model. But if there's one company capable of influencing the music industry, it's Apple. And the man with the golden ear knows most of the big players in it. "If anybody's going to be able to affect change with labels and publishers, I think Apple has got the best shot," says Pincus.
Freemium's days may be numbered.


text:
'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
	Schema = mongoose.Schema;

/**
 * Enquirydetail Schema
 */
var EnquirydetailSchema = new Schema({
	sno: {
		type: Number,
		trim: true
	},
	details: {
		type: String,
		default: '',
		required: '',
		trim: true
	},
	notes: {
		type: String,
		default: '',
		required: '',
		trim: true
	},
	created: {
		type: Date,
		default: Date.now
	},
	user: {
		type: Schema.ObjectId,
		ref: 'User'
	}
});

mongoose.model('Enquirydetail', EnquirydetailSchema);


By kfx450r, June 24, 2008 in General Talk - Anything Goes!
To give abrief story..december i dislocated my thumb inward..tore the ligaments..orthopedic put it in a splint for like a month or 2..its been like 2-3 months since i was told i didnt need it anymore..and it still hurts sometimes..Now..isnt it supposed to be healed? Any oneknow any good exercises to make it heal faster? and also..does anyone know any protective yet flexible thumb/hand braces I can use to ride? Cuz thres no way Im giving up riding 2 days after i got my atv..
Side note..todayt and yesterday it started hurting alot more.but it cant be the riding because i did alot harder riding on my friend's bikes a few weeks ago..every weekend and it never hurt.
Is there a change in the weather right now or is it going to rain in the next day or 2? When you have an injury like that you will never be the same. You will feel different levels of pain at different times. Did you go to any kind of rehab for it?
If it is unbarable go back to the doc. If it feels just real achy that is normal when you tear a ligament. When it gets soar just use some ice and advil. You can also try apply a small heat pak about 20-30 min before you ride. Also some ice after you are done riding.
Wow..it just started storming here..I hope thats why my hand was hurting.and that it will go away now..
When rain comes in my old injuries ache. I wouldn't be surprised if the pain goes away with the rain.
How long ago did you Get your First Subscription to Penthouse???? And how long afterward did your Thumb start Hurting????
Coulda figured this comment would come of the situation. lol I agree with bot. My husband has some old knee injuries and his hurts before it rains and during. Its most likely going to be like that forever.
thats so weird fox300..I dont understand why these injuries hurt when rain comes..wtf? its been storming here all day today and yesterday..my hand started hurting BAD like a day or 2 before it started raining..for like no reason, still hurting a tad bit..
It has to do with atmospheric pressure. Think of it like a barometer. When you have scar tissue on a ligament or tendon it will swell up when there is an increase in pressure. In return it puts pressure on nerve endings. It may cause some discomfort in real hot weather too. Welcome to the club. Have fun!
I just Knew there was too much of a Resemblance!!!!!
I started going to college for sports medicine. Needless to say I didn't finish, that's why I drive a truck.
Gah..I live in louisiana..it rains and is constantly over 90 degrees all the time..ITS RAINIGN NOW..3rd day in a row..give me a break!
Try wearing the brace at night. It may (will) be uncomfortable at night but it helps alot. Got the same problem. Also just work on stretching it as much as you can, just stretch until you feel pressure not PAIN. I do this a lot at work and it helps me a bunch. Every time I land hard it brings it back up but we both know were not parking our quads. But really work on the stretching, it will help! Those little therapy balls you sqeeze help also. If you crack your knuckles stop now, it doesnt cause arthritis like people think but it will weaken the tendons and muscles in your hand fast.
You are right and wrong, The problem with wearing a brace to bed is that when you have no movement for any given time your ligaments and tendons will shorten making the area even tighter. Cracking your knuckles won't do squat to your muscles. The popping noise is gasses releasing from the joint capsole.
THAT IS VERY TRUE. Think of it like this. If you keep you thumb in the neutral or relaxed position, your tendons and ligaments shrink in length. When this happens the mass of it has to go somewhere. So it fattens up and restricts the blood flow. Lack of blood flow is another major cause of pain. So when you stretch frequently you are keeping the tendon or ligament from bunching up in the middle. Does that make any sense?
When you are stretching it, be sure not to stretch to far. Go to the point where you fell pressure, not pain. Hold it for about 20 seconds and release. Do this 3 times. About every 30 minutes or so.
The thumb throttle on my kids lt50 is abit wobbly and loose when applying the throttle, does anyone know If it can be tighten or do I need a new throttle case? If I need a new one is it easy to fit?
Well, looks like my ghost is back after the post below from last fall. Haven't had time to work on her much till this spring, so here's an update. Yes, I've got this old 2000 300KQ running per se'; starting reliably, sounds good and run great for a few seconds, but she kept overflowing the vent hose and flooding pretty fast... So after an in-line filter and multiple cleanings, I decided to throw a Shindy rebuild kit in the carb to try and cure the float valve that seemed to be the issue... Followed everyone's instruction, matching settings, and replaced everything except for the primary air jet behind that cap. Hear that isn't typically an issue, especially for a flooding carb.
So I got it running again, no flooding, starts right up. But has little response mid range, before spitting an sputtering, and can't handle WOT at all, barely stays running. At first, it would not start at all without half choke or more, and ran faster with the choke on, like the choke was opening the throttle... Backing out the pilot screw helped with that somewhat, and now it just needs a tiny bit of choke to start, about like my other 300KQ. Idles fine, sounds great, up until you ask for power.
Now I'm wondering if the thing is either starving for fuel, or running too rich. Know I should be looking at the metering rod and needle jet, and have adjusted up and down 1 notch from starting point in the center. Down seemed to be a good bit worse, so that makes me think it's already rich enough. Up seemed to help and it's on the second from the top right now.
I've taken to troubleshooting with the air cleaner tube out, so I could flip the carb up and back in and make adjustments. Doing that I can drag down the inbound air a bit and get it to rev up some better, but wouldn't that mean it's too lean and needs more fuel, right?
When I added the in line fuel filter, I had to stub on a hose from the petcock to the main fuel line for it, and I used to see the fuel pulse in it. After fixing the flooding with a rebuildin kit, it's not pulsing, but seems to gravity fill fine when in prime. So may need to check that and make sure I'm getting good fuel delivery/pressure from the vacuum line working that pump under the fender.
Ugh, this thing is killing me slowly. Tomorrow, I'm gonna check battery voltage, rectifier voltage, and fuel pressure, to make sure those are all good and I don't have problems with that. Seen all of those giving folks fits beyond just idling. But I have let it idle for an hour, and it'll keep on running just fine idling along.
As a side note, a couple of times after I got it running in the fall, it ran AMAZINGLY well, crazy power, and perfect response messing around in the yard, then the next day it'd ran like crap. Start it and mess with it, clean the carb, and it'd be running great again, only to start flooding again. So you'd think it was licked only with another cleaning, but then it got hard to start, and run like crap again. Then it started the running great for a few seconds, then filling the vent and pushing fuel out up that tube under over the tank by the shift levers just sitting at idle. So I figured it must have been that float valve giving out, and after taking the carb off, I could easily get gas passed it with just gravity, and even more if you blow on the hose, even with it held closed with full up on the float, hence why the rebuild kit.
Just wondering what else I should be looking at, if anyone has any ideas, I'd sure like to hear them. Will let you guys know what I find next.
We got our first snow fall so my daughter & I took the quads out for some fun. Its the first time its snowed since owning atvs.


text:
Klek kan syfta på följande platser:

Bosnien och Hercegovina

 Klek (berg i Bosnien och Hercegovina, Federationen Bosnien och Hercegovina, lat 44,42, long 18,19),

Kroatien

 Klek (berg i Kroatien, Karlovacs län),

Robotskapade Bosnien och Hercegovinaförgreningar
Robotskapade Kroatienförgreningar

redpajama_set_name: RedPajamaWikipedia


Kendrick Lamar has had a major year in 2017, and now he's already gearing up to welcome 2018 by booking a monumental gig. The Compton rapper is slated to be the halftime performer at the 2018 College Football Playoff National Championship.
According to ESPN, K. Dot will hit the stage in Atlanta on Jan. 8 for the halftime performance of the championship game to perform a medley of his hit songs for the packed stadium. Ed Erhardt, who is ESPN's president of global sales and marketing, comments on recruiting the DAMN. MC for the major gig next year.
This is a pretty significant change compared to past performers for the previous halftime shows that the college football league have booked. While it tends to lean towards the pop side of sound, having hip-hop at the halftime show this year will definitely shake things up for the college sports world.
You can tune in to watch Kendrick Lamar perform at the halftime show for the College Football Playoff National Championship on Jan. 8 at 8 P.M. EST.


text:
Gov't to pump $40 million into tourism -Akufo-Addo
By: Peacefmonline.com
President Nana Akufo-Addo speaking at the State of the Nation's Address
PRESIDENT Nana Akufo-Addo has revealed that the World Bank has approved a $40 million grant to improve Ghana's tourism and creative arts sector.
The President made this disclosure in his State of the Nation address on the floor of Parliament on Thursday, February 21, 2019.
Delivering his third SoNA since assuming office, before members of the Legislative House, the President noted that his administration is concerned with the progress of tourism in the country and has put pragmatic steps in place to support the Tourism Ministry and its agencies.
The $40 million grant, according to him, will help to make Ghana an attractive tourist site to tourists across the globe.
He also stated that the Tourism Ministry under the auspices of his administration has rolled out a campaign called "See Ghana, Eat Ghana, Wear Ghana and Feel Ghana" to promote made-in-Ghana products.
"Under the See Ghana, Eat Ghana, Wear Ghana and Feel Ghana campaign, the Ghana Tourism Authority recorded a 20 percent growth since its launch to cover to over 600,000 visitations to various tourist sites.
"The World Bank has approved a 40-million dollar grant to support the Tourism Ministry and its agencies to help upgrade tourist facilities".
He also alluded to his proclamation of this year as the "Year of Return" for all Africans in the diaspora.
The "Year of Return" is to commemorate the "400th anniversary of the arrival of the first 20 West African slaves in the Commonwealth of Virginia in what was to become the United States of America.
We intend to use the symbolism of this 'Year of Return' to bring together Africans, persons of African descent and all well-wishers…of freedom to strengthen the commitment to ensuring the blacks in our history, ie the trans-Atlantic slave trade and slavery, never re-occur," President Akufo-Addo said.

redpajama_set_name: RedPajamaCommonCrawl


text:
Bills Mafia — #BillsMafia
A movement created by the fans and embraced by the players. Join the #FAMbase.
What is #BillsMafia?
Real Season Starts for Buffalo Bills Who Earned It
Posted on January 6, 2021 by Anthony Bialy — No Comments ↓
Dec 19, 2020; Denver, Colorado, USA; Buffalo Bills defensive end Jerry Hughes (55) celebrates a touchdown against the Denver Broncos during the third quarter at Empower Field at Mile High. Mandatory Credit: Troy Babbitt-USA TODAY Sports.
The finale featured diminished significance as usual. The Buffalo Bills never change. Well, maybe they've improved a little, what with winning at a rate good enough to keep playing. The novel reason for the relaxed vibe prompted adjustment for the best reason. So, this is what giddiness feels like. It turns out this tournament deal happens after every regular schedule. The host is awarded by record and not chance in case you thought the dice were being cruel last year.
Confident starters paired with eager backups combined for eight touchdowns if your team has become particularly special. There was no need to rationalize how important a win was when they cruised to it despite wearing their 2018 throwbacks for about half a quarter. As for the gear of the franchise's new single-season passing leader, let me know if anyone wants to trade a Josh Allen jersey for a navy Drew Bledsoe one. You'll adore the throwback charm.
Photo from amazon.com.
Thanks to the Bills finally changing fortune, we could focus on the burdens of success instead of dwelling on trauma. I can remember more unpleasant debates during the finale than how long starters should've gone before finishing. Fans got to argue if momentum can continue for a week by playing for a half or if football's too dangerous to risk injury. Which side won? Buffalo did.
The first home playoff game in seven million years offers a chance for Grandpa to reminisce about tying up the phone line to share takes on last Bills playoff home game. Everyone in the AOL chatroom agrees they're awesome. It's nice to join in unity about a team instead of telling each other who sucks. Lame Colts fans invading with their bots and slurs just strengthened our resolve. The keyword is optimism.
Fine: I hate the Colts. I wonder if Frank Reich has any ideas for locker room speech topics. He better hurry in his search for memories about inspirational games he played in Orchard Park. The league kindly scheduled our favorite team first so we'd spend the least amount of time fretting. Nobody wants to wait all day for Sunday night, in part because you'd be in danger of hearing Carrie Underwood.
Photo from countrynow.com.
There won't be a chance to test if it's truly hard to beat a team three times in one season. If an enemy's pain makes you enjoy success even more, this is a good time to note the Dolphins have only made the playoffs four times during Buffalo's exile and return. The lite franchise's woe is only slightly less dramatic than the Bills by the numbers and exponentially less so as a human interest tale. Their fans don't hurt because they left early.
No second-seed bye means more football. You like football, don't you? A week off would be dull, we try to convince ourselves. New Era is not selling caps to commemorate being the conference's best team playing during the postseason's opening round. But the Bills may as well use the lack of a vacation as an excuse to not grow sluggish during half a month between games. I still doubt Kansas City will request to play. May they drink too many cocktails from hollowed-out coconuts while idling this weekend to stay sharp.
Football's most fun when you're not convincing yourself it is. Mafia members no longer watch the regular schedule's coda just to confirm loyalty. Convincing ourselves it's fun and noble to watch no matter what's at stake is so 2009. Starting a new tradition is advisable if your family history is dysfunctional enough.
Pleased fans could've turned off the playoff tuneup for a different reason with the future finally written. But who'd bail with more touchdowns surely on the way? The end of the normal season was thrilling for more than seeing if Matt Barkley could throw for greater distance than that starter of theirs. He ended up with 60 fewer yards if you made a prop bet with the expectation of more second-string thrills.
After hitting '21, Buffalo busted stereotypes about who hosts wild card teams along with which number is unlucky. There's propitious fortune in having 13 colonies, doughnuts in a baker's dozen, and wins. Add 107 yards for number 13 Gabriel Davis, who it's easy to forget remains a rookie.
Photo from buffalobills.com.
Finishing games means games are unfinished. Advancing has become a habit. Now, it's time to expect more than a cameo from a budding star. It's not fine just to make the knockout stage. Unlike the actor who's unconvincing in the role of pretending to be happy merely to get an Oscar nomination, the thought of heading home empty-handed should infuriate this roster. The good news is they don't have to rely on how others vote to win. Their efforts can stop the NFL's Ben Affleck.
A Bills fan born in 2017 who's accustomed to them making the cut more often than not needs to learn gratitude elsewhere. Older brats appreciate how special extended success is thanks to excruciating life lessons from their beloved team. A rather lengthy era of nothingness has been replaced with a regularly-scheduled last game that counts for something but not everything. Now, the actual season begins. There's life after Miami.
Editor's babble: What a great time to be a Bills fan. Regardless of what happens this season, the future is very bright. Let's hope it rubs off on the Sabres. Thanks, as always, to Anthony Bialy for his thought provoking contributions to the blog. You can find Anthony on Twitter @AnthonyBialy.
This entry was posted in Commentary and tagged AFC East, AOL, Bills Mafia, Buffalo Bills, Gabriel Davis, Indianapolis Colts, Joe Strummer, Matt Barkley, Miami Dophins, New Era, Oscars, Playoffs, postseason by Anthony Bialy. Bookmark the permalink.
About Anthony Bialy
Anthony Bialy recently moved back to Buffalo from New York City and acts like he never left. He thinks "Buffalo 66" is biographical and considers it a crime against mankind that Steve Tasker is not in the Hall of Fame. He likes getting Tim Hortons on the way to get Labatt Blue. Follow him on Twitter at @AnthonyBialy.
View all posts by Anthony Bialy →
← Previous Previous post: Bills sweep AFCE division, crush Dolphins 56-26 in season-ending slaughter
Copyright © 2021 Bills Mafia — #BillsMafia. All Rights Reserved.


Looking for a developer to design a SharePoint home page based on the first image in the PowerPoint that's attached. Platform is SharePoint online.
Looking for someone with good SharePoint knowledge and highly skilled in web development.
Would also like a web part designed that will allow users to view photos in a slideshow format. There are multiple folders from different company events that's are located in separate folders.


All we do is usually affiliated with our tenet " Buyer to start with, Belief to start with, devoting about the food packaging and environmental defense for Titanium Sheet Prices , titanium sheet prices , titanium sheet price , we will be your best choice.
Our company sticks to the principle of "Quality is the life of the company, and reputation is the soul of it" for Titanium Sheet Prices , titanium sheet prices , titanium sheet price , We're introduced as a one of the growing manufacture supplier and export of our merchandise. Now we have a team of dedicated trained experienced who take care the quality and timely supply. If you are looking for Good Quality at a good price and timely delivery. Do contact us.


text:
Latest Warnings / The Coming Storm — 40 Comments
State Govts. Warned of Malware-Laden CD Sent Via Snail Mail from China
Here's a timely reminder that email isn't the only vector for phishing attacks: Several U.S. state and local government agencies have reported receiving strange letters via snail mail that include malware-laden compact discs (CDs) apparently sent from China, KrebsOnSecurity has learned.
This particular ruse, while crude and simplistic, preys on the curiosity of recipients who may be enticed into popping the CD into a computer. According to a non-public alert shared with state and local government agencies by the Multi-State Information Sharing and Analysis Center (MS-ISAC), the scam arrives in a Chinese postmarked envelope and includes a "confusingly worded typed letter with occasional Chinese characters."
Several U.S. state and local government agencies have reported receiving this letter, which includes a malware-laden CD. Images copyright Sarah Barsness.
The MS-ISAC said preliminary analysis of the CDs indicate they contain Mandarin language Microsoft Word (.doc) files, some of which include malicious Visual Basic scripts. So far, State Archives, State Historical Societies, and a State Department of Cultural Affairs have all received letters addressed specifically to them, the MS-ISAC says. It's not clear if anyone at these agencies was tricked into actually inserting the CD into a government computer.
I'm sure many readers could think of clever ways that this apparent mail-based phishing campaign could be made more effective or believable, such as including tiny USB drives instead of CDs, or at least a more personalized letter that doesn't look like it was crafted by someone without a mastery of the English language.
Nevertheless, attacks like this are a reminder that cybercrime can take many forms. The first of Krebs's 3 Basic Rules for Online Safety — "If you didn't go looking for it don't install it" — applies just as well here: If you didn't go looking for it, don't insert it or open it.
LifeLock Bug Exposed Millions of Customer Email Addresses
Identity theft protection firm LifeLock — a company that's built a name for itself based on the promise of helping consumers protect their identities online — may have actually exposed customers to additional attacks from ID thieves and phishers. The company just fixed a vulnerability on its site that allowed anyone with a Web browser to index email addresses associated with millions of customer accounts, or to unsubscribe users from all communications from the company.
The upshot of this weakness is that cyber criminals could harvest the data and use it in targeted phishing campaigns that spoof LifeLock's brand. Of course, phishers could spam the entire world looking for LifeLock customers without the aid of this flaw, but nevertheless the design of the company's site suggests that whoever put it together lacked a basic understanding of Web site authentication and security.
LifeLock's Web site exposed customer email addresses by tying each customer account to a numeric "subscriberkey" that could be easily enumerated. Pictured above is customer number 55,739,477. Click to enlarge.
Pictured above is a redacted screen shot of one such record (click the image to enlarge). Notice how the format of the link in the browser address bar ends with the text "subscriberkey=" followed by a number. Each number corresponds to a customer record, and the records appear to be sequential. Translation: It would be trivial to write a simple script that pulls down the email address of every LifeLock subscriber.
Security firm Symantec, which acquired LifeLock in November 2016 for $2.3 billion, took LifeLock.com offline shortly after being contacted by KrebsOnSecurity. According to LifeLock's marketing literature as of January 2017, the company has more than 4.5 million customer accounts.
KrebsOnSecurity was alerted to the glaring flaw by Nathan Reese, a 42-year-old freelance security researcher based in Atlanta who is also a former LifeLock subscriber. Reese said he discovered the data leak after receiving an email to the address he had previously used at LifeLock, and that the message offered him a discount for renewing his membership.
Clicking the "unsubscribe" link at the bottom of the email brought up a page showing his subscriber key. From there, Reese said, he wrote a proof-of-concept script that began sequencing numbers and pulling down email addresses. Reese said he stopped the script after it enumerated approximately 70 emails because he didn't want to set off alarm bells at LifeLock.
"If I were a bad guy, I would definitely target your customers with a phishing attack because I know two things about them," Reese said. "That they're a LifeLock customer and that I have those customers' email addresses. That's a pretty sharp spear for my spear phishing right there. Plus, I definitely think the target market of LifeLock is someone who is easily spooked by the specter of cybercrime."
LifeLock's Web site is currently offline.
Misconfigurations like the one described above are some of the most common ways that companies leak customer data, but they're also among the most preventable. Earlier this year, KrebsOnSecurity broke a story about a similar flaw at Panerabread.com, which exposed tens of millions of customer records — including names, email and physical addresses, birthdays and the last four digits of the customer's credit card.
Update, 7:40 p.m.: Corrected the number of LifeLock subscribers based on a 2017 estimate by Symantec.
Update, July 26, 7:32 a.m.: Symantec issued the following statement in response to this article:
This issue was not a vulnerability in the LifeLock member portal. The issue has been fixed and was limited to potential exposure of email addresses on a marketing page, managed by a third party, intended to allow recipients to unsubscribe from marketing emails. Based on our investigation, aside from the 70 email address accesses reported by the researcher, we have no indication at this time of any further suspicious activity on the marketing opt-out page.
Data Breaches — 70 Comments
Hackers Breached Virginia Bank Twice in Eight Months, Stole $2.4M
Hackers used phishing emails to break into a Virginia bank in two separate cyber intrusions over an eight-month period, making off with more than $2.4 million total. Now the financial institution is suing its insurance provider for refusing to fully cover the losses.
According to a lawsuit filed last month in the Western District of Virginia, the first heist took place in late May 2016, after an employee at The National Bank of Blacksburg fell victim to a targeted phishing email.
Photo copyright: Kerri Farley
The email allowed the intruders to install malware on the victim's PC and to compromise a second computer at the bank that had access to the STAR Network, a system run by financial industry giant First Data that the bank uses to handle debit card transactions for customers. That second computer had the ability to manage National Bank customer accounts and their use of ATMs and bank cards.
Armed with this access, the bank says, hackers were able to disable and alter anti-theft and anti-fraud protections, such as 4-digit personal identification numbers (PINs), daily withdrawal limits, daily debit card usage limits, and fraud score protections.
National Bank said the first breach began Saturday, May 28, 2016 and continued through the following Monday. Normally, the bank would be open on a Monday, but that particular Monday was Memorial Day, a federal holiday in the United States. The hackers used hundreds of ATMs across North America to dispense funds from customer accounts. All told, the perpetrators stole more than $569,000 in that incident.
Following the 2016 breach, National Bank hired cybersecurity forensics firm Foregenix to investigate. The company determined the hacking tools and activity appeared to come from Russian-based Internet addresses.
In June of 2016, National Bank implemented additional security protocols, as recommended by FirstData. These protocols are known as "velocity rules" and were put in place to help the bank flag specific types of repeated transaction patterns that happen within a short period of time.
But just eight months later — in January 2017 according to the lawsuit — hackers broke in to the bank's systems once more, again gaining access to the financial institution's systems via a phishing email.
This time not only did the intruders regain access to the bank's STAR Network, they also managed to compromise a workstation that had access to Navigator, which is software used by National Bank to manage credits and debits to customer accounts.
Prior to executing the second heist, the hackers used the bank's Navigator system to fraudulently credit more than $2 million to various National Bank accounts. As with the first incident, the intruders executed their heist on a weekend. Between Jan. 7 and 9, 2017, the hackers modified or removed critical security controls and withdrew the fraudulent credits using hundreds of ATMs.
All the while, the intruders used the bank's systems to actively monitor customer accounts from which the funds were being withdrawn. At the conclusion of the 2017 heist, the hackers used their access to delete evidence of fraudulent debits from customer accounts. The bank's total reported loss from that breach was $1,833,984.
Verizon was hired to investigate the 2017 attack, and according to the bank Verizon's forensics experts concluded that the tools and servers used by the hackers were of Russian origin. The lawsuit notes the company determined that it was likely the same group of attackers responsible for both intrusions. Verizon also told the bank that the malware the attackers used to gain their initial foothold at the bank in the 2017 breach was embedded in a booby-trapped Microsoft Word document. Continue reading →
Security Tools — 187 Comments
Google: Security Keys Neutralized Employee Phishing
Google has not had any of its 85,000+ employees successfully phished on their work-related accounts since early 2017, when it began requiring all employees to use physical Security Keys in place of passwords and one-time codes, the company told KrebsOnSecurity.
A YubiKey Security Key made by Yubico. The basic model featured here retails for $20.
Security Keys are inexpensive USB-based devices that offer an alternative approach to two-factor authentication (2FA), which requires the user to log in to a Web site using something they know (the password) and something they have (e.g., a mobile device).
A Google spokesperson said Security Keys now form the basis of all account access at Google.
"We have had no reported or confirmed account takeovers since implementing security keys at Google," the spokesperson said. "Users might be asked to authenticate using their security key for many different apps/reasons. It all depends on the sensitivity of the app and the risk of the user at that point in time."
The basic idea behind two-factor authentication is that even if thieves manage to phish or steal your password, they still cannot log in to your account unless they also hack or possess that second factor.
The most common forms of 2FA require the user to supplement a password with a one-time code sent to their mobile device via text message or an app. Indeed, prior to 2017 Google employees also relied on one-time codes generated by a mobile app — Google Authenticator.
In contrast, a Security Key implements a form of multi-factor authentication known as Universal 2nd Factor (U2F), which allows the user to complete the login process simply by inserting the USB device and pressing a button on the device. The key works without the need for any special software drivers.
Once a device is enrolled for a specific Web site that supports Security Keys, the user no longer needs to enter their password at that site (unless they try to access the same account from a different device, in which case it will ask the user to insert their key).
U2F is an emerging open source authentication standard, and as such only a handful of high-profile sites currently support it, including Dropbox, Facebook, Github (and of course Google's various services). Most major password managers also now support U2F, including Dashlane, and Keepass. Duo Security [full disclosure: an advertiser on this site] also can be set up to work with U2F.
With any luck, more sites soon will begin incorporating the Web Authentication API — also known as "WebAuthn" — a standard put forth by the World Wide Web Consortium in collaboration with the FIDO Alliance. The beauty of WebAuthn is that it eliminates the need for users to constantly type in their passwords, which negates the threat from common password-stealing methods like phishing and man-in-the-middle attacks.
Currently, U2F is supported by Chrome, Mozilla Firefox, and Opera. In both Firefox and Quantum (the newer, faster version of Firefox), U2F is not enabled by default. To turn it on, type "about:config" in the browser bar, type or paste "security.webauth.u2f" and double-click the resulting entry to change the preference's value from "false" to "true."
Microsoft says it expects to roll out updates to its flagship Edge browser to support U2F later this year. According to a recent article at 9to5Mac.com, Apple has not yet said when or if it will support the standard in its Safari browser. Continue reading →
A Little Sunshine / Data Breaches / Tax Refund Fraud — 34 Comments
Human Resources Firm ComplyRight Breached
Cloud-based human resources company ComplyRight said this week that a security breach of its Web site may have jeopardized sensitive consumer information — including names, addresses, phone numbers, email addresses and Social Security numbers — from tax forms submitted by the company's thousands of clients on behalf of employees.
Pompano Beach, Fla-based ComplyRight began mailing breach notification letters to affected consumers late last week, but the form letters are extremely vague about the scope and cause of the breach. Indeed, many readers who received these letters wrote to KrebsOnSecurity asking for more information, as the company hadn't yet published any details about the breach on its Web site. Also, most of those folks said they'd never heard of ComplyRight and could not remember ever doing business with a company by that name.
Neither ComplyRight nor its parent company Taylor Corp. responded to multiple requests for comment this past week. But on Wednesday evening, ComplyRight posted additional facts about the incident on its site, saying a recently completed investigation suggests that fewer than 10 percent of individuals with tax forms prepared on the ComplyRight platform were impacted.
According to ComplyRight's Web site, some 76,000 organizations — many of them small businesses — use its services to prepare tax forms such as 1099s and W2s on behalf of their employees and/or contractors. While the company didn't explicitly say which of its cloud services was impacted by the breach, the Web site which handles its tax preparation business is efile4biz.com.
ComplyRight says it learned of the breach on May 22, 2018, and that the "unauthorized access" to its site persisted between April 20, 2018 and May 22, 2018. Continue reading →
Ne'er-Do-Well News — 38 Comments
'LuminosityLink RAT' Author Pleads Guilty
A 21-year-old Kentucky man has pleaded guilty to authoring and distributing a popular hacking tool called "LuminosityLink," a malware strain that security experts say was used by thousands of customers to gain unauthorized access to tens of thousands of computers across 78 countries worldwide.
The LuminosityLink Remote Access Tool (RAT) was sold for $40 to thousands of customers, who used the tool to gain unauthorized access to tens of thousands of computers worldwide.
Federal prosecutors say Colton Ray Grubbs of Stanford, Ky. conspired with others to market and distribute the LuminosityLink RAT, a $40 Remote Access Tool that made it simple for buyers to hack into computers to surreptitiously view documents, photographs and other files on victim PCs. The RAT also let users view what victims were typing on their keyboards, disable security software, and secretly activate the webcam on the target's computer.
Grubbs, who went by the pseudonym "KFC Watermelon," began selling the tool in May 2015. By mid-2017 he'd sold LuminosityLink to more than 8,600 customers, according to Europol, the European Union's law enforcement agency.
Speculation that Grubbs had been arrested began surfacing last year after KFC Watermelon stopped responding to customer support queries on Hackforums[dot]net, the Web site where he primarily sold his product. Continue reading →
A Little Sunshine / Latest Warnings / The Coming Storm — 1,076 Comments
Sextortion Scam Uses Recipient's Hacked Passwords
Here's a clever new twist on an old email scam that could serve to make the con far more believable. The message purports to have been sent from a hacker who's compromised your computer and used your webcam to record a video of you while you were watching porn. The missive threatens to release the video to all your contacts unless you pay a Bitcoin ransom. The new twist? The email now references a real password previously tied to the recipient's email address.
The basic elements of this sextortion scam email have been around for some time, and usually the only thing that changes with this particular message is the Bitcoin address that frightened targets can use to pay the amount demanded. But this one begins with an unusual opening salvo:
"I'm aware that <substitute password formerly used by recipient here> is your password," reads the salutation.
The rest is formulaic:
You don't know me and you're thinking why you received this e mail, right?
Well, I actually placed a malware on the porn website and guess what, you visited this web site to have fun (you know what I mean). While you were watching the video, your web browser acted as a RDP (Remote Desktop) and a keylogger which provided me access to your display screen and webcam. Right after that, my software gathered all your contacts from your Messenger, Facebook account, and email account.
What exactly did I do?
I made a split-screen video. First part recorded the video you were viewing (you've got a fine taste haha), and next part recorded your webcam (Yep! It's you doing nasty things!).
Well, I believe, $1400 is a fair price for our little secret. You'll make the payment via Bitcoin to the below address (if you don't know this, search "how to buy bitcoin" in Google).
BTC Address: 1Dvd7Wb72JBTbAcfTrxSJCZZuf4tsT8V72
(It is cAsE sensitive, so copy and paste it)
You have 24 hours in order to make the payment. (I have an unique pixel within this email message, and right now I know that you have read this email). If I don't get the payment, I will send your video to all of your contacts including relatives, coworkers, and so forth. Nonetheless, if I do get paid, I will erase the video immidiately. If you want evidence, reply with "Yes!" and I will send your video recording to your 5 friends. This is a non-negotiable offer, so don't waste my time and yours by replying to this email.
Notorious 'Hijack Factory' Shunned from Web
Score one for the good guys: Bitcanal, a Portuguese Web hosting firm long accused of helping spammers hijack large swaths of dormant Internet address space over the years, was summarily kicked off the Internet this week after a half-dozen of the company's bandwidth providers chose to sever ties with the company.
Spammers and Internet service providers (ISPs) that facilitate such activity often hijack Internet address ranges that have gone unused for periods of time. Dormant or "unannounced" address ranges are ripe for abuse partly because of the way the global routing system works: Miscreants can "announce" to the rest of the Internet that their hosting facilities are the authorized location for given Internet addresses. If nothing or nobody objects to the change, the Internet address ranges fall into the hands of the hijacker.
For years, security researchers have tracked the suspected theft of millions of IPv4 Internet addresses back to Bitcanal, which was also doing business under the name "Ebony Horizon." Experts say shortly after obtaining a chunk of IP addresses, Bitcanal would apparently sell or lease the space to spammers, who would then begin sending junk email from those addresses — taking full advantage of the good or at least neutral Internet reputation of the previous owner to evade anti-spam blacklists.
Much of the hijacked address space routed by Bitcanal was once assigned to business entities that no longer exist. But some of the more brazen hijacks attributed to Bitcanal and its customers involved thousands of Internet addresses assigned to active organizations, such as the company's well-documented acquisition of address space assigned to the Texas State Attorney General's office, as well as addresses managed by the U.S. Department of Defense.
Bitcanal's reputation finally caught up with the company late last month, when anti-spam activist and researcher Ron Guilmette documented yet another new major IP address hijack at the company and challenged Bitcanal's upstream Internet providers to stop routing traffic for it (KrebsOnSecurity has published several stories about previous high-profile IP address hijacks involving spammers who were flagged by Guilmette).
Guilmette said Bitcanal and its proprietor — Portuguese businessman Joao Silveira — have a well-documented history of "behaving badly and coloring outside the lines for literally years."
"His actions in absconding with other people's IP address space, over the years, are those of either a spoiled child or else those of a sociopath, depending on one's personal point of view," Guilmette said. "In either case the Internet will, by and large, be glad to see his backside, and will be better off without him."
Doug Madory, a researcher for Internet performance management firm Dyn (now owned by Oracle), published a blog post chronicling Bitcanal's history as an address "hijack factory." That post also documents the gradual ostracization of Bitcanal over the past week, as one major Internet exchange after another pulled the plug on the company.
Dyn's depiction of Bitcanal's final remaining upstream Internet provider pulling the plug on the company on July 10, effectively severing it from existence on the Web. Source: Dyn.
Reached for comment just days before Bitcanal was shunned by all of its peering providers, Mr. Silveira expressed shock and surprise over what he called unfair attacks against his company's reputation. He blamed the besmirchment on one or two "bad" customers who abused his service over the years.
"My thought is that one or two customer in my network maybe [imitated] people acting like a client and force the errors or injecting bad network space," Silveira said in an emailed response to KrebsOnSecurity. "I am not the problem and this public trial and conviction will not solve the prefix hijacking matter. If these questions remain without solution, those actors will keep doing it." Continue reading →
Patch Tuesday, July 2018 Edition
Microsoft and Adobe each issued security updates for their products today. Microsoft's July patch batch includes 14 updates to fix more than 50 security flaws in Windows and associated software. Separately, Adobe has pushed out an update for its Flash Player browser plugin, as well as a monster patch bundle for Adobe Reader/Acrobat.
According to security firm Qualys, all but two of the "critical" fixes in this round of updates apply to vulnerabilities in Microsoft's browsers — Internet Explorer and Edge. Critical patches mend software flaws that can be exploited remotely by malicious software or bad guys with little to no help from the user, save for perhaps visiting a Web site or opening a booby-trapped link.
Microsoft also patched dangerous vulnerabilities in its .NET Framework (a Windows development platform required by many third-party programs and commonly found on most versions of Windows), as well as Microsoft Office. With both of these weaknesses, an attacker could trick a victim into opening an email that contained a specially crafted Office document which loads malicious code, says Allan Liska, a threat intelligence analyst at Recorded Future.
One of the more nettlesome features of Windows 10 is the operating system by default decides on its own when to install updates, very often shutting down open programs and restarting your PC in the middle of the night to do so unless you change the defaults.
Not infrequently, Redmond ships updates that end up causing stability issues for some users, and it doesn't hurt to wait a day or two before seeing if any major problems are reported with new updates before installing them. Microsoft doesn't make it easy for Windows 10 users to change this setting, but it is possible. For all other Windows OS users, if you'd rather be alerted to new updates when they're available so you can choose when to install them, there's a setting for that in Windows Update. Continue reading →
ExxonMobil Bungles Rewards Card Debut
Energy giant ExxonMobil recently sent snail mail letters to its Plenti rewards card members stating that the points program was being replaced with a new one called Exxon Mobil Rewards+. Unfortunately, the letter includes a confusing toll free number and directs customers to a parked page that tries to foist Web browser extensions on visitors.
The mailer (the first page of which is screenshotted below) urges customers to visit exxonmobilrewardsplus[dot]com, to download its mobile app, and to call "1-888-REWARD+" with any questions. It may not be immediately obvious, but that "+" sign is actually the same thing as a zero on the telephone keypad (although I'm ashamed to say I had to look that up online to be sure).
Anyone curious enough to guess at other ending numbers other than zero will wind up at a call center advertising "free" Caribbean (1) cruises or at a pricey adult chat service dubbed "America's hottest talk line" (6).
Worse, visiting the company's new rewards Web site in Google Chrome prompted my browser to run a "security check," followed by a series of popups offering to install a Chrome extension called "Browsing Safely."
That extension changes your default search engine to Yahoo and appears to redirect all searches through a domain called lastlog[dot]in, which seems to be affiliated with an Israeli online advertising network. After adding the Browsing Safely extension to Chrome using a virtual machine, my browser was redirected to Exxon.com.
The Google Chrome extension offered when I first visited exxonmobilrewardsplus-dot-com.
Many people on Twitter who expressed confusion about the mailer said they accidentally added an "e" to the end of "exxonmobil" and ended up getting bounced around to spammy-looking sites with ad redirects and dodgy download offers.
ExxonMobil corporate has not yet responded to requests for comment. But after about 10 minutes on hold listening to the same Muzak-like song, I was able to reach a customer service person at the confusing ExxonMobil Rewards+ phone number. That person said the Web site for the rewards program wasn't going to be active until July 11.
"Currently the Web site is not available," the representative said. "Please don't try to download anything from it right now. It should be active and available next week."
It always amazes me when major companies with oodles of cash (ExxonMobil made $20 billion last year) roll out new marketing initiatives without consulting professionals who help mitigate security and privacy issues for a living. It seems likely that happened in this case because anyone who knows a thing or two about security would strongly advise against instructing customers to visit a parked domain or one that isn't yet fully under the company's control.
Update, July 11, 11:36 a.m. ET: As several readers have observed in the comments below, it appears that ExxonMobil has registered a different domain for its new rewards program: https://exxonandmobilrewardsplus.com/welcome/home (note the inclusion of the word "and" between Exxon and Mobil). This domain is advertised as the official new rewards program domain via ExxonMobil's corporate homepage, exxon.com (albeit via a redirect).


All sorts of businesses take advantage of the benefits of cloud-based applications these days. From SMEs in the telephony industry to large pharmaceutical or petrochemical businesses, the cloud has provided greater flexibility in working practices than has ever been available before. Even established businesses in the manufacturing and engineering sectors have been able to harness cloud applications to help them as well as sectors which you'd more likely associate with digital technology solutions, such as digital publishing businesses, for example. At Brandon Cross, we have helped companies in each of these sectors benefit from cloud applications – and we can help your organisation, too.
We have a team of software specialists who have the know-how to provide up-to-date IT consultancy, training and development in secure cloud and web-based applications. For many business owners and IT directors, turning to the power of the web to run their applications means relinquishing control of their security systems. However, done correctly this can be an advantage since many web-based systems are more secure than you could achieve in-house. What's more, they often provide cutting-edge security at a fraction of the cost that you could achieve by keeping your applications running from your own servers.
To get the balance right between opening up access to authorised users of your software applications via the web and restricting access to things like customer data, bespoke solutions and interfaces are often called for. This is where Brandon Cross comes in. With our expertise in cloud-based applications, you can obtain all of the upsides without running any of the major risks. Why not look at how the cloud can improve your organisation's workflows and offer clients greater flexibility?
If you would like to know more about this exciting area of information technology and how it can benefit a wide range of business models, then download our guide – Secure Cloud Based Web Applications. It is free and packed full of useful information. Alternatively, if you'd like to talk to someone about your ideas for deploying cloud-based applications in your business, we'll look forward to hearing from you.


text:
Home Features The Lakefront Trail Separation: Your Concerns are Being Heard
Photo by Laura Bestul (CARA intern)
The Lakefront Trail Separation: Your Concerns are Being Heard
The Chicago Area Runners Association is listening to your concerns regarding the new Lakefront Trail separation, and is working with other local organizations to make improvements.
Back in December 2016, when Ken Griffin announced he would donate $12 million to the Chicago Park District to create two separate paths for bikers and pedestrians, local athletes rejoiced. As the most crowded path in the state – nearly 100,000 users on an average summer weekend – this could only help settle the congestion and danger.
And it has. But it's not perfect. Yet.
Executive Director of the Chicago Area Runners Association [CARA] Greg Hipp was on the planning committee for the Lakefront Trail Separation project from the very beginning. He shared everyone's excitement, and met with the Chicago Park District [CPD] and Active Transportation Alliance [ATA] every two weeks for nearly two years to get the path built.
"When it was announced, people had a concept of what that means, which was a reasonable concept of two paths, side-by-side, all the way down," Hipp explains. "Unfortunately, that wasn't realistic."
As they broke down each portion of the path, they realized that while some areas were wide open, giving them freedom to separate the trail in that way, others had benches, 50-year-old trees, softball fields and parks that could not be moved. In these areas, the group had to work with the space available.
"It is better and safer, but some locations aren't ideal," Hipp admits.
Since the path was completed in December 2018, users have been vocalizing their concerns. Many of them are reasonable opinions, Hipp explains, and while there is reasoning behind the construction, he wants everyone to know that it's not done.
In January, Hipp met with ATA and shared views on the state of the trail, based on their own observations and feedback they received. Together they compiled a list of suggested improvements and send it to the CPD.
"[The Park District's] goal is to observe the trail in all aspects throughout the year, see usage patterns, and determine what's working and what isn't," Hipp says. "Initially, people are going to be confused regardless because it's new and not what they're used to. So, they want to see what's really going to be needed for the long-term."
CARA and ATA are continuing to compile feedback and sending it to the Park District, and Hipp encourages people to keep voicing their opinions.
"We've shared all the feedback we've received and even though we're not meeting regularly, we still welcome these emails because it gives us more to add to our files and show these are mass opinions and not individual ones," Hipp adds. "Another thing that can lead to improved paths, including the addition of gravel – it sounds a little bit odd – if runners make a cow path somewhere in the grass, then eventually the PD will give in."
In the meantime, Hipp advises, both runners and cyclists alike, do their best to make it work.
"I see comments of people who purposely don't listen to the rules, and will go on the path that's more convenient even if it's not for them," Hipp explains. "It's never going to work if we don't make it work. We're all out here for the same reason, so we need to do our best and be accountable."
If you have a concern about the Lakefront Trail, email info@cararuns.org.
We took this to social media, and asked what your concerns with the path were. Many of you pointed out the same problems, so Hipp wanted to respond himself.
"There needs to be more markings on the ground designating bike and pedestrian lanes."
"Signage is something we all agree needs improvement. From CARA and ATA's perspective, the trail needs negative markings, so not just where you're supposed to go but showing where you're not supposed to be. Essentially 'no diving' signs, but with a bike or pedestrian on the appropriate trail. We think having these on the pavement is more visible then traditional signage and better for tourists who are completely unfamiliar with the area. The PD is not opposed to the concept, but they're not there yet."
"Why are bikers on softer asphalt and runners on hard cement?"
"There's a few places where the path assignments had nothing to do with the surface but just with the configuration of the area. The big spot is North of Belmont, and the reason pedestrians were given their side was because there's a couple turns and a dog park, which wouldn't be accessible by foot if that was assigned to bikers. It has to do with speed of traffic too; obviously yes, we would prefer asphalt for runners, but there's legitimate reasons it was chosen that way. In some places pedestrians got the ideal side, and others, cyclists did. However, we hope runners continue to have a strong voice about the importance of a gravel path, because if enough speak up about it, they might change it!"
"They need some drinking fountains on the running path. Most of them are on the bike path."
"That was an unintentional result; it was just a reassignment of paths, and water fountains weren't in the plan so there are certainly some places where water fountains are closer to one path or the other. We have addressed that it's an issue. The best resource runners can use right now is the CARA and Fleet Feet water stations."
"Too many runner/cyclist crossings now. And the two-way running part of non-physically separated paths (north of Foster, Montrose to Irving, Belmont Harbor, south of North) is quite narrow. With walkers three-four abreast, strollers, dogs on retractable leashes and runners all packed on the same two narrow lanes, it feels really overcrowded."
"There's some configurations, like from the Totem Pole to Irving Park, where cyclists are riding down the middle and runners are on both sides. The original plan was bikers were going to be on the other side of the parking area, and cross Recreation Drive, with a separate running trail. But through public meeting and postings of the maps, the public opposed because bikers would have to cross Recreation Drive. We wanted a wider path … or have the two paths side-by-side, but the Park District couldn't do either based on property ownership or national trail marking standards. We understand the PD's point of view, but from a runner perspective we've got about 36-inches of path that's about enough for a stroller and that's it."
It's not all bad though. Here were some of the positive comments!
"I've run and biked the entire path both ways. It works best if everyone stays in their lane. Simple as that. I think we can voice our opinion on improvements over time, but everyone will be happier if they just follow the rules!"
"If you look at the trail from 18.5 miles, you see a really incredible place to run, bike and walk. It's safer too, you just have to pay attention."
"I think it's a big improvement on a single path for both bikes and pedestrians. Even if people don't "stay in their lanes" 100 percent of the time it still relieves congestion."
"I appreciate the effort in trying to separate … I take full advantage and enjoy it in the early hours of the day (running and biking) to avoid any frustrations."
Previous articleCrystal Lake Aquathon
Next articleRace Guards: The First-Aid Kit That Runs with You