Richard Vevers, a British underwater photographer, was horrified when he returned in 2015 to a colourful reef in American Samoa he had shot a year earlier. It had turned pure white.
Vevers, who runs a marine advocacy group called The Ocean Agency, knew bleaching, a process caused by global warming that starves coral, was the cause. He also knew the public didn't understand the ocean's sorry shape because it couldn't see what was going on. Cameras, he reckoned, could help.
So The Ocean Agency partnered with Google to take the search giant's Street View concept underwater at Australia's Great Barrier Reef. It designed a military-grade scooter, with an underwater camera mounted on top worth AU$50,000 (about $39,000 or £29,700). The thousands of photographs it took were then processed by image-recognition software that group wrote for the project.
"As soon as we designed that [technology], the scientists all realised that this could revolutionise the study of coral reefs," Vevers says. "You could suddenly look at coral reefs at a scale that was really unprecedented."
Conservationist Richard Vevers goes deep beneath the waves with his underwater camera.
Vevers and The Ocean Agency aren't the only researchers mapping Australia's Great Barrier Reef, which is dying as man-made climate change prompts bleaching and other ills in its beautiful but delicate ecosystem. Teams from Australia and around the world have projects to chart a complex, dynamic habitat that covers an area as big as Germany. Their work is crucial to efforts to save the Great Barrier Reef, which saw 29 percent of its shallow-water coral die last year. After all, how can you save something if you can't see it?
The teams are using a range of technology both new and old in their projects. In Archer Point, North Queensland, a team of indigenous rangers deploys drones to monitor the health of the Great Barrier Reef and map the surrounding country. A team from the University of Sydney takes thousands of photographs of the reef one second apart with GoPro cameras, stitching them into giant high-res images. Marine biologist Johnny Gaskell used Google Maps to identify the location of a blue hole filled with healthy coral protected from the bleaching off the reef's Whitsunday coast.
In another project, the Australian Institute of Marine Science (AIMS), a government agency, deployed a new solar- and wave-powered robot called the Wave Glider to patrol the waters off of Queensland's coast. The robot, which was developed by Boeing's Liquid Robotics division in Silicon Valley, surfs the ocean unmanned and autonomous, transmitting data in near real time, 24/7. Its missions are accessible from phone or laptop by its scientists from around the world.
The task is daunting. We think of the Great Barrier Reef as a single expanse of coral, but it's actually a network of 3,000 reefs that spans 2,300 kilometres (1,430 miles) along Australia's eastern coast. Roughly 9,000 species live on it and 2 million tourists visit every year to drink in its splendour.
The sheer size of the Great Barrier Reef makes mapping expeditions expensive, and, no surprise, funding is hard to come by. Large ships that use remote sensing in deep waters can cost AU$40,000 (about $32,000 or £24,000) a day. A big drilling ship used to recover parts of fossilized reefs, which shed light on past climate change, can cost up to AU$12 million per expedition (about $9.5 million or £7 million). The Royal Australian Navy and Maritime Safety Queensland, a state department, shoulder some of the costs, as does the International Ocean Discovery Program, an international consortium that's the largest marine geoscience program in the world.
It's still not enough. One estimate reckons $1 billion a year for the next 10 years is needed to have a chance to save the reef.
Robin Beaman and Jody Webster have a bold goal. The James Cook University in Queensland and University of Sydney researchers have created a computerized 3D model of the entire Great Barrier Reef. They're using multibeam sonar, a technique pioneered in the 1970s and refined over decades.
The technique involves bouncing acoustic pulses off the seabed and measuring the time it takes for the echo to return. Since they know how fast the sound is moving, they can calculate how deep the water is. It reveals the shape of the reef's seafloor in startling detail.
Beaman and Webster's project builds off an idea proposed in 2005 by their mentor, Bob Henderson. They've been working on it since 2005 and have mapped 100 percent of the Great Barrier Reef using all available bathymetry (or depth) data.
The two of them work with a German crew on their mapping cruises. When I spoke with Webster, he had just returned from a 23-day cruise on the RV Sonne, which has one of the world's best multibeam systems and a camera worth quarter of a million Australian dollars.
"When you're doing a cruise like that, it's discovery," Webster said. "You're mapping the seabed for the first time."
The Royal Australian Navy has protected the country's waters since before its formal establishment in 1911. For the past three decades, it's used a homegrown technology to map the ocean floor around the country, too.
Known as Laser Airborne Depth Sounder (LADS), or airborne lidar, it took 20 years to develop and is now a fixture in marine mapping efforts around the world. The concept is similar to multibeam sonar, but uses light rather than sound.
A LADS system shoots two beams of amplified light -- a green laser and a red one -- at the water below. The green laser pierces the water and reaches the ocean floor. The red one stops at the surface. Each is precisely measured. Subtract the red measurement from the green measurement and you have the depth.
Each survey is run by a team of specialists: two officers, three senior sailors and three junior sailors. The pilots need the support so they can endure flights for up to seven hours at roughly a kilometre off the ground, which is unusually low by aviation standards.
The Navy needs to know where the coral reefs are to protect them, as well as the boats that ply the waters above them. Chunks of the Great Barrier Reef, it turns out, are under busy shipping lanes. An Australian government study showed that 3,947 ship voyages called at reef ports in 2012. Port authorities and corporations expect that number to hit 5,871 in 2017, at a yearly growth rate of between 4 and 5 percent.
Alex Cowdery flew LADS sorties for the Navy when the tech debuted in the 1990s and now works for a company that sells the service to other navies. He keeps charts from his early flights on his office walls to remind his clients this is a well-tested technology.
Since 1993, the Navy has mapped roughly 240,000 square kilometres of the Great Barrier Reef, more than half of its 347,800-square-kilometre area, he says. The Navy flies an average of one sortie every other day to keep its charts updated. Mapping takes discipline.
"It was exciting back then," Cowdery tells me of his early days flying LADS planes. "And it's still exciting right now."
A NASA-run project called CORAL, the Coral Reef Airborne Laboratory, took to the air from September to October in 2016 to map what's underwater. Developed by the Jet Propulsion Laboratory, CORAL tests a next-generation hyperspectral instrument important to scientists for distinguishing healthy coral reef systems from unhealthy ones.
The project uses PRISM, an acronym for the JPL's Portable Remote Imaging Spectrometer, to capture spectrum data that previously couldn't be collected. Spectrometers measure the wavelength of light, which provides insight into what something is made of. The PRISM system was mounted in the belly of an airplane that flew at low altitudes above the Great Barrier Reef and pierced the water's surface to capture high-resolution spectrum data.
The US space agency and Australia's CSIRO proposed the project five years ago but it stalled amid funding issues, a common hurdle for scientific research. Then in 2016, money was found and the project was back on. By September, a NASA team decked out in caps and T-shirts bearing the organisation's iconic logo had arrived in an Australian government facility in Brisbane.
"It's pretty cool," Tim Malthus, who runs a CSIRO coastal studies group, said of working with the NASA team, which he describes as extremely well-organised.
The PRISM system is a prototype that's much smaller than previous hyperspectral systems and that will eventually be deployed on satellites. The PRISM technology has an advantage over multibeam and lidar surveys, Malthus says, because it's uniform and doesn't require corrections.
Beaman, the James Cook University researcher in Queensland, brings multibeam and satellite technologies together in generating his 3D models of the reef. Those models are now being used in a range of projects aimed at saving the Great Barrier Reef.
The accuracy of 3D models helps researchers understand natural hazards and features of the seafloor. For example, E-reefs, a government modeling program, uses the 3D landscapes to model particles as they move through the reef to predict how pollution travels through the area. The model is also used to make decisions on where fishing can be allowed.
"Unless you map it, you don't know what it is," Beaman says. "That's really what it comes down to."
Vevers, the head of The Ocean Agency, says that's what the Google Street View project was all about. If people see the Great Barrier Reef and other reefs around the world, they'll be more emotionally involved in saving them.
The Ocean Agency technology that was designed for the Street View project is now being used to document the state of reefs in 25 countries around the world. Vevers says the results will be made public so everyone can see what's at stake.
"Everyone feels like a child when they see that new environment for the first time," Vevers says. "You just get excited."
First published Oct. 19, 5 a.m. PT.
Update, Oct. 24 at 6 p.m.: Adds information about the Wave Glider project.


text:
package langserver

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"go/ast"
	"go/build"
	"go/parser"
	"go/token"
	"go/types"
	"io"
	"math"
	"strconv"
	"strings"
	"sync"
	"time"

	"golang.org/x/tools/go/buildutil"
	"golang.org/x/tools/go/loader"
	"golang.org/x/tools/imports"
	"golang.org/x/tools/refactor/importgraph"

	opentracing "github.com/opentracing/opentracing-go"
	"github.com/sourcegraph/go-langserver/langserver/util"
	"github.com/sourcegraph/go-langserver/pkg/tools"
	"github.com/sourcegraph/go-lsp"
	"github.com/sourcegraph/go-lsp/lspext"
	"github.com/sourcegraph/jsonrpc2"
)

func (h *LangHandler) handleTextDocumentReferences(ctx context.Context, conn jsonrpc2.JSONRPC2, req *jsonrpc2.Request, params lsp.ReferenceParams) ([]lsp.Location, error) {
	if !util.IsURI(params.TextDocument.URI) {
		return nil, &jsonrpc2.Error{
			Code:    jsonrpc2.CodeInvalidParams,
			Message: fmt.Sprintf("textDocument/references not yet supported for out-of-workspace URI (%q)", params.TextDocument.URI),
		}
	}

	// Begin computing the reverse import graph immediately, as this
	// occurs in the background and is IO-bound.
	reverseImportGraphC := h.reverseImportGraph(ctx, conn)

	fset, node, _, _, pkg, _, err := h.typecheck(ctx, conn, params.TextDocument.URI, params.Position)
	if err != nil {
		// Invalid nodes means we tried to click on something which is
		// not an ident (eg comment/string/etc). Return no information.
		if _, ok := err.(*invalidNodeError); ok {
			return []lsp.Location{}, nil
		}
		return nil, err
	}

	// NOTICE: Code adapted from golang.org/x/tools/cmd/guru
	// referrers.go.

	obj := pkg.ObjectOf(node)
	if obj == nil {
		return nil, errors.New("references object not found")
	}

	// TODO(sqs): golang.org/x/tools/cmd/guru/referrers.go has some
	// other handling of obj == nil cases: type-switches, package
	// decls, and unresolved identifiers that we should adapt as well.
	if obj == nil {
		return nil, errors.New("object not found")
	}

	if obj.Pkg() == nil {
		if _, builtin := obj.(*types.Builtin); builtin {
			// We don't support builtin references due to the massive number
			// of references, so ignore the missing package error.
			return []lsp.Location{}, nil
		}
		return nil, fmt.Errorf("no package found for object %s", obj)
	}
	defpkg := strings.TrimSuffix(obj.Pkg().Path(), "_test")
	_, pkgLevel := classify(obj)

	bctx := h.BuildContext(ctx)
	pkgInWorkspace := func(path string) bool {
		if h.init.RootImportPath == "" {
			return true
		}
		return util.PathHasPrefix(path, h.init.RootImportPath)
	}

	// findRefCtx is used in the findReferences function. It has its own
	// context so we can stop finding references once we have reached our
	// limit.
	findRefCtx, stop := context.WithCancel(ctx)
	defer stop()

	var (
		// locsC receives the final collected references via
		// refStreamAndCollect.
		locsC = make(chan []lsp.Location)

		// refs is a stream of raw references found by findReferences or findReferencesPkgLevel.
		refs = make(chan *ast.Ident)

		// findRefErr is non-nil if findReferences fails.
		findRefErr error
	)

	// Start a goroutine to read from the refs chan. It will read all the
	// refs until the chan is closed. It is responsible to stream the
	// references back to the client, as well as build up the final slice
	// which we return as the response.
	go func() {
		locsC <- refStreamAndCollect(ctx, conn, req, fset, refs, params.Context.XLimit, stop)
		close(locsC)
	}()

	// Don't include decl if it is outside of workspace.
	if params.Context.IncludeDeclaration && util.PathHasPrefix(defpkg, h.init.RootImportPath) {
		refs <- &ast.Ident{NamePos: obj.Pos(), Name: obj.Name()}
	}

	// seen keeps track of already findReferenced packages. This allows us
	// to avoid doing extra work when we receive a successive import
	// graph.
	seen := make(map[string]bool)
	for reverseImportGraph := range reverseImportGraphC {
		// Find the set of packages in this workspace that depend on
		// defpkg. Only function bodies in those packages need
		// type-checking.
		var users map[string]bool
		if pkgLevel {
			// We need to check all packages that import defpkg.
			users = map[string]bool{}
			for pkg := range reverseImportGraph[defpkg] {
				users[pkg] = true
			}
			// We also need to check defpkg itself, and its xtests.
			// For the reverse graph packages, we process xtests with the main package.
			// defpkg gets special handling; we must distinguish between in-package vs out-of-package.
			// To make the control flow in findReferencesPkgLevel simpler, add defpkg and defpkg xtest placeholders.
			// Use "!test" instead of "_test" because "!" is not a valid character in an import path.
			// (More precisely, it is not guaranteed to be a valid character in an import path,
			// so it is unlikely that it will be in use. See https://golang.org/ref/spec#Import_declarations.)
			users[defpkg] = true
			users[defpkg+"!test"] = true
		} else {
			users = reverseImportGraph.Search(defpkg)
		}

		// Anything in seen we have already collected references on,
		// so we only need to collect (users - seen).
		unseen := make(map[string]bool)
		for pkg := range users {
			if !seen[pkg] {
				unseen[pkg] = true
				seen[pkg] = true // need to mark for next loop
			}
		}
		if len(unseen) == 0 { // nothing to do
			continue
		}

		if pkgLevel {
			// pkgLevel queries can be done syntactically instead of semantically,
			// which is much faster. See https://golang.org/cl/97800/.
			findRefErr = h.findReferencesPkgLevel(findRefCtx, bctx, fset, unseen, pkgInWorkspace, obj, refs)
		} else {
			findPackage := h.getFindPackageFunc()
			lconf := loader.Config{
				Fset:  fset,
				Build: bctx,
				FindPackage: func(bctx *build.Context, importPath, fromDir string, mode build.ImportMode) (*build.Package, error) {
					return findPackage(findRefCtx, bctx, importPath, fromDir, h.RootFSPath, mode)
				},
			}

			// The importgraph doesn't treat external test packages
			// as separate nodes, so we must use ImportWithTests.
			for path := range unseen {
				lconf.ImportWithTests(path)
			}

			findRefErr = findReferences(findRefCtx, lconf, pkgInWorkspace, obj, refs)
		}
		if findRefCtx.Err() != nil {
			// If we are canceled, cancel loop early
			break
		}
	}

	// Tell refStreamAndCollect that we are done finding references. It
	// will then send the all the collected references to locsC.
	close(refs)
	locs := <-locsC

	// If we find references then we can ignore findRefErr. It should only
	// be non-nil due to timeouts or our last findReferences doesn't find
	// the def.
	if len(locs) == 0 && findRefErr != nil {
		return nil, findRefErr
	}

	if locs == nil {
		locs = []lsp.Location{}
	}

	return locs, nil
}

// reverseImportGraph returns the reversed import graph for the workspace
// under the RootPath. Computing the reverse import graph is IO intensive, as
// such we may send down more than one import graph. The later a graph is
// sent, the more accurate it is. The channel will be closed, and the last
// graph sent is accurate. The reader does not have to read all the values.
func (h *LangHandler) reverseImportGraph(ctx context.Context, conn jsonrpc2.JSONRPC2) <-chan importgraph.Graph {
	// Ensure our buffer is big enough to prevent deadlock
	c := make(chan importgraph.Graph, 2)

	go func() {
		// This should always be related to the go import path for
		// this repo. For sourcegraph.com this means we share the
		// import graph across commits. We want this behaviour since
		// we assume that they don't change drastically across
		// commits.
		cacheKey := "importgraph:" + string(h.init.Root())

		h.mu.Lock()
		tryCache := h.importGraph == nil
		once := h.importGraphOnce
		h.mu.Unlock()
		if tryCache {
			g := make(importgraph.Graph)
			if hit := h.cacheGet(ctx, conn, cacheKey, g); hit {
				// \o/
				c <- g
			}
		}

		parentCtx := ctx
		once.Do(func() {
			// Note: We use a background context since this
			// operation should not be cancelled due to an
			// individual request.
			span := startSpanFollowsFromContext(parentCtx, "BuildReverseImportGraph")
			ctx := opentracing.ContextWithSpan(context.Background(), span)
			defer span.Finish()

			bctx := h.BuildContext(ctx)
			findPackageWithCtx := h.getFindPackageFunc()
			findPackage := func(bctx *build.Context, importPath, fromDir string, mode build.ImportMode) (*build.Package, error) {
				return findPackageWithCtx(ctx, bctx, importPath, fromDir, h.RootFSPath, mode)
			}
			g := tools.BuildReverseImportGraph(bctx, findPackage, h.FilePath(h.init.Root()))
			h.mu.Lock()
			h.importGraph = g
			h.mu.Unlock()

			// Update cache in background
			go h.cacheSet(ctx, conn, cacheKey, g)
		})
		h.mu.Lock()
		// TODO(keegancsmith) h.importGraph may have been reset after once
		importGraph := h.importGraph
		h.mu.Unlock()
		c <- importGraph

		close(c)
	}()

	return c
}

// refStreamAndCollect returns all refs read in from chan until it is
// closed. While it is reading, it will also occasionally stream out updates of
// the refs received so far.
func refStreamAndCollect(ctx context.Context, conn jsonrpc2.JSONRPC2, req *jsonrpc2.Request, fset *token.FileSet, refs <-chan *ast.Ident, limit int, stop func()) []lsp.Location {
	if limit == 0 {
		// If we don't have a limit, just set it to a value we should never exceed
		limit = math.MaxInt32
	}

	id := lsp.ID{
		Num:      req.ID.Num,
		Str:      req.ID.Str,
		IsString: req.ID.IsString,
	}
	initial := json.RawMessage(`[{"op":"replace","path":"","value":[]}]`)
	_ = conn.Notify(ctx, "$/partialResult", &lspext.PartialResultParams{
		ID:    id,
		Patch: &initial,
	})

	var (
		locs []lsp.Location
		pos  int
	)
	send := func() {
		if pos >= len(locs) {
			return
		}
		patch := make([]referenceAddOp, 0, len(locs)-pos)
		for _, l := range locs[pos:] {
			patch = append(patch, referenceAddOp{
				OP:    "add",
				Path:  "/-",
				Value: l,
			})
		}
		pos = len(locs)
		_ = conn.Notify(ctx, "$/partialResult", &lspext.PartialResultParams{
			ID: id,
			// We use referencePatch so the build server can rewrite URIs
			Patch: referencePatch(patch),
		})
	}

	tick := time.NewTicker(100 * time.Millisecond)
	defer tick.Stop()

	for {
		select {
		case n, ok := <-refs:
			if !ok {
				// send a final update
				send()
				return locs
			}
			if len(locs) >= limit {
				stop()
				continue
			}
			locs = append(locs, goRangeToLSPLocation(fset, n.Pos(), n.End()))
		case <-tick.C:
			send()
		}
	}
}

// findReferences will find all references to obj. It will only return
// references from packages in lconf.ImportPkgs.
func findReferences(ctx context.Context, lconf loader.Config, pkgInWorkspace func(string) bool, obj types.Object, refs chan<- *ast.Ident) error {
	// Bail out early if the context is canceled
	if ctx.Err() != nil {
		return ctx.Err()
	}

	allowErrors(&lconf)

	defpkg := strings.TrimSuffix(obj.Pkg().Path(), "_test")
	objposn := lconf.Fset.Position(obj.Pos())

	// The remainder of this function is somewhat tricky because it
	// operates on the concurrent stream of packages observed by the
	// loader's AfterTypeCheck hook.

	var (
		wg                sync.WaitGroup
		mu                sync.Mutex
		qobj              types.Object
		afterTypeCheckErr error
	)

	collectPkg := pkgInWorkspace
	if _, ok := lconf.ImportPkgs[defpkg]; !ok {
		// We have to typecheck defpkg, so just avoid references being collected.
		collectPkg = func(path string) bool {
			path = strings.TrimSuffix(path, "_test")
			return pkgInWorkspace(path) && path != defpkg
		}
		lconf.ImportWithTests(defpkg)
	}

	// Only typecheck pkgs which we can collect refs in, or the pkg our
	// object is defined in.
	lconf.TypeCheckFuncBodies = func(path string) bool {
		if ctx.Err() != nil {
			return false
		}

		path = strings.TrimSuffix(path, "_test")
		_, imported := lconf.ImportPkgs[path]
		return imported && (pkgInWorkspace(path) || path == defpkg)
	}

	// For efficiency, we scan each package for references
	// just after it has been type-checked. The loader calls
	// AfterTypeCheck (concurrently), providing us with a stream of
	// packages.
	lconf.AfterTypeCheck = func(info *loader.PackageInfo, files []*ast.File) {
		// AfterTypeCheck may be called twice for the same package due
		// to augmentation.

		defer clearInfoFields(info) // save memory

		wg.Add(1)
		defer wg.Done()

		pkg := strings.TrimSuffix(info.Pkg.Path(), "_test")

		// Only inspect packages that depend on the declaring package
		// (and thus were type-checked).
		if !lconf.TypeCheckFuncBodies(pkg) {
			return
		}

		// Record the query object and its package when we see
		// it. We can't reuse obj from the initial typecheck
		// because each go/loader Load invocation creates new
		// objects, and we need to test for equality later when we
		// look up refs.
		mu.Lock()
		if qobj == nil && pkg == defpkg {
			// Find the object by its position (slightly ugly).
			qobj = findObject(lconf.Fset, &info.Info, objposn)
			if qobj == nil {
				// It really ought to be there; we found it once
				// already.
				afterTypeCheckErr = fmt.Errorf("object at %s not found in package %s", objposn, defpkg)
			}
		}
		queryObj := qobj
		mu.Unlock()

		// Look for references to the query object. Only collect
		// those that are in this workspace.
		if queryObj != nil && collectPkg(pkg) {
			for id, obj := range info.Uses {
				if sameObj(queryObj, obj) {
					refs <- id
				}
			}
		}
	}

	// We don't use workgroup on this goroutine, since we want to return
	// early on context cancellation.
	done := make(chan struct{})
	go func() {
		// Prevent any uncaught panics from taking the entire server down.
		defer func() {
			close(done)
			_ = util.Panicf(recover(), "findReferences")
		}()

		lconf.Load() // ignore error
	}()

	select {
	case <-done:
	case <-ctx.Done():
	}

	// This should only wait in the case of the context being done. In
	// that case we are waiting for the currently running AfterTypeCheck
	// functions to finish.
	wg.Wait()

	if qobj == nil {
		if ctx.Err() != nil {
			return ctx.Err()
		}
		if afterTypeCheckErr != nil {
			// Only triggered by 1 specific error above (where we assign
			// afterTypeCheckErr), not any general loader error.
			return afterTypeCheckErr
		}
		return errors.New("query object not found during reloading")
	}

	return nil
}

// findReferencesPkgLevel finds all references to obj.
// It only returns references from packages in users.
// It is the analogue of globalReferrersPkgLevel
// from golang.org/x/tools/cmd/guru/referrers.go.
func (h *LangHandler) findReferencesPkgLevel(ctx context.Context, bctx *build.Context, fset *token.FileSet, users map[string]bool, pkgInWorkspace func(string) bool, obj types.Object, refs chan<- *ast.Ident) error {
	// findReferencesPkgLevel uses go/ast and friends instead of go/types.
	// This affords a considerable performance benefit.
	// It comes at the cost of some code complexity.
	//
	// Here's a high level summary.
	//
	// The goal is to find references to the query object p.Q.
	// There are several possible scenarios, each handled differently.
	//
	// 1. We are looking in a package other than p, and p is not dot-imported.
	//    This is the simplest case. Q must be referred to as n.Q,
	//    where n is the name under which p is imported.
	//    We look at all imports of p to gather all names under which it is imported.
	//    (In the typical case, it is imported only once, under its default name.)
	//    Then we look at all selector expressions and report any matches.
	//
	// 2. We are looking in a package other than p, and p is dot-imported.
	//    In this case, Q will be referred to just as Q.
	//    Furthermore, go/ast's object resolution will not be able to resolve
	//    Q to any other object, unlike any local (file- or function- or block-scoped) object.
	//    So we look at all matching identifiers and report all unresolvable ones.
	//
	// 3. We are looking in package p.
	//    (Care must be taken to separate p and p_test (an xtest package),
	//    and make sure that they are treated as separate packages.)
	//    In this case, we give go/ast the entire package for object resolution,
	//    instead of going file by file.
	//    We then iterate over all identifiers that resolve to the query object.
	//    (The query object itself has already been reported, so we don't re-report it.)
	//
	// We always skip all files that don't contain the string Q, as they cannot be
	// relevant to finding references to Q.
	//
	// We parse all files leniently. In the presence of parsing errors, results are best-effort.

	defpkg := strings.TrimSuffix(obj.Pkg().Path(), "_test") // package x_test actually has package name x
	defpkg = imports.VendorlessPath(defpkg)

	defname := obj.Pkg().Name()                    // name of the defining package of the query object, used for resolving imports that use import path only (common case)
	isxtest := strings.HasSuffix(defname, "_test") // indicates whether the query object is defined in an xtest package

	name := obj.Name()
	namebytes := []byte(name)          // byte slice version of query object name, for early filtering
	objpos := fset.Position(obj.Pos()) // position of query object, used to prevent re-emitting original decl

	find := h.getFindPackageFunc()

	var reterr error
	sema := make(chan struct{}, 20) // counting semaphore to limit I/O concurrency
	var wg sync.WaitGroup
	for u := range users {
		// Bail out early if the context is canceled
		if err := ctx.Err(); err != nil {
			reterr = err
			// Don't "return err" here;
			// doing so would allow the caller to close the refs channel,
			// which might cause a panic if there are existing searches in flight.
			// Instead, just decline to start any new goroutines.
			break
		}

		u := u                                    // redeclare u to avoid range races
		uIsXTest := strings.HasSuffix(u, "!test") // indicates whether this package is the special defpkg xtest package
		u = strings.TrimSuffix(u, "!test")

		// pkgInWorkspace is cheap and usually false; check it before firing up a goroutine.
		if !pkgInWorkspace(u) {
			continue
		}

		wg.Add(1)
		go func() {
			defer wg.Done()

			// Resolve package.
			// TODO: is fromDir == "" correct?
			sema <- struct{}{} // acquire token
			pkg, err := find(ctx, bctx, u, "", h.RootFSPath, build.IgnoreVendor)
			<-sema // release token
			if err != nil {
				return
			}

			// If we're not in the query package,
			// the object is in another package regardless,
			// so we want to process all files.
			// If we are in the query package,
			// we want to only process the files that are
			// part of that query package;
			// that set depends on whether the query package itself is an xtest.
			inQueryPkg := u == defpkg && isxtest == uIsXTest
			var files []string
			if !inQueryPkg || !isxtest {
				files = append(files, pkg.GoFiles...)
				files = append(files, pkg.TestGoFiles...)
				files = append(files, pkg.CgoFiles...) // use raw cgo files, as we're only parsing
			}
			if !inQueryPkg || isxtest {
				files = append(files, pkg.XTestGoFiles...)
			}

			if len(files) == 0 {
				return
			}

			var deffiles map[string]*ast.File // set of files that are part of this package, for inQueryPkg only
			if inQueryPkg {
				deffiles = make(map[string]*ast.File)
			}

			buf := new(bytes.Buffer) // reusable buffer for reading files

			for _, file := range files {
				if !buildutil.IsAbsPath(bctx, file) {
					file = buildutil.JoinPath(bctx, pkg.Dir, file)
				}
				buf.Reset()
				sema <- struct{}{} // acquire token
				src, err := readFile(bctx, file, buf)
				<-sema // release token
				if err != nil {
					continue
				}

				// Fast path: If the object's name isn't present anywhere in the source, ignore the file.
				if !bytes.Contains(src, namebytes) {
					continue
				}

				if inQueryPkg {
					// If we're in the query package, we defer final processing until we have
					// parsed all of the candidate files in the package.
					// Best effort; allow errors and use what we can from what remains.
					f, _ := parser.ParseFile(fset, file, src, parser.AllErrors)
					if f != nil {
						deffiles[file] = f
					}
					continue
				}

				// We aren't in the query package. Go file by file.

				// Parse out only the imports, to check whether the defining package
				// was imported, and if so, under what names.
				// Best effort; allow errors and use what we can from what remains.
				f, _ := parser.ParseFile(fset, file, src, parser.ImportsOnly|parser.AllErrors)
				if f == nil {
					continue
				}

				// pkgnames is the set of names by which defpkg is imported in this file.
				// (Multiple imports in the same file are legal but vanishingly rare.)
				pkgnames := make([]string, 0, 1)
				var isdotimport bool
				for _, imp := range f.Imports {
					path, err := strconv.Unquote(imp.Path.Value)
					if err != nil || path != defpkg {
						continue
					}
					switch {
					case imp.Name == nil:
						pkgnames = append(pkgnames, defname)
					case imp.Name.Name == ".":
						isdotimport = true
					default:
						pkgnames = append(pkgnames, imp.Name.Name)
					}
				}
				if len(pkgnames) == 0 && !isdotimport {
					// Defining package not imported, bail.
					continue
				}

				// Re-parse the entire file.
				// Parse errors are ok; we'll do the best we can with a partial AST, if we have one.
				f, _ = parser.ParseFile(fset, file, src, parser.AllErrors)
				if f == nil {
					continue
				}

				// Walk the AST looking for references.
				ast.Inspect(f, func(n ast.Node) bool {
					// Check selector expressions.
					// If the selector matches the target name,
					// and the expression is one of the names
					// that the defining package was imported under,
					// then we have a match.
					if sel, ok := n.(*ast.SelectorExpr); ok && sel.Sel.Name == name {
						if id, ok := sel.X.(*ast.Ident); ok {
							for _, n := range pkgnames {
								if n == id.Name {
									refs <- sel.Sel
									// Don't recurse further, to avoid duplicate entries
									// from the dot import check below.
									return false
								}
							}
						}
					}
					// Dot imports are special.
					// Objects imported from the defining package are placed in the package scope.
					// go/ast does not resolve them to an object.
					// At all other scopes (file, local), go/ast can do the resolution.
					// So we're looking for object-free idents with the right name.
					// The only other way to get something with the right name at the package scope
					// is to *be* the defining package. We handle that case separately (inQueryPkg).
					if isdotimport {
						if id, ok := n.(*ast.Ident); ok && id.Obj == nil && id.Name == name {
							refs <- id
							return false
						}
					}
					return true
				})
			}

			// If we're in the query package, we've now collected all the files in the package.
			// (Or at least the ones that might contain references to the object.)
			if inQueryPkg {
				// Bundle the files together into a package.
				// This does package-level object resolution.
				pkg, _ := ast.NewPackage(fset, deffiles, nil, nil)
				// Look up the query object; we know that it is defined in the package scope.
				pkgobj := pkg.Scope.Objects[name]
				if pkgobj == nil {
					panic("missing defpkg object for " + defpkg + "." + name)
				}
				// Find all references to the query object.
				ast.Inspect(pkg, func(n ast.Node) bool {
					if id, ok := n.(*ast.Ident); ok {
						// Check both that this is a reference to the query object
						// and that it is not the query object itself;
						// the query object itself was already emitted.
						if id.Obj == pkgobj && objpos != fset.Position(id.Pos()) {
							refs <- id
							return false
						}
					}
					return true
				})
				deffiles = nil // allow GC
			}
		}()
	}

	wg.Wait()

	return reterr
}

// classify classifies objects by how far
// we have to look to find references to them.
func classify(obj types.Object) (global, pkglevel bool) {
	if obj.Exported() {
		if obj.Parent() == nil {
			// selectable object (field or method)
			return true, false
		}
		if obj.Parent() == obj.Pkg().Scope() {
			// lexical object (package-level var/const/func/type)
			return true, true
		}
	}
	// object with unexported named or defined in local scope
	return false, false
}

// allowErrors causes type errors to be silently ignored.
// (Not suitable if SSA construction follows.)
//
// NOTICE: Adapted from golang.org/x/tools.
func allowErrors(lconf *loader.Config) {
	ctxt := *lconf.Build // copy
	ctxt.CgoEnabled = false
	lconf.Build = &ctxt
	lconf.AllowErrors = true
	// AllErrors makes the parser always return an AST instead of
	// bailing out after 10 errors and returning an empty ast.File.
	lconf.ParserMode = parser.AllErrors
	lconf.TypeChecker.Error = func(err error) {}
}

// findObject returns the object defined at the specified position.
func findObject(fset *token.FileSet, info *types.Info, objposn token.Position) types.Object {
	good := func(obj types.Object) bool {
		if obj == nil {
			return false
		}
		posn := fset.Position(obj.Pos())
		return posn.Filename == objposn.Filename && posn.Offset == objposn.Offset
	}
	for _, obj := range info.Defs {
		if good(obj) {
			return obj
		}
	}
	for _, obj := range info.Implicits {
		if good(obj) {
			return obj
		}
	}
	return nil
}

func usesOf(queryObj types.Object, info *loader.PackageInfo) []*ast.Ident {
	var refs []*ast.Ident
	for id, obj := range info.Uses {
		if sameObj(queryObj, obj) {
			refs = append(refs, id)
		}
	}
	return refs
}

// same reports whether x and y are identical, or both are PkgNames
// that import the same Package.
func sameObj(x, y types.Object) bool {
	if x == y {
		return true
	}
	if x, ok := x.(*types.PkgName); ok {
		if y, ok := y.(*types.PkgName); ok {
			return x.Imported() == y.Imported()
		}
	}
	return false
}

// readFile is like ioutil.ReadFile, but
// it goes through the virtualized build.Context.
// If non-nil, buf must have been reset.
func readFile(ctxt *build.Context, filename string, buf *bytes.Buffer) ([]byte, error) {
	rc, err := buildutil.OpenFile(ctxt, filename)
	if err != nil {
		return nil, err
	}
	defer rc.Close()
	if buf == nil {
		buf = new(bytes.Buffer)
	}
	if _, err := io.Copy(buf, rc); err != nil {
		return nil, err
	}
	return buf.Bytes(), nil
}

redpajama_set_name: RedPajamaGithub


text:
Domestic violence legislation needs revisiting OPINIONS, page 12 Hop on the food truck wagon ARTS & LIFE, page 21 By MATTHEW SMITH Contributing Writer Emotions ran high during a DePaul University community meeting held on Thursday to discuss DePaul's proposed Kenmore Green project. Members of the community packed into the auditorium in the Arts & Letters building in order to hear conclusions from DePaul, the Chicago Department of Transportation and the companies responsible for the study and planning of the project. Allan Mellis of the Wrightwood Neighbors Association was one of the more vocal opponents to the plan. "Tonight, I have not heard any By LISA COLEMAN Contributing Writer October is Breast Cancer Awareness Month, and DePaul organizations, including its sports teams, are working towards spreading awareness and raising money to help combat the disease. Several DePaul sports teams such as soccer, basketball and Softball will have at least one game throughout the year dedicated to promoting cancer awareness. Last week, the DePaul women's soccer team had a home game in which all players wore pink jerseys. A table was setup outside mitigation to the parking issue, or the traffic flow issue associated with this plan," said Mellis. "We are asking that DePaul continues to be a good neighbor to us, as we have to you". The project, which was initially part of DePaul's 2009 Master Plan, would close Kenmore Avenue between Fullerton and Belden Avenues in order to create a pedestrian mall and green space. The project would eliminate 47 unregulated and free parking spaces on the street, much of which is utilized by DePaul students and faculty. Many community members expressed concern that the elimination of these spaces would push the commuting students to park on other streets near campus and further exasperate the already frustrating parking situation in the -DePaulia Kenmore closure a greater task than expected densely populated neighborhood. Another concern was the impact to the traffic at Sheffield There's always going to be traffic, there's always going to be trouble parking. But when we overall enhance on-campus life, we enhance our neighborhood." MARTY OBERMAN, former Lincoln Park alderman and Fullerton, which is already a bottleneck and could be I DePauliaOnline.comJ DePauliaOnline.comJ DePauliaOnline.comJ Spread th% word DePaul raises awareness for a cure Wish Field selling items to promote breast cancer awareness. In addition to the sports teams showing their support, there are other organizations working to spread the word about breast cancer. Colleges Against Cancer (CAC) is an organization on campus that works exclusively with the American Cancer Society to promote awareness. They also do fundraising for certain events, give out information and talk about prevention or what to do if you are diagnosed with cancer. Breast cancer hits close to home for one DePaul student and CAC member. Freshman Sarah Vallee lost her mother to the disease when she was a little kid. "No one should have to lose their parent, especially to cancer," she said. According to the National Breast Cancer Foundation, in the United States, breast cancer is the most commonly diagnosed cancer in women, with one out of every eight women being diagnosed with the cancer sometime in their lifetime. "Be pro-active. Do monthly screenings and check yourself," said Catie Mandoza, CAC president. While efforts are being made by DePaul organizations to spread awareness about See AWARENESS, Allan Mellis of the Wrightwood Neighbors Association was among community members at a meeting Thursday, Oct. 11 to discuss the permanent closure of Kenmore Avenue. compounded by the closure of found that the intersection was Kenmore. The study conducted the most congested in the study by the firms Kenig, Lindgren, O'Hara, Aboona Incorporated See page 6 MATTHEW SMITH The DePaulia KENMORE, page 6
Issue number 6
Transcript Domestic violence legislation needs revisiting OPINIONS, page 12 Hop on the food truck wagon ARTS & LIFE, page 21 By MATTHEW SMITH Contributing Writer Emotions ran high during a DePaul University community meeting held on Thursday to discuss DePaul's proposed Kenmore Green project. Members of the community packed into the auditorium in the Arts & Letters building in order to hear conclusions from DePaul, the Chicago Department of Transportation and the companies responsible for the study and planning of the project. Allan Mellis of the Wrightwood Neighbors Association was one of the more vocal opponents to the plan. "Tonight, I have not heard any By LISA COLEMAN Contributing Writer October is Breast Cancer Awareness Month, and DePaul organizations, including its sports teams, are working towards spreading awareness and raising money to help combat the disease. Several DePaul sports teams such as soccer, basketball and Softball will have at least one game throughout the year dedicated to promoting cancer awareness. Last week, the DePaul women's soccer team had a home game in which all players wore pink jerseys. A table was setup outside mitigation to the parking issue, or the traffic flow issue associated with this plan," said Mellis. "We are asking that DePaul continues to be a good neighbor to us, as we have to you". The project, which was initially part of DePaul's 2009 Master Plan, would close Kenmore Avenue between Fullerton and Belden Avenues in order to create a pedestrian mall and green space. The project would eliminate 47 unregulated and free parking spaces on the street, much of which is utilized by DePaul students and faculty. Many community members expressed concern that the elimination of these spaces would push the commuting students to park on other streets near campus and further exasperate the already frustrating parking situation in the -DePaulia Kenmore closure a greater task than expected densely populated neighborhood. Another concern was the impact to the traffic at Sheffield There's always going to be traffic, there's always going to be trouble parking. But when we overall enhance on-campus life, we enhance our neighborhood." MARTY OBERMAN, former Lincoln Park alderman and Fullerton, which is already a bottleneck and could be I DePauliaOnline.comJ DePauliaOnline.comJ DePauliaOnline.comJ Spread th% word DePaul raises awareness for a cure Wish Field selling items to promote breast cancer awareness. In addition to the sports teams showing their support, there are other organizations working to spread the word about breast cancer. Colleges Against Cancer (CAC) is an organization on campus that works exclusively with the American Cancer Society to promote awareness. They also do fundraising for certain events, give out information and talk about prevention or what to do if you are diagnosed with cancer. Breast cancer hits close to home for one DePaul student and CAC member. Freshman Sarah Vallee lost her mother to the disease when she was a little kid. "No one should have to lose their parent, especially to cancer," she said. According to the National Breast Cancer Foundation, in the United States, breast cancer is the most commonly diagnosed cancer in women, with one out of every eight women being diagnosed with the cancer sometime in their lifetime. "Be pro-active. Do monthly screenings and check yourself," said Catie Mandoza, CAC president. While efforts are being made by DePaul organizations to spread awareness about See AWARENESS, Allan Mellis of the Wrightwood Neighbors Association was among community members at a meeting Thursday, Oct. 11 to discuss the permanent closure of Kenmore Avenue. compounded by the closure of found that the intersection was Kenmore. The study conducted the most congested in the study by the firms Kenig, Lindgren, O'Hara, Aboona Incorporated See page 6 MATTHEW SMITH The DePaulia KENMORE, page 6

redpajama_set_name: RedPajamaCommonCrawl


text:
Home man city Man City target landmark treble as UEFA probe looms
Man City target landmark treble as UEFA probe looms
Manchester City are on the brink of a domestic treble, with only Watford standing in their way in Saturday's FA Cup final, but a potentially historic season risks being overshadowed by several probes into the club's off-field conduct.
Manchester City's Spanish manager Pep Guardiola holds up the Premier League trophy as he's surrounded by his staff after their 4-1 victory in the English Premier League football match between Brighton and Hove Albion and Manchester City at the American Express Community Stadium in Brighton, southern England on May 12, 2019. – Manchester City held off a titanic challenge from Liverpool to become the first side in a decade to retain the Premier League on Sunday by coming from behind to beat Brighton 4-1 on Sunday. (Photo AFP)
City became the first side in a decade to retain the Premier League title last weekend, holding off Liverpool by a single point at the end of a thrilling race thanks to a run of 14 consecutive league wins to end the season.
Pep Guardiola's men also retained the League Cup in February, the first leg of their potential domestic clean sweep, which has never before been done in England.
However, the club have spent much of the week preceding the Wembley showcase responding to reports that they could be set for a season's ban from the Champions League over alleged breaches of financial fair play rules.
The case was referred to UEFA's adjudicatory chamber on Thursday to decide what sanction, if any, should be imposed. City replied, saying they were "disappointed, but regrettably not surprised" by the move from European football's governing body.
Defiant Liverpool turn to Euro dreams as title bid ends in frustration
Reports by German publication Der Spiegel had alleged that City, bankrolled by Sheikh Mansour, a member of Abu Dhabi's royal family, set up sponsorship deals to circumvent regulations limiting how much money owners can put into a club.
However, that is not the only current investigation into City's practices off the field.
Guardiola beats Klopp to manager of the year award
England's Football Association said in February it was investigating allegations that City paid £200,000 ($256,000) to Borussia Dortmund winger and England international Jadon Sancho's agent when the player was 14.
FA rules state that young players cannot be represented by an agent until the year they turn 16.
And the English champions could be hit with a two-window transfer ban by FIFA over the recruitment of foreign minors and alleged breaches of third-party ownership.
"I'm not too much concerned or worried about what people say," City boss Guardiola previously insisted when questioned whether the investigations threaten to taint his legacy at the club.
"If we have made mistakes we will be punished — it is what it is, on and off the pitch — but I'm pretty sure what we have done is incredible."
– Record-breakers –
Guardiola's side have smashed a host of records during his three-year spell in charge, despite a disappointing trophyless debut campaign in England.
However, a first-ever clean sweep of League Cup, Premier League and FA Cup would give this City side a claim to be the best England has ever produced.
"I'm desperate, desperate, desperate to win the FA Cup. You don't even know how much it's a priority," said City captain Vincent Kompany after lifting the Premier League last weekend.
Kompany could make his final City appearance at Wembley with the Belgian's contract up in the summer and no new deal agreed as yet.
City won their fifth FA Cup in 2011, the first silverware since Sheikh Mansour's takeover, but will be wary of complacency after slipping up against Wigan at Wembley in 2013.
In contrast to City's trophy-laden decade, Watford have never won a major trophy.
And despite losing twice to Guardiola's men in the league this season, Hornets boss Javi Gracia, whose side mounted an impressive comeback to beat Wolves in the semi-final, is taking heart from both games.
"I think it showed us it's possible," said the Spaniard. "We lost both games but I think we showed that we can beat them.
"We competed really well in both games in different moments. In the first game we lost 2-1 but we competed until the end and had chances at the end. In the second one we kept the result until the second half and then they scored from an offside position and the game changed."
Previous article Constituents to Ekweremadu: We're the one to decide your political position in 2023
Next article Land encroachment : Communities beg Buhari, Amosun to stop Chinese now


V-Ray has single-handedly changed the face of Architectural Visualization. Neoscape has been using it in production since its very first release, and we continue to use it in all of our work. It is full of relevant and robust features, while remaining speedy and easy to use. I can not imagine working without it.
V-Ray for C4D by LAUBlab brings the power of V-Ray to Cinema 4D. V-Ray offers the fastest rendering technology in the world and has single handedly transformed the architectural and advertising industry. Take your renderings to the next level with V-Ray for Cinema 4D.
* Full VRay 1.6 core standalone integration into Cinema 4D.
* Windows and OSX versions.


text:
Q: Wondering how to show the role added within a command inside of an embed I'm trying to define the role added and add it into an embed.
Like, the role added within that command
Looked on google, nothing, Looked on here and the same result.
if(cmd === `${prefix}warn`){
var role1 = message.guild.roles.find(role => role.name === "Warning 1");
var role1 = message.guild.roles.find(role => role.name === "Warning 2");
  var role1 = message.guild.roles.find(role => role.name === "Warning 3");
  if(!message.member.roles.some(r=>["Staff"].includes(r.name)) )
  return message.reply("ERROR | You do not have sufficient permissions to
  do this command.");
  if(!member)
  return message.reply("ERROR | Unable to find the user you mentioned.");
  if(!reason)
  return message.reply("ERROR | To use this command, you need to specify
  a reason.");
  if rUser.roles.some(r=>["Warning 3"].includes(r.name))
    return rUser.kick
  if rUser.roles.some(r=>["Warning 2"].includes(r.name))
    return rUser.addRole(role3)
  if rUser.roles.some(r=>["Warning 1"].includes(r.name))
    return rUser.addRole(role2)
  if (!rUser.roles.some(r=>["Warning 1"].includes(r.name)) )
    return rUser.addRole(role1)
await message.channel.send("Command processed. (WARN)")
 let warnEmbed = new Discord.RichEmbed()
 .setColor("#FFD700")
 .setDescription("Warn")
 .addField("Warned User", `${member}`)
 .addField("Warned By", `${message.author}`)
 .addField("Reason", `${reason}`);
 .addField("Warning issued", `${}`)
 let sendchannel = message.guild.channels.find(`name`, "action-log");
 return sendchannel.send(warnEmbed);

Right at the bottom where it says "Warning issued" I want it to show the role added at that time.

A: Just make a return of a embed on each if
 if (cmd === `${prefix}warn`) {
    var role1 = message.guild.roles.find(role => role.name === "Warning 1");
    var role2 = message.guild.roles.find(role => role.name === "Warning 2");
    var role3 = message.guild.roles.find(role => role.name === "Warning 3");
    if (!message.member.roles.some(r => ["Staff"].includes(r.name)))
        return message.reply("ERROR | You do not have sufficient permissions to do this command.");
    if (!member)
        return message.reply("ERROR | Unable to find the user you mentioned.");
    if (!reason)
        return message.reply("ERROR | To use this command, you need to specify a reason.");
    let sendchannel = message.guild.channels.find(`name`, "action-log");
    if (rUser.roles.some(r => ["Warning 2"].includes(r.name))) {
        let warnEmbed = new Discord.RichEmbed()
            .setColor("#FFD700")
            .setDescription("Warn")
            .addField("Warned User", `${member}`)
            .addField("Warned By", `${message.author}`)
            .addField("Reason", `${reason}`)
            .addField("Warning issued", `${role3}`)
        await rUser.addRole(role3)
        return sendchannel.send(warnEmbed);
    }
    if (rUser.roles.some(r => ["Warning 1"].includes(r.name))) {
        let warnEmbed = new Discord.RichEmbed()
            .setColor("#FFD700")
            .setDescription("Warn")
            .addField("Warned User", `${member}`)
            .addField("Warned By", `${message.author}`)
            .addField("Reason", `${reason}`)
            .addField("Warning issued", `${role2}`)
        await rUser.addRole(role2)
        return sendchannel.send(warnEmbed);
    }
    if (!rUser.roles.some(r => ["Warning 1"].includes(r.name))) {
        let warnEmbed = new Discord.RichEmbed()
            .setColor("#FFD700")
            .setDescription("Warn")
            .addField("Warned User", `${member}`)
            .addField("Warned By", `${message.author}`)
            .addField("Reason", `${reason}`)
            .addField("Warning issued", `${role1}`)
        await rUser.addRole(role1)
        return sendchannel.send(warnEmbed);
    }
}

redpajama_set_name: RedPajamaStackExchange


Group of Captain Silas Wallace Items, c. late 19th century, a GAR medal and eleven images of Captain Wallace in camp and with his 1st New Hampshire Light Battery in action.
Note: Captain Wallace served in the 14th New Hampshire from 1862 until he was discharged at Savannah, Georgia, in July 1865. He later went on to be an officer and battery commander in the New Hampshire National Guard.


text:
Illinois ►
Altona ►
Altona United Methodist Church
Altona IL
United Methodist Churches in Altona, IL
United Methodist Churches in Illinois
United Methodist Churches in United States
All churches in Altona, IL
Altona United Methodist Church is serving the Altona community and engaging and encouraging others through a life-changing journey in Altona, Illinois.
Our mission is to nurture a diverse and welcoming community, committed to following fearlessly wherever God is leading us and make Disciples of Jesus Christ for the transformation of Altona and the world!
N/a P.o. Box 259
Altona, IL 61414
David H Pyell
Download Pastor David H Pyell vCard
Deuteronomy 6:5
And thou shalt love the LORD thy God with all thine heart, and with all thy soul, and with all thy might.
Click here to contact David H Pyell
David H Pyell on Social Media:
N/a P.o. Box 259, Altona, IL
Altona United Methodist Church Service Times
Altona United Methodist Church service times last updated on the 25th of April, 2016
Altona United Methodist Church - Altona, Illinois
History of Altona United Methodist Church, Altona IL
Page administrator
Click here to send email
"Every great movement of God can be traced to a kneeling figure."
Altona United Methodist Church listing was last updated on the 25th of April, 2016
THANK YOU FOR VISITING ALTONA UNITED METHODIST CHURCH ONLINE!
Altona United Methodist Church Accelerated Mobile Page (AMP)
This church page is missing service times. Please help this page visitors by submitting Altona United Methodist Church Service Times. Thank you!
Altona United Methodist Church Contact Form
Subscribe to Altona United Methodist Church updates
Subscription to Altona United Methodist Church updates
As soon as Altona United Methodist Church updates this page, you'll be notified by email.
Thank you for confirming you've been to Altona United Methodist Church
Thank you for confirming you were baptized at Altona United Methodist Church
Thank you for confirming you were married at Altona United Methodist Church
Thank you for confirming you belong to Altona United Methodist Church


We're big believers in more is more (especially when it comes to color and costumes), but minimalism definitely has its place, too. The trend was ALL over the runways at this year's NYFW and it is an easy, non-intimidating trend that works everywhere from the office to first dates. Here are 10 accessories we love that are simple and gorgeous.
1. Geometric Jewelry Kit ($35): This kit comes with all the supplies you need to make four of your very own delicate copper or gold jewelry pieces. We love the idea of rounding up your pals for a DIY-night alternative to going out.
2. Diamond Dusted Studs ($50): Available in sterling silver, noir silver, gold and rose gold, these gorgeous stud earrings will add subtle sparkle to your everyday look.
3. North Star Necklace ($40): Stay golden with this simple gold-filled chain + bead necklace. We love this one layered with a shorter, more colorful piece or worn backwards with a plunging back dress for a hot date look.
4. Lil Whirl Mid Ring ($18): Wrap this pretty hand-crafted ring around your mid finger for an elegant + sophisticated jewelry look.
5. Heart Bracelet ($20): How sweet is this dainty heart bracelet? Pick it up in gold or silver for the perfect feminine touch to your outfit.
6. Shapes Brass Earring Set ($20): These tiny hammered brass earrings come in hexagons, triangles, squares + circles with gold-plated posts.
7. Handwritten Initial Necklace ($74): Each of these initial necklaces is carefully crafted and dipped in either 18k or rose gold. Pair it with other jewels or rock it on its own for minimalist style.
8. Crescent Ring ($22): This pretty ring looks smart stacked or worn alone. Buy a bunch and stash them in stockings for your best friends before the holidays.
9. Love + Joy Bracelet ($22): Silk cord and 18k gold-filled beads make up this pretty adjustable bracelet. Get yours in tangerine or red for a pop of color.
10. Gold Curved Bar Necklace ($36): We envision this piece with a bold primary hued dress for work or with a chic LBD for a night out dancing.
Which of our minimalist jewelry picks is your fave? Let us know in the comments!


text:
package at.stefangeyer.challonge.model.query.wrapper;

import at.stefangeyer.challonge.model.query.ParticipantQuery;

import java.util.List;

/**
 * Wrapper for easy JSON serialisation of a list of ParticipantQuery
 *
 * @author Stefan Geyer
 * @version 2018-07-08
 */
public class ParticipantQueryListWrapper {
    private List<ParticipantQuery> participants;

    public ParticipantQueryListWrapper(List<ParticipantQuery> participants) {
        this.participants = participants;
    }

    public List<ParticipantQuery> getParticipants() {
        return this.participants;
    }
}


text:
ShawCor Receives Letter of Intent for the Pipe Coating of the Ichthys Gas Export Pipeline
ShawCor Ltd.
22 Nov, 2011, 18:38 GMT
TORONTO, November 22, 2011 /PRNewswire/ --
(TSX: SCL.A, SCL.B)
ShawCor Ltd. (TSX: SCL.A, SCL.B) today announced that its pipecoating division, Bredero Shaw, has received a letter of intent from Mitsui & Co., Ltd. to provide pipeline coatings and related products and services for the gas export pipeline on the Ichthys Gas Field Development Project. The letter of intent is conditional on a Final Investment Decision ("FID") by the Ichthys partners, Inpex Corporation and Total E&P, and the receipt of a purchase order and definitive production schedule detailing the start of production and the project duration. Based on current estimates, the Company's scope of work for the project is expected to exceed US$400 million.
The Ichthys gas export pipeline will transport production from the offshore central processing facility through a subsea pipeline to the onshore LNG facility to be located at Blaydin Point, Darwin, Northern Australia. The pipe coating will involve approximately 900 km of 42" pipe that will be protected with Asphalt Enamel coating, SureFlo™ internal coating and HeviCote® concrete weight coating. The Company will execute the work at Bredero Shaw's facilities in Kabil, Indonesia and Kuantan, Malaysia.
The Kabil and Kuantan facilities are technology-based, full service coating plants that were built specifically to process large, complex projects in the Asia Pacific region.
ShawCor Ltd is an energy services company specializing in products and services for the pipeline and pipe services and the petrochemical and industrial segments of the oil and gas industry. The company operates through seven divisions with over seventy manufacturing and service facilities located around the world.
Bredero Shaw, ShawCor's largest division, is the global leader in pipe coating solutions and employs approximately 4,000 permanent and contract personnel located at offices and facilities in fifteen countries. The division provides specialized coating systems and related services for corrosion protection, insulation and weight coating applications on land and marine pipelines including highly engineered corrosion and insulation systems for deepwater applications.
This news release contains forward-looking information within the meaning of applicable securities laws. Words such as "may", "will", "should", "anticipate", "plan", "expect", "believe", "predict", "estimate" or similar terminology are used to identify forward-looking information. This forward looking information is based on assumptions, estimates, and analysis made in the light of the company's experience and its perception of trends, current conditions and expected developments, as well as other factors that are believed by the company to be reasonable and relevant in the circumstances. Forward looking information involves known and unknown risks, uncertainties and other factors which may cause actual results, performance or achievements to be materially different from those predicted, expressed, or implied by the forward-looking information. The risks and uncertainties include, among other things, changes in global economic activity and changes in energy supply and demand which impact on the level of drilling activity and pipeline construction; political, economic and other risks arising from international operations; compliance with environmental, trade and other laws; liability claims; fluctuations in foreign exchange rates and fluctuations in raw material prices, as well as other risks and uncertainties that are more fully described in the company's Annual Information Form, annual and quarterly reports and other reports and filings made with securities regulatory authorities and available at http://www.sedar.com.
Gary Love
Vice President, Finance and CFO
Email: glove@shawcor.com
Website: http://www.shawcor.com
SOURCE ShawCor Ltd.


The surface-mounted downlight belongs to the category of ceiling lamps and is mounted to the ceiling accordingly. Unlike with the recessed spotlights, there is no retreat in the ceiling necessary, the downlight is attached directly to the surface.
Design downlights are often modest in design and therefore excellently suited to draw attention to the room itself, which is being lit. Thanks to its construction, it is possible to highlight certain sections of a room, like a particular corners or a special item, using direct light. That way, one can achieve remarkable effects or create a pleasant mood. If you combine several surface-mounted downlights, a room can be illuminated very evenly, while keeping a comfortable atmosphere. With the individual arrangement of downlights you can adjust the lighting entirely according to your individual needs.
The temperate design allows countless combinations: a neutral lamp adapts to a variety of decorating styles and is never misplaced. The Italian manufacturer Flos with its department Flos Architechtural provides very tasteful surface-mounted downlights, which are available in modern, modest or rustic colors. The low key design does of course not apply for all models: The Pelota downlight by Linea Light convinces with its futuristic design and enriches the environment with that certain something.
Some surface-mounted downlights are also adjustable and thus maximize flexibility. So you can illuminate different things using direct spotlight, and change your mind about what you want to enlighten, adjusting the downlight with a single touch. With multi-lamp, adjustable surface-mounted downlights, the possibilities are almost endless. Depending on the number of illuminants, you can multiply the illumination and also choose freely what you would like to light.
Thanks to the latest LED technology, most manufacturers offer their surface-mounted downlights also with LED bulbs. With regard to energy efficiency and lifetime, LEDs are always the best choice. It pays off in the end, not only on the electricity bill. LED surface-mounted downlights are most economical.


When the lionesses of Africa roar!
MASERU – Thinking outside the box. That has been the key to success over the years for 'Matokelo Seturumane, the Managing Director of Thaba-Bosiu Risks Solutions.
From a mere claims clerk, Seturumane is now in charge of one of the biggest insurance brokers in Lesotho.
"I had no idea about insurance broking but I learned the job while working there, climbed the ladder and was appointed a director of the company," Seturumane says.
She was the only woman serving in the company's board.
Seturumane says she dislikes the phrase 'woman empowerment' because it suggests that women are powerless hence the need to give them power.
Women are powerful, she argues.
But for them to be effective, they must think out of the box.
She urges women in business to be focused and persistent.
"Believe in yourselves and everything will fall into place," Seturumane says.
Seturumane was speaking at the second Lioness of Africa Lean-In Campaign, a continent-wide programme that targets women entrepreneurs.
The programme brings together women in key cities to listen to successful women business brand builders, share their stories, to inspire one another, and to network and connect for business success.
The head of Personal and Business Banking at Standard Lesotho Bank, Selloane Tsike, says the bank had set aside M1.9 million to boost businesses owned and run by women.
Tsike says the idea is to get women out of the gorge of poverty and enable them to start businesses.
"The initiative is meant to inspire young women and those that are aspiring to be entrepreneurs," Tsike says.
"The Lioness of Africa was launched (in Lesotho) last year to create economic empowerment," she says.
Tsike says the bank realised that for women to contribute to the growth of the economy, they need support.
She says the bank wants to give women a platform to share the challenges they have while they build each other.
"The bank says Africa is our home and (these women) drive its growth," she says.
Tsike urged the women to connect with each other, share business ideas and experiences with the motive to build big businesses that will be all over Africa or maybe worldwide.
The initiative is one of investing in women of Lesotho, she says.
The Chief Executive Officer of Lioness of Africa, Melanie Hawken, says she has been an entrepreneur for the past 35 years and has learnt that access to markets is one of the challenges faced by women across the continent.
Several prominent but small businesswomen managers told stories of their successes and the challenges they passed when they started businesses.
A former principal secretary, 'Malerato Khoeli, who is now running the Riverside Fresh Farm Produce, says she quit the civil service to start a business after she realised the future lay in agriculture.
Khoeli started a small agricultural business in 2014 while she was still a civil servant.
"There is a market and there has always been. Now my business has grown seven times bigger," Khoeli says.
"I have employed 10 people and this means I am making a difference in the economy," she says.
She says her dream is to grow bigger and be able to supply the whole of Lesotho with pork, chicken and eggs.
Over the last four year she has worked on the project without any salary, paying workers only, until this year when she started paying herself.
The Technical Director of TP Technologies and Co-Founder, Baile Seakhoa, says it is gratifying to notice that women are slowly being recognised in the country.
Unlike other women, she decided to do something that most women find challenging – Information Technology.
"I did different courses abroad until I reached where I always wanted. I came back into the country when it was led by the military regime. There was peace then," Seakhoa says.
Seakhoa applied for a job and gained experience at Telecom Lesotho.
She also tried many other business ventures like poultry but her passion was always in Information Technology.
While working at Telecom Lesotho, she formed TP Technologies which has been running for six years now.
She says her "vision was to see Lesotho advancing in many ways related to ICT".
She encouraged women to spend little time sleeping but more time working because a lot happens while they are sleeping.
A board member at Standard Lesotho Bank, 'Mannete Ramaili, says she will be very happy if one woman's bank account is equal to those of four men.
"I learned also that money is not a problem, what is needed is technical skills and perseverance," Ramaili says.


What will I find in my CSA share each week?
A selection of seasonal fresh vegetables and fruits. In the spring CSA, due to our growing conditions, this will be a set basket chosen by us, your farmers. The Market CSA model for the summer and fall CSA seasons will provide opportunity for you to choose most of your weekly veggies; check out the example below. If you sign up for an add-on (goat cheese, eggs, PYO flowers, pork sausage) you will recieve it each week with your veggie pickup.
Other items like meat, seedlings, compost, and MSF swag can all be purchased in our farmstand.
The summer and fall CSA pick-up will be similar to a farmers market, in that you'll be able to choose most of your vegetables from display boxes. For an example of what that might look like, check out the answer to the question above. Some products will be previously bagged (e.g. salad greens). The spring CSA will have more products already weighed and set aside for you. When you arrive on the farm we have a well-marked area designated for pickup. A farmer will always be there to help, answer questions, provide recipe ideas, and tell a good farm story from the week.
What if I don't like a particular vegetable?
During the spring CSA season, there will be a swap box at the time of pick-up where you can put an item you know you won't eat and grab something else off of it that you might like more. With our Market Style CSA model for the summer and fall seasons, we hope you will get exactly the veggies you are excited about, though we will always challenge you to try something new (and provide recipes for it, of course!).
What should I use to bring home my produce? Will they be bagged for me?
We ask that you bring a bag or bags with you in which to take your CSA share home, however we will have farm boxes available for those times you forget.
What if I am on vacation for a week(s)?
I signed up for just one season of the CSA and loved it--can I sign up for more?
Absolutely! You can sign up (as long as there is still space) for a CSA any time before it begins.
Do I need to pay for the CSA in full at the time of enrollment?
Credit Card and Debit Card: Payment required in full at the time of enrollment.
Option 3 Fall CSA: Pay with two checks. Take the total cost of your CSA and divide by two. Send two checks to us, one check dated at the time of enrollment, a second check dated August 15th.
Option 4 Both Summer and Fall CSA signup: Pay with four checks. Take the total cost of your CSA seasons and divide by four. Send 4 checks to us, one check dated at the time of enrollment and 3 more checks dated June 5th, July 5th, August 15th.
What is the difference between the weekly CSA and Farm Bucks?
Members of the CSA receive a weekly basket of vegetables and fruits during a specified time period as well as, depending on the season, eggs, goat cheese, and flowers. During the spring CSA season this is a set basket picked up at the farm on Thursdays from 3-7pm. During the summer and fall CSA seasons, members have lots of choice at pickup, also on Thursdays from 3-7pm. Members receive 20% off retail prices. In addition, members receive a newsletter with recipes and farm happenings.
Farm Bucks are available for purchase online or at the farm and participants receive an additional 10% or 15% dfepending on how much they spend. Farm Bucks can be used on any product we sell in the farm stand and have no expiration date. They can be purchased at any point in the year. Entered into the participants account, Farm Bucks are easy to keep track of; no need to bring money to the farm stand as money is already in your account! Account holders recieve emailed receipts with each purchase made while logged in and can accrue a negative balance which should be paid off by the end of each month.
The CSA has already started, but I saw the flowers blooming and the sausage in the stand and would love to add them to my weekly bounty--can I do that?
Just give us a call, send an email, or let us know when you pickup that you would like to sign up for an add-on to your share. We can prorate the cost to fit the remaining time in the CSA season. Add-ons include weekly distributions of: PYO flowers, goat cheese, eggs, and pork sausage.
When will I know what is in my share?
We send out the weekly CSA email on Mondays. The email will include the contents of the weeks share (or what you can expect to choose from), farm happenings, photos, and a recipe or two for you to try. Occasionally we have to make a last minute change to the selections and will have it written on the CSA board at pick-up.
What if I don't know how to use a particular vegetable?
Our hope is to provide you with nutritious, tasty, fresh food, some of which you might already use regularly, however know there may be some unfamiliar items. We hope the recipe(s) and information provided in the newsletter will provide some ideas of how to use what is in your share. You can also ask the farmer at pickup!
Blueberries, beans and flowers (add-on) are some of the PYO crops we typically offer through the CSA. We advise folks to wear footwear that can get a little dirty and clothing suitable for moving around in. We will provide scissors, knives, and/or buckets to be used if they are necessary. In the weekly newsletter it will be clear what is PYO. There will be weeks with no PYO items and then there might be a week with up to two PYO crops. The PYO fields are close the the pick-up area and you'll need about 10-20 minutes. If you are unable to PYO on that day you can come back anytime that week to grab your goodies.
What if I realize that I missed my pick-up?
Give us a call or stop by, we will hold on to shares not picked up for 24 hours. After that we donate your share to the local food pantry.
What if I want extra of a particular vegetable to make a big meal or canning/fermenting/freezing?
There will be opportunities throughout the season to purchase items in bulk for canning, freezing, and soups. Keep an eye out for this in emails or signs at pickup.
If not full, online signups will close 5 days before the CSA season (spring, summer or fall). If you are interested in signing up after the online registration has closed, contact us via phone at (603)-444-0786.
Where do I go to pick up my box? Can I pick up somewhere other than the farm?
The main place to pick up a CSA share is at the farm. When you enter the farm, look for the CSA signs for the pickup location; it should be obvious. We have drop-off points in Lancaster (Wednesdays) and Gorham (Tuesdays) and will establish one in Lincoln if there is enough interest. If one of these pickup points interests you, you can indicate that When signing up for a CSA share.
What will I eat in the winter????
As farmers we continue to work hard to extend the season, but do not currently have a winter CSA--though it might happen this year! However, our stand is open 365/8-5:30. Our Farm Bucks program is a great way to shop at the stand and still get a 10%-15% discount on all items in the wintertime.
Is the quality better in the stand than the farm share? Are the offerings different?
We strive to provide the freshest produce possible to all of our customers whether it be a CSA member, farmstand visitor, wholesale account, or restaurant account. The quality does not differ between each outlet. In some cases we might offer B grade carrots or tomatoes to the CSA and it will indicated in the weekly newsletter (and we will count it as a lesser value in calculating the share size).
MSF is open 7 days a week, 365 days a year, from 8:00 am - 5:30 pm. The animals don't take holidays and neither do we! You are more than welcome to come visit us and walk around the farm anytime during business hours. During the months without snow, there is a free-of-charge self guided tour you can take found at the kiosk outside the farmstand. If you would like a farmer-led tour for your school or organization, give us a call or send us an email.
Are there herbs in my share?
Bunches or bags of herbs will show up in your share ideally on a weekly basis. Basil, cilantro, and parsley are the main herbs that we grow as well as some chives and dill. If you would like larger quantities of an herb (pesto making!), contact us via email or phone or inquire at pick-up.
How does produce vary over the seasons in Northern NH?
We wish we could provide everything all year long without breaking the bank. We grow seasonally and are able to provide vegetables and crops that generally go with the seasons. If you look at the CSA descriptions, you will get a better idea of what is available and when.
You can also check out a what we grew in 2018 below!


The Asus Strix GL502VT-DS74 is a laptop designed for gamers and multimedia enthusiasts who are looking for lightweight and thin laptop on-the-go. The Microsoft Windows 10 system features a 2,6 GHz Intel Core i7-6700HQ processor, an Nvidia GeForce GTX 970M, 16 GB DDR4 dual channel RAM, a 128 GB Lite-On SSD and a 1 TB hard drive. The chassis made out of black brushed aluminum with a black and neon orange ROG logo in the center of the lid is rated as above average in its quality and rigidity. The 15.6- inch Full HD IPS display with 1920 x 1080 pixel resolution provides rich colors, deep contrast and sharp details. Thus, it is suitable for gaming and watching movies. In addition, it comes with 4 different profiles; Normal, Eye Care, Manual and Vivid. The keyboard with backlight is easy and comfortable to type on and the touchpad is spacious, responsive and quick. The connectivity includes three USB 3.0 ports, a USB-C Gen 2 port, an HDMI port, a mini DisplayPort, a combo audio jack, a microphone/headphones jack and a micro SDXC card reader. The laptop weighs 2.491 kg and its battery life can last up to 5:56 hours on Wi-Fi surfing.
Thin, but not too thin. Asus seems to have struck a perfect balance in the race for a thinner and thinner gaming notebook while still maintaining case rigidity and enthusiast-level Nvidia GPU options. Inevitably, some important features have been omitted along the way.
Positive: Profession workmanship for gamers; comfortable keyboard and touchpad; impressive color; easy to unpack and upgrade hardware; good speakers; long battery life. Negative: Relatively high price; poor display; overheating system under load.
Positive: Slim size; stylish design; light weight; good performance. Negative: Mediocre ergonomy.
81.33%: This rating should be considered to be average. This is because the proportion of notebooks which have a higher rating is approximately equal to the proportion which have a lower rating.» Further information can be found in our Notebook Purchase Guide.


We are the purr-fect online store for you and your furry-friend. At Chacon's you will find a claw-picked selection of Eco-friendly handmade cat toys proudly crafted by designers around the globe with lots of love, purr-fect accessories for you as well briging you good & happy memories.
WE will donate 10% of every transaction to support animals in need.
"Funds raised will assist RSPCA New South Wales in their vital work to enrich the lives of all creatures great and small."


text:
Dalhart är en ort i dels Dallam County, dels Hartley County i Texas. I Dallam County är Dalhart administrativ huvudort. Ortnamnet kombinerar de första stavelserna i countynamnen Dallam och Hartley. Enligt 2010 års folkräkning hade Dalhart 7 930 invånare.

Källor

Orter i Texas
Dallam County
Hartley County

redpajama_set_name: RedPajamaWikipedia