text:
package org.apache.ignite.internal.processors.cache;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.DataStorageConfiguration;
import org.apache.ignite.internal.managers.encryption.GridEncryptionManager;
import org.apache.ignite.internal.managers.encryption.ReencryptStateUtils;
import org.apache.ignite.internal.pagemem.PageIdAllocator;
import org.apache.ignite.internal.pagemem.store.PageStore;
import org.apache.ignite.internal.processors.affinity.AffinityAssignment;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap;
import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap;
import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition;
import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState;
import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
import org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl;
import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
import org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric;
import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric;
import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.spi.metric.LongMetric;

import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.cacheMetricsRegistryName;
import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;

/**
 * Cache group metrics.
 */
public class CacheGroupMetricsImpl {
    /** Cache group metrics prefix. */
    public static final String CACHE_GROUP_METRICS_PREFIX = "cacheGroups";

    /** Number of partitions need processed for finished indexes create or rebuilding. */
    private final AtomicLongMetric idxBuildCntPartitionsLeft;

    /** Cache group context. */
    private final CacheGroupContext ctx;

    /** */
    private final LongAdderMetric grpPageAllocationTracker;

    /** */
    private final LongMetric storageSize;

    /** */
    private final LongMetric sparseStorageSize;

    /** Number of local partitions initialized on current node. */
    private final AtomicLongMetric initLocalPartitionsNumber;

    /** Interface describing a predicate of two integers. */
    private interface IntBiPredicate {
        /**
         * Predicate body.
         *
         * @param targetVal Target value.
         * @param nextVal Next comparable value.
         */
        boolean apply(int targetVal, int nextVal);
    }

    /** */
    public CacheGroupMetricsImpl(CacheGroupContext ctx) {
        this.ctx = ctx;

        CacheConfiguration cacheCfg = ctx.config();

        DataStorageConfiguration dsCfg = ctx.shared().kernalContext().config().getDataStorageConfiguration();

        boolean persistentEnabled = !ctx.shared().kernalContext().clientNode() && CU.isPersistentCache(cacheCfg, dsCfg);

        MetricRegistry mreg = ctx.shared().kernalContext().metric().registry(metricGroupName());

        mreg.register("Caches", this::getCaches, List.class, null);

        storageSize = mreg.register("StorageSize",
            () -> persistentEnabled ? database().forGroupPageStores(ctx, PageStore::size) : 0,
            "Storage space allocated for group, in bytes.");

        sparseStorageSize = mreg.register("SparseStorageSize",
            () -> persistentEnabled ? database().forGroupPageStores(ctx, PageStore::getSparseSize) : 0,
            "Storage space allocated for group adjusted for possible sparsity, in bytes.");

        idxBuildCntPartitionsLeft = mreg.longMetric("IndexBuildCountPartitionsLeft",
            "Number of partitions need processed for finished indexes create or rebuilding.");

        initLocalPartitionsNumber = mreg.longMetric("InitializedLocalPartitionsNumber", "Number of local partitions initialized on current node.");

        DataRegion region = ctx.dataRegion();

        // On client node, region is null.
        if (region != null) {
            DataRegionMetricsImpl dataRegionMetrics = ctx.dataRegion().memoryMetrics();

            grpPageAllocationTracker =
                dataRegionMetrics.getOrAllocateGroupPageAllocationTracker(ctx.cacheOrGroupName());
        }
        else
            grpPageAllocationTracker = new LongAdderMetric("NO_OP", null);
    }

    /** Callback for initializing metrics after topology was initialized. */
    public void onTopologyInitialized() {
        MetricRegistry mreg = ctx.shared().kernalContext().metric().registry(metricGroupName());

        mreg.register("MinimumNumberOfPartitionCopies",
            this::getMinimumNumberOfPartitionCopies,
            "Minimum number of partition copies for all partitions of this cache group.");

        mreg.register("MaximumNumberOfPartitionCopies",
            this::getMaximumNumberOfPartitionCopies,
            "Maximum number of partition copies for all partitions of this cache group.");

        mreg.register("LocalNodeOwningPartitionsCount",
            this::getLocalNodeOwningPartitionsCount,
            "Count of partitions with state OWNING for this cache group located on this node.");

        mreg.register("LocalNodeMovingPartitionsCount",
            this::getLocalNodeMovingPartitionsCount,
            "Count of partitions with state MOVING for this cache group located on this node.");

        mreg.register("LocalNodeRentingPartitionsCount",
            this::getLocalNodeRentingPartitionsCount,
            "Count of partitions with state RENTING for this cache group located on this node.");

        mreg.register("LocalNodeRentingEntriesCount",
            this::getLocalNodeRentingEntriesCount,
            "Count of entries remains to evict in RENTING partitions located on this node for this cache group.");

        mreg.register("OwningPartitionsAllocationMap",
            this::getOwningPartitionsAllocationMap,
            Map.class,
            "Allocation map of partitions with state OWNING in the cluster.");

        mreg.register("MovingPartitionsAllocationMap",
            this::getMovingPartitionsAllocationMap,
            Map.class,
            "Allocation map of partitions with state MOVING in the cluster.");

        mreg.register("AffinityPartitionsAssignmentMap",
            this::getAffinityPartitionsAssignmentMap,
            Map.class,
            "Affinity partitions assignment map.");

        mreg.register("PartitionIds",
            this::getPartitionIds,
            List.class,
            "Local partition ids.");

        mreg.register("TotalAllocatedSize",
            this::getTotalAllocatedSize,
            "Total size of memory allocated for group, in bytes.");

        if (ctx.config().isEncryptionEnabled()) {
            mreg.register("ReencryptionFinished",
                () -> !ctx.shared().kernalContext().encryption().reencryptionInProgress(ctx.groupId()),
                "The flag indicates whether reencryption is finished or not.");

            mreg.register("ReencryptionPagesLeft",
                this::getPagesLeftForReencryption,
                "Number of pages left for reencryption.");
        }
    }

    /** */
    public long getIndexBuildCountPartitionsLeft() {
        return idxBuildCntPartitionsLeft.value();
    }

    /** Add number of partitions need processed for finished indexes create or rebuilding. */
    public void addIndexBuildCountPartitionsLeft(long idxBuildCntPartitionsLeft) {
        this.idxBuildCntPartitionsLeft.add(idxBuildCntPartitionsLeft);
    }

    /**
     * Decrement number of partitions need processed for finished indexes create or rebuilding.
     */
    public void decrementIndexBuildCountPartitionsLeft() {
        idxBuildCntPartitionsLeft.decrement();
    }

    /**
     * Increments number of local partitions initialized on current node.
     */
    public void incrementInitializedLocalPartitions() {
        initLocalPartitionsNumber.increment();
    }

    /**
     * Decrements number of local partitions initialized on current node.
     */
    public void decrementInitializedLocalPartitions() {
        initLocalPartitionsNumber.decrement();
    }

    /** */
    public int getGroupId() {
        return ctx.groupId();
    }

    /** */
    public String getGroupName() {
        return ctx.name();
    }

    /** */
    public List<String> getCaches() {
        List<String> caches = new ArrayList<>(ctx.caches().size());

        for (GridCacheContext cache : ctx.caches())
            caches.add(cache.name());

        Collections.sort(caches);

        return caches;
    }

    /** */
    public int getBackups() {
        return ctx.config().getBackups();
    }

    /** */
    public int getPartitions() {
        return ctx.topology().partitions();
    }

    /**
     * Calculates the number of partition copies for all partitions of this cache group and filter values by the
     * predicate.
     *
     * @param pred Predicate.
     */
    private int numberOfPartitionCopies(IntBiPredicate pred) {
        GridDhtPartitionFullMap partFullMap = ctx.topology().partitionMap(false);

        if (partFullMap == null)
            return 0;

        int parts = ctx.topology().partitions();

        int res = -1;

        for (int part = 0; part < parts; part++) {
            int cnt = 0;

            for (Map.Entry<UUID, GridDhtPartitionMap> entry : partFullMap.entrySet()) {
                if (entry.getValue().get(part) == GridDhtPartitionState.OWNING)
                    cnt++;
            }

            if (part == 0 || pred.apply(res, cnt))
                res = cnt;
        }

        return res;
    }

    /** */
    public int getMinimumNumberOfPartitionCopies() {
        return numberOfPartitionCopies(new IntBiPredicate() {
            @Override public boolean apply(int targetVal, int nextVal) {
                return nextVal < targetVal;
            }
        });
    }

    /** */
    public int getMaximumNumberOfPartitionCopies() {
        return numberOfPartitionCopies(new IntBiPredicate() {
            @Override public boolean apply(int targetVal, int nextVal) {
                return nextVal > targetVal;
            }
        });
    }

    /**
     * Count of partitions with a given state on the node.
     *
     * @param nodeId Node id.
     * @param state State.
     */
    private int nodePartitionsCountByState(UUID nodeId, GridDhtPartitionState state) {
        int parts = ctx.topology().partitions();

        GridDhtPartitionMap partMap = ctx.topology().partitionMap(false).get(nodeId);

        int cnt = 0;

        for (int part = 0; part < parts; part++)
            if (partMap.get(part) == state)
                cnt++;

        return cnt;
    }

    /**
     * Count of partitions with a given state in the entire cluster.
     *
     * @param state State.
     */
    private int clusterPartitionsCountByState(GridDhtPartitionState state) {
        GridDhtPartitionFullMap partFullMap = ctx.topology().partitionMap(true);

        int cnt = 0;

        for (UUID nodeId : partFullMap.keySet())
            cnt += nodePartitionsCountByState(nodeId, state);

        return cnt;
    }

    /**
     * Count of partitions with a given state on the local node.
     *
     * @param state State.
     */
    private int localNodePartitionsCountByState(GridDhtPartitionState state) {
        int cnt = 0;

        for (GridDhtLocalPartition part : ctx.topology().localPartitions()) {
            if (part.state() == state)
                cnt++;
        }

        return cnt;
    }

    /** */
    public int getLocalNodeOwningPartitionsCount() {
        return localNodePartitionsCountByState(GridDhtPartitionState.OWNING);
    }

    /** */
    public int getLocalNodeMovingPartitionsCount() {
        return localNodePartitionsCountByState(GridDhtPartitionState.MOVING);
    }

    /** */
    public int getLocalNodeRentingPartitionsCount() {
        return localNodePartitionsCountByState(GridDhtPartitionState.RENTING);
    }

    /** */
    public long getLocalNodeRentingEntriesCount() {
        long entriesCnt = 0;

        for (GridDhtLocalPartition part : ctx.topology().localPartitions()) {
            if (part.state() == GridDhtPartitionState.RENTING)
                entriesCnt += part.dataStore().fullSize();
        }

        return entriesCnt;
    }

    /** */
    public int getClusterOwningPartitionsCount() {
        return clusterPartitionsCountByState(GridDhtPartitionState.OWNING);
    }

    /** */
    public int getClusterMovingPartitionsCount() {
        return clusterPartitionsCountByState(GridDhtPartitionState.MOVING);
    }

    /**
     * Gets partitions allocation map with a given state.
     *
     * @param state State.
     * @return Partitions allocation map.
     */
    private Map<Integer, Set<String>> clusterPartitionsMapByState(GridDhtPartitionState state) {
        GridDhtPartitionFullMap partFullMap = ctx.topology().partitionMap(false);

        if (partFullMap == null)
            return Collections.emptyMap();

        int parts = ctx.topology().partitions();

        Map<Integer, Set<String>> partsMap = new LinkedHashMap<>();

        for (int part = 0; part < parts; part++) {
            Set<String> partNodesSet = new HashSet<>();

            for (Map.Entry<UUID, GridDhtPartitionMap> entry : partFullMap.entrySet()) {
                if (entry.getValue().get(part) == state)
                    partNodesSet.add(entry.getKey().toString());
            }

            partsMap.put(part, partNodesSet);
        }

        return partsMap;
    }

    /** */
    public Map<Integer, Set<String>> getOwningPartitionsAllocationMap() {
        return clusterPartitionsMapByState(GridDhtPartitionState.OWNING);
    }

    /** */
    public Map<Integer, Set<String>> getMovingPartitionsAllocationMap() {
        return clusterPartitionsMapByState(GridDhtPartitionState.MOVING);
    }

    /** */
    public Map<Integer, List<String>> getAffinityPartitionsAssignmentMap() {
        if (ctx.affinity().lastVersion().topologyVersion() < 0)
            return Collections.emptyMap();

        AffinityAssignment assignment = ctx.affinity().cachedAffinity(AffinityTopologyVersion.NONE);

        int part = 0;

        Map<Integer, List<String>> assignmentMap = new LinkedHashMap<>();

        for (List<ClusterNode> partAssignment : assignment.assignment()) {
            List<String> partNodeIds = new ArrayList<>(partAssignment.size());

            for (ClusterNode node : partAssignment)
                partNodeIds.add(node.id().toString());

            assignmentMap.put(part, partNodeIds);

            part++;
        }

        return assignmentMap;
    }

    /** */
    public String getType() {
        CacheMode type = ctx.config().getCacheMode();

        return String.valueOf(type);
    }

    /** */
    public List<Integer> getPartitionIds() {
        List<GridDhtLocalPartition> parts = ctx.topology().localPartitions();

        List<Integer> partsRes = new ArrayList<>(parts.size());

        for (GridDhtLocalPartition part : parts)
            partsRes.add(part.id());

        return partsRes;
    }

    /** */
    public long getTotalAllocatedPages() {
        return ctx.shared().kernalContext().clientNode() ?
            0 :
            grpPageAllocationTracker.value();
    }

    /** */
    public long getTotalAllocatedSize() {
        return ctx.shared().kernalContext().clientNode() ?
            0 :
            getTotalAllocatedPages() * ctx.dataRegion().pageMemory().pageSize();
    }

    /** */
    public long getStorageSize() {
        return storageSize == null ? 0 : storageSize.value();
    }

    /** */
    public long getSparseStorageSize() {
        return sparseStorageSize == null ? 0 : sparseStorageSize.value();
    }

    /** */
    public long getPagesLeftForReencryption() {
        if (!ctx.shared().kernalContext().encryption().reencryptionInProgress(ctx.groupId()))
            return 0;

        long pagesLeft = 0;

        FilePageStoreManager mgr = (FilePageStoreManager)ctx.shared().pageStore();

        GridEncryptionManager encMgr = ctx.shared().kernalContext().encryption();

        try {
            for (int p = 0; p < ctx.affinity().partitions(); p++) {
                PageStore pageStore = mgr.getStore(ctx.groupId(), p);

                if (!pageStore.exists())
                    continue;

                long state = encMgr.getEncryptionState(ctx.groupId(), p);

                pagesLeft += ReencryptStateUtils.pageCount(state) - ReencryptStateUtils.pageIndex(state);
            }

            long state = encMgr.getEncryptionState(ctx.groupId(), PageIdAllocator.INDEX_PARTITION);

            pagesLeft += ReencryptStateUtils.pageCount(state) - ReencryptStateUtils.pageIndex(state);
        }
        catch (IgniteCheckedException e) {
            throw new IgniteException(e);
        }

        return pagesLeft;
    }

    /** Removes all metric for cache group. */
    public void remove() {
        if (ctx.shared().kernalContext().isStopping())
            return;

        if (ctx.config().getNearConfiguration() != null)
            ctx.shared().kernalContext().metric().remove(cacheMetricsRegistryName(ctx.config().getName(), true));

        ctx.shared().kernalContext().metric().remove(cacheMetricsRegistryName(ctx.config().getName(), false));

        ctx.shared().kernalContext().metric().remove(metricGroupName());
    }

    /**
     * @return Database.
     */
    private GridCacheDatabaseSharedManager database() {
        return (GridCacheDatabaseSharedManager)ctx.shared().database();
    }

    /** @return Metric group name. */
    private String metricGroupName() {
        return metricName(CACHE_GROUP_METRICS_PREFIX, ctx.cacheOrGroupName());
    }
}


This afternoon we are hosting the Hackaday Unconference in three locations at once. Hundreds of creative minds are coming together in Chicago, Los Angeles, and San Francisco for an amazing day of shared inspiration.
You can get a little taste of what is happening by following along with the pulse of the events. Each will be doing some Facebook Live streams so look for that and regular posts on Hackaday Facebook. We'll be regularly Tweeting and posting to Instagram. It would be absolutely fantastic if you would like and share those messages. Check out the Hackaday TweetWall for a collection of all the #HackadayUncon updates.
The goal is to break down barriers for sharing great ideas which will become the inspiration for new projects to come. Today's overarching theme is "Build Something That Matters. Everyone attending is ready to give an eight-minute talk about something that interests them, without the pressure of a strict talk order or expectations of polished decks and eloquent delivery. As the Unconference progresses, new discussion groups and impromptu talks take bloom as everyone in attendance guides the direction of the day.
i hope there will be videos afterwards!
Can't speak for the other cons, but we've got a camera going right behind me in Pasadena.We just started our first talk.


text:
U.S. Patent and Trademark Office Best Patent and Trademark Office
YA HEARD?!?
Damn, kids. So much law shit creeping into our sports shit, you'd think I'd be popping on here more often to explain to you plebes how the world works, but I gots stuff to do. I'll break down my thoughts on the Bills trust soon and how the revelation by Mark Poloncarz that the trustees who decide on the Bills sale may have a "fiduciary duty" to sell to the highest bidder is the most obvious-as-fuck revelation since Mike Harrington revealed he likes Soft Batch cookies and tall glasses of warm milk. NO FUCKING WAY! Our media fails us, again, if for no other reason that that it took about two months for someone to actually consider the legal obligations in play with the Bills and that perhaps irrelevant is the shared hope of proving our eternal devotion to the Bills trustees so that they'll be overcome with a certain sense of civic pride and sell the team to Jim Kelly for pennies and leave us all in a land of bliss and tailgate blunts and shotgunned beers in perpetuity.
BUT THAT RANT IS FOR ANOTHER DAY.
I expect your appetite to be whetted.
Nay, today is not about the crippling sense of Ralph Wilson's failures and the inevitability of the trustees' duty of loyalty to the bank accounts of named beneficiaries rather than an amalgamate of hapless sports fans with grills and RVs and little to no sense of limits. Today is about motherfucking JUSTICE.
I fucking love justice. I love it in all its forms and I love it when the people given the power to seek it through judicial process actually find it. Justice is fucking great.
Rarely, it seems, is the journey to justice a simple task. Somewhere along the way - and I'll assume it was way fucking back because people have been shitty forfuckingever, basically - the concept of justice became bastardized and co-opted so as to mean something uniquely personal. The meaning of justice co-mingles with each of our personal ideas of right and wrong and, more to the point, our personal desire to feel good - personally good - about outcomes. Justice becomes about getting our way, though rarely do we stop and take a thorough account of how many different interests and desires are competing for predominance. Rarely do we appreciate that sometimes justice produces arguably shitty outcomes, or outcomes that piss some of us off, or outcomes that suggest we should reform our system of justice in subtle or substantial ways ... and all of that is generally ok. You are not entitled to getting your way all the time. In fact, a just system might be one that ensures you don't.
All of which is to say that if you're looking at what the U.S. Patent Office did and you're angry about Free Speech or Dan Snyder's liberty or the storied tradition of a fucking football team, well, TOUGH. FUCKING. BREAKS. This went down in exactly the way it should have ... perhaps even a decade or two late. This is American justice. OUR American justice. And it's fucking beautiful. Get on board.
Some truths for you to chew on, if you're so inclined:
The U.S. Patent and Trademark Office did this, ultimately, because five Native Americans filed a petition in 2006 and litigated it to fruition. Without the petition, there is no trademark revocation. Someone with standing - i.e. a personal stake in the issue - had to step up to the plate so as to achieve this particular relief. This is not the work of Democratic senators, as some pissants have whinged over the past day. This is legal process being exercised by Americans and American judicial process - in this case, the Trademark Trial and Appeal Board of the federal agency legally authorized to oversee trademark registration - going through the mechanics that lead to a result. So, to sum up: STOP BLAMING EVERYTHING ON THE POLITICIANS YOU HATE BECAUSE IT MAKES YOU LOOK LIKE A PETTY IGNORANT PIECE OF SHIT.
Also, Dude, chinaman is not the preferred nomenclature. Asian-American, please.
It really did tie the room together.
Welcome to your week 8 Bills preview. In honor of the most delightfully racist mascot in all of professional sports (except maybe the Canadiens), I pay tribute to the Dude's inability to understand the non-PC issue with the term "chinaman". Although the prick did piss on his rug.
This week the the Bills travel to Toronto to "host" the Washington Redskins, as they attempt to piss on Buffalo's metaphorical rug. Or not really because Buffalo's rug would be the Ralph, wouldn't it? And doesn't the Ralph already smell like piss from the years of grown men urinating in sinks during halftime? Huh? What was I talking about?
Oh right, football.
The Bills are still pretty banged up at receiver after failing to make a deal for Brandon Lloyd or Reggie Wayne at the trade deadline, and defensive stalwart Kyle Williams looks to still be weeks away from a return. Furthermore, roideriffic Shawne Merriman's season is over, and most likely his joke of a career in Buffalo. Back to long days of drinking Grey Goose and beating the fuck out of 90 pound internet models for him! You can hear us bitch about it more on this week's CrapTastiCast.
In positive news, Demetrius Bell, aka Karl Malone Jr., will return to anchor the O-line, and the Amish Rifle himself enters the game with a brand spankin' new contract worth $59 million over 6 years. Daaaaaaaaayum! That is one expensive beard! Here's hoping it translates into a big game from the bearded wonder, and not a disaster, like the careers of other recent overpriced QB contracts. I'm looking at you Derek Anderson and Charlie Tavaris Whitehurst Jackson. With a huge pay raise in tow, look for Fitzy to come out firing on all cylinders, especially after a bye week and time to think about the atrocious picks he threw against the Giants two weeks ago. I for one would love to see Freddie Jackson to get 25-30 carries, and for Spiller to get 10-15, but we all know Chan wants to rack up at least 40 points, so let the heart attacks begin!
I SEE THE LIGHT! Oh wait, that's just the headlights of Marshawn's car.
As for the Redskins, their top wideout, starting TE, and go-to RB are out for the game. Santana Moss is nursing a broken interior cruciminary fibula bone, Chris Cooley is banging his hot wife, and Tim Hightower was put on season ending IR for a burst eardrum and nagging nosebleeds. Sexy Rexy will NOT be gunning repetitive throws into Buffalo's secondary, and instead, assumed Mormon (insert sister-wives joke here) John Beck gets his second straight start after a decent showing in week 7 against the Cowboys.
That all seems to look wonderful for the Bills, except for the fact that Buffalo tends to play shitty against underdeveloped players that nobody has heard of. I see John Beck throwing for 400 yards, Roy Helu running for 150 and 3 TD's, and of course Art Monk will make his triumphant return to the 'Skins to put up 11 catches for 172 yards, all while taunting Andre Reed with his Hall of Fame jacket on. Not to mention, Brian Orakpo will be the first player to light up the Bills line by tripling the season sack total from two to six. He still remembers getting passed up for Aaron Maybin.
Alright, maybe I'm overreacting a taaaaaaaad bit. I just know Buffalo has played shitty in Toronto the past couple seasons, and it stirs up a rage storm inside of me every time it's called a home game. Fuck that! At least George Wilson finally stood up and called out the idea that this is some sort of advantage for his team. About time somebody spoke up. God knows that shitface Trent Edwards was always sucking up to the wasteland that is Canada. Stupid Canada, with their clean air, free health care, and incredible gun control laws. HA! Pussies!
Now excuse me while I breathe in enough toxins to kill a moose, look at a bill from Empire for $1300 for an emergency room visit seven years ago, and then get hit by a stray bullet on my way home from writing this. AMERICA! FUCK YEAH!

redpajama_set_name: RedPajamaCommonCrawl


text:
/ Portrait - NPG x75796; Henry Cheetham
Henry Cheetham
Buy a print Make a donation Close
by William Clark
albumen cabinet card, circa 1870-1882
5 3/4 in. x 4 in. (145 mm x 102 mm) image size
Given by Corporation of Church House, 1949
Henry Cheetham (1827-1899), Bishop of Sierra Leone. Sitter in 1 portrait.
William Clark (active 1865-1927), Photographer. Artist of 1 portrait.
Place made: United Kingdom: England, Bristol (photographer's studio, 87 Park Street, Bristol)
Portrait setback to top
Photographs of Anglican Bishops, 1860s-1940s
William Edward Forster's Education Act is passed, making provisions for education for all under-13s. It demonstrated the balance in Gladstone's first ministry between progressive reform and conservativism by spreading literacy, whilst maintaining the status of Church schools.
The Married Women's Property Act gives wives rights over their own earnings.
The Russian composer Pyotr Ilyich Tchaikovsky's fantasy-overture Romeo and Juliet, based on Shakespeare's play and written with the aid of composer Mily Balakirev, debuts in Moscow, conducted by Nikolai Rubenstein.
W. G. Grace becomes cricket captain of Gloucestershire, marking the start of a successful decade for the club in which they won three 'Champion County' titles.
Isaac Butt, an Irish MP at Westminster, forms the Home Rule Association.
The Franco-Prussian war breaks out between France and a coalition of German states led by Prussia. Provoked by the candidacy of German Prince Leopold Hohenzollen-Sigmaringen for the Spanish throne, France declared war in July after Bismark published the deliberately provocative Ems telegraph, in which the French were represented in an offensive light on the issue.
Scientific techniques
Watch our playlist exploring scientific techniques used by the Gallery to unlock the secrets behind our Tudor portraits.
Subjects and themes
Search the collection by themes - from pets to weddings!
Take a tour exploring our Collection created by Alayo Akinkugbe for Black History Month in 2020.
Learn about pioneers in medicine, health and social reform from 1840 to 1920.
Order this print today


text:
A stock transfer agent, transfer agent, share registry or transfer agency is an entity, usually a third party firm unrelated to security transactions, that manages the change in ownership of company stock or investment fund shares, maintains a register of ownership and acts as paying agent for the payment of dividends and other distributions to investors. The name derives from the impartial intermediary role a transfer agent plays in validating and registering the purchase of new ownership shares and, in the case of a transfer of ownership, cancelling the name and certificate of shareholders who sell shares and substituting the new owner's name on the official master shareholder register.

Transfer agent or stock transfer agent is the term used in the United States and Canada. Share registry is used in the United Kingdom, Australia and New Zealand. Transfer secretary is used in South Africa. A company may act as its own transfer agent or engage a third-party company to perform shareholder registry services. Transfer agents in the United States must be registered with the Securities and Exchange Commission (SEC) or a bank regulatory agency.

For investment funds, transfer agent functions and fund administration are interdependent, making it desirable in some cases for fund managers to assign both services to a single third party. Transfer agent service providers may offer their services along with fund accounting, fund administration and other outsourced back-office services as a "package" for the convenience of client companies.

Functions
Public companies typically use transfer agents to keep track of the individuals and entities that own their stocks and bonds. Investment funds may also use transfer agents to manage their shareholder registry although only some legal structures are required to do so. Transfer agents may be banks, trust companies, fund administration providers or stand-alone transfer agent firms. Sometimes a company acts as its own transfer agent.

Transfer agents perform the following main functions:

 Issuance and Transfer: Issue and cancel certificates to reflect changes in ownership. For example, when a company declares a stock dividend or stock split, the transfer agent issues new shares. Transfer agents keep records of who owns a company's stocks and bonds and how those stocks and bonds are held—whether by the owner in certificate form, by the company in book-entry form, or by the investor's brokerage firm in street name. They also keep records of how many shares or bonds each investor owns.
 Record Keeping:  Transfer agents "track, record, and maintain on behalf of issuers the official record of ownership of each issuer's securities."
Registration:  Transfer agents monitor "the issuance of [company] securities with a view to preventing unauthorized issuance, a function commonly performed by a person called a registrar."
Paying Agent: A transfer agent may also serve as the company's paying agent to pay out interest, cash and stock dividends, or other distributions to stock- and bondholders. In addition, a transfer agent may act as a tender agent (tendering shares in a tender offer) or exchange agent (exchanging a company's stock or bonds in a merger).
Shareholder Liaison: Transfer agents "facilitate communications between issuers and registered securityholders." Transfer agents often act as a proxy agent (sending out proxy materials) and a mailing agent (mailing the company's quarterly, annual, and other reports).  Transfer agents may also run annual meetings as inspector of elections, proxy voting, and special meetings of shareholders. In this case they are considered the official keeper of the corporate shareholder records.
 Repository: Handle lost, destroyed, or stolen certificates. Transfer agents help shareholders and bondholders when a stock or bond certificate has been lost, destroyed, or stolen. Also a medallion signature stamp officer is the transfer agent.
 Treasury Manager: Transfer agent work to settle monetary transactions. They may hold shareholder's cash and Company's cash in separate accounts as per local regulations, in order to prevent loss in the event of bankruptcy and mismanagement of money.

In the UK, Registrars perform a similar role, although there is no medallion stamp signature process.

A public company usually only designates one company to transfer its stock.

Street name

The shares are issued in "street name" which is the term given to securities held in the name of a financial intermediary (such as brokerage, custodian bank, securities depositary, or a nominee of any of them) on behalf of a customer, usually done to facilitate subsequent transactions. Shares held in "Street name", usually Cede & Co., refers to shares which have a beneficial shareholder who maintain their ownership indirectly through a brokerage. Street name holders are not registered holders; they must exercise shareholder rights by obtaining proxies from the legal entity which is a holder of record.

United States
Stock transfer agents in the United States verify that owners of stock are genuine through the use of signature guarantees. This is often referred to as a "Medallion Signature Guarantee". A signature guarantee is a warranty by the signature guarantor that the endorser of a stock certificate or stock power form is an appropriate person to endorse and thus transfer the security. Signatures on a stock certificate or stock power must have the medallion guarantee. A medallion guarantee is also used to validate the genuineness of a securities transaction document (typically a stock certificate). It is backed by a bond and protects the issuer of the security and their transfer agent from fraudulently transferred securities. A medallion guarantee may be obtained from most major banks, brokerage firms or credit unions.

Stock transfer agents operating in the U.S. are required to register with the U.S. Securities and Exchange Commission or a banking regulator.

Private Companies
Private companies typically do not use dedicated or SEC-registered transfer agent companies. Private companies  use a combination of software, law firm services, and in-house support.
In the US, recent changes to crowdfunding regulations make it necessary for some private companies to use dedicated transfer agent companies in some cases:

 When a crowdfunded company uses Regulation CF to raise more than $10M in equity from more than 2,000 shareholders, or
 When a crowdfunded company uses Regulation A+ Tier 2 to raise equity

See also
 Depository bank
 Custodian bank
 Dematerialization (securities)
 Settlement (finance)

References

External links
 State of New York Stock Transfer Tax stamps
 Securities Transfer Association
 What are Registrar and Transfer Agent (RTA)? In Hindi
 Does a private company require a transfer agent?

Stock market

redpajama_set_name: RedPajamaWikipedia


Francie Dalton, CMC, is president of Dalton Alliances, Inc., a Maryland-based business consultancy. She is the author of Versatility: How to Optimize Interactions When 7 Workplace Behaviors Are at their Worst.
Unlike most children's stories, the Dr. Seuss series taught us that life is anything but a fairy tale. The charming yet honest representation of the challenges we face as adults guided us through our childhood nightmares and gave us simple advice of timeless relevance.
Leaping out from every page of the Dr. Seuss books are words of wisdom that apply to all kinds of nightmares -- even those that are work-related. On the week when we celebrate the master's 106th birthday, perhaps these original rhymes, inspired by Seuss's magical words, will help you tackle your business nightmares.
And pruning them out can be tricky indeed!
But Grinches you keep you're perceived to endorse.
Priorities everywhere making a fuss.
are those who get started on just the right deeds.
the path is obscured, and it's hard to stay poised.
You'll soon cut down rework at least by a half.
you'll dream of a hero, a magical hand.
digging down deep to connect with your cause.
And facing your challenges day after day.
Then certainly staff will not grow the right way.
but leaders can't always be vice-presidential.
Remember, your brilliance is not to be rationed.
not PowerPoints in some new fancied up font.
and brush off the egg-shells when others throw yolks.
And then you will find every possible burr.
And what could be done by the terribly sly.
Inspires and makes you become all the rage.
So help them conclude it's with you they should be.
It's your expectations they're sure to surpass.
The truthful reveal of the "me" I can be!
I am puzzled by incorrect attributions in this list. To set the record straight: "Seuss-ism # 8" is a direct quote from "I Had Trouble in Getting to Solla Sollew." "Seuss-ism # 10" is NOT from "Green Eggs and Ham," but from "I Can Read With My Eyes Shut!"


text:
Art Fact
A digital shrine
mans on Lyrics: Rain in the south
Cecelia on Lyrics: Rain in the south
Leonardo Avila on A song a week #1: Whom Are You Dancing For?
Nihil on Lyrics: Rain in the south
Song analysis
Category: Song analysis
A Song A Week #37: Dandelion Puff
This is it! The final episode of our A Song A Week series. Are you still waiting for the twist? Sorry, there won't be one ;)
Dandelion Puff is an instrumental track, and the last song on the Nuclear Princess cassette. I actually don't remember much about it. It's mostly a collage of samples, with a windy loop being the foundation. The spoken samples were recorded with a microphone in front of Jonas television. It's not like we searched for the perfect sample, the cartoon just happened to be running at the moment. Turned out fine, didn't it?
Since there were no lyrics, the naming of the track was an open question. I was always on the lookout for good-sounding English phrases, and this one came from the name of a Winnie the Pooh drawing. Quite wimpy for a synth band that wanted to be cool, it was originally intended for the indie band I also played in.
So the Song A Week series stops here, but we might have more stuff from the archives waiting in line… Until then, have a great summer!
Posted on 06/13/2014 12/31/2019 Author andersCategories Song analysisLeave a comment on A Song A Week #37: Dandelion Puff
A Song A Week #36: Building
Ah yes, here we go. We're getting very close to the end of Art Fact's "career", and this song is probably our most well-known song, or at least it was before Rain in the South was featured on a Minimal Wave CD…
Building was the first song of ours that made it on to an official release, when we sent it in to a brand new label called Memento Materia. We were very excited when Building was selected to be on a compilation CD called Illuminative, which today is something of a classic in the Swedish synth scene. Later, when Memento Materia turned 20 years, the song was once again on a compilation of theirs, this time for a "best of" called Get Electrofied, which again made us very proud.
Måns
Building is a song built around two main things. First of all, the heavy timpani drum sound from the Roland D-20 which is prominent already in the intro, and then throughout the song. It really sounds great: a heavy, thundering boom to set the mood. Together with the thin metal beats it creates an almost industrial feel to the song, which probably made us name the song "Building" even though the lyrics have nothing to do with construction. :)
The other thing is the brilliant synth melody in the break. Anders wrote that, and if memory serves me right, this particular melody was initially written for DKW, but when Anders was trying to write a melody for Building, he thought that the one he came up with would be better in DKW, so they switched places. Today, it's hard to imagine the two melodies switched back.
I think Building is a pretty good song today, but it is suffering a bit from our heavy-handed approach. It's got a good melody, and an actual chorus, but the vocals are a bit sour and boring. When we reunited Art Fact last year to perform live for the first time in 20 years, Building was on the shortlist but didn't make it to the live show, much to the dismay of some fans.
Posted on 05/15/2014 05/15/2014 Author mansCategories Song analysisLeave a comment on A Song A Week #36: Building
A Song A Week #35: Lies
This song was written towards the end of the Nuclear Princess sessions, during a phase where we just wanted to finish it. And you can tell this by the result; the different parts in Lies doesn't really gel. We probably started with the instrumental chorus, which is actually pretty good. A nice melody line (or "slinga" as we say in Swedish) with some DM-influenced chord changes, and a really nice resonant bass line (probably courtesy the Roland Juno 106). I like that part!
But the verse and intro are a bit below par. The verse is a return to the more bluesy chords and vocals that we used on In Fact, which is nice. But it's really stiff, and rhythmically doesn't fit between the intro and chorus. And yes, the intro… As far as I remember we did it first as kind of a joke, with acoustic sounding drums (sort of forbidden) from the Roland R-8 and a sampled trumpet from the Roland S-330. But in a combination of being quite tired of our own gloom, and desperate to finish the lengthy sessions, we decided to keep it. In hindsight, humour is a tricky thing in synth pop. But together with the sample (from a cartoon, recorded live with a microphone in front of the TV-set ) it at least has a sort of weird Yello-like atmosphere.
In conclusion: we should have worked harder to make the best of the original chorus idea, and kept away from humour.
Posted on 04/15/2014 Author andersCategories Song analysis1 Comment on A Song A Week #35: Lies
A Song A Week #34: Pain And Rage
Here is at least something which sounds a lot more like a classic synth pop song on this cassette! We were working so hard to make ourselves sound "harder", but here we have a nice tune that we managed to squeak through anyway.
We've got an unidentified synth doing the bass line, it could be the trusty ole Juno-106, but it doesn't sound like it. The Juno is definitely there though in the pads. Also, the S-330 sampler is working hard again with both sound effects and drum patches.
Jonas combining two of his passions, synth posing and aeroplanes.
For once, we also made the second verse something else than a cut-and-paste of verse one, at least in the soundsphere. We've got a nice arpeggio which sounds like another Juno-106, adding some texture and movement to the song there.
The vocals are nothing to be happy about today, I sound totally crappy, and without emotion. This was definitely by design, but it was one of those choices we made back then that I wish I could go back and change. We wanted to be cool, but ended up taking away a lot of the "soul" in our music that had made Art Fact what was different.
Lyrics are forgettable as well. The "blocked by fear" line is ripped off from the Front 242 song "Gripped By Fear". Oh well.
/Måns
Posted on 03/24/2014 Author mansCategories Song analysisTags a song a week, pain and rage, Roland Juno-106, Roland S-330, the nuclear princessLeave a comment on A Song A Week #34: Pain And Rage
A Song A Week #33: Drift
I remember coming upp with the riff for this song, just noodling around on one of our two Juno 106s in our studio (a.k.a Jonas' brother's bedroom). It was one of those moments where you know that one little idea will last for a whole song.
The title was probably set when saving the sequence in the computer, long before any lyrics were written. I have a vague notion it was inspired by the Twice A Man album (and live show) Driftwood, that at least I was very into at the moment.
Besides this there are the usual suspects: Roland Alpha Juno 1 on bass, Roland R8 on drums, and the Roland S-330 playing some noise probably sampled from TV. Altogether a minimalistic yet powerful soundscape. The overall feeling is very gloomy, including Måns' vocals and lyrics ("The sky is so grey" etc). A bit like the February weather here in Stockholm at the moment actually!
My favourite part of this song is the bell "solo" towards the end. I think it was played live and improvised by Måns. It's a nice mix of being almost sequenced, but with some variations that stick out. Is there an arpeggiator with some randomness? Would be great.
Posted on 02/14/2014 02/14/2014 Author andersCategories Song analysisTags Roland Alpha Juno 1, Roland Juno-106, Roland R8, Roland S-330Leave a comment on A Song A Week #33: Drift
A Song A Week #32: And The Seasons Changed
Leading off the "B-side" of the cassette we have the track which gave its name to our compilation vinyl released by Dödsdans Rekords a couple of years ago. I don't know why the nice guys at the label decided on that name, but I quite like the title actually. Somehow it lends a nice atmosphere to the song, and it goes well with the sound.
We start off a bassline I don't remember which synth it cam from. It doesn't actually sound like any of our regular sounds, but it might have been the Roland Juno-1, since we were using that a lot during this time. During our The Nuclear Princess era we experimented a lot with sampling, and the intro has a submarine sonar sample going during the bass line. Then we immediately go into the beat and the very narrow pad, again I don't really know what synth that is.
Måns, eating Pez, carrying a table tennis racket.
During the verse, I can hear a weird reverse-pad that is most definately a Juno-106. And we've got a slow verse which finishes in a hilarious turn which I know Anders hates and I am fond of. :) We only had one effect unit to use for the vocals, an Alesis Microverb. Since we really wanted the reverb in the chorus to be as large as possible, but we wanted a shorter reverb during the verse, we had to manually switch the effect during mastering, which makes the reverb "die" at the end of the first verse and start over in the chorus. It sounds weird, but somehow I think it just adds to the relative minimalism of the track.
During the break we take an actual break, and listen to sea gulls. Yep. That's the kind of stuff we were into. I don't remember why, or how, but the sea gulls are all alone on this track for a good 15 seconds and I guess we wanted to make the listener feel something. Do you?
All in all, not a very memorable song, and I think it could have been a lot better. The bass line is very nice, and the vocals are pretty good, but the drum beats are too monotonous and boring.
Posted on 01/09/2014 Author mansCategories Song analysisTags ...and the seasons changed, a song a week, Alesis Microverb, Roland Alpha Juno 1, Roland Juno-106, sea gulls, the nuclear princessLeave a comment on A Song A Week #32: And The Seasons Changed
A Song A Week #31: Separated Bodies
I guess this song is somehow inspired by Depeche Mode's Blasphemous Rumours, at least when it comes to the mood. It started out with a loop of the metallic noises in the intro, and just grew from there. I think it's all made using the Roland D-20. By this time we knew this synth inside and out, using our favourite samples over and over again, but also pitching them a lot to make them sound fresh.
Songwriting-wise I think the best part is the middle-8, where Måns takes the melody up some steps to raise the intensity. It creates a nice turning point for the song.
This song messed up our CDs. The Nuclear Princess was our first demo mastered on DAT and burned on CD-R, a brand new technology at the time. Jonas' brother Johan worked as a sound engineer at a theatre where they had a CD-R burner. It worked at 1x speed and the discs cost $30 a piece! The track numbers were created automatically on the first sound detected after a few seconds of silence, which worked OK in most cases. But the silence after the first metallic sound on Separated Bodies was long enough to trigger a new track number. So on our CDs Separated Bodies were both track 7 and 8 :)
Recently Separated Bodies was included on the Swedish Electro #2 compilation by Swedish Electro Scene. Check it out, 36 great songs for free!
From time to time we all need some
I could never do without
But still, all most the time
We've got separated bodies
Secretly I admire them
And their capability
To carry on
But you have to admit
It feels better though
I have a fair chance to survive
Still knowing that time will pass
Until I see you again
But one day and forever
We won't have
Separated bodies
Posted on 12/29/2013 06/12/2018 Author andersCategories Lyrics, Song analysisTags Roland D-20Leave a comment on A Song A Week #31: Separated Bodies
A Song a Week #30: DKW
I don't know why we named this song DKW, but at the time me and my brother actually owned a DKW car. It used to belong to my grandfather, and for a long time we kept it, thinking that we should fix it up. But since I didn't get a driver's license (until I was 30) we eventually sold it to a collector. It was really good-looking, had a 2-stroke engine pumping out 38 hp, and three gears. Our grandfather (a retired fireman) used to drive us all across Småland in it, and I can still remember the smell of the oily gasoline, and the distinctive sound of the indicators. Unfortunately it lacked tiny details such as seat belts.
Anyhoo, I think this song started with the resonant pad sound (from the Juno 106) playing the E to C chords in the chorus. The verse is a bit bluesy, and the other 106 synth bass actually has som filter automation (programmed via sysex I think). The drums were sampled into the Roland S-330, and I think the kick drum came from hitting a sofa by hand. The voice doing the weather report on CNN was not sampled as much as recorded straight to tape. The lead in the (instrumental) chorus is actually the same sound as in Nowadays (B24 Echo Pan from the Roland D-20) but with a more resonant filter setting.
As we already have mentioned many times, Art Fact often has a very minimalistic sound and production. Mostly this was only due to our incompetence, but in this case there was actually a plan to keep the track sparse. For once we didn't try to sound heavy and powerful, and I think the result is kind of nice. And luckily Måns made the title a little less random by adding the final lines:
Follow me away / My car will take us there.
Someone made a video for this track as a school project, with some footage from a gig at a classic Stockholm venue called Tre Backar. In this version we had added the classic Funky Drummer loop, but sampled from Sinéad O'Connor's brilliant song I Am Stretched On Your Grave. This was before REX-loops and warp markers, and I remember that we had to offline-stretch the sample in percent to fit DKW's tempo, which was like mad science to us. The good old days were not that good actually!
Posted on 12/06/2013 12/07/2013 Author andersCategories Song analysisTags Roland D-20, Roland Juno-106, Roland S-330Leave a comment on A Song a Week #30: DKW
A Song a Week #29: Put Me To Sleep
This is, as Anders just told me, possibly the "best production" we ever did. This song has a long build, from the slow intro all the way to the massive end, complete with choirs, strings and all.
I wrote the song based on an idea of singing around just one note for the whole song, and then branching out towards the end. I think it "opens up" the song in a nice way when you finally get to that sweet moment where the chords change.
Måns under the bridge.
The lyrics are OK too, I can picture myself as a teenager in my room trying to go to sleep but finding my head too full of thoughts, listening to the cars outside my window and the TV my parents had on in the living room. The ending is almost like a prayer, a plea for help with "sleep", this mythical figure.
Nice build, nice tune, nice lyrics. We used our full arsenal at the time – I hear our Ensoniq EPS in the strings and the choir, I hear the Roland S-330 in the samples, I hear the Roland Juno 106 in the bass pad, I hear the Roland Juno-1 in the bassline and some of the other sounds.
Is this the best song from "The Nuclear Princess" then? Possibly so. I still like it today, and there are not many songs from TNP I can listen to without shaking my head. :)
Posted on 11/29/2013 Author mansCategories Song analysisTags a song a week, Ensoniq EPS, put me to sleep, Roland Alpha Juno 1, Roland Juno-106, Roland S-330, the nuclear princessLeave a comment on A Song a Week #29: Put Me To Sleep
A Song A Week #28: DF
So what can we possibly say about this little ditty? Clocking in at about 45s it is probably the shortest of all Art Fact tracks. As you know by now, we were really inspired by Depeche Mode, and just like them we wanted to have some shorter instrumental tracks between the regular pop songs.
The S-330 editor.
I'm not sure, but I think this track was mainly created using the Roland S-330 sampler. Jonas' brother Johan bought this for a considerable amount of money from a (then rather unknown) Swedish musician called Wille Craaford. During this period his backing band was called Pondus (I think he was doing some sort of Bruce Springsteen-like music, and wanted his own E Street Band), and we had lots of disks with "Pondus" written on them. Later, Craaford would change style and was a part of Sweden's answer to Beastie Boys: Just D.
At the time, the S-330 was really impressive. Although not as cool as the Akai S1000, it still was 16 bit 12 bit (sorry!) and also ran its own editor in a green glowing monochrome monitor. With this and Opcode Vision running on a Macintosh, we probably had better equipment than the median Swedish synth band at the time. And what did we make of it? A loop with three samples!
Posted on 11/19/2013 11/19/2013 Author andersCategories Song analysisTags Roland S-330Leave a comment on A Song A Week #28: DF


text:
California Agriculture > Volume 74 > Number 3 >
< Previous issue
>< Previous issue
Download Cover PDF
At R&D Farms in Reedley, Calif., nectarines and peaches are picked in buckets to protect fruit during handling just before transfer to the packing line for cleaning, sanitation, sorting, sizing and packing. Photo by Carlos H. Crisosto.
PDF of Issue | View Abstracts
Peer-reviewed research and review articles
Surveys of 12 California crops for phytoseiid predatory mites show changes compared to earlier studies
by Elizabeth E. Grafton-Cardwell, Walter Bentley, Mary Bianchi, Frances E. Cave, Rachel Elkins, Larry Godfrey, Ping Gu, David Haviland, David Headrick, Mark Hoddle, James McMurtry, Maria Murrietta, Nicholas Mills, Yuling Ouyang, Carolyn Pickel, Stephanie Rill, Menelaos C. Stavrinides, Lucia G. Varela
| Full text HTML | PDF
In phytoseiid samples from 25 counties from 2000 to 2018, the western predatory mite, long recognized as an important biological control agent, was found in relatively low numbers.
Phytoseiid mites are key predators in agricultural crops. However, not all species regulate pest populations below economic thresholds, and therefore knowledge of which species are associated with particular crops aids pest control recommendations. Surveys of 12 crops across six geographical regions of California demonstrated that phytoseiid species varied by crop and geographical location, with subtropical crops exhibiting the lowest species diversity and grape the greatest. The western predatory mite, Galendromus occidentalis, long cited as a dominant species in California crops, was not found to be the major species in most situations. Euseius stipulatus, a species introduced in the 1970s, was found in the surveyed crops in many areas of the state and appears to be displacing E. hibisci along the south coast.
Strawberry growers are unlikely to forgo soil fumigation with disease-resistant cultivars alone
by Julie Guthman
A UC survey found that disease resistant cultivars have not yet become a priority for strawberry growers, mainly because of economic pressures.
A major collaborative project launched in 2017 to accelerate the development of disease-resistant strawberry cultivars is responding urgently to two developments: increasing restrictions on fumigant use and the appearance of two novel pathogens not evidently manageable with allowed fumigants. As part of that project, I sought to understand the factors that guide growers' cultivar choice and assess their willingness to choose a pathogen-resistant cultivar to reduce or potentially replace fumigation. From a survey completed by 33 strawberry growers and in-depth interviews with 20 growers, I found that most growers prioritize yield in choosing cultivars, despite the industrywide problem with low prices. Few growers said they would be willing to substitute disease-resistant cultivars for fumigation without fail-safe disease control methods. Many growers, even those with existing organic programs, would opt for soilless systems in a tighter regulatory environment. This study thus suggests that disease resistance breeding must be coupled with support for other disease management techniques, and the economic situation that makes growers feel that they cannot forgo yield also needs attention.
Agricultural managed aquifer recharge — water quality factors to consider
by Hannah Waterhouse, Sandra Bachand, Daniel Mountjoy, Joseph Choperena, Philip A.M. Bachand, Helen E. Dahlke, William R. Horwath
AgMAR could counteract groundwater overdraft, yet impacts to water quality must be considered — current growing season N management and historical legacy nitrate in the subsurface need to be taken into account.
The resilience and productivity of California's agriculture is threatened by groundwater overdraft, reduction in aquifer water quality, increased land subsidence damage to infrastructure and an irreversible reduction in groundwater storage capacity. Intentionally flooding agricultural fields during winter — a practice referred to as agricultural managed aquifer recharge (AgMAR) — can help counteract overdraft. However, the potential for AgMAR to exacerbate nitrate/salt leaching and contamination of at-risk aquifers remains a critical concern. To quantify the risk of groundwater contamination with AgMAR, we took 30-foot-long soil cores in 12 almond orchards, processing tomato fields and wine grape vineyards on low- and high-permeability soils, measured nitrate and total dissolved solids concentrations and calculated stored nitrate-N. Wine grape vineyards on permeable soils had the least nitrate leaching risk observed. However, almond orchards and tomato fields could be leveraged for AgMAR if dedicated recharge sites were established and clean surface water used for recharge. Historical land use, current nitrogen management and soil permeability class are the main factors to consider before implementing AgMAR.
Terminated marketing order provided resources to California peach and nectarine growers
by Zoë Plakias, Rachael Goodhue, Jeffrey Williams
The authors found that industry information provided via marketing orders was a significant factor for respondents who voted to continue the orders.
Marketing orders allow farmers to collectively fund industry-wide services that may be difficult to provide through a voluntary approach. But not all farmers support collective approaches. We employed ballot data from U.S. Department of Agriculture and survey data we collected to explore why farmers in California voted to terminate the federal fresh peach and nectarine marketing orders in 2011 and the implications of this termination. Even after controlling for other factors, we found that farmers who produced more were significantly less likely to vote for continuation. We also found that detailed industry information provided via the marketing orders was significantly more important to respondents voting for continuation, and respondents with more organic production were significantly more likely to vote for continuation. These results suggest farmers may have lost important production and marketing resources due to termination of the orders, with evidence that smaller farms were more affected. This termination may thus have accelerated the exit of farmers from this industry.
Brown spot in table grape Redglobe controlled in study with sulfur dioxide and temperature treatments
by Cassandra A. Young, Robin A. Choudhury, Carlos H. Crisosto, W. Douglas Gubler
A popular export table grape variety showed no disease development for 32 days at 2°C after being treated with 200 ppm-h SO2.
Brown spot is a postharvest disease of grapes caused by Cladosporium species in the San Joaquin Valley of California. It spreads during cold storage and transport, resulting in severe economic losses to late table grape cultivars, which are grown mainly for export to countries such as China and Mexico. We examined the effect of temperature and sulfur dioxide (SO2) treatments on fungal growth and infection of Redglobe berries by three Cladosporium species: Cladosporium ramotenellum, C. cladosporioides and C. limoniforme. Redglobe is especially popular for export. Fungal colonies growing on potato dextrose agar in petri plates stored at -2°C grew slower than those stored at 2°C, and an 400 ppm-h SO2 treatment significantly reduced fungal growth of all three species and at all temperatures tested. Redglobe berries inoculated with the Cladosporium species, treated with SO2 concentrations of 100 ppm-h, 200 ppm-h and 400 ppm-h and incubated in high relative humidity chambers for 28 to 32 days at 2°C, showed little incidence of disease. The development of brown spot on berries was entirely prevented with the treatment of 200 ppm-h SO2 for all Cladosporium species tested.
Monterey pine forest made a remarkable recovery from pitch canker
by Thomas R. Gordon, Gregory J. Reynolds, Sharon C. Kirkpatrick, Andrew J. Storer, David L. Wood, Daniel M. Fernandez, Brice A. McPherson
For 3 years pitch canker progressed rapidly through native stands on the Monterey Peninsula, then changed little over 14 years, before steadily declining.
Monterey pine (Pinus radiata) is a species of limited distribution, with three native populations in California. In 1986, a disease known as pitch canker, caused by the fungus Fusarium circinatum, was identified as the cause of extensive mortality in planted Monterey pines in Santa Cruz County. Monitoring studies on the Monterey Peninsula documented rapid progression of the disease in the native forest during the 1990s, with most trees sustaining some level of infection. However, between 1999 and 2013, the severity of pitch canker stabilized, with many previously diseased trees then free of symptoms, and plots monitored between 2011 and 2015 documented a steady decline in the occurrence of new infections. Consequently, whereas pitch canker was once a conspicuous visual blight in the forest, by the end of the observation period, symptomatic trees had become a rarity. The arrested development of pitch canker is suggestive of a reduction in the frequency and duration of fog near the coast, which provides conditions necessary for the pathogen to establish infections.
Q-and-A: COVID-19's effects on food systems, youth development programs and nutrition
by Lucien Crowder
Full text HTML | PDF
An interview with UC Cooperative Extension experts about the effect of the coronavirus pandemic on food systems, youth development and nutrition.
Recent articles from the Agricultural Experiment Station campuses and UC ANR's county offices, institutes and research and extension centers.
California's agritourism operations expand despite facing regulatory challenges
by Shermain D. Hardesty, Penny Leff
Surveys show that agritourism operators in California need increased support from their local governments and the state regarding regulatory requirements.
Complexity in 4-H youth enrollment: A response to Davy et al. (2020)
by Steven M. Worker
Thank you for visiting us at California Agriculture. We have created this printable page for you to easily view our website offline. You can visit this page again by pointing your Internet Browser to-
http://calag.ucanr.edu/archive/index.cfm?issue=74_3
University of California, 1301 S. 46th St., Bldg. 478 Richmond, CA
Please visit us again at http://californiaagriculture.ucanr.edu/


text:
Texas Community Mourns Those Lost In Robb Elementary School Shooting
Posted on May 25, 2022 - By Shannon Dawson
Source: Jordan Vonderhaar / Getty
On May 24, the United States was rocked by another devastating mass shooting after an 18-year-old gunman opened fire on an elementary school in Uvalde, Texas.
Armed with two assault rifles, the shooter barged into Robb Elementary School on Tuesday and killed at least 19 children and 2 adults, just before he was fatally shot by law enforcement.
Manny Renfro told AP News that his 8-year-old grandson was among the victims killed in the senseless shooting.
'I'm Grateful To Be Here': Shooting Survivor Opens Up About The Events That Transpired The Night Takeoff Was Killed
Dallas Woman Fatally Shot After Beating A Man In Basketball Game
Atlanta Midtown Shooter Arrested At The Airport, Lawsuit May Provide Insight On Link To Victims
"The sweetest little boy that I've ever known," said Renfro, before he recalled a memory from when he had last visited his grandson.
"We started throwing the football together and I was teaching him pass patterns. Such a fast little boy and he could catch a ball so good," Renfro added. "There were certain plays that I would call that he would remember and he would do it exactly like we practiced."
Eva Mireles, a beloved Fourth-grade teacher at Robb Elementary, was also shot and killed during the chaotic incident.
"She was a beautiful person & dedicated teacher…There are no words," one parent, whose daughter worked closely with Mireles wrote on Twitter, the New York Post noted.
Mireles had been an educator with the Uvalde Consolidated Independent School District for nearly 17 years, according to the school's website.
Texas officials have since identified the deceased gunman as 18-year-old Salvador Ramos. A source somewhat "close" to the suspect claimed that Ramos sent him photos of "a bag full of ammunition days before the attack."
"He would message me here and there, and four days ago he sent me a picture of the AR he was using … and a backpack full of 5.56 rounds, probably like seven mags," the associate, who wanted to remain annoymous said, CNN reported.
"I was like, 'bro, why do you have this?' and he was like, 'Don't worry about it.'" "He proceeded to text me, 'I look very different now. You wouldn't recognize me.'"
The source claimed that the gunman was "taunted" by classmates because of the clothes he wore and his family's financial situation.
"He would not go to school … and he just, like, slowly dropped out," the confidante added. "He barely came to school."
Tuesday's shooting stirs up chilling similarities to the vicious shooting that occurred in 2012 at Sandy Hook Elementary School in Newtown, Connecticut. The massacre claimed the lives of 20 children and six adults.
The travesty also comes just weeks after the Buffalo mass shooting, where a gunman shot and killed 10 people at a community supermarket. Now, officials are pleading with the government to place tighter restrictions on gun laws across the nation.
RELATED CONTENT: BREAKING NEWS: 11 Of 13 Victims Murdered In Racist Mass Shooting In Buffalo Are Black


I've read more books by Agatha Christie than by any other author, and am happy to read each multiple times. These are endlessly devourable. Christie should be lauded not just for the intricacy of her plotting, but for her wit, her characterizations, and her ability to distill truths about human nature into a single sharp sentence.
But there's also a lot about Christie for the contemporary reader to dislike. The books are at various points nakedly anti-semitic, racist, sexist, and homophobic–even if it was uncommon to use these terms at the time she was writing. "At the time," of course, is one way that scholars and readers have sought to excuse the sins of great authors. As products of their time, the thinking goes, certain unsavory tendencies can be viewed more benignly.
This argument only works up to a point. Social progress happens because groups and individuals take a stand against prevailing prejudices. And it seems fairer to an author's legacy to acknowledge what makes her works distasteful, along with what makes them great. Attempting to sweep something under the carpet is a superficial way of disengaging from what may be an important aspect of that body of work.
In Christie's case, a major aspect is classism. It's common to read Christie for its ability to serve as an escape. For one thing there are the pleasures of Christie's settings―those tranquil villages, exciting archeological sites, and luxurious trains. Her books are a leisured-class fantasy, replete with abundant servants, stately homes, and harmonious (though vastly unequal) social relations. This fantasy world rests, in large part, on her main characters not needing to struggle for money…although this doesn't mean that her characters don't think about money. In fact these well-off people often don't consider themselves well-off, or are plotting to make themselves better-off. This is a major plot point in many Christie works, such as those where young people greedily anticipate an aged relative's inheritance, and thus have a motive for speeding along the death of said relative. (It would be interesting to try to transpose one of these plots to a more heavily socialist society where inheritance is taxed at a higher rate, and there's more social redistribution of wealth.) After all, my favorite Christie book is the one that taught me the word tontine, in the context of suspicious deaths within a family.
To be fair, part of this is general demographic stereotyping. In Christie's works, military men are always boring blowhards, doctors are always genial and twinkling, ministers are always overly earnest, lawyers are always brittle and cautious, and secretaries are always intimidatingly competent. And servants are always dumb but harmless. Christie gets some humor out of these stereotypes, but does little to transcend them.
George (the valet of Christie's most famous character, Belgian detective Hercule Poirot) might seem to be an exception. But he's a stereotype of a deferential, passive, unemotional, quietly competent English butler. He isn't actually helpful; Christie finds comedy in the mismatch between his domestic preoccupations and the intellectual work of Poirot. And George, like the other servants in the Christie universe, doesn't exist outside of his relationship to a wealthier character.
But the books abound with such glib comments, which have the overall effect of dehumanizing the unprivileged. It's telling that the murder suspects and victims are almost never working class, and both murder and tragic victimhood are presented as being reserved for more privileged people. One characteristic passage comes from Murder Is Easy: "It was not a case of the butcher, the baker, the candlestick maker. It was not a case of a mere garage mechanic. The person in question was one against whom an accusation of murder was fantastic and moreover, a serious matter." In Peril at End House, Poirot reflects of a servant that the "general mentality of crime seems above her level." That servants are too brainless to even be capable of murder is, in the Christieverse, the ultimate insult.
Christie seems to agree with these kinds of attitudes–particularly in A Murder Is Announced, with its extreme wistfulness for a bygone era when the strict class system was still intact, and murder was mostly genteel. "Genteel murder" is an apt description for Christie's work in general. On one hand, the atmosphere of this gentility is one of the many elements that make Christie's plots a pleasure to read. But on the other hand, her constant effacement or denigration of the working class is one of the many elements that make her work troubling. Different readers will navigate the balance between the two in different ways, and some may decide that her class politics make it too hard to enjoy her books. I, instead, flinch every so often while reading a Christie, but ultimately come back for more of her tightly constructed plots and clever psychological observations.


Enjoy our Sophisticated Southern Cuisine, exceptionally unique atmosphere and breathtaking views that span from Grandfather Mountain to Hound Ears and beyond. Indoor/Outdoor seating, full ABC permits and plenty of hassle-free parking. Public Welcome. Open 7 days a week. Bar fare begins at 4:30 p.m. Dinner menu starts at 5:30 p.m.


Our guest house Stoeckli is located in Alsace, 3,5 km away from the historical centre of Strasbourg, easily accessible by bus, tram or bicycle. If you come by car you can park easily. It is close to the European Institutions, Arte, the Wacken Exhibition Center, the Music and Congress Center, the EEE in Schiltigheim.
All shops and public transport are nearby.
60 km from Baden-Baden in Germany.
Agnès Coudry, 3 and 5 rue de la Wantzenau F-67300 Schiltigheim.