text:
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.

/*
 * Class DebuggerTree
 * @author Jeka
 */
package com.intellij.debugger.ui.impl.watch;

import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.DebuggerInvocationUtil;
import com.intellij.debugger.engine.DebugProcessImpl;
import com.intellij.debugger.engine.DebuggerUtils;
import com.intellij.debugger.engine.SuspendContextImpl;
import com.intellij.debugger.engine.evaluation.EvaluateException;
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
import com.intellij.debugger.engine.events.DebuggerCommandImpl;
import com.intellij.debugger.engine.events.DebuggerContextCommandImpl;
import com.intellij.debugger.engine.events.SuspendContextCommandImpl;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.impl.PrioritizedTask;
import com.intellij.debugger.jdi.*;
import com.intellij.debugger.settings.NodeRendererSettings;
import com.intellij.debugger.settings.ThreadsViewSettings;
import com.intellij.debugger.ui.breakpoints.Breakpoint;
import com.intellij.debugger.ui.impl.DebuggerTreeBase;
import com.intellij.debugger.ui.impl.tree.TreeBuilder;
import com.intellij.debugger.ui.impl.tree.TreeBuilderNode;
import com.intellij.debugger.ui.tree.DebuggerTreeNode;
import com.intellij.debugger.ui.tree.NodeDescriptor;
import com.intellij.debugger.ui.tree.render.ArrayRenderer;
import com.intellij.debugger.ui.tree.render.ChildrenBuilder;
import com.intellij.debugger.ui.tree.render.ClassRenderer;
import com.intellij.debugger.ui.tree.render.NodeRenderer;
import com.intellij.openapi.actionSystem.DataKey;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.SimpleTextAttributes;
import com.intellij.ui.SpeedSearchComparator;
import com.intellij.ui.TreeSpeedSearch;
import com.intellij.xdebugger.frame.XDebuggerTreeNodeHyperlink;
import com.intellij.xdebugger.frame.XValueChildrenList;
import com.intellij.xdebugger.settings.XDebuggerSettingsManager;
import com.sun.jdi.*;
import com.sun.jdi.event.Event;
import com.sun.jdi.event.ExceptionEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;

public abstract class DebuggerTree extends DebuggerTreeBase implements DataProvider {
  private static final Logger LOG = Logger.getInstance(DebuggerTree.class);
  protected static final Key<Rectangle> VISIBLE_RECT = Key.create("VISIBLE_RECT");

  public static final DataKey<DebuggerTree> DATA_KEY = DataKey.create("DebuggerTree");

  protected final NodeManagerImpl myNodeManager;

  private DebuggerContextImpl myDebuggerContext = DebuggerContextImpl.EMPTY_CONTEXT;

  private DebuggerTreeNodeImpl myEditedNode;

  public DebuggerTree(Project project) {
    super(null, project);
    setScrollsOnExpand(false);
    myNodeManager = createNodeManager(project);

    final TreeBuilder model = new TreeBuilder(this) {
      @Override
      public void buildChildren(TreeBuilderNode node) {
        final DebuggerTreeNodeImpl debuggerTreeNode = (DebuggerTreeNodeImpl)node;
        if (debuggerTreeNode.getDescriptor() instanceof DefaultNodeDescriptor) {
          return;
        }
        buildNode(debuggerTreeNode);
      }

      @Override
      public boolean isExpandable(TreeBuilderNode builderNode) {
        return DebuggerTree.this.isExpandable((DebuggerTreeNodeImpl)builderNode);
      }
    };
    model.setRoot(getNodeFactory().getDefaultNode());
    model.addTreeModelListener(new TreeModelListener() {
      @Override
      public void treeNodesChanged(TreeModelEvent event) {
        hideTooltip();
      }

      @Override
      public void treeNodesInserted(TreeModelEvent event) {
        hideTooltip();
      }

      @Override
      public void treeNodesRemoved(TreeModelEvent event) {
        hideTooltip();
      }

      @Override
      public void treeStructureChanged(TreeModelEvent event) {
        hideTooltip();
      }
    });

    setModel(model);

    final TreeSpeedSearch search = new TreeSpeedSearch(this);
    search.setComparator(new SpeedSearchComparator(false));
  }

  protected NodeManagerImpl createNodeManager(Project project) {
    return new NodeManagerImpl(project, this);
  }

  @Override
  public void dispose() {
    myNodeManager.dispose();
    myDebuggerContext = DebuggerContextImpl.EMPTY_CONTEXT;
    super.dispose();
  }

  protected boolean isExpandable(DebuggerTreeNodeImpl node) {
    NodeDescriptorImpl descriptor = node.getDescriptor();
    return descriptor.isExpandable();
  }

  @Override
  public Object getData(@NotNull String dataId) {
    if (DATA_KEY.is(dataId)) {
      return this;
    }
    return null;
  }

  private void buildNode(final DebuggerTreeNodeImpl node) {
    if (node == null || node.getDescriptor() == null) {
      return;
    }
    final DebugProcessImpl debugProcess = getDebuggerContext().getDebugProcess();
    if (debugProcess != null) {
      DebuggerCommandImpl command = getBuildNodeCommand(node);
      if (command != null) {
        node.add(myNodeManager.createMessageNode(MessageDescriptor.EVALUATING));
        debugProcess.getManagerThread().schedule(command);
      }
    }
  }

  // todo: convert "if" into instance method call
  protected DebuggerCommandImpl getBuildNodeCommand(final DebuggerTreeNodeImpl node) {
    if (node.getDescriptor() instanceof StackFrameDescriptorImpl) {
      return new BuildStackFrameCommand(node);
    }
    else if (node.getDescriptor() instanceof ValueDescriptorImpl) {
      return new BuildValueNodeCommand(node);
    }
    else if (node.getDescriptor() instanceof StaticDescriptorImpl) {
      return new BuildStaticNodeCommand(node);
    }
    else if (node.getDescriptor() instanceof ThreadDescriptorImpl) {
      return new BuildThreadCommand(node);
    }
    else if (node.getDescriptor() instanceof ThreadGroupDescriptorImpl) {
      return new BuildThreadGroupCommand(node);
    }
    LOG.assertTrue(false);
    return null;
  }

  public void saveState(DebuggerTreeNodeImpl node) {
    if (node.getDescriptor() != null) {
      TreePath path = new TreePath(node.getPath());
      node.getDescriptor().myIsExpanded = isExpanded(path);
      node.getDescriptor().myIsSelected = getSelectionModel().isPathSelected(path);
      Rectangle rowBounds = getRowBounds(getRowForPath(path));
      if (rowBounds != null && getVisibleRect().contains(rowBounds)) {
        node.getDescriptor().putUserData(VISIBLE_RECT, getVisibleRect());
        node.getDescriptor().myIsVisible = true;
      }
      else {
        node.getDescriptor().putUserData(VISIBLE_RECT, null);
        node.getDescriptor().myIsVisible = false;
      }
    }

    for (Enumeration e = node.rawChildren(); e.hasMoreElements();) {
      DebuggerTreeNodeImpl child = (DebuggerTreeNodeImpl)e.nextElement();
      saveState(child);
    }
  }

  public void restoreState(DebuggerTreeNodeImpl node) {
    restoreStateImpl(node);
    scrollToVisible(node);
  }

  protected final void scrollToVisible(DebuggerTreeNodeImpl scopeNode) {
    final TreePath rootPath = new TreePath(scopeNode.getPath());
    final int rowCount = getRowCount();
    for (int idx = rowCount - 1; idx >= 0; idx--) {
      final TreePath treePath = getPathForRow(idx);
      if (treePath != null) {
        if (!rootPath.isDescendant(treePath)) {
          continue;
        }
        final DebuggerTreeNodeImpl pathNode = (DebuggerTreeNodeImpl)treePath.getLastPathComponent();
        final NodeDescriptorImpl descriptor = pathNode.getDescriptor();

        if (descriptor != null && descriptor.myIsVisible) {
          final Rectangle visibleRect = descriptor.getUserData(VISIBLE_RECT);
          if (visibleRect != null) {
            // prefer visible rect
            scrollRectToVisible(visibleRect);
          }
          else {
            scrollPathToVisible(treePath);
          }
          break;
        }
      }
    }
  }

  @Override
  public void scrollRectToVisible(Rectangle aRect) {
    // see IDEADEV-432
    aRect.width += aRect.x;
    aRect.x = 0;
    super.scrollRectToVisible(aRect);
  }

  private void restoreStateImpl(DebuggerTreeNodeImpl node) {
    restoreNodeState(node);
    if (node.getDescriptor().myIsExpanded) {
      for (Enumeration e = node.rawChildren(); e.hasMoreElements();) {
        DebuggerTreeNodeImpl child = (DebuggerTreeNodeImpl)e.nextElement();
        restoreStateImpl(child);
      }
    }
  }

  public void restoreState() {
    clearSelection();
    DebuggerTreeNodeImpl root = (DebuggerTreeNodeImpl)getModel().getRoot();
    if (root != null) {
      restoreState(root);
    }
  }

  protected void restoreNodeState(DebuggerTreeNodeImpl node) {
    final NodeDescriptorImpl descriptor = node.getDescriptor();
    if (descriptor != null) {
      if (node.getParent() == null) {
        descriptor.myIsExpanded = true;
      }

      TreePath path = new TreePath(node.getPath());
      if (descriptor.myIsExpanded) {
        expandPath(path);
      }
      if (descriptor.myIsSelected) {
        addSelectionPath(path);
      }
    }
  }

  public NodeManagerImpl getNodeFactory() {
    return myNodeManager;
  }

  public TreeBuilder getMutableModel() {
    return (TreeBuilder)getModel();
  }

  public void removeAllChildren() {
    DebuggerTreeNodeImpl root = (DebuggerTreeNodeImpl)getModel().getRoot();
    root.removeAllChildren();
    treeChanged();
  }

  public void showMessage(MessageDescriptor messageDesc) {
    DebuggerTreeNodeImpl root = getNodeFactory().getDefaultNode();
    getMutableModel().setRoot(root);
    DebuggerTreeNodeImpl message = root.add(messageDesc);
    treeChanged();
    expandPath(new TreePath(message.getPath()));
  }

  public void showMessage(String messageText) {
    showMessage(new MessageDescriptor(messageText));
  }

  public final void treeChanged() {
    DebuggerTreeNodeImpl node = (DebuggerTreeNodeImpl)getModel().getRoot();
    if (node != null) {
      getMutableModel().nodeStructureChanged(node);
      restoreState();
    }
  }

  protected abstract void build(DebuggerContextImpl context);

  public void rebuild(final DebuggerContextImpl context) {
    ApplicationManager.getApplication().assertIsDispatchThread();
    final DebugProcessImpl process = context.getDebugProcess();
    if (process == null) {
      return; // empty context, no process available yet
    }
    myDebuggerContext = context;
    saveState();
    process.getManagerThread().schedule(PrioritizedTask.Priority.NORMAL, () -> getNodeFactory().setHistoryByContext(context));
    build(context);
  }

  public void saveState() {
    saveState((DebuggerTreeNodeImpl)getModel().getRoot());
  }

  public void onEditorShown(DebuggerTreeNodeImpl node) {
    myEditedNode = node;
    hideTooltip();
  }

  public void onEditorHidden(DebuggerTreeNodeImpl node) {
    if (myEditedNode != null) {
      assert myEditedNode == node;
      myEditedNode = null;
    }
  }

  @Override
  public JComponent createToolTip(MouseEvent e) {
    return myEditedNode != null ? null : super.createToolTip(e);
  }

  protected abstract static class RefreshDebuggerTreeCommand extends SuspendContextCommandImpl {
    private final DebuggerContextImpl myDebuggerContext;

    @Override
    public Priority getPriority() {
      return Priority.NORMAL;
    }

    public RefreshDebuggerTreeCommand(DebuggerContextImpl context) {
      super(context.getSuspendContext());
      myDebuggerContext = context;
    }

    public final DebuggerContextImpl getDebuggerContext() {
      return myDebuggerContext;
    }
  }

  public DebuggerContextImpl getDebuggerContext() {
    return myDebuggerContext;
  }

  public abstract class BuildNodeCommand extends DebuggerContextCommandImpl {
    private final DebuggerTreeNodeImpl myNode;

    protected final List<DebuggerTreeNodeImpl> myChildren = new LinkedList<>();

    protected BuildNodeCommand(DebuggerTreeNodeImpl node) {
      this(node, null);
    }

    protected BuildNodeCommand(DebuggerTreeNodeImpl node, ThreadReferenceProxyImpl thread) {
      super(DebuggerTree.this.getDebuggerContext(), thread);
      myNode = node;
    }

    @Override
    public Priority getPriority() {
      return Priority.NORMAL;
    }

    public DebuggerTreeNodeImpl getNode() {
      return myNode;
    }

    protected void updateUI(final boolean scrollToVisible) {
      DebuggerInvocationUtil.swingInvokeLater(getProject(), () -> {
        myNode.removeAllChildren();
        for (DebuggerTreeNodeImpl debuggerTreeNode : myChildren) {
          myNode.add(debuggerTreeNode);
        }
        myNode.childrenChanged(scrollToVisible);
      });
    }
  }

  protected class BuildStackFrameCommand extends BuildNodeCommand {
    public BuildStackFrameCommand(DebuggerTreeNodeImpl stackNode) {
      super(stackNode);
    }

    @Override
    public void threadAction() {
      try {
        final StackFrameDescriptorImpl stackDescriptor = (StackFrameDescriptorImpl)getNode().getDescriptor();
        final StackFrameProxyImpl frame = stackDescriptor.getFrameProxy();

        final DebuggerContextImpl debuggerContext = getDebuggerContext();
        final EvaluationContextImpl evaluationContext = debuggerContext.createEvaluationContext();
        if (!debuggerContext.isEvaluationPossible()) {
          myChildren.add(myNodeManager.createNode(MessageDescriptor.EVALUATION_NOT_POSSIBLE, evaluationContext));
        }

        final Location location = frame.location();
        LOG.assertTrue(location != null);

        final ObjectReference thisObjectReference = frame.thisObject();
        final NodeDescriptor descriptor;
        if (thisObjectReference != null) {
          descriptor = myNodeManager.getThisDescriptor(stackDescriptor, thisObjectReference);
        }
        else {
          descriptor = myNodeManager.getStaticDescriptor(stackDescriptor, location.method().declaringType());
        }
        myChildren.add(myNodeManager.createNode(descriptor, evaluationContext));

        final ClassRenderer classRenderer = NodeRendererSettings.getInstance().getClassRenderer();
        if (classRenderer.SHOW_VAL_FIELDS_AS_LOCAL_VARIABLES) {
          if (thisObjectReference != null && evaluationContext.getDebugProcess().getVirtualMachineProxy().canGetSyntheticAttribute())  {
            final ReferenceType thisRefType = thisObjectReference.referenceType();
            if (thisRefType instanceof ClassType && thisRefType.equals(location.declaringType()) && thisRefType.name().contains("$")) { // makes sense for nested classes only
              final ClassType clsType = (ClassType)thisRefType;
              for (Field field : clsType.fields()) {
                if (DebuggerUtils.isSynthetic(field) && StringUtil.startsWith(field.name(), FieldDescriptorImpl.OUTER_LOCAL_VAR_FIELD_PREFIX)) {
                  final FieldDescriptorImpl fieldDescriptor = myNodeManager.getFieldDescriptor(stackDescriptor, thisObjectReference, field);
                  myChildren.add(myNodeManager.createNode(fieldDescriptor, evaluationContext));
                }
              }
            }
          }
        }

        try {
          buildVariables(stackDescriptor, evaluationContext);
          if (XDebuggerSettingsManager.getInstance().getDataViewSettings().isSortValues()) {
            myChildren.sort(NodeManagerImpl.getNodeComparator());
          }
        }
        catch (EvaluateException e) {
          myChildren.add(myNodeManager.createMessageNode(new MessageDescriptor(e.getMessage())));
        }
        // add last method return value if any
        final Pair<Method, Value> methodValuePair = debuggerContext.getDebugProcess().getLastExecutedMethod();
        if (methodValuePair != null) {
          ValueDescriptorImpl returnValueDescriptor = myNodeManager.getMethodReturnValueDescriptor(stackDescriptor, methodValuePair.getFirst(), methodValuePair.getSecond());
          myChildren.add(1, myNodeManager.createNode(returnValueDescriptor, evaluationContext));
        }
        // add context exceptions
        for (Pair<Breakpoint, Event> pair : DebuggerUtilsEx.getEventDescriptors(getSuspendContext())) {
          final Event debugEvent = pair.getSecond();
          if (debugEvent instanceof ExceptionEvent) {
            final ObjectReference exception = ((ExceptionEvent)debugEvent).exception();
            if (exception != null) {
              final ValueDescriptorImpl exceptionDescriptor = myNodeManager.getThrownExceptionObjectDescriptor(stackDescriptor, exception);
              final DebuggerTreeNodeImpl exceptionNode = myNodeManager.createNode(exceptionDescriptor, evaluationContext);
              myChildren.add(1, exceptionNode);
            }
          }
        }

      }
      catch (EvaluateException e) {
        myChildren.clear();
        myChildren.add(myNodeManager.createMessageNode(new MessageDescriptor(e.getMessage())));
      }
      catch (InvalidStackFrameException e) {
        LOG.info(e);
        myChildren.clear();
        notifyCancelled();
      }
      catch (InternalException e) {
        if (e.errorCode() == JvmtiError.INVALID_SLOT) {
          myChildren.add(
            myNodeManager.createMessageNode(new MessageDescriptor(DebuggerBundle.message("error.corrupt.debug.info", e.getMessage()))));
        }
        else {
          throw e;
        }
      }

      updateUI(true);
    }

    protected void buildVariables(final StackFrameDescriptorImpl stackDescriptor, final EvaluationContextImpl evaluationContext) throws EvaluateException {
      final StackFrameProxyImpl frame = stackDescriptor.getFrameProxy();
      for (final LocalVariableProxyImpl local : frame.visibleVariables()) {
        final LocalVariableDescriptorImpl localVariableDescriptor = myNodeManager.getLocalVariableDescriptor(stackDescriptor, local);
        final DebuggerTreeNodeImpl variableNode = myNodeManager.createNode(localVariableDescriptor, evaluationContext);
        myChildren.add(variableNode);
      }
    }
  }

  private class BuildValueNodeCommand extends BuildNodeCommand implements ChildrenBuilder {
    BuildValueNodeCommand(DebuggerTreeNodeImpl node) {
      super(node);
    }

    @Override
    public void threadAction(@NotNull SuspendContextImpl suspendContext) {
      final DebuggerTreeNodeImpl node = getNode();
      ValueDescriptorImpl descriptor = (ValueDescriptorImpl)node.getDescriptor();
      try {
        final NodeRenderer renderer = descriptor.getRenderer(suspendContext.getDebugProcess());
        renderer.buildChildren(descriptor.getValue(), this, getDebuggerContext().createEvaluationContext());
      }
      catch (ObjectCollectedException e) {
        final String message = e.getMessage();
        DebuggerInvocationUtil.swingInvokeLater(getProject(), () -> {
          node.removeAllChildren();
          node.add(getNodeFactory().createMessageNode(
            new MessageDescriptor(DebuggerBundle.message("error.cannot.build.node.children.object.collected", message)))
          );
          node.childrenChanged(false);
        });
      }
    }

    @Override
    public NodeManagerImpl getNodeManager() {

      return myNodeManager;
    }

    @Override
    public NodeManagerImpl getDescriptorManager() {
      return myNodeManager;
    }

    @Override
    public ValueDescriptorImpl getParentDescriptor() {
      return (ValueDescriptorImpl)getNode().getDescriptor();
    }

    @Override
    public void initChildrenArrayRenderer(ArrayRenderer renderer, int arrayLength) {}

    @Override
    public void setChildren(final List<DebuggerTreeNode> children) {
      for (DebuggerTreeNode child : children) {
        if (child instanceof DebuggerTreeNodeImpl) {
          myChildren.add(((DebuggerTreeNodeImpl)child));
        }
      }
      updateUI(false);
    }

    @Override
    public void addChildren(@NotNull XValueChildrenList children, boolean last) {
    }

    @Override
    public void tooManyChildren(int remaining) {
    }

    @Override
    public void setAlreadySorted(boolean alreadySorted) {
    }

    @Override
    public void setErrorMessage(@NotNull String errorMessage) {
    }

    @Override
    public void setErrorMessage(@NotNull String errorMessage, @Nullable XDebuggerTreeNodeHyperlink link) {
    }

    @Override
    public void setMessage(@NotNull String message,
                           @Nullable Icon icon,
                           @NotNull SimpleTextAttributes attributes,
                           @Nullable XDebuggerTreeNodeHyperlink link) {
    }
  }

  private class BuildStaticNodeCommand extends BuildNodeCommand {
    BuildStaticNodeCommand(DebuggerTreeNodeImpl node) {
      super(node);
    }

    @Override
    public void threadAction() {
      final StaticDescriptorImpl sd = (StaticDescriptorImpl)getNode().getDescriptor();
      final ReferenceType refType = sd.getType();
      List<Field> fields = refType.allFields();
      for (Field field : fields) {
        if (field.isStatic()) {
          final FieldDescriptorImpl fieldDescriptor = myNodeManager.getFieldDescriptor(sd, null, field);
          final EvaluationContextImpl evaluationContext = getDebuggerContext().createEvaluationContext();
          final DebuggerTreeNodeImpl node = myNodeManager.createNode(fieldDescriptor, evaluationContext);
          myChildren.add(node);
        }
      }

      updateUI(true);
    }
  }

  private class BuildThreadCommand extends BuildNodeCommand {
    BuildThreadCommand(DebuggerTreeNodeImpl threadNode) {
      super(threadNode, ((ThreadDescriptorImpl)threadNode.getDescriptor()).getThreadReference());
    }

    @Override
    public void threadAction() {
      ThreadDescriptorImpl threadDescriptor = ((ThreadDescriptorImpl)getNode().getDescriptor());
      ThreadReferenceProxyImpl threadProxy = threadDescriptor.getThreadReference();
      if (!threadProxy.isCollected() && getDebuggerContext().getDebugProcess().getSuspendManager().isSuspended(threadProxy)) {
        int status = threadProxy.status();
        if (!(status == ThreadReference.THREAD_STATUS_UNKNOWN) &&
            !(status == ThreadReference.THREAD_STATUS_NOT_STARTED) &&
            !(status == ThreadReference.THREAD_STATUS_ZOMBIE)) {
          try {
            for (StackFrameProxyImpl stackFrame : threadProxy.frames()) {
              //Method method = stackFrame.location().method();
              //ToDo :check whether is synthetic if (shouldDisplay(method)) {
              myChildren.add(myNodeManager.createNode(myNodeManager.getStackFrameDescriptor(threadDescriptor, stackFrame),
                                                      getDebuggerContext().createEvaluationContext()));
            }
          }
          catch (EvaluateException e) {
            myChildren.clear();
            myChildren.add(myNodeManager.createMessageNode(e.getMessage()));
            LOG.debug(e);
            //LOG.assertTrue(false);
            // if we pause during evaluation of this method the exception is thrown
            //  private static void longMethod(){
            //    try {
            //      Thread.sleep(100000);
            //    } catch (InterruptedException e) {
            //      e.printStackTrace();
            //    }
            //  }
          }
        }
      }
      updateUI(true);
    }
  }

  private class BuildThreadGroupCommand extends DebuggerCommandImpl {
    private final DebuggerTreeNodeImpl myNode;
    protected final List<DebuggerTreeNodeImpl> myChildren = new LinkedList<>();

    BuildThreadGroupCommand(DebuggerTreeNodeImpl node) {
      myNode = node;
    }

    @Override
    protected void action() {
      ThreadGroupDescriptorImpl groupDescriptor = (ThreadGroupDescriptorImpl)myNode.getDescriptor();
      ThreadGroupReferenceProxyImpl threadGroup = groupDescriptor.getThreadGroupReference();

      List<ThreadReferenceProxyImpl> threads = new ArrayList<>(threadGroup.threads());
      threads.sort(ThreadReferenceProxyImpl.ourComparator);

      final DebuggerContextImpl debuggerContext = getDebuggerContext();
      final SuspendContextImpl suspendContext = debuggerContext.getSuspendContext();
      final EvaluationContextImpl evaluationContext = suspendContext != null && !suspendContext.isResumed()? debuggerContext.createEvaluationContext() : null;

      boolean showCurrent = ThreadsViewSettings.getInstance().SHOW_CURRENT_THREAD;

      for (final ThreadGroupReferenceProxyImpl group : threadGroup.threadGroups()) {
        if (group != null) {
          DebuggerTreeNodeImpl threadNode =
            myNodeManager.createNode(myNodeManager.getThreadGroupDescriptor(groupDescriptor, group), evaluationContext);

          if (showCurrent && ((ThreadGroupDescriptorImpl)threadNode.getDescriptor()).isCurrent()) {
            myChildren.add(0, threadNode);
          }
          else {
            myChildren.add(threadNode);
          }
        }
      }

      ArrayList<DebuggerTreeNodeImpl> threadNodes = new ArrayList<>();

      for (ThreadReferenceProxyImpl thread : threads) {
        if (thread != null) {
          final DebuggerTreeNodeImpl threadNode = myNodeManager.createNode(myNodeManager.getThreadDescriptor(groupDescriptor, thread), evaluationContext);
          if (showCurrent && ((ThreadDescriptorImpl)threadNode.getDescriptor()).isCurrent()) {
            threadNodes.add(0, threadNode);
          }
          else {
            threadNodes.add(threadNode);
          }
        }
      }

      myChildren.addAll(threadNodes);

      updateUI(true);
    }

    protected void updateUI(final boolean scrollToVisible) {
      DebuggerInvocationUtil.swingInvokeLater(getProject(), () -> {
        myNode.removeAllChildren();
        for (DebuggerTreeNodeImpl debuggerTreeNode : myChildren) {
          myNode.add(debuggerTreeNode);
        }
        myNode.childrenChanged(scrollToVisible);
      });
    }
  }

  public void hideTooltip() {
    myTipManager.hideTooltip();
  }
}


In RCTs, no differences in the frequency of adverse outcomes in women who received Tdap in pregnancy and women who received placebo 0.
In the UK, an analysis of CPRD active surveillance system data in the first six months of national program implementation found stillbirth rates in women immunized with Tdap in pregnancy to be similar to the estimated national stillbirth rate.
Bigham M. Although no major safety issues have been detected in the reviewed literature, it should be noted that none of the reviewed studies were sufficiently powered to detect small risk differences. According to the national survey on adult immunization Reference 34 all adults 18 years of age and older , only 9. Reference 60 Reference 61 Reference 62 One study also found increased efficiency of placental antibody transfer in mothers who were immunized with Tdap compared to those who did not receive the vaccine in pregnancy.
Administer MMR vaccine to infants aged 6 through 11 months who are traveling internationally. This vaccine is aimed at inducing active immunity in children against diphtheria, tetanus and whooping cough pertussis. Transmission of Bordetella pertussis to young infants. Reference 49 Reference Reference 41 Reference 47 Reference 55 Reference 56 Reference 62 Reference 68 In the majority of reviewed RCTs and observational studies, statistically significant differences in antibody levels and avidity disappeared with the receipt of the booster fourth DTaP dose after 15 months of age.
Randomized clinical trial of the safety and immunogenicity of the Tdap vaccine in pregnant Mexican women. An environmental scan of international practices identified several jurisdictions where maternal Tdap immunization programs in pregnancy are currently in place.
Safety of pertussis vaccination in pregnant women in UK: These children should be revaccinated with 2 doses of MMR vaccine, the first at ages 12 through 15 months and at least 4 weeks after the previous dose, and the second at ages 4 through 6 years. Return to 9 referrer.
Those who received at least 1 dose of the —11 vaccine require 1 dose for the —12 season. The pertussis booster for adults is combined with a tetanus vaccine and diphtheria vaccine booster; this combination is abbreviated " Tdap " Tetanus, diphtheria, acellular pertussis.
The data quality study of the Canadian Discharge Abstract Database.
If the first dose is administered at age 16 years or older, a booster dose is not needed. If Tdap immunization was provided early in pregnancy e. Return to 13 referrer. Emerg Themes Epidemiol. Please note: Pertussis surveillance trends in British Columbia, Canada, over a year Period: Suspected cases of vaccine-preventable diseases should be reported to the state or local health department.
J Pediatr. Archived from the original on 29 July Alternate Text: Reference None of the cohort studies that evaluated infant outcomes without a comparator group reported adverse infant outcomes. Return to 91 referrer. Return to 86 referrer Reference 87 Wang M. Maternal immunization with tetanus-diphtheria-pertussis vaccine: Namespaces Article Talk. You will not receive a reply. Return to 2 referrer Reference 3 Brenner R.


PLEASE BE FOREWARNED that DUSTED is not an event for the light of heart. It is a social, drinking-oriented event, and you are allowing us to take you to ANY bar or club we choose. Said bar may have clothing optional, cater to a certain sexual orientation that is not your own, or be host to a large number of cougars/sugar daddies. There will be NO refunds if we offend you. Busses will leave campus (Thompson residence) at 8:30pm sharp and will not return until 1 or 2 am. (No, a bus is not coming at 11. No, a bus is not coming at 12 and you damn well better be there at 8pm if you want to come). We are not responsible for returning you to campus if you miss the bus. If you break anything at the bar, on the bus, or anywhere else, you are responsible for paying the damages. Our V.P. Services Travis Davies wants to get LAID, he likes to get down and dirty and our V.P. Phil Kim needs a date to Eng Ball. Remember to be respectful to the buses and their drivers, the bar and the bartenders.
You understand that by purchasing a ticket you are releasing the ESS and uOttawa from any and all claims for damages resulting from your attendance at this event.


text:
Bridging the unbridgeable gap
"Besides all this, between you and us a great chasm has been fixed, so that those who might want to pass from here to you cannot do so, and no one can cross from there to us."
Abraham speaks these words to a soul in hell in the famous parable of the rich man and Lazarus (Luke 16, 19-21) and they are generally understood to mean that there exists between heaven and hell a gap that's impossible to bridge. Nobody passes from hell to heaven. Hell is forever and no amount of regret or repentance there will get you to heaven. Indeed, once in hell, nobody in heaven can help you either, the gap between the two is eternally fixed!
But that's not what this parable is teaching.
Some years ago, Jean Vanier delivered the prestigious Massey Lectures and he took up this parable. The point he emphasized is that the "unbridgeable chasm" referred to here is not the gap between heaven and hell as this is understood in the popular mind. Rather, for Vanier, the unbridgeable gap exists already in this world in terms of the gap between the rich and the poor, a gap that we have forever been unable to bridge. Moreover it's a gap with more dimensions than we first imagine.
What separates the rich from the poor so definitively with a chasm that, seemingly, can never be bridged? What would bridge that gap?
The prophet Isaiah offers us a helpful image here (Isaiah 65, 25). Drawing upon a messianic dream he tells us how that gap will finally be bridged. It will be bridged, he submits, in the messianic age, when we're in heaven because it's there, in an age when God's grace is finally able to affect universal reconciliation, that the "the wolf and lamb will feed together" (or, as this is commonly read, "the lion and the lamb will lie down together").
The lion and the lamb will lie down together. But lions kill lambs! How can this change? Well, that's the unbridgeable gap between heaven and hell. That's the gap between the victim and the killer, the powerless and the powerful, the bullied and the bully, the despised and the bigot, the oppressed and the oppressor, the victim and the racist, the hated and the hater, the older brother and his prodigal brother, the poor and the rich. That's the gap between heaven and hell.
If this is what Isaiah intuits, and I think it is, then this image contains a powerful challenge which goes both ways: It isn't just the lion that needs to convert and become sensitive, understanding and non-violent enough to lie down with the lamb; the lamb too needs to convert and move to deeper levels of understanding, forgiveness and trust in order to lie down with the lion. Ironically, this may be a bigger challenge to the lamb than to the lion. Once wounded, once victimized, once hated, once spit on, once raped, once beaten-up by a bully, once discriminated against because of gender, race, religion, or sexual orientation, and it becomes very difficult, almost impossible existentially, to truly forgive, forget, and move with trust toward the one who hurt us.
This is a tough saying, but life can be grossly unfair sometimes and perhaps the greatest unfairness of all is not the injustice of being victimized, violated, raped, or murdered, but that, after all this has been done to us, we're expected to forgive the one who did it to us while at the same time knowing that the one who hurt us probably has an easier time of it in terms of letting go of the incident and moving toward reconciliation. That's perhaps the greatest unfairness of all. The lamb has to forgive the lion who killed it.
And yet this is the invitation to all of us who have ever been victimized. Parker Palmer suggests that violence is what happens when someone doesn't know what else to do with his or her suffering and that domestic abuse, racism, sexism, homophobia, and contempt for the poor are all cruel outcomes of this. What we need, he suggests, is a bigger "moral imagination."
He's right, I believe, on both scores: Violence is what happens when people don't know what to do with their sufferings and we do need a bigger moral imagination. But understanding that our abuser is in deep pain, that the bully himself was first bullied, doesn't generally do much to ease our own pain and humiliation. As well, imagining how ideally we should respond as Christians is helpful, but it doesn't of itself give us the strength to forgive. Something else is needed, namely, a strength that's presently beyond us.
This is a tough teaching, one that should not be glibly presented. How do you forgive someone who violated you? In this life, mostly, it's impossible; but remember Isaiah is speaking about the messianic time, a time when, finally, with God's help, we will be able to bridge that unbridgeable chasm.
Oblate Father Ron Rolheiser is president of the Oblate School of Theology, San Antonio, Texas.

redpajama_set_name: RedPajamaCommonCrawl


text:
Lyric Essentials: Alexandra Lytton Regalado Reads Aracelis Girmay
sundresspublications Lyric Essentials August 29, 2018 August 22, 2018
Alexandra Lytton Regalado, the author of Matria (Black Lawrence Press, 2017) read three poems by Aracelis Girmay and I was stunned. Then we got to sit down and chat and she spoke about grief, distance, transitions, her personal mantra, and the word she writes on herself.
Black: What made you choose the work of Aracelis Girmay?
Regalado: Reading Aracelis is like wading into dark water. I'm drawn to the mystery and restraint of her work. She keeps you at arm's length and I appreciate that control. When I discover a song I like, I ration it out because I don't want to fully grasp the pattern of the melody, don't want to decipher the lyrics. It's like hands are covering your eyes and you're prying open the fingers and looking through the cracks. Aracelis' poems deal with mis-seeing, or seeing partially. Declarative statements evolve in increments and that creates a sense of estrangement. She uses these slight shifts of perspective—tiny kaleidoscopic degrees, fly-vision—that relay a steady and relentless sense of seeing.
Her poems are wound tight—there is as much communicated in the blank spaces as in the words themselves. Aracelis says, "Strangeness is what troubles or opens us into discovery" and I'm trying to cultivate that strangeness in my perception. When things become everyday we take them for granted, we are buffered and numbed, and I'm trying to tap into that acute and raw sense of first experiences that makes everything boom, wow, and ah!
Aracelis presents this revelation so clearly in her poem "Second Estrangement" in two metaphors: a child lost in a crowd accidentally reaching for the hand of a stranger and a bird flying into a plate of glass. Aracelis says she carries around a quote from Brenda Shaughnessy's poem "Headlong": "Be strange to yourself, / in your love, your grief." This has been a hard year for me and I'm trying to channel into that wonder.
Black: And why these particular poems?
Regalado: I have a difficult time with transitions and this year has been wave after wave. I've been reading a lot of elegies and thinking about different ways of dealing with grief—whether we receive it with openness or resistance—in particular, I'm interested in what happens if we chose distance over vulnerability.
It says a lot about you—how you respond to pain—your threshold, and if you prefer to go through it alone or if you seek the comfort of others. Most of the time I choose the solo/distance combo—and I have a high pain threshold—and I usually get by with "Shake it off, Roll with it, Deal with it later" mantras, but sometimes I freak myself out and think: I'm going to pay for this compartmentalization, this postponement of feelings. More and more I feel I need to scare myself into my skin and say, "Hey, this is happening now," and turn my attention to the present moment.
The clock is ticking really fucking loud. I'm hitting my mid-forties so there are those middle of the night living-in-a-very-human-skin realizations, and both of my parents are having serious health issues, and my husband and I are in the woods with our three kids now entering adolescence. So, I have a stack of poetry books on my beside table and they are my routine, in-lieu-of-morning-prayer readings. Aracelis' poems resonate with me, and these, in addition to my old favorites: Rilke, Woolf, and Tom Andrew's The Hemophiliac's Motorcycle, are what's keeping me grounded.
Black: "Elegy" asks us to consider our own mortality in a way which is both prescient and immediate. This again echoes throughout "Luam and the Flies"—the sense of mortality. Can you speak to this as you see (or don't see) it in Girmay's work?
Regalado: In "Elegy" Aracelis riffs on the idea of touching, what we hold on to, and carry into our every day. How can we be like the tree that grows and makes itself "useful to the nest" and shades "the heads of something beautiful" regardless of the ongoing cycle of births and deaths? "Nothing else matters," she is urgent in her instructions: "Listen to me. I am telling you / a true thing."
The "kingdom of touching" includes all that is disappearing, our human selves and the things of this world. What floors me is Aracelis' confidence—she's totally comfortable in that unknowing, that constant flux, and there's never a need to over-explain. It's something I have to learn; I have to fight the urge to leave things resolved.
"Luam and the Flies" is about deliberately residing in that uncertainty—really digging your feet into the realization that we are not "moored to place". That's another thing that I really connect with: Aracelis' work is deeply rooted in her Afro-Latina identity, relating customs, tradition, and history in a way that is intrinsic and understood. Her poems don't say: Look at me, so ethnic & distinct! they say: Here I am, human & ready to connect. It's that searching voice that invites us: "Daily I am looking for signs / of what has lived & what is lost."
I've become obsessed with ampersands after reading her work. Also, her enjambed line breaks and her use of commas as stanza dividers, those yokes and tethers, those snapping points and lists that guide us to how we will one day become a "city of eggs", a "harvest" a "&", a "port / or harbor". She taps into our sense of mortality so quietly and subtly like those "serious games" we play with ourselves, creating gods to negotiate with, our perspectives shuttering between "You. Not you." Her poems offer that nudge and with such a slight touch.
Black: Does this work connect to your own in some way?
Regalado: When I wrote the poems included in Matria (Black Lawrence Press, 2017) my gaze was oriented outward and because I was writing in El Salvador (the murder capital of the world) mortality is front and center.
There is a saying, "Aqui no se vive, se sobrevive" and I wanted to understand what it meant to live, or in the case of many women, to survive in El Salvador. In my poem "La Sandía" I describe how I used to think of myself as just "human" but when I was giving birth to my first child it was as if a machete split me in half and I was sent "searing into my gender." I never intended to write about women's issues or social justice poems but it felt impossible to write about me, me, me when there was so much going on around me. Aracelis' work points to the direction my new work is taking. My gaze is turning inward—I can't seem to find enough time to be alone.
The new poems I'm writing are very personal and I need to gain a little more distance, grow a thicker skin before I send them out into the world.
Black: What are you working on now?
Regalado: In the air I've got lots of spinning plates: I'm writing essays, short stories, an ekphrastic poetry collaboration with Emma Trelles; I'm co-editing a soon-to-be-launched Salvadoran/Salvadoran-American online literary magazine; I'm translating and editing bilingual collections forthcoming from Kalina press (the small publishing company I co-direct in El Salvador), it's the third year I'm co-organizing an annual book fair in El Salvador, and developing art programs with the Museum of Art of El Salvador (MARTE) to promote contemporary Salvadoran artists.
That's just my working life; it's a constant juggle: mom of three, wife, daughter, sister. Just listing all that makes my shoulders ache. So, what am I really working on right now? Learning to let go! I would never get a tattoo—I have enough scars from a car accident when I was 21—but if I were to get one now it is the word Relinquenda. Latin for "relinquish", it's a word my mother introduced to me, and it seems what I need now is a constant reminder to let go. So, Relinquenda is not a tattoo, but a word I constantly write on my palm, my wrist, my fingers. It's also the working title of my new poetry manuscript.
Aracelis Girmay is the author of four books including the most recent, The Black Maria (BOA Editions, 2016). She was awarded the National Book Critics Circle Award in 2011 for her collection, Kingdom Animalia and in 2015 received the Whiting Award for poetry. Girmay received her MFA from NYU.
Alexandra Lytton Regalado's poetry collection, Matria, is the winner of the St. Lawrence Book Award (Black Lawrence Press, 2017). Her poems, stories, and non-fiction have appeared in Narrative, Gulf Coast, The Notre Dame Review, and Creative Nonfiction among others and her work has been anthologized in The Best American Poetry 2018, Misrepresented People (NYQ Books, 2018), The Wandering Song (Tia Chucha Press, 2017), and others. Co-founder of Kalina press, Alexandra is author, editor, and/or translator of more than ten Central American-themed books including Puntos de fuga / Vanishing Points: Contemporary Salvadoran Prose (2017). She is the winner of the 2015 Coniston Poetry Prize and she was the recipient of the third Letras Latinas / PINTURA PALABRA DC Ekphrastic residencies. Her ongoing photo-essay project about El Salvador, through_the_bulletproof_glass, is on Instagram. For more info visit: http://www.alexandralyttonregalado.com
Links to the good stuff:
Aracelis Girmay at the Poetry Foundation
Girmay's Website
Selected Girmay Poems at PBS
Regalado's Website
Regalado's Matria at Black Lawrence Press
Regalado's poem, La Mano at Poets.org
Anna Black received her MFA at Arizona State University and her BA at Western Washington University. She has served as the editor-in-chief of the magazines Hayden's Ferry Review and Inkspeak, and is a twice awarded Virginia G. Piper global teaching and research fellow. Her work has appeared or is forthcoming in the anthologies We Will be Shelter and In Sight: An Ekphrastic Collaboration, as well as the journals 45th Parallel, Bacopa Review, Wordgathering, the American Journal of Poetry, and New Mobility among others. Black has taught composition, creative writing, and/or publishing at Arizona State University, Western Washington University, Perryville Women's Prison, and the National University of Singapore.
sundresspublications
A 501(c)(3) nonprofit publishing company and writers residency.
Latest posts by sundresspublications (see all)
The Wardrobe's Best Dressed: For Daughters Who Walk Out Like Sons by Komal Mathew - January 26, 2023
alexandra lytton regalado
aricelis girmay
Lyric Essentials
Previous Post The Wardrobe's Best Dressed: Says the Forest to the Girl by Sally Rosen Kindred
Next Post The Wardrobe's Best Dressed: Says the Forest to the Girl by Sally Rosen Kindred


text:
Q: Hardware Router For macOS I "think" I understand that all firewalls are software. However, I am splitting the monthly internet bill with a roommate who has the ISP modem/router in his room. I would like add (if possible) more security measures. (I cannot get my own ISP in my room; as the house is designated as a "heritage house" and the landlord won't agree to any "drilling").
I have my macOS firewall turned on to "block all incoming connections". I also use Tunnel Bear VPN.
Are there any recommendations (hardware or software) available considering my situation?

A: If you want more security than what you have now, you could add a hardware based router/firewal between your roommates Internet connected network and  your "network"
What you would be doing is connecting your WAN port of your router to your roommates LAN.  This will create a "double NAT" network, where your roommate becomes your ISP.
The benefit this has over a highly configured firewall is that the router will immediately block all incoming traffic (by default) on the roommates LAN but allow you egress to the Internet.

redpajama_set_name: RedPajamaStackExchange


text:
Police presence scaled back at Ihumātao
4:45pm, Monday 29 July 2019. By Te Ao - Māori News
The number of Police officers at Ihumātao has been reduced today following assessment of the current situation at the site in South Auckland.
Superintendent Jill Rogers, Counties Manukau District Commander says, "Police remain pleased with the relaxed atmosphere and peaceful behaviour of protestors at Ihumātao. There has been no arrests on site since Wednesday."
Police will, however, remain at the site to keep the peace and for safety reasons given the number of demonstrators and supporters present. Superintendent Rogers says, "Organisers have agreed there will be no attempt to enter the area around the buildings where eviction notices were served on Tuesday 23rd July."
Rogers also says there is no current timeframe for how long police will remain at Ihumātao, however, they are continuing to closely monitor activity at the site and deploy resources as required depending on the situation.
"We welcome the constructive dialogue with protest organisers as we work together to ensure the protest remains safe and peaceful," says Rogers.
Ihumātao


Ski season is now upon us which means your skin will be facing the harsh elements of mountains, sun exposure and cold weather. Elemental Herbology's Managing Director, Lou Riby, has spent many seasons on the slopes (in the past as a chalet girl) and would love to share her beauty tips and the best products that will protect skin from the harsh elements and soothe aching muscles after a day on the slopes!
Containing SPF 12, Perfect Balance helps balance oil secretion whilst replenishing moisture levels, improving vitality and protecting against the environment. The silky smooth texture instantly absorbs so you can put your goggles on as soon as you apply.
Nutritive Lip Complex is a plumping and moisturising lip balm, absolutely essential on the slopes to prevent dry, chapped lips. Natural plant peptides help to plump lips while nourishing bio-oils hydrate and soothe.
While skiing, the sudden drop in temperature, icy winds and wearing gloves all day will lead to dry, chapped hands. Argan Oil, Rose Hip Oil, Organic Sacha Inchi Oil are all combined in our Hand Nutrition to create an intensively nourishing and moisturising complex of omega 3, 6 and 9 to soothe dry and chapped skin and reduce redness.
After an amazing day skiing you can't wait to get back out there tomorrow, but make sure you don't wake up with aching muscles by stretching after skiing and soaking in a hot bath. I recommend adding a Bath & Shower Oil from the Five Element Aromatherapy Collection to the tub. Each of the five oils will help you unwind and be ready for the next day on the slope. The Wood oils is especially effective at alleviating aching muscles…just what you need!
Also, if like to partake in a little apres ski, vin chaud and a fondue, don't forget to take our magic Detox Botanical Bath Infusion Oil to alleviate the side effects.
Finally, after a day outside it's very likely that you'll have sore feet from those frightful ski boots! I often thought that the best thing about skiing is taking them off at the end of the day!
Our Tree of Life Balm can be used on any area of the body but is especially effective when rub into sore feet. Put socks on after applying to wake up to soft and soothed feet the next day!


One of the projects that I started at Sewing Summit but wasn't able to finish as I mentioned before was Lindsey's Tote Bag with Leather Accents. I took both her classes there, a very informative lecture on sewing with leather and an actual sewing class. The sewing class, if you will recall, was at the end of all of the classes and I was wiped out. So instead of pushing through and making a sloppy bag, I took all of my cut, interfaced pieces home and sewed the bag together with leisure. I need more time when sewing bags…heck probably more time with everything. I'm not a speed sewer.
I love the fabrics I picked out for this bag. The typewriters are an epic print by Melody Miller (good luck finding any! they are out of print), the fuchsia print is called Domino Dot by Violet Craft and is just released, and the interior is an older Little Lisette print by Liesel Gibson for Joanns (you can find it still in other colorways). And then there is the leather… yum.
I added a couple of simple extra pockets to the interior, but opted not to include the magnetic snap closure because those don't really work well for me. They seem overly strong. The bag itself is a fairly simple sew, once you figure out the mechanics of sewing those leather parts. I personally split my sewing time into bag prep, leather sewing, and then final bag construction. Like I said, I'm not a fast sewer and I was a bit nervous about tackling this new unknown, leather.
But let me tell you…I am SOLD. Leather accents add such a quality professional touch to a bag. And Lindsey is making it super easy for those of us who don't want to brave our local tannery to get some fabulous leather. She's opened a shop to sell leather kits (or I'm sure whatever you need) and there are great colors (even metallic!! must get that!). Oh and she also has the pattern for this particular tote for sale as well (or you can find it on craftsy).
I love when something unique like this hits my little world of quilting cottons and my eyes are opened. I feel like I have a whole new option of patterns and designs available now with this new technique.
Wow! Your bag looks fabulous!!
I love the bag you made! The typewriter and leather accents are wonderful.
It has turned out beautifully…and I do think I recall seeing you with a bundle of the Alison Glass prints in your hands!! Perfect match for the typewriter.
I love this! You're right, those leather bits really add a lot. I also love how it matches your shoes! Your photos are always so well thought out. Great work!
You did a great job with this from the fabric selections to the construction. It's lovely.
Love. this. bag. Looks super sharp.
P.S. I got typewriters to last me a while. It's the Domino Dots I don't have, and I want them, waaaaah.
That s a stunning tote!!
Ummm, how WOW is this??!! YAY! And with those shoes??? Perfection.
your bag finished up beautifully and I just love your fabric choices.
So pretty! That sounds like a useful class for sure. Do you think you'll be teaching again next year?
This bag looks fantastic, Angela — great prints and I love the leather accents. I will definitely have to check out that shop!
Absolutely beautiful!! I'm pinning it!! I need to have one of my own :). Great use for the typewriter fabric I've been hoarding.
Love how this turned out, I bet you'll be making loads of people jealous when you take it out!


Non-member pricing shown. Save $5.00 on BetterInvesting handbooks by becoming a BetterInvesting member — just $8.95/month or $100.00/year. Join Now.
An award-winning, market-beating stock investment newsletter that can help you build a more successful stock portfolio. For the last seven years in a row the Investor Advisory Service was named to the Investment Newsletter Honor Roll by Hulbert Financial Digest for outstanding performance over the long term in both up and down markets.
Visit http://www.iclub.com/ias/ for a free sample issue or to get more information, or call 1-877-33-ICLUB.
Visit http://www.smallcapinformer.com for a free sample issue or to get more information.
The BetterInvesting Stock Selection Guide Handbook presents our common-sense approach and practical, unbiased guidance designed to help investors identify, analyze and select quality growth stocks. This 2016 edition is available as an e-book or PDF.
If you have already purchased this book, please proceed to My Downloads.
The revised edition of this manual will help you start a club, operate orderly meetings, understand club accounting concepts and start investing as a club. This edition, revised in 2014, is available as an e-book or PDF.
Learn the fundamentals of mutual fund investing using BetterInvesting's online tools to select, compare and monitor stock and bond mutual funds and ETFs. This edition, revised in 2012, is available as an e-book or PDF.
Who says you have to be a professional, or consult one, to consistently earn money in the stock market? Ellis Traub's Take Stock tells you exactly how a "normal person" like you -- regardless of education or experience -- can invest successfully. Designed for beginners but beneficial to all fundamental long term investors, Take Stock is an important addition to your investing library.
An inspiring story of how Tom O'Hara, George Nicholson, Ken Janke and many others organized the foundation that launched the National Association of Investors Corporation. This book details the life of Tom O'Hara and the steps he took to realize his dream to build a nation of individual investors.
Provides a solid foundation for setting personal and financial goals, saving and investing. A great learning experience for any beginning investor.
Learn how BetterInvesting's powerful portfolio tools and techniques can help you organize, track and manage a winning stock portfolio.
Discover the benefits of electronic investing using this how-to guide to BetterInvesting online investment software and other financial tools.


Benalla P-12 College, established in January 2013, is a merger of four schools: Benalla PS, Benalla West PS, Benalla East PS and Benalla College.
Benalla P-12 College will inspire and support students to achieve their full potential within a learning environment that is engaging, safe, positive, respectful, inclusive and welcoming.
Providing a personalised, student-centred approach to teaching and learning.
Promoting academic excellence through high quality classroom instruction.
Creating a respectful school environment that recognises and celebrates diversity.
Promoting creativity, teamwork and leadership through a diverse range of learning opportunities.


text:
Hialeah ( ; ) is a city in Miami-Dade County, Florida, United States. With a population of 223,109 as of the 2020 census, Hialeah is the sixth-largest city in Florida. It is the second largest city by population in the Miami metropolitan area, which was home to an estimated 6,198,782 people at the 2018 census. It is located west-northwest of Miami, and is one of a few places in the county—others being Homestead, Miami Beach, Surfside, Bal Harbour, Sunny Isles Beach, and Golden Beach—to have its own street grid numbered separately from the rest of the county (which is otherwise based on Miami Avenue at Flagler Street in Downtown Miami, the county seat).

The city is notable for its high Hispanic proportion, which at 94.0%, is the second-highest proportion of Hispanic Americans out of any community in the United States outside of Puerto Rico, and the highest proportion among incorporated communities outside of Puerto Rico. Hialeah also has the highest percentage of Cuban and Cuban American residents of any city in the United States, at 73.37% of the population, making them a typical and prominent feature of the city's culture.

Hialeah also has one of the largest Spanish-speaking communities in the country. In 2016, 96.3% of residents reported speaking Spanish at home, and the language is an important part of daily life in the city.

Hialeah is served by the Miami Metrorail at Okeechobee, Hialeah, and Tri-Rail/Metrorail Transfer stations. The Okeechobee and Hialeah stations serve primarily as park-and-ride commuter stations to commuters and residents going into Downtown Miami, and Tri-Rail station to Miami International Airport and north to West Palm Beach.

History

The city's name is most commonly attributed to Muskogee origin, "Haiyakpo" (prairie) and "hili" (pretty) combining in "Hialeah" to mean "pretty prairie". Alternatively, the word is of Seminole origin meaning "Upland Prairie". The city is located upon a large prairie between Biscayne Bay and the Everglades.

This "high prairie" caught the eye of pioneer aviator Glenn Curtiss and Missouri cattleman James H. Bright in 1921. Together, they developed not only the town of Hialeah but also Hialeah Park Race Track. In 1921, the first plat was drawn up, and the town was named.

In the early "Roaring '20s", Hialeah produced significant entertainment contributions. Sporting included the Spanish sport of jai alai and greyhound racing, and media included silent movies like D.W. Griffith's The White Rose which was made at the Miami Movie Studios located in Hialeah. However, the 1926 Miami hurricane brought many of these activities to an end.

In the years since its incorporation in 1925, many historical events and people have been associated with Hialeah. The opening of the horse racing course at Hialeah Park Race Track in 1925 (which was nicknamed the "Grand Dame") received more coverage in the Miami media than any other sporting event in the history of Dade County up to that time and since then there have been countless horse racing histories played out at the world-famous  park. It was considered one of the most grand thoroughbred horse racing parks with its majestic Mediterranean style architecture and was considered the Jewel of Hialeah at the time.

The park's grandeur has attracted millions, included among them are names known around the world such as the Kennedy family, Harry Truman, General Omar Bradley, Winston Churchill, and J.P. Morgan. The Hialeah Park Race Track also holds the dual distinction of being an Audubon Bird Sanctuary due to its famous pink flamingos and being listed on the National Register of Historic Places. The famous aviator Amelia Earhart in 1937 said her final good-byes to the continental U.S. from Hialeah as she left on her ill-fated flight around the world in 1937.

While Hialeah was once envisioned as a playground for the elite, Cuban exiles fleeing Fidel Castro's 1959 revolution, as well as World War II veterans and city planners, transformed the city into a working-class community. Hialeah historian Patricia Fernández-Kelly explained, "It became an affordable Eden." She further describes the city as "a place where different groups have left their imprint while trying to create a sample of what life should be like." Several waves of Cuban exiles, starting after the Cuban Revolution in 1959 and continuing through to the Freedom Flights from 1965 to 1973, the Mariel boatlift in 1980, and the Balseros or boat people of the late 1990s, created what at least one expert has considered the most economically successful immigrant enclave in U.S. history as Hialeah is the only American industrial city that continues to grow.

From a population of 1,500 in 1925, Hialeah has grown faster than most of the 10 larger cities in the state of Florida since the 1960s and holds the rank of Florida's fifth-largest city, with more than 224,000 residents. The city is also one of the largest employers in Dade County.

In January 2009, Forbes magazine listed Hialeah as one of the most boring cities in the United States, citing the city's large population and anonymity in the national media.

Geography

Hialeah is located at  (25.860474, –80.293971).

According to the United States Census Bureau, the city has a total area of .   of it is land and  of it (2.53%) is water.

Climate

According to the Köppen climate classification, Hialeah as a tropical monsoon climate (Am).

Surrounding areas
  Unincorporated Miami-Dade County, Miami Lakes, Opa-locka
  Unincorporated Miami-Dade County    Westview
 Hialeah Gardens, Medley, Miami Springs   Westview, West Little River, Gladeview, Brownsville, Miami
  Miami Springs    Miami
  Hialeah Gardens, Medley, Miami Springs

Demographics

2020 census
As of the 2020 United States census, there were 223,109 people, 75,989 households, and 54,646 families residing in the city.

In this census, the majority of people (about 58%) reported they were of mixed race.  For those who reported only a single race for themselves:

 White alone: 61,023, 66% of those reporting one race and 27% of all respondents
 Blacks or African American alone: 2,695, 3% of those reporting one race and 1% of all respondents
 American Indian and Alaska Native alone: 355, <1% of those reporting one race and <1% of all respondents
 Asian alone: 1,000, 1% of those reporting one race and <1% of all respondents
 Native Hawaiian and other Pacific Islander alone; 23, <1% of those reporting one race and <1% of all respondents
 Some other race alone: 27,925, 30% of those reporting one race and 12.5% of all respondents

Of those reporting they were of mixed race, 129,168 (58%) said they were of two races, 796 (<1%) said they were of three races, 105 said they were of four races and 17 said they were of five races.  The conclusion that can be reached based on this primary data is that the population is extremely ethnically diverse and there is not a majority ethnicity represented.  The majority of people who reported they were of one ethnicity reported they were white, but this represented less than 1/3 of the overall population.

2010 census

Hialeah is the tenth-largest city in the United States among cities with a population density of more than 10,000 people per square mile.

As of 2010, there were 74,067 households, with 3.9% being vacant. As of 2000, 36.2% had children under the age of 18 living with them, 57.4% were married couples living together, 17.4% had a female householder with no husband present, and 18.7% were non-families. 14.7% of all households were made up of individuals, and 7.8% had someone living alone who was 65 years of age or older.  The average household size was 3.15 and the average family size was 3.39.

In 2015 through 2016 the population in Hialeah grew from 234,714 to 235,626, a 0.4% increase. The median household income grew from $29,249 to $29,817, a 1.9% increase.

In 2000, the age distribution of the population showed 23.0% under the age of 18, 8.2% from 18 to 24, 29.4% from 25 to 44, 22.9% from 45 to 64, and 16.6% who were 65 years of age or older.  The median age was 43.5 years. For every 100 females, there were 92.7 males.  For every 100 females age 18 and over, there were 89.6 males.

In 2000, the median income for a household in the city was $29,492, and the median income for a family was $31,621. Males had a median income of $23,133 versus $17,886 for females. The per capita income for the city was $12,402.  About 16.0% of families and 18.6% of the population were below the poverty line, including 22.2% of those under age 18 and 22.4% of those age 65 or over.

Hialeah ranks #2 (nearby Hialeah Gardens ranks as #1) in the list of cities in the United States where Spanish is most spoken. As of 2000, 92.14% of the population spoke Spanish at home, while those who spoke only English made up 7.37% of the population. All other languages spoken were below 1% of the population.

Economy

The city of Hialeah is a significant commercial center in Miami-Dade County.  The city is host to national retailers such as Starbucks, Target, Best Buy, Walmart, Lowe's, and The Home Depot, as well as homegrown businesses such as Navarro and Sedano's.

Hialeah is also home to vibrant community of mom-and-pop stores. These shops have successfully competed against national name brand retailers, outfitters, and franchises. In order to remain competitive national businesses have altered their traditional business strategy to meet the demands of the local community. Publix supermarkets opened a Publix Sabor along one of the city's main streets which caters to Latin American and Hispanic clientele. While most of the manufacturing and cloth industries that made Hialeah an industrial city in the 1970s–1980s have disappeared, new electronics and technology businesses have reinvigorated the local economy.

Westland Mall contains over 100 stores and several restaurants. Macy's with a Starbucks in it, IHOP, and J. C. Penney are the main anchor stores located at the mall, while restaurants include Fuddruckers, IHOP, Los Ranchos Steakhouse, Chili's, Manchu Wok, Cuban Guys, Edy's.

Telemundo, the second largest Spanish-language TV network in the United States, was headquartered at 2340 West 8th Avenue in Hialeah until 2018.

Recreation

In March 2009, it was announced that a $40–$90 million restoration project was set to begin within the year on the Hialeah Park Race Track.  On May 7, 2009 the Florida legislature agreed to a deal with the Seminole Tribe of Florida that allowed Hialeah Park to operate slot machines and run Quarter Horse races. The historic racetrack reopened on November 28, 2009 but only for Quarter Horse races. The park installed slot machines in January 2010 as part of a deal to allow for two calendar seasons of racing. The races went on all the way until February 2, 2010. Only a portion of the park has been restored, and an additional $30 million will be needed to complete this first phase of the project. The full transformation is expected to cost $1 billion since the plan includes a complete redevelopment of the surrounding area including the construction of an entertainment complex to include a hotel, restaurants, casinos, stores and a theater. In June 2010 concerns were raised over the preservation of Hialeah Park's historical status, as the planned development threatens to hurt Hialeah Park's status as a National Historic Landmark.

The City of Hialeah is home to three tennis centers, five public swimming pools and aquatic centers, and more than 14 public parks totaling more than  combined. Milander Park features a municipal auditorium and a 10,000 seat football stadium.

Amelia Earhart Park also serves the Hialeah community.  Located just south of the Opa Locka Airport, the park consists of 515 acres, including a five-acre Bark Park for dogs. It offers a variety of amenities, programs and activities including mountain biking, soccer, Tom Sawyer's Play Island and Bill Graham Farm Village. It also houses the new Miami Watersports Complex, which offers cable and boat wakeboarding, waterskiing, wake surfing, kneeboarding and paddleboarding.

Government and infrastructure

The University of Florida College of Dentistry operates the Hialeah Dental Clinic. It opened in 1997 to serve Hispanic populations in South Florida.

Politics

Hialeah is located within Florida's 26th Congressional District. It is currently represented in the House of Representatives by Mario Díaz-Balart, a Republican. A 2005 study by the nonpartisan Bay Area Center for Voting Research (BACVR) ranked Hialeah, Florida as the fourth most conservative city in the United States. The current mayor of Hialeah is Esteban Bovo.

Due to the heavy presence of the Cuban American community Hialeah traditionally, as of 2020, leaned towards Republican politics. In the 2016 United States presidential election in Florida each of the two major candidates received about half of the vote. For the 2020 United States presidential election in Florida about two thirds of residents of Hialeah voted for Trump. Sabrina Rodriguez of Politico wrote "a vote for Trump has become about more than just him, or even the Republican Party. It's about patriotism."

Education

Public primary and secondary schools

Miami-Dade County Public Schools serves Hialeah.

Two high schools serving the Hialeah community, Mater Academy Charter High School and Miami Lakes Tech, were named as "Silver" award winners in U.S. News & World Reports "Best High Schools 2008 Search".

Private schools

 Champagnat Catholic School – serves mainly southern and south-central Hialeah
 Edison Private School
 Horeb Christian School
 Immaculate Conception School
 Our Lady of Charity School – a private Catholic school not formally associated with the Roman Catholic Church, located in Hialeah
 St. John the Apostle School – serves mainly southern and south-central Hialeah

Post-secondary

Public colleges

 Miami-Dade College Hialeah Campus has served as the city's academic center since 1980. Besides its academic mission, the campus also sponsors numerous cultural and community events.

Private colleges and universities

 ASA College
 College of Business and Technology
 Florida National University

Public library
Hialeah's public library was founded in 1924, one year prior to the incorporation of the city. While over the years the county-wide Miami-Dade Public Library System has taken over the libraries of most of the cities in the county, Hialeah public libraries function independently from the county-wide system.
The first branch was a donation by the Hialeah Women's Club. It was actually located in the house of one of the Hialeah Women's Club's home. The home of Ms. J Sommers Garwood. The club was founded by Ms. Lua Adams Curtiss, who was the late mother of the famous aviator Glenn Curtiss. The club asked for donations to get the library started and was fortunate enough to receive enough to get the system started. The latest branch, John F. Kennedy Library is now the main library for Hialeah and is easily recognizable for its grand murals. In 2017, the branch set out to renovate the entire library and they added new furniture, the art murals, polished terrazzo floors, and new sculptures. The library hosts a print collection, digital resources, and a Hialeah History Collection which collects, preserves and provides access to information about the City of Hialeah's history.

Transportation

In 2013, Hialeah was named a top five city with the worst drivers by Slate and Allstate.

Rail

Hialeah is served by Miami-Dade Transit along major thoroughfares by Metrobus, and by the Miami Metrorail, Tri-Rail, and Amtrak at:

Metrorail:
  Tri-Rail/Metrorail Transfer (North 79th Street and West 37th Avenue)
  Hialeah (East 21st Street and East 1st Avenue)
  Okeechobee (West 19th Street and South Okeechobee Road)

Tri-Rail:
  Tri-Rail/Metrorail Transfer (North 79th Street and West 37th Avenue)
  Hialeah Market (North 41st Street and West 38th Avenue)

Amtrak:
  Amtrak-Miami: Silver Star and Silver Meteor service (North 79th Street and West 37th Avenue)

Road

"All Ways Lead to Hialeah" was one of the city's first slogans. At the time, Glenn Curtiss and James Bright could not have imagined the important link in the transportation chain provided by Hialeah's location. Sitting in the heart of northwest Dade, Hialeah has access to several major thoroughfares, linked by:
 Interstate 75
 State Road 826 (Palmetto Expressway)
 Homestead Extension of Florida's Turnpike
 U.S. Route 27 (Okeechobee Road)
 State Road 924 (Gratigny Parkway)

Notable people

 Alex Avila, Major League Baseball player for Arizona Diamondbacks, drafted by Detroit Tigers
 Terry Borcheller, racing driver
 Devin Bush, NFL free safety for Atlanta Falcons (1995–1998), St. Louis Rams (1999–2000) and Cleveland Browns (2001–2002)
 Maria Canals-Barrera, actress
 Rene Capo, U.S. Olympic representative as a judoka
 Harry Wayne Casey, lead singer of KC and the Sunshine Band, graduate of Hialeah High School
 Chris Corchiani, NBA guard for Orlando Magic picked in second round of 1991 NBA Draft from North Carolina State University; later with Boston Celtics, Washington Bullets
 Nestor Cortes, MLB pitcher for the New York Yankees, 2022 all-star
 Erik Courtney, Bravo TV personality on Newlyweds: The First Year, born in Hialeah and attended Mae M. Walters Elementary School
 Jack Daugherty, MLB first baseman for Texas Rangers, Houston Astros, Cincinnati Reds and Montreal Expos
 Rohan Davey, NFL quarterback for New England Patriots (2002–2004) and Arizona Cardinals and in NFL Europe World Bowl for Berlin Thunder
 Bucky Dent, professional baseball player for MLB New York Yankees, graduate of Hialeah High School
 Vincent D'Onofrio, actor and producer of stage, film and television, best known as Detective Robert Goren in Law & Order: Criminal Intent and graduate of Hialeah-Miami Lakes High School
 Nick Esasky, MLB infielder for Cincinnati Reds, Boston Red Sox and Atlanta Braves
 Luis Exposito, former Major League Baseball player for the Baltimore Orioles
 Bobby Estalella, MLB catcher for Philadelphia Phillies, San Francisco Giants, New York Yankees, Colorado Rockies, Arizona Diamondbacks and Toronto Blue Jays
 Wifredo A. Ferrer, U.S. attorney for Southern District of Florida, nominated by President Barack Obama
 René García, Hialeah city councilman and Florida State House representative
 Gio González, MLB pitcher for Milwaukee Brewers, drafted by Chicago White Sox in first round, made MLB debut in 2008
 Luchi Gonzalez, coach of FC Dallas
 Ted Hendricks, former professional NFL football player, Hialeah High Class of 1965
 Charlie Hough, former professional baseball player, Hialeah High graduate
 Richard Hough, former professional baseball player, Hialeah High graduate
 Greg Jackson, professional football player
 Catherine Keener, Oscar-nominated actress
 Barbara Lagoa, judge
 Corey Lemonier, Auburn University and NFL defensive end
 Manny Machado, Major League Baseball third baseman for the San Diego Padres
 Lizbet Martínez, Cuban violinist and teacher at M.A. Milam K-8 Center
 Raúl L. Martínez, longest-seated mayor in Hialeah history (1981–2005)
 Maria Molina, meteorologist
 Oscar Múñoz, MLB pitcher for Minnesota Twins
 Roell Preston,  professional football player
 Mike Rio, professional mixed martial arts fighter
 Julio Robaina, mayor of Hialeah
 Rick Sánchez, CNN anchor/correspondent
 Jon Secada, Grammy Award–winning musician
 Michael Timpson, NFL wide receiver for New England Patriots for six seasons (1989–1994), alumnus of Lakes class of 1985
 Ariel Torres, U.S. Olympic bronze medalist as a karateka
 Rocco Valdes, music producer, songwriter, music manager

See also

Camp Hialeah, a former base of the United States Forces Korea in Busan, South Korea

Notes

References

Bibliography

External links

 City of Hialeah official site
Hialeah Chamber of Commerce official site

Cities in Florida
Cities in Miami-Dade County, Florida
Cities in Miami metropolitan area
Cuban-American culture in Florida
Populated places established in 1921
1925 establishments in Florida

redpajama_set_name: RedPajamaWikipedia


text:
Defanging the Unthinkable
A Fitting, Impressive Goodbye
The Ambivalent, Bittersweet "My Life as a Zucchini"
The Complex Morality of "No Country for Old Men"
A New Way of Telling Love Stories
Breaking Standards with Julian Rosefeldt of "Manifesto"
Indulging Mightily with Alex Ross Perry and the "Golden Exits" Cast
The Ultimate Meta-Performance: Kate Lyn Sheil on "Kate Plays Christine"
Critic-At-Large
Now Playing: "From Nowhere"
Now Playing: "Fifty Shades Darker"
Now Playing: "War on Everyone"
Now Playing: "The Salesman"
Mousterpiece Cinema, Episode 287: "Kundun"
Mousterpiece Cinema, Episode 286: "Pinocchio"
Mousterpiece Cinema, Episode 285: "That Darn Cat"
Mousterpiece Cinema, Episode 284: "The Princess Diaries 2: Royal Engagement"
Longform / SXSW
SXSW 2016: Fingers on the Pulse
by Marshall Shaffer
In the wake of SXSW, Marshall Shaffer reflects on the festival's unique place in the cinematic landscape.
If you had to match a film festival to the distributor that best matches its ethos, you would probably pair the quirkiness of Sundance with Fox Searchlight, the prestige of Cannes with Sony Pictures Classics and the award-readiness of Toronto with the Weinsteins. But what about South by Southwest (SXSW) Film, chugging along in its 23rd year and attracting better and brighter talent with each passing year?
Austin's SXSW perhaps best resembles A24 – a spunky, upstart outfit with its pulse on the broader media culture and a penchant for taking smartly calculated risks. In their brief but impactful existence, the distributor has used the festival for stateside launches of both Spring Breakers (2013) and Ex Machina (2015). Last year, they picked up SXSW Grand Jury Prize winner Krisha shortly after the festival and are currently turning it into the low-budget indie cause celebre of the moment. At the 2016 edition, they brought Sundance acquisition Morris from America for the first stop on the festival circuit – similar to their strategy for 2014's Obvious Child – and surely they will eventually end up acquiring something that played. (Please?)
SXSW proved this year that it is perhaps the only premiere-status festival that fully understands and encompasses the broad landscape of filmed entertainment. The fest appeals to omnivorous tastes, not the monolithic Sundance low-budget indie. Unburdened by the pressure of becoming "the next big thing" in the mountains of Park City, SXSW selections have a better chance of sinking or swimming on their own merits. With on-site acquisitions still fairly scarce, the conversations following each screening tend to focus on the hour and a half of entertainment that just flickered on the screen – not which buyer will eventually scoop it up. Hot takes and tweets sent the second the credits roll are just not a part of the culture at SXSW. Hopefully it stays that way.
Janet Pierson's team has quietly been fostering the discovery of countless big talents; one could argue that Brie Larson's march to the Oscar really began at SXSW in 2013, where her breakout performance in Destin Cretton's Short Term 12 put her on many people's radar as a talent on par with Jennifer Lawrence. That same year also saw the premiere of Joe Swanberg's Drinking Buddies, the comedy that gave the mumblecore movement a big push into the mainstream spotlight. Before Pierson's reign began, SXSW was every bit as much a supporter of the loose collective as Sundance, and the filmmakers' loyalty was on display in a big way in 2016. Swanberg gave a keynote; two films produced by the Duplass brothers screened; Ti West, whose last feature premiered in Venice, chose SXSW as the venue to debut his latest, In A Valley of Violence.
Pierson also provides one of the few safe spaces for that vanishing middle ground of American studio filmmaking. Festivals like Sundance and Tribeca have rallied around the indies as their budgets and theatrical audiences shrink. Cannes requires some element of glitz and glamour for a big red carpet. Premiering at Venice or Toronto inevitably signals desire for awards attention. SXSW provides a platform for filmmakers like Richard Linklater and Jeff Nichols – two high-minded and independently spirited directors – the chance to premiere their latest features in an appropriately splashy fashion. While achieving one's vision on a shoestring budget is a feat to celebrate, so is convincing a risk-averse, profit-focused corporation to underwrite a personal project while maintaining a stamp of authenticity.
The film festival is also a rare haven for comically inclined filmmakers, no doubt aided by the concurrent SXSW Comedy section running parallel to it. After successfully introducing audiences to Bridesmaids, 21 Jump Street, Neighbors, Trainwreck and Spy (while dooming the fates of The Incredible Burt Wonderstone and Get Hard), 2016 saw a heavy presence of studio comedies showing up for the party. Key and Peele brought Keanu; Seth Rogen showed up with Sausage Party; Adam DeVine and Anna Kendrick even made a trip to Austin for a non-festival sanctioned sneak peek at Mike and Dave Need Wedding Dates. The SXSW crowds, discerning yet still fun-loving, provide a great test audience, as well as an easy buzz-builder headed into the competitive summer season. It is conceivable that, in a few years, any mainstream comedy that foregoes a SXSW bow might be perceived as having something to hide.
SXSW also seems to have incorporated television into its official selections more dexterously that other festivals of its caliber. Sundance and Cannes have uneasily, perhaps begrudgingly, incorporated mini-series, television movies and even the rare glimpse of a series into their programming – usually billed as "special events" or something of the like. It feels more like tokenism for the purpose of maintaining relevance, rather than a recognition of the distinct artistry necessary for that medium. Even before introducing their Episodic section officially in 2014, SXSW served as the world premiere venue for Bates Motel and Girls. (It should be noted Lena Dunham won the Grand Jury Prize with her feature film Tiny Furniture back in 2010, yet another example of Pierson and company keeping friends in the fray.) Perhaps TIFF will gain ground with its Primetime section, but it seems unlikely given all the businesspeople in Austin for SXSW Interactive, many of whom recognize the need for storytellers that can communicate with concision and get their message across in the complex new media environment.
As for virtual reality, Sundance relentlessly (and somewhat disingenuously) trumpets it as an art form to be taken seriously while relegating it to sideshow status. At SXSW, the format belonged more to the Interactive portion, where festival attendees could experience VR on a pedicab or while on a cycling bike. For now, VR is primarily branded entertainment, a carnival amusement that excites more for its novelty than its artistry. That's not to say it cannot or will not rise to the level of the cinema. But students of film history may well see parallels between inventions like the kinetoscope or zoopraxiscope and the current state of the Google Cardboard boxes.
It's no accident that this festival takes place in the burgeoning cinephile destination of Austin, a middle ground between New York's highly academic film culture and Los Angeles' more commercialized atmosphere. SXSW keeps rolling and sustainably growing by acknowledging that our cultural dialogue around cinema has not shrunk. It has just become more diffuse across the many platforms and media willing to grant artists the freedom and resources necessary to realize their ideas. As committed as cinema aficionados may be to the theatrical experience, perhaps we all ought to take a page from SXSW's operating philosophy – the value of a work lies less in the form it takes and more in the community it creates.
NathanaelHood
AndyHoglund
MichaelSicinski
The Ambivalent, Bittersweet "My Life as a Zucchini"
Movie Mezzanine is an online publication dedicated to covering the medium that connects us all, one film at a time. With writers stationed around the globe, we offer a uniquely diverse perspective on cinema, both old and new. To learn more about us, go here.
Putting the Geek to the Plow
Weekly Newsletter:


Customer can conduct one withdrawal and deposit transaction before account activation.
Upon activation of Omni account, customer will receive a confirmation SMS from "8257"
Visit nearby UBL OMNI Dukaan and provide Biometric thumb Impression.
Customer may set his/her PIN via IVR for account activation at time of registration or call 111-825-777 for account activation to set his/her PIN to avail complete Biometric account limits.
UBL Omni Agent asks customer for his/her biometric verification.
Upon successful biometric verification (subject to NADRA confirmation), the customer account is upgraded to biometric L-1 account.
Upon activation of UBL Omni Account, customer will receive a confirmation SMS from "8257"
Customer visits the nearby UBL Omni Dukaan or UBL Branch for Level-2 account registration.
In case of visiting UBL Omni Dukaan, customer will be assisted in registering biometrically for L-1 account and align UBL Omni sales team for Level-2 Upgrade.
Customer can also visit the branch for submission of Level-2 Account Opening Form.
Upon successful verification by bank staff, customer's duly filled and signed Account Opening Form is submitted with respective department for processing.
The account opening form is processed by the bank as per regulations and customer is notified of the registration status by the UBL Omni Contact Center.


If You're bored with high marijuana prices and changeable quality perhaps it is time to learn how to grow your own weed. Growing Elite Marijuana is a complete 748 page marijuana growing guide. It covers everything you need to know to grow your own premium excellent bud. It is chock full of marijuana growing ideas that can benefit newbies and more advanced growers alike.
The first is that the quick growing start. It has a ton of detailed HD images to be able to help you through the process step by step with no confusing. It does not have a lot of technical terms that nobody can understand, so it's easy to follow! You can download this part straight away so that you can get started ASAP along with another section too.
The second part is the in depth Explanation for those looking to understand about growing marijuana. It has over 750+ pages filled with knowledge so that you will be able to obtain the answer to some more complex questions about developing you may have.
I highly Recommend that you buy Growing Elite Marijuana on your own. I know there are some free downloads available on the internet, but stealing is unethical and brings bad karma.
The Downloads that are offered are the old outdated 5 year old version and not the new 2015 revised and enlarged edition and they are packed with spyware and spyware.
A lot has Happened in the past 5 years. Things are changing rapidly and while there are a number of basics, strains go and come and developing techniques continue to progress also. You have to have the latest growing data to make the right decisions.
· An comprehensive look at marijuana"strains" and how each offers you a colorful new stoned feeling, a lot of information here, and it is all up to date.
· Indica vs. Sativa, the crucial sections of each and how each affects your kind of high and increase.
But Where can you start learning how to grow? In case you have ever searched the internet because want to understand how to grow your own weed you likely found it to be quite a confusing location. Everything is spread out all around the area. Should you ask a simple question on the forums you will likely get 20 different responses and several will be just plain wrong.
The World Wide Web Is great but lets face it, anyone can print something and become an instant expert. When you start growing you need good solid ideas and you actually need it in one place.
That's why You want a full develop guide like Growing Elite Marijuana in your finger tips. Ryan Riley has been growing for twenty decades and shares his knowledge in a down to earth, easy to understand format that will have you growing like a pro very quickly.
But this Guide is not only for beginners. It covers advanced topics too so you can boost your abilities. I find myself going back to it again and again and I have been growing top shelf marijuana for years. I really like the section on breeding cannabis as it's where my interests lie at this point.
Maybe you Are not ready to begin breeding your own breeds since you're only beginning, but I am certain that you would wish to know how to set your grow area properly. A lot of people focus on breeds, but really a suitable growing environment is much more crucial to successful growth. With no no strain could ever achieve its whole potential for quality and yield.
By following The suggestions in Growing Elite Marijuana you will create a perfect growing system and avoid costly, even deadly mistakes. It isn't important whether you want to increase in dirt, coco or hydro. It isn't important whether you want to grow weed indoors or outside.
This manual Covers everything you need to know. From seed into veg to flower from lighting to CO2 enrichment. Training, breeding, hydroponics and much much more. There's simply too much info to publish all the topics covered in detail in this brief article. You really need to visit the official Growing Elite Marijuana site to grasp just how much information is in this marijuana growing guide.