text:
Three Groovy Tunes by Fun and Games
Posted by funky16corners on March 19, 2017
Posted in: Brian Wilson, Bubblegum, Buffalo Springfield, Culture, Iron Leg, Music, pop, Rock, Sunshine Pop, Texas music.	1 Comment
Dig the hype sticker on my copy!
Listen/Download – Fun and Games – The Grooviest Girl In the World
Listen/Download – Fun and Games – Something I Wrote
Listen/Download – Fun and Games – The Way She Smiles
The tunes you see before you today hail from a very groovy album that I picked up while digging several years ago.
I think that I had heard about Fun and Games, but had never heard their music, but the album gave off all kinds of the right kind of vibes (look, song titles, Gary Zekley credits etc) so I handed the man my money and took it home.
My initial reaction to the album wasn't ecstatic, but it improved greatly over multiple listens.
This has something to do with the fact that the band really has two fairly distinct sounds which are tied directly into the authorship of their songs.
The group originated in Houston, TX as the Sixpentz (45s on Kidd, and Brent) and worked their way through garage punk, folk rock and evolved into a more sophisticated harmony pop sound by the time they became the Fun and Games Commission (on single on Cinema) and eventually Fun and Games.
The group's original material is excellent and well developed, which is why you have to wonder why Uni had them record so many Gary Zekley/Mitch Bottler (who wrote hits for the Grass Roots, with Zekley also writing classics for the Yellow Balloon and the Clique among others) tunes (7 of the 11 songs on their LP), one Beach Boys cover (a really interesting reworking of 'Don't Worry Baby') alongside just three group originals.
This is not to say that the group's identity is completely lost inside of the Zekley/Bottler tunes ('Close to Carmel' and 'Topanga Canyon Road' are especially nice) but that there are moments where they sound like they're being "steered", if you will.
Thankfully, even in those moments, they seem to be trying to do something unusual anyway.
I'm including two of the group originals, and one of the Z/B songs to give you an idea of where they were coming from.
'The Grooviest Girl In the World' (like the album's title song) sounds like it was engineered specifically to latch onto the Kasenetz/Katz bubblegum avalanche – which is not a bad thing – but they also add a touch of sophistication (also evident in the album's title track) to the mix that makes it stand out. The record was a minor hit in late 1968 (Top 40 in a bunch of markets) but I suspect a flood of similarly sounding records stopped it from going further.
The two group originals I'm posting, 'Something I Wrote' and 'The Way She Smiles' were written by Joe Romano and Rock Romano (who I believe were brothers) respectively.
'Something I Wrote' has a Beatle-y touch of popsike to it, which reveals itself a little bit more as the song goes on (dig the tastefully applied sitar). Very groovy, yet not so far out that the teenyboppers would yank it off their record players.
'The Way She Smiles' is a little more sophisticated, in and Association/New Colony Six (MK2) way, with some wonderful group harmonies and lovely chord changes, as well as a guitar solo that sounds like it was lifted from a Buffalo Springfield record.
Apparently, due to band misbehavior, the label refused to promote the record, and they never got the chance to record again, which, considering the vast amount of potential shown on 'Elephant Candy' is a damn shame.
Though some of the group's tracks have appeared on comps (and the earlier Sixpentz material was reissued) if you want to hear all of 'Elephant Candy' you'll have to find yourself an original copy, which these days should set you back 30-50 bucks.
I hope you dig the tunes and I'll see you all next week.
← Testify! Episode #1
Testify! Episode #2 →
One comment on "Three Groovy Tunes by Fun and Games"
GL on March 21, 2017 at 5:13 pm said:
Cool stuff. The album did actually get a Cd reissue, on Revola, with extra tracks and excellent sleevenotes. Out of print now but a nice package and probably easier to track down than the original lp.


I am a Yankton native that has recently moved back to the area and am excited to join the team at Vision. As a new agent I look forward to assisting you in your home buying or selling needs. I will use my creativity and great attention to detail to provide you with a smooth and enjoyable experience. Call Today!


Enthusiast interior designer and creator, Aurélie Brunet studied in Belgium (at La Cambre Art and Design School of Brussels) and in France, where she currently runs her business. Deeply receptive to strong social impact projects, she soon focused on applied research within collective spaces, and more specifically on the concept of "better living together" through design as a mean of sharing.
This commitment became a reality when she founded the Wakup Studio, through which she creates tailored facilities for social needs, characterized by stimulating and fun scenarios. Respect of the person, integration of the marginalized, social diversity and alternative pedagogy are the key values at the heart of her activity.
Willing to propose creations with a lasting and effective impact, the Wakup Studio relies on a range of partners and invites users to share in the creative process. The contributors involved in the various phases of the project bring a full theoretical support (researchers, experts, etc.) and also a quality technical support (artists, digital experts, craftsmen, industrialists, etc.). Exchange with the different local actors is essential in order to bring out suitable proposals. The Wakup Studio offers a dialogue between inhabitants and associative, academic and municipal representatives.
In order to fine-tune the search, the studio is also involved in different communities in Europe, such as CivicWise (a collaborative planning network). These day-to-day collaborative culture experiments are an opportunity for the Wakup Studio to put a lot into community and territorial level projects, particularly on governance, communication, facilitation matters, organization of public events and development of collaborative tools.
Moreover, the interventions proposed by Wakup are actively relayed by networks such as Artefacts (Cultural cooperative for Activities and Employment – CAE) and Grizzly Family (network of multidisciplinary pedagogical interventions in collective spaces).


text:
Taiwanese Actress Josie Leung Just Turned 50, Netizens Says She Looks 20 Years Younger
How is she 50?!
By Toh Ziyi
Here's a new inductee into the 'Unbelievably Youthful-Looking Celeb' Hall of Fame —Taiwanese actress Josie Leung. The actress, whose Chinese name is Liang Jiarong, celebrated her 50th birthday on Wednesday (Aug 25).
And if you had to read Josie's age again, well, you're not alone.
'Cos let's be honest, Josie, who made her showbiz debut in 1991, does not look 50 at all.
Or as one netizen put it: "If you said you're 30, I'd believe it".
This is 50. Here's a pic of June bare-faced and rocking it
Josie's best known for acting in the 1998 drama, Sun Plants. She recently appeared in the 2021 drama, The Arc Of Life.
According to reports, Josie has a long-time boyfriend, whom she's been dating for the past 10 years. However, it appears that she has no intentions to tie the knot, having shared in an interview that she "doesn't believe in marriage". She also has no plans to have kids even though she likes children.
That's a 22-year-old Josie on the right
Josie also mused about turning the big 5-0 on Instagram.
She wrote: "I'm actually not a big birthday person, but I'm 50… It really does feel different from being 30 or 40. It's not about the numbers, but rather, after going through so many years, having lost, loved, suffered, as well as been emotional and happy, I've experienced more than I did when I was younger, and these experiences have also been carved even deeper in my heart. In the future, I only wish to be safe and healthy and for everyone too."
A post shared by 梁家榕 (@josiechang)
Netizens and fans flocked to wish Josie a happy birthday, with many commenting on how great she looks.
"You look just as good as you did in the past," wrote one netizen wrote, while another is convinced that the actress is "not 50" but "obviously 28 years old".
Photos: Josie Leung/Instagram
73-Year-Old Adam Cheng Reveals His Secret To Looking Youthful
Taiwanese Actress Joey Wong Is Still As Gorgeous As Ever At 51
TVB Actor Shek Sau, 73, And His Son, 41, Look So Youthful For Their Age
Wu Jing Called The "Most Romantic Man In China", Here's Why
Ex TVB Actress Sonija Kwok's 9-Year-Old Daughter Is Looking More & More Like Her
Nicholas Tse Went From Celeb Face Of Chinese Sports Brand XTEP To Shareholder
Squid Game's Oh Young Soo Turned Down Interview Requests After Historic Golden Globe Win 'Cos He Had A Theatre Performance The Next Day

redpajama_set_name: RedPajamaCommonCrawl


To what extent can we attribute climate extremes to global warming? What is the relationship between extreme events and poverty? And how will climate extremes in the future affect our efforts to eliminate extreme poverty? As governments turn their attention to implementing the Sustainable Development Goals and targets agreed in both Sendai and Paris in 2015, a better understanding of and the links between climate change and disasters is needed, as well as the impacts on patterns of poverty.
This event unpacks the science and reveal new insights. It challenges the common misconception that there are 'hot spots' of climate extremes and poverty. Drawing on new findings, the event brings together some of the world's leading thinkers on climate change and poverty, and explores implications for the post-2015 agreements.


Fantastic 10 acres of view land. Sweeping views of the valley to the north. Elevated and unique parcel of land. Property is on the high side of the wash and traverses over the top of the southern bank. Amazing views! Private and perfect spot to enjoy the peace and solitude of the great Mojave Desert.
•Great views, peace, quiet and night skies you will never forget!


The Lifesaving Society's Program Guide new January 2019 version is now in effect and available on the sauvetage.qc.ca website. It is also published in French. The managers of aquatic facilities and affilate members will find it very informative about trainings administration and teaching procedures. Please peruse it the Administration section of the Dashboard.


Angela Zepeda is President, Chief Marketing Officer of full-service marketing communications agency Lowe Campbell Ewald. In her role, she leads the agency in new business development, focusing on the external marketing and promotion of the agency across the U.S., as well as fostering the agency's key client relationships.
Zepeda has been with Lowe Campbell Ewald for more than a decade, instrumental in building the agency's Los Angeles office with organic growth of current clients, as well as being responsible for new business development. As President of Lowe Campbell Ewald's Los Angeles office, she worked hands-on to manage and successfully grow every account in the office including, Kaiser Permanente, Ghirardelli Chocolates, Chicken of the Sea, PIMCO Financial Services, Los Angeles Tourism & Conventions Board, Pasolivo Olive Oil, Keep Oakland Beautiful and Western Governors University. In fact, most notably under her leadership, she led the development of the award-winning Kaiser Permanente "Thrive" campaign. Now in its eleventh year, the work has extended beyond a brand campaign platform to effective one-to-one communications utilizing key touch points to intersect with consumers with relevant and personalized content.
Zepeda is a seasoned expert on marketing to women with a keen understanding of the emotional triggers involved in women's retail habits. She has spoken on this topic at various events including: ISSM CONVERGE Conference; the WLN Conference; the M2W Conference in Chicago; and the Marketing to Women Conference in Copenhagen, Denmark.
Zepeda's can-do, glass half full attitude perpetuates all aspects of her life, and makes her an excellent role model to Lowe Campbell Ewald employees, and to all women in the ad industry.
Prior to joining Lowe Campbell Ewald, Zepeda held roles at TBWA\Chiat\Day, Team One, Rapp Collins, Doner and FCB. Beyond her expertise in marketing to women, she has deep experience in key industry sectors, including automotive, healthcare, financial services and packaged goods.


It's time for some decorations and food fun for our Christmas in July!
Today is a favorite day among many people below the Mason-Dixon line. To celebrate, I thought I would share a classic recipe for this beloved Southern dish.
In a medium size bowl, beat the eggs with the water. In another bowl, combine the flour, salt, and black pepper.
Dip the chicken in the egg, and then coat in the flour mixture.
Heat the oil to 350 degrees F. Do not fill the pot more than 1/2 full with oil.
Fry the chicken in the oil until brown and crisp, no more than 15 minutes.


Brutalist clock of cast bronze and cast aluminum by Scottish/Spanish/American artist David Marshall (b. 1943), executed, circa 1970. Marshall settled in Spain in the mid-1960s, opening a workshop in Malaga in 1969 where he produced sculpture, jewelry, silverware and other accessories. He relocated to Colorado in 2007, where he currently resides. The present work has a powerful abstract visual presence, augmented by the combination of materials with their contrasting polished and textured surfaces. An exceptionally fine example of his work.
Excellent. Fine original condition with only minor wear consistent with age and use.


text:
Dichomeris simaoensis is a moth in the family Gelechiidae. It was described by Hou-Hun Li and Hong-Jian Wang in 1997. It is found in China (Hong Kong, Tibet, Yunnan) and Thailand.

The wingspan is 18–21 mm. The forewings are ochreous brown with a dark oblique blotch at one-third, a small dot at two-thirds of the cell and the costal margin with a black triangular blotch medially. There are several small dots at the distal one-third and on the termen. The hindwings are greyish brown, with the basal half of the costal margin greyish white.

References

Moths described in 1997
simaoensis

redpajama_set_name: RedPajamaWikipedia


text:
import random
import re
import time
import unicodedata

from eventlet import greenthread
from oslo_log import log as logging
from oslo_service import loopingcall
from oslo_utils import excutils
from oslo_utils import strutils
import six

from cinder import context
from cinder import exception
from cinder.i18n import _, _LE, _LI, _LW
from cinder.volume.drivers.ibm.storwize_svc import ssh as storwize_ssh
from cinder.volume import qos_specs
from cinder.volume import utils
from cinder.volume import volume_types

INTERVAL_1_SEC = 1
DEFAULT_TIMEOUT = 15
LOG = logging.getLogger(__name__)

class StorwizeHelpers(object):

    # All the supported QoS key are saved in this dict. When a new
    # key is going to add, three values MUST be set:
    # 'default': to indicate the value, when the parameter is disabled.
    # 'param': to indicate the corresponding parameter in the command.
    # 'type': to indicate the type of this value.
    svc_qos_keys = {'IOThrottling': {'default': '0',
                                     'param': 'rate',
                                     'type': int}}

    def __init__(self, run_ssh):
        self.ssh = storwize_ssh.StorwizeSSH(run_ssh)
        self.check_fcmapping_interval = 3

    @staticmethod
    def handle_keyerror(cmd, out):
        msg = (_('Could not find key in output of command %(cmd)s: %(out)s.')
               % {'out': out, 'cmd': cmd})
        raise exception.VolumeBackendAPIException(data=msg)

    def compression_enabled(self):
        """Return whether or not compression is enabled for this system."""
        resp = self.ssh.lslicense()
        keys = ['license_compression_enclosures',
                'license_compression_capacity']
        for key in keys:
            if resp.get(key, '0') != '0':
                return True
        return False

    def get_system_info(self):
        """Return system's name, ID, and code level."""
        resp = self.ssh.lssystem()
        level = resp['code_level']
        match_obj = re.search('([0-9].){3}[0-9]', level)
        if match_obj is None:
            msg = _('Failed to get code level (%s).') % level
            raise exception.VolumeBackendAPIException(data=msg)
        code_level = match_obj.group().split('.')
        return {'code_level': tuple([int(x) for x in code_level]),
                'system_name': resp['name'],
                'system_id': resp['id']}

    def get_pool_attrs(self, pool):
        """Return attributes for the specified pool."""
        return self.ssh.lsmdiskgrp(pool)

    def get_available_io_groups(self):
        """Return list of available IO groups."""
        iogrps = []
        resp = self.ssh.lsiogrp()
        for iogrp in resp:
            try:
                if int(iogrp['node_count']) > 0:
                    iogrps.append(int(iogrp['id']))
            except KeyError:
                self.handle_keyerror('lsiogrp', iogrp)
            except ValueError:
                msg = (_('Expected integer for node_count, '
                         'svcinfo lsiogrp returned: %(node)s.') %
                       {'node': iogrp['node_count']})
                LOG.error(msg)
                raise exception.VolumeBackendAPIException(data=msg)
        return iogrps

    def get_node_info(self):
        """Return dictionary containing information on system's nodes."""
        nodes = {}
        resp = self.ssh.lsnode()
        for node_data in resp:
            try:
                if node_data['status'] != 'online':
                    continue
                node = {}
                node['id'] = node_data['id']
                node['name'] = node_data['name']
                node['IO_group'] = node_data['IO_group_id']
                node['iscsi_name'] = node_data['iscsi_name']
                node['WWNN'] = node_data['WWNN']
                node['status'] = node_data['status']
                node['WWPN'] = []
                node['ipv4'] = []
                node['ipv6'] = []
                node['enabled_protocols'] = []
                nodes[node['id']] = node
            except KeyError:
                self.handle_keyerror('lsnode', node_data)
        return nodes

    def add_iscsi_ip_addrs(self, storage_nodes):
        """Add iSCSI IP addresses to system node information."""
        resp = self.ssh.lsportip()
        for ip_data in resp:
            try:
                state = ip_data['state']
                if ip_data['node_id'] in storage_nodes and (
                        state == 'configured' or state == 'online'):
                    node = storage_nodes[ip_data['node_id']]
                    if len(ip_data['IP_address']):
                        node['ipv4'].append(ip_data['IP_address'])
                    if len(ip_data['IP_address_6']):
                        node['ipv6'].append(ip_data['IP_address_6'])
            except KeyError:
                self.handle_keyerror('lsportip', ip_data)

    def add_fc_wwpns(self, storage_nodes):
        """Add FC WWPNs to system node information."""
        for key in storage_nodes:
            node = storage_nodes[key]
            wwpns = set(node['WWPN'])
            resp = self.ssh.lsportfc(node_id=node['id'])
            for port_info in resp:
                if (port_info['type'] == 'fc' and
                        port_info['status'] == 'active'):
                    wwpns.add(port_info['WWPN'])
            node['WWPN'] = list(wwpns)
            LOG.info(_LI('WWPN on node %(node)s: %(wwpn)s.'),
                     {'node': node['id'], 'wwpn': node['WWPN']})

    def add_chap_secret_to_host(self, host_name):
        """Generate and store a randomly-generated CHAP secret for the host."""
        chap_secret = utils.generate_password()
        self.ssh.add_chap_secret(chap_secret, host_name)
        return chap_secret

    def get_chap_secret_for_host(self, host_name):
        """Generate and store a randomly-generated CHAP secret for the host."""
        resp = self.ssh.lsiscsiauth()
        host_found = False
        for host_data in resp:
            try:
                if host_data['name'] == host_name:
                    host_found = True
                    if host_data['iscsi_auth_method'] == 'chap':
                        return host_data['iscsi_chap_secret']
            except KeyError:
                self.handle_keyerror('lsiscsiauth', host_data)
        if not host_found:
            msg = _('Failed to find host %s.') % host_name
            raise exception.VolumeBackendAPIException(data=msg)
        return None

    def get_conn_fc_wwpns(self, host):
        wwpns = set()
        resp = self.ssh.lsfabric(host=host)
        for wwpn in resp.select('local_wwpn'):
            if wwpn is not None:
                wwpns.add(wwpn)
        return list(wwpns)

    def get_host_from_connector(self, connector):
        """Return the Storwize host described by the connector."""
        LOG.debug('Enter: get_host_from_connector: %s.', connector)

        # If we have FC information, we have a faster lookup option
        host_name = None
        if 'wwpns' in connector:
            for wwpn in connector['wwpns']:
                resp = self.ssh.lsfabric(wwpn=wwpn)
                for wwpn_info in resp:
                    try:
                        if (wwpn_info['remote_wwpn'] and
                                wwpn_info['name'] and
                                wwpn_info['remote_wwpn'].lower() ==
                                wwpn.lower()):
                            host_name = wwpn_info['name']
                    except KeyError:
                        self.handle_keyerror('lsfabric', wwpn_info)

        if host_name:
            LOG.debug('Leave: get_host_from_connector: host %s.', host_name)
            return host_name

        # That didn't work, so try exhaustive search
        hosts_info = self.ssh.lshost()
        found = False
        for name in hosts_info.select('name'):
            resp = self.ssh.lshost(host=name)
            if 'initiator' in connector:
                for iscsi in resp.select('iscsi_name'):
                    if iscsi == connector['initiator']:
                        host_name = name
                        found = True
                        break
            elif 'wwpns' in connector and len(connector['wwpns']):
                connector_wwpns = [str(x).lower() for x in connector['wwpns']]
                for wwpn in resp.select('WWPN'):
                    if wwpn and wwpn.lower() in connector_wwpns:
                        host_name = name
                        found = True
                        break
            if found:
                break

        LOG.debug('Leave: get_host_from_connector: host %s.', host_name)
        return host_name

    def create_host(self, connector):
        """Create a new host on the storage system.

        We create a host name and associate it with the given connection
        information.  The host name will be a cleaned up version of the given
        host name (at most 55 characters), plus a random 8-character suffix to
        avoid collisions. The total length should be at most 63 characters.
        """
        LOG.debug('Enter: create_host: host %s.', connector['host'])

        # Before we start, make sure host name is a string and that we have at
        # least one port.
        host_name = connector['host']
        if not isinstance(host_name, six.string_types):
            msg = _('create_host: Host name is not unicode or string.')
            LOG.error(msg)
            raise exception.VolumeDriverException(message=msg)

        ports = []
        if 'initiator' in connector:
            ports.append(['initiator', '%s' % connector['initiator']])
        if 'wwpns' in connector:
            for wwpn in connector['wwpns']:
                ports.append(['wwpn', '%s' % wwpn])
        if not len(ports):
            msg = _('create_host: No initiators or wwpns supplied.')
            LOG.error(msg)
            raise exception.VolumeDriverException(message=msg)

        # Build a host name for the Storwize host - first clean up the name
        if isinstance(host_name, six.text_type):
            host_name = unicodedata.normalize('NFKD', host_name).encode(
                'ascii', 'replace').decode('ascii')

        for num in range(0, 128):
            ch = str(chr(num))
            if not ch.isalnum() and ch not in [' ', '.', '-', '_']:
                host_name = host_name.replace(ch, '-')

        # Storwize doesn't like hostname that doesn't starts with letter or _.
        if not re.match('^[A-Za-z]', host_name):
            host_name = '_' + host_name

        # Add a random 8-character suffix to avoid collisions
        rand_id = str(random.randint(0, 99999999)).zfill(8)
        host_name = '%s-%s' % (host_name[:55], rand_id)

        # Create a host with one port
        port = ports.pop(0)
        self.ssh.mkhost(host_name, port[0], port[1])

        # Add any additional ports to the host
        for port in ports:
            self.ssh.addhostport(host_name, port[0], port[1])

        LOG.debug('Leave: create_host: host %(host)s - %(host_name)s.',
                  {'host': connector['host'], 'host_name': host_name})
        return host_name

    def delete_host(self, host_name):
        self.ssh.rmhost(host_name)

    def map_vol_to_host(self, volume_name, host_name, multihostmap):
        """Create a mapping between a volume to a host."""

        LOG.debug('Enter: map_vol_to_host: volume %(volume_name)s to '
                  'host %(host_name)s.',
                  {'volume_name': volume_name, 'host_name': host_name})

        # Check if this volume is already mapped to this host
        mapped = False
        luns_used = []
        result_lun = '-1'
        resp = self.ssh.lshostvdiskmap(host_name)
        for mapping_info in resp:
            luns_used.append(int(mapping_info['SCSI_id']))
            if mapping_info['vdisk_name'] == volume_name:
                mapped = True
                result_lun = mapping_info['SCSI_id']

        if not mapped:
            # Find unused lun
            luns_used.sort()
            result_lun = str(len(luns_used))
            for index, n in enumerate(luns_used):
                if n > index:
                    result_lun = str(index)
                    break
            self.ssh.mkvdiskhostmap(host_name, volume_name, result_lun,
                                    multihostmap)

        LOG.debug('Leave: map_vol_to_host: LUN %(result_lun)s, volume '
                  '%(volume_name)s, host %(host_name)s.',
                  {'result_lun': result_lun,
                   'volume_name': volume_name,
                   'host_name': host_name})
        return int(result_lun)

    def unmap_vol_from_host(self, volume_name, host_name):
        """Unmap the volume and delete the host if it has no more mappings."""

        LOG.debug('Enter: unmap_vol_from_host: volume %(volume_name)s from '
                  'host %(host_name)s.',
                  {'volume_name': volume_name, 'host_name': host_name})

        # Check if the mapping exists
        resp = self.ssh.lsvdiskhostmap(volume_name)
        if not len(resp):
            LOG.warning(_LW('unmap_vol_from_host: No mapping of volume '
                            '%(vol_name)s to any host found.'),
                        {'vol_name': volume_name})
            return
        if host_name is None:
            if len(resp) > 1:
                LOG.warning(_LW('unmap_vol_from_host: Multiple mappings of '
                                'volume %(vol_name)s found, no host '
                                'specified.'), {'vol_name': volume_name})
                return
            else:
                host_name = resp[0]['host_name']
        else:
            found = False
            for h in resp.select('host_name'):
                if h == host_name:
                    found = True
            if not found:
                LOG.warning(_LW('unmap_vol_from_host: No mapping of volume '
                                '%(vol_name)s to host %(host)s found.'),
                            {'vol_name': volume_name, 'host': host_name})
        # We now know that the mapping exists
        self.ssh.rmvdiskhostmap(host_name, volume_name)

        LOG.debug('Leave: unmap_vol_from_host: volume %(volume_name)s from '
                  'host %(host_name)s.',
                  {'volume_name': volume_name, 'host_name': host_name})
        return host_name

    def check_host_mapped_vols(self, host_name):
        return self.ssh.lshostvdiskmap(host_name)

    @staticmethod
    def build_default_opts(config):
        # Ignore capitalization
        protocol = config.storwize_svc_connection_protocol
        if protocol.lower() == 'fc':
            protocol = 'FC'
        elif protocol.lower() == 'iscsi':
            protocol = 'iSCSI'

        cluster_partner = config.storwize_svc_stretched_cluster_partner
        opt = {'rsize': config.storwize_svc_vol_rsize,
               'warning': config.storwize_svc_vol_warning,
               'autoexpand': config.storwize_svc_vol_autoexpand,
               'grainsize': config.storwize_svc_vol_grainsize,
               'compression': config.storwize_svc_vol_compression,
               'easytier': config.storwize_svc_vol_easytier,
               'protocol': protocol,
               'multipath': config.storwize_svc_multipath_enabled,
               'iogrp': config.storwize_svc_vol_iogrp,
               'qos': None,
               'stretched_cluster': cluster_partner,
               'replication': False}
        return opt

    @staticmethod
    def check_vdisk_opts(state, opts):
        # Check that grainsize is 32/64/128/256
        if opts['grainsize'] not in [32, 64, 128, 256]:
            raise exception.InvalidInput(
                reason=_('Illegal value specified for '
                         'storwize_svc_vol_grainsize: set to either '
                         '32, 64, 128, or 256.'))

        # Check that compression is supported
        if opts['compression'] and not state['compression_enabled']:
            raise exception.InvalidInput(
                reason=_('System does not support compression.'))

        # Check that rsize is set if compression is set
        if opts['compression'] and opts['rsize'] == -1:
            raise exception.InvalidInput(
                reason=_('If compression is set to True, rsize must '
                         'also be set (not equal to -1).'))

        # Check that the requested protocol is enabled
        if opts['protocol'] not in state['enabled_protocols']:
            raise exception.InvalidInput(
                reason=_('Illegal value %(prot)s specified for '
                         'storwize_svc_connection_protocol: '
                         'valid values are %(enabled)s.')
                % {'prot': opts['protocol'],
                   'enabled': ','.join(state['enabled_protocols'])})

        if opts['iogrp'] not in state['available_iogrps']:
            avail_grps = ''.join(str(e) for e in state['available_iogrps'])
            raise exception.InvalidInput(
                reason=_('I/O group %(iogrp)d is not valid; available '
                         'I/O groups are %(avail)s.')
                % {'iogrp': opts['iogrp'],
                   'avail': avail_grps})

    def _get_opts_from_specs(self, opts, specs):
        qos = {}
        for k, value in specs.items():
            # Get the scope, if using scope format
            key_split = k.split(':')
            if len(key_split) == 1:
                scope = None
                key = key_split[0]
            else:
                scope = key_split[0]
                key = key_split[1]

            # We generally do not look at capabilities in the driver, but
            # protocol is a special case where the user asks for a given
            # protocol and we want both the scheduler and the driver to act
            # on the value.
            if ((not scope or scope == 'capabilities') and
                    key == 'storage_protocol'):
                scope = None
                key = 'protocol'
                words = value.split()
                if not (words and len(words) == 2 and words[0] == '<in>'):
                    LOG.error(_LE('Protocol must be specified as '
                                  '\'<in> iSCSI\' or \'<in> FC\'.'))
                del words[0]
                value = words[0]

            # We generally do not look at capabilities in the driver, but
            # replication is a special case where the user asks for
            # a volume to be replicated, and we want both the scheduler and
            # the driver to act on the value.
            if ((not scope or scope == 'capabilities') and
               key == 'replication'):
                scope = None
                key = 'replication'
                words = value.split()
                if not (words and len(words) == 2 and words[0] == '<is>'):
                    LOG.error(_LE('Replication must be specified as '
                                  '\'<is> True\' or \'<is> False\'.'))
                del words[0]
                value = words[0]

            # Add the QoS.
            if scope and scope == 'qos':
                if key in self.svc_qos_keys.keys():
                    try:
                        type_fn = self.svc_qos_keys[key]['type']
                        value = type_fn(value)
                        qos[key] = value
                    except ValueError:
                        continue

            # Any keys that the driver should look at should have the
            # 'drivers' scope.
            if scope and scope != 'drivers':
                continue
            if key in opts:
                this_type = type(opts[key]).__name__
                if this_type == 'int':
                    value = int(value)
                elif this_type == 'bool':
                    value = strutils.bool_from_string(value)
                opts[key] = value
        if len(qos) != 0:
            opts['qos'] = qos
        return opts

    def _get_qos_from_volume_metadata(self, volume_metadata):
        """Return the QoS information from the volume metadata."""
        qos = {}
        for i in volume_metadata:
            k = i.get('key', None)
            value = i.get('value', None)
            key_split = k.split(':')
            if len(key_split) == 1:
                scope = None
                key = key_split[0]
            else:
                scope = key_split[0]
                key = key_split[1]
            # Add the QoS.
            if scope and scope == 'qos':
                if key in self.svc_qos_keys.keys():
                    try:
                        type_fn = self.svc_qos_keys[key]['type']
                        value = type_fn(value)
                        qos[key] = value
                    except ValueError:
                        continue
        return qos

    def _wait_for_a_condition(self, testmethod, timeout=None,
                              interval=INTERVAL_1_SEC):
        start_time = time.time()
        if timeout is None:
            timeout = DEFAULT_TIMEOUT

        def _inner():
            try:
                testValue = testmethod()
            except Exception as ex:
                testValue = False
                LOG.debug('Helper.'
                          '_wait_for_condition: %(method_name)s '
                          'execution failed for %(exception)s.',
                          {'method_name': testmethod.__name__,
                           'exception': ex.message})
            if testValue:
                raise loopingcall.LoopingCallDone()

            if int(time.time()) - start_time > timeout:
                msg = (_('CommandLineHelper._wait_for_condition: %s timeout.')
                       % testmethod.__name__)
                LOG.error(msg)
                raise exception.VolumeBackendAPIException(data=msg)

        timer = loopingcall.FixedIntervalLoopingCall(_inner)
        timer.start(interval=interval).wait()

    def get_vdisk_params(self, config, state, type_id, volume_type=None,
                         volume_metadata=None):
        """Return the parameters for creating the vdisk.

        Takes volume type and defaults from config options into account.
        """
        opts = self.build_default_opts(config)
        ctxt = context.get_admin_context()
        if volume_type is None and type_id is not None:
            volume_type = volume_types.get_volume_type(ctxt, type_id)
        if volume_type:
            qos_specs_id = volume_type.get('qos_specs_id')
            specs = dict(volume_type).get('extra_specs')

            # NOTE(vhou): We prefer the qos_specs association
            # and over-ride any existing
            # extra-specs settings if present
            if qos_specs_id is not None:
                kvs = qos_specs.get_qos_specs(ctxt, qos_specs_id)['specs']
                # Merge the qos_specs into extra_specs and qos_specs has higher
                # priority than extra_specs if they have different values for
                # the same key.
                specs.update(kvs)
            opts = self._get_opts_from_specs(opts, specs)
        if (opts['qos'] is None and config.storwize_svc_allow_tenant_qos
                and volume_metadata):
            qos = self._get_qos_from_volume_metadata(volume_metadata)
            if len(qos) != 0:
                opts['qos'] = qos

        self.check_vdisk_opts(state, opts)
        return opts

    @staticmethod
    def _get_vdisk_create_params(opts):
        easytier = 'on' if opts['easytier'] else 'off'

        if opts['rsize'] == -1:
            params = []
        else:
            params = ['-rsize', '%s%%' % str(opts['rsize']),
                      '-autoexpand', '-warning',
                      '%s%%' % str(opts['warning'])]
            if not opts['autoexpand']:
                params.remove('-autoexpand')

            if opts['compression']:
                params.append('-compressed')
            else:
                params.extend(['-grainsize', str(opts['grainsize'])])

        params.extend(['-easytier', easytier])
        return params

    def create_vdisk(self, name, size, units, pool, opts):
        LOG.debug('Enter: create_vdisk: vdisk %s.', name)
        params = self._get_vdisk_create_params(opts)
        self.ssh.mkvdisk(name, size, units, pool, opts, params)
        LOG.debug('Leave: _create_vdisk: volume %s.', name)

    def get_vdisk_attributes(self, vdisk):
        attrs = self.ssh.lsvdisk(vdisk)
        return attrs

    def is_vdisk_defined(self, vdisk_name):
        """Check if vdisk is defined."""
        attrs = self.get_vdisk_attributes(vdisk_name)
        return attrs is not None

    def find_vdisk_copy_id(self, vdisk, pool):
        resp = self.ssh.lsvdiskcopy(vdisk)
        for copy_id, mdisk_grp in resp.select('copy_id', 'mdisk_grp_name'):
            if mdisk_grp == pool:
                return copy_id
        msg = _('Failed to find a vdisk copy in the expected pool.')
        LOG.error(msg)
        raise exception.VolumeDriverException(message=msg)

    def get_vdisk_copy_attrs(self, vdisk, copy_id):
        return self.ssh.lsvdiskcopy(vdisk, copy_id=copy_id)[0]

    def get_vdisk_copies(self, vdisk):
        copies = {'primary': None,
                  'secondary': None}

        resp = self.ssh.lsvdiskcopy(vdisk)
        for copy_id, status, sync, primary, mdisk_grp in (
            resp.select('copy_id', 'status', 'sync',
                        'primary', 'mdisk_grp_name')):
            copy = {'copy_id': copy_id,
                    'status': status,
                    'sync': sync,
                    'primary': primary,
                    'mdisk_grp_name': mdisk_grp,
                    'sync_progress': None}
            if copy['sync'] != 'yes':
                progress_info = self.ssh.lsvdisksyncprogress(vdisk, copy_id)
                copy['sync_progress'] = progress_info['progress']
            if copy['primary'] == 'yes':
                copies['primary'] = copy
            else:
                copies['secondary'] = copy
        return copies

    def _prepare_fc_map(self, fc_map_id, timeout):
        self.ssh.prestartfcmap(fc_map_id)
        mapping_ready = False
        wait_time = 5
        max_retries = (timeout / wait_time) + 1
        for try_number in range(1, max_retries):
            mapping_attrs = self._get_flashcopy_mapping_attributes(fc_map_id)
            if (mapping_attrs is None or
                    'status' not in mapping_attrs):
                break
            if mapping_attrs['status'] == 'prepared':
                mapping_ready = True
                break
            elif mapping_attrs['status'] == 'stopped':
                self.ssh.prestartfcmap(fc_map_id)
            elif mapping_attrs['status'] != 'preparing':
                msg = (_('Unexecpted mapping status %(status)s for mapping '
                         '%(id)s. Attributes: %(attr)s.')
                       % {'status': mapping_attrs['status'],
                          'id': fc_map_id,
                          'attr': mapping_attrs})
                LOG.error(msg)
                raise exception.VolumeBackendAPIException(data=msg)
            greenthread.sleep(wait_time)

        if not mapping_ready:
            msg = (_('Mapping %(id)s prepare failed to complete within the'
                     'allotted %(to)d seconds timeout. Terminating.')
                   % {'id': fc_map_id,
                      'to': timeout})
            LOG.error(msg)
            raise exception.VolumeDriverException(message=msg)

    def start_fc_consistgrp(self, fc_consistgrp):
        self.ssh.startfcconsistgrp(fc_consistgrp)

    def create_fc_consistgrp(self, fc_consistgrp):
        self.ssh.mkfcconsistgrp(fc_consistgrp)

    def delete_fc_consistgrp(self, fc_consistgrp):
        self.ssh.rmfcconsistgrp(fc_consistgrp)

    def stop_fc_consistgrp(self, fc_consistgrp):
        self.ssh.stopfcconsistgrp(fc_consistgrp)

    def run_consistgrp_snapshots(self, fc_consistgrp, snapshots, state,
                                 config, timeout):
        cgsnapshot = {'status': 'available'}
        try:
            for snapshot in snapshots:
                opts = self.get_vdisk_params(config, state,
                                             snapshot['volume_type_id'])
                self.create_flashcopy_to_consistgrp(snapshot['volume_name'],
                                                    snapshot['name'],
                                                    fc_consistgrp,
                                                    config, opts)
                snapshot['status'] = 'available'

            self.prepare_fc_consistgrp(fc_consistgrp, timeout)
            self.start_fc_consistgrp(fc_consistgrp)
            # There is CG limitation that could not create more than 128 CGs.
            # After start CG, we delete CG to avoid CG limitation.
            # Cinder general will maintain the CG and snapshots relationship.
            self.delete_fc_consistgrp(fc_consistgrp)
        except exception.VolumeBackendAPIException as err:
            for snapshot in snapshots:
                snapshot['status'] = 'error'
            cgsnapshot['status'] = 'error'
            # Release cg
            self.delete_fc_consistgrp(fc_consistgrp)
            LOG.error(_LE("Failed to create CGSnapshot. "
                          "Exception: %s."), err)

        return cgsnapshot, snapshots

    def delete_consistgrp_snapshots(self, fc_consistgrp, snapshots):
        """Delete flashcopy maps and consistent group."""
        cgsnapshot = {'status': 'available'}
        try:
            for snapshot in snapshots:
                self.ssh.rmvdisk(snapshot['name'], True)
                snapshot['status'] = 'deleted'
        except exception.VolumeBackendAPIException as err:
            for snapshot in snapshots:
                snapshot['status'] = 'error_deleting'
            cgsnapshot['status'] = 'error_deleting'
            LOG.error(_LE("Failed to delete the snapshot %(snap)s of "
                          "CGSnapshot. Exception: %(exception)s."),
                      {'snap': snapshot['name'], 'exception': err})
        return cgsnapshot, snapshots

    def prepare_fc_consistgrp(self, fc_consistgrp, timeout):
        """Prepare FC Consistency Group."""
        self.ssh.prestartfcconsistgrp(fc_consistgrp)

        def prepare_fc_consistgrp_success():
            mapping_ready = False
            mapping_attrs = self._get_flashcopy_consistgrp_attr(fc_consistgrp)
            if (mapping_attrs is None or
                    'status' not in mapping_attrs):
                pass
            if mapping_attrs['status'] == 'prepared':
                mapping_ready = True
            elif mapping_attrs['status'] == 'stopped':
                self.ssh.prestartfcconsistgrp(fc_consistgrp)
            elif mapping_attrs['status'] != 'preparing':
                msg = (_('Unexpected mapping status %(status)s for mapping'
                         '%(id)s. Attributes: %(attr)s.') %
                       {'status': mapping_attrs['status'],
                        'id': fc_consistgrp,
                        'attr': mapping_attrs})
                LOG.error(msg)
                raise exception.VolumeBackendAPIException(data=msg)
            return mapping_ready
        self._wait_for_a_condition(prepare_fc_consistgrp_success, timeout)

    def run_flashcopy(self, source, target, timeout, full_copy=True):
        """Create a FlashCopy mapping from the source to the target."""
        LOG.debug('Enter: run_flashcopy: execute FlashCopy from source '
                  '%(source)s to target %(target)s.',
                  {'source': source, 'target': target})

        fc_map_id = self.ssh.mkfcmap(source, target, full_copy)
        self._prepare_fc_map(fc_map_id, timeout)
        self.ssh.startfcmap(fc_map_id)

        LOG.debug('Leave: run_flashcopy: FlashCopy started from '
                  '%(source)s to %(target)s.',
                  {'source': source, 'target': target})

    def create_flashcopy_to_consistgrp(self, source, target, consistgrp,
                                       config, opts, full_copy=False,
                                       pool=None):
        """Create a FlashCopy mapping and add to consistent group."""
        LOG.debug('Enter: create_flashcopy_to_consistgrp: create FlashCopy'
                  ' from source %(source)s to target %(target)s'
                  'Then add the flashcopy to %(cg)s.',
                  {'source': source, 'target': target, 'cg': consistgrp})

        src_attrs = self.get_vdisk_attributes(source)
        if src_attrs is None:
            msg = (_('create_copy: Source vdisk %(src)s '
                     'does not exist.') % {'src': source})
            LOG.error(msg)
            raise exception.VolumeDriverException(message=msg)

        src_size = src_attrs['capacity']
        # In case we need to use a specific pool
        if not pool:
            pool = config.storwize_svc_volpool_name
        self.create_vdisk(target, src_size, 'b', pool, opts)

        self.ssh.mkfcmap(source, target, full_copy, consistgrp)

        LOG.debug('Leave: create_flashcopy_to_consistgrp: '
                  'FlashCopy started from  %(source)s to %(target)s.',
                  {'source': source, 'target': target})

    def _get_vdisk_fc_mappings(self, vdisk):
        """Return FlashCopy mappings that this vdisk is associated with."""
        mapping_ids = []
        resp = self.ssh.lsvdiskfcmappings(vdisk)
        for id in resp.select('id'):
            mapping_ids.append(id)
        return mapping_ids

    def _get_flashcopy_mapping_attributes(self, fc_map_id):
        resp = self.ssh.lsfcmap(fc_map_id)
        if not len(resp):
            return None
        return resp[0]

    def _get_flashcopy_consistgrp_attr(self, fc_map_id):
        resp = self.ssh.lsfcconsistgrp(fc_map_id)
        if not len(resp):
            return None
        return resp[0]

    def _check_vdisk_fc_mappings(self, name, allow_snaps=True):
        """FlashCopy mapping check helper."""
        LOG.debug('Loopcall: _check_vdisk_fc_mappings(), vdisk %s.', name)
        mapping_ids = self._get_vdisk_fc_mappings(name)
        wait_for_copy = False
        for map_id in mapping_ids:
            attrs = self._get_flashcopy_mapping_attributes(map_id)
            if not attrs:
                continue
            source = attrs['source_vdisk_name']
            target = attrs['target_vdisk_name']
            copy_rate = attrs['copy_rate']
            status = attrs['status']

            if copy_rate == '0':
                if source == name:
                    # Vdisk with snapshots. Return False if snapshot
                    # not allowed.
                    if not allow_snaps:
                        raise loopingcall.LoopingCallDone(retvalue=False)
                    self.ssh.chfcmap(map_id, copyrate='50', autodel='on')
                    wait_for_copy = True
                else:
                    # A snapshot
                    if target != name:
                        msg = (_('Vdisk %(name)s not involved in '
                                 'mapping %(src)s -> %(tgt)s.') %
                               {'name': name, 'src': source, 'tgt': target})
                        LOG.error(msg)
                        raise exception.VolumeDriverException(message=msg)
                    if status in ['copying', 'prepared']:
                        self.ssh.stopfcmap(map_id)
                        # Need to wait for the fcmap to change to
                        # stopped state before remove fcmap
                        wait_for_copy = True
                    elif status in ['stopping', 'preparing']:
                        wait_for_copy = True
                    else:
                        self.ssh.rmfcmap(map_id)
            # Case 4: Copy in progress - wait and will autodelete
            else:
                if status == 'prepared':
                    self.ssh.stopfcmap(map_id)
                    self.ssh.rmfcmap(map_id)
                elif status == 'idle_or_copied':
                    # Prepare failed
                    self.ssh.rmfcmap(map_id)
                else:
                    wait_for_copy = True
        if not wait_for_copy or not len(mapping_ids):
            raise loopingcall.LoopingCallDone(retvalue=True)

    def ensure_vdisk_no_fc_mappings(self, name, allow_snaps=True):
        """Ensure vdisk has no flashcopy mappings."""
        timer = loopingcall.FixedIntervalLoopingCall(
            self._check_vdisk_fc_mappings, name, allow_snaps)
        # Create a timer greenthread. The default volume service heart
        # beat is every 10 seconds. The flashcopy usually takes hours
        # before it finishes. Don't set the sleep interval shorter
        # than the heartbeat. Otherwise volume service heartbeat
        # will not be serviced.
        LOG.debug('Calling _ensure_vdisk_no_fc_mappings: vdisk %s.',
                  name)
        ret = timer.start(interval=self.check_fcmapping_interval).wait()
        timer.stop()
        return ret

    def delete_vdisk(self, vdisk, force):
        """Ensures that vdisk is not part of FC mapping and deletes it."""
        LOG.debug('Enter: delete_vdisk: vdisk %s.', vdisk)
        if not self.is_vdisk_defined(vdisk):
            LOG.info(_LI('Tried to delete non-existent vdisk %s.'), vdisk)
            return
        self.ensure_vdisk_no_fc_mappings(vdisk)
        self.ssh.rmvdisk(vdisk, force=force)
        LOG.debug('Leave: delete_vdisk: vdisk %s.', vdisk)

    def create_copy(self, src, tgt, src_id, config, opts,
                    full_copy, pool=None):
        """Create a new snapshot using FlashCopy."""
        LOG.debug('Enter: create_copy: snapshot %(src)s to %(tgt)s.',
                  {'tgt': tgt, 'src': src})

        src_attrs = self.get_vdisk_attributes(src)
        if src_attrs is None:
            msg = (_('create_copy: Source vdisk %(src)s (%(src_id)s) '
                     'does not exist.') % {'src': src, 'src_id': src_id})
            LOG.error(msg)
            raise exception.VolumeDriverException(message=msg)

        src_size = src_attrs['capacity']
        # In case we need to use a specific pool
        if not pool:
            pool = config.storwize_svc_volpool_name
        self.create_vdisk(tgt, src_size, 'b', pool, opts)
        timeout = config.storwize_svc_flashcopy_timeout
        try:
            self.run_flashcopy(src, tgt, timeout, full_copy=full_copy)
        except Exception:
            with excutils.save_and_reraise_exception():
                self.delete_vdisk(tgt, True)

        LOG.debug('Leave: _create_copy: snapshot %(tgt)s from '
                  'vdisk %(src)s.',
                  {'tgt': tgt, 'src': src})

    def extend_vdisk(self, vdisk, amount):
        self.ssh.expandvdisksize(vdisk, amount)

    def add_vdisk_copy(self, vdisk, dest_pool, volume_type, state, config):
        """Add a vdisk copy in the given pool."""
        resp = self.ssh.lsvdiskcopy(vdisk)
        if len(resp) > 1:
            msg = (_('add_vdisk_copy failed: A copy of volume %s exists. '
                     'Adding another copy would exceed the limit of '
                     '2 copies.') % vdisk)
            raise exception.VolumeDriverException(message=msg)
        orig_copy_id = resp[0].get("copy_id", None)

        if orig_copy_id is None:
            msg = (_('add_vdisk_copy started without a vdisk copy in the '
                     'expected pool.'))
            LOG.error(msg)
            raise exception.VolumeDriverException(message=msg)

        if volume_type is None:
            opts = self.get_vdisk_params(config, state, None)
        else:
            opts = self.get_vdisk_params(config, state, volume_type['id'],
                                         volume_type=volume_type)
        params = self._get_vdisk_create_params(opts)
        new_copy_id = self.ssh.addvdiskcopy(vdisk, dest_pool, params)
        return (orig_copy_id, new_copy_id)

    def is_vdisk_copy_synced(self, vdisk, copy_id):
        sync = self.ssh.lsvdiskcopy(vdisk, copy_id=copy_id)[0]['sync']
        if sync == 'yes':
            return True
        return False

    def rm_vdisk_copy(self, vdisk, copy_id):
        self.ssh.rmvdiskcopy(vdisk, copy_id)

    @staticmethod
    def can_migrate_to_host(host, state):
        if 'location_info' not in host['capabilities']:
            return None
        info = host['capabilities']['location_info']
        try:
            (dest_type, dest_id, dest_pool) = info.split(':')
        except ValueError:
            return None
        if (dest_type != 'StorwizeSVCDriver' or dest_id != state['system_id']):
            return None
        return dest_pool

    def add_vdisk_qos(self, vdisk, qos):
        """Add the QoS configuration to the volume."""
        for key, value in qos.items():
            if key in self.svc_qos_keys.keys():
                param = self.svc_qos_keys[key]['param']
                self.ssh.chvdisk(vdisk, ['-' + param, str(value)])

    def update_vdisk_qos(self, vdisk, qos):
        """Update all the QoS in terms of a key and value.

        svc_qos_keys saves all the supported QoS parameters. Going through
        this dict, we set the new values to all the parameters. If QoS is
        available in the QoS configuration, the value is taken from it;
        if not, the value will be set to default.
        """
        for key, value in self.svc_qos_keys.items():
            param = value['param']
            if key in qos.keys():
                # If the value is set in QoS, take the value from
                # the QoS configuration.
                v = qos[key]
            else:
                # If not, set the value to default.
                v = value['default']
            self.ssh.chvdisk(vdisk, ['-' + param, str(v)])

    def disable_vdisk_qos(self, vdisk, qos):
        """Disable the QoS."""
        for key, value in qos.items():
            if key in self.svc_qos_keys.keys():
                param = self.svc_qos_keys[key]['param']
                # Take the default value.
                value = self.svc_qos_keys[key]['default']
                self.ssh.chvdisk(vdisk, ['-' + param, value])

    def change_vdisk_options(self, vdisk, changes, opts, state):
        if 'warning' in opts:
            opts['warning'] = '%s%%' % str(opts['warning'])
        if 'easytier' in opts:
            opts['easytier'] = 'on' if opts['easytier'] else 'off'
        if 'autoexpand' in opts:
            opts['autoexpand'] = 'on' if opts['autoexpand'] else 'off'

        for key in changes:
            self.ssh.chvdisk(vdisk, ['-' + key, opts[key]])

    def change_vdisk_iogrp(self, vdisk, state, iogrp):
        if state['code_level'] < (6, 4, 0, 0):
            LOG.debug('Ignore change IO group as storage code level is '
                      '%(code_level)s, below the required 6.4.0.0.',
                      {'code_level': state['code_level']})
        else:
            self.ssh.movevdisk(vdisk, str(iogrp[0]))
            self.ssh.addvdiskaccess(vdisk, str(iogrp[0]))
            self.ssh.rmvdiskaccess(vdisk, str(iogrp[1]))

    def vdisk_by_uid(self, vdisk_uid):
        """Returns the properties of the vdisk with the specified UID.

        Returns None if no such disk exists.
        """

        vdisks = self.ssh.lsvdisks_from_filter('vdisk_UID', vdisk_uid)

        if len(vdisks) == 0:
            return None

        if len(vdisks) != 1:
            msg = (_('Expected single vdisk returned from lsvdisk when '
                     'filtering on vdisk_UID.  %{count}s were returned.') %
                   {'count': len(vdisks)})
            LOG.error(msg)
            raise exception.VolumeBackendAPIException(data=msg)

        vdisk = vdisks.result[0]

        return self.ssh.lsvdisk(vdisk['name'])

    def is_vdisk_in_use(self, vdisk):
        """Returns True if the specified vdisk is mapped to at least 1 host."""
        resp = self.ssh.lsvdiskhostmap(vdisk)
        return len(resp) != 0

    def rename_vdisk(self, vdisk, new_name):
        self.ssh.chvdisk(vdisk, ['-name', new_name])

    def change_vdisk_primary_copy(self, vdisk, copy_id):
        self.ssh.chvdisk(vdisk, ['-primary', copy_id])

redpajama_set_name: RedPajamaGithub


Great news. Congratulations. I am ordering a copy!
Is there an electronic edition? I'm blind, and electronic editions make books much more easily accessible. I'm not a definite buyer, but am much less definitely a buyer if the book is not in electronic format.
After I received a hard copy, I read through it and found this book to be a solid compilation of data and evidence with sound and hopeful recommendations. Congratulations Darrin and thank you for providing us all with such helpful history and insights .
Congratulations and thanks for all the work you have put into this- look forward to the read. I need a good shot of optimism!


text:
Pardee Legal Research Center
The Resource Music lyrics and commerce : hearings before the Subcommittee on Commerce, Consumer Protection, and Competitiveness of the Committee on Energy and Commerce, House of Representatives, One Hundred Third Congress, second session, February 11 and May 5, 1994
Music lyrics and commerce : hearings before the Subcommittee on Commerce, Consumer Protection, and Competitiveness of the Committee on Energy and Commerce, House of Representatives, One Hundred Third Congress, second session, February 11 and May 5, 1994
The item Music lyrics and commerce : hearings before the Subcommittee on Commerce, Consumer Protection, and Competitiveness of the Committee on Energy and Commerce, House of Representatives, One Hundred Third Congress, second session, February 11 and May 5, 1994 represents a specific, individual, material embodiment of a distinct intellectual or artistic creation found in University of San Diego Libraries.
United States, Congress | House | Committee on Energy and Commerce | Subcommittee on Commerce, Consumer Protection, and Competitiveness.
United States, Congress | House | Committee on Energy and Commerce | Subcommittee on Commerce, Consumer Protection, and Competitiveness
Washington, U.S. G.P.O. | For sale by the U.S. G.P.O., Supt. of Docs., Congressional Sales Office, 1994
1 online resource (iii, 155 pages)
Music lyrics and commerce
hearings before the Subcommittee on Commerce, Consumer Protection, and Competitiveness of the Committee on Energy and Commerce, House of Representatives, One Hundred Third Congress, second session, February 11 and May 5, 1994
Erotic songs
Erotic songs -- United States
Music and youth -- United States
Obscenity (Law)
Obscenity (Law) -- United States
Popular music -- United States -- Texts
Sound recording industry
Sound recording industry -- United States
Violence in music
HeinOnline U.S. Congressional Documents Library
OCLCE
.E5515 1994 ONLINE
file reproduced from original
Master and use copy. Digital master created according to Benchmark for Faithful Digital Reproductions of Monographs and Serials, Version 1. Digital Library Federation, December 2002.
Pardee Legal Research CenterBorrow it

 Data from Music lyrics and commerce : hearings before the Subcommittee on Commerce, Consumer Protection, and Competitiveness of the Committee on Energy and Commerce, House of Representatives, One Hundred Third Congress, second session, February 11 and May 5, 1994 - University of San Diego Libraries

Data Citation of the Item Music lyrics and commerce : hearings before the Subcommittee on Commerce, Consumer Protection, and Competitiveness of the Committee on Energy and Commerce, House of Representatives, One Hundred Third Congress, second session, February 11 and May 5, 1994


text:
namespace cobalt {
namespace script {

class Tracer;

class Traceable {
 public:
  virtual ~Traceable() {}

  // Trace all native |Traceable|s accessible by the |Traceable|.  Any class
  // that owns a |Traceable| must implement this interface and trace each of
  // its |Traceable| members.  Note that here, "owns" means is accessible from
  // JavaScript, which means that weak and raw pointers must be traced in
  // addition to |std::unique_ptr|s and |scoped_refptr|s.  Consider, for
  // example, a list IDL interface, with parent and child references.  A C++
  // implementation backed by |scoped__refptr| will be forced to demote the
  // pointer from a child to a parent to a |base::WeakPtr| or raw pointer, in
  // order to break the reference cycle. In JavaScript however, holding a
  // reference to a child implies that the parent is still reachable, and
  // should not be garbage collected.
  virtual void TraceMembers(Tracer* tracer) = 0;

  // Whether the |Traceable| is a |Wrappable| or not.  This should never be
  // implemented by any class other than |Traceable| and |Wrappable|.
  virtual bool IsWrappable() const { return false; }
};

// Traverses |Traceable|s, while marking found JavaScript wrappers as
// reachable.
class Tracer {
 public:
  // Trace a |Traceable| by forwarding its wrapper (which is engine specific)
  // to the engine's internal tracer, or manually tracing reachable
  // |Traceable|s in the case where the wrapper did not exist.
  virtual void Trace(Traceable* traceable) = 0;

  void Trace(const Traceable& traceable) {
    Trace(const_cast<Traceable*>(&traceable));
  }

  template <typename T>
  void Trace(const scoped_refptr<T>& ptr) {
    Trace(ptr.get());
  }

  template <typename T>
  void Trace(const base::WeakPtr<T>& ptr) {
    Trace(ptr.get());
  }

  template <typename T>
  void Trace(const std::unique_ptr<T>& ptr) {
    Trace(ptr.get());
  }

  // Trace the items of a container of |Traceable|s, such as |std::vector|.
  template <typename T>
  void TraceItems(const T& items) {
    for (const auto& item : items) {
      Trace(item);
    }
  }

  // Trace the value part of a container of key value pairs, where the values
  // are |Traceable|s, such as |std::map|.
  template <typename T>
  void TraceValues(const T& key_value_pairs) {
    for (const auto& pair : key_value_pairs) {
      Trace(pair.second);
    }
  }

  // Note: If your new class wants to own a container of |Traceable|s that
  // does not have an iteration helper function here, you should add one.
};

}  // namespace script
}  // namespace cobalt

#endif  // COBALT_SCRIPT_TRACER_H_


In this episode, game designers Tim Schafer and Anna Kipnis (from Double Fine Productions) and former game journalists "Shoe" and Michael Donahoe (from EGM) take on T.I.M.E. Stories, the modular time-traveling board game from Asmodee and Space Cowboys.
Do Tim and Anna, two designers of some very famous point-and-click adventure games, dig this board-game take on the genre?
Plus, more hilarious reader mail with Seanbaby.


text:
Q: Pad a number with a zero I'm trying to pad zero to a number
a=010
printf "%04d" $a
0008

I need the "output" as "0010"
it's converting the value.
and even tried with typeset
a=010
typeset -RZ2 a
echo $a

when I use the same in my script I got the following error:
Invalid -R option

A: You can accomplish that by using a different conversion specifier, for example the "f" specifier. From the printf manual:

f, F
The double argument is rounded and converted to decimal notation in
  the style [-]ddd.ddd, where the number of digits after the
  decimal-point character is equal to the precision specification. If
  the precision is missing, it is taken as 6; if the precision is
  explicitly zero, no decimal-point character appears. If a decimal
  point appears, at least one digit appears before it.

But we don't really want a floating point representation of your number, so we must specify a precision of zero. This should do it:
a=010
printf "%04.0f" $a

I'm assuming you are using Linux, but this should also work with other flavours of Unix.

A: typeset -Z4 a will work with zsh or ksh.
When interpreted as a number, In POSIX sh and printf, if there's a leading zero, it's interpreted as an octal number. So, you need to strip those 0s first:
printf '%04d\n' "${a#"${a%%[!0]*}"}"

Or you could use awk that doesn't have that issue:
awk 'BEGIN{printf "%04d\n", ARGV[1]}' "$a"

A: Don't put a "0" at the beginning of the number -- it treats the number in the octal base. Simply assign the decimal number.
a=10
printf "%04d" $a
0010

If you are reading the numbers from somewhere else, you may consider removing the 0s at the beginning as follows:
a=0010
b=$(echo $a | sed 's/^0*//')
printf "%04d" $a
0008
printf "%04d" $b
0010

A: New answer using %08.0f
As %f is used to print decimal floating point, argument must be decimal.
So there is no risk to see argument interpreted as octal:
Do simply:
a=0010

a=`printf %08.0f $a`

or
a=$(printf %08.0f $a)

then
echo $a
00000010

This work find under any POSIX shell
Under bash
Using bash, you could avoid fork by using -v option of printf:
a=0010
printf -v a %08.0f $a
echo $a
00000010

Old answer (using %d)
Under POSIX shell
You can drop the left 0 character with the following:
a=00010
while [ "$a" != "${a#0}" ] ;do a=${a#0};done
printf "%08d" $a
00000010

As this doesn't fork a new command session, this could be quicker than using sed.
Under bash
You can force decimal interpretation with the following syntax:
a=000010
printf "%08d" $((10#$a))
00000010

This could be useful for conversions:
a="0a"
printf "%04d" $((16#$a))
0010

a="00001010"
printf "%04d" $((2#$a))
0010

a="00012"
printf "%04d" $((8#$a))
0010

a="0020"
printf "%04d" $((5#$a))
0010

a="0013"
printf "%04d" $((7#$a))
0010

and so on...
a="zz"
printf "%04d" $((36#$a))
1295

redpajama_set_name: RedPajamaStackExchange


text:
Post Zeroes in on Anti-Gay Candidate Martha Schaerr
The Washington Post Metro section this morning had this story about Montgomery County's November 2nd school board elections:
A woman who is part of a group that sued Montgomery County Public Schools over its sex-education curriculum is running for the Board of Education, reviving a debate about how homosexuality and premarital sex should be dealt with in the schools.
Martha Schaerr, who is running for the District 5 seat against incumbent Michael E. Durso, said that her 2007 fight against the sex-education curriculum is not her focus this time around; instead, she said, her primary concerns are basic issues such as the budget and student achievement.
But gay-rights advocates have criticized Schaerr for not being more open about her involvement with Citizens for a Responsible Curriculum, of which she is a member.
The group sued the school system twice, arguing that its sex-education curriculum was dismissive of religions that consider homosexuality a sin and that it tacitly encouraged gay sex. The group wanted the curriculum to include discussions acknowledging various views about homosexuality, including that some people believe sexual orientation is a choice. It also opposed any mention of anal intercourse, saying that would violate a law against teaching "erotic techniques." Activist on sex-ed issue seeks Montgomery school board seat
Poor Martha Schaerr aligned herself with the forces of evil, and it's coming back to bite her. She says now that it's not important to her, but if you look at her resume, what else is there? President of the PTA, President of the anti-gay Citizens for Traditional Marriage, board of directors for the anti-gay Family Leader Network, that's it.
Martha Schaerr's background is in the hate industry, no matter what a nice mom she seems to be. Her group didn't sue the school district to make anybody's life better, they sued to prevent the schools from teaching that some people have a different sexual orientation, a different gender identity, her group sued to perpetuate discrimination against a population that has done nothing to deserve it.
She doesn't want to talk about that now. There are important things, like budgets and picking a superintendent, why would anybody want to talk about bigotry against gay and transgender people?
Skipping...
"When you're talking about sex ed, people seem to hear the word and go to one corner or the other," she said. "All of the board members have said they're happy with it, so it's not very collaborative of me to bring it up right now. I would like to bring it up at an appropriate time when people can talk about it and not yell."
She would like to bring it up again. Just not now, when she's sure to lose. And remember who did the yelling: the group that formed in 2004 to recall the entire Montgomery County Board of Elections, the group with the site RecallMontgomerySchoolBoard.com, the group that morphed into the Citizens for Responsible Curriculum and now the Citizens for Responsible Government.
But Montgomery County gay-rights advocates say that Schaerr's past remains relevant. And adding to an unusually contentious school board race, one of Schaerr's allies from the fight against the sex-education curriculum has organized a yard-sign campaign called the Rotten Apple Ballot, which is fighting candidates who were endorsed by the Montgomery County teachers union.
"If you want your legislators to listen to you, it's not going to happen," said Ruth Jacobs, president of Citizens for a Responsible Government, the group that has distributed the signs. She said legislators listen to the teachers union. Her group also has fought against a bill prohibiting discrimination against transgendered people, and she was a member of Citizens for a Responsible Curriculum, along with Schaerr.
Jacobs said that Citizens for a Responsible Government has not endorsed any candidates in the elections this year.
In fact, this is a lie. A recent CRG newsletter endorsed Michael Ibanez and Martha Schaerr for school board, as well as teabagger-friendly candidates in other state and county elections.
Go to their web site: Boycott Apple Ballot and see what they say.
Back to The Post:
Durso, the District 5 incumbent, had just retired as principal of Springbrook High School in Silver Spring when he was appointed to the school board in 2009 to fill a vacancy.
He said he was "concerned" about some of Schaerr's positions on the curriculum, adding that "the school system has a role to support all students and all views and to try to make that atmosphere as conducive and non-threatening as possible."
But he also said that the superintendent search and the budget, not sex education, were the big issues in his mind. "I think we've got our hands full," he said.
Yes, we do have our hands full, and we don't need the distraction of prejudice and discrimination in our school board meetings.
posted by JimK at 9:18 AM
This is great news. Now all the thousands of people in the county will know who to vote for!!!She has been identified above all the liberals. Thank you for pointing this out.
"but if you look at her resume, what else is there? President of the PTA, President of the anti-gay Citizens for Traditional Marriage, board of directors for the anti-gay Family Leader Network, that's it"
the fact that TTF is so dismissive of the experience of being a full-time mother and PTA president is a big reason Schaerr belongs on the Board
the sex-ed curriculum fails to mention all views of homosexuality and its real-world consequences
schools aren't there to teach fairy tales
every one I've talked to who knew her in her involvement at Magruder is voting for her
most have already gone up to Bauer Drive and done so
thanks for the link to the Rotten Apple Ballot
be interesting to see if the influence of the evil Apple ballot will wane
the listless troops that thought Obama was the second coming may have had enough while the teachers' union dances to the tune of:
take a bite of the Big Apple
don't mind the maggots !
this one's funny said...
(Oct. 27) -- Henry Velandia is married to a U.S. citizen, but he might be deported anyway.
That's because the Venezuelan-born salsa teacher's legal same-sex marriage in Connecticut isn't recognized by the federal government. So his husband -- Josh Vandiver, a Princeton University doctoral student from Colorado -- can't sponsor him for residency the way he could in a heterosexual marriage.
The New Jersey couple of four years say the Defense of Marriage Act, which legally defines marriage as a union between a man and a woman, could force them to leave the country.
oh, well
the country's going Republican anyway
try France
The great news is that the Post endorsed Mike Durso on Tuesday
and on Wednesday noted he's running against a candidate who loves to talk about cutting the school system's budget
but who doesn't want her kids to learn about sexual orientations other than hetero in health class
after having cost the school system money trying to prevent lessons called "Respect for Differences in Human Sexuality" being taught to students
all of which puts her desire to make cuts to the budget in a different light
it's important information for voters who wish to make fully informed choices
Aunt Bea said...
What's with all the stealth candidates in this election?? Not only do conservative candidates here in MoCo not want to talk about their past activism, but conservative candidates in races across the nation don't want to talk about their past activities or current views either.
'Sharron Angle, the Tea Party-backed Nevada Republican involved in one of the most hotly contested Senate races, has not commented to reporters since she was secretly filmed ten days ago telling a group of Latino students that they looked "Asian" to her.
Even before that blunder, which is likely to cost her crucial minority votes, veteran political reporters who had travelled to the western state to cover her campaign had written of their dismay about being refused interviews and chasing Mrs Angle through car parks."
"Rand Paul, a senate hopeful in Kentucky, has not done an interview with the mainstream media since he questioned the legal validity of the civil rights reforms of the 1960s the day after he won the Republican primary in May."
In Alaska, senate candidate Joe Miller refused to answer any further questions about his private life. It had been revealed that when a part-time government lawyer he had violated ethics rules when he used other people's office computers for political purposes.
"Michele Bachmann, the Minnesota congressman and leader of the Tea Party caucus in the House of Representatives, has reportedly cancelled all further interviews until after polling on Nov 2 following some awkward questions about pension reform."
"Republican gubernatorial candidates Meg Whitman in California and Rick Scott in Florida have both independently set election spending records by funneling millions of dollars from their personal fortunes into their campaigns. The former eBay CEO and former Columbia/HCA chief have also both come under intense media scrutiny for avoiding reporters and running away from debates."
"In Texas, Gov. Rick Perry (R) is refusing to hold any debates with former Houston mayor Bill White, even though the two are locked in a very tight race. Media outlets around the state are urging Perry to accept the challenge and pointing out that every single governor in the past four decades -- except Perry -- has met with newspaper editorial boards. "Texas voters need a debate to make the most informed decisions in the governor's race," wrote the Houston Chronicle. "They deserve the direct, face-to-face confrontation on the issues a serious debate provides.""
What are these conservative candidates so afraid of? Why do they refuse to say what they think? Why do they feel the need to hide their opinions and views from people whose votes they are seeking?
"There are some candidates who are actively bucking this trend. One lawmaker who has received kudos from both sides of the aisle for his willingness to engage with the opposition is Rep. Tom Perriello (D-Va.). Not only has he agreed to debate his challenger, but he's gone around his district and spoken at local Tea Party meetings. "Congressman Perriello is eager to debate Senator Hurt because we know that when voters hear about his plans to protect companies that outsource American jobs, raise seniors' prescription drug costs, and cut education funding, we will win," explained Perriello campaign Communications Director Jessica Barba."
Thank goodness for candidates and elected officials who believe the best voters are informed voters. Al Franken, *the poster boy of close elections" knows this first hand. Enjoy this video of Senator Al Franken's rewrite of "The GOP drove the economy into the ditch" story.
I'm half Asian and I very frequently get into conversations with Spanish people, Korean people, Chinese people, Vietnamese people, etc. who want to know what I am. I then ask them what they are. It's often hard to tell, so we eye each other and ask questions.
We're curious about each other and talk freely about our heritage and how it's funny that our sisters and brothers look very different from us, one with green eyes, one with brown.
Believe me, Bea --It's not a bad thing -- it's part of being human. When I tell them what I am, many express surprise and might say, "oh, I thought you were French or maybe part Spanish." I don't recoil in horror and scream "why don't you just KNOW!???" I say "oh, that's interesting! Some people think I'm Turkish."
And then we might talk about Hawaii, where each mixture has a different name. If you're half Japanese and half Caucasian, you have one name. If you're half Chinese and half Caucasian, then there's another name.
So the fact that Angle thought that Latinos looked Asian -- it's hard to imagine that any Latino or Asian would hold that against her!
Interesting comment from Durso said: "the school system has a role to support all students and all views…" Do you agree with that?
I think Martha would agree and the sex ed does not do this.
Transcript of Sharron Angle, GOP Senate nominee and prospective Canadian border vigilante, and her favorite enabler, Heidi Harris.
Harris: What is the deal? Now, there are people who said that the ad that talks about illegal immigration, some people it portrays Latinos and some have said, "Well, that's a racist thing." And I've tried to argue with them and say, "Listen, in France the problem with illegal immigration is North Africans. Here, the main problem with the illegal immigration is people coming in south of the border." I think it's fair, some do not, what's your response?
Angle: Well, I think it's very dangerous for us to be very stereotypical. We have a border problem. It's not only Southern; it's Northern and coastal. And we need to be very careful about stereotyping because when we do that we come to wrong conclusions sometimes.
Harris: No question, but some people are saying that everybody portrayed in this ad looks Latino so you're singling them out; you're not putting Canadians in the ad, that kind of thing.
Angle: (laughs) Well, you know, it's an interesting thing. Like I said, there's this tendency to stereotype and we need to be very careful about that.
Sharon Angle told Latino students "I've been called the first Asian legislator in our Nevada State Assembly."
Angle has also made the following statement about the 14th Amendment during a rare "media availabilty moment" in August "certainly someone who has not come here under the rule of law is not under our jurisdiction," but on her website for office she says, "The United States must secure its borders immediately and enforce the laws that are already on the books."
Is enforcing current laws what she wants to do or does she want to change the 14th Amendment in some way? Her refusal to answer reports' questions makes it difficult for voters to know what she would vote for if elected to the US Senate.
I for one think it be great if Martha Schaerr would tell MoCo voters if she agrees that "the school system has a role to support all students and all views" and if she feels the sex ed curriculum does "support all students and all views" or not.
Well, Bea, not being able to tell whether someone is Asian or Latino is NOT being racist and it's NOT stereotyping.
Attributing a characteristic to a group because of their race is racist. Of course, liberals have now made it racist for people to be unable to discern someone's race! What a load of crap!
Who thinks there's any confusion about which border and which nationality of people are depicted in Sharon Angle's ads showing illegal aliens crossing the border and joining gangs so people are afraid to leave their homes?
Angle is the person who told Latina students you can't tell Asians from Latinos by looking at them. But that's not what her campaign ads are saying or depicting and everybody who has seen them knows it. Angle avoids the press and reporter's questions to avoid being held accountable for attributing illegal immigration and membership in gangs as characteristics of Latinos.
The other important issue of stealth candidates is who are the funders of independent groups that are paying for campaign ads on behalf of these candidates who avoid reporters like the plague? Secret money is paying for campaign ads for stealth candidates with secret agendas. It doesn't get much more un-American than that IMHO.
Sociopathanon: "schools aren't there to teach fairy tales"
Not even creationism?
If you place a video camera at a border and it captures illegal aliens crossing the border, is it the fault of the video camera that it doesn't show a more diverse group?
Rolling my eyes.
If those are actual illegal Latino immigrants crossing the southern border in Angle's campaign ads, why was Angle's answer Harris' question about why some people say it's a racist thing for Angle's ads to show Latinos as illegal immigrants :
Angle: Well, I think it's very dangerous for us to be very stereotypical. We have a border problem. It's not only Southern; it's Northern and coastal. And we need to be very careful about stereotyping because when we do that we come to wrong conclusions sometimes..
And when one of the Latino students asked Angle at a campaign event in a school:
"Why is it that in all of your commercials you have the image of Latinos? What do you see when you hear, and I quote, 'illegal aliens?'"
why did Angle reply:
'Angle: "I think that you're misinterpreting those commercials. I'm not sure that those are Latinos in that commercial. What it is, is a fence and there are people coming across that fence. What we know is that our northern border is where the terrorists came through. That's the most porous border that we have. We cannot allow terrorists; we cannot allow anyone to come across our border if we don't know why they're coming. So we have to secure all of our borders and that's what that was about, is border security. Not just our southern border, but our coastal border and our northern border."'
Fact: Angle has already run into trouble with the ad for using a photograph -- taken by a British photographer in 2006 of Mexican farmers in Mexico -- now licensed by Getty Images for editorial work.
As the Washington Post and others have reported, Angle's campaign incorporated the image into a campaign ad and laid text over it that read "illegal aliens."
pattern for Bea:
she makes an idiotic assertion
someone points out the obvious
Bea's defense is to throw up a longer post saying no more but taking more space
she must believe if she keeps loading up the crap, people will not read but just she assumes it's right because of the length
Bea, no minority of any kind, in their right mind, would decline to vote for Angle based on anything you posted
and most minorities, like most people, are in their right minds
Reid is going down
Nevadans are excited about the opportunity to send a message to the country rejecting socialism
they are on the national stage and they have something to say
in prior years, Dems have whined about Repubs using "wedge issues", "litmus tests"and social issues to advantage
how ironic that they now beg Repubs to address those same issues
ironic, yes,
and a riot
let's face it:
this will be the fourth time in a generation that the American people have rejected Dem control:
1. LBJ was elected due to misleading Dem attacks on Goldwater
LBJ begins road to socialism
four years later, LBJ quits as polls show Americans will reject him
2. angry over Ford pardoning Nixon, we elect Carter
four years later, he's fired by Americans
3. angry over Bush Sr raising taxes, we elect Clinton
two years later, we return control of Congress to Repubs
4. angry over Iraq and the bank bailout, we install B Hussein Obama
two years later, we redo his job description
henceforth, he's a ceremonial lame duck
Go, Sarah Palin!
Barack Obama is a very non-discriminating fellow.
Look who he's palling around with now:
liberal bloggers!!!
oh, and he told 'em he has a "secret" plan to end DADT.
Some of you may remember when Nixon won the White House in 1968 with a "secret" plan to end the Vietnam War.
Obama is definitely our most Nixonian President since the 70s:
"(October 27) - Barack Obama invited some special friends for a first-of-its-kind, in-person White House chat today: liberal bloggers!
And the first report back suggests that they discussed Obama's legislative strategy for repealing DADT. He has one!
Sam Stein at the Huffington Post confirmed the meeting.
The blogs have all protested the president's lack of movement on gay rights issues pretty aggressively over the past two years. So it's no surprise that they asked several pointed questions about those during this meeting, a brief recap of which he sent back to blogger John Aravosis. He asked this rarely asked one and appeared to get something resembling an answer: What's the plan for moving a repeal of "Don't Ask Don't Tell" through a 60-vote Senate filibuster after the election?
Finally, they asked the President if he has a strategy for passing the DADT compromise legislation during the lame duck session in Congress. The President did make some news here, by telling them that he asked the Log Cabin Republicans in a meeting at the White House yesterday to get him 2 to 5 votes. The President seemed to think that they could help persuade Log Cabin to help.
Yeah, good luck getting leftie gays and rightie gays to work together, you silly president, you."
where was TTF?
After a midterm campaign defined by hysterical claims about American Muslims and fear-mongering about the threat to national security posed by people who look Mexican, some anonymous Texas Republicans are going old-school with their latest attempt to suppress minority voter turnout. Yep, an old-fashioned "misleading flyer in a black neighborhood" (http://tpmmuckraker.talkingpointsmemo.com/2010/10/fliers_from_fake_group_mislead_black_voters_in_texas_video.php?ref=fpb) landed in Houston this week, just in time for early voting.
The flyers, from the fictional "Black Democratic Trust of Texas," warn would-be voters that "Republicans are trying to tick us" (fair enough) and claim that straight ticket Democratic votes are being miscounted as Republican votes. Voters are told to vote only for Democratic gubernatorial candidate Bill White.
This is just about the oldest trick in the book. (The actual oldest trick in this particular book is just denying black people their citizenship and personhood, but if you can't do that, you can just try to get them to not vote.)
It probably won't hurt turnout too much, because this is a particularly stupid example of the genre, but it's worth pointing out that it's the year 2010 and Republicans are still doing this crap.
A thank you letter from The Penny Ice Creamery
Andrea- not anon
The Showernuts just called me about their lies and the Apple Ballot. Can't Weepy Ruth get a life or at least try honesty for a change? One more defeat for the showernuts in MC come Tuesday.
"Weepy Ruth" hmm...
once again, personal attacks.
I guess Andrea, a classic Dem, doesn't know any other way to be ....
what did you find dishonest, Andrea.. ?
I am having trouble restraining myself from calling democratic offices with "Nanannaa, naanaa, HEY, HEY HEY HEY, GOODBYE"...
all those folks who refused to listen to the people have to remember that the PEOPLE ARE IN CHARGE.
Sorry Blanche, Sorry Nancy, !
I think I am going to call Blanche's Arkansas office tomorrow and sing to her....
A little payback for the refusal to listen to constituents earlier this year. Silly, juvenile, but makes me feel good.
Hey, if you can call Ruth "weepy" I can SING AND SING AWAY !
have a great evening.
It's a great November. America is fully awake now. So maybe, Barack is a good thing. It will be YEARS before the electorate trusts them again.
Please, "Anonymous"...complaints about "personal attacks" from you? Hahahahahaha!!!
Sociopathanon: "pattern for Bea:
Name calling. Otherwise known as an ad-hominem.
Ad Hominem::
attacking the person instead of attacking his argument.
improv, embarassing himself again
hey, idiot, when you call someone a sociopathanon, would that be a personal attack or an example of Democrat reasoning?
truth is, liberals always use personal attacks because facts have so overwhelmed their cause, that they have no choice
the media has noticed
here's ABC News:
"It's not just the Aqua Buddha and David Vitter's prostitute, Democratic candidates across the country are closing out the campaign with personal attacks on Republican candidates, sometimes digging up decades-old legal problems.
In one typical example, Democratic ads have transformed Kentucky Republican House candidate Andy Barr into "a convicted criminal" -- complete with images yellow police tape and fuzzy video of crime scenes. Not mentioned is his crime: As a college student 19 years ago, he was caught using a fake ID during spring break.
As you watch this year's ads -- and we've been watching all too many lately -- you'll notice a striking difference between Democratic and Republican attack ads: Democrats are attacking over personal issues, Republicans are attacking over policy.
There are, of course, many exceptions, but the overall trend is clear. Democrats are hitting their Republican opponents over past legal transgressions, shady business deals and even speeding tickets. Republicans are hammering Democrats over "Obamacare," Nancy Pelosi and the economy.
A recent study by the Wesleyan Media Project actually quantifies this. They looked at 900,000 airing of political ads this year and concluded: "Democrats are using personal attacks at much higher rates than Republicans and a much higher rate than Democrats in 2008.""
oh well, it has backfired
Tuesday, we take this country back
and the task here, on TTF, is pretty much over
other than the gloating
maybe Dems would be better off if there was a DADT for party affiliation
I'd call it an observation.
I'm sure you would
reminds me of a line by George Costanza in a Jerry Seinfeld episode when he requests a bereavement rate and the girl behind the counter at the airport tells him she needs documentation because people try to fake deaths in the family to get the bereavement rate:
"what kind of a sick mind does it take?"
that would be the improv mind
embarassing itself again
Jon Stewart sure pulled a fast one on Repubs this week
first, he asked Barry tough questions that revealed how out of it Barry truly is
and then yesterday told liberals how incivil and destructive they are when the call the tea party racist
undercutting liberals and, for a bonus, tricking thousands of them to descend on Washington when their time would be better spend at home doing the grassroots work that might have made a difference in tight races
tick-tick-tick.....
Sociopathanon, the difference is that I don't rely on name calling as a response to arguments.
In addition, you've earned the title.
info@teachthefacts.org
Join our Discussion Group
TeachTheFacts
The Post Rejects Schaerr Because of Anti-Gay Conne...
The President Speaks: It Gets Better
The Gazette on Martha Schaerr's Stealth Candidacy
AOL News Scrapes the Bottom of the Barrel
Obama Throws Pass to Wrong End Zone
The Chilean Miners Come Up
This Sums It Up
RIP Solomon Burke
Caring Takes Effort
Dobbs Hired Illegals
Great Web Sites
MCPS Health Education materials
Grade 8 Revised curriculum
Grade 10 Revised curricululm
Exgaywatch.com
Shelby Knox