text:
package com.facebook.buck.jvm.java;

import com.facebook.buck.io.filesystem.ProjectFilesystem;
import com.facebook.buck.jvm.common.ResourceValidator;
import com.facebook.buck.jvm.core.HasJavaAbi;
import com.facebook.buck.jvm.java.JavaBuckConfig.SourceAbiVerificationMode;
import com.facebook.buck.jvm.java.JavaBuckConfig.UnusedDependenciesAction;
import com.facebook.buck.jvm.java.JavaLibraryDescription.CoreArg;
import com.facebook.buck.jvm.java.abi.AbiGenerationMode;
import com.facebook.buck.jvm.java.abi.source.api.SourceOnlyAbiRuleInfo;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.rules.BuildDeps;
import com.facebook.buck.rules.BuildRule;
import com.facebook.buck.rules.BuildRuleParams;
import com.facebook.buck.rules.BuildRuleResolver;
import com.facebook.buck.rules.CellPathResolver;
import com.facebook.buck.rules.DefaultSourcePathResolver;
import com.facebook.buck.rules.SourcePath;
import com.facebook.buck.rules.SourcePathResolver;
import com.facebook.buck.rules.SourcePathRuleFinder;
import com.facebook.buck.toolchain.ToolchainProvider;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
import java.nio.file.Path;
import java.util.Optional;
import java.util.SortedSet;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import org.immutables.value.Value;

@Value.Immutable
@Value.Style(
  overshadowImplementation = true,
  init = "set*",
  visibility = Value.Style.ImplementationVisibility.PACKAGE
)
public abstract class DefaultJavaLibraryRules {
  public interface DefaultJavaLibraryConstructor {
    DefaultJavaLibrary newInstance(
        BuildTarget buildTarget,
        ProjectFilesystem projectFilesystem,
        BuildDeps buildDeps,
        SourcePathResolver resolver,
        JarBuildStepsFactory jarBuildStepsFactory,
        Optional<SourcePath> proguardConfig,
        SortedSet<BuildRule> firstOrderPackageableDeps,
        ImmutableSortedSet<BuildRule> fullJarExportedDeps,
        ImmutableSortedSet<BuildRule> fullJarProvidedDeps,
        @Nullable BuildTarget abiJar,
        @Nullable BuildTarget sourceOnlyAbiJar,
        Optional<String> mavenCoords,
        ImmutableSortedSet<BuildTarget> tests,
        boolean requiredForSourceOnlyAbi,
        UnusedDependenciesAction unusedDependenciesAction,
        Optional<UnusedDependenciesFinderFactory> unusedDependenciesFinderFactory);
  }

  @org.immutables.builder.Builder.Parameter
  abstract BuildTarget getInitialBuildTarget();

  @Value.Lazy
  BuildTarget getLibraryTarget() {
    BuildTarget initialBuildTarget = getInitialBuildTarget();
    return HasJavaAbi.isLibraryTarget(initialBuildTarget)
        ? initialBuildTarget
        : HasJavaAbi.getLibraryTarget(initialBuildTarget);
  }

  @org.immutables.builder.Builder.Parameter
  abstract ProjectFilesystem getProjectFilesystem();

  @org.immutables.builder.Builder.Parameter
  abstract ToolchainProvider getToolchainProvider();

  @org.immutables.builder.Builder.Parameter
  abstract BuildRuleParams getInitialParams();

  @org.immutables.builder.Builder.Parameter
  abstract BuildRuleResolver getBuildRuleResolver();

  @org.immutables.builder.Builder.Parameter
  abstract CellPathResolver getCellPathResolver();

  @Value.Lazy
  SourcePathRuleFinder getSourcePathRuleFinder() {
    return new SourcePathRuleFinder(getBuildRuleResolver());
  }

  @Value.Lazy
  SourcePathResolver getSourcePathResolver() {
    return DefaultSourcePathResolver.from(getSourcePathRuleFinder());
  }

  @org.immutables.builder.Builder.Parameter
  abstract ConfiguredCompilerFactory getConfiguredCompilerFactory();

  @org.immutables.builder.Builder.Parameter
  abstract UnusedDependenciesAction getUnusedDependenciesAction();

  @org.immutables.builder.Builder.Parameter
  @Nullable
  abstract JavaBuckConfig getJavaBuckConfig();

  @Value.Default
  DefaultJavaLibraryConstructor getConstructor() {
    return DefaultJavaLibrary::new;
  }

  @Value.NaturalOrder
  abstract ImmutableSortedSet<SourcePath> getSrcs();

  @Value.NaturalOrder
  abstract ImmutableSortedSet<SourcePath> getResources();

  @Value.Check
  void validateResources() {
    ResourceValidator.validateResources(
        getSourcePathResolver(), getProjectFilesystem(), getResources());
  }

  abstract Optional<SourcePath> getProguardConfig();

  abstract ImmutableList<String> getPostprocessClassesCommands();

  abstract Optional<Path> getResourcesRoot();

  abstract Optional<SourcePath> getManifestFile();

  abstract Optional<String> getMavenCoords();

  @Value.NaturalOrder
  abstract ImmutableSortedSet<BuildTarget> getTests();

  @Value.Default
  RemoveClassesPatternsMatcher getClassesToRemoveFromJar() {
    return RemoveClassesPatternsMatcher.EMPTY;
  }

  @Value.Default
  boolean getSourceOnlyAbisAllowed() {
    return true;
  }

  abstract JavacOptions getJavacOptions();

  @Nullable
  abstract JavaLibraryDeps getDeps();

  @org.immutables.builder.Builder.Parameter
  @Nullable
  abstract JavaLibraryDescription.CoreArg getArgs();

  public DefaultJavaLibrary buildLibrary() {
    buildAllRules();

    return (DefaultJavaLibrary) getBuildRuleResolver().getRule(getLibraryTarget());
  }

  public BuildRule buildAbi() {
    buildAllRules();

    return getBuildRuleResolver().getRule(getInitialBuildTarget());
  }

  private void buildAllRules() {
    // To guarantee that all rules in a source-ABI pipeline are working off of the same settings,
    // we want to create them all from the same instance of this builder. To ensure this, we force
    // a request for whichever rule is closest to the root of the graph (regardless of which rule
    // was actually requested) and then create all of the rules inside that request. We're
    // requesting the rootmost rule because the rules are created from leafmost to rootmost and
    // we want any requests to block until all of the rules are built.
    BuildTarget rootmostTarget = getLibraryTarget();
    if (willProduceCompareAbis()) {
      rootmostTarget = HasJavaAbi.getVerifiedSourceAbiJar(rootmostTarget);
    } else if (willProduceClassAbi()) {
      rootmostTarget = HasJavaAbi.getClassAbiJar(rootmostTarget);
    }

    BuildRuleResolver buildRuleResolver = getBuildRuleResolver();
    buildRuleResolver.computeIfAbsent(
        rootmostTarget,
        target -> {
          CalculateSourceAbi sourceOnlyAbiRule = buildSourceOnlyAbiRule();
          CalculateSourceAbi sourceAbiRule = buildSourceAbiRule();
          DefaultJavaLibrary libraryRule = buildLibraryRule(sourceAbiRule);
          CalculateClassAbi classAbiRule = buildClassAbiRule(libraryRule);
          CompareAbis compareAbisRule;
          if (sourceOnlyAbiRule != null) {
            compareAbisRule = buildCompareAbisRule(sourceAbiRule, sourceOnlyAbiRule);
          } else {
            compareAbisRule = buildCompareAbisRule(classAbiRule, sourceAbiRule);
          }

          if (HasJavaAbi.isLibraryTarget(target)) {
            return libraryRule;
          } else if (HasJavaAbi.isClassAbiTarget(target)) {
            return classAbiRule;
          } else if (HasJavaAbi.isVerifiedSourceAbiTarget(target)) {
            return compareAbisRule;
          }

          throw new AssertionError();
        });
  }

  @Nullable
  private <T extends BuildRule & CalculateAbi, U extends BuildRule & CalculateAbi>
      CompareAbis buildCompareAbisRule(@Nullable T correctAbi, @Nullable U experimentalAbi) {
    if (!willProduceCompareAbis()) {
      return null;
    }
    Preconditions.checkNotNull(correctAbi);
    Preconditions.checkNotNull(experimentalAbi);

    BuildTarget compareAbisTarget = HasJavaAbi.getVerifiedSourceAbiJar(getLibraryTarget());
    return getBuildRuleResolver()
        .addToIndex(
            new CompareAbis(
                compareAbisTarget,
                getProjectFilesystem(),
                getInitialParams()
                    .withDeclaredDeps(ImmutableSortedSet.of(correctAbi, experimentalAbi))
                    .withoutExtraDeps(),
                getSourcePathResolver(),
                correctAbi.getSourcePathToOutput(),
                experimentalAbi.getSourcePathToOutput(),
                Preconditions.checkNotNull(getJavaBuckConfig()).getSourceAbiVerificationMode()));
  }

  @Value.Lazy
  @Nullable
  BuildTarget getAbiJar() {
    if (willProduceCompareAbis()) {
      return HasJavaAbi.getVerifiedSourceAbiJar(getLibraryTarget());
    } else if (willProduceSourceAbi()) {
      return HasJavaAbi.getSourceAbiJar(getLibraryTarget());
    } else if (willProduceClassAbi()) {
      return HasJavaAbi.getClassAbiJar(getLibraryTarget());
    }

    return null;
  }

  @Value.Lazy
  @Nullable
  BuildTarget getSourceOnlyAbiJar() {
    if (willProduceSourceOnlyAbi()) {
      return HasJavaAbi.getSourceOnlyAbiJar(getLibraryTarget());
    }

    return null;
  }

  private boolean willProduceAbiJar() {
    return !getSrcs().isEmpty() || !getResources().isEmpty() || getManifestFile().isPresent();
  }

  @Value.Lazy
  AbiGenerationMode getAbiGenerationMode() {
    AbiGenerationMode result = null;

    CoreArg args = getArgs();
    if (args != null) {
      result = args.getAbiGenerationMode().orElse(null);
    }
    if (result == null) {
      result = Preconditions.checkNotNull(getJavaBuckConfig()).getAbiGenerationMode();
    }

    if (result == AbiGenerationMode.CLASS) {
      return result;
    }

    if (!shouldBuildSourceAbi()) {
      return AbiGenerationMode.CLASS;
    }

    if (result != AbiGenerationMode.SOURCE
        && (!getSourceOnlyAbisAllowed() || !pluginsSupportSourceOnlyAbis())) {
      return AbiGenerationMode.SOURCE;
    }

    if (result == AbiGenerationMode.MIGRATING_TO_SOURCE_ONLY
        && !getConfiguredCompilerFactory().shouldMigrateToSourceOnlyAbi()) {
      return AbiGenerationMode.SOURCE;
    }

    if (result == AbiGenerationMode.SOURCE_ONLY
        && !getConfiguredCompilerFactory().shouldGenerateSourceOnlyAbi()) {
      return AbiGenerationMode.SOURCE;
    }

    return result;
  }

  @Value.Lazy
  SourceAbiVerificationMode getSourceAbiVerificationMode() {
    JavaBuckConfig javaBuckConfig = getJavaBuckConfig();
    CoreArg args = getArgs();
    SourceAbiVerificationMode result = null;

    if (args != null) {
      result = args.getSourceAbiVerificationMode().orElse(null);
    }
    if (result == null) {
      result =
          javaBuckConfig != null
              ? javaBuckConfig.getSourceAbiVerificationMode()
              : SourceAbiVerificationMode.OFF;
    }

    return result;
  }

  private boolean willProduceSourceAbi() {
    return willProduceAbiJar() && getAbiGenerationMode().isSourceAbi();
  }

  private boolean willProduceSourceOnlyAbi() {
    return willProduceSourceAbi() && !getAbiGenerationMode().usesDependencies();
  }

  private boolean willProduceClassAbi() {
    return willProduceAbiJar() && (!willProduceSourceAbi() || willProduceCompareAbis());
  }

  private boolean willProduceCompareAbis() {
    return willProduceSourceAbi()
        && getSourceAbiVerificationMode() != JavaBuckConfig.SourceAbiVerificationMode.OFF;
  }

  private boolean shouldBuildSourceAbi() {
    return getConfiguredCompilerFactory().shouldGenerateSourceAbi()
        && !getSrcs().isEmpty()
        && getPostprocessClassesCommands().isEmpty();
  }

  private boolean pluginsSupportSourceOnlyAbis() {
    ImmutableList<ResolvedJavacPluginProperties> annotationProcessors =
        Preconditions.checkNotNull(getJavacOptions())
            .getAnnotationProcessingParams()
            .getAnnotationProcessors(getProjectFilesystem(), getSourcePathResolver());

    for (ResolvedJavacPluginProperties annotationProcessor : annotationProcessors) {
      if (!annotationProcessor.getDoesNotAffectAbi()
          && !annotationProcessor.getSupportAbiGenerationFromSource()) {
        // Processor is ABI-affecting but cannot run during ABI generation from source; disallow
        return false;
      }
    }

    return true;
  }

  private DefaultJavaLibrary buildLibraryRule(@Nullable CalculateSourceAbi sourceAbiRule) {
    BuildDeps buildDeps = getFinalBuildDeps();

    if (sourceAbiRule != null) {
      buildDeps = new BuildDeps(buildDeps, ImmutableSortedSet.of(sourceAbiRule));
    }

    DefaultJavaLibraryClasspaths classpaths = getClasspaths();

    UnusedDependenciesAction unusedDependenciesAction = getUnusedDependenciesAction();
    Optional<UnusedDependenciesFinderFactory> unusedDependenciesFinderFactory = Optional.empty();

    if (unusedDependenciesAction != UnusedDependenciesAction.IGNORE) {
      ProjectFilesystem projectFilesystem = getProjectFilesystem();
      BuildTarget buildTarget = getLibraryTarget();
      SourcePathResolver sourcePathResolver = getSourcePathResolver();
      BuildRuleResolver buildRuleResolver = getBuildRuleResolver();

      unusedDependenciesFinderFactory =
          Optional.of(
              () ->
                  UnusedDependenciesFinder.of(
                      buildTarget,
                      projectFilesystem,
                      buildRuleResolver,
                      getCellPathResolver(),
                      CompilerParameters.getDepFilePath(buildTarget, projectFilesystem),
                      Preconditions.checkNotNull(getDeps()),
                      sourcePathResolver,
                      unusedDependenciesAction));
    }

    DefaultJavaLibrary libraryRule =
        getConstructor()
            .newInstance(
                getLibraryTarget(),
                getProjectFilesystem(),
                buildDeps,
                getSourcePathResolver(),
                getJarBuildStepsFactory(),
                getProguardConfig(),
                classpaths.getFirstOrderPackageableDeps(),
                Preconditions.checkNotNull(getDeps()).getExportedDeps(),
                Preconditions.checkNotNull(getDeps()).getProvidedDeps(),
                getAbiJar(),
                getSourceOnlyAbiJar(),
                getMavenCoords(),
                getTests(),
                getRequiredForSourceOnlyAbi(),
                unusedDependenciesAction,
                unusedDependenciesFinderFactory);

    if (sourceAbiRule != null) {
      libraryRule.setSourceAbi(sourceAbiRule);
    }

    getBuildRuleResolver().addToIndex(libraryRule);
    return libraryRule;
  }

  private boolean getRequiredForSourceOnlyAbi() {
    return getArgs() != null && getArgs().getRequiredForSourceOnlyAbi();
  }

  @Value.Lazy
  Supplier<SourceOnlyAbiRuleInfo> getSourceOnlyAbiRuleInfoSupplier() {
    return () ->
        new DefaultSourceOnlyAbiRuleInfo(
            getSourcePathRuleFinder(),
            getLibraryTarget(),
            getRequiredForSourceOnlyAbi(),
            getClasspaths(),
            getClasspathsForSourceOnlyAbi());
  }

  @Nullable
  private CalculateSourceAbi buildSourceOnlyAbiRule() {
    if (!willProduceSourceOnlyAbi()) {
      return null;
    }

    BuildDeps buildDeps = getFinalBuildDepsForSourceOnlyAbi();
    JarBuildStepsFactory jarBuildStepsFactory = getJarBuildStepsFactoryForSourceOnlyAbi();

    BuildTarget sourceAbiTarget = HasJavaAbi.getSourceOnlyAbiJar(getLibraryTarget());
    return getBuildRuleResolver()
        .addToIndex(
            new CalculateSourceAbi(
                sourceAbiTarget,
                getProjectFilesystem(),
                buildDeps,
                getSourcePathRuleFinder(),
                jarBuildStepsFactory));
  }

  @Nullable
  private CalculateSourceAbi buildSourceAbiRule() {
    if (!willProduceSourceAbi()) {
      return null;
    }

    BuildDeps buildDeps = getFinalBuildDeps();
    JarBuildStepsFactory jarBuildStepsFactory = getJarBuildStepsFactory();

    BuildTarget sourceAbiTarget = HasJavaAbi.getSourceAbiJar(getLibraryTarget());
    return getBuildRuleResolver()
        .addToIndex(
            new CalculateSourceAbi(
                sourceAbiTarget,
                getProjectFilesystem(),
                buildDeps,
                getSourcePathRuleFinder(),
                jarBuildStepsFactory));
  }

  @Nullable
  private CalculateClassAbi buildClassAbiRule(DefaultJavaLibrary libraryRule) {
    if (!willProduceClassAbi()) {
      return null;
    }

    BuildTarget classAbiTarget = HasJavaAbi.getClassAbiJar(getLibraryTarget());
    return getBuildRuleResolver()
        .addToIndex(
            CalculateClassAbi.of(
                classAbiTarget,
                getSourcePathRuleFinder(),
                getProjectFilesystem(),
                getInitialParams(),
                libraryRule.getSourcePathToOutput(),
                getAbiCompatibilityMode()));
  }

  @Value.Lazy
  AbiGenerationMode getAbiCompatibilityMode() {
    return getJavaBuckConfig() == null
            || getJavaBuckConfig().getSourceAbiVerificationMode() == SourceAbiVerificationMode.OFF
        ? AbiGenerationMode.CLASS
        // Use the BuckConfig version (rather than the inferred one) because if any
        // targets are using source_only it can affect the output of other targets
        // in ways that are hard to simulate
        : getJavaBuckConfig().getAbiGenerationMode();
  }

  @Value.Lazy
  DefaultJavaLibraryClasspaths getClasspaths() {
    return DefaultJavaLibraryClasspaths.builder(getBuildRuleResolver())
        .setBuildRuleParams(getInitialParams())
        .setConfiguredCompiler(getConfiguredCompiler())
        .setDeps(Preconditions.checkNotNull(getDeps()))
        .setCompileAgainstLibraryType(getCompileAgainstLibraryType())
        .build();
  }

  @Value.Lazy
  DefaultJavaLibraryClasspaths getClasspathsForSourceOnlyAbi() {
    return DefaultJavaLibraryClasspaths.builder()
        .from(getClasspaths())
        .setShouldCreateSourceOnlyAbi(true)
        .build();
  }

  @Value.Lazy
  ConfiguredCompiler getConfiguredCompiler() {
    return getConfiguredCompilerFactory()
        .configure(
            getSourcePathResolver(),
            getSourcePathRuleFinder(),
            getProjectFilesystem(),
            getArgs(),
            getJavacOptions(),
            getBuildRuleResolver(),
            getToolchainProvider());
  }

  @Value.Lazy
  ConfiguredCompiler getConfiguredCompilerForSourceOnlyAbi() {
    return getConfiguredCompilerFactory()
        .configure(
            getSourcePathResolver(),
            getSourcePathRuleFinder(),
            getProjectFilesystem(),
            getArgs(),
            getJavacOptionsForSourceOnlyAbi(),
            getBuildRuleResolver(),
            getToolchainProvider());
  }

  @Value.Lazy
  JavacOptions getJavacOptionsForSourceOnlyAbi() {
    JavacOptions javacOptions = getJavacOptions();
    return javacOptions.withAnnotationProcessingParams(
        abiProcessorsOnly(javacOptions.getAnnotationProcessingParams()));
  }

  private AnnotationProcessingParams abiProcessorsOnly(
      AnnotationProcessingParams annotationProcessingParams) {
    Preconditions.checkArgument(annotationProcessingParams.getLegacyProcessors().isEmpty());

    return AnnotationProcessingParams.builder()
        .from(annotationProcessingParams)
        .setModernProcessors(
            annotationProcessingParams
                .getModernProcessors()
                .stream()
                .filter(processor -> !processor.getDoesNotAffectAbi())
                .collect(Collectors.toList()))
        .build();
  }

  @Value.Lazy
  BuildDeps getFinalBuildDeps() {
    return buildBuildDeps(getClasspaths());
  }

  @Value.Lazy
  BuildDeps getFinalBuildDepsForSourceOnlyAbi() {
    return buildBuildDeps(getClasspathsForSourceOnlyAbi());
  }

  private BuildDeps buildBuildDeps(DefaultJavaLibraryClasspaths classpaths) {
    ImmutableSortedSet.Builder<BuildRule> depsBuilder = ImmutableSortedSet.naturalOrder();
    depsBuilder
        // We always need the non-classpath deps, whether directly specified or specified via
        // query
        .addAll(classpaths.getNonClasspathDeps())
        // It's up to the compiler to use an ABI jar for these deps if appropriate, so we can
        // add them unconditionally
        .addAll(getConfiguredCompiler().getBuildDeps(getSourcePathRuleFinder()))
        // We always need the ABI deps (at least for rulekey computation)
        // TODO(jkeljo): It's actually incorrect to use ABIs for rulekey computation for languages
        // that can't compile against them. Generally the reason they can't compile against ABIs
        // is that the ABI generation for that language isn't fully correct.
        .addAll(classpaths.getCompileTimeClasspathAbiDeps());

    if (getCompileAgainstLibraryType() == CompileAgainstLibraryType.FULL) {
      depsBuilder.addAll(classpaths.getCompileTimeClasspathFullDeps());
    }

    return new BuildDeps(depsBuilder.build());
  }

  @Value.Lazy
  CompileAgainstLibraryType getCompileAgainstLibraryType() {
    CoreArg args = getArgs();
    CompileAgainstLibraryType result = CompileAgainstLibraryType.SOURCE_ONLY_ABI;
    if (args != null) {
      result = args.getCompileAgainst().orElse(result);
    }

    if (!getConfiguredCompilerFactory().shouldCompileAgainstAbis()) {
      result = CompileAgainstLibraryType.FULL;
    }

    return result;
  }

  @Value.Lazy
  JarBuildStepsFactory getJarBuildStepsFactory() {
    DefaultJavaLibraryClasspaths classpaths = getClasspaths();
    return new JarBuildStepsFactory(
        getProjectFilesystem(),
        getSourcePathRuleFinder(),
        getLibraryTarget(),
        getConfiguredCompiler(),
        getSrcs(),
        getResources(),
        getResourcesRoot(),
        getManifestFile(),
        getPostprocessClassesCommands(),
        classpaths.getAbiClasspath(),
        getConfiguredCompilerFactory().trackClassUsage(getJavacOptions()),
        classpaths.getCompileTimeClasspathSourcePaths(),
        getClassesToRemoveFromJar(),
        getAbiGenerationMode(),
        getAbiCompatibilityMode(),
        getSourceOnlyAbiRuleInfoSupplier());
  }

  @Value.Lazy
  JarBuildStepsFactory getJarBuildStepsFactoryForSourceOnlyAbi() {
    DefaultJavaLibraryClasspaths classpaths = getClasspathsForSourceOnlyAbi();
    return new JarBuildStepsFactory(
        getProjectFilesystem(),
        getSourcePathRuleFinder(),
        getLibraryTarget(),
        getConfiguredCompilerForSourceOnlyAbi(),
        getSrcs(),
        getResources(),
        getResourcesRoot(),
        getManifestFile(),
        getPostprocessClassesCommands(),
        classpaths.getAbiClasspath(),
        getConfiguredCompilerFactory().trackClassUsage(getJavacOptions()),
        classpaths.getCompileTimeClasspathSourcePaths(),
        getClassesToRemoveFromJar(),
        getAbiGenerationMode(),
        getAbiCompatibilityMode(),
        getSourceOnlyAbiRuleInfoSupplier());
  }

  private static UnusedDependenciesAction getUnusedDependenciesAction(
      @Nullable JavaBuckConfig javaBuckConfig, @Nullable JavaLibraryDescription.CoreArg args) {
    if (args != null && args.getOnUnusedDependencies().isPresent()) {
      return args.getOnUnusedDependencies().get();
    }
    if (javaBuckConfig == null) {
      return UnusedDependenciesAction.IGNORE;
    }
    return javaBuckConfig.getUnusedDependenciesAction();
  }

  @org.immutables.builder.Builder.AccessibleFields
  public static class Builder extends ImmutableDefaultJavaLibraryRules.Builder {
    public Builder(
        BuildTarget initialBuildTarget,
        ProjectFilesystem projectFilesystem,
        ToolchainProvider toolchainProvider,
        BuildRuleParams initialParams,
        BuildRuleResolver buildRuleResolver,
        CellPathResolver cellPathResolver,
        ConfiguredCompilerFactory configuredCompilerFactory,
        @Nullable JavaBuckConfig javaBuckConfig,
        @Nullable JavaLibraryDescription.CoreArg args) {
      super(
          initialBuildTarget,
          projectFilesystem,
          toolchainProvider,
          initialParams,
          buildRuleResolver,
          cellPathResolver,
          configuredCompilerFactory,
          getUnusedDependenciesAction(javaBuckConfig, args),
          javaBuckConfig,
          args);

      this.buildRuleResolver = buildRuleResolver;

      if (args != null) {
        setSrcs(args.getSrcs())
            .setResources(args.getResources())
            .setResourcesRoot(args.getResourcesRoot())
            .setProguardConfig(args.getProguardConfig())
            .setPostprocessClassesCommands(args.getPostprocessClassesCommands())
            .setDeps(JavaLibraryDeps.newInstance(args, buildRuleResolver))
            .setTests(args.getTests())
            .setManifestFile(args.getManifestFile())
            .setMavenCoords(args.getMavenCoords())
            .setClassesToRemoveFromJar(new RemoveClassesPatternsMatcher(args.getRemoveClasses()));
      }
    }

    Builder() {
      throw new UnsupportedOperationException();
    }

    @Nullable
    public JavaLibraryDeps getDeps() {
      return deps;
    }
  }
}

redpajama_set_name: RedPajamaGithub


text:
Norway's Breivik gives 'terrifying' testimony
April 20, 2012, 11:48 PM UTC
Norwegian mass killer Andres Breivik testified in an Oslo court Friday on the meticulous planning and execution of the plot that left 77 dead last summer, the Christian Science Monitor reported. He first warned people to leave the courtroom because his testimony might distress them.
Breivik explained how he arrived on the island of Utøya on July 22 and calmly and methodically executed Labor party youth members, many who stood paralyzed in fear as he shot them with a Glock pistol and Ruger semi-automatic rifle.
"I thought 'It's now or never,'" said a red-faced but composed Breivik, referring to his thoughts before taking his first victim. "A hundred voices in my head said, 'Don't do this.'"
Read the entire Christian Science Monitor report here.
American in Cuban prison: 'Get me the hell out of here'
Escaped bears kill two women in Japan
'Burlesconi' sex scandal comes full circle
Vietnam pleads for help as mystery disease kills 19, sickens 171

redpajama_set_name: RedPajamaCommonCrawl


At the 2016 AAA Annual Meeting, educational anthropologists engaged in many conversations about the 2016 presidential election and the new political era ushered in by its outcome. In formal meeting spaces, informal conversations, and paper sessions that spontaneously transformed into impromptu discussions, we talked about the outcome of the election and its implications for the children, families, communities and schools we work with as educational anthropologists.
The purpose of this special issue is to continue these conversations, to deepen them, and engage with wider audiences. We invite scholarly, creative, and artistic works that respond to the question: What does the 2016 presidential election mean for the Council on Anthropology of Education (CAE) as a body, for the intellectual field of educational anthropology, and for scholars/activists/educators with expertise in this area? What are the implications of this moment, and how can we respond?
Written submissions should be less than 2000 words. All submissions, including creative material, will be sent out for blind review.
To submit please go to: https://mc.manuscriptcentral.com/aneq and create an account. Mark your submissions as "special issue" and include in your cover letter a reference to "Presidential election special issue".
This entry was posted in Uncategorized by Sonya Rao. Bookmark the permalink.


text:
Q: Download files from SharePoint using .NET Core 6 I have been looking into online materials (mainly .NET SDKs) to help me with open SharePoint folders and download all/some of the files based on filters using .NET Core. I could see some posts with graph APIs [eg: https://blog.josephvelliah.com/download-sharepoint-file-using-microsoft-graph-api].
Is there any .NET Core 6 compatible SDK available from Microsoft to do this?
I have tried to use Graph APIs but looking for SDK from Microsoft to do this

redpajama_set_name: RedPajamaStackExchange


text:
Review: Rubicon Models M8 Greyhound
Heyhey, it's me again, with a review of another very recent release by Rubicon Models - it's the M8 'Greyhound' armoured car kit from which you can also build a M20 Utility Car. Originally designed to be a tank hunter, it became the US army's main recon AFV during World War 2.
This time the kit was supplied by Rubicon models rather than bought by myself. (many thanks to Jamie!).
As always I'll start with the inevitable
Historical bits
In 1941 US Army ordnance department saw the requirement for a new anti-tank vehicle design carrying the 37mm gun. It was to be lightly armoured, wheeled, fast and to be used in an anti-tank role. Thus far the 37mm gun had been mounted on the back of a Dodge truck with very little protection apart from the gun shield itself.
Yes, quite an ad-hoc looking solution to tank hunting, but the thing was in use until 1945.
Actually deciding on a design and developing it to series-production readiness took much longer than anticipated. By March 1942 it had become appearant that German tank armour had gotten too thick for the 37mm gun, and the whole project got repurposed to a reconnaissance role and renamed the M8 Light Armoured Car. In this role it was to fit in between the M3 scout car and the M3/M5 light tank. Finally, in March 1943, the M8 entered service and first saw action in Italy and the Far East. Against Japanese tanks it even proved effective in the original anti-tank role.
The British and Free French received roughly 1000 M8 Armoured Cars to use under the Lend-Lease contract. While not being impressed with the thin armour (especially against mines. For this reason British crews laid out sand bags on the floor of the vehicle.) and severely lacking in off-road performance the vehicle swiftly earned itself the nickname Greyhound due to its high speed on roads (up to 90 km/h).
Between March 1943 and June 1945 a total of 8,523 M8 Armoured Cars were built at the Ford Motor Company plant in Saint Paul, Minnesota. To this day they are in service in Third World Countries and some police forces as riot control vehicles.
The M8 had a crew of 4 (driver and radioman in the hull, commander and gunner in the open-topped turret). It is armed with the aforementioned 37mm main gun, one .30cal Browning M1919 coaxial MG in the cast metal mantlet and in addition to this the monstrous .50 cal machine gun on top of the turret. There was some back and forth about the addition of this gun. At first the M8 was built without any additional pintle-mounted gun, but the cavalry demanded it to be added. Yes, cavalry. They seem to be a US Army thing. Each infantry and armoured division had certain numbers of cavalry formations for recon and covering duty. In Europe during 1944 and 1945 those formations were mechanized and combined into larger units to serve as recon units for corps HQ. They usually were equipped with Jeeps and M8 Armoured Cars. So at first the .50cal MG had to be demanded and swiftly the ones which reached the units were converted with improvised ring mounts for the .50cal MG on top of the turret. The first factory-made MG mounts for the .50cal were right behind the turret and proved not satisfactory, so the ring mount was made standard on later production runs.
The later M8 with the .50 cal MG mounted on the ring mount.
The off-road performance of the M8 was less than convincing (especially in mud), which more or less restricted the movement to roads. Quite hampering for a recon vehicle. Still, the M8 seems like it did its job well enough to keep it on even though the US army was looking for a successor model by the time production finally had commenced. Its durability, relative quiet run and reliability outweighed the poor off-road capabilities and for recon duty. All too often reckless commanders used the M8 in a direct infantry support role, which often proved disastrous due to the vehicle's light armour.
The sloped armour on the M8 Greyhound was 19mm in the front which made it resistant to large calibre MG fire. On the sides the armour was thick enough to resist MG fire. Due to its recon role it was equipped with either one or two powerful radio sets. In the latter case the crew had to make do with just 16 rounds for the main gun. Installing additional racks for 37mm ammunition was a popular field modification in the M8, as well as the usual armour protection increasing measures.
The M20 Utility Car was the only widely used official variant of the M8. Others were either rare field modifications or test runs (like the M8E1 with a new suspension or an Anti-Aircraft variant). The M20 was pretty much the same vehicle, but with the turret removed and open-topped. It was mostly a command&control car as well as used for recon duty. Again fitted with powerful radio sets, but roomier, lighter and more maneuverable than the M8. Atop the open roof it carried again the .50 cal MG on a ring mount and it carried a bazooka in a special rack in case armoured targets popped up. Of the M20 Ford produced another 3680 veicles.
M20 Armoured Utility Car
If you have got an M8 at home, lost the manual and aren't quite sure how it works or just in case you're interested in some more info on this fine vehicle, here's the M8 Crew Drill Field Manual from December 1943: http://www.warwheels.net/images/M8CrewDrill_FM2-6.pdf
The above manual was acquired through this excellent resource page on the M8.
As I mentioned in my review of the Opel Blitz, the illustrations in the front of the Rubicon kits are just not my cup of tea. It's a matter of tastes, but it's not to mine. The whole design somehow is a bit 'grey' to me on those boxes and lacks contrast I think.
The back, as usual, has a bunch of useful historical infos (quite a lot thereof), a very basic painting suggestion, and a nice picture of the included decal sheet.
The Contents
Rubicon boxes aren't shrink-wrapped, but pretty much everything in them is. So let's see what we have here..
First: A plastic sprue wrapped in plastic.
The casting is really good. Crisp, sharp detaills, no casting errors that I could see. These kits feel like they're half-way between being the typical wargaming kits and being proper scale models. A case in point is things like the MGs on Rubicon kits. I love their MGs. They are almost criminally flimsy (MG34 mostly), but they're beautiful and look right.
..and a second sprue:
I was surprised to see that there were no crew figures included at all. Now this may come over as a bit hypocritical as I did not care about them in the Open Blitz box, but with lorries I always think that I'll use them as terrain as much as I'll use them for actual gaming and more often as scenario objectives than playing with them. However, an open-topped combat vehicle such as the M8 I think it looks weird that the turret is completely abandoned. It's a bit like a Marder or an artillery piece without a crew. Sure, the gun is there, but it can't fire itself, right?
There is no stowage what so ever included either. Well, except for the folded-up tripod mount for the .50 cal. I think that this was a US things. On many vehicles on which they had top-mounted MGs they also carried around foldable tri-pods so the MG could be dismounted and used on a support weapon on its own.
There's the usual assembly instructions. Not as many historical infos and additional snippets as on the Open Blitz instructions, but it's clear and concise.
Now for the highlight - the decal sheet:
As always, filled to the brim with fun stuff, including plenty of decals for Free French and British vehicles and even some for German captured M8s. The US flags were only worn on vehicles at the landing in Tunisia and shortly thereafter for political reasons. This may sound silly, but I think the sheet lacks unit designation numbers, which is a bit of a bummer. Feel free to correct me though, I'm not an expert on US vehicles.
Assembly of the model is a breeze. The fit on the parts is very good, the instructions are clear.
There are barely any options to consider whilst building this kit. The only thing you have to choose is whether you want to have covered up toolboxes behind the front axle or the earlier land mind racks. Well, and you can choose if you want to have the driver's position top hatch open. Weirdly enough the radio operator's hatch is cast shut.
While putting the thing together I noticed a very nice little additional detail - the wheels aren't perfectly round, but slightly flat in the bottom. Good detail, I appreciate that.
The main decision you have to make of course is: Do I build the M8 Greyhound or the M20 Utility Car? The real question we all ask ourselves though is: How can I build both?
The model with its M8 hat on (quite literally)...
Here's the thing - the way the kit is done this actually is possibly without much effort. It's very akin to the GW Warhammer 40,000 Rhino model: Take off the top hatch, replace it with a Razorback turret, done. Just don't glue it on and you can swap without any problems. This M8/M20 kit by Rubicon works exactly the same. The only difference between the M8 Greyhound and the M20 armoured car is that the first has a turret, the second one has a few more things inside to seat the crew.
...and with the M20 top.
You get two crew compartment tops in the box, you even get enough top hatches for the driver's position. It's clearly meant to be built with swappable top bits. However, there are two very surprising problems with that. First: if you put in the additional benches in the crew compartment for the M20 version the Greyhound turret doesn't quite fit. However, it's easy to cut down some unnecessary details on the lower end of the turret and it fits splendidly.
In this picture and the picture above you can see where I cut the inner turret details.
They won't be missed as they are invisible anyway.
Of the .50 cal MG made to fit the ring mounts on the later M8 and the M20 you only get one. No problem. Either build the earlier M8 version with the flip-thing mounted MG at the back of the turret, or just convert a little and build the flippy-kind MG onto a ring mount (it won't have the 100% correct connector between the ring mount and the MG, mind). Now the thing is that there's only one ammo box for the .50 cal MGs included. I guess you could magnetize the MG, but this gets a bit fiddly and work-like and these things are to be avoided.
It's all a slightly weird situation. The kit clearly wants you to be able to build both, but it isn't quite willing to commit.
Last time I painted a US vehicle it was still in enamels and 1:72th. And it probably was a Sherman or the odd duck DUKW. So naturally I had to make up a new recipe, do some research and so on.
Surprise of surprises, it turns out that with US Olive Drab there's a similar situation as with Dunkelgelb - there is no 'right' shade or color! So I used what looked and felt right to me,
I got to try out some new techniques and in the end really dug painting this vehicle. The cool thing of course is that with US vehicles you almost always got a single-coloured vehicle on which you can play around with filters and zenithal highlights and discolored bits and whatnot.
With the decals I ran into some annoyances. First, I had glued the additional box to the front of the vehicle. That's an optional part, and it's way easier to put on a larger US army star in the front without the box of course. It would more 'right' I guess. That big star in the back I nicked from Rubicon's decal sheet for the M3 half-track. There is a larger star with a circle around it on the decal sheet for the M8/M20 kit, but it's still too small for these engine covers in the back.
A bit weird, specially as aerial recognition markings on US vehicles were quite a big thing. After all, they made excellent use of their air superiority and bombing anything that didn't look faintly Allied over and over just to be sure. The whole thing with the circle around the star developed mostly due to pilots calling for making the star more regonizable from above. The star alone from afar and through dust clouds and whatnot sometimes looked like a Balkenkreuz and led to unfortunate incidents.
The inner bits of the crew compartment I painted white. As far as I know this was the case on the M8. on the M20 only the driver's and radio operator's cabs were painted white and the back parts showing through the open top were also painted olive drab. I still painted it all white because it looks more interesting and most of the time I assume it will be in the tablein the M8 variant.
In the end I added two antennae. I think that only US vehicles had that snazzy bendy kind of antennae, right?
So what's the bottom line on this kit?
The things I don't like about this kit are my personal dislike of the box design. Of course that's a bit reaching as it's a matter of tastes and in the end it's not that important.
The other thing is this weird "you can have both kits in one, but not quite" situation with the MGs. I understand that this is easy to fix with some converting, but I think it could have been possible to make it easier for people to do the M8 and M20 as well.
In addition to that I would have appreciated a bigger aerial regonition decal for the back of the vehicle. The big star on the decal sheet is just too small for that. Of course there could be more stowage on the sprues as well, because there can never be too little stowage on vehicles. But Rubicon adressed that problem and will release a dedicated US stowage pack in plastic within the next few weeks, akin to the German stowage pack.
The main thing I find a bit weird is the lack of crew in the turret. For an open topped vehicle you just need crew figures.
So much for the things I'm not too much into about this model. On the other hand, this one has the usual great quality decal sheet Rubicon Models do (and they're about to sell them on their own soon. Talk about exploiting core competence.), the instructions are clear and concise, the model goes together well and detail is better than on earlier kits such as the Panzer III (which I will review as soon as I got the chap painted).
I gather that Italeri/Warlord Games have released a plastic M8/M20 combi box as well. It's interesting to see these two companies go directly toe to toe with 28mm ww2 vehicles. Both seem to cost exactly the same. Would be interesting to have a look at the Italeri/Warlord kit as well, wouldn't it? Well, maybe some day...
Until then, all i can say is that this is a solid, solid model. A few little negative things aside it has everything a wargamer could ask for in a 28mm Greyhound or M20. The lack of crew is probably my main point of critizism, but I'm sure the enterprising people at Rubicon are on the problem already and will release some sort of US vehicle crewmen kit in the near future.
Labels: 28mm, bolt action, chain of command, Historicals, Review, Reviews, rubicon models, ww2
Review: Rubicon Models Opel Blitz


As a way to finest meet up with client's wants, all of our operations are strictly per for Wooden Optical Shop Display , Optical Shop Display , Factory Directly Wooden Optical Shop Display , We sincerely welcome pals to negotiate enterprise and start cooperation. We hope to join hands with pals in different industries to produce a outstanding foreseeable future.
We always do the job to be a tangible group making sure that we can provide you with the top top quality as well as ideal value for Wooden Optical Shop Display , Optical Shop Display , Factory Directly Wooden Optical Shop Display , We warmly welcome you to come to visit us personally. We hope to establish a long-term friendship based on equality and mutual benefit. If you want to get in touch with us be sure to do not hesitate to call. We'll be your best choice.


Payment Protocol secures transactions to BitPay merchant invoices. This clearly identifies that an address belongs to BitPay.com and not to imposters. This reduces the risk of man-in-the-middle (MITM) attacks. This is when imposters pretend to be BitPay and trick you into sending money to their bitcoin addresses.
Some people have recently created services which bypass Payment Protocol security to show bitcoin addresses supposedly associated to BitPay invoices.
Using these services exposes you to a much greater risk of MITM attacks and lost bitcoin. It is possible for these services (or clones of these services) to present false bitcoin addresses to you with no verification that these addresses belong to BitPay.
To avoid this risk, please use secure wallets when paying BitPay merchants. Secure wallets like the BitPay wallet show the verified owner of a bitcoin address (next to a little green "lock" icon). Payment Protocol verifies addresses using the same web certificates which identify most of the sites on the web, such as Facebook, YouTube, and banking websites.
There are many Payment Protocol enabled wallets that automatically provide the correct payment information for paying a BitPay merchant.


text:
Safe Streets Worker Among 3 Victims Killed In…
Safe Streets workers step in to prevent and resolve violence. Baltimore Police Commissioner Michael Harrison said police will do everything…
Man Dead, 16-Year-Old Hurt After Shooting In East…
An investigation is underway into a shooting that claimed the life of a 30-year-old man and left a 16-year-old hurt.
Report On Baltimore's GTTF Scandal Reveals Over Two…
An investigative report led by Steptoe & Johnson LLP produced a more than 660-page document that spelled out all sorts…
Baltimore City State's Attorney Marilyn Mosby Indicted On…
She's accused of filing misleading information and paperwork for loan applications relating to the purchase of two vacation homes in…
Report: Maryland Assistant Basketball Coach Charged With Soliciting…
If convicted, Shingler could spend up to a year in prison and/or a $500 fine. He's due in court in…
23-Year-Old Towson University Student Killed In Shooting
The shooting happened at around 2 a.m. on West Susquehanna Avenue. Officers found Ikemefuna Eguh dead at the scene from…
Smash & Grab ATM Theft Under Investigation In…
Brazen ATM thefts continue in Baltimore City. The latest incident happened in Federal Hill.
Police: 29-Year-Old Man Shot In Southwest Baltimore
The 29-year-old man was taken to an area hospital for treatment. No word yet on a possible suspect or motive.
Baltimore DPW Employee Arrested For Attempted ATM Theft
He also used a city-owned car that he stole to carry out the crime.


text:
Luke Cage's Simone Missick previews Misty's 'emotional journey' in Season 2
Carly Lane
@carlylane
Tag: Luke Cage
Tag: Misty Knight
Tag: Simone Missick
Tag: netflix
Tag: Marvel Netflix
Luke Cage is finally back, and fans are beyond excited to catch up with the heroes of the Marvel Netflix universe as the series returns for Season 2 this week. When we rejoin our cast of characters (both powered and not) this season, they're each navigating a different set of circumstances. Luke (Mike Colter) is adjusting to his new turn in the spotlight as both a superhero and everyman, but a new villain in Harlem threatens the safety of the neighborhood.
Meanwhile, Misty Knight (Simone Missick) is recovering after the loss of her arm in The Defenders, kickstarting a whole new arc for her character—with the help of some epic technology from Rand Industries, of course.
SYFY FANGRRLS spoke to Missick ahead of Season 2's release about Misty Knight's new dynamic with Colleen Wing (Jessica Henwick) and getting in on more of the fights this season, as well as who Misty would frak, marry, or kill.
Fans of the comics know that Misty's bionic arm is a really big part of her character, and it was really exciting to see the beginning of that arc start to take shape heading into this season. What were the biggest adjustments for you as an actor in terms of portraying that road to recovery, and what did you want to convey about that struggle for Misty?
So often when we think about people who go through a physical loss or develop a physical disability, you think about the physical pain. We think about soreness at the wound, or phantom limb syndrome. This idea that you've lived your entire life with something, and so to not have it anymore, what is that physically? What I enjoyed exploring the most was the emotional journey for Misty as well, in order to show what it's like for her to have her identity essentially taken away from her. When she loses her arm, she doesn't feel like she can be a cop anymore. She doesn't feel like she can protect and serve, and to be a force of power in that capacity anymore. Essentially, she doesn't know who she is. That was just such a rich emotional landscape to play around in for Season 2.
Then to be able to show her, with the help of those around her, pull herself up out of that depression was very exciting to play. Depression isn't necessarily something that we talk about a lot within our communities and within our homes, but to see a woman being depressed and going through those emotions and experiencing all the stages of grief that go with losing a huge part of yourself is important. And to be able to play that on screen was such a gift.
I'm glad you mentioned the characters that she has around her that lift her up a bit, because one of the scenes that we've gotten to see so far is the bar fight with Colleen and Misty, and it really feels like the two of them have more of a sisterhood in Season 2. What was it like to grow that dynamic with Jessica [Henwick]?
Oh, it was such a gift, and it was so great the way that it was set up. When they meet each other in The Defenders, it's like a person looking into someone and seeing themselves reflected back. These two strong, capable women are never gonna take no for an answer, and [they] know that they can make things happen on their own. It was just that quick moment that you saw in The Defenders.
So when we see them at the beginning of Luke Cage Season 2, it's this idea of two women who are both struggling with who they are. Colleen has just killed her mentor. She's no longer a part of the Hand. She doesn't really know who she is. Sometimes it's [the] people who are struggling who can reach out and help people who are also struggling. It's that they both identify each other's pain, and yet at the same time, neither of these women is the type of woman to sit there and cry with you and say, "Go ahead. Wallow in it. Spend as much time as you need." They're both women who say, "All right. You had enough. Now, what are you gonna do?"
So I think that that was beautiful to watch. Oftentimes we see that relationship between men and women on screen. And it's a man who's telling the woman, "Come on. You've got to pick yourself up." You know, like Million Dollar Baby. You see this man motivating this woman to climb out of poverty and being looked at as second class in order to fight her own battles. And here you have another woman telling that to her counterpart. I think that that was so great to see. Then there's just the laughter and the humor that Jessica and I were able to find in Misty and Colleen. It's something that we explore in Season 2 of Iron Fist, which was such a gift to be able to work with her over the course of that season. I think it's something that has definitely enriched me as an actor and as a person.
The important thing about that clip too is that it demonstrates how, in a world with superheroes, women without powers can still be fighters. What's your favorite part about getting in on more of those fight scenes?
The fight scenes were probably the highlight, other than the emotional work. Being able to be physical and to pick up a new skill of fighting. We would spend a couple hours a week in the dojo working out this choreography with my stunt trainer, Alvin Hsing, and the people from our stunt team. So to be able to pick up that and to finally give the fans the physical parts of Misty, the prosthetic arm, and to take her badassery to a whole new level, that was my favorite part of the season, really.
Is Misty going to have any more of those fun fight scenes like we see in the bar? Can you hint at any others this season?
There is a lot of ass-kicking to come, so yeah. Definitely, because crime didn't stop in the bar. We take it up a notch as we near the end of the season.
Personally, I'm a huge fan of female detectives in general, so I really love that aspect of Misty's character. We see in Season 1 of Luke Cage [that] she's got these amazing deductive skills and the ability to really analyze a crime scene and make all these conclusions. But she was using them on the other side of the line from our heroes. How does that change this season now that she's got a foot on both sides of that line?
I think Misty is the perfect go-between when it comes to our superheroes and the police department and law enforcement. She is a diplomatic person, and her compass always points north to justice. But in this season, watching her lose her complete trust for the system allows for her to play in those gray areas, which helps her to identify even more with Luke, and for their relationship to become more of a partnership than anything. I think that as long as Misty is on the force, she's always going to be fighting for Harlem and also fighting to make sure that we get to getting justice served no matter whether it's Luke Cage bringing in a suspect or Misty bringing in a suspect. She wants the quickest point from A to B to happen.
You'll see a lot more of that as the season continues, but then when you examine the source materials, Misty, when we find her, she's a cop for a small amount of time. She has her own detective agency with Colleen Wing, Daughters of the Dragon, she worked as the head of Heroes for Hire with Luke Cage and with Danny Rand. So in any capacity that Misty's in, she's gonna make sure that people who need to be behind bars are behind bars.
At SYFY FANGRRLS we play a little game called Frak, Marry, Kill, so we wanted to give you your own Luke Cage-themed frak, marry, kill: Luke Cage, Cottonmouth, Shades?
Wow. Oh. OK. Between Luke Cage, Cottonmouth, and Shades, she would kill Shades. She would kill Shades. He's a shady, slippery person. I think that she would frak Cottonmouth, because you know all that anger could be used for something good, and she would marry Luke, because they have the most in common.


text:
Strand Book Store
20 New Books to Look Forward to in the New Year
Exciting upcoming releases of 2018
The new year always brings new possibilities for personal, spiritual, and intellectual growth. We know how much books can help along any journey, providing new voices to listen to and fresh perspectives on life. Here are some brand new arrivals with upcoming release dates that you can add to your tbr pile. Go ahead, mark these dates down in your brand new 2018 kitten calendar, and we'll see you at Strand on their book birthdays 😉.
Neon in Daylight by Hermione Hoby
Hermione Hoby's first novel is the dazzling story of a shy UK expat who decides to live in New York City. There, she becomes obsessed with her two new oddball friends and gazes into the garish lifestyles of those around her. (January 9)
When They Call You a Terrorist by Patrisse Khan-Cullors
Co-founder of the black lives matter movement, Patrisse Khan-Cullors reflects on the change she has helped create in this important reflection on humanity and justice. Hear Patrisse speak on January 16th at the Schomburg Center in partnership with the Strand. (January 16)
The Largesse of the Sea Maiden: Stories by Denis Johnson
This long-awaited last great work by Denis Johnson was finished just shortly before his death. A haunting and witty collection, Largesse of the Sea Maiden contains five stories told in first-person that explore death and the mysteries of the universe. Reflect on these great stories with Alexander Chee, Min Jin Lee and Deborah Treisman at Strand on January 17th. (January 16)
It Occurs to Me That I Am America by Joyce Carol Oates, Michael Connelly, Neil Gaiman, and Richard Russo
Making a debut in time for the one year anniversary of number 45's inauguration, over 30 authors elaborate on fundamental ideals of a free, just, and compassionate democracy — through fiction. Introduced by Viet Thanh Nguyen , this anthology includes Joyce Carol Oates, Neil Gaiman, Lee Child, Mary Higgins Clark and many more. Meet contributors Lee Child, James Hannaham, Susan Minot, Angela Flournoy, Michael Cunningham, Eric Fischl and Jonathan Santlofer at the Strand on January 16th. (January 16)
Frankenstein in Baghdad by Ahmed Saadawi
Protagonist Hadi creates a corpse from body parts found in a semi-demolished Baghdad with the intent of getting a proper burial for the victims. However, the body goes on a murderous rampage to seek revenge and quench his craving for human flesh. (January 23)
BRAVE by Rose McGowan
Rose McGowan was listed in Time Magazine's Person of the Year issue as a silence breaker for her bravery in coming forward about her experience with sexual abuse. Her revealing memoir pulls back the curtain on hyper-sexualization in Hollywood and what it was like to have her entire personal life exposed in the media. (January 30)
The Healing Self by Deepak Chopra
Internationally known public speaker and alternative medicine advocate Deepak Chopra joins forces with Dr. Rudolph E. Tanzi for this revealing new book. The authors lead you through taking charge of your health in revolutionary ways. Join the Strand on January 30th for special event with Deepak Chapra. (January 30)
This Will Be My Undoing: Living at the Intersection of Black, Female, and Feminist in (White) America by Morgan Jerkins
Morgan Jerkins weaves the personal with the public and political in compelling, challenging ways to demonstrate the challenges of being a black woman today. She does so in a way that doesn't seek to placate her race and gender, but is nuanced so smartly that it is a must read for everyone. (January 30)
Still Me by JoJo Moyes
In Still Me, the beloved heroine Louisa Clark from Me Before You and After You confidently takes on a new life in New York while keeping the romance alive long-distance with Ambulance Sam. Quite suddenly, she finds herself elbow to elbow with New York's elite, and the old and new start to collide. (January 30)
Feel Free: Essays by Zadie Smith
Zadie Smith has proven she is as strong of an essayist as she is a fiction writer, writing pieces for The New Yorker and now releasing her latest work. Smith stuns once again with this collection of previously unpublished essays that discuss social media, public spaces, global issues, and more. (February 6)
Sadness Is a White Bird by Moriel Rothman-Zecher
This heart-wrenching debut focuses on the life of Jonathan, a soon-to-be Israeli soldier who befriends two Palestinian siblings. The three are inseparable, sharing adventures and laughs that bring them closer. This friendship only makes Jonathan's impending draft date all the more nerve-wracking, as he has been appointed to oversee occupied Palestinian territory. (February 13)
A Girl Like That by Tanaz Bhathena
Zarin is the girl that everyone talks about behind her back, but when she and Porus are found dead in a car accident, everyone begins to question what they thought they knew. Tackling the complicated issues of race, identity, class, and religion, this debut paints a portrait of teenage ambition, angst, and alienation that feels both inventive and universal. (February 27)
She Persisted Around the World: 13 Women Who Changed History by Chelsea Clinton
Following the recent hit and New York Times bestseller She Persisted, Chelsea Clinton is back to extend the knowledge of strong and determined women worldwide. This delightful collection, illustrated by Alexandra Boiger, is a wonderful addition to the bookshelf for the mini-feminist in your life. (March 6)
Tomi Adeyemi has us so excited for the first book in the fantasy world of Orïsha. In it, we meet Zélie Adebola, who can remember a world in her childhood where magic thrived, and her mother was a great maji. When a new regime unjustly annihilates all magic and kills her mother, she is lost. Zélie has the chance to bring magic back, but can she do it under the reign of an evil prince with her own unpredictable magic thriving in her veins? (March 6)
The Female Persuasion by Meg Wolitzer
From the author of The Interestings comes a new novel about an unlikely friendship between a college freshman named Greer and an older woman heavily involved in the women's movement. Her newfound friendship leads to brand new opportunities for Greer, but it also makes her question her relationship with her boyfriend because it may be at odds with the future she dreams up for herself. (April 3)
Heads of the Colored People: Stories by Nafissa Thompson-Spires
This is a wonderful collection of stories by newcomer Nafissa Thompson-Spires focuses on the concept of black identity in our current era. Giving a fresh voice to the contemporary literary canon, the author shares poignant and darkly humorous stories. (April 10)
How to Write an Autobiographical Novel: Essays by Alexander Chee
Masterful novelist Alexander Chee shares his first collection of essays that relay his lessons and struggles in life. From his views on politics to his identity in American society, to his heartbreaking life experiences, Chee does not hold back. This nonfiction work dazzles as it explores one man's education and his life in art. (April 17)
Creative Quest by Questlove
Questlove is the iconic co-founder of The Roots, currently most well-known as the house band on Late Night with Jimmy Fallon. His unique musical sound and successful career as a musician across TV and Film has ran over into the work of books. Questlove shares the lessons he's learned for finding creativity and how to pursue it. (April 24)
Not That Bad: Dispatches from Rape Culture edited by Roxane Gay
Edited and introduced by beloved author Roxane Gay, this anthology of personal accounts attest to the very real culture of rape and harrasment, and the unbelievable norm of second-guessing victims. Contributors include Ally Sheedy, Gabrielle Union, Amy Jo Burns, Lyz Lenz , Claire Schwartz and Bob Shacochis. (May 1)
Anger is a Gift by Mark Oshiro
This important story chronicles one teen's journey from loss to resistance as he copes with his father's unjust murder at the hands of an Oakland police officer. Moss Jefferies suffers from anxiety after his father's untimely death and the media's portrayal of his dad after. To make matters worse, Moss and his friends are constantly treated like criminals and subject to random checks. Despite the fear he faces, Moss finds a way to organize and resist. (May 22)
The Immortalists by Chloe Benjamin, January 9
So You Want to Talk About Race by Ijeoma Oluo, January 16
An American Marriage by Tayari Jones, February 6
Freshwater by Akwaeke Emezi, February 13
What Are We Doing Here: Essays by Marilynne Robinson, February 20
The Elizas by Sara Shepard, April 17
The Destiny Thief: Essays on Writing, Writers and Life by Richard Russo, May 8
Florida by Lauren Groff, June 5
The Winds of Winter by George R.R. Martin (fingers crossed!)
If you like what you read, give us a 👏 so other readers can enjoy it, too!
For more literary content, follow Strand on Instagram 📷, Twitter 🐥, and Facebook 👤. Plus, sign up for our 📩 Strand Insider newsletter 💌!
More from Strand Book Store
Independent NYC bookstore since 1927. Where books are loved.
READ/DOWNLOAD@[ The Journalist and the Murderer FU
READ/DOWNLOAD$# The New Encyclopedia of Orchids: 1
Shira Destinie Project Do Better Jones
Review of a book worth buying: Separate and Unequal
Hamodasa Ali
PDF @ FULL BOOK @ KJV Bible for Kids [pdf books free]
READ/DOWNLOAD#* El libro de la madera / Norwegian
Qhashem sdfLokman
PDF @ FULL BOOK @ Beyond Religion: Ethics for a Whole World #*BOOK
Wesley Donehue
Magician vs. Mule
Milagrosamanda
READ/DOWNLOAD%< President You: How a Thoughtful Ordinary Citizen Could Change the Most Complex…
Thebit34termint
PDF © FULL BOOK © Soul Surfer: A True Story of Faith, Family, and Fighting to Get Back on the Board…


text:
Egyptian Ankh
The ancient Egyptians used symbols to represent many words and ideas. Their writing, known as hieroglyphs, have a lot of symbols that represent their gods and their lives. One of the most cherished symbols of ancient Egypt is the "Ankh'. This is their symbol for the key of life.
Egyptologists still are not sure where the idea of the Ankh came from. There are some that think it is the combination of male and female. They believe that the symbol was first used as a kind of belt buckle for the goddess Isis.
The ankh is one of the favorite symbols and shows up in a lot of the ancient Egyptian art. It appears on the walls of burial tombs and is used in many paintings and sculptures. It is often at the very end of the fingers of a picture of a god or goddess and it's believed that it represents the gods offering the gift of life. It is thought that the ankh was in burial tombs as a symbol of life after death.
The ankh was used as an amulet and was carried either by itself or combined with other hieroglyph symbols to mean health and strength. Many mirrors were discovered with metal that had been shaped into the form of the ankh. Some think that it was to give the person the ability to see into another world.
Archeologists have discovered pictures in ancient Egypt that show the gods pouring water on the pharaoh's head as part of a cleansing or ritual for purification. The water is shown as chains of ankhs and is thought to represent dominion and power. The images confirm the connection and bond between the gods and the pharaoh.
Throughout ancient Egypt the ankh was shown as a staff or 'djed' column. The djed column represented strength and stability and was thought to be a symbol for Osiris. Osiris was the god of the underworld and brought fertility. The two symbols placed together were success, long life, longevity and strength.
Ankhs were made out of just about everything that the ancient Egyptians could craft. From metals such as bronze and gold to glazed ceramics, stone and wood. In many cases they would add inscriptions on them for amulets. The symbol was included as decoration for the furniture of the wealthy as well as the pharaoh. Since it meant the key of life, it was thought to bring good luck to the owner. Jewelry has been found that contain the image of the ankh.
The ankh was used in so many of the religious rituals and combined in so many ways that some archeologists believe it might have grown to be a kind of general symbol to add life and power to another symbol.
As trade and wars continued throughout the lands, the ankh began to appear on coins found in ancient Cypress. Later the ankh was used as a symbol of the planet Venus as well as the goddess Venus also known as Aphrodite. The islands that produced copper would use the copper to create ankhs.
The symbol of the ankh was rediscovered and its popularity as an amulet or talisman can be seen in a lot of the jewelry and art today. In the last number of years there has been an increased interest in ancient Egypt and their religions. It is believed that this started with the popularity of the world tour of the contents of King Tut's tomb. Many people are buying and making items that have the ankh symbol on them.


This matter is before the Court on Plaintiff Shayla Washington's ("Washington") Motion for Assessment of Attorney's Fees and Costs (Filing No. 13), and two Supplemental Motions for Attorney's Fees and Costs (Filing No. 16; Filing No. 19). Also before the Court is a Motion to Deny Plaintiff's Motion for Attorney's Fees (Filing No. 17), filed by Defendant Med-1 Solutions, LLC ("Med-1"). Washington filed this Fair Debt Collection Practices action against Med-1 alleging abusive debt collection practices. Within a month after the Complaint was filed, the parties negotiated an Offer of Judgment (Filing No. 8), but the issue of attorney's fees and costs remained unsettled. On May 19, 2017, Med-1 filed a Response in Opposition to Plaintiff's Attorney's Fees alleging that Washington is not entitled to attorney's fees incurred after the Offer of Judgment. (Filing No. 18.) For the reasons stated below, Med-1's objection is overruled and Washington's Motion with the modifications set forth in this Entry is granted.
The Fair Debt Collection Practices Act ("FDCPA") provides for costs and a "reasonable attorney's fee" to a prevailing party. "Unlike most private tort litigants, [a plaintiff who brings an FDCPA action] seeks to vindicate important * * * rights that cannot be valued solely in monetary terms, and congress has determined that the public as a whole has an interest in the vindication of the statutory rights." Tolentino v. Friedman, 46 F.3d 645, 652 (7th Cir. 1995) (citation and quotation omitted). "The general rule for calculating attorney's fee awards under fee shifting statutes is applicable to attorney's fees awards under the FDCPA." Young v. Accounts Recovery Bureau, Inc., No. 1:11-cv-0025-WTL-DKL, 2012 WL 3764014, at *1 (S.D. Ind. Aug. 8, 2012) (citing Gastineau v. Wright, 592 F.3d 747, 748-49 (7th Cir. 2010)). The lodestar method is generally accepted as producing a reasonable fee. Gastineau, 592 F.3d at 748. But the court "has the flexibility to adjust that figure to reflect various factors including the complexity of the legal issues involved, the degree of success obtained, and the public interest advanced by the litigation." Id. (internal quotation marks omitted).
As an initial matter, the Court notes that Washington filed this action on February 20, 2017 and her attorney, John Steinkamp, filed a similar lawsuit on February 28, 2017: Nikita Chestnut v. Med-1 Solutions, LLC, 1:17-cv-00619-TWP-DML. Washington seeks an award of $5, 512.50 in attorney's fees, and $505.00 as costs and litigation expenses. Med-1 does not contest the $505.00 in costs, and the Court grants this amount. However, Med-1 contends that $5, 512.50 in attorney's fees is unreasonable and that Washington is not entitled to attorney's fees incurred after the Offer of Judgment on March 13, 2017. Washington calculated the attorney's fees using the lodestar method, which the Court accepts as proper. At the outset, the Court notes Med-1's Response in Opposition was untimely. Med-1 filed its Response ten days after Washington filed her Supplemental Motion for Attorneys' Fees, which stated that Med-1's failure to respond was a waiver of any objection. (Filing No. 16 at 2.) Med-1 asserts that it did not waive any objection to the motion for fees, because it is not required to file a response to this type of motion. (Filing No. 18 at 4.) Med-1 is correct that a response was not required, however, the local rules of this court require that if a party elects to respond to a motion (other than a motion for summary judgment) the response is due within 14 days after the motion is received. See Local Rule 7-1(2)(A). Accordingly, Med-1's Response was ultimately filed four weeks after it was due. While the Court may summarily rule on a motion if an opposing party does not file a response within the deadline, the Court will nevertheless analyze the reasonableness of Washington's attorney's fees.
Pursuant to Rule 68 of the Federal Rules of Civil Procedure, Defendant, Med-1 Solutions, LLC hereby offers to allow Judgment to be entered against it in this action in the amount of $1, 000.00 statutory damages and reasonable attorney's fees and court costs. This offer of judgment is made for the purposes specified in Federal Rule of Civil Procedure 68, and is not to be construed as either an admission that Defendant, Med-1 Solutions, is liable in this action, or that the Plaintiff, Shayla Washington, has suffered any damage.
(Filing No. 6-1.) Thus, by the explicit terms of the Offer of Judgment, attorney's fees and court costs incurred up to March 14, 2018 were covered under the agreement. Thereafter, Washington's counsel and Med-1's counsel traded emails for several days regarding the attorney's fee portion of the settlement, including Washington's itemization, but ultimately a fee dispute ensued on March 20, 2017 when Med-1 rejected Washington's proposal for any attorney's fees after March 14, 2017. (Filing No. 13-4 at 13.) The Court must determine if attorney's fees accruing after Washington accepted the Rule 68 Offer of Judgment concerning the fee dispute are recoverable.
As noted previously, Med-1's Response, which raises the argument that fees after March 14, 2017 are not recoverable, was filed four weeks after the deadline had passed. Washington asks the Court to ignore the untimely filing and rule summarily. Even considering Med-1's objection, the Court finds Washington is entitled to attorney's fees. "[I]f an offer is ambiguous, any ambiguities are to be construed against the drafter." Aynes v. Space Guard Prod., Inc., 201 F.R.D. 445, 448 (S.D. Ind. 2001) (citing Webb v. James, 147 F.3d 617, 623 (7th Cir. 1998). The Aynes court found that Rule 68 permits post-judgment recovery of costs when it considered a similar fee dispute for claims arising under Title VII and the ADA. Id. While the offer in this case unambiguously covers reasonable attorneys' fees and court costs, the offer is ambiguous as to the issue currently before this Court-whether attorneys' fees regarding the fee dispute, which occurred post-judgment offer, were covered under the offer. "Thus, it is clear that Plaintiff's acceptance of Defendant's offer is not controlling unless the offer is unambiguous; only then would Plaintiff's acceptance preclude post-judgment recovery of costs and attorney's fees." Id. at 448. Washington did more than what was required to resolve this dispute before engaging in further litigation regarding the fee dispute. Washington's counsel sent Med-1's counsel case law that supported his contention that his attorney's fees should be awarded for time spent on the case after acceptance of the Offer of Judgment. He also indicated that if the parties could not resolve the fee dispute he would have to file a fee petition with the Court. (Filing No. 13-4 at 1.) Washington also offered to lower the settlement amount proposal by $200.00 in an effort to resolve without further litigation. (Filing No. 16 at 1.) Because Med-1's post-judgment offer was silent and ambiguous as to any temporal limitation on attorney's fees and court costs, Washington is not precluded from post-judgment recovery regarding the ensuing fee dispute. In fact, filing a petition with the Court, which in turn produced more fees, was the only way for Washington to attempt to receive the fees due.
"A reasonable hourly rate for an attorney is that rate the attorney actually charges and receives in the marketplace from paying clients." Luttrell v. Accounts Recovery Bureau, Inc., No. 1:11-CV-0877-JMS-DML, 2012 WL 566396, at *2 (S.D. Ind. Jan. 23, 2012), report and recommendation adopted, No. 1:11-CV-00877-JMS, 2012 WL 566628 (S.D. Ind. Feb. 17, 2012). Washington's counsel, John Steinkamp's rate is $300.00 per hour. Decided six years ago, the Luttrell court found that John Steinkamp's hourly rate, then $250.00, was reasonable. Id. It is reasonable that Washington's counsel's rate for FDCPA litigation could have increased to $300.00 per hour, given inflation, his increased experience, and success and reputation in litigating these types of cases. In any event, Med-1 does not dispute the hourly rate charged by Washington's counsel. "Congress provided fee shifting to enhance enforcement of important civil rights, consumer-protection, and environmental policies. By providing competitive rates we assure that attorneys will take such cases, and hence increase the likelihood that the [*653] congressional policy of redressing public interest claims will be vindicated." Tolentino v. Friedman, 46 F.3d 645, 652-53 (7th Cir. 1995) (citation omitted).


The rally rabbit was being cut into pieces for scrap and the new car wasn't even remotely done yet. Therefore, Andrew Lockhart would be my second driver that wasn't my brother. He has the honor of being the first person I've told to go faster on a stage, though.
Andrew is from California and was planning on coming up for Doo Wops. His sister normally co-drives for him but was unable to make it. I gladly accepted his offer and learned a lot from the experience. His car is immaculately prepped and has a fantastic Coralba rally computer. He drives a VW Golf, so I took the opportunity to learn about the minor differences in the car to the Rabbit. I also got to see some of the new stages, like Palix, that would be used in future Olympus rallies. All good experience.
Mr. Lockhart is a solid driver and has increased in speed since 2009. We started the day a bit slow, but picked up the pace as day 1 progressed. We finished second in Gp2 for the day in the end. On the transit from stage 3, the alternator died. We got a tow from the Tabor ladies in the RSX and borrowed an alternator from Phil Meyers with the promise that we'd buy it later or return it if his went out. I assisted with the change, too, making it look like I knew what I was doing for a bit, even. I used my VW expertise to get a lower alternator bolt out, earning the nickname "Alternator Bolt" for the remainder of the rally. Experience!
Overnight, it snowed. Did I mention Andrew is from California? Add on the fact that the heater fan burned out so we had to run with the windows cracked to defrost the windscreen and, needless to say, he started day 2 a little timidly. We ran Smith Creek with a time of 7:54 while the top 3 in the class ran 7:20 down to 6:26 (Nate Tennis!) I believe it was near the start of this stage when I said "I think you can pick up the pace a little here." That's pretty much as forceful as I get in this job. You see, I'd run Smith Creek at sub-6 times with my brother and knew you could go flat out on pretty much the whole start of the stage up to the "jump."
At any rate, Andrew picked up the pace and ran Smith Creek the opposite direction about 90 seconds faster. A shortened Brooklyn Stage (due to weather damage) was a disappointment, but his times were improving as the day went on. The last three stages were Palix and during one of the services there, I got to look like I knew what I was doing again when I noticed some control arm bolts that were loose. The car was making a sound I'd heard before in the Rabbit but couldn't quite place it until I remembered about our bent A-arm problems and took a peek up front. Day saved! In the end, Andrew brought it back to 4th in class and 11th overall, including a 2nd in class run on the last two stages. A solid performance all around.


The Forest Avenue Business Improvement District (BID) was formed to support businesses along Forest Avenue between Broadway and Hart Boulevard. Since it's founding in 2004, the Forest Avenue BID has played a key role in maintaining a clean, safe and inviting environment for it's community. With creative budgeting for sanitation, graffiti removal, public safety, landscaping, marketing and advocacy, the BID continually strives to enhance Forest Avenue's position as Staten Island's premiere neighborhood.
Andrea S,. Morse • Esq. Andrea S Morse, Esq.


BOXING: Kris George has scored the biggest win of his career as he downed previously unbeaten Cameron Hammond to claim the Commonwealth welterweight title at Rumours International on Friday night.
The Toowoomba champion recorded a unanimous decision over highly-regarded Hammond despite pre-fight tips of the visitor being the better credentialed boxer.
But George outpointed Hammond over 12 rounds and didn't have to rely on his respected power to land a knock-out in order to win.
This title could now open up opportunities overseas for rising star George.
"I've proven to Australia and the world that I'm ready to take on others so bring on the UK, bring on the USA," he said.
The win now takes George's record to 12-1 while Hammond sits at 16-1.
It was a great night for Toowoomba boxing as Brent Rice also claimed the Australian super featherweight title at Rumours.
Rice remains unbeaten: Unbeaten Toowoomba pugilist Rice builds on impressive start in the professional ranks with a majority decision victory against Matt Casboult to keep the Australian super featherweight title in town.
Unbeaten Toowoomba pugilist Rice built on his impressive start in the professional ranks with a majority decision victory over 10 rounds against Matt Casboult.
"It was very tough in there," Rice said.
Rice now holds the belt Will Young owned at the end of his career.
He also has an unbeaten 5-0 record and could be bound for bigger challenges in the new year.


White Reaper is Tony Esposito, Nick Wilkerson and Sam Wilkerson.
Engineered and Mixed by Trip Barriger and Jim Marlowe in Louisville, KY.
All songs written and performed by White Reaper.
Additional keys and vocals by Lexi Drexelius.
Photo arranged by William Carpenter, taken by Ryan Hater.
Thanks friends, family, and Polyvinyl.
2014 © & ℗ Polyvinyl Record Co.


What does your school or office do with all those used computers and ipads?
Surprisingly, many organizations throw out their used technology! That is tragic!
Instead, let us use them to revolutionize internet access for entire communities and provide new healthcare and education opportunities to deserving people who have never had such possibilities before.
The computer in the photo above was used by hundreds of students at a private school in the United States. Today, it empowers scholars in Faridabad, India. Now that's teamwork for a better planet!


text:
Archive for Walker Froehling
Women's Golf Earns WGCA All-Scholar Top 25
The Women's Golf Coaches Association (WGCA) announced its top 25 teams with the highest team GPA for each NCAA division and Gustavus comes in at No. 16 in Division III with a 3.635 GPA.
July 11, 2019 1:05 pm by Walker Froehling
Ericson, Kratz, Regalado Named WGCA All-American Scholars
The Women's Golf Coaches Association (WGCA) All-American Scholars were announced Monday with a total of 1,097 women's collegiate golfers recognized with this prestigious honor including three Gustavus student-athletes.
July 9, 2019 2:21 pm by Walker Froehling
Hensch, Keelin Named May Student-Athletes of the Month
Men's and women's track & field throwing specialists Michael Hensch (Sr., North Branch, Minn.) and Katie Keelin (Jr., Burnsville, Minn.) have been selected as the Gustavus Adolphus College Male and Female Student-Athletes of the Month for May, presented by Thrivent Financial and voted on by the Gustavus Sports Information Department.
June 3, 2019 8:57 am by Walker Froehling
Women's Soccer Announces 2019 Camp Dates
The Gustavus women's soccer team is excited to be hosting two different residential camps this summer.
Patrick Whaling Awarded ITA Division III Most Improved Senior
Men's Tennis player Patrick Whaling (Sr., Manakin Sabot, Va.) received national recognition at a banquet held at the National Championships on Thursday evening as the Most Improved Male Senior tennis player in Division III.
May 24, 2019 11:09 am by Walker Froehling
Kratz Earns Division III All-Region Accolades
The WGCA announced it's 2018-19 announced its award winners on Wednesday night and Emily Kratz (Fy., Edina, Minn.) received Midwest All-Region honors.
Men's Golf Adds Multiple Postseason Honors
The Gustavus men's golf team recently completed their 2018-19 campaign and Wednesday received a handful of accolades as the Division III PING All-Region Team, the Division III All-Freshmen Team, and the Division III Srixon/Cleveland Golf All-America Scholars were announced.
Brandt and Kratz Named MIAC Women's Golf All-Conference
The MIAC released their 2018-19 women's golf All-Conference team and Gustavus's Ellie Brandt (Sr., Wayzata, Minn.) and Emily Kratz (Fy., Edina, Minn.) each garnered their first All-Conference honor.
Pedersen Wins MIAC Men's Golf Top Honors
Jacob Pedersen (Fy., Minnetonka, Minn.) was named the MIAC men's golf Player of the Year and Freshman of the Year as voted on my the MIAC coaches, while Ben Hauge (Jr., Ramsey, Minn.) and Max Ullan (So., Blaine, Minn.) were both named All-Conference.


We can sharpen anything! We are a knife sharpening service for the smallest pocket knife to the largest hunting knife. We do clipper blade sharpening to make clippers trim like new and we have a straight razor sharpening service to fix up classic razors.
With decades of experience we will sharpen your treasured tools in the best way possible. Please use the form below to give us the details of your sharpening needs and we will be back with you promptly.
Your Sharpening Request: Please provide details of the item(s) you need sharpened.


text:
Q: Excel VBA want Userform to keep active workbook active I have a UserForm attached to a certain workbook. When a different workbook is active, and the button to trigger the UserForm is pressed on the Quick Access Toolbar, it shows the UserForm and activates the other workbook that the UserForm is attached to.
I want the active workbook (and sheet), whatever it is, to stay active when the UserForm is triggered via QAT button.
This seems simple but I haven't been able to find any solutions.
Thanks!


The Lions Clubs International Foundation (LCIF) is the global charitable arm of the association, providing grants to Lions to enable them to answer needs in their communities. Last year alone, LCIF disbursed grants in excess of US$16.7 million to districts around the world. In its nearly three decades of existence, LCIF's growth has been phenomenal and, assured of the growing support of Lions, will continue to expand.
Through humanitarian service grants, LCIF enables Lions to construct and equip workshops and training facilities, thus making it possible for the disabled and disadvantaged to gain expertise in skills that will make them self-supporting and productive members of society.
LCIF supports Lions' long-term efforts to rebuild communities when devastation caused by floods, earthquakes, hurricanes, tornados and other catastrophes make major reconstruction necessary.
Grants have also made it possible for Lions to build clinics, hospitals, libraries, schools and many other facilities.
The Melvin Jones Fellowship Program is a primary means for LCIF to strengthen its financial base. The fellowship is presented to a Lion or other individual for a personal contribution or as a tribute from a club of US$1,000. Presently, there are well in excess of 145,000 Fellows with 95 Lions clubs having 100 percent of their memberships recorded as Melvin Jones Fellows.
LCIF funds and administers SightFirst, the association's program to conquer reversible and preventable blindness. During the recently completed three-year Campaign SightFirst fundraising effort, more than US$142 million has been documented in cash and pledges, exceeding the US$130 million objective. LCIF is presently disbursing these funds to assist Lions in conducting far-reaching initiatives in blindness prevention. SightFirst encompasses five major areas in its fight against blindness: cataract, onchocerciasis (river blindness), xerophthalmia (Vitamin A deficiency), glaucoma and diabetic eye disease. The early results of SightFirst have been tremendous. Thus far, more than 850,000 individuals, living mainly in developing countries, have had their sight restored through cataract surgery. Also, an intensive campaign is now underway to attack river blindness in those areas of the world, primarily western Africa, where the disease is prevalent.
The devastating effects of glaucoma and diabetic eye disease are now being addressed in developed areas of the world where they most occur. A successful pilot program, called the Lions Eye Health Program (LEHP), conducted by the Lions of Multiple District 22 (Maryland, Delaware, District of Columbia), in conjunction with the National Eye Institute in the United States, not only tested hundreds of individuals most at risk for these diseases, but provided informational material of their symptoms. It has now been adapted for implementation throughout the United States and in other developed areas of the world, notably Japan.
"Recreating this program," says Past International Director Clement F. Kusiak, LEHP national program coordinator, "will bring Lions one step closer to reaching their goal of eradicating preventable blindness around the world."


Sliding Patio Doors With Blinds. MP Doors 72 In X 80 Smooth White Right Hand Composite Sliding With Patio Blinds Decorations 0. Sliding Door Blinds Patio And Shades In Doors With Designs 12. MP Doors 60 In X 80 Woodgrain Interior Smooth White Exterior Within Sliding Patio With Blinds Plans 1. Sliding Patio Door With Built In Blinds YouTube Doors Decor 7. Blinds Between The Glass Patio Doors Exterior Home Depot Intended For Sliding With Plans 2. Anderson Sliding Glass Doors With Built In Blinds Patio Door Designs 11. Series Gliding Patio Door With Built In Blinds Vintage Doors Within Sliding Plans 10.
Sliding Patio Doors With Blinds Inside Glass As Your Reference Regarding Ideas 16. Blinds Between The Glass Patio Doors Exterior Home Depot Throughout Sliding With Decorations 8. All About Patio Doors With Built In Blinds Feldco Intended For Sliding Idea 3. Patio Doors At Lowes Com In Sliding With Blinds Plan 13. Small Sliding Patio Door Blinds Bellflower Themovie Com Perfect Within Doors With Decor 9.


text:
Q: How to do async task without waiting for it to finish in python? I have a program like this
task_2_running = False

async def task2():
    task_2_running = True
    await do_something()
    task_2_running = False

async def main():
    while True:
        x = await task1()
        do_something(x)
        if some_condition(x) and not task_2_running:
            #Do task2() but don't wait until it finished

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

How do I call task2() so the loop will continue without waiting for task2() to finish, and task2() will still finish sometime in the future?

A: You could use asyncio.create_task, a sample as next:
test.py:
import time

task_2_running = False

async def task1():
    time.sleep(3)

async def task2():
    print("task2 run")
    task_2_running = True
    await asyncio.sleep(5)
    task_2_running = False
    print("task2 finish")

async def main():
    while True:
        print("main run")
        x = await task1()
        if not task_2_running:
            print("create task2")
            #Do task2() but don't wait until it finished
            asyncio.create_task(task2())
        await asyncio.sleep(1)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

Execution:
$ python3 test.py
main run
create task2
task2 run
main run
create task2
task2 run
task2 finish
main run
create task2
task2 run
^C

From the execution, you could see after task2 run, the main run did not wait for task2 finish, just continue to run next loop to print another main run.
BTW, asyncio.create_task just for python3.7 and higher, for < python3.7, you may need to use asyncio.ensure_future(), see this:
async def coro():
    ...

# In Python 3.7+
task = asyncio.create_task(coro())
...

# This works in all Python versions but is less readable
task = asyncio.ensure_future(coro())
...


text:
Home Q News Music News 98 Degrees' Jeff Timmons, Justin Jeffre and Drew Lachey tease A Boy...
98 Degrees' Jeff Timmons, Justin Jeffre and Drew Lachey tease A Boy Band Christmas tour
Courtesy of A Boy Band Christmas
Members of 98 Degrees, O-Town, All-4-One and more are about to launch A Boy Band Christmas tour.
98's Jeff Timmons told ABC Audio plans originally featured just his group, but Nick Lachey's hectic schedule forced them to change course. That's when they revisited the fun they had with the A Very Boy Band Holiday special that aired on ABC last year.
"We had so much fun doing that," said Timmons. "We said, 'Hey, why not call up some of our guys and some great vocalists from different bands and maybe replace that tour with this one?' So that's how it came about."
98's Justin Jeffre noted now is the perfect time to launch their ambitious tour, asking, "What better way to spend the holiday season than hitting the road and singing some holiday songs and bringing some holiday spirit?"
O-Town's Erik-Michael Estrada chimed in, "Boy bands and Christmas belong together!" Estrada also joked he's "putting a lot of miles on my treadmill" to prepare for the trek.
Drew Lachey added this concert series is also a thank you to those who propelled them to superstardom in the late '90s and early 2000s. "That time for us was filled with these wonderful, life-changing memories… The fans were the ones that made all that possible for us," he said.
"The interaction that we've had with fans over the last 20+ years have shaped our lives not only creatively and professionally, but also personally," he continued. "The fact that we're still able to do this 20+ years later? We still have people wanting to come out and see us? It's a dream come true!"
A Boy Band Christmas Tour kicks off December 2 in Bossier City, Louisiana. Tickets are on sale now.
Previous articleHelena Bonham Carter speaks on "vindicated" Johnny Depp and rails against "witch hunt" of cancel culture
Next articleIn Brief: James Gunn on Warner Bros. Discovery's superhero plans, and more


They've been warned over and over; they haven't listened.
North Carolina has faced incredible fallout for HB2, the anti-LGBT law that, among other things, specifically prohibits transgender people from using bathrooms that match their gender identity. The NCAA just piled on even more.
Based on the NCAA's commitment to fairness and inclusion, the Association will relocate all seven previously awarded championship events from North Carolina during the 2016–17 academic year. The NCAA Board of Governors made this decision because of the cumulative actions taken by the state concerning civil rights protections.
This move will impact the D1 Women's Soccer College Cup, D3 Men's and Women's Soccer Championships, D1 Men's Basketball Championship (first and second rounds), D1 Women's Golf Championships, D3 Men's and Women's Tennis Championships, D1 Women's Lacrosse Championship, and D2 Baseball Championship.
The NBA similarly announced in July that it would be moving its All-Star game out of Charlotte for the same reason, and plenty of other businesses and entertainers have abandoned plans to create jobs or otherwise contribute to the state's revenue.
Several individual universities, such as the University of Vermont, have similarly canceled games that would require their players and fans to travel to North Carolina.
The 2016 ACC football championship, also scheduled to take place in Charlotte, was conspicuously not included in the list.
This is so absurd it's almost comical. I genuinely look forward to the NCAA merging all men's and women's teams together as singular, unified, unisex teams. Under the NCAA's logic, colleges should make cheerleaders and football players share bathrooms, showers, and hotel rooms. This decision is an assault to female athletes across the nation. If you are unwilling to have women's bathrooms and locker rooms, how do you have a women's team? I wish the NCAA was this concerned about the women who were raped at Baylor. Perhaps the NCAA should stop with their political peacocking — and instead focus their energies on making sure our nation's collegiate athletes are safe, both on and off the field.
The NCAA has had a policy of transgender inclusion on its teams for over six years.
The issue of redefining gender and basic norms of privacy will be resolved in the near future in the United States court system for not only North Carolina, but the entire nation. I strongly encourage all public and private institutions to both respect and allow our nation's judicial system to proceed without economic threats or political retaliation toward the 22 states that are currently challenging government overreach. Sadly, the NCAA, a multi-billion dollar, tax-exempt monopoly, failed to show this respect at the expense of our student athletes and hard-working men and women.


New Delhi, May 14 (UNI) A conglomerate of student bodies here has demanded that political parties clarify their individual stand on the issue of reservation -- as proposed by Union HRD Minister Arjun Singh.
Student bodies of medical colleges, Delhi University (DU), Jawaharlal Nehru University (JNU), Jamia Millia and Delhi IIT, under the banner of 'Anti-Reservation Youth Brigade of Delhi', at a meeting last evening demanded that Congress president Sonia Gandhi, BJP leader L K Advani and CPI (M) leader Prakash Karat to explain their position on the reservation issue.
This, they said, would help the student community to chalk out their strategies, vis-a-vis political parties.
Stating that agitation in universities would soon start to enlighten others on the new reservation policy, the 'gathering' which assembled at Ridge Park in North Campus area of Delhi University decided to burn effigies of political leaders who failed to clarify their stand on the issue.
Condemning the government's move to divide the student community on caste lines, they demanded that if the government was really serious about the uplift of the backward classes, it should new special colleges for them.
Among those who addressed the gathering were Shashi Kumar of the DU, Ratnesh Gupta of JNU, Iqbal Singh from Jamia Millia and Suniana Sharma, who representated the medical colleges.


Along with the "Client-Oriented" enterprise philosophy, a rigorous high-quality control process, superior production products along with a robust R&D group, we constantly deliver premium quality products, exceptional solutions and aggressive costs for 2018 Folding Headstrap Earloop Welding Machine , Folding Headstrap Earloop Welding Machine , 3D Folding Headstrap Earloop Welding Machine , We now have a expert team for international trade. We are able to solve the problem you meet. We could supply the items you want. Please truly feel free of charge to get in touch with us.
"Our personnel are generally within the spirit of ""continuous improvement and excellence"", and using the excellent top quality goods, favorable rate and superior after-sales expert services, we try to win every customer's believe in for 2018 Folding Headstrap Earloop Welding Machine , Folding Headstrap Earloop Welding Machine , 3D Folding Headstrap Earloop Welding Machine , We are confident to make great achievements in the future. We are looking forward to becoming one of your most reliable suppliers.