text:
import logging
from datetime import datetime

from tg import config
from pylons import c, g, request

from ming import schema as S
from ming.utils import LazyProperty
from ming.orm import ThreadLocalORMSession
from ming.orm import session, state, MapperExtension
from ming.orm import FieldProperty, RelationProperty, ForeignIdProperty
from ming.orm.declarative import MappedClass

from allura.lib import helpers as h
from allura.lib import plugin
from allura.lib import exceptions
from allura.lib import security
from allura.lib.security import has_access

from .session import main_orm_session
from .session import project_orm_session, project_doc_session
from .neighborhood import Neighborhood
from .auth import ProjectRole
from .timeline import ActivityNode, ActivityObject
from .types import ACL, ACE

from filesystem import File

log = logging.getLogger(__name__)

class ProjectFile(File):
    class __mongometa__:
        session = main_orm_session
        indexes = [('project_id', 'category')]

    project_id=FieldProperty(S.ObjectId)
    category=FieldProperty(str)
    caption=FieldProperty(str)

class ProjectCategory(MappedClass):
    class __mongometa__:
        session = main_orm_session
        name='project_category'

    _id=FieldProperty(S.ObjectId)
    parent_id = FieldProperty(S.ObjectId, if_missing=None)
    name=FieldProperty(str)
    label=FieldProperty(str, if_missing='')
    description=FieldProperty(str, if_missing='')

    @property
    def parent_category(self):
        return self.query.get(_id=self.parent_id)

    @property
    def subcategories(self):
        return self.query.find(dict(parent_id=self._id)).all()

class TroveCategory(MappedClass):
    class __mongometa__:
        session = main_orm_session
        name='trove_category'
        indexes = [ 'trove_cat_id', 'trove_parent_id' ]

    _id=FieldProperty(S.ObjectId)
    trove_cat_id = FieldProperty(int, if_missing=None)
    trove_parent_id = FieldProperty(int, if_missing=None)
    shortname = FieldProperty(str, if_missing='')
    fullname = FieldProperty(str, if_missing='')
    fullpath = FieldProperty(str, if_missing='')
    parent_only = FieldProperty(bool, if_missing=False)

    @property
    def parent_category(self):
        return self.query.get(trove_cat_id=self.trove_parent_id)

    @property
    def subcategories(self):
        return self.query.find(dict(trove_parent_id=self.trove_cat_id)).sort('fullname').all()

    @property
    def children(self):
        result = []
        children = self.query.find(dict(trove_parent_id=self.trove_cat_id)).all()
        for child in children:
            result.append(child);
            result.extend(child.children)
        result.sort(key=lambda x:x.fullpath)
        return result

    @property
    def type(self):
        trove = self
        while trove.trove_parent_id != 0:
            trove = trove.parent_category
        return trove.shortname

class ProjectMapperExtension(MapperExtension):
    def after_insert(self, obj, st, sess):
        g.zarkov_event('project_create', project=obj)

class Project(MappedClass, ActivityNode, ActivityObject):
    _perms_base = [ 'read', 'update', 'admin', 'create']
    _perms_init = _perms_base + [ 'register' ]
    class __mongometa__:
        session = main_orm_session
        name='project'
        indexes = [
            'name',
            'neighborhood_id',
            ('neighborhood_id', 'name'),
            'shortname',
            'parent_id',
            ('deleted', 'shortname', 'neighborhood_id'),
            ('neighborhood_id', 'is_nbhd_project', 'deleted')]
        unique_indexes = [('neighborhood_id', 'shortname')]
        extensions = [ ProjectMapperExtension ]

    # Project schema
    _id=FieldProperty(S.ObjectId)
    parent_id = FieldProperty(S.ObjectId, if_missing=None)
    neighborhood_id = ForeignIdProperty(Neighborhood)
    shortname = FieldProperty(str)
    name=FieldProperty(str)
    notifications_disabled = FieldProperty(bool)
    suppress_emails = FieldProperty(bool)
    show_download_button=FieldProperty(S.Deprecated)
    short_description=FieldProperty(str, if_missing='')
    summary=FieldProperty(str, if_missing='')
    description=FieldProperty(str, if_missing='')
    homepage_title=FieldProperty(str, if_missing='')
    external_homepage=FieldProperty(str, if_missing='')
    support_page=FieldProperty(str, if_missing='')
    support_page_url=FieldProperty(str, if_missing='')
    removal=FieldProperty(str, if_missing='')
    moved_to_url=FieldProperty(str, if_missing='')
    removal_changed_date = FieldProperty(datetime, if_missing=datetime.utcnow)
    export_controlled=FieldProperty(bool, if_missing=False)
    export_control_type=FieldProperty(str, if_missing=None)
    database=FieldProperty(S.Deprecated)
    database_uri=FieldProperty(str)
    is_root=FieldProperty(bool)
    acl = FieldProperty(ACL(permissions=_perms_init))
    neighborhood_invitations=FieldProperty([S.ObjectId])
    neighborhood = RelationProperty(Neighborhood)
    app_configs = RelationProperty('AppConfig')
    category_id = FieldProperty(S.ObjectId, if_missing=None)
    deleted = FieldProperty(bool, if_missing=False)
    labels = FieldProperty([str])
    last_updated = FieldProperty(datetime, if_missing=None)
    tool_data = FieldProperty({str:{str:None}}) # entry point: prefs dict
    ordinal = FieldProperty(int, if_missing=0)
    database_configured = FieldProperty(bool, if_missing=True)
    _extra_tool_status = FieldProperty([str])
    trove_root_database=FieldProperty([S.ObjectId])
    trove_developmentstatus=FieldProperty([S.ObjectId])
    trove_audience=FieldProperty([S.ObjectId])
    trove_license=FieldProperty([S.ObjectId])
    trove_os=FieldProperty([S.ObjectId])
    trove_language=FieldProperty([S.ObjectId])
    trove_topic=FieldProperty([S.ObjectId])
    trove_natlanguage=FieldProperty([S.ObjectId])
    trove_environment=FieldProperty([S.ObjectId])
    tracking_id = FieldProperty(str, if_missing='')
    is_nbhd_project=FieldProperty(bool, if_missing=False)

    @property
    def activity_name(self):
        return self.shortname

    @property
    def permissions(self):
        if self.shortname == '--init--':
            return self._perms_init
        else:
            return self._perms_base

    def parent_security_context(self):
        '''ACL processing should proceed up the project hierarchy.'''
        return self.parent_project

    @classmethod
    def default_database_uri(cls, shortname):
        return config.get('ming.project.uri')

    @LazyProperty
    def allowed_tool_status(self):
        return ['production'] + self._extra_tool_status

    @h.exceptionless([], log)
    def sidebar_menu(self):
        from allura.app import SitemapEntry
        result = []
        if not self.is_root:
            p = self.parent_project
            result.append(SitemapEntry('Parent Project'))
            result.append(SitemapEntry(p.name or p.script_name, p.script_name))
        sps = self.direct_subprojects
        if sps:
            result.append(SitemapEntry('Child Projects'))
            result += [
                SitemapEntry(p.name or p.script_name, p.script_name)
                for p in sps ]
        return result

    def troves_by_type(self, trove_type):
        return TroveCategory.query.find({'_id':{'$in':getattr(self,'trove_%s' % trove_type)}}).all()

    def get_tool_data(self, tool, key, default=None):
        return self.tool_data.get(tool, {}).get(key, default)

    def set_tool_data(self, tool, **kw):
        d = self.tool_data.setdefault(tool, {})
        d.update(kw)
        state(self).soil()

    def admin_menu(self):
        return []

    @property
    def script_name(self):
        url = self.url()
        if '//' in url:
            return url.rsplit('//')[-1]
        else:
            return url

    def url(self):
        if self.is_nbhd_project:
            return self.neighborhood.url()
        shortname = self.shortname[len(self.neighborhood.shortname_prefix):]
        url = self.neighborhood.url_prefix + shortname + '/'
        if url.startswith('//'):
            try:
                return request.scheme + ':' + url
            except TypeError: # pragma no cover
                return 'http:' + url
        else:
            return url

    def best_download_url(self):
        provider = plugin.ProjectRegistrationProvider.get()
        return provider.best_download_url(self)

    def get_screenshots(self):
        return ProjectFile.query.find(dict(
                project_id=self._id,
                category='screenshot')).all()

    @property
    def icon(self):
        return ProjectFile.query.get(
            project_id=self._id,
            category='icon')

    @property
    def description_html(self):
        return g.markdown.convert(self.description)

    @property
    def parent_project(self):
        if self.is_root: return None
        return self.query.get(_id=self.parent_id)

    def _get_private(self):
        """Return True if this project is private, else False."""
        role_anon = ProjectRole.anonymous(project=self)
        return ACE.allow(role_anon._id, 'read') not in self.acl
    def _set_private(self, val):
        """Set whether this project is private or not."""
        new_val = bool(val)
        role_anon = ProjectRole.anonymous(project=self)
        ace = ACE.allow(role_anon._id, 'read')
        curr_val = ace not in self.acl
        if new_val == curr_val: return
        if new_val:
            self.acl.remove(ace)
        else:
            self.acl.append(ace)
    private = property(_get_private, _set_private)

    @property
    def is_user_project(self):
        return self.shortname.startswith('u/')

    @LazyProperty
    def user_project_of(self):
        '''
        If this is a user-project, return the User, else None
        '''
        user = None
        if self.is_user_project:
            user = plugin.AuthenticationProvider.get(request).user_by_project_url(self.shortname[2:])
        return user

    @LazyProperty
    def root_project(self):
        if self.is_root: return self
        return self.parent_project.root_project

    @LazyProperty
    def project_hierarchy(self):
        if not self.is_root:
            return self.root_project.project_hierarchy
        projects = set([self])
        while True:
            new_projects = set(
                self.query.find(dict(parent_id={'$in':[p._id for p in projects]})))
            new_projects.update(projects)
            if new_projects == projects: break
            projects = new_projects
        return projects

    @property
    def category(self):
        return ProjectCategory.query.find(dict(_id=self.category_id)).first()

    def roleids_with_permission(self, name):
        roles = set()
        for p in self.parent_iter():
            for ace in p.acl:
                if ace.permission == name and ace.access == ACE.allow:
                    roles.add(ace.role_id)
        return list(roles)

    @classmethod
    def menus(cls, projects):
        '''Return a dict[project_id] = sitemap of sitemaps, efficiently'''
        from allura.app import SitemapEntry
        pids = [ p._id for p in projects ]
        project_index = dict((p._id, p) for p in projects)
        entry_index = dict((pid, []) for pid in pids)
        q_subprojects = cls.query.find(dict(
                parent_id={'$in': pids},
                deleted=False))
        for sub in q_subprojects:
            entry_index[sub.parent_id].append(
                dict(ordinal=sub.ordinal, entry=SitemapEntry(sub.name, sub.url())))
        q_app_configs = AppConfig.query.find(dict(
                project_id={'$in': pids}))
        for ac in q_app_configs:
            App = ac.load()
            project = project_index[ac.project_id]
            app = App(project, ac)
            if app.is_visible_to(c.user):
                for sm in app.main_menu():
                    entry = sm.bind_app(app)
                    entry.ui_icon='tool-%s' % ac.tool_name
                    ordinal = ac.options.get('ordinal', 0)
                    entry_index[ac.project_id].append({'ordinal':ordinal,'entry':entry})

        sitemaps = dict((pid, []) for pid in pids)
        for pid, entries in entry_index.iteritems():
            entries.sort(key=lambda e:e['ordinal'])
            sitemap = sitemaps[pid]
            for e in entries:
                sitemap.append(e['entry'])
        return sitemaps

    @classmethod
    def icon_urls(cls, projects):
        '''Return a dict[project_id] = icon_url, efficiently'''
        project_index = dict((p._id, p) for p in projects)
        result = dict((p._id, None) for p in projects)
        for icon in ProjectFile.query.find(dict(
                project_id={'$in': result.keys()},
                category='icon')):
            result[icon.project_id] = project_index[icon.project_id].url() + 'icon'
        return result

    @classmethod
    def accolades_index(cls, projects):
        '''Return a dict[project_id] = list of accolades, efficiently'''
        from .artifact import AwardGrant
        result = dict((p._id, []) for p in projects)
        for award in AwardGrant.query.find(dict(
                granted_to_project_id={'$in': result.keys()})):
            result[award.granted_to_project_id].append(award)
        return result

    def sitemap(self, excluded_tools=None):
        """Return the project sitemap.

        :param list excluded_tools: tool names (AppConfig.tool_name) to
                                    exclude from sitemap
        """
        from allura.app import SitemapEntry
        entries = []

        # Set menu mode
        delta_ordinal = 0
        max_ordinal = 0

        if self.is_user_project:
            entries.append({'ordinal': delta_ordinal, 'entry':SitemapEntry('Profile', "%sprofile/" % self.url(), ui_icon="tool-home")})
            max_ordinal = delta_ordinal
            delta_ordinal = delta_ordinal + 1

        for sub in self.direct_subprojects:
            ordinal = sub.ordinal + delta_ordinal
            if ordinal > max_ordinal:
                max_ordinal = ordinal
            entries.append({'ordinal':sub.ordinal + delta_ordinal,'entry':SitemapEntry(sub.name, sub.url())})
        for ac in self.app_configs:
            if excluded_tools and ac.tool_name in excluded_tools:
                continue
            App = ac.load()
            app = App(self, ac)
            if app.is_visible_to(c.user):
                for sm in app.main_menu():
                    entry = sm.bind_app(app)
                    entry.ui_icon='tool-%s' % ac.tool_name.lower()
                    ordinal = int(ac.options.get('ordinal', 0)) + delta_ordinal
                    if ordinal > max_ordinal:
                        max_ordinal = ordinal
                    entries.append({'ordinal':ordinal,'entry':entry})

        if self == self.neighborhood.neighborhood_project and h.has_access(self.neighborhood, 'admin'):
            entries.append({'ordinal': max_ordinal + 1,'entry':SitemapEntry('Moderate', "%s_moderate/" % self.neighborhood.url(), ui_icon="tool-admin")})
            max_ordinal += 1

        entries = sorted(entries, key=lambda e: e['ordinal'])
        return [e['entry'] for e in entries]

    def parent_iter(self):
        yield self
        pp = self.parent_project
        if pp:
            for p in pp.parent_iter():
                yield p

    @property
    def subprojects(self):
        q = self.query.find(dict(shortname={'$gt':self.shortname},
                                 neighborhood_id=self.neighborhood._id)).sort('shortname')
        for project in q:
            if project.shortname.startswith(self.shortname + '/'):
                yield project
            else:
                break

    @property
    def direct_subprojects(self):
        return self.query.find(dict(parent_id=self._id, deleted=False))

    @property
    def accolades(self):
        from .artifact import AwardGrant
        return AwardGrant.query.find(dict(granted_to_project_id=self._id)).all()

    @property
    def named_roles(self):
        roles = sorted(
            g.credentials.project_roles(self.root_project._id).named,
            key=lambda r:r.name.lower())
        return roles

    def install_app(self, ep_name, mount_point=None, mount_label=None, ordinal=None, **override_options):
        App = g.entry_points['tool'][ep_name]
        if not mount_point:
            base_mount_point = mount_point = App.default_mount_point
            for x in range(10):
                if self.app_instance(mount_point) is None: break
                mount_point = base_mount_point + '-%d' % x
        if not h.re_path_portion.match(mount_point):
            raise exceptions.ToolError, 'Mount point "%s" is invalid' % mount_point
        # HACK: reserved url components
        if mount_point in ('feed', 'index', 'icon', '_nav.json'):
            raise exceptions.ToolError, (
                'Mount point "%s" is reserved' % mount_point)
        if self.app_instance(mount_point) is not None:
            raise exceptions.ToolError, (
                'Mount point "%s" is already in use' % mount_point)
        assert self.app_instance(mount_point) is None
        if ordinal is None:
            ordinal = int(self.ordered_mounts(include_hidden=True)[-1]['ordinal']) + 1
        options = App.default_options()
        options['mount_point'] = mount_point
        options['mount_label'] = mount_label or App.default_mount_label or mount_point
        options['ordinal'] = int(ordinal)
        options.update(override_options)
        cfg = AppConfig(
            project_id=self._id,
            tool_name=ep_name,
            options=options)
        app = App(self, cfg)
        with h.push_config(c, project=self, app=app):
            session(cfg).flush()
            app.install(self)
        return app

    def uninstall_app(self, mount_point):
        app = self.app_instance(mount_point)
        if app is None: return
        if self.support_page == app.config.options.mount_point:
            self.support_page = ''
        with h.push_config(c, project=self, app=app):
            app.uninstall(self)

    def app_instance(self, mount_point_or_config):
        if isinstance(mount_point_or_config, AppConfig):
            app_config = mount_point_or_config
        else:
            app_config = self.app_config(mount_point_or_config)
        if app_config is None:
            return None
        App = app_config.load()
        if App is None: # pragma no cover
            return None
        else:
            return App(self, app_config)

    def app_config(self, mount_point):
        return AppConfig.query.find({
                'project_id':self._id,
                'options.mount_point':mount_point}).first()

    def app_config_by_tool_type(self, tool_type):
        for ac in self.app_configs:
            if ac.tool_name == tool_type:
                return ac

    def new_subproject(self, name, install_apps=True, user=None):
        if not h.re_path_portion.match(name):
            raise exceptions.ToolError, 'Mount point "%s" is invalid' % name
        provider = plugin.ProjectRegistrationProvider.get()
        return provider.register_subproject(self, name, user or c.user, install_apps)

    def ordered_mounts(self, include_hidden=False):
        '''Returns an array of a projects mounts (tools and sub-projects) in
        toolbar order.'''
        result = []
        for sub in self.direct_subprojects:
            result.append({'ordinal':int(sub.ordinal), 'sub':sub, 'rank':1})
        for ac in self.app_configs:
            App = g.entry_points['tool'][ac.tool_name]
            if include_hidden or not App.hidden:
                ordinal = ac.options.get('ordinal', 0)
                rank = 0 if ac.options.get('mount_point', None) == 'home' else 1
                result.append({'ordinal':int(ordinal), 'ac':ac, 'rank':rank})
        return sorted(result, key=lambda e: (e['ordinal'], e['rank']))

    def first_mount(self, required_access=None):
        '''Returns the first (toolbar order) mount, or the first mount to
        which the user has the required access.'''
        from forgewiki.wiki_main import ForgeWikiApp
        mounts = self.ordered_mounts()
        if self.is_user_project:
            for mount in mounts:
                if 'ac' in mount and mount['ac'].tool_name == 'profile':
                    return mount
        if mounts and required_access is None:
            return mounts[0]
        for mount in mounts:
            if 'sub' in mount:
                obj = mount['sub']
            elif 'ac' in mount:
                obj = self.app_instance(mount['ac'])
            else:
                continue
            if has_access(obj, required_access) or isinstance(obj, ForgeWikiApp):
                return mount
        return None

    def next_mount_point(self, include_hidden=False):
        '''Return the ordinal of the next open toolbar mount point for this
        project.'''
        ordered_mounts = self.ordered_mounts(include_hidden=include_hidden)
        return int(ordered_mounts[-1]['ordinal']) + 1 \
               if ordered_mounts else 0

    def delete(self):
        # Cascade to subprojects
        for sp in self.direct_subprojects:
            sp.delete()
        # Cascade to app configs
        for ac in self.app_configs:
            self.uninstall_app(ac.options.get('mount_point'))
        MappedClass.delete(self)

    def breadcrumbs(self):
        entry = ( self.name, self.url() )
        if self.parent_project:
            return self.parent_project.breadcrumbs() + [ entry ]
        else:
            return [ (self.neighborhood.name, self.neighborhood.url())] + [ entry ]

    def users(self):
        '''Find all the users who have named roles for this project'''
        named_roles = security.RoleCache(
            g.credentials,
            g.credentials.project_roles(project_id=self.root_project._id).named)
        return [ r.user for r in named_roles.roles_that_reach if r.user_id is not None ]

    def admins(self):
        """Find all the users who have 'Admin' role for this project"""
        admin_role = ProjectRole.query.get(name='Admin', project_id=self._id)
        if not admin_role:
            return []
        return [r.user.username for r in admin_role.users_with_role(self)]

    def user_in_project(self, username):
        from .auth import User
        u = User.by_username(username)
        if not u:
            return None
        named_roles = g.credentials.project_roles(project_id=self.root_project._id).named
        for r in named_roles.roles_that_reach:
            if r.user_id == u._id: return u
        return None

    def configure_project(
        self,
        users=None, apps=None,
        is_user_project=False,
        is_private_project=False):
        from allura import model as M

        self.notifications_disabled = True
        if users is None: users = [ c.user ]
        if apps is None:
            if is_user_project:
                apps = [('Wiki', 'wiki', 'Wiki'),
                        ('profile', 'profile', 'Profile'),
                        ('admin', 'admin', 'Admin'),
                        ('search', 'search', 'Search'),
                        ('activity', 'activity', 'Activity')]
            else:
                apps = [('admin', 'admin', 'Admin'),
                        ('search', 'search', 'Search'),
                        ('activity', 'activity', 'Activity')]
        with h.push_config(c, project=self, user=users[0]):
            # Install default named roles (#78)
            root_project_id=self.root_project._id
            role_admin = M.ProjectRole.upsert(name='Admin', project_id=root_project_id)
            role_developer = M.ProjectRole.upsert(name='Developer', project_id=root_project_id)
            role_member = M.ProjectRole.upsert(name='Member', project_id=root_project_id)
            role_auth = M.ProjectRole.upsert(name='*authenticated', project_id=root_project_id)
            role_anon = M.ProjectRole.upsert(name='*anonymous', project_id=root_project_id)
            # Setup subroles
            role_admin.roles = [ role_developer._id ]
            role_developer.roles = [ role_member._id ]
            self.acl = [
                ACE.allow(role_developer._id, 'read'),
                ACE.allow(role_member._id, 'read') ]
            self.acl += [
                M.ACE.allow(role_admin._id, perm)
                for perm in self.permissions ]
            self.private = is_private_project
            for user in users:
                pr = user.project_role()
                pr.roles = [ role_admin._id ]
            session(self).flush(self)
            # Setup apps
            for i, (ep_name, mount_point, label) in enumerate(apps):
                self.install_app(ep_name, mount_point, label, ordinal=i)
            self.database_configured = True
            self.notifications_disabled = False
            ThreadLocalORMSession.flush_all()

    def add_user(self, user, role_names):
        'Convenience method to add member with the given role(s).'
        pr = user.project_role(self)
        for role_name in role_names:
            r = ProjectRole.by_name(role_name, self)
            pr.roles.append(r._id)

class AppConfig(MappedClass):
    """
    Configuration information for an instantiated :class:`Application <allura.app.Application>`
    in a project

    :var options: an object on which various options are stored.  options.mount_point is the url component for this app instance
    :var acl: a dict that maps permissions (strings) to lists of roles that have the permission
    """

    class __mongometa__:
        session = project_orm_session
        name='config'
        indexes = [
            'project_id',
            'options.import_id',
            ('options.mount_point', 'project_id')]

    # AppConfig schema
    _id=FieldProperty(S.ObjectId)
    project_id=ForeignIdProperty(Project)
    discussion_id=ForeignIdProperty('Discussion')
    tool_name=FieldProperty(str)
    version=FieldProperty(str)
    options=FieldProperty(None)
    project = RelationProperty(Project, via='project_id')
    discussion = RelationProperty('Discussion', via='discussion_id')
    tool_data = FieldProperty({str:{str:None}}) # entry point: prefs dict

    acl = FieldProperty(ACL())

    def get_tool_data(self, tool, key, default=None):
        return self.tool_data.get(tool, {}).get(key, default)

    def set_tool_data(self, tool, **kw):
        d = self.tool_data.setdefault(tool, {})
        d.update(kw)
        state(self).soil()

    def parent_security_context(self):
        '''ACL processing should terminate at the AppConfig'''
        return None

    def load(self):
        """
        :returns: the related :class:`Application <allura.app.Application>` class
        """
        try:
            result = self._loaded_ep
        except AttributeError:
            result = self._loaded_ep = g.entry_points['tool'][self.tool_name]
        return result

    def script_name(self):
        return self.project.script_name + self.options.mount_point + '/'

    def url(self, project=None):
        'return the URL for the app config.  project parameter is for optimization'
        if not project:
            project = self.project
        return project.url() + self.options.mount_point + '/'

    def breadcrumbs(self):
        return self.project.breadcrumbs() + [
            (self.options.mount_point, self.url()) ]

redpajama_set_name: RedPajamaGithub


text:
Dir: Chen Huanxiang
Star: Chen Xinzhe, Kang Ning, Shao Shuai, Zhen Gao
The opening 25 minutes of this are as good as any creature feature you'll see, Western or Chinese, and would be a fitting climax to many movies. Set in pre-war China, it takes place on a train returning doctor Jing Lan (Kang) to the rural community where she grew up. On board with her is her boyfriend, soldier Mao Sho Yang (Shao) and a local snake expert, Mu Sheng (Chen). Fun fact: snake bone wine is apparently a thing in China. I'll be sticking to Merlot. Mu's presence is convenient, since the train grinds to a halt and seconds later, comes under assault from a tidal wave of slithering reptiles. Imagine Train to Busan, with snakes instead of zombies, and you'll be about there [and, yes, it took Chris three seconds to make a "snakes on a train" joke]. Leading the assault is a monster with two heads; unsurprisingly, the humans decide to go off the rails and head on foot for Jing's village.
It's an awesome opening, relentless and high-energy – albeit still not as cool as the poster (right). Shame the rest of the film is much more prosaic. When they arrive, Jing and pals find the community was recently destroyed by the same creatures, who have been driven out of their natural habitat by man's encroachment. To heal the victims of the poisonous bites, a mission must be sent into Snake King Valley, to obtain the rare ingredients needed for an antidote. This kind of expedition-based movie is hardly novel in the genre, and things unfold much as you probably expect the rest of the way. The two-headed snake is not seen again until the very end. Instead, the party have to handle other threats such as venomous spiders (lots of little ones, rather than Shelob-sized), a water anaconda, rickety bridge, etc. It's standard jungle survival stuff, and is a bit of a disappointment after the frantic imagination at the start. Though we did appreciate the malicious little person, Sorrowful Snake, they encounter deep in a cave. Unexpected midgets are tight.
I kept hoping for a return to the large-scale mayhem; it never quite gets there, though has its moments. I must also say, the king of snake (plural optional, apparently, and in line with the spelling of the Underworld song) is remarkably light on its… ah, ribs, for something that must weigh at least the same as an armoured car. It can sneak up and lurk behind victims at will, pausing just enough for the required "It's behind me, isn't it?" moment (top). Though director Chen never lets it linger too long, which may be a wise move if you're not confident in the effects. Can't say I noticed any particular flaws, though it is moving quite quickly much of the time. Decent enough overall, yet after the glory which was the start, I can't help feeling this must count as a lost opportunity.
Chen Huanxiang
Chen Xinzhe
Kang Ning
Shao Shuai
Zhen Gao
Das Rasthaus der Grausamen Puppen (1967)

redpajama_set_name: RedPajamaCommonCrawl


text:
The Music Convention Profile
aka The Trends, The Spectres
Andrew Schmidt
Johnny Cooper talent quests, folk club spots and hall shows. Beat bands at a main street teen club. Conflict with local hoons. Strange is the tale of The Trends, a young rock and roll band that emerged from St John's Catholic college in Hamilton during the early 1960s.
In 1966, the Trends moved to Auckland and changed their name to The Music Convention. There they recorded the soundtrack to New Zealand's classic surf movie, Children Of The Sun, and the psychedelic oddity 'Footprints On My Mind'. It didn't matter that the band originated in landlocked Hamilton and had never dabbled in anything stronger than the occasional drink.
To the outsider, Hamilton in the 1960s seemed a cold, conservative place, a gangly teenager of a city that had barely emerged from its provincial past. And infertile ground for the hardy seed of rock and roll.
But sprout there it did. Ivor Fisher and The Satellites and The Mods recorded a handful of singles, and musicians such as Chris Thompson (of The Paragons) and Garth Porter went on to find fame overseas — Thompson with Manfred Mann's Earth Band and Night, and Porter with Sherbet.
The Spectres grew out of the trio's early fascination with folk music.
Based around the nucleus of brothers Robert and Greg O'Donnell, and drummer Sean Kelly, The Spectres grew out of the trio's early fascination with folk music.
Greg O'Donnell: "My brother and I started playing guitar with serious intent around the age of 12. Influences at that point were mostly folk groups – the Kingston Trio springs to mind.
"With a school friend, Sean Kelly, on bongos (someone had to be the drummer), a group was born. We called ourselves The Spectres and played around at parties. A major event for us at that time was the Johnny Cooper Talent Contest, which we made the finals of, after many tedious appearances on semi-finals/quarter finals."
The Spectres were also picking up gigs around town, churning out Cliff and The Shadows' 'Apache' up to six times a night at venues like their regular monthly spot at Tauwhare War Memorial Hall, a few kilometres out of Hamilton.
Then The Beatles struck Hamilton. In their wake emerged The Stoners, The Mods, The Paragons and The Spectres – this time re-christened as The Trends. The acts were all playing young sounds. They were young upstarts challenging the Saturday night status quo of The Starlight Ballroom and long standing rock and roll champions, The Satellites Showband.
Greg O'Donnell: "We changed our name to The Trends and became regular performers at a new club called The Three Musicians in the (now demolished) Embassy Theatre in Victoria Street." Run by enthusiast Mike Henri, the club gave young bands a chance to cut their teeth in a more serious fashion. The club also featured touring bands such as The Rayders and The Pleazers.
But it wasn't enough for the notorious Stoners, a hard bunch of rebellious farm boys from the Waikato, who had an affection for The Beatles, and later, The Pretty Things. They wanted in on the Tauwhare Hall gig.
Kitted out with the latest mod gear and boasting the loudest equipment around, they showed up one evening and promptly demanded to play, succeeding in persuading the hall committee to let them share the gig with The Trends.
The Trends were stretching out into the Waikato province hinterlands, playing at surrounding towns such as Morrinsville, Te Awamutu and Thames to supplement their city shows. One memorable occasion took them to coastal city Tauranga to play at the Embers, the teen nightclub run by original Four Fours drummer, Trevor Spitz.
Robert O'Donnell: "Trevor Spitz took us to one side before the show to tell us there were a few rockers around. We'd only been playing a few moments when Ken Murphy (Trends guitarist), who'd had a lot of mates come over with him, suddenly dropped his guitar on stage and shot out the door. He came back with his shirt ripped and nose bloody. He'd been out helping his mates fight these rockers in the street."
As The Trends emerged to pack their gear into the trailer, they were surrounded by rockers, who insisted the band play at their early morning party.
Warned of the continued presence of troublemakers outside the venue, they lingered later than usual, into the early hours to avoid further trouble. But as The Trends emerged to pack their gear into the trailer, they were surrounded by rockers, who insisted the band play at their early morning party. To make sure the band complied, they sandwiched The Trends' vehicle between two cars on the drive down Tauranga's long main street (the Cameron Drive double lane motorway) with a third car hovering in the second lane beside The Trends.
Which worked fine until The Trends spotted a late night petrol station. They promptly veered into it and Robert O'Donnell raced for the phone, only to be confronted by the pump attendant, a friend of the rockers. Back on the road, the band searched for another escape route, finally ducking off down a dark side street and hiding until their kidnappers tired of the hunt.
Back in Hamilton, they continued to play around town with a set, which now included The Byrds, folk rock and more adventurous new American sounds.
In early 1966, Greg moved to Auckland to begin a graphic arts course. Robert followed a few months later and The Trends re-formed, scoring work at the Platterack and Top 20 clubs and a variety of school dances and functions, including an annual P&O cruise.
In 1967, following Robert's National Service stint, The Trends re-formed as The Music Convention, minus Ken Murphy, who went on to form The Real Thing, a vocal duo with former Sounds Unlimited vocalist (and HMV/EMI producer) Alan Galbraith. Murphy was replaced by keyboard player Graeme Webber, who the band met at Piha Beach, a popular surfing and holiday spot west of Auckland. The Trends played regularly there during summer at the surf club.
Out in the audience was a young surfer and would-be surf filmmaker.
Greg O'Donnell: "Graeme hadn't played in any bands before joining us – a true closet pianist. But he was soon coerced into the band's ranks."
Webber wasn't the only connection the band made at Piha. Out in the audience was a young surfer and would-be surf filmmaker, Andy McAlpine. More about him later.
Back in the city, the band scored a deal with RCA Records and were preparing to release their first single, 'Have You Seen My Limousine?'b/w 'Good Clean Fun'. Both songs were originals, recorded at Astor Studios with producer Wahanui Wynyard. It was released under the temporary Bob, Graeme, Sean and Greg moniker.
Robert O'Donnell: "We were the first band to be released on the RCA label in New Zealand. We managed to get some pretty good airplay on the hot stations of the time like Hauraki (NZ's pirate radio station). They didn't know we were a New Zealand band as there was nothing to suggest that on the record."
And play it they did, at least until the band decided to do a bit of gimmicky advertising, parading around town with signs on their cars asking, "Have You Seen My Limousine?" and answering "It'll Be Here Soon" or "It's On The Radio". They also filmed a Benny Hill-like video in a Gillies Ave quarry to go with the song.
Robert O'Donnell: "It was at that stage we decided to go to Hauraki to get an interview on air. I spoke to [Hauraki DJ] Peter Telling. Once it was out that we were a New Zealand band, we just tumbled right off the song list."
"Before that they'd been saying on-air, 'Here's the latest band out of California.' "
Andy McAlpine had just asked them to record the soundtrack to his pioneering surf movie, Children Of The Sun.
The New Zealand knocking machine pissed the band off no end. By then, however, they had other things on their minds. Andy McAlpine had just asked them to record the soundtrack to his pioneering surf movie, Children Of The Sun, filmed around some of New Zealand and Australia's best surf spots with a cast of New Zealand waxies.
By now, Greg had left the graphic arts course and was working for the Auckland Star, the city's afternoon daily paper. Among his workmates was a recently arrived Indian cartoonist called Darryl Kirby, who owned a sitar.
With the Beatles and other British rockers delving into Indian music, O'Donnell decided to do likewise and borrowed the instrument.
Out of that strange sequence of events grew a startling series of sitar-driven surf instrumental tracks, including the crunching, fuzz-scorched 'Belly Board Beat' and the wiggy surf epic, 'Theme from Children of the Sun', all recorded after sitting down and watching the film's silent rough cut. The band then decided the film had fourteen moods in all and proceeded to arduously piece together the songs in the studio with Wahanui Wynyard, where not a beat could be out of place without throwing out the timing with the visual sequences.
The movie went on to garner good local reviews and was shown in New Zealand and Australia, gaining some encouraging words from American surf movie guru Bruce Brown along the way.
Greg O'Donnell remembers, "I don't think we regarded ourselves as a true surf music group although our presence at Piha and our involvement in the film did influence us to a degree. Certainly in our repertoire there were Beach Boys covers and the odd Ventures surf instrumental."
'Footprints On My Mind' used the same sitar sound as their surf record, but introduced hilarious druggy lyrics.
The Music Convention's previous single had been just as strange – from the surf instrumental band that didn't surf came a psychedelic pop single from a band that didn't take drugs. 'Footprints On My Mind' used the same sitar sound as their surf record, but introduced hilarious druggy lyrics, containing many acid images and references.
The Music Convention hadn't finished with movies yet either. They were asked to record a song based on the 1968 film The Charge of the Light Brigade, to play in theatres around New Zealand. The resulting song, 'Ballad of the Light Brigade' was sound effect overkill city with the band's original song competing with cannon fire, trumpets and other battle sounds. Much more interesting was the flipside, a version of Chuck Berry's 'Berry Rides Again', which along with their previous single, a version of Harry Nilsson's 'One', had arrived at RCA as a demo from America. (RCA wanted The Smoke to record it but they declined.)
'One' gained good airplay on release, but quickly dropped from the charts when the Bee Gees recorded a version shortly afterward.
And that's where we leave The Music Convention. There would be more bands of course, right up to the present day, and the recruitment of The Bluestars' Rick van Bokhoven along the way, but the remarkable Children Of The Sun EP and 'Footprints On My Mind' are the band's lasting legacy.
The Music Convention: Bob O'Donnell, Graeme Webber, Greg O'Donnell, Sean Kelly
Footsteps On My Mind
The early 1969 lineup of The Music Convention: Robert O'Donnell, Graeme Webber, Sean Kelly, Rick van Bokhoven and Greg O'Donnell
Larry Killip
Ngā Taonga entry for Children of the Sun
Graham Reid on The Music Convention
Ken Murphy - guitar
Robert O'Donnell - bass, vocals
Greg O'Donnell - guitar, vocals
Sean Kelly - drums
Graeme Webber - keyboards


text:
module Ladder
  module Searchable
    module Resource
      extend ActiveSupport::Concern

      ##
      # Serialize the resource as JSON for indexing
      #
      # @see Elasticsearch::Model::Serializing#as_indexed_json
      #
      # @return [Hash] a serialized version of the resource
      def as_indexed_json(*)
        respond_to?(:serialized_json) ? serialized_json : as_json(except: [:id, :_id])
      end

      module ClassMethods
        ##
        # Specify type of serialization to use for indexing;
        # if a block is provided, it is expected to return a Hash
        # that will be used in lieu of {#as_indexed_json} for
        # serializing the resource in the index
        #
        # @return [void]
        def index_for_search(&block)
          define_method(:serialized_json, block) if block_given?
        end
      end
    end
  end
end


text:
Q: Describe the equivalence classes for each equivalence relation Let ~ be an equivalence relation on $\mathbb R^2$ such that $\left( x_1, y_1 \right)$ ~ $\left(x_2, y_2 \right)$ iff $y_1=y_2$.
Let ~ be an equivalence relation on $\mathbb R^2$ such that $\left(x_1, y_1 \right)$ ~ $\left(x_2, y_2 \right)$ iff $x^2_1 + y^2_1$ = $x^2_2 + y^2_2$.
Describe the equivalence classes for each equivalence relation above.
I am having difficulties understanding how to go about this problem. For the first relation, I think a geometric description may be the set of all horizontal lines on the Cartesian xy-plane, but I'm not sure if that's what I'm supposed to write. The second relation might be the set of circles, but I don't know.

A: Your hunches are correct.  For the first one, it's horizontal lines in the plane. For the second, it's circles centered at the origin.

redpajama_set_name: RedPajamaStackExchange


text:
Quinn Douglas
Twitter: QuinnDouglas_FS | Facebook: Quinn Douglas – Sports Journalist
Media Personality
Personal Pieces
May 8, 2020 May 8, 2020 Quinn Douglas1 Comment on The Games That Shaped Me: Chilly Beginnings
The Games That Shaped Me: Chilly Beginnings
It will probably come as a shock to some who haven't known me as long as others: I haven't always been the crazy, football-loving guy I am now. In fact, as little kid, I was on the opposite end of that spectrum.
I played video games like my life depended on it. A Nintendo DS went with me everywhere I went, playing Pokemon Diamond and Pearl, Mario Kart, Sonic the Hedgehog and a smattering of other handheld games. We had a PlayStation 2 as well that had sports games, but I mostly played Spongebob games or Sonic the Hedgehog. I was as nerdy as you could imagine.
My interest in football at that point was a rather casual interest, I never got too invested into the game. I would sporadically attend games at nearby Iowa State due to close proximity and family who were season ticket holders but that was about it. I played football starting in second grade, because that's what every little boy in Madrid, Iowa did.
Me (top row, 2nd from the right) with my 2nd grade flag football team
Football was a way of life in my town and I hadn't quite adapted to that way of life. I'd rather sit at home and play video games or read a good book.
That all changed on November 8, 2008, watching a cold, blustery game between Iowa and Penn State.
I did not know a whole lot about Iowa to that point. I did know they had a sensational running back by the name of Shonn Greene, who was as electrifying an player I've seen come through Iowa to this day.
I remember in vivid color looking at the TV and seeing numerous fans wearing green clothing or wearing green paint on there bodies for an impromptu "Green Out" for the star running back from New Jersey.
The start of the game is something I recall pretty clear, Iowa's defense unleashed hell on the #3 Nittany Lions on their first drive and forced Penn State to punt from their own endzone. Two plays and two Shonn Greene runs later, it's already 7-0 Iowa. From there on to around late in the 3rd quarter, my memory is pretty hazy.
Where my memory does come back into play was around Ricky Stanzi's touchdown pass to Derrell Johnson-Koulianos. Iowa continued to hang around with the mighty Nittany Lions, who two weeks earlier, held off Ohio State in the Horseshoe.
Iowa's Darrell Johnson-Koulianos pulls in a 27-yard touchdown pass in front of Penn State's Kevin Cousins on Saturday, Nov. 8, 2008 at Kinnick Stadium in Iowa City. (The Gazette)
Penn State scored with do-it all receiver Derrick Williams at the very end of the third quarter to make it a nine-point advantage for Joe Paterno's squad. I thought Iowa's dreams were dashed, my father thought so to.
Instead, we witnessed the origin and birth of "Kinnick Voodoo".
Iowa managed to grind out a drive behind Greene and then-unknown quarterback Ricky Stanzi. Greene powered his way in to the endzone to cut the lead to two. Iowa's defense, which coined the phrase "6 seconds of hell", needed to get another stop.
For a few moments, it looked like Iowa missed their chance after a roughing the punter penalty gave Penn State a fresh set of downs and the chance to run clock and escape. However, a couple of bad plays and a penalty forced Penn State to throw on 3rd and a mile. Nittany Lions quarterback Darryl Clark completely missed his receiver and found Iowa safety Tyler Sash.
Iowa's Tyler Sash returns an interception against Penn State during the fourth quarter at Kinnick Stadium in Iowa City on Saturday, Nov. 8, 2008. (Cliff Jette/The Gazette)
Iowa was back in business. I was as ecstatic as could be.
Were the Iowa freaking Hawkeyes about to beat the 3rd-ranked team in the entire country? It was something my 9-year old brain found hard to comprehend that this team, from our tiny state, could accomplish such a feat.
The Hawkeyes marched down the field, on a drive that helped create the legend of Ricky Stanzi, and got down into manageable field goal range. Embroiled in a kicking battle all season long, Kirk Ferentz called on Iowa City native Daniel Murray to send Iowa to victory.
You all know the rest:
Video: Greg Vrchoticky
I was in with both feet. Football was the game for me. The site of fans in black and gold (with smatterings of green too) hooked me not just on the Iowa Hawkeyes, but the game of football.
The old cliche is that there is nothing like the first time you fall in love with something. That was the night I fell in love with the game of football. No one who played on the field that night knew what they had done for me, and I doubt they still will after I write this. But, they were the spark to what's bound to be a lifelong obsession.
And for that, I can't thank them enough.
Published by Quinn Douglas
Junior at the University of Iowa, Play-by-Play Announcer at KRUI Radio, Journalism/Mass Communication Major	View all posts by Quinn Douglas
Categories Personal PiecesTags Daniel Murray, Iowa Hawkeyes football, Penn State Nittany Lions Football, Ricky Stanzi, Shonn Greene, The Games That Shaped Me
1 thought on "The Games That Shaped Me: Chilly Beginnings"
Pingback: The Games That Shaped Me V: Cy-Hawk Sentiment – Quinn Douglas
Previous OPINION: It's time to hold programs accountable for harboring hostile atmospheres against women
Next The Games That Shaped Me II: A Sequel in White
Location 304 Grand Ave, Iowa City, IA OR 418 Fairview Dr, Madrid, IA E-mail quinn-douglas@uiowa.edu


Take the inner diameter of 0.5cm, outside diameter 0.7cm of the newer tourniquet with L root, intercept the appropriate length (around the patient neck l weeks, tourniquet at both ends of the tube to open the outer casing fixed plate at both ends of the small hole of the LCM), and then the gauze band through the tourniquet, the knot in the outer casing fixed plate at both ends of the small hole, elastic to be able to insert a finger appropriate.
1. The surface of the tourniquet is smooth, even if it is stained with secretions, it is easy to clean with the ethanol cotton ball, which can effectively prevent bacteria from reproducing.
2. Because the tourniquet is a rubber product with good elasticity and smooth surface, it can effectively reduce the pressure and friction between the gauze belt and the neck, and enhance the awareness of the patient's comfort.
3. This method is easy to clean, easy to disinfect, and can effectively reduce the gauze belt and neck pressure and friction, so do not need to pad gauze, while the tourniquet can be soaked disinfection, repeated use, to some extent, reduce the patient's economic burden and hospital costs.
4. The use of this method does not need to pad the gauze, the fixed tracheotomy sleeve of the wonderful gauze belt replacement cycle has been greatly prolonged, so that nurses in the tracheotomy nursing workload has decreased, work efficiency has increased.


text:
Highway accident forced Against Me! tour to cancel show
Tours October 27, 2008 By Jane Cohen & Bob Grossweiner
Punk band Against Me! cancelled its October 23 concert at The Venue in Salt Lake City, UT, when their tour bus hit a patch...
Punk band Against Me! cancelled its October 23 concert at The Venue in Salt Lake City, UT, when their tour bus hit a patch of ice on Interstate 80 and skidded out of control earlier that morning. Thankfully, no one suffered any injuries, but the band's gear was thrown from the trailer and scattered all over the highway.
The accident occurred around 6:30 a.m. on October 23. On tour with Ted Leo and the Pharmacists and Future of the Left, Against Me! was en route to their gig that night in Salt Lake City.
Against Me! frontman Tom Gabel posted details of the incident in his blog, which in part, read: "Everyone was asleep when it happened. I didn't want to wake up. Moments before I was sleeping so deeply. I was annoyed. I woke to the sound of my friends screaming, various expletives, inarticulate gasps, the sensation of spinning, and the sound of crashing inside and outside the bus. My eyes opened to blackness. I immediately pressed my hands and feet into the roof of my bunk as hard as I could, bracing for what I did not know."
Gabel explained that when the bus finally came to a stop, it was almost on its side. The group's driver, Jeremy, first called out names to make sure everyone was safe before leaving the bus to move scattered equipment from the overturned trailer off the road.
"Everyone got out to help," Gabel wrote, quipping, "I always sleep with my pants on just in case something like this happens so that the last thing I have to worry about in the event of an emergency is where my pants are."
According to Gabel's statement, the trailer had broken free from its hitch during the skid and slammed into the front passenger side of the bus as it spun. Most of the band's equipment and merchandise were spilled cross the road before he trailer came to a rest in a ditch in the highway median.
Gabel said of the experience, "I am glad to be alive. First and foremost I am glad that we are unharmed, safe, alive."
Against Me! is on the road in the US through November 21 and then heads to Europe for shows December 1-11.


text:
Collecting area: Massachusetts
Abbe, Edward H.
Edward H. Abbe Papers
Ed Abbe in Bora Bora, 1987
Born in Syracuse, N.Y., in 1915 and raised largely in Hampton, Va., Edward Abbe seemed destined to be an engineer. The great nephew of Elihu Thomson, an inventor and founding partner in General Electric, and grandson of Edward Folger Peck, an early employee of a precursor of that firm, Abbe came from a family with a deep involvement in electrification and the development of street railways. After prepping at the Rectory and Kent Schools, Abbe studied engineering at the Sheffield School at Yale, and after graduation in 1938, accepted a position with GE. For 36 years, he worked in the Industrial Control Division in New York and Virginia, spending summers at the family home on Martha's Vineyard. After retirement in 1975, he and his wife Gladys traveled frequently, cruising both the Atlantic and Pacific.
Ranging from an extensive correspondence from his high school and college days to materials relating to his family's involvement in engineering, the Abbe collection offers an in depth perspective on an educated family. An avid traveler and inveterate keeper, Ed Abbe gathered a diverse assemblage of letters, diaries, and memorabilia relating to the history of the Abbe, Peck, Booth, Gifford, and Boardman families. The collection is particularly rich in visual materials, including albums and photographs, depicting homes, travel, and family life over nearly a century.
Gift of Edward Abbe, Mar. 2012
Abbe familyBoardman familyBooth familyElectrical engineersGeneral ElectricGifford familyKent School--StudentsPeck familyRectory School--StudentsYale University--Students
Abbe, Edward HAbbe, Gladys HowardAbbe, William ParkerPeck, Edward FPeck, Mary Booth
DiariesLetters (Correspondence)Photographs
Related collections: Connecticut, Family, Massachusetts (East), Photographs, Science & technology
Abramson, Doris E.
Doris E. Abramson Papers
Doris Abramson
After earning her masters degree from Smith College in 1951, Doris Abramson (class of 1949) returned to UMass in 1953 to become instructor in the English Department, remaining at her alma mater through a long and productive career. An historian of theatre and poet, she was a founding member of the Speech Department, Theatre Department, and the Massachusetts Review . In 1959, a Danforth grant helped Abramson pursue doctoral work at Columbia. Published in 1969, her dissertation, Negro Playwrights in the American Theatre, 1925-1969 , was a pioneering work in the field. After her retirement, she and her partner of more than 40 years, Dorothy Johnson, ran the Common Reader Bookshop in New Salem.
An extensive collection covering her entire career, Abramson's papers are a valuable record of the performing arts at UMass, her research on African American playwrights, her teaching and directing, and many other topics relating to her diverse interests in literature and the arts.
Gift of Dorothy Johnson, Apr. 2008
African-American theaterPoets--MassachusettsUniversity of Massachusetts Amherst--FacultyUniversity of Massachusetts Amherst. Department of Theater
Related collections: African American, LGBTQ, Massachusetts (West), Performing arts, Poetry, UMass (1947- ), UMass academics, UMass alumni, UMass faculty, Women
Activism of the 1980s
Activism of the 1980s Photograph Collection
Call no.: PH 012
Die-in at the Student Union
During the academic year 1986-1987, the campus at UMass Amherst was a hotbed of political protest, fueled in part by the US intervention in Central America. The arrival on campus of a CIA recruiting officer in November set off a string of demonstrations that attracted the support of activists Abbie Hoffman and Amy Carter, daughter of former president Jimmy Carter. The occupation of the Whitmore Administration Building was followed by a larger occupation of adjacent Munson Hall, resulting in a number of arrests. Hoffman, Carter, and eleven co-defendants were tried and acquitted on charges of disorderly conduct were tried in April 1987.
The Collection contains 61 mounted photographs of marches, demonstrations, and protests in Amherst and Northampton, Mass., taken by Charles F. Carroll, Byrne Guarnotta, and Libby Hubbard, all students at UMass Amherst. The photographs are a vivid record of campus and community activism, and particularly the mobilization against the CIA and American intervention in Central America, as well as the arrest and trial of Abbie Hoffman and Amy Carter.
Acquired Aug. 12, 1999
Amherst (Mass.)--PhotographsAnti-apartheid movements--MassachusettsCIA on Trial Project (Amherst, Mass.)Carter, AmyCentral America--Foreign relations--United StatesDemonstrations--MassachusettsHoffman, AbbieNorthampton (Mass.)--PhotographsStudent movementsUnited States--Foreign relations--Central AmericaUnited States. Central Intelligence AgencyUniversity of Massachusetts Amherst--Students
Carroll, Charles FGuarnotta, ByrneHubbard, LibbyRadical Student Union
Related collections: Antinuclear, Central & South America, Massachusetts (West), Peace, Photographs, Political radicalism, UMass (1947- ), UMass students
Acton Monthly Meeting of Friends
Acton Monthly Meeting of Friends Records
Call no.: MS 902 A286
Part of: New England Yearly Meeting of Friends Records
Acton Monthly Meeting of the Society of Friends began in 1956 as a worship group under care of Cambridge Monthly. By 1965, Acton was set off as a monthly meeting of its own, part of Salem Quarterly.
The records of Acton Monthly Meeting include a nearly complete set of minutes from its days as a worship group through its formal establishment as a monthly meeting to the present, along with less complete material on membership and finances. The minutes are somewhat sporadic in the early years, but have been regularly maintained since 1965.
Gift of New England Yearly Meeting of Friends, April 2017
Acton (Mass.)--Religious life and customsQuakers--MassachusettsSociety of Friends--Massachusetts
New England Yearly Meeting of Friends
Minutes (Administrative records)Newsletters
Related collections: Massachusetts (East), Quakers
Adams, William A.
William A. Adams Daybook
1 vol. 0.1 linear feet
Call no.: MS 624 bd
During the 1870s, William A. Adams maintained a blacksmithing shop close to the intersection of Walnut and Hickory Streets in Springfield, Mass. His trade ran from farriery to repairing iron work, wheels, and wagons, and situated as he was near the southern end of Watershops Pond, one of the industrial centers of the city, his customers ranged from local residents to manufacturing firms, the city, and the Armory.
The Adams account book contains approximately 150 pages containing brief records of blacksmithing work for a range of customers located in the immediate area. Among the more names mentioned are the grocers Perkins and Nye, W. and E.W. Pease Co., J. Kimberley and Co., and Common Councilman William H. Pinney and J. W. Lull, all of whom can be located within a few blocks of Adams' shop.
Acquired from Dan Casavant, 1999
Blacksmiths--Massachusetts--SpringfieldHorseshoers--Massachusetts--SpringfieldSpringfield (Mass.)--Economic conditions--19th century
Adams, William A
Daybooks
Related collections: Massachusetts (West), Trades
AFL-CIO Hampshire-Franklin Central Labor Council
AFL-CIO Hampshire-Franklin Central Labor Council Records
1 box 0.25 linear feet
The Hampshire-Franklin Central Labor Council is a democratically-elected body drawn from among AFL-CIO-affiliated unions in Hampshire and Franklin Counties, Mass. The Labor Council advocates for workers' interests at the state and local level and works with its members and communities on social and economic justice issues.
This slender collection consists of the minutes of monthly meetings of HFCLC for three decades beginning in 1977, with some brief gaps in the latter years.
Gift of Dale Melcher, Aug. 2016
Labor unions--Massachusetts
Minutes (Administrative records)
Related collections: Labor, Massachusetts (West)
Akin, Benjamin
Benjamin Akin Daybook and Ledger
1 vol. 0.25 linear feet
A tanner, currier, and shoemaker, Benjamin Akin was born into a prominent Bristol County family in Dartmouth, Massachusetts, on May 18, 1715. With a prolific and well-connected family and successful in his own business endeavors, Akin attained some stature in Dartmouth. First appointed town clerk in 1745, he filled that office from 1754-1770 and again from 1776-1780, adding the title "Esq." to his name by the 1760s. During the Revolutionary years, he served on the town's public safety committee. He died on April 10, 1802.
The Akin ledger offers insight into the fortunes of an 18th-century artisan during the most productive years of his life, as well as into the structure of a local community in southeastern Massachusetts. The ledger includes accounts of with customers for tanning and currying of calf and sheepskin, day-book entries, and accounts with the Town of Dartmouth for services performed at Town Clerk.
Acquired from Charles Apfelbaum, 1987
Artisans--MassachusettsDartmouth (Mass.)--History--18th centuryEarthquakes--MassachusettsShoemaking--MassachusettsTanning--Massachusetts
Akin, Benjamin, 1715-1802Akin, Eunice Taber, 1711-1762
Account booksDaybooks
Related collections: Manufacturing, Massachusetts (East)
Akin, Ebenezer, Jr.
Ebenezer Akin Account Book
A merchant, town clerk, part-owner of many ships, and involved citizen, Ebenezer Akin lived nearly all of his 87 years in the town of Fairhaven, Mass.
This miscellaneous personal ledger includes documentation of Ebenezer Akin's work as town clerk and includes accounts for ships he may have owned, entries made as an estate executor, accounts of expenditures for clothing and incidentals, and accounts of lot purchases and loans. The volume also contains genealogical information about the Blossom family of Bridgewater and the family of Benjamin and Eunice Akin, Ebenezer's great-grandfather.
Akin, Benjamin, 1715-1802Akin, EuniceBlossom familyClothing and dress--Prices--Massachusetts--FairhavenFairhaven (Mass.)--Economic conditions--19th centuryFairhaven (Mass.)--Politics and government--19th centuryHesper (Bark)Merchants--Massachusetts--FairhavenNapoleon (Ship)Shipowners--Massachusetts--FairhavenShipping--Massachusetts--FairhavenWilliam Rotch (Ship)Winthrop (Bark)
Akin, Ebenezer, 1816-
Account booksGenealogiesInventories of decedents estates
Related collections: Business & industry, Massachusetts (East), Personal finance
Albertson, Dean, 1920-
Dean Albertson Oral History Collection
A long-time faculty member at UMass Amherst, Dean Albertson was an historian of the twentieth century United States with a specialty in oral history. A veteran of the Second World War, Albertson received his BA from University of California Berkeley (1942) and doctorate from Columbia (1955), joining the Department of History at UMass in 1965 after several years at Brooklyn College. The author of books on Dwight Eisenhower, Claude Wickard (Franklin Roosevelt's Secretary of Agriculture), and the student movements of the 1960s, Albertson was interested throughout his career in new methods in research and teaching history. He died at his home in Longmeadow, Mass., on March 31, 1989, at the age of 68.
Dean Albertson's History 384 class at UMass Amherst, required students to conduct oral histories relating to a theme in contemporary U.S. history chosen each year. Between 1975 and 1977, Albertson's students interviewed social activists of the 1960s and early 1970s, participants and observers in the North End riots of 1975 in Springfield, Massachusetts, and war and nuclear power resisters. The collection includes transcripts of 15 interviews conducted during this period, as well as the students' papers, which put the transcripts into context.
Antinuclear movement--MassachusettsCivil rights--Massachusetts--Hampden CountyDemonstrations--Massachusetts--ChicopeeHistory--Study and teaching (Higher)--Massachusetts-- AmherstPolice shootings--Massachusetts--SpringfieldPolitical activists--Massachusetts--InterviewsPrison riots--New York (State)--atticaPuerto Ricans--Massachusetts--SpringfieldRiots--Massachusetts--SpringfieldSelma-Montgomery rights March, 1965.Springfield (Mass.)--Race relationsSpringfield (Mass.)--Social conditionsVenceremos BrigadeVietnamese Conflict, 1961-1975--Protest movements -- Massachusetts--SpringfieldWelfare rights movement--Massachusetts--SpringfieldWestover Air Force Base (Mass.)
Related collections: Antinuclear, Civil rights, Massachusetts, Massachusetts (West), Oral history, Political activism, Prison issues, Vietnam War


text:
Гавриил Иванович Романовский (, Воронеж — 20 января 1942, Карлаг) — российский пианист и музыкальный педагог.

Биография

Начало деятельности
Начал обучение музыке в Воронеже у преподавателя фортепиано Воронежской мужской гимназии В. Г. Ростроповича (деда Мстислава Ростроповича). В 1904 году окончил Санкт-Петербургскую консерваторию по классу фортепиано А. Н. Есиповой.

Концертировал с 1907 года, особенно известен как один из первых исполнителей произведений А. Н. Скрябина. В 1917 году участвовал в постановке В. Э. Мейерхольдом драмы М. Ю. Лермонтова «Маскарад» (Александринский театр), исполнив написанную к этому спектаклю музыку А. К. Глазунова. Постоянный участник камерных концертов, организованных А. И. Зилоти.

Активные годы
Ещё в дореволюционный период начал педагогическую деятельность. Среди учеников Романовского была Лидия Фотиева, впоследствии личный секретарь В. И. Ленина, благодаря чему в 1919—1920 годах Романовский выступил с циклом концертов для руководителей Советского государства в квартире А. Д. Цюрупы в Кремле. Концерт 19 ноября 1919 года, на котором присутствовал сам Ленин, отражён в советской исторической и мемуарной литературе.

С 1925 года Романовский преподавал в Музыкальном техникуме имени А. Н. Скрябина, который в 1929 году был объединён с Музыкальным техникумом имени братьев Рубинштейн в Музыкальный техникум при Московской консерватории. Среди его учеников — известный хоровой дирижёр Владислав Соколов, вспоминавший о Романовском:

Репрессия
В 1931 году вернулся в Воронеж, преподавал в музыкальном училище, продолжал концертировать. В последний раз выступил перед публикой 21 января 1941 года, в годовщину смерти Ленина, повторив программу концерта 1919 года, данного в присутствии вождя (Патетическая соната Бетховена и произведения Ф. Шуберта). После концерта был арестован и осуждён по ст.58-1 «а», 58-10 ч.1 и 121 УК РСФСР к высшей мере наказания за неодобрительные высказывания об условиях жизни крестьян и русской интеллигенции и отсутствии в магазинах продуктов питания и товаров первой необходимости. Приговор был заменён на 10 лет исправительно-трудовых лагерей с последующим поражением в гражданских правах на 5 лет. Отбывал наказание в Карагандинском исправительно-трудовом лагере (Казахстан), где и умер «от пеллагры и старческой дряхлости».

Реабилитирован в 1991 году за отсутствием состава преступления.

Литература
 Юрова Т. В., Бухонов К. Г. Судьбы злой рок. — Воронеж, 2006.

Примечания

Ссылки
 Юбилейная дата. Имена Воронежа
 Романовский в Энциклопедии музыки

Академические музыканты России
Выпускники Воронежской гимназии
Выпускники Санкт-Петербургской консерватории
Преподаватели Академического музыкального училища при Московской консерватории
Деятели культуры и искусства, репрессированные в СССР
Посмертно реабилитированные

redpajama_set_name: RedPajamaWikipedia


text:
How the Earth's Pacific plates collapsed
Scientists drilling into the ocean floor have for the first time found out what happens when 1 tectonic plate first gets pushed under another
IMAGE: This image shows Professor Arculus, The Australian National University. view more
Credit: Charles Tambiah & MNF
Scientists drilling into the ocean floor have for the first time found out what happens when one tectonic plate first gets pushed under another.
The international expedition drilled into the Pacific ocean floor and found distinctive rocks formed when the Pacific tectonic plate changed direction and began to plunge under the Philippine Sea Plate about 50 million years ago.
"It's a bit like a rugby scrum, with two rows of forwards pushing on each other. Then one side goes down and the other side goes over the top," said study leader Professor Richard Arculus, from The Australian National University (ANU).
"But we never knew what started the scrum collapsing," said Professor Arculus, a petrologist in the ANU Research School of Earth Sciences.
The new knowledge will help scientists understand the huge earthquakes and volcanoes that form where the Earth's plates collide and one plate gets pushed under the other.
As part of the International Ocean Discovery Program, the team studied the sea floor in 4,700 metres of water in the Amami Sankaku Basin of the north-western Pacific Ocean, near the Izu-Bonin-Mariana Trench, which forms the deepest parts of the Earth's oceans.
Drilling 1,600 metres into the sea floor, the team recovered rock types from the extensive rifts and big volcanoes that were initiated as one plate bored under the other in a process known as subduction.
"We found rocks low in titanium, but high in scandium and vanadium, so the Earth's mantle overlying the subducting plate must have been around 1,300 degrees Celsius and perhaps 150 degrees hotter than we expected to find," Professor Arculus said.
The team found the tectonic scrum collapsed at the south end first and then the Pacific Plate rapidly collapsed 1,000 kilometres northwards in about one million years.
"It's quite complex. There's a scissoring motion going on. You'd need skycam to see the 3D nature of it," Professor Arculus said.
Professor Arculus said that the new knowledge could give insights into the formation of copper and gold deposits that are often formed where plates collide.
The research is published in Nature Geoscience.
ABOUT THE INTERNATIONAL OCEAN DISCOVERY PROGRAM
The International Ocean Discovery Program (IODP) is the world's largest geoscience research program with 26 countries in its membership.
ANU hosts the office of the Australian and New Zealand IODP Consortium (ANZIC), which includes 15 universities and two government agencies involved in geoscience. The IODP was awarded $10 million in Australian Research Council over five years in the latest round of ARC funding.
More information about ANZIC is available at http://iodp.org.au.
Richard Arculus
Richard.Arculus@anu.edu.au
@ANUmedia
http://www.anu.edu.au/media
Nature Geoscience
Richard Arculus, The Australian National University (IMAGE)
http://www.anu.edu.au/news/all-news/how-the-earths-pacific-plates-collapsed
http://dx.doi.org/10.1038/ngeo2515
More in Earth Science
Correcting historic sea surface temperature measurements Harvard John A. Paulson School of Engineering and Applied Sciences
Artificial snowfall could save the West Antarctic ice sheet, but with high costs and risks American Association for the Advancement of Science
West Antarctic ice collapse may be prevented by snowing ocean water onto it Potsdam Institute for Climate Impact Research (PIK)
NASA finds tropical storm Danas northeast of the Philippines NASA/Goddard Space Flight Center
View all in Earth Science


As I reported earlier, a recent survey suggests 40% of Europeans expect their next car to be electric. If their expectations turn out to be even close to accurate, then we should expect a massive surge in electrification over the next decade or so, especially given the fact that electric cars make up about 2% of new car sales currently.
But it's not entirely implausible. And one of the reasons for that is the fact that cities and even entire countries are enacting restrictions on polluting, fossil fueled vehicles as an attempt to both clean up urban air quality and attempt to meet their Paris climate commitments.
The latest case in point? Bloomberg reports that Denmark will ban gas and diesel cars by 2030—ten years earlier than the UK unless the National Grid has its way—and it will aim instead to get 1 million electric or hybrid cars on the roads by then.
Of course, it goes without saying that electric cars are still cars. And bike- and pedestrian-friendly development will always be preferable to car-centric efforts of any sort. But it would be hard to accuse Denmark and the Danes of not investing in cycling.
And I'm pretty sure that even in Danish towns and cities, cyclists would quite welcome biking in an environment with fewer tailpipes clogging up their lungs.


Don't underestimate Town North Mazda. They don't have one of those new palacial facilities, but they're very good. Everyone is very helpful and nothing about the purchase or finance process is pushy or sneaky.
Wonderful experience the coustomer service was absolutely amazing. No pressure purchasing my vehicle and no extra fees or gimmicks.
No stress service. Easy drop off, easy pick up.
Victor Bernal and Steve Spurrier are always great to work with. They are true professionals. Great dealership. Small enough that they know you by name, but large enough to serve your needs.
My experience was with the Used Dealership. I can't say enough good things about this place. Like so many people, my car was totaled in the recent hail storm. I found a listing for a used car online and Sammy called me back. Although I was literally all over the place and calling and texting him, he patiently helped me find a car when the one I inquired about was sold. He stayed late the day I came in and helped me find the PERFECT vehicle for an unbelievable price. I ended up purchasing a vehicle that didn't even have the pics online yet. Between Sammy and Frank in Finance, they helped me map out the best options for me. Even picking up the car was dream, even though it's used, it was SO clean and looked like a brand new car! Great people, great service, good selection of vehicles. Thanks so much Sammy for an AWESOME experience! I highly recommend this place to anyone!
Great service and friendly people. Never dissapointed with this dealership.
The service manager was very professional and pleasant and did not try to upsell us. I was quite surprised when the price of the oil change using synthetic oil was only $59. We had been going to the fast lube places previously and they charge more. Apparently Mazda understands that a low price oil change brings customers in for other service. We will definitely be using Mazda in the future for service.


Are you still building these?
If he is, I can strongly recommend them, they work really well.
If not, I have a earlier version Ady made that allows the fitment of two panniers rather than just one on the near side that I might as well sell as I have not used it for 3 years! I only changed this because I preferred the gun box on the offside.
A PM would have been better as I don't get on the forum every day.
I have no intention to produce those again - too much faff.
I may do the double racks eventually but the ones that I did for TJRL are VERY strong and a neat assembly using the fwd frames - go for them.
Thanks for the info Ady.


text:
Occupy Comics Review: love letter to an ongoing struggle
The Occupy Comics anthology was finally released a few days ago via Black Mask Comics and it is nothing short of breathtaking. It is an example of the the great things than can happen when the spirit of the DIY punk attitude converges with some of the greatest talents in the comic industry. What they have produced is a love letter to one of the most inspiring social movements in recent history. The comic is alive. It is a living, breathing collection of stories and art that will live on and, just like the movement itself, continue to inspire for generations to come.
The project was organized by Mat Pizzolo and funded by a simple Kickstarter page. A few of the of the contributors include Charlie Adlard (The Walking Dead), David Lloyd (V for Vendetta), Ben Templesmith (30 Days of Night), Joshua Dysart (Swamp Thing, Unknown Soldier), and the legendary Alan Moore (Watchmen, V for Vendetta, From Hell).
There are vignettes and short stories about everything Occupy: historical snippets of the Homestead Massacre, the Occupy Sandy efforts to assist people out in Far Rockaway, and the touching story of a family getting evicted from their home. All these works serve as powerful stories that encompass the struggle for social justice. Occupy Comics explores many different aspects of the movement, including a vignette from an "evil" banker that engenders sympathy from even the most anti-capitalist of Occupy supporters. The work is poignant while being non-partisan when it comes to the ideological vistas represented in OWS and that is one of its greatest strengths.
Anyone who participated in Occupy Wall Street before its main hub in Zuccottii Park was was brutally razed by Michael Bloomberg and his repressive army will immediately be transported back to the park where all of the great discussions, activism, interaction and protest took place on a daily basis. Reading through the comic is like opening a time capsule to the days when thousands of people were coming down to the park or marching against all of the impunity and criminality that precipitated the largest global economic crisis since the Great Depression.
One of the highlights of Occupy Comics is the brilliant essay by Alan Moore. His piece alone is well worth picking up the anthology. He wrote a 23 page article entitled, "Buster Brown at the Barricades: Foment in the Funnies and Comics as Counter-Culture." Many people have been writing off Mr. Moore lately because of his acridity and criticism of the mainstream comics writers and the industry as a whole. Perhaps he hasn't read a lot of their work. Perhaps he is a little jaded, but he is correct in his lamentations and opinions and his article proves that he continues to be passionate about comics and the power that they have wielded throughout history, both politically and as a story telling device. By reading his piece one gets the sense that his criticism comes from his sadness and frustration over the potential of what comics could be if they were not hijacked by the philistines in the entertainment industry.
His article also reads like the perfect condensed history of the comic book: From its beginnings on the back of stones that nameless toilers stacked on ancient Egyptian pyramids to the Prohibition bootleggers that smuggled their booze from Canada, comics have always been a medium where the dispossessed, illiterate and unloved found solace, where the origins of the political cartoon scribed on an unused carton in 17th century Italy spoke truth to power. Occupy Comics is the perfect manifestation of that power and potential. It is a throwback to the origins of comics and a contemporary protest piece that will stand the test of time and serve not as a monument to a movement defeated, but a rallying cry to a struggle that continues every hour of every day.
To purchase this comic go here
Filed under Capitalism, Comics, Economics, Politics, Uncategorized Tagged with Alan Moore, Black Mask Comics, Buster Brown, Charlie Adlard, Comic Book History, Comic Book Review, Joshua Dysart, Michael Bloomberg, Occupy Comics, Occupy Sandy efforts, occupy wall street, The Walking Dead, Unknown Soldier, V for Vendetta, wall street, Watchmen
The Walking Dead #100
SPOILERS AHEAD!
There was a great deal of hype built up leading to the release of The Walking Dead #100 and as it turns out it was well deserved. Those that have followed the comic from the beginning know that it has had plenty of drama and flesh devouring violence to satisfy the most macabre horror hounds. And it is this human drama that has time and time again made the hyper-violence and gore all the more significant, and therefore not gratuitous to any extent.
Negan and Company
Rick and his inner core of followers are tough as hell and have survived the most desperate and destitute of situations. From The Governor's sadism on Michonne and Rick, to the crazed cannibals in "Fear the Hunters," Rick and the others have proven that they are not to be fucked with– until now that is. Enter Negan, he is shaping up to be one of the most villainous and powerful survivors that Rick and his cadre have hitherto encountered. Just when you think the Governor's magnitude cannot be matched we have one of the most cherished characters getting his face turned into ground zombie slough.
It was unclear to many what issue 100 was going to entail. Many were most definitely expecting more of a panoramic of bloodshed, but instead we were thrust into an intimate and brutal execution of one of our favorite personalities, Glenn. In a post-apocalyptic world Glenn has often been the source of humor and affection, as well as a new found father to be, it makes his death all the more powerful and heart-wrenching. When he is savagely beaten to death by Lucille, the barbwire wrapped baseball bat, Negan does it in such a way that one can only cringe at the normality with which Negan kills him. It was quite honestly hard to read, especially when he is uttering Maggie's name right before Lucille and Negan kiss him in the jaw.
One can only anxiously anticipate what is going to happen next, and that is what comics are all about. Will Rick and the others be enslaved by Negan? Everyone knows that will not end well for Rick because he is the undisputed alpha-dog. How about Michonne? Who is she going to wreak vengeance on? Will the hilltop acquiesce or revolt? And what about that asshole with the half burnt face? I am sure we have not seen the last of him. Now that Kirkman and Adlard have everyone even emotionally invested with issue 100, the assault on Andrea and the others might prove to be even more sinister. These are the questions that make this the best selling indie comic in a long time. At a solid 380k sellout of the first printing the future is bright for The Walking Dead and other creator driven projects.
Filed under Comics Tagged with Comics, Negan, robert Kirkman, The Walking Dead


text:
Phyllonorycter mongolicae är en fjärilsart som först beskrevs av Tosio Kumata 1963.  Phyllonorycter mongolicae ingår i släktet guldmalar, och familjen styltmalar. Inga underarter finns listade i Catalogue of Life.

Källor

Externa länkar

Guldmalar
mongolicae


text:
Anti-Greta
Climate activist Greta Thunberg from Sweden is only 17 years old. That has not stopped conservatives from attacking her. They are attacking and bullying a child for saying something they don't want to hear. Even the president (sic) of the United States has engaged in bullying her. She's a child. Now get this: An energy company distributed a sexually graphic image of Greta.
X Site Energy Services from Alberta, Canada initially claimed they were not responsible for the image of a child being sexually attacked. But after it was reported that an employee of the company was handing out the image on stickers, they've accepted full responsibility and have apologized. In a statement, the company says, "Oh my God! Who knew that depicting a child being sexually assaulted could burn us? We totally lost our minds in this new era were being cruel and acting like depraved, troglodyte assholes amount to humor and is the new thing for conservatives and climate denialists. Maybe in this era of Trumpism, we got carried away. Also, sorry we lied about it too. Our bad. We'll try to stop being dicks."
OK. I made that up. That's what their statement should have said. It actually said that it's "committed to recovering and destroying the decals we distributed." Note that "we" in there. The statement added, "Management (dicks) accepts full responsibility and effective immediately, has made organizational changes to reflect this." Now, the company is discussing a code of conduct with its employees as it seeks to maintain a "safe and respectful workplace."
Here's a free tip for oil companies: If you have to educate your employees that distributing child pornography, with or without your company's logo on it, is bad, then you're probably fishing in the wrong talent pool.
Greta visited Alberta last year and Edmonton-based artist Aja Louden painted a mural of her on a wall…which was later defaced with a slur and a pro-oil message.
At least the right-wing, oil-company funded think tank, Heartland Institute, didn't resort to child porn to attack Great. Nope. They went out and got their own Greta. She's the anti-Greta.
Her name is Naomi Seibt and she's from Germany, where people used to goose-step (this is about to come up again, so pay attention). Naomi isn't just on the same side as the Heartland Institute. She's being paid by them. The heavy thinkers at Heartland have always been anti-science because they're a financial tool for fossil fuel companies. Think tanks are businesses set up where billionaires and companies hire them to write their dogma, thus giving the appearance it's coming from elsewhere and has credibility (and nobody hires me to write anything). Heartland hired Naomi to produce YouTube videos and to be the anti-Greta. It's not my viewpoint they market her as the anti-Greta. They literally describe her as the anti-Greta.
Naomi is 19 and she said her interest in activism began out of concern about a wave of migration into Germany in recent years (people who aren't white and Christian). This may come as a big surprise to you but Naomi is white. Last weekend (this will be less of a surprise) she was speaking as CPAC (Conservative Political Asshole Committee) where the Heartland Institute sponsors a bunch of anti-science shit and Donald Trump speaks. At this asshole event, she praised a white nationalist (Nazi).
She praised Canadian alt-right commentator Stefan Molyneux and said his prior racist comments have been taken out of context.
The Southern Poverty Law Center, which monitors hate groups, says Molyneux "amplifies 'scientific racism,' eugenics and white supremacism," has hundreds of thousands of YouTube followers, and "has encouraged thousands of people to adopt his belief in biological determinism, social Darwinism and non-white racial inferiority." Basically, he's a Nazi.
I'm kinda getting tired of all these descriptions. Alt-right, white nationalist, Trump supporter, Donald Trump…let's just call them all Nazis.
Seibt said Molyneux is an "inspiration" for her work. When asked at the conference by a reporter if that still holds true, she said, "I've always been skeptical of the ideas of white nationalism, of identitarianism and white identity. However, I am an empiricist, and I could not help but notice that I could have peaceful, free, easy, civilized, and safe discussions in what is essentially an all-white country." She may as well have started her sentence, "I don't mean to sound like a racist but…"
She said, "I am still a fan, absolutely."
Did the Heartland Institute hire a Nazi to be their anti-Greta? Absolutely.
I'm starting to think that Naomi's concern for immigrants entering her nation doesn't have anything to do with economics, the climate, or science. She describes herself as an "empiricist," which is that you can't have knowledge without experience. That probably means she had a run-in with a brown person that freaked her out (like one cut in line at a movie and she was all like, "Oh, my God, they're everywhere. They probably have cousins!"). The knowledge I've gained from my experience (and I have a few years of that stuff on Naomi) is that nations and societies are richer and much better off with diversity of cultures. I believe in melting pots and I know it's the greatest strength and asset of our nation.
Seriously, Heartland? You couldn't find an anti-Greta who's not a Nazi? Germany is a very progressive nation now and while their alt-right, anti-immigrant movement (Nazis) is loud, they're small. Yet, somehow, you found a Nazi in present-day Germany. Now, before the CPAC thing is over, you may want to let Naomi go before she goosesteps all over the place…unless you plan to goosestep with her.
Heartland knows that to confront science, then you have to lie. You have to lie a lot. They've been doing it for years. In fact, it's their business model. They're comfortable with being liars. The question is, are you comfortable with being racist? Actually, it's probably not your first time.
To sum up, don't hire people who will distribute child porn with your company's logo on it (and maybe not any child porn. A conservative might be reading and that should probably be clear). Also, pay attention, Heartland…
…DON'T HIRE NAZIS!
Support the cartoonist.
You can help me continue to create cartoons, blogs, and videos by making a contribution. All support, large and small, is greatly appreciated. You can also support me by purchasing a signed print (8 1/2×11) for $40, or a signed poster (18×24) for $100 by clicking the PayPal button (just include a note if you're purchasing a print). If you want to support but don't want to use PayPal, you can send a contribution through the mail (address is on the contact page. Again, include a note for a print). I don't plan on going anywhere and your support will help guarantee that. Whether you support, can't. or just choose not to, please know that I am truly thankful that you visit my site and read my work.
You can purchase a signed print of this cartoon.
New Book: Tales From
Watch me draw.
Posted in Uncategorized and tagged AltRight, Clay Jones, claytoonz, Climate Change, Editorial cartoons, Greta Thunberg, Heartland Institute, KKK, Naomi Seibt, Nazis, Political Cartoons, racism, Science, White Nationalism on March 4, 2020 by clayjonz. 10 Comments
← Covid Cofefe
Conspiracy Pox →
Andréa says:
And in today's The Nib: https://thenib.com/seeing-double/
randumbthoughts2017 says:
After I saw this in the news last week, I knew that it was only a matter of time before you handled it, and I was not disappointed. 😉
clayjonz says:
Now I'm really glad I drew it.
It appears that the Hitler Youth is alive and well in Germany.
Paragraph 15, line 1:
Please change to read either "anti-Greta" or "Naomi". Your typomakes Greta sound like a racist, and though we know what you meant, a repuglycan will use it against you.
Fixed hours ago. Sheesh, people. Refresh from your email copy.
I was reading this on Word Press, so talk to them. We get what we get from them.
I have refreshed my WP five times now, and it still reads exactly the same. Just so you know.
I apologize. I did correct it but WP must have ignored that. Corrected again. Thank you for pointing it out. GRRRR, WP!!!!!!!
joebrown8780 says:
Naomi, is not a nazi. You should be sued for slander, you lying fuck.


Several years ago, we made our weekly sermon recordings available on iTunes and many of you enjoyed the ease of being able to have the newest sermons downloaded automatically to your computer, smart phone or tablet. Unfortunately, we had to quit offering this service due to some technical difficulties with our website.
It took us a while, but we've finally got the problem fixed! We are again offering our Sunday sermons on both iTunes and Google Play! (as well as here on our website) In the coming weeks, we also plan to make recordings available from our new Mid-Week service.
Check the appropriate link below if you'd like to subscribe!


Peter Brands may be one of the most famous modders in the world.
His most famous mod, the jaw-dropping "L3p D3sk," has been featured on TV news, modding forums, and popular sites such as Engadget and 9gag. It even placed 2nd in the Cooler Master Case Mod World Series 2012 Scratch Mod category.
The practice of building computers into tables wasn't something Peter invented. However, nearly every desk mod built afterward has taken a cue from the L3p D3sk.
Peter was like most young boys. He wanted to create destruction.
"I was always a weapons freak. I had a BB gun, and later traded it for a crossbow. But I hated it because it wasn't precise enough. So I made my own," Peter said.
"I took a piece of wood, PVC pipe, and wire. Then I took a clothespin to hold the wire, then you had a crossbow. The point of the arrow – we used a dart. The crossbows got so strong, if I shot it at a tree then the arrow point got stuck permanently inside," he said.
Peter continued to mod, each time getting more and more creative. He was also interested in liquid cooling, but his Cooler Master Stacker case just wasn't big enough.
Mod two Stackers together, of course.
And he did just that, much to his wife's chagrin.
Peter was on a Dutch cooling forum when he saw a wall mounted PC for the first time. He liked the idea of being able to change his liquid cooling loop without having to disconnect everything, lifting his heavy PC onto the kitchen table, and then putting it all back together. A wall mounted PC wouldn't be convenient… But a desk PC would be perfect.
"Summer vacation had just started. My parents had a camping place. So I went there with my laptop and installed Google Sketchup. For the next two weeks, I came up with ideas for the desk – hidden cable management, a backplate for the power supply – stuff like that," Peter says.
As Peter was making progress on his build, he started posting it on various forums online. One of the forums he posted it to was Tweakers.net – the largest Dutch PC forum.
That dream slowly started coming true. As his mod got more popular, companies were contacting him.
During this hectic time, Peter's daughter was born.
On the last night of the submission deadline, Peter borrowed a friend's DSLR camera and then put the photos online using his friend's hosting service. It was 3am when he went to bed.
That's when PC companies and news outlets started calling Peter, sending him parts for mods, and inviting him to different expos and tradeshows in countries like Germany, France, Turkey, and as far as the United States and Taiwan as a mod representative.
So How Does It Feel To Become a Modding Superstar?
"Of course, you are proud when you reach a goal. It's been fun traveling all around the world and meeting so many people. But modding is not something my friends or family really understands. My wife fully supports me, but it's just not her interest. She's like, 'Oh. That's nice,'" Peter laughs.
Whatever Peter does, you can be sure that you've never seen anything quite like it.


Indulge yourself with the Maldives holiday you have always dreamed of by booking a stay at the Embudu Village resort in South Male Atoll. A popular choice for those looking to experience Maldives without exceeding the budget, Embudu Village also entices with its regular diving excursions and elegant accommodation, which includes overwater bungalows. Facilities at Embudu Village include an on-site restaurant and the Serena Spa.
Discover the paradise of the Maldives without exceeding your budget by booking a stay at the enticing Embudu Village resort, in South Male Atoll.
Surrounded by shimmering lagoons and fringed by a white sand beach, the Embudu Village resort offers practical and comfortable accommodation, including a selection of lavish overwater bungalows.
A popular choice for those keen to explore the Maldives' breathtaking underwater world, Embudu Village offers numerous diving excursions, for both novices and experienced divers.
Facilities at Embudu Village include an on-site restaurant and the Serena Spa.
The Superior rooms at Embudu Village offer generous proportions and an airy décor to ensure you get the most from your stay on this pretty Maldivian island.
The Water Bungalow enjoys a privileged location above the lagoon for stunning views and easy access to the waters. Upgraded amenities include a satellite television.