text:
Nestlé Purina CAN Summit
Clinician's Brief (Capsule)
Feeding Management of the Neutered Cat
In the domestic cat, neutering is a risk factor for obesity, which can lead to diabetes mellitus, constipation, orthopedic disease, altered hemostasis, urinary tract disease, hepatic lipidosis, and skin disease. Clients therefore should be educated about the risk for obesity after their pet has been neutered. Neutering usually occurs during a growth period.
Kittens require a specific balance of nutrients to support normal development, so food designed for growth should be fed until ~1 year of age. The age of neutering does not appear to affect the risk for obesity; therefore, weight management strategies could wait until the kitten has finished growing. Factors to consider when educating clients include avoiding free feeding and maintaining strict adherence to daily caloric consumption. Determining a cat's energy needs after neutering should be based on food intake before neutering, if known. However, the dietary restriction necessary to avoid weight gain can vary for each individual, underlining the importance of ongoing monitoring and adjustment of food intake.—Larsen JA
Canine Renal Disease: When Is the Right Time to Strike?
Evidence-based feeding strategies for canine renal disease are lacking for International Renal Interest Society (IRIS) stages 1–2. Dogs with renal disease (any stage, particularly stage 1 or 2) should be assessed regularly to ensure overall health and nutrition status by scoring muscle condition, body condition, and body weight. Stage 3 (defined as creatinine >2 mg/dL) may be the point at which dietary intervention involves restriction of protein, phosphorus, and sodium. For dogs at stage 2 or less, the general guideline is the same as the minimum adult daily requirement: 1 g protein/lb body weight (senior dogs may need up to 50% more). Avoiding excess phosphorus intake is suggested at IRIS stage 2, rather than implementing a therapeutic renal diet, unless serum phosphorus levels are elevated (>4.6 mg/dL). Finally, supplements (eg, omega-3 fatty acids) may help suppress inflammation and platelet aggregation, lower blood pressure, and modify renal hemodynamics. Because data do not support omega-3 fatty acid intake amounts in patients with renal disease, total daily intake should be calculated to avoid oversupplementation.—Churchill J
How I Feed: The Underweight Senior Cat with Multiple Problems
A significant portion of senior cats, whose nutritional requirements differ from younger cats, are underweight; senior cats with underlying medical problems should consume regular feedings to achieve or maintain ideal body condition. In this case, a 9-year-old spayed cat previously diagnosed with granular lymphoma affecting the liver and mesenteric lymph nodes failed to gain weight despite placement of an esophagostomy tube. The cat was tube fed 60 mL q6h of a canned recovery diet that provided 288 kcal/day. The cat transitioned to a canned recovery diet and canned liquid diet blend given q12h to provide 320 kcal/day. The owners were advised to encourage oral food consumption before tube feedings. Within 2 months, the cat's weight went from 4.45–5.3 kg. This case illustrates the need to prioritize a patient's current problems and develop a feeding plan based on disease severity and the patient's appetite level, while minimizing refeeding syndrome in hyporectic patients. Cachexia (loss of lean body mass in patients with neoplasia or other chronic diseases) is common in senior cats with underlying illness and requires appropriate caloric intake to decrease its effect on morbidity and mortality. Fish oil omega-3 fatty acids have been found useful in some patients with cachexia and can be administered through a feeding tube.—Lenox CE
Management of Overweight Dogs & Cats with Cancer
Malnutrition typically associated with cancer patients is known as cancer cachexia, a protein-energy malnutrition characterized by weight loss (WL), fatigue, anemia, and loss of lean body mass and adipose tissue. However, strong association between obesity and malignancy is becoming more apparent. In humans, an increased association between obesity and certain cancers, as well as difficulties in neoplastic disease treatment after diagnosis, has been found. People with established obesity have shorter survival times and higher death rates after cancer has been diagnosed than do people with a healthy body weight. This same relationship has not been fully documented in dogs and cats but may be similar based on early endocrine studies. Thus, development of a WL program for obese dogs and cats with established neoplastic processes may be beneficial. First, it is necessary to determine whether WL offers effective clinical benefit; if not, the time and energy involved in successful WL are not worthwhile. Next, appropriate energy intake for safe WL should be calculated and a diet chosen. For cancer patients, rations typically deliver 35%–50% of calories as protein, contain few carbohydrate calories, and are high in fat. Owners should receive strict feeding guidelines; WL should be monitored to ensure that weight is not being lost too quickly. Once a target weight has been achieved, a maintenance diet can be selected.—Mauldin GE
Adapting to a New Diet During Dog Domestication: Implications for the Domestication Process & Dog Health
The genomes of dogs and wolves were compared to map the selection process during domestication. Thirty-six genomic regions were identified as significantly different between dogs and wolves. Using gene ontology (GO) analysis, genes within these regions were functionally characterized into 2 major themes: nervous system development and digestion.
During dog domestication, selection for 3 starch digestion genes (ie, AMY2B, MGAM, SGLT1) was affected. The pancreatic amylase gene (AMY2B) is responsible for initiating starch digestion in the small intestine. Quantitative PCR analysis showed that repeated gene duplications in dogs resulted in an average sevenfold increase in AMY2B gene copies; this is associated with higher expression of the gene. The MGAM gene, responsible for hydrolysis of maltose to glucose, is located in a region on chromosome 16 that is highly divergent between dogs and wolves. The SGLT1 gene resides in a region on chromosome 26, which also differs markedly between dogs and wolves. SGLT1 is responsible for assisting with glucose absorption through the sodium–glucose cotransporter in the small intestinal wall.
It is believed that such adaptations allowed the ancestors of modern dogs to thrive on a relatively starch-rich diet, an important step in domestication. However, strong variability in AMY2B copy number and widely varying serum amylase activity values among dogs indicate that the ability to handle starch may vary individually and among breeds.—Axelsson E
Evolutionary vs Evidence-Based Diets
Pet owners may consider evolutionary diets (eg, biologically appropriate raw food [BARF]) to mimic the natural diet of their pet's wild ancestors. These diets may lead to serious malnutrition when devised by nonexperts; however, this does not mean that scientific knowledge cannot be applied to create nutritionally balanced evolutionary diets by applying evidence-based medicine (EBM) principles.
An EBM approach to nutrition should address questions regarding industrial processing effects, nutrient requirements, hygienic risks, possibility of feed contamination, and more. A literature review should provide valid supportive evidence to answer these questions. The effects of food processing extend beyond nutrient availability. Different starch types affect digestibility and microbial activity. Food particle size can impact microbial flora. Because nutrient deficiencies and excesses, insufficient food hygiene, and food contamination can cause life-threatening or crippling diseases, good nutrition can help avoid such problems. If potential risk is associated with a given diet or food, the risk cannot be disregarded until EBM justifies the diet's safety. Scientific progress necessitates continual literature review, which has resulted in revised dietary recommendations.—Kienzle E
Towards Optimizing Feline Nutrition: Insights from the Dietary Nutrient Profile of Feral Cats
Feeding a natural diet to domestic cats is a popular trend in feline nutrition, but to what extent can this nutrient profile be considered optimal? Prey items ingested by feral cats included mammals (78%), birds (16%), reptiles and amphibians (3.7%), and invertebrates (1.2%). The nutrient profiles of 27 dietary prey items ingested by feral cats were averaged and compared with average nutrient profiles of commercial feline dry diets. Nutrient profile analysis of feral cats showed that 52% of daily energy intake is derived from protein, 46% from fat, and 2% from nitrogen-free extract (NFE). NFE content in feline commercial foods is mainly derived from cereal grain starch, which is generally well digested.
The health effects of long-term carbohydrate intake in domestic cats are not clear. Dietary protein and phosphorus content of prey items ingested by feral cats are higher than the physiologic minimum requirement, which may pose a risk for cats with impaired renal function. Nonnutritive properties (eg, feed consistency, texture) play an important role in maintaining a balanced microbial population in the GI tract; these factors should be considered when optimizing feline diets. Valuable insights may be gained by studying the natural diets of feral cats, although severe physiologic and climatic conditions faced by feral cats differ markedly from the more sedentary lifestyle of domestic cats.—Hagen-Plantinga EA
Raw Meat-Based Diets: Current Evidence Regarding Benefits & Risks
High-quality studies evaluating raw meat-based pet diets (RMBD, commercial or home prepared) are limited. RMBD consumption is associated with certain risk factors (eg, nutritional imbalances, dental fractures, GI trauma, exposure to pathogenic bacteria, viruses, protozoa not killed during cooking). RMBD may contain potentially harmful nutritional imbalances (eg, inadequate vitamin A and E levels, excessive vitamin D, inappropriate calcium:phosphorus ratio). Diets containing bones pose the risk for GI obstruction or perforation; no known studies have evaluated the risk for dogs fed raw bones versus cooked bones. Feeding RMBD is a known risk factor for various pathogens (eg, Salmonella spp, Escherichia coli, Toxoplasma gondii, Neospora caninum). Of dogs fed RMBD, 3%–50% shed Salmonella spp in their feces; cases of human salmonellosis resulting from direct or indirect contact with dogs have been documented. Benefits ascribed to RMBD include improved skin and coat quality, improved digestibility, improved immune function, and decreased incidence of numerous medical conditions. Some claims may be based on anecdotal evidence rather than scientific study, however. In addition, most home-prepared RMBD have been found to be deficient in 1 or more essential nutrients. These diets should be reviewed by board-certified veterinary nutritionists and owners counseled on the potential risks.—Hamper BA
Systemic Illness: The Role of Oxidative Stress & Antioxidant Supplementation
The endogenous antioxidant network is made up of thiol antioxidants (eg, glutathione, cysteine), scavenger enzymes (eg, glutathione peroxidase, glutathione reductase, superoxide dismutase, catalase), lipids, water-soluble vitamins (eg, A, C, E, betacarotene), and trace minerals (eg, selenium, zinc, iron, manganese, copper), which modulate or quench reactive oxygen species (ROS) and maintain cellular homeostasis and redox balance. Because oxidative stress plays a role in the pathogenesis of many acute and chronic diseases (eg, hepatopathies, drug-associated toxicoses, heart failure, chronic kidney disease [CKD], chronic inflammatory disease, diabetes mellitus) antioxidant supplementation may be a logical step in disease treatment. Patients with liver disease tend to have low glutathione concentrations, which can contribute to hepatocyte damage and disease progression. Oral administration of glutathione precursors (ie, SAMe, N-acetyl cysteine, silibinin) to liver disease patients can lead to increased glutathione concentration. Despite a paucity of data, vitamin E supplementation has been used in dogs and cats with liver disease, as some human studies have shown benefits. Dogs and cats with CKD would likely benefit from dietary antioxidant and/or vitamin supplementation. Antioxidant supplementation in ill dogs and cats has been largely extrapolated from data on humans and a limited number of species-specific controlled clinical trials; more research is needed.—Viviano KR
The Long-Term Health Effects of Spay & Castration for Dogs
Research is emerging on the long-term effects of surgical sterilization of pet dogs and cats. Because sterilization involves removal of the entire organ system and its endocrine axis, substantial and widespread effects should be anticipated. Most published data support the finding that sterilized dogs have a longer lifespan as compared with intact dogs, although information regarding when pets were sterilized is lacking. Classifying dogs as sterilized or intact at time of death without knowing when sterilization occurred could misrepresent the beneficial effects of maintaining exposure to sex hormones for any length of time before sterilization. One study of female rottweilers identified a beneficial effect of duration of intact status on lifespan. The effects of sterilization on specific areas of development were explored (eg, behavioral effects, growth and musculoskeletal development, weight gain, activity level, training, cortisol axis). Studies also have examined the effects of neuter status on the risk for developing a particular disease (eg, cancer, urethral sphincter mechanism incompetence, musculoskeletal disease [eg, hip dysplasia, cranial cruciate ligament rupture], others). Growing evidence indicates that sterilized dogs and cats have different risks for certain diseases than do intact animals, but further research is needed.—Creevy KE


text:
package org.apache.nifi.registry.ranger;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.nifi.registry.properties.NiFiRegistryProperties;
import org.apache.nifi.registry.security.authorization.AuthorizationRequest;
import org.apache.nifi.registry.security.authorization.AuthorizationResult;
import org.apache.nifi.registry.security.authorization.AuthorizerConfigurationContext;
import org.apache.nifi.registry.security.authorization.AuthorizerInitializationContext;
import org.apache.nifi.registry.security.authorization.ConfigurableUserGroupProvider;
import org.apache.nifi.registry.security.authorization.RequestAction;
import org.apache.nifi.registry.security.authorization.Resource;
import org.apache.nifi.registry.security.authorization.UserContextKeys;
import org.apache.nifi.registry.security.authorization.UserGroupProvider;
import org.apache.nifi.registry.security.authorization.UserGroupProviderLookup;
import org.apache.nifi.registry.security.authorization.exception.AuthorizationAccessException;
import org.apache.nifi.registry.security.authorization.exception.UninheritableAuthorizationsException;
import org.apache.nifi.registry.security.exception.SecurityProviderCreationException;
import org.apache.nifi.registry.util.StandardPropertyValue;
import org.apache.ranger.authorization.hadoop.config.RangerPluginConfig;
import org.apache.ranger.plugin.policyengine.RangerAccessRequest;
import org.apache.ranger.plugin.policyengine.RangerAccessRequestImpl;
import org.apache.ranger.plugin.policyengine.RangerAccessResourceImpl;
import org.apache.ranger.plugin.policyengine.RangerAccessResult;
import org.apache.ranger.plugin.policyengine.RangerAccessResultProcessor;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentMatcher;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

public class TestRangerAuthorizer {

    private static final String TENANT_FINGERPRINT =
            "<tenants>"
                    + "<user identifier=\"user-id-1\" identity=\"user-1\"></user>"
                    + "<group identifier=\"group-id-1\" name=\"group-1\">"
                    + "<groupUser identifier=\"user-id-1\"></groupUser>"
                    + "</group>"
                    + "</tenants>";

    private static final String EMPTY_FINGERPRINT = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"
            + "<managedRangerAuthorizations>"
            + "<userGroupProvider/>"
            + "</managedRangerAuthorizations>";

    private static final String NON_EMPTY_FINGERPRINT = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"
            + "<managedRangerAuthorizations>"
            + "<userGroupProvider>"
            + "<tenants>"
            + "<user identifier=\"user-id-1\" identity=\"user-1\"></user>"
            + "<group identifier=\"group-id-1\" name=\"group-1\">"
            + "<groupUser identifier=\"user-id-1\"></groupUser>"
            + "</group>"
            + "</tenants>"
            + "</userGroupProvider>"
            + "</managedRangerAuthorizations>";

    private MockRangerAuthorizer authorizer;
    private RangerBasePluginWithPolicies rangerBasePlugin;

    private final String serviceType = "nifiRegistryService";
    private final String appId = "nifiRegistryAppId";

    private RangerAccessResult allowedResult;
    private RangerAccessResult notAllowedResult;
    private Map<String, String> authorizersXmlContent = null;

    @BeforeEach
    public void initialization() {
        authorizersXmlContent = Stream.of(new String[][] {
                {RangerAuthorizer.USER_GROUP_PROVIDER, "user-group-provider"},
                {RangerAuthorizer.RANGER_SECURITY_PATH_PROP, "src/test/resources/ranger/ranger-nifi-registry-security.xml"},
                {RangerAuthorizer.RANGER_AUDIT_PATH_PROP, "src/test/resources/ranger/ranger-nifi-registry-audit.xml"},
                {RangerAuthorizer.RANGER_APP_ID_PROP, appId},
                {RangerAuthorizer.RANGER_SERVICE_TYPE_PROP, serviceType}
        }).collect(Collectors.toMap(entry -> entry[0], entry -> entry[1]));
    }

    private void setup(final NiFiRegistryProperties registryProperties,
                      final UserGroupProvider userGroupProvider,
                      final AuthorizerConfigurationContext configurationContext) {
        // have to initialize this system property before anything else
        File krb5conf = new File("src/test/resources/krb5.conf");
        assertTrue(krb5conf.exists());
        System.setProperty("java.security.krb5.conf", krb5conf.getAbsolutePath());

        // rest the authentication to simple in case any tests set it to kerberos
        final Configuration securityConf = new Configuration();
        securityConf.set(RangerAuthorizer.HADOOP_SECURITY_AUTHENTICATION, "simple");
        UserGroupInformation.setConfiguration(securityConf);

        rangerBasePlugin = mock(RangerBasePluginWithPolicies.class);

        final RangerPluginConfig pluginConfig = new RangerPluginConfig(serviceType, null, appId, null, null, null);
        when(rangerBasePlugin.getConfig()).thenReturn(pluginConfig);

        authorizer = new MockRangerAuthorizer(rangerBasePlugin);

        final UserGroupProviderLookup userGroupProviderLookup = mock(UserGroupProviderLookup.class);
        when(userGroupProviderLookup.getUserGroupProvider(eq("user-group-provider"))).thenReturn(userGroupProvider);

        final AuthorizerInitializationContext initializationContext = mock(AuthorizerInitializationContext.class);
        when(initializationContext.getUserGroupProviderLookup()).thenReturn(userGroupProviderLookup);

        authorizer.setRegistryProperties(registryProperties);
        authorizer.initialize(initializationContext);
        authorizer.onConfigured(configurationContext);

        assertFalse(UserGroupInformation.isSecurityEnabled());

        allowedResult = mock(RangerAccessResult.class);
        when(allowedResult.getIsAllowed()).thenReturn(true);

        notAllowedResult = mock(RangerAccessResult.class);
        when(notAllowedResult.getIsAllowed()).thenReturn(false);
    }

    private AuthorizerConfigurationContext createMockConfigContext() {
        AuthorizerConfigurationContext configurationContext = mock(AuthorizerConfigurationContext.class);

        for (Map.Entry<String, String> entry : authorizersXmlContent.entrySet()) {
            when(configurationContext.getProperty(eq(entry.getKey())))
                    .thenReturn(new StandardPropertyValue(entry.getValue()));
        }

        when(configurationContext.getProperties()).thenReturn(authorizersXmlContent);

        return configurationContext;
    }

    @Test
    public void testOnConfigured() {
        setup(mock(NiFiRegistryProperties.class), mock(UserGroupProvider.class), createMockConfigContext());

        verify(rangerBasePlugin, times(1)).init();

        assertEquals(appId, authorizer.mockRangerBasePlugin.getAppId());
        assertEquals(serviceType, authorizer.mockRangerBasePlugin.getServiceType());
    }

    @Test
    public void testKerberosEnabledWithoutKeytab() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();

        when(configurationContext.getProperty(eq(RangerAuthorizer.RANGER_KERBEROS_ENABLED_PROP)))
                .thenReturn(new StandardPropertyValue("true"));

        NiFiRegistryProperties registryProperties = mock(NiFiRegistryProperties.class);
        when(registryProperties.getKerberosServicePrincipal()).thenReturn("");

        assertThrows(SecurityProviderCreationException.class, () -> setup(registryProperties, mock(UserGroupProvider.class), configurationContext));
    }

    @Test
    public void testKerberosEnabledWithoutPrincipal() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();

        when(configurationContext.getProperty(eq(RangerAuthorizer.RANGER_KERBEROS_ENABLED_PROP)))
                .thenReturn(new StandardPropertyValue("true"));

        NiFiRegistryProperties registryProperties = mock(NiFiRegistryProperties.class);
        when(registryProperties.getKerberosServiceKeytabLocation()).thenReturn("");

        assertThrows(SecurityProviderCreationException.class, () -> setup(registryProperties, mock(UserGroupProvider.class), configurationContext));
    }

    @Test
    public void testKerberosEnabledWithoutKeytabOrPrincipal() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();

        when(configurationContext.getProperty(eq(RangerAuthorizer.RANGER_KERBEROS_ENABLED_PROP)))
                .thenReturn(new StandardPropertyValue("true"));

        NiFiRegistryProperties registryProperties = mock(NiFiRegistryProperties.class);
        when(registryProperties.getKerberosServiceKeytabLocation()).thenReturn("");
        when(registryProperties.getKerberosServicePrincipal()).thenReturn("");

        assertThrows(SecurityProviderCreationException.class, () -> setup(registryProperties, mock(UserGroupProvider.class), configurationContext));
    }

    @Test
    public void testKerberosEnabled() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();

        when(configurationContext.getProperty(eq(RangerAuthorizer.RANGER_KERBEROS_ENABLED_PROP)))
                .thenReturn(new StandardPropertyValue("true"));

        NiFiRegistryProperties registryProperties = mock(NiFiRegistryProperties.class);
        when(registryProperties.getKerberosServiceKeytabLocation()).thenReturn("test");
        when(registryProperties.getKerberosServicePrincipal()).thenReturn("test");

        assertThrows(SecurityProviderCreationException.class, () -> setup(registryProperties, mock(UserGroupProvider.class), configurationContext));
    }

    @Test
    public void testApprovedWithDirectAccess() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), mock(UserGroupProvider.class), configurationContext);

        final String systemResource = "/system";
        final RequestAction action = RequestAction.WRITE;
        final String user = "admin";
        final String clientIp = "192.168.1.1";

        final Map<String,String> userContext = new HashMap<>();
        userContext.put(UserContextKeys.CLIENT_ADDRESS.name(), clientIp);

        // the incoming NiFi request to test
        final AuthorizationRequest request = new AuthorizationRequest.Builder()
                .resource(new MockResource(systemResource, systemResource))
                .action(action)
                .identity(user)
                .resourceContext(new HashMap<>())
                .userContext(userContext)
                .accessAttempt(true)
                .anonymous(false)
                .build();

        // the expected Ranger resource and request that are created
        final RangerAccessResourceImpl resource = new RangerAccessResourceImpl();
        resource.setValue(RangerAuthorizer.RANGER_NIFI_REG_RESOURCE_NAME, systemResource);

        final RangerAccessRequestImpl expectedRangerRequest = new RangerAccessRequestImpl();
        expectedRangerRequest.setResource(resource);
        expectedRangerRequest.setAction(request.getAction().name());
        expectedRangerRequest.setAccessType(request.getAction().name());
        expectedRangerRequest.setUser(request.getIdentity());
        expectedRangerRequest.setClientIPAddress(clientIp);

        // a non-null result processor should be used for direct access
        when(rangerBasePlugin.isAccessAllowed(
                argThat(new RangerAccessRequestMatcher(expectedRangerRequest)))
        ).thenReturn(allowedResult);

        final AuthorizationResult result = authorizer.authorize(request);
        assertEquals(AuthorizationResult.approved().getResult(), result.getResult());
    }

    @Test
    public void testApprovedWithNonDirectAccess() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), mock(UserGroupProvider.class), configurationContext);

        final String systemResource = "/system";
        final RequestAction action = RequestAction.WRITE;
        final String user = "admin";

        // the incoming NiFi request to test
        final AuthorizationRequest request = new AuthorizationRequest.Builder()
                .resource(new MockResource(systemResource, systemResource))
                .action(action)
                .identity(user)
                .resourceContext(new HashMap<>())
                .accessAttempt(false)
                .anonymous(false)
                .build();

        // the expected Ranger resource and request that are created
        final RangerAccessResourceImpl resource = new RangerAccessResourceImpl();
        resource.setValue(RangerAuthorizer.RANGER_NIFI_REG_RESOURCE_NAME, systemResource);

        final RangerAccessRequestImpl expectedRangerRequest = new RangerAccessRequestImpl();
        expectedRangerRequest.setResource(resource);
        expectedRangerRequest.setAction(request.getAction().name());
        expectedRangerRequest.setAccessType(request.getAction().name());
        expectedRangerRequest.setUser(request.getIdentity());

        // no result processor should be provided used non-direct access
        when(rangerBasePlugin.isAccessAllowed(
                argThat(new RangerAccessRequestMatcher(expectedRangerRequest)))
        ).thenReturn(allowedResult);

        final AuthorizationResult result = authorizer.authorize(request);
        assertEquals(AuthorizationResult.approved().getResult(), result.getResult());
    }

    @Test
    public void testResourceNotFound() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), mock(UserGroupProvider.class), configurationContext);

        final String systemResource = "/system";
        final RequestAction action = RequestAction.WRITE;
        final String user = "admin";

        // the incoming NiFi request to test
        final AuthorizationRequest request = new AuthorizationRequest.Builder()
                .resource(new MockResource(systemResource, systemResource))
                .action(action)
                .identity(user)
                .resourceContext(new HashMap<>())
                .accessAttempt(true)
                .anonymous(false)
                .build();

        // the expected Ranger resource and request that are created
        final RangerAccessResourceImpl resource = new RangerAccessResourceImpl();
        resource.setValue(RangerAuthorizer.RANGER_NIFI_REG_RESOURCE_NAME, systemResource);

        final RangerAccessRequestImpl expectedRangerRequest = new RangerAccessRequestImpl();
        expectedRangerRequest.setResource(resource);
        expectedRangerRequest.setAction(request.getAction().name());
        expectedRangerRequest.setAccessType(request.getAction().name());
        expectedRangerRequest.setUser(request.getIdentity());

        // no result processor should be provided used non-direct access
        when(rangerBasePlugin.isAccessAllowed(
                argThat(new RangerAccessRequestMatcher(expectedRangerRequest)),
                any(RangerAccessResultProcessor.class))
        ).thenReturn(notAllowedResult);

        // return false when checking if a policy exists for the resource
        when(rangerBasePlugin.doesPolicyExist(systemResource, action)).thenReturn(false);

        final AuthorizationResult result = authorizer.authorize(request);
        assertEquals(AuthorizationResult.resourceNotFound().getResult(), result.getResult());
    }

    @Test
    public void testDenied() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), mock(UserGroupProvider.class), configurationContext);

        final String systemResource = "/system";
        final RequestAction action = RequestAction.WRITE;
        final String user = "admin";

        // the incoming NiFi request to test
        final AuthorizationRequest request = new AuthorizationRequest.Builder()
                .resource(new MockResource(systemResource, systemResource))
                .action(action)
                .identity(user)
                .resourceContext(new HashMap<>())
                .accessAttempt(true)
                .anonymous(false)
                .build();

        // the expected Ranger resource and request that are created
        final RangerAccessResourceImpl resource = new RangerAccessResourceImpl();
        resource.setValue(RangerAuthorizer.RANGER_NIFI_REG_RESOURCE_NAME, systemResource);

        final RangerAccessRequestImpl expectedRangerRequest = new RangerAccessRequestImpl();
        expectedRangerRequest.setResource(resource);
        expectedRangerRequest.setAction(request.getAction().name());
        expectedRangerRequest.setAccessType(request.getAction().name());
        expectedRangerRequest.setUser(request.getIdentity());

        // no result processor should be provided used non-direct access
        when(rangerBasePlugin.isAccessAllowed(
                argThat(new RangerAccessRequestMatcher(expectedRangerRequest)))
        ).thenReturn(notAllowedResult);

        // return true when checking if a policy exists for the resource
        when(rangerBasePlugin.doesPolicyExist(systemResource, action)).thenReturn(true);

        final AuthorizationResult result = authorizer.authorize(request);
        assertEquals(AuthorizationResult.denied().getResult(), result.getResult());
    }

    @Test
    public void testRangerAdminApproved() {
        final String acceptableIdentity = "ranger-admin";
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX, acceptableIdentity);

        final String requestIdentity = "ranger-admin";
        runRangerAdminTest(RangerAuthorizer.RESOURCES_RESOURCE, requestIdentity, AuthorizationResult.approved().getResult());
    }

    @Test
    public void testRangerAdminApprovedMultipleAcceptableIdentities() {
        final String acceptableIdentity1 = "ranger-admin1";
        final String acceptableIdentity2 = "ranger-admin2";
        final String acceptableIdentity3 = "ranger-admin3";
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX, acceptableIdentity1);
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX + " 2", acceptableIdentity2);
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX + " 3", acceptableIdentity3);

        final String requestIdentity = "ranger-admin2";
        runRangerAdminTest(RangerAuthorizer.RESOURCES_RESOURCE, requestIdentity, AuthorizationResult.approved().getResult());
    }

    @Test
    public void testRangerAdminApprovedMultipleAcceptableIdentities2() {
        final String acceptableIdentity1 = "ranger-admin1";
        final String acceptableIdentity2 = "ranger-admin2";
        final String acceptableIdentity3 = "ranger-admin3";
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX, acceptableIdentity1);
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX + " 2", acceptableIdentity2);
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX + " 3", acceptableIdentity3);

        final String requestIdentity = "ranger-admin3";
        runRangerAdminTest(RangerAuthorizer.RESOURCES_RESOURCE, requestIdentity, AuthorizationResult.approved().getResult());
    }

    @Test
    public void testRangerAdminDenied() {
        final String acceptableIdentity = "ranger-admin";
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX, acceptableIdentity);

        final String requestIdentity = "ranger-admin";
        runRangerAdminTest("/flow", requestIdentity, AuthorizationResult.denied().getResult());
    }

    @Test
    public void testRangerAdminDeniedMultipleAcceptableIdentities() {
        final String acceptableIdentity1 = "ranger-admin1";
        final String acceptableIdentity2 = "ranger-admin2";
        final String acceptableIdentity3 = "ranger-admin3";
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX, acceptableIdentity1);
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX + " 2", acceptableIdentity2);
        authorizersXmlContent.put(RangerAuthorizer.RANGER_ADMIN_IDENTITY_PROP_PREFIX + " 3", acceptableIdentity3);

        final String requestIdentity = "ranger-admin4";
        runRangerAdminTest(RangerAuthorizer.RESOURCES_RESOURCE, requestIdentity, AuthorizationResult.denied().getResult());
    }

    private void runRangerAdminTest(final String resourceIdentifier, final String requestIdentity, final AuthorizationResult.Result expectedResult) {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();

        setup(mock(NiFiRegistryProperties.class), mock(UserGroupProvider.class), configurationContext);

        final RequestAction action = RequestAction.WRITE;

        // the incoming NiFi request to test
        final AuthorizationRequest request = new AuthorizationRequest.Builder()
                .resource(new MockResource(resourceIdentifier, resourceIdentifier))
                .action(action)
                .identity(requestIdentity)
                .resourceContext(new HashMap<>())
                .accessAttempt(true)
                .anonymous(false)
                .build();

        // the expected Ranger resource and request that are created
        final RangerAccessResourceImpl resource = new RangerAccessResourceImpl();
        resource.setValue(RangerAuthorizer.RANGER_NIFI_REG_RESOURCE_NAME, resourceIdentifier);

        final RangerAccessRequestImpl expectedRangerRequest = new RangerAccessRequestImpl();
        expectedRangerRequest.setResource(resource);
        expectedRangerRequest.setAction(request.getAction().name());
        expectedRangerRequest.setAccessType(request.getAction().name());
        expectedRangerRequest.setUser(request.getIdentity());

        // return true when checking if a policy exists for the resource
        when(rangerBasePlugin.doesPolicyExist(resourceIdentifier, action)).thenReturn(true);

        // a non-null result processor should be used for direct access
        when(rangerBasePlugin.isAccessAllowed(
                argThat(new RangerAccessRequestMatcher(expectedRangerRequest)))
        ).thenReturn(notAllowedResult);

        final AuthorizationResult result = authorizer.authorize(request);
        assertEquals(expectedResult, result.getResult());
    }

    /**
     * Extend RangerAuthorizer to inject a mock base plugin for testing.
     */
    private static class MockRangerAuthorizer extends RangerAuthorizer {

        RangerBasePluginWithPolicies mockRangerBasePlugin;

        MockRangerAuthorizer(RangerBasePluginWithPolicies mockRangerBasePlugin) {
            this.mockRangerBasePlugin = mockRangerBasePlugin;
        }

        @Override
        protected RangerBasePluginWithPolicies createRangerBasePlugin(String serviceType, String appId) {
            when(mockRangerBasePlugin.getAppId()).thenReturn(appId);
            when(mockRangerBasePlugin.getServiceType()).thenReturn(serviceType);
            return mockRangerBasePlugin;
        }
    }

    /**
     * Resource implementation for testing.
     */
    private static class MockResource implements Resource {

        private final String identifier;
        private final String name;

        MockResource(String identifier, String name) {
            this.identifier = identifier;
            this.name = name;
        }

        @Override
        public String getIdentifier() {
            return identifier;
        }

        @Override
        public String getName() {
            return name;
        }

        @Override
        public String getSafeDescription() {
            return name;
        }
    }

    /**
     * Custom Mockito matcher for RangerAccessRequest objects.
     */
    private static class RangerAccessRequestMatcher implements ArgumentMatcher<RangerAccessRequest> {

        private final RangerAccessRequest request;

        RangerAccessRequestMatcher(RangerAccessRequest request) {
            this.request = request;
        }

        @Override
        public boolean matches(RangerAccessRequest other) {
            final boolean clientIpsMatch = (other.getClientIPAddress() == null && request.getClientIPAddress() == null)
                    || (other.getClientIPAddress() != null && request.getClientIPAddress() != null && other.getClientIPAddress().equals(request.getClientIPAddress()));

            return other.getResource().equals(request.getResource())
                    && other.getAccessType().equals(request.getAccessType())
                    && other.getAction().equals(request.getAction())
                    && other.getUser().equals(request.getUser())
                    && clientIpsMatch;
        }
    }

    @Test
    public void testNonConfigurableFingerPrint() {
        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), mock(UserGroupProvider.class), configurationContext);

        assertEquals(EMPTY_FINGERPRINT, authorizer.getFingerprint());
    }

    @Test
    public void testConfigurableEmptyFingerPrint() {
        final ConfigurableUserGroupProvider userGroupProvider = mock(ConfigurableUserGroupProvider.class);
        when(userGroupProvider.getFingerprint()).thenReturn("");

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        assertEquals(EMPTY_FINGERPRINT, authorizer.getFingerprint());
    }

    @Test
    public void testConfigurableFingerPrint() {
        final ConfigurableUserGroupProvider userGroupProvider = mock(ConfigurableUserGroupProvider.class);
        when(userGroupProvider.getFingerprint()).thenReturn(TENANT_FINGERPRINT);

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        assertEquals(NON_EMPTY_FINGERPRINT, authorizer.getFingerprint());
    }

    @Test
    public void testInheritEmptyFingerprint() {
        final ConfigurableUserGroupProvider userGroupProvider = mock(ConfigurableUserGroupProvider.class);

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        authorizer.inheritFingerprint(EMPTY_FINGERPRINT);

        verify(userGroupProvider, times(0)).inheritFingerprint(anyString());
    }

    @Test
    public void testInheritInvalidFingerprint() {
        final ConfigurableUserGroupProvider userGroupProvider = mock(ConfigurableUserGroupProvider.class);

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        assertThrows(AuthorizationAccessException.class, () -> authorizer.inheritFingerprint("not a valid fingerprint"));
    }

    @Test
    public void testInheritNonEmptyFingerprint() {
        final ConfigurableUserGroupProvider userGroupProvider = mock(ConfigurableUserGroupProvider.class);

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        authorizer.inheritFingerprint(NON_EMPTY_FINGERPRINT);

        verify(userGroupProvider, times(1)).inheritFingerprint(TENANT_FINGERPRINT);
    }

    @Test
    public void testCheckInheritEmptyFingerprint() {
        final ConfigurableUserGroupProvider userGroupProvider = mock(ConfigurableUserGroupProvider.class);

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        authorizer.checkInheritability(EMPTY_FINGERPRINT);

        verify(userGroupProvider, times(0)).inheritFingerprint(anyString());
    }

    @Test
    public void testCheckInheritInvalidFingerprint() {
        final ConfigurableUserGroupProvider userGroupProvider = mock(ConfigurableUserGroupProvider.class);

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        assertThrows(AuthorizationAccessException.class, () -> authorizer.checkInheritability("not a valid fingerprint"));
    }

    @Test
    public void testCheckInheritNonEmptyFingerprint() {
        final ConfigurableUserGroupProvider userGroupProvider = mock(ConfigurableUserGroupProvider.class);

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        authorizer.checkInheritability(NON_EMPTY_FINGERPRINT);

        verify(userGroupProvider, times(1)).checkInheritability(TENANT_FINGERPRINT);
    }

    @Test
    public void testCheckInheritNonConfigurableUserGroupProvider() {
        final UserGroupProvider userGroupProvider = mock(UserGroupProvider.class);

        final AuthorizerConfigurationContext configurationContext = createMockConfigContext();
        setup(mock(NiFiRegistryProperties.class), userGroupProvider, configurationContext);

        assertThrows(UninheritableAuthorizationsException.class, () -> authorizer.checkInheritability(NON_EMPTY_FINGERPRINT));
    }

}

redpajama_set_name: RedPajamaGithub


Hedd Wyn Essentials - Wild Oil Of Oregano, 10ML - Goodness Me!
Authentic wildcrafted Mediterranean Oregano oil, Origanum vulgare, (Carvacrol content greater than 80-85%) in a certified organic extra virgin Olive oil.
1-3 drops under the tongue 3x daily or as required.


The BlackBerry App World has turned three this week and with this RIM has let out some stats which on its official BlackBerry blog stating that the BB App World has seen about 2 billion downloads since its launch back in 2009 and there are about 70,000 apps in the App World.
RIM has listed the top five most-popular paid apps on the App World since its debut back in 2009. These paid apps are listed in no specific order because RIM has not let out the stats of their total number downloads or the revenue they generated.
The BeBuzz lets you know who is calling you just by looking at that little flashing LED on your BlackBerry smartphone. It also let you customize contact profiles so that you can easily see and hear exactly who's trying to reach you.
Shazam as we all know lets us in finding out which song is being played, the genre it belongs to and who has sung it just at a touch of a button.
Color ID is designed to let you assign custom LED color combinations by contact when you receive a BBM™, text, email or call. There are over 100 possible color combinations including "Disco" and "Double Rainbow" and unlimited custom contacts.
The BeWeather app is designed to keep you on top of whatever Mother Nature throws your way. Road warriors can set up multiple cities for those days when your carry-on luggage has to accommodate everything from short sleeves to parkas.
Well the world popular game has managed to claim a spot in the top five paid apps in a very short span of time, thanks to the love and craze for the game by all the limited BlackBerry PlayBook users around the world.
So these are the top five paid apps according RIM. But is there any personal favourite of yours which didn't make it to the list, then lets us know in the comments section below.


text:
USA Diving Partners with TeachAids to Provide CrashCourse Concussion Education to Athletes and Coaches
Apr 25, 2022 | Concussion, Sports Medicine | 0 |
USA Diving officially announces a partnership with TeachAids, a nonprofit leader in producing award-winning global health education, to promote understanding of concussions.
USA Diving is the national governing body (NGB) for the sport of Diving in the United States. Passionate about sharing the excitement of the sport with new fans, the organization and its team have maintained diving as the United States' most successful summer Olympic sport with 141 medals. USA Diving selects, conditions, and trains teams to represent the United States in major diving events including the Olympic Games, World Championships, and the FINA Diving World Cup.
Other well-known events include the USA Diving National Championships. USA Diving joins 22 US Olympic and Paralympic Committee National Governing Bodies to disseminate CrashCourse concussion education to its population of coaches, athletes and the larger sports community.
TeachAids creates breakthrough technology to solve persistent problems in health educationaround the world. Their products are designed with input from a team of world-class academics, researchers, medical experts, and sports industry professionals associated with leading organizations and institutions such as Stanford University, Harvard University, the Mayo Clinic, UCSF and others.
TeachAids has developed CrashCourse, a suite of interactive products focused on the prevention and treatment of concussions and related mental health issues. This education has been designed to teach athletes, parents, and coaches about concussions. CrashCourse products include scientific knowledge to help dispel myths and misconceptions about the concussion recovery process. They also serve as resources for athletic trainers, rehab specialists and physicians.
"Protecting the health and safety of our divers is our primary responsibility and we view everything through that lens. We are excited to continue to support TeachAids to bring the CrashCourse concussion education to our membership. CrashCourse provides an innovative and compelling resource for our athletes and coaches to help keep our sport as safe as possible." says Lee Michaud, President of USA Diving.
"TeachAids is proud to be working with USA Diving to bring CrashCourse concussion education to its sports community." adds Dr. Piya Sorcar, Founder and CEO of TeachAids. "Their outstanding and engaged leadership serves as a positive model, especially with their commitment to the health and safety of their athletes at every age and ability"
"A concussion is an invisible injury that can happen to anyone. This partnership will provide valuable education for our coaches and adds another critical step toward ensuring the safety of our athletes of all levels, both in competition and in practice," says Dan Laak, High Performance Director USA Diving.
PreviousStimwave Technologies and Aspen Medical Products Partner to Develop a Wearable Pain Management Solution
NextHospital for Special Surgery Expands Long Island Location with New Physical Therapy Center
Ankle Brace Features Orthotic Footplate for Support
Swimmer's Shoulder Pain Has a "Why." These Two Are Figuring It Out.
Blood Biomarkers May Help Predict Post-Concussion Recovery Time
Strategic Partnership to Result in Center for Sports Medicine in Maryland

redpajama_set_name: RedPajamaCommonCrawl


text:
By textilesofindia|2020-04-09T19:33:17+00:00February 25th, 2019|
Tangaliya is 700 years old traditional hand weaving technique, Legend tells us that centuries ago, in the stark landscape of Saurashtra, a Bharwad man married a woman from the weaver community amidst great opposition from both sides. Nevertheless, it was a marriage that would forever influence the rich tapestry of Indian craft. The children born to them were known as Dangasia, born of shepherds and weavers, and they created the art of Tangaliya weaving.
By textilesofindia|2020-04-09T19:33:19+00:00November 13th, 2018|
The Baluchari Saree originated in West Bengal, and is mainly worn by the women of India and Bangladesh. It is a hand woven saree using richly dyed silk, with intricate motifs depicting Indian mythology woven onto its large 'pallu'. Baluchari takes a week to be woven, and the craftsmen are largely centered in Murshidabad.
By textilesofindia|2020-04-10T17:46:00+00:00May 29th, 2018|
Venkatagiri Sarees are handwoven zari cotton sarees popular for their Jamdani style weaving pattern. Coming from the historic town of Venkatagiri in the state of Andhra Pradesh, Venkatagiri Sarees are one of the softest and most durable south sarees in India. They are usually of six yards and are suitable for all climates. The distinctive feature of a Venkatagiri saree is a big Jamdani motif of a peacock, parrot, swan, mango or leaf in the pallu. The fine weaving and unique zari designs of the sarees made them the preferred choice of royalty in Andhra Pradesh.
Sarees usually carry the name of the place of their origin, and the places where silk sarees are woven are indeed a great many in India! At other times the sarees are given names usually descriptive of their weave or appearance. Each state has its own time-tested traditions of sarees, carrying names in the vernacular, sometimes varying from village to village. This glossary is limited to a mere introduction to the more popular handwoven silk sarees.
ARNI SILK SAREE WEAVING
By textilesofindia|2020-04-09T19:33:23+00:00January 29th, 2018|
Kanchipuram silk saree weaving, arni silk saree weaving, kanchivaram silk saree weaving, , textiles of india, indian textiles, handloom weaving, i wear handloom, indiantextiles reviving, indianfashion
Jamdani – A Wondrous Weave
By textilesofindia|2020-04-09T19:32:04+00:00December 12th, 2017|
Apart from being a land of deep-seated culture, with colorful festivals, rich literature, varied languages
ROYAL MAHESHWARI SAREES
By textilesofindia|2020-04-09T19:32:06+00:00December 3rd, 2017|
The quintessential saree has remained one of the most favourite canvasses for Indian weavers. Craftsmen
Why do surgeons wear green scrub instead of white?
All kinds of collars all kinds of work
To Know More About Crafts & Textiles.
Textile Discoveries


text:
I have a very brief description of my creative life and a longer version for those with more time and interest.
The Brief One:
I studied art at Clemson University, the University of Santa Barbara and Chico State University for over eight years, extending over a period of time from 1969 to 1985. I also apprenticed under the nationally known artist Richard Goetz in the mid-seventies for a short time. I moved away from the gallery/museum scene in 1996 to delve deeply into the study of perception and its relationship to the creative process. I wanted to focus on creating a body of work free of any influence of the art market. This journey into the study of perception would extend beyond the next two decades through long periods of focused awareness and open-eyed meditation as I studied the landscapes before me, sometimes eight or more hours a day. I continued to paint during this time to express the realizations I was having and to integrate them into my educational art website I was creating. This marriage of the concepts on the website coupled with my art felt like a Rubik's cube coming together into one beautiful integrated whole. I sensed the website becoming a linchpin—a center from which my creative expressions could radiating out. In September of 2017, I started to exhibit my work publicly for the first time since 1996. It started with the Sausalito Art Festival, and the HarmonyUs Festival in 2017, the Edgewater Gallery in 2018, and the HarmonyUs Festival in 2018 and 2019.
My illustrated book, Tōbē and the River Is arose out of my website as an alternative way to help people move into revelations of these heightened levels of perception through the experiences of the protagonist, Tō•bē. Since its release in 2016, it has won The Nautilus Book Award, The Ben Franklin Award, The Global eBook Award, and The New Apple Book Award.
I was born on October 28th, 1950, and raised in a dairy-farm community in Wisconsin. All our relatives were farmers and my father a country preacher. I loved the farms of my childhood, the green lush fields, the taste of fresh milk, the fragrance of the cheese sheds, the maple trees, and their syrup, haylofts to play in, all the animals with light in their eyes, and winter sleigh rides wrapped in warm blankets next to grandpa.
I was six years old when my father joined the US Army as a chaplain and we moved to France. Our family traveled, visiting the great museums and cathedrals throughout Europe. My world view expanded as we experienced the art and customs of many different cultures. To go from the cow barns of Wisconsin to the gold and marble of the Vatican—to see the chiseled veins of Michelangelo's sculpture of Moses was a mind-opening experience for a child and one I still see clearly in my mind today.
We returned to the United States when I was close to eleven years old and we lived in North Carolina until the beginning of high school when we moved to the Monterey area in California. I didn't have much interest in art during these early formative years, for when I would attempt to do art I was never able to achieve what I envisioned, and I would put down the brushes or colored pencils once again dissatisfied. But my relationship with art would completely change when I went to college.
I attended Clemson University in 1969 for engineering. Looking at a large-scale model of a bridge one day in the Engineering Department, I came to a long list of formulas used to build the bridge. The list stretched from near the ceiling almost to the floor. My heart sunk. Everything was so predetermined, so "logical." My spirit ached for something else, a career with fire—for action arising out of a more heartfelt inspiration and vision. Architecture came to mind so that day I changed my major. I was fortunate that in the Architecture major Art Studio was a required course.
When I walked into my first art class I felt this amazing sense of freedom from the students in what they were doing and in their conversations. Whatever one envisioned one could pursue with total enthusiasm. I changed my major once again and for the last time to Art Studio. This sense of freedom and the creative spirit I felt so prevalent in the art studio would be my guiding star for the rest of my life. While at Clemson University I married my first wife, Maria.
My grade point average, though rising since my first semester in engineering from a dismal .8 to an acceptable 3.0, did not rise fast enough to keep me out of the draft and in 1971 I was drafted into the US Army. While I was in basic training at Fort Ord, California, my son, Justin was born. The military decided they could use my skills as an illustrator on the General's Staff at Fort Sill, Oklahoma and there I stayed until my discharge in 1973.
A month before my discharge I met Richard Goetz, a nationally known artist, who was a preeminent colorist and painter. Amazingly, he was teaching a class at the local Community Center where I signed up for the painting class. He asked if I would like to become an apprentice for him and his wife, Edith. They were going to have their annual summer workshop in Santa Fe, New Mexico right after my discharge from the military. The timing was perfect.
It was a glorious time in Santa Fe. People came from all over the country to paint the colorful landscapes and light of New Mexico with Richard and to draw the human figure under Edith's tutelage in the afternoon, inside when the monsoon rains would come. To be a young artist, painting in the high desert of New Mexico felt so exhilarating and romantic.
After the summer workshop, we returned to Oklahoma and Richard said to me that he would make me a nationally known artist within five years (he had a lot of connections and influence in the art world). I held in my hands the possibility of recognition as well as financial security, what so many artists long for, yet a feeling was gnawing at me that I had much to learn and experience about life yet. I knew that I would have to leave Richard and Edith and find my own way—to find my own unique visual "voice"—no matter how difficult that road might be.
I returned to Monterey, California, painting when I was able while having full-time jobs. But one day a pivotal experience occurred, what some would call a "spiritual experience." In the revelation, I understood the need for a deeper commitment to my art. I quit my job and moved to Santa Barbara and enrolled in the City College there, followed by the University of California, taking art studio and art history classes, painting sometimes eight or ten hours a day and sometimes more.
In 1982 I moved to the foothills of the Sierra Mountains and through 1985 I continued my art education at Chico State University, Chico, California. Over the years my work was displayed in a number of galleries and a couple of museums, but overall, a modest resumé.
During this period I was becoming increasingly aware that there were levels of perception influencing my painting. In 1995, now married to my second wife, Diana, we moved to Santa Fe, New Mexico. I made the important decision in 1996 to pull away from the commercial art scene altogether to pursue an exploration into these levels of perception. This journey I was about to embark on became the foundation of my art and life. Little did I suspect this journey would eventually extend beyond the next two decades.
It was during this time that I found employment doing late afternoon to midnight work as a security officer at the Federal Sites in Santa Fe and later at Los Alamos National Laboratory where I was basically getting paid to be alert and observant. This aligned perfectly with my aim to go into the in-depth study of levels of perception. I would go to very profound levels during the eight-hour shifts, taking notes or drawing on a little pad what I was experiencing in my patrol vehicle or post, and I would paint my experiences in my studio in the following mornings or early afternoons before I would have to go to work again.
As I went deeper into the study of perception, four main levels of perception started to stand out. They are "The Emanations of Objects," "The Force of Objects," "Objects in a Dimension", and "Objects in the Unified Field." I started writing out what I discovered about these four levels of perception and developing this educational website, combining my paintings with the words that described my experiences. I was taken over by a new enthusiasm to create a body of paintings that would express these profound levels of perception.
I felt my art website becoming a linchpin—a center from which my creative expressions could radiate out. It felt like a Rubik's cube finally revealing a tight, integrated pattern of many pieces of my creative work in one perfect unified whole.
I started showing the website to others and I soon realized some people needed a more entertaining/emotional approach to hold their attention and to experience what I was trying to pass on. Then the idea came to take the same principles in the website and put them into an illustrated fairytale book, so the reader could experience these aspects of perception through the eyes of the protagonist. The book, Tobe and the River Is was published in 2016, and it has already won The Nautilus Book Award, The Ben Franklin Award, The Global Ebook Award, and The New Apple Book Award. The Nautilus Award is particularly significant because it is in the Memoir Category, which meant they understand that my book is based on actual experience; it is not just a made-up fairytale.
I retired from the Lab in 2015, and in 2016 I went on a road trip through eight western states, doing painting studies to bring back to my new studio that was soon to open up in Santa Fe. The trip extended over weeks, visiting many of the state and national parks. Working my way down the coast from Puget Sound, Washington, I arrived at the coastal area near Mendocino, California and I received a text that my new studio was no longer available. Remarkably, within a matter of hours, a studio place presented itself in Mendocino and the quaint village became my new home.
In September of 2017, I started to exhibit my work publicly for the first time since 1996. It started with the Sausalito Art Festival, then the HarmonyUs Festival followed eventually in 2018 by the Edgewater Gallery. It was at the HarmonyUs Festival that my traveling museum exhibit idea was birthed ( https://www.perception4u.com/museumexhibit ) when four different individuals came up to me over the next few hours and said that my paintings belonged in museums. By the fourth person, I could not help but feel that that was the direction I was to pursue next. As soon as in my mind I agreed to this new challenge an inspired thought came to combine my paintings with the quotes of theoretical physicists. I had seen over time how the more intuitive physicists point beautifully to the world I experience. (I also describe how one physicist, in particular, had a profound effect on this marriage of my art with theoretical physics in "How This Exhibit Came to Be" section of the Traveling Museum Exhibit at the end of the paintings.
My main focus now is on preparing the paintings for the museum exhibit as well as continuing the process of contacting museums. But I am looking forward to getting back out and doing some more plein air painting and exploring deeper levels of perception and fresh, new expression.
Thank you for giving your attention to this website. The possibility of offering you something that may inspire you gives me the greatest sense of satisfaction.
With Grandpa Outside the Barn
MICAH SANGER
SELECTED EXHIBITS
June 2019 HarmonyUs Caspar, California
June 2018 HarmonyUs, Caspar, California
June 2018 Edgewater Gallery, Fort Bragg, California
Sept 2017 HarmonyUs, Caspar, California
Oct 1996 - Sept 2017 I left the commercial art scene to concentrate on creating a large body of paintings
for my art website, wwwperception4u.com.
Aug 1995 - Sept 1996 Gallery Americas, Carrboro, North Carolina
Feb 1993 - Feb 1995 Helen Jones Gallery, Sacramento, California
May 1995 - Jan 1996 Paragon Gallery, Los Angeles, California
Nov 1991 - Jun 1992 Gallery Audacious, Nevada City, California
Mar 1991 Micro Gallery, Nevada City, California
Oct 1990 NIAD Gallery, Richmond, California
Feb - Mar 1990 Barbara McDonald Gallery, Sacramento, California
Apr 1988 Durovich Gallery, Sacramento, California
Jun 1987 Landell Gallery, Carmel, California
GROUP EXHIBITS
Sept 2017 Sausalito Art Festival Sausalito, California
Oct - Nov 1995 Associated Artists, Winston-Salem, North Carolina
May - Aug 1995 Artspace, Raleigh, North Carolina
Jan 1993 - Oct 1996 Eastwick Gallery, Chicago, Illinois
Mar - Apr 1993 International Artist Group, Ibaraki, Japan
Jul 1992 - Jan 1995 Wilde Meyer Gallery, Scottsdale, Arizona
Apr 1991 Open Arts Circle, Oakland, California
Apr - May 1991 Crocker Kingsley Annual, Sacramento, California
May 1989 "Landscape of the Spirit" Bruce Museum, Greenwich, Connetticut
Mar 1986 Victoria Monroe Gallery, New York, New York
TALKS ON MY ART
Coming up in Sept 2018 "Quantum Physics and the New Perception Center for Spiritual Living Fort Bragg, California
June 30, 2018 "The Expression of Spirit In Art" HarmonyUs, Caspar, California
May 2, 2018 "Awakening Through Art" Spirit House, Fort Bragg, California
SELECTED PRIVATE AND PUBLIC COLLECTIONS
Menahem Presler, Bloomington, Indiana
E. F. Hutton, New York, New York
SAS Institute Raleigh, North Carolina
1981 to Present Group and Private Instruction, beginning to advanced:
Painting the Figure, Awakening the Artist's Eye, Depicting Landscape and Levels of Perception,
Figure Drawing and Anatomy.
Feb – May 1997 Fine Art Painting Instructor, Wake Tech Community College, Raleigh, North Carolina
Mar - Apr 1990 Art Therapy Workshop, Family Services, Chico, California
Aug 1969 – May 1971 Clemson University, Clemson, South Carolina
Major: Art Studio and Architecture
May - Sept 1973 Apprenticed under nationally known artist, Richard Goetz, Santa Fe, New Mexico
Aug 1979 – June 1980 Santa Barbara City College Santa Barbara, California
Major: Art Studio
Aug 1980 – May 1981 University of California at Santa Barbara Santa Barbara, California
June 1982 - May 1983 California State University, Chico Chico, California
ABOUT the ARTIST/AUTHOR
& RESUME


text:
Examining the removal of American Lit
Emma Jiang, Managing Editor
The compromises of the removal of American Literature 11H by the English Department at Palo Alto High School due to the success of the Advanced Placement English Language and Composition pilot for juniors and seniors during the 2018-19 school year are coming to light as the school year progresses.
Melissa Laptalo teaches her 14 sections of AP English Language and Composition students. Currently, there are 14 sections of enrollment for the class. "It's very junior heavy, especially this year," Laptalo said. "There are different reasons why people are taking it, but I think that reinforces the fact that it was a good move for us to bring it in." Photo: Emma Jiang
To accommodate for the arrival of AP Lang, the English Department removed American Lit 11H, the prior highest lane English class for juniors, during the 2018-19 school year; American Lit remained as an optional elective.
Shirley Tokheim, Instructional Leader of the English Department, stated in an email that this decision was made to minimize the impact of AP Lang on the popularity of other semester-long electives.
"I think the decision that department made to not make American Lit and World Lit required classes anymore is, long-term, a really exciting decision," AP Lang teacher Melissa Laptalo said. "It opens up our elective program and allows students to take more electives, which is something that's really important to us as a department and also simulates a college."
For the 2019-20 school year, the English Department removed American Lit altogether, along with World Literature, the previously required English class for seniors.
"Last year, we surveyed most sophomores in their English classes about which English electives they'd most be interested in signing up for for their junior year," Tokheim said. "The list included American Lit and World Lit, which used to be required courses. Those two courses were at the bottom of most students' ranking, so we decided not to run them this year."
This leaves two options for juniors: two semesters of English electives, or one full year of AP Lang. Seniors can take two semesters of English, one year of AP Lang, or one year of AP English Literature and Composition.
"In other districts, it is common for students to take AP Lang junior year and AP Lit senior year," Tokheim said. "I believe that AP Lang provides important thinking, reading, and writing skills that students will take with them if they decide to take AP Lit senior year."
AP Lang is likely here to stay; with 14 classes of enrollment, it is an extremely popular class at Paly.
"AP Lang is more representative of the kind of reading and writing that students do in college than anything else that we teach, across majors," Laptalo said.
According to Sarah Bartlett, one of two AP Lit teachers, the addition of AP Lang has upped the enrollment rate in AP Lit. In past years, there were only two to three sections, but this year there are four. She thinks that students who received AP experience in 11th grade and were successful felt confident enough to continue on to AP Lit.
AP Lang also offers students the experience of taking an AP English test. Bartlett said that despite the two tests being completely different in content, students who took AP Lang will likely be more comfortable in the exam situation; before the change, students had to wait until senior year to have an AP English exam experience.
Bartlett said that the difference between AP Lang and previous American Lit 11H students is the semester of intense focus on fiction, as analyzing nonfiction requires a different set of devices and skills; rhetorical devices are hugely different from symbols and motifs.
Another compromise made was that AP Lang students did not have the opportunity to read plays and books commonly read in American Lit. Bartlett said that she and the other AP Lit teacher, Richard Rodriguez, decided to assign The Great Gatsby and The Crucible as summer homework for incoming students to supplement the literary classics that wouldn't be covered otherwise. However, replacing the summer assignment means that the short fiction stories that were typically assigned had to be skipped.
Both Bartlett and Rodriguez agree that in a perfect world, they would like AP Lang students to receive both the fiction and nonfiction experience.
At other high schools around the Bay Area that offer AP Lang, they have a different solution to bridging the fiction and nonfiction gap: students have the opportunity to explore both fiction and nonfiction books. According to Lynbrook High School senior Rin Ha, AP Lang students analyze classical literature such as "The Great Gatsby," "Huckleberry Finn," and "Scarlett Letter." Mountain View High School's AP Lang syllabus states that students will read dystopian fiction novel "Brave New World."
However, Laptalo said that she does not see a need for a focus on fiction in AP Lang.
"The nonfiction stuff is new for students," Laptalo said. "There are enough moving parts there that you have plenty to do for the year to get prepared for the exam."
Paly's AP Lang is focused on nonfiction, geared towards preparing students for the AP Lang exam in May.
"Everything that I have studied about the class has indicated that truly the course is meant to be a nonfiction class because AP Lit is the fiction counterpart," Laptalo said. "One of the only places [on the exam] that fiction might have been relevant is on the argument essay when you can bring in your own evidence."
To supplement the argument essay, Laptalo said that she encourages students to pursue classical literature through their own choice of outside reading books.
american lit
american lit 11h
ap lang
ap language
Ap lit
ap literature
Richard Rodriguez
shirley tokheim
Emma (Class of 2020) is the Managing Editor of Features and Opinion. Over the summer, she was selected to attend the California State Summer School for...
New club hosts Princess Project donation drive
Sports Boosters tree sale in full swing
A grand vision for Cubberley Community Center – but don't hold your breath
Juniors disgruntled about ASB decision in Wrap Your VP
Breaking: Students react to police officer injury and chaos on campus
Recap: Seniors maintain lead on final day of Spirit Week


text:
Man fatally shot in Ramona
The shooting happened shortly after 12:30 a.m. on Main Street near Seventh Street
Biden cited San Diego Unified's graduation rate and reading growth on national standardized tests as reasons for her nomination.
Former Cincinnati council member sentenced
In this June 24, 2020, photo is Cincinnati City Council member P.G. Sittenfeld at Cincinnati City Hall. Sittenfeld who has been planning to run for mayor has been indicted on federal corruption charges. An indictment Thursday, Nov. 19, shows that Democrat Sittenfeld faces six federal counts related to bribery and extortion. He pleaded not guilty before a federal magistrate and was released with restrictions (Kareem Elgazzar/The Cincinnati Enquirer via AP)
(ASSOCIATED PRESS)
A former Cincinnati city council member has been sentenced to 18 months in prison after pleading guilty to a federal charge resulting from corruption investigations that have left two other council members facing charges.
U.S. District Judge Susan Dlott ruled Tuesday that Tamaya Dennard will begin serving her sentence next year. Dlott called the case "a real tragedy," saying Dennard, 41, had done a lot of good.
Dennard pleaded guilty earlier this year to a wire fraud-related count alleging vote-selling. Dennard had asked for home incarceration, writing to the court that she resigned from council and took responsibility for her actions. She is a Democrat.
Democrat P.G. Sittenfeld was arrested last week on separate allegations he solicited payments to "deliver the votes" for a proposed real estate development. He tweeted Friday that the allegations are "simply not true," that he will not resign and that he will fight the charges. Republican Jeff Pastor was arrested this month on bribery and other counts and said he will fight the charges.
Get U-T Business in your inbox on Mondays
Get ready for your week with the week's top business stories from San Diego and California, in your inbox Monday mornings.
Submit a story tip
Report a problem with this story
When Joe Biden entered the White House as vice president in 2009, the economy was cratering
Canada's transport regulator says the Boeing 737 Max can return to Canadian airspace beginning Wednesday
The European Union's trying to ease fears that citizens might be forced to get coronavirus vaccines before they're allowed to travel
Facebook has started the process of assigning a legal representative in Turkey to comply with a social media law
Organizers of the World Economic Forum are expecting leaders including Chinese President Xi Jinping, Indian Prime Minister Narendra Modi, German Chancellor Angela Merkel and South African President Cyril Ramaphosa for a virtual gathering next week — after COVID-19 canceled the forum's annual in-person event of Davos, Switzerland
President-elect Joe Biden is set to nominate Rohit Chopra as the director of the Consumer Financial Protection Bureau, tapping a progressive ally of Sen. Elizabeth Warren to helm the agency whose creation she championed
Most read business stories
The FBI is working to name the Capitol rioters. So are thousands of online sleuths
Many San Diegans identified as being in Washington, D.C., are a cast of regulars at pro-Trump rallies and civil defense-group gatherings
Intuit's Greg Johnson crafts strategy beyond TurboTax, aims to help consumers gain financial freedom
San Diego-based head of Intuit's Consumer Group gives perspective on technology, democratizing financial services and being a minority tech executive
What an extension of the solar federal tax credit may mean for California
Investment tax credit may help boost 'solar-plus-storage'
Qualcomm buying Bay Area chip startup Nuvia for $1.4 billion
Founded for former chip designers for Apple, Nuvia develops powerful CPUs for smartphones, laptops, connected cars and other gadgets.
COVID-19 enforcement of restaurants, gyms in San Diego: Is it working?
Following thousands of complaints from the public and hundreds of cease and desist orders sent to businesses over the last several months, only a small percentage have been referred for possible prosecution, although county officials say compliance has been high
The World Health Organization chief says it's "not right" that younger, healthier adults in wealthier countries get vaccinated against COVID-19 before older people in poorer countries
France's Michelin Guide, which has long served as a bible for foodies, is adapting its awards ceremony for 2020
Trucks owned by British shellfish firms have descended on Parliament to protest Brexit-related red tape they claim is suffocating their businesses
EU gender pay gap still significant, warn trade unions
Women in Europe doing jobs requiring the same skills as jobs done by men are still being paid significantly less, according to a study by the the European Trade Union Confederation (ETUC)
Italian Premier Giuseppe Conte has asked lawmakers for their "clear backing" to overcome a political crisis that he said had provoked "deep dismay" among Italians whose chief concern is the COVID-19 pandemic
Carmaker Stellantis shares buoyed in Milan, Paris on 1st day
Stellantis, the car company combining PSA Peugeot and Fiat Chrysler, was launched Monday on the Milan and Paris stock exchanges, giving life to the fourth-largest car company in the world


City Palms is conveniently located in the heart of Downtown West Palm Beach and is steps from CityPlace. Designed with signature Key West architecture, City Palms has a classy yet nicely laid back feel starting in its Lobby which features 24 hour front desk staff, full concierges services, a newsroom featuring a self-serve cafe and flows into a luxuriously appointed club room with a billiards table, bar, and LCD televisions. City Palms luxury residences were finished out with italian cabinetry, stainless steel appliances, quartz countertops and continue into the nicely appointed bathrooms featuring frameless showers, oversized soaking tubs, marble flooring, and quartz vanity tops. City Palms features a large 6th floor pavillion deck featuring a 70 foot swimming pool, raised jacuzzi, covered outdoor bar and lounge area, men's and women's sauna, state of the art fitness center, and two sun decks with Smith and Hawkens furnishings. Imagine yourself at City Palms enjoying the best of a beautiful new building and a thriving Downtown West Palm Beach.


Executives and guests of 3D Systems Corporation visited the New York Stock Exchange (NYSE) to celebrate the company's transfer to the NYSE from NASDAQ and hold an investor day event at the NYSE. In honor of the occasion, President and Chief Executive Officer Abe Reichental rang The Opening Bell.
A line up of 3D Systems executives who were brave enough to acquire Freedom Of Creation on 12.5.2011 :-) By acquiring Freedom Of Creation, 3D Systems has now gained a leading role in the market for 3D printed consumer design products.


The new Windows 7 effect of windows fading out and falling slightly away from you puts a whole new spin on sending emails from Outlook. Now, when you hit the Send button, you get a direct visual representation of the message tumbling out of your grasp and through the unknown ether, knowing that you're powerless to get it back if you've accidentally sent everyone a personal note or copy and pasted in an observation that your client wears silly shoes.
But that's not what I wanted to talk about - though this might be more a question for the people who read this on LJ rather than anywhere else. I just remembered that in the PS Final Fantasy games (which were, of course, the first encounter with the series that I had), where your movement on the playfield was periodically interrupted by random battles with completely invisible enemies, I subconsciously developed a habit to try to avoid them. Instead of just running to where I was aiming for, I would always run a short distance for about a second, then let go of the direction to pause for a tiny amount of time, then start again, inserting little pauses between bursts of movement. I remember I read a speed FAQ for FF9 (where you got a special award for completing the game in under twelve hours) that recommended this out of nowhere, which makes me think that I wasn't alone - is this a habit that other people also got into?
I'm not sure whether it actually had any effect on the game, or whether it was an illusion born from taking slightly more time to move anywhere, therefore making the gaps between the battles seem longer. I know that as soon as I took advantage of snapshot saves in FF6 and found that the time to the next battle was a predetermined number of steps from the last one, I stopped bothering with it for that game immediately.
Bear with me a moment - are there any commonly-used pairs of nouns where the first noun is used as an adjective or descriptor for the second, where that second word can equally be used as an adjective for the first?
Yes, I know, this needs an example - I was just walking upstairs with one of the mountains of junk that tend to accumulate on my desk, and I saw "Oyster mushrooms" on an unusually comprehensible supermarket receipt. I misread it as "Mushroom oysters" at first and wondered when we had become posh enough gits to have those in our shopping, but after looking again, I wondered if such a thing as a mushroom oyster existed (they don't) and whether there were any of these word pairs that made sense either way around.
Apparently there is such a thing as a "cloud mushroom", sort of, but its actual name is one of the least appetizing things ever, so that barely misses out.
(22:44:38) MichaelTheFish: I was more glad than ever that I had my own washing machine then, of course.
(22:45:05) MichaelTheFish: Because you've got to get penguin saliva in to soak after about five minutes, or you're never going to get it out.
(22:45:16) DXN: Really? How interesting.
(23:10:00) DXN: Well, I'm going to bed - see you! <-- Good? Unnecessary?
What, by your own standards and made-up etiquette that we've had to invent over our lives for Internet situations, is the cut-off point of the time since the last message for which it's unnecessary, as opposed to rudely abrupt, to announce your disappearance before going offline from an instant message conversation? I've never been sure.
If you're working on a project that has a significant compile time (say, five minutes or so), and you set it going and then realize that you've forgotten to change one thing that you want to get in... do you stop it, or do you - as I do - seize the opportunity to prove your superiority, leave the compile running, zoom to the file in question, and race the computer to make the change and save the file before the build grabs it?
That last post got quite a response. Here's something far more mundane.
In which order are the three main items arranged in your cutlery drawer?
Or if you don't have a say in the matter due to not living by yourself, in which order did they come to mind first or which order should they come in? Blame whoever you like.
I'm inspired to ask because after the weekend in New York and not having to remember our entirely arbitrary order of spoons-forks-knives for only four days, my mind reverted to the (clearly much better) knives-forks-spoons order that my parents had got me used to and I put all the items at the ends in the wrong compartments without thinking about it.
You can elaborate further on your own situation if you want, but bear in mind that people might think you're even more boring than I am.
I've just noticed that I never drew any conclusion from the last question post - basically the rules of that card game are entirely variable, but they seem to be fairly standardized within general regions or schools. 10 is always burn - that's the only certainty you have.
A few years before the senior honours project that would ensure that I never wanted to see another pack of cards ever again, we used to constantly play a card game that I always knew as Shed in the sixth year common room. The aim of the game is to shed three layers of cards - in hand, face up and face down - and take it in turns with other players to build up a pile of cards (building a shed, I suppose) in the middle of the table, increasing the size and value of it gradually while trying to avoid getting into a situation where you're unable to play and therefore have to be the one to pick up the pile. Certain cards, called powercards, could be played no matter what the pile's current value was and had special effects such as reducing the required value of the pile to 2 or reversing the order of play.
What's most interesting about the game is its heavily memetic nature - when I went to university the next year, it seemed that everybody I met knew the game (though never under the same name), but despite always sticking to that set of core rules, every single school group had its own unique idea of just how many powercards there were, the values to which they were assigned and the effect of each one. To be able to play it with any new group of people, we had to first agree on a cobbled-together combination of the rules that we'd brought from our own respective territories, which we would then bring back and introduce when we went back to visit home again, thus spreading individual rules gradually throughout the world. I'm trying to dance around the uncanny similarity of this to how Triple Triad worked, but that had exactly the same idea.
I'm interested to know just how many variants are represented by my Friends list. What were your rules?
Among the really enjoyable bits of writing the new versions of our system for various clients at work, I've somehow landed myself with the task of trawling through a giant 800-line-long colour-coded Excel list and accompanying 36-page 100MB PDF with handwritten notes scrawled across it to attempt to decipher the changes that one of the divisions need to their immense tree of locations. Even ignoring the unintentionally ironic cases like "Quallity Control", I think that the writer of the spreadsheet was going as mad as I was near the end - I felt a compulsion to look over my shoulder before clicking on one called "Heaving Oil Pumper Tankage". I suspect it was meant to be "Heavy" but he got distracted and accidentally made it even more Freudian than the name already was.
I began to suspect that they were making things up when they started throwing in names like "Dehexenizer" and "Wet Gas Scrubber", but fairly late on there was also one labelled "Tank Farm", which put an image in my mind of someone pouring a sack of grain into a trough and a herd of little M4 Shermans trundling frantically over and pushing each other out the way in the rush to snort it up through their barrels. It was at about that moment that I realized I had been looking at the location tree for six straight hours and needed to go and get some fresh air.
Here, by the way, are the collected responses from the question that I posted a few days ago. The replies were in general less definite than my own preference, which made collecting them together a little more difficult than I had imagined, but if I didn't make some sort of effort, then I would have just asked everyone what they wear in bed and it would be weird.
In general, from the wider descriptions in the replies, I think that women just tend to feel the cold more. Whether there's any biological reason for this is something I really can't tell you.
It was quite a morning yesterday - I stepped out the door to go to work, realized it was raining rather heavily than I had imagined and decided to go back to get an umbrella. But I was spotted on the way up the stairs by the man who fixed our ceiling, his assistant and the superintendent, who caught me in their conversation and shared their hilarious anecdotes about laminate flooring for about half an hour before an opportunity for escape presented itself. By then I had decided not to bother with the train and just worked from home instead.
What do you wear while you're sleeping?
The original question was about whether there was an obvious difference in males and females preferring to wear something while asleep - anonymous comments are allowed and indeed strongly encouraged, though you'd have to also indicate your gender. Hitting me on the head with your handbag and stalking off is not encouraged, but honestly expected.
Thanks to everyone who responded to the questions in my last entry, we have 22 different opinions (including mine) of peanut butter from the world over. pami_zee seemed particularly enthusiastic about this and produced a Chi-whatever-you-call-it report which I didn't understand at all - I just sat gaping at it like Bernard Black doing his taxes.
I have compiled an alternative summary (with great difficulty - have you any idea how terrible OpenOffice's graph feature is?) in the commonly accepted bar graph form.
The number of responses is too small to draw any certain conclusions, but that won't stop me from doing it anyway. From the non-American side, responses were fairly mixed, but there was almost a convincing opinion against it (I am counting diarytypething's sabotage attempt as a dislike, as I'm fairly sure it's legitimate to call it that if peanuts cause your insides to detonate). The most interesting part was the second bar in the graph, which you can't see as it isn't there - no Americans admitted to disliking peanut butter at all. Though again there was an awkward one here, as kjorteo said he only liked one type of it, and I was previously unaware of there being multiple varieties of the substance.
I'm no longer sure what the conversation with Whitney was that inspired all this in the first place, but I feel I must have proved something. Maybe just that I've got a bit more time these days.
As you're on this page and don't have much else better to do anyway, I'd appreciate it if you (yes, you) would take a second to answer these. Just to confirm if there's any correlation.
A. Do you like peanut butter?


Medical devices can have great benefits, and they can save lives. They have helped change health care as we know it. However, some medical devices can be extremely dangerous, or even deadly. They injure the very same people they are supposed to help, leaving families looking for help and answers.
To make matters worse, some manufacturers may even try to cover up these problems and deny anything is wrong.
There are faulty products on supply store shelves and in hospitals right now. It's a sad truth of the health care industry. While the Food and Drug Administration has stepped in and removed certain products from the market, this is all too often only the last resort that occurs after thousands of people have already been hurt.
At the Michael Brady Lynch Firm, we're committed to standing up for people who have been hurt by these devices. We will never be intimidated by the size of a medical device manufacturer, no matter how big the company is. We're here to fight for you if you've been harmed.
Why Are Defective Medical Devices On the Market?
You would think it would be difficult — if not impossible — to keep a defective product on the market after it harms patients. Unfortunately, that's not the case.
Although manufacturers never make a medical device with the intention of harming people, it happens all too frequently. Devices are released while research is still inconclusive, or they are not tested sufficiently. Sometimes the danger is not immediately apparent.
The duty to protect the public falls on the FDA. The FDA is tasked with monitoring all of these medical devices. Most of these products undergo extensive laboratory and clinical testing before they are approved for widespread use. However, those tests are far from infallible. Furthermore, some devices are approved for sale by the FDA through a provision that allows them to be subject to less scrutiny than normal.
All too often, dangerous medical devices are on the market and sold to hospitals for months, if not years, before a mass recall is issued. This typically only takes place after a large number of consumers have been injured by the product and a significant number of legal complaints have been filed. To file such a complaint, you'll want an attorney on your side.
When defective or dangerous medical devices harm consumers like you, the manufacturers need to be held responsible. They have a responsibility to test the safety of their products and warn us about any potential risks. When they fail to do this, you and your family should seek compensation to help ease your pain and get your life back to as normal as possible.
At the Michael Brady Lynch Firm, we have the experience, passion, and dedication to fight for you. If you or a loved one has been harmed by a defective medical product, contact us at (877) 513-9517 or contact us online. Consultations are free, and we're always waiting to help.


text:
Q: Android Studio moving project to other computer - SDK location differs the question is not as simple, as replied in
Android Studio moving project to another computer?
Just copying folder results in my case in Studio could not find SDK location, rebuild does not help as errors could not find ...-appcompat-7 appear. Studio advices to load SDK, which I do not want to do as I already have SDK on that comp.
And all that just because computers have different user accounts - hence default SDK location path differs.
Is there safe simple way to copy and/or backup my work in Android Studio?

A: If you use source control, an easy way might be to make sure all your changes are on the server, then clone the project on your second computer.

A: copy the previous SDK to your new computer with project, And set location of new SDK and refresh the project

A: What a program Android Studio! The issue I found is that in Gradle file appcompat was last digit different version, hence asking for download and looking on Studio server could not find old version.
I already raised ADV bug to Studio support sometime ago and got no response except that it was read.
So be it, hope somebody else will find out my answer here if faced with same issue.

A: I solved this problem by changing the compileSdkVersion and buildToolsVersion from the build.gradle(module) of the project.

redpajama_set_name: RedPajamaStackExchange


The SPFPA hosted its 25th Annual Charity Golf Day and Lunch benefiting the American Cancer Society. Over 220 participated in golf and a corn toss tournament, making this one of the best attended outings ever! It was a great day of fun, solidarity, sunshine and smiles "fore" a great cause. Thank you for your attendance and participation!