text:
import threading
from ginga.qtw.QtHelp import QtGui, QtCore
from ginga.qtw import QtHelp

from ginga import GingaPlugin
from ginga import iqcalc
from ginga.misc import Bunch

import numpy
try:
    import matplotlib
    from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
    have_mpl = True
except ImportError:
    have_mpl = False

from ginga.qtw import FitsImageCanvasQt
from ginga.qtw import FitsImageCanvasTypesQt as CanvasTypes

region_default_width = 30
region_default_height = 30

class Pick(GingaPlugin.LocalPlugin):

    def __init__(self, fv, fitsimage):
        # superclass defines some variables for us, like logger
        super(Pick, self).__init__(fv, fitsimage)

        self.layertag = 'pick-canvas'
        self.pickimage = None
        self.pickcenter = None
        self.pick_qs = None
        self.picktag = None
        self.pickcolor = 'lightgreen'
        self.candidate_color = 'purple'

        self.pick_x1 = 0
        self.pick_y1 = 0
        self.pick_data = None
        self.dx = region_default_width
        self.dy = region_default_height
        # For offloading intensive calculation from graphics thread
        self.serialnum = 0
        self.lock = threading.RLock()
        self.lock2 = threading.RLock()
        self.ev_intr = threading.Event()

        # Peak finding parameters and selection criteria
        # this is the maximum size a side can be
        self.max_side = 1024
        self.radius = 10
        self.threshold = None
        self.min_fwhm = 2.0
        self.max_fwhm = 50.0
        self.min_ellipse = 0.5
        self.edgew = 0.01
        self.show_candidates = False

        self.plot_panx = 0.5
        self.plot_pany = 0.5
        self.plot_zoomlevel = 1.0
        self.num_contours = 8
        self.contour_size_limit = 70
        self.contour_data = None
        self.delta_sky = 0.0
        self.delta_bright = 0.0
        self.iqcalc = iqcalc.IQCalc(self.logger)

        canvas = CanvasTypes.DrawingCanvas()
        canvas.enable_draw(True)
        canvas.set_callback('button-press', self.btndown)
        canvas.set_callback('motion', self.drag)
        canvas.set_callback('button-release', self.update)
        canvas.set_drawtype('rectangle', color='cyan', linestyle='dash',
                            drawdims=True)
        canvas.set_callback('draw-event', self.setpickregion)
        canvas.setSurface(self.fitsimage)
        self.canvas = canvas

    def build_gui(self, container):
        self.pickcenter = None

        # Splitter is just to provide a way to size the graph
        # to a reasonable size
        vpaned = QtGui.QSplitter()
        vpaned.setOrientation(QtCore.Qt.Vertical)

        nb = QtHelp.TabWidget()
        nb.setTabPosition(QtGui.QTabWidget.East)
        nb.setUsesScrollButtons(True)
        self.w.nb1 = nb
        vpaned.addWidget(nb)

        cm, im = self.fv.cm, self.fv.im

        di = FitsImageCanvasQt.FitsImageCanvas(logger=self.logger)
        di.enable_autozoom('off')
        di.enable_autocuts('off')
        di.enable_zoom(True)
        di.enable_cuts(True)
        di.zoom_to(3, redraw=False)
        di.set_callback('zoom-set', self.zoomset)
        di.set_cmap(cm, redraw=False)
        di.set_imap(im, redraw=False)
        di.set_callback('motion', self.detailxy)
        di.set_bg(0.4, 0.4, 0.4)
        self.pickimage = di

        iw = di.get_widget()
        sp = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding,
                               QtGui.QSizePolicy.MinimumExpanding)
        iw.setSizePolicy(sp)
        width, height = 200, 200
        iw.resize(width, height)
        nb.addTab(iw, 'Image')

        if have_mpl:
            self.w.fig = matplotlib.figure.Figure()
            self.w.ax = self.w.fig.add_subplot(111, axisbg='black')
            self.w.ax.set_aspect('equal', adjustable='box')
            self.w.ax.set_title('Contours')
            #self.w.ax.grid(True)
            canvas = MyFigureCanvas(self.w.fig)
            canvas.setDelegate(self)
            #canvas.resize(width, height)
            self.w.canvas = canvas
            nb.addTab(canvas, u"Contour")

            self.w.fig2 = matplotlib.figure.Figure()
            self.w.ax2 = self.w.fig2.add_subplot(111, axisbg='white')
            #self.w.ax2.set_aspect('equal', adjustable='box')
            self.w.ax2.set_ylabel('brightness')
            self.w.ax2.set_xlabel('pixels')
            self.w.ax2.set_title('FWHM')
            self.w.ax.grid(True)
            canvas = FigureCanvas(self.w.fig2)
            self.w.canvas2 = canvas
            nb.addTab(canvas, u"FWHM")

        sw = QtGui.QScrollArea()

        twidget = QtHelp.VBox()
        sp = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding,
                               QtGui.QSizePolicy.Fixed)
        twidget.setSizePolicy(sp)
        vbox = twidget.layout()
        vbox.setContentsMargins(4, 4, 4, 4)
        vbox.setSpacing(2)
        sw.setWidgetResizable(True)
        sw.setWidget(twidget)

        msgFont = QtGui.QFont("Sans", 14)
        tw = QtGui.QLabel()
        tw.setFont(msgFont)
        tw.setWordWrap(True)
        self.tw = tw

        fr = QtHelp.Frame("Instructions")
        fr.layout().addWidget(tw, stretch=1, alignment=QtCore.Qt.AlignTop)
        vbox.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop)

        fr = QtHelp.Frame("Pick")

        nb = QtHelp.TabWidget()
        nb.setTabPosition(QtGui.QTabWidget.South)
        nb.setUsesScrollButtons(True)
        self.w.nb2 = nb

        fr.layout().addWidget(nb, stretch=1, alignment=QtCore.Qt.AlignLeft)
        vbox.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop)

        vbox2 = QtHelp.VBox()
        captions = (('Zoom', 'label', 'Contour Zoom', 'label'),
                    ('Object_X', 'label', 'Object_Y', 'label'),
                    ('RA', 'label', 'DEC', 'label'),
                    ('Equinox', 'label', 'Background', 'label'),
                    ('Sky Level', 'label', 'Brightness', 'label'),
                    ('FWHM X', 'label', 'FWHM Y', 'label'),
                    ('FWHM', 'label', 'Star Size', 'label'),
                    ('Sample Area', 'label', 'Default Region', 'button'),
                    )

        w, b = QtHelp.build_info(captions)
        self.w.update(b)
        b.zoom.setText(self.fv.scale2text(di.get_scale()))
        self.wdetail = b
        b.default_region.clicked.connect(self.reset_region)
        b.default_region.setToolTip("Reset region size to default")

        vbox2.addWidget(w, stretch=1)

        # Pick field evaluation status
        label = QtGui.QLabel()
        self.w.eval_status = label
        ## w.layout().addWidget(label, stretch=0, alignment=QtCore.Qt.AlignLeft)
        vbox2.addWidget(label, stretch=0)

        # Pick field evaluation progress bar and stop button
        hbox = QtHelp.HBox()
        pgs = QtGui.QProgressBar()
        pgs.setRange(0, 100)
        pgs.setTextVisible(True)
        self.w.eval_pgs = pgs
        hbox.addWidget(pgs, stretch=0)
        btn = QtGui.QPushButton("Stop")
        btn.clicked.connect(lambda w: self.eval_intr())
        btn.setEnabled(False)
        self.w.btn_intr_eval = btn
        hbox.addWidget(btn, stretch=0)
        vbox2.addWidget(hbox, stretch=0)

        nb.addTab(vbox2, "Report")

        # Build settings panel
        captions = (('Show Candidates', 'checkbutton'),
                    ('Radius', 'xlabel', '@Radius', 'spinfloat'),
                    ('Threshold', 'xlabel', '@Threshold', 'entry'),
                    ('Min FWHM', 'xlabel', '@Min FWHM', 'spinfloat'),
                    ('Max FWHM', 'xlabel', '@Max FWHM', 'spinfloat'),
                    ('Ellipticity', 'xlabel', '@Ellipticity', 'entry'),
                    ('Edge', 'xlabel', '@Edge', 'entry'),
                    ('Max side', 'xlabel', '@Max side', 'spinbutton'),
                    ('Redo Pick', 'button'),
            )

        w, b = QtHelp.build_info(captions)
        self.w.update(b)
        b.radius.setToolTip("Radius for peak detection")
        b.threshold.setToolTip("Threshold for peak detection (blank=default)")
        b.min_fwhm.setToolTip("Minimum FWHM for selection")
        b.max_fwhm.setToolTip("Maximum FWHM for selection")
        b.ellipticity.setToolTip("Minimum ellipticity for selection")
        b.edge.setToolTip("Minimum edge distance for selection")
        b.show_candidates.setToolTip("Show all peak candidates")
        b.show_candidates.setChecked(self.show_candidates)
        b.show_candidates.stateChanged.connect(self.show_candidates_cb)

        # radius control
        adj = b.radius
        adj.setRange(5.0, 200.0)
        adj.setSingleStep(1.0)
        adj.setValue(self.radius)
        def chg_radius(val):
            self.radius = val
            self.w.lbl_radius.setText(str(self.radius))
            return True
        b.lbl_radius.setText(str(self.radius))
        b.radius.valueChanged.connect(chg_radius)

        # threshold control
        def chg_threshold():
            threshold = None
            ths = str(self.w.threshold.text()).strip()
            if len(ths) > 0:
                threshold = float(ths)
            self.threshold = threshold
            self.w.lbl_threshold.setText(str(self.threshold))
            return True
        b.lbl_threshold.setText(str(self.threshold))
        b.threshold.returnPressed.connect(chg_threshold)

        # min fwhm
        adj = b.min_fwhm
        adj.setRange(0.1, 200.0)
        adj.setSingleStep(1.0)
        adj.setValue(self.min_fwhm)
        def chg_min(val):
            self.min_fwhm = val
            self.w.lbl_min_fwhm.setText(str(self.min_fwhm))
            return True
        b.lbl_min_fwhm.setText(str(self.min_fwhm))
        b.min_fwhm.valueChanged.connect(chg_min)

        # max fwhm
        adj = b.max_fwhm
        adj.setRange(0.1, 200.0)
        adj.setSingleStep(1.0)
        adj.setValue(self.max_fwhm)
        def chg_max(val):
            self.max_fwhm = val
            self.w.lbl_max_fwhm.setText(str(self.max_fwhm))
            return True
        b.lbl_max_fwhm.setText(str(self.max_fwhm))
        b.max_fwhm.valueChanged.connect(chg_max)

        # Ellipticity control
        def chg_ellipticity():
            minellipse = None
            val = str(self.w.ellipticity.text()).strip()
            if len(val) > 0:
                minellipse = float(val)
            self.min_ellipse = minellipse
            self.w.lbl_ellipticity.setText(str(self.min_ellipse))
            return True
        b.lbl_ellipticity.setText(str(self.min_ellipse))
        b.ellipticity.returnPressed.connect(chg_ellipticity)

        # Edge control
        def chg_edgew():
            edgew = None
            val = str(self.w.edge.text()).strip()
            if len(val) > 0:
                edgew = float(val)
            self.edgew = edgew
            self.w.lbl_edge.setText(str(self.edgew))
            return True
        b.lbl_edge.setText(str(self.edgew))
        b.edge.returnPressed.connect(chg_edgew)

        adj = b.max_side
        adj.setRange(5, 10000)
        adj.setSingleStep(10)
        adj.setValue(self.max_side)
        def chg_max_side(val):
            self.max_side = val
            self.w.lbl_max_side.setText(str(self.max_side))
            return True
        b.lbl_max_side.setText(str(self.max_side))
        b.max_side.valueChanged.connect(chg_max_side)

        b.redo_pick.clicked.connect(self.redo)

        nb.addTab(w, "Settings")

        captions = (
            ('Sky cut', 'button', 'Delta sky', 'entry'),
            ('Bright cut', 'button', 'Delta bright', 'entry'),
            )

        w, b = QtHelp.build_info(captions)
        self.w.update(b)

        b.sky_cut.setToolTip("Set image low cut to Sky Level")
        b.delta_sky.setToolTip("Delta to apply to low cut")
        b.bright_cut.setToolTip("Set image high cut to Sky Level+Brightness")
        b.delta_bright.setToolTip("Delta to apply to high cut")

        b.sky_cut.setEnabled(False)
        self.w.btn_sky_cut = b.sky_cut
        self.w.btn_sky_cut.clicked.connect(self.sky_cut)
        self.w.sky_cut_delta = b.delta_sky
        b.delta_sky.setText(str(self.delta_sky))
        b.bright_cut.setEnabled(False)
        self.w.btn_bright_cut = b.bright_cut
        self.w.btn_bright_cut.clicked.connect(self.bright_cut)
        self.w.bright_cut_delta = b.delta_bright
        b.delta_bright.setText(str(self.delta_bright))

        nb.addTab(w, "Controls")

        btns = QtHelp.HBox()
        layout = btns.layout()
        layout.setSpacing(3)
        #btns.set_child_size(15, -1)

        btn = QtGui.QPushButton("Close")
        btn.clicked.connect(self.close)
        layout.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft)
        vbox.addWidget(btns, stretch=0, alignment=QtCore.Qt.AlignLeft)

        vpaned.addWidget(sw)

        container.addWidget(vpaned, stretch=1)
        #vpaned.moveSplitter(260, 1)

    def bump_serial(self):
        with self.lock:
            self.serialnum += 1
            return self.serialnum

    def get_serial(self):
        with self.lock:
            return self.serialnum

    def plot_panzoom(self):
        ht, wd = self.contour_data.shape
        x = int(self.plot_panx * wd)
        y = int(self.plot_pany * ht)

        if self.plot_zoomlevel >= 1.0:
            scalefactor = 1.0 / self.plot_zoomlevel
        elif self.plot_zoomlevel < -1.0:
            scalefactor = - self.plot_zoomlevel
        else:
            # wierd condition?--reset to 1:1
            scalefactor = 1.0
            self.plot_zoomlevel = 1.0

        # Show contour zoom level
        text = self.fv.scale2text(1.0/scalefactor)
        self.wdetail.contour_zoom.setText(text)

        xdelta = int(scalefactor * (wd/2.0))
        ydelta = int(scalefactor * (ht/2.0))
        xlo, xhi = x-xdelta, x+xdelta
        # distribute remaining x space from plot
        if xlo < 0:
            xsh = abs(xlo)
            xlo, xhi = 0, min(wd-1, xhi+xsh)
        elif xhi >= wd:
            xsh = xhi - wd
            xlo, xhi = max(0, xlo-xsh), wd-1
        self.w.ax.set_xlim(xlo, xhi)

        ylo, yhi = y-ydelta, y+ydelta
        # distribute remaining y space from plot
        if ylo < 0:
            ysh = abs(ylo)
            ylo, yhi = 0, min(ht-1, yhi+ysh)
        elif yhi >= ht:
            ysh = yhi - ht
            ylo, yhi = max(0, ylo-ysh), ht-1
        self.w.ax.set_ylim(ylo, yhi)

        self.w.fig.canvas.draw()

    def plot_contours(self):
        # Make a contour plot

        ht, wd = self.pick_data.shape

        # If size of pick region is too large, carve out a subset around
        # the picked object coordinates for plotting contours
        maxsize = max(ht, wd)
        if maxsize > self.contour_size_limit:
            image = self.fitsimage.get_image()
            radius = int(self.contour_size_limit // 2)
            x, y = self.pick_qs.x, self.pick_qs.y
            data, x1, y1, x2, y2 = image.cutout_radius(x, y, radius)
            x, y = x - x1, y - y1
            ht, wd = data.shape
        else:
            data = self.pick_data
            x, y = self.pickcenter.x, self.pickcenter.y
        self.contour_data = data
        # Set pan position in contour plot
        self.plot_panx = float(x) / wd
        self.plot_pany = float(y) / ht

        self.w.ax.cla()
        try:
            # Create a contour plot
            xarr = numpy.arange(wd)
            yarr = numpy.arange(ht)
            self.w.ax.contourf(xarr, yarr, data, self.num_contours)
            # Mark the center of the object
            x, y = self.pickcenter.x, self.pickcenter.y
            self.w.ax.plot([x], [y], marker='x', ms=20.0,
                           color='black')

            # Set the pan and zoom position & redraw
            self.plot_panzoom()

        except Exception, e:
            self.logger.error("Error making contour plot: %s" % (
                str(e)))

    def clear_contours(self):
        self.w.ax.cla()

    def _plot_fwhm_axis(self, arr, medv, color1, color2, color3):
        N = len(arr)
        X = numpy.array(range(N))
        Y = arr
        # subtract sky background
        ## medv = numpy.median(Y)
        Y = Y - medv
        maxv = Y.max()
        # clamp to 0..max
        Y = Y.clip(0, maxv)
        self.logger.debug("Y=%s" % (str(Y)))
        self.w.ax2.plot(X, Y, color=color1, marker='.')

        fwhm, mu, sdev, maxv = self.iqcalc.calc_fwhm(arr)
        Z = numpy.array([self.iqcalc.gaussian(x, (mu, sdev, maxv)) for x in X])
        self.w.ax2.plot(X, Z, color=color1, linestyle=':')
        self.w.ax2.axvspan(mu-fwhm/2.0, mu+fwhm/2.0,
                           facecolor=color3, alpha=0.25)
        return (fwhm, mu, sdev, maxv)

    def clear_fwhm(self):
        self.w.ax2.cla()

    def plot_fwhm(self, qs):
        # Make a FWHM plot
        self.w.ax2.cla()
        x, y, radius = qs.x, qs.y, qs.fwhm_radius
        try:
            image = self.fitsimage.get_image()
            x0, y0, xarr, yarr = image.cutout_cross(x, y, radius)

            # get median value from the cutout area
            medv = numpy.median(self.pick_data)
            self.logger.debug("cutting x=%d y=%d r=%d med=%f" % (
                x, y, radius, medv))

            self.logger.debug("xarr=%s" % (str(xarr)))
            fwhm_x, mu, sdev, maxv = self._plot_fwhm_axis(xarr, medv,
                                                          'blue', 'blue', 'skyblue')

            self.logger.debug("yarr=%s" % (str(yarr)))
            fwhm_y, mu, sdev, maxv = self._plot_fwhm_axis(yarr, medv,
                                                          'green', 'green', 'seagreen')

            plt = self.w.ax2
            plt.legend(('data x', 'gauss x', 'data y', 'gauss y'),
                       'upper right', shadow=False, fancybox=False,
                       prop={'size': 8}, labelspacing=0.2)
            plt.set_title("FWHM X: %.2f  Y: %.2f" % (fwhm_x, fwhm_y))

            self.w.fig2.canvas.draw()
        except Exception, e:
            self.logger.error("Error making fwhm plot: %s" % (
                str(e)))

    def close(self):
        chname = self.fv.get_channelName(self.fitsimage)
        self.fv.stop_operation_channel(chname, str(self))
        return True

    def instructions(self):
        self.tw.setText("""Left-click to place region.  Left-drag to position region.  Redraw region with the right mouse button.""")

    def start(self):
        self.instructions()
        # insert layer if it is not already
        try:
            obj = self.fitsimage.getObjectByTag(self.layertag)

        except KeyError:
            # Add canvas layer
            self.fitsimage.add(self.canvas, tag=self.layertag)

        self.resume()

    def pause(self):
        self.canvas.ui_setActive(False)

    def resume(self):
        self.canvas.ui_setActive(True)
        self.fv.showStatus("Draw a rectangle with the right mouse button")

    def stop(self):
        # Delete previous peak marks
        objs = self.fitsimage.getObjectsByTagpfx('peak')
        self.fitsimage.deleteObjects(objs, redraw=False)

        # deactivate the canvas
        self.canvas.ui_setActive(False)
        try:
            self.fitsimage.deleteObjectByTag(self.layertag)
        except:
            pass
        self.fv.showStatus("")

    def redo(self):
        serialnum = self.bump_serial()
        self.ev_intr.set()

        fig = self.canvas.getObjectByTag(self.picktag)
        if fig.kind != 'compound':
            return True
        bbox  = fig.objects[0]
        point = fig.objects[1]
        text = fig.objects[2]
        data_x, data_y = point.x, point.y

        # set the pick image to have the same cut levels and transforms
        self.fitsimage.copy_attributes(self.pickimage,
                                       ['transforms', 'cutlevels',
                                        'rgbmap'],
                                       redraw=False)

        try:
            image = self.fitsimage.get_image()

            # sanity check on region
            width = bbox.x2 - bbox.x1
            height = bbox.y2 - bbox.y1
            if (width > self.max_side) or (height > self.max_side):
                errmsg = "Image area (%dx%d) too large!" % (
                    width, height)
                self.fv.show_error(errmsg)
                raise Exception(errmsg)

            # Note: FITS coordinates are 1-based, whereas numpy FITS arrays
            # are 0-based
            fits_x, fits_y = data_x + 1, data_y + 1

            # Cut and show pick image in pick window
            #self.pick_x, self.pick_y = data_x, data_y
            self.logger.debug("bbox %f,%f %f,%f" % (bbox.x1, bbox.y1,
                                                    bbox.x2, bbox.y2))
            x1, y1, x2, y2, data = self.cutdetail(self.fitsimage,
                                                  self.pickimage,
                                                  int(bbox.x1), int(bbox.y1),
                                                  int(bbox.x2), int(bbox.y2))
            self.logger.debug("cut box %f,%f %f,%f" % (x1, y1, x2, y2))

            # calculate center of pick image
            wd, ht = self.pickimage.get_data_size()
            xc = wd // 2
            yc = ht // 2
            if not self.pickcenter:
                tag = self.pickimage.add(CanvasTypes.Point(xc, yc, 5,
                                                           linewidth=1,
                                                           color='red'))
                self.pickcenter = self.pickimage.getObjectByTag(tag)

            self.pick_x1, self.pick_y1 = x1, y1
            self.pick_data = data
            self.wdetail.sample_area.setText('%dx%d' % (x2-x1, y2-y1))

            point.color = 'red'
            text.text = 'Pick: calc'
            self.pickcenter.x = xc
            self.pickcenter.y = yc
            self.pickcenter.color = 'red'

            # clear contour and fwhm plots
            if have_mpl:
                self.clear_contours()
                self.clear_fwhm()

            # Delete previous peak marks
            objs = self.fitsimage.getObjectsByTagpfx('peak')
            self.fitsimage.deleteObjects(objs, redraw=False)

            # Offload this task to another thread so that GUI remains
            # responsive
            self.fv.nongui_do(self.search, serialnum, data,
                              x1, y1, wd, ht, fig)

        except Exception, e:
            self.logger.error("Error calculating quality metrics: %s" % (
                str(e)))
            return True

    def update_status(self, text):
        self.fv.gui_do(self.w.eval_status.setText, text)

    def init_progress(self):
        self.w.btn_intr_eval.setEnabled(True)
        self.w.eval_pgs.setValue(0)
        #self.w.eval_pgs.set_text("%.2f %%" % (0.0))

    def update_progress(self, pct):
        self.w.eval_pgs.setValue(int(pct * 100.0))
        #self.w.eval_pgs.set_text("%.2f %%" % (pct*100.0))

    def search(self, serialnum, data, x1, y1, wd, ht, fig):
        if serialnum != self.get_serial():
            return
        with self.lock2:
            self.pgs_cnt = 0
            self.ev_intr.clear()
            self.fv.gui_call(self.init_progress)

            msg, results, qs = None, None, None
            try:
                self.update_status("Finding bright peaks...")
                # Find bright peaks in the cutout
                peaks = self.iqcalc.find_bright_peaks(data,
                                                      threshold=self.threshold,
                                                      radius=self.radius)
                num_peaks = len(peaks)
                if num_peaks == 0:
                    raise Exception("Cannot find bright peaks")

                def cb_fn(obj):
                    self.pgs_cnt += 1
                    pct = float(self.pgs_cnt) / num_peaks
                    self.fv.gui_do(self.update_progress, pct)

                # Evaluate those peaks
                self.update_status("Evaluating %d bright peaks..." % (
                    num_peaks))
                objlist = self.iqcalc.evaluate_peaks(peaks, data,
                                                     fwhm_radius=self.radius,
                                                     cb_fn=cb_fn,
                                                     ev_intr=self.ev_intr)
                num_candidates = len(objlist)
                if num_candidates == 0:
                    raise Exception("Error evaluating bright peaks: no candidates found")

                self.update_status("Selecting from %d candidates..." % (
                    num_candidates))
                height, width = data.shape
                results = self.iqcalc.objlist_select(objlist, width, height,
                                                     minfwhm=self.min_fwhm,
                                                     maxfwhm=self.max_fwhm,
                                                     minelipse=self.min_ellipse,
                                                     edgew=self.edgew)

                if len(results) == 0:
                    raise Exception("No object matches selection criteria")
                qs = results[0]

            except Exception, e:
                msg = str(e)
                self.update_status(msg)

            if serialnum == self.get_serial():
                self.fv.gui_do(self.update_pick, serialnum, results, qs,
                               x1, y1, wd, ht, fig, msg)

    def update_pick(self, serialnum, objlist, qs, x1, y1, wd, ht, fig, msg):
        if serialnum != self.get_serial():
            return

        try:
            image = self.fitsimage.get_image()
            point = fig.objects[1]
            text = fig.objects[2]
            text.text = "Pick"

            if msg != None:
                raise Exception(msg)

            # Mark new peaks, if desired
            if self.show_candidates:
                for obj in objlist:
                    tag = self.fitsimage.add(CanvasTypes.Point(x1+obj.objx,
                                                               y1+obj.objy,
                                                               5,
                                                               linewidth=1,
                                                               color=self.candidate_color),
                                             tagpfx='peak', redraw=False)

            # Add back in offsets into image to get correct values with respect
            # to the entire image
            qs.x += x1
            qs.y += y1
            qs.objx += x1
            qs.objy += y1

            # Calculate X/Y of center of star
            obj_x = qs.objx
            obj_y = qs.objy
            self.logger.info("object center is x,y=%f,%f" % (obj_x, obj_y))
            fwhm = qs.fwhm
            fwhm_x, fwhm_y = qs.fwhm_x, qs.fwhm_y
            point.x, point.y = obj_x, obj_y
            text.color = 'cyan'

            self.wdetail.fwhm_x.setText('%.3f' % fwhm_x)
            self.wdetail.fwhm_y.setText('%.3f' % fwhm_y)
            self.wdetail.fwhm.setText('%.3f' % fwhm)
            self.wdetail.object_x.setText('%.3f' % (obj_x+1))
            self.wdetail.object_y.setText('%.3f' % (obj_y+1))
            self.wdetail.sky_level.setText('%.3f' % qs.skylevel)
            self.wdetail.background.setText('%.3f' % qs.background)
            self.wdetail.brightness.setText('%.3f' % qs.brightness)

            self.w.btn_sky_cut.setEnabled(True)
            self.w.btn_bright_cut.setEnabled(True)

            # Mark center of object on pick image
            i1 = point.x - x1
            j1 = point.y - y1
            self.pickcenter.x = i1
            self.pickcenter.y = j1
            self.pickcenter.color = 'cyan'
            self.pick_qs = qs
            self.pickimage.panset_xy(i1, j1, redraw=False)

            # Mark object center on image
            point.color = 'cyan'
            self.fitsimage.panset_xy(obj_x, obj_y, redraw=False)

            # Calc RA, DEC, EQUINOX of X/Y center pixel
            try:
                ra_txt, dec_txt = image.pixtoradec(obj_x, obj_y, format='str')
            except Exception, e:
                ra_txt = 'WCS ERROR'
                dec_txt = 'WCS ERROR'
            self.wdetail.ra.setText(ra_txt)
            self.wdetail.dec.setText(dec_txt)

            equinox = image.get_keyword('EQUINOX', 'UNKNOWN')
            self.wdetail.equinox.setText(str(equinox))

            # TODO: Get separate FWHM for X and Y
            try:
                cdelt1, cdelt2 = image.get_keywords_list('CDELT1', 'CDELT2')
                starsize = self.iqcalc.starsize(fwhm_x, cdelt1, fwhm_y, cdelt2)
                self.wdetail.star_size.setText('%.3f' % starsize)
            except Exception, e:
                self.wdetail.star_size.setText('ERROR')
                self.fv.show_error("Couldn't calculate star size: %s" % (
                    str(e)), raisetab=False)

            self.update_status("Done")
            self.plot_panx = float(i1) / wd
            self.plot_pany = float(j1) / ht
            if have_mpl:
                self.plot_contours()
                self.plot_fwhm(qs)

        except Exception, e:
            errmsg = "Error calculating quality metrics: %s" % (
                str(e))
            self.logger.error(errmsg)
            self.fv.show_error(errmsg, raisetab=False)
            for key in ('sky_level', 'background', 'brightness',
                        'star_size', 'fwhm_x', 'fwhm_y'):
                self.wdetail[key].setText('')
            self.wdetail.fwhm.setText('Failed')
            self.w.btn_sky_cut.setEnabled(False)
            self.w.btn_bright_cut.setEnabled(False)
            self.pick_qs = None
            text.color = 'red'

            self.plot_panx = self.plot_pany = 0.5
            #self.plot_contours()
            # TODO: could calc background based on numpy calc

        self.w.btn_intr_eval.setEnabled(False)
        self.pickimage.redraw(whence=3)
        self.canvas.redraw(whence=3)

        self.fv.showStatus("Click left mouse button to reposition pick")
        return True

    def eval_intr(self):
        self.ev_intr.set()

    def btndown(self, canvas, button, data_x, data_y):
        if not (button == 0x1):
            return

        try:
            obj = self.canvas.getObjectByTag(self.picktag)
            if obj.kind == 'rectangle':
                bbox = obj
            else:
                bbox  = obj.objects[0]
                point = obj.objects[1]
            self.dx = (bbox.x2 - bbox.x1) // 2
            self.dy = (bbox.y2 - bbox.y1) // 2
        except Exception, e:
            pass

        dx = self.dx
        dy = self.dy

        # Mark center of object and region on main image
        try:
            self.canvas.deleteObjectByTag(self.picktag, redraw=False)
        except:
            pass

        x1, y1 = data_x - dx, data_y - dy
        x2, y2 = data_x + dx, data_y + dy

        tag = self.canvas.add(CanvasTypes.Rectangle(x1, y1, x2, y2,
                                                    color='cyan',
                                                    linestyle='dash'))
        self.picktag = tag

        #self.setpickregion(self.canvas, tag)

    def update(self, canvas, button, data_x, data_y):
        if not (button == 0x1):
            return

        try:
            obj = self.canvas.getObjectByTag(self.picktag)
            if obj.kind == 'rectangle':
                bbox = obj
            else:
                bbox  = obj.objects[0]
                point = obj.objects[1]
            self.dx = (bbox.x2 - bbox.x1) // 2
            self.dy = (bbox.y2 - bbox.y1) // 2
        except Exception, e:
            obj = None
            pass

        dx = self.dx
        dy = self.dy

        x1, y1 = data_x - dx, data_y - dy
        x2, y2 = data_x + dx, data_y + dy

        if (not obj) or (obj.kind == 'compound'):
            # Replace compound image with rectangle
            try:
                self.canvas.deleteObjectByTag(self.picktag, redraw=False)
            except:
                pass

            tag = self.canvas.add(CanvasTypes.Rectangle(x1, y1, x2, y2,
                                                        color='cyan',
                                                        linestyle='dash'),
                                  redraw=False)
        else:
            # Update current rectangle with new coords
            bbox.x1, bbox.y1, bbox.x2, bbox.y2 = x1, y1, x2, y2
            tag = self.picktag

        self.setpickregion(self.canvas, tag)

    def drag(self, canvas, button, data_x, data_y):
        if not (button == 0x1):
            return

        obj = self.canvas.getObjectByTag(self.picktag)
        if obj.kind == 'compound':
            bbox = obj.objects[0]
        elif obj.kind == 'rectangle':
            bbox = obj
        else:
            return True

        # calculate center of bbox
        wd = bbox.x2 - bbox.x1
        dw = wd // 2
        ht = bbox.y2 - bbox.y1
        dh = ht // 2
        x, y = bbox.x1 + dw, bbox.y1 + dh

        # calculate offsets of move
        dx = (data_x - x)
        dy = (data_y - y)

        # calculate new coords
        x1, y1, x2, y2 = bbox.x1+dx, bbox.y1+dy, bbox.x2+dx, bbox.y2+dy

        if (not obj) or (obj.kind == 'compound'):
            # Replace compound image with rectangle
            try:
                self.canvas.deleteObjectByTag(self.picktag, redraw=False)
            except:
                pass

            self.picktag = self.canvas.add(CanvasTypes.Rectangle(x1, y1, x2, y2,
                                                                 color='cyan',
                                                                 linestyle='dash'))
        else:
            # Update current rectangle with new coords and redraw
            bbox.x1, bbox.y1, bbox.x2, bbox.y2 = x1, y1, x2, y2
            self.canvas.redraw(whence=3)

    def setpickregion(self, canvas, tag):
        obj = canvas.getObjectByTag(tag)
        if obj.kind != 'rectangle':
            return True
        canvas.deleteObjectByTag(tag, redraw=False)

        if self.picktag:
            try:
                canvas.deleteObjectByTag(self.picktag, redraw=False)
            except:
                pass

        # determine center of rectangle
        x = obj.x1 + (obj.x2 - obj.x1) // 2
        y = obj.y1 + (obj.y2 - obj.y1) // 2

        tag = canvas.add(CanvasTypes.CompoundObject(
            CanvasTypes.Rectangle(obj.x1, obj.y1, obj.x2, obj.y2,
                                  color=self.pickcolor),
            CanvasTypes.Point(x, y, 10, color='red'),
            CanvasTypes.Text(obj.x1, obj.y2+4, "Pick",
                             color=self.pickcolor)),
                         redraw=False)
        self.picktag = tag

        #self.fv.raise_tab("detail")
        return self.redo()

    def reset_region(self):
        self.dx = region_default_width
        self.dy = region_default_height

        obj = self.canvas.getObjectByTag(self.picktag)
        if obj.kind != 'compound':
            return True
        bbox = obj.objects[0]

        # calculate center of bbox
        wd = bbox.x2 - bbox.x1
        dw = wd // 2
        ht = bbox.y2 - bbox.y1
        dh = ht // 2
        x, y = bbox.x1 + dw, bbox.y1 + dh

        # calculate new coords
        bbox.x1, bbox.y1, bbox.x2, bbox.y2 = (x-self.dx, y-self.dy,
                                              x+self.dx, y+self.dy)

        self.redo()

    def sky_cut(self):
        if not self.pick_qs:
            self.fv.showStatus("Please pick an object to set the sky level!")
            return
        loval = self.pick_qs.skylevel
        delta = self.w.sky_cut_delta.text()
        if len(delta) == 0:
            delta = 0.0
        oldlo, hival = self.fitsimage.get_cut_levels()
        try:
            self.delta_sky = float(delta)
            loval += self.delta_sky
            self.fitsimage.cut_levels(loval, hival)

        except Exception, e:
            self.fv.showStatus("No valid sky level: '%s'" % (loval))

    def bright_cut(self):
        if not self.pick_qs:
            self.fv.showStatus("Please pick an object to set the brightness!")
            return
        skyval = self.pick_qs.skylevel
        hival = self.pick_qs.brightness
        delta = self.w.bright_cut_delta.text()
        if len(delta) == 0:
            delta = 0.0
        loval, oldhi = self.fitsimage.fitsimage.get_cut_levels()
        try:
            self.delta_bright = float(delta)
            # brightness is measured ABOVE sky level
            hival = skyval + hival + self.delta_bright
            self.fitsimage.cut_levels(loval, hival)

        except Exception, e:
            self.fv.showStatus("No valid brightness level: '%s'" % (hival))

    def zoomset(self, fitsimage, zoomlevel, scale_x, scale_y):
        scalefactor = fitsimage.get_scale()
        self.logger.debug("scalefactor = %.2f" % (scalefactor))
        text = self.fv.scale2text(scalefactor)
        self.wdetail.zoom.setText(text)

    def detailxy(self, canvas, button, data_x, data_y):
        """Motion event in the pick fits window.  Show the pointing
        information under the cursor.
        """
        if button == 0:
            # TODO: we could track the focus changes to make this check
            # more efficient
            fitsimage = self.fv.getfocus_fitsimage()
            # Don't update global information if our fitsimage isn't focused
            if fitsimage != self.fitsimage:
                return True

            # Add offsets from cutout
            data_x = data_x + self.pick_x1
            data_y = data_y + self.pick_y1

            return self.fv.showxy(self.fitsimage, data_x, data_y)

    def cutdetail(self, srcimage, dstimage, x1, y1, x2, y2, redraw=True):
        image = srcimage.get_image()
        data, x1, y1, x2, y2 = image.cutout_adjust(x1, y1, x2, y2)

        dstimage.set_data(data, redraw=redraw)

        return (x1, y1, x2, y2, data)

    def show_candidates_cb(self, tf):
        self.show_candidates = tf
        if not self.show_candidates:
            # Delete previous peak marks
            objs = self.fitsimage.getObjectsByTagpfx('peak')
            self.fitsimage.deleteObjects(objs, redraw=True)

    def plot_scroll(self, event):
        delta = event.delta()
        direction = None
        if delta > 0:
            direction = 'up'
        elif delta < 0:
            direction = 'down'
        if direction == 'up':
            #delta = 0.9
            self.plot_zoomlevel += 1.0
        elif direction == 'down':
            #delta = 1.1
            self.plot_zoomlevel -= 1.0

        self.plot_panzoom()

##         x1, x2 = self.w.ax.get_xlim()
##         y1, y2 = self.w.ax.get_ylim()
##         self.w.ax.set_xlim(x1*delta, x2*delta)
##         self.w.ax.set_ylim(y1*delta, y2*delta)
##         self.w.canvas.draw()

    def pan_plot(self, xdelta, ydelta):
        x1, x2 = self.w.ax.get_xlim()
        y1, y2 = self.w.ax.get_ylim()

        self.w.ax.set_xlim(x1+xdelta, x2+xdelta)
        self.w.ax.set_ylim(y1+ydelta, y2+ydelta)
        self.w.canvas.draw()

    def plot_button_press(self, event):
        buttons = event.buttons()
        x, y = event.x(), event.y()

        button = 0
        if buttons & QtCore.Qt.LeftButton:
            button |= 0x1
        if buttons & QtCore.Qt.MidButton:
            button |= 0x2
        if buttons & QtCore.Qt.RightButton:
            button |= 0x4
        self.logger.debug("button down event at %dx%d, button=%x" % (
            x, y, button))

        self.plot_x, self.plot_y = x, y
        return True

    def plot_button_release(self, event):
        # note: for mouseRelease this needs to be button(), not buttons()!
        buttons = event.button()
        x, y = event.x(), event.y()

        button = self.kbdmouse_mask
        if buttons & QtCore.Qt.LeftButton:
            button |= 0x1
        if buttons & QtCore.Qt.MidButton:
            button |= 0x2
        if buttons & QtCore.Qt.RightButton:
            button |= 0x4
        self.logger.debug("button release at %dx%d button=%x" % (x, y, button))

    def plot_motion_notify(self, event):
        buttons = event.buttons()
        x, y = event.x(), event.y()

        button = 0
        if buttons & QtCore.Qt.LeftButton:
            button |= 0x1
        if buttons & QtCore.Qt.MidButton:
            button |= 0x2
        if buttons & QtCore.Qt.RightButton:
            button |= 0x4

        if button & 0x1:
            xdelta = x - self.plot_x
            ydelta = y - self.plot_y
            self.pan_plot(xdelta, ydelta)

    def __str__(self):
        return 'pick'

class MyFigureCanvas(FigureCanvas):

    def setDelegate(self, delegate):
        self.delegate = delegate

    def keyPressEvent(self, event):
        self.delegate.pan_plot(event)

    def mousePressEvent(self, event):
        self.delegate.plot_button_press(event)

    def mouseReleaseEvent(self, event):
        self.delegate.plot_button_release(event)

    def mouseMoveEvent(self, event):
        self.delegate.plot_motion_notify(event)

    def wheelEvent(self, event):
        self.delegate.plot_scroll(event)

#END

redpajama_set_name: RedPajamaGithub


Citation: Cieri, Christopher, et al. Fisher English Training Part 2, Speech LDC2005S13. DVD. Philadelphia: Linguistic Data Consortium, 2005.
Fisher English Training Part 2 Speech represents the second half of a collection of conversational telephone speech (CTS) that was created at the LDC during 2003. It contains 5,849 audio files, each one containing a full conversation of up to ten minutes. Additional information regarding the speakers involved, and types of telephones used, can be found in the companion text corpus of transcripts, Fisher English Training Part 2, Transcripts (LDC2005T19).
The Fisher telephone conversation collection protocol was created at LDC to address a critical need of developers trying to build robust automatic speech recognition (ASR) systems. Previous collection protocols, such as CALLFRIEND and Switchboard-II and the resulting corpora, have been adapted for ASR research but were in fact developed for language and speaker identification respectively. Although the CALLHOME protocol and corpora were developed to support ASR technology, they feature small numbers of speakers making telephone calls of relatively long duration with narrow vocabulary across the collection. CALLHOME conversations are challengingly natural and intimate. Under the Fisher protocol, a very large number of participants each make a few calls of short duration speaking to other participants, whom they typically do not know, about assigned topics. This maximizes inter-speaker variation and vocabulary breath while also increasing the formality.
Previous protocols such as CALLHOME, CALLFRIEND and Switchboard relied upon participant activity to drive the collection. Fisher is unique in being platform driven rather than participant driven. Participants who wish to initiate a call may do so; however the collection platform initiates the majority of calls. Participants need only answer their phones at the times they specified when registering for the study.
To encourage a broad range of vocabulary, Fisher participants are asked to speak on an assigned topic which is selected at random from a list, which changes every 24 hours and which is assigned to all subjects paired on that day. Some topics are inherited or refined from previous Switchboard studies while others were developed specifically for the Fisher protocol.
The first half of the collection (Fisher English Training Speech Part 1) was released by the LDC in 2004 (LDC2004S13 for speech data, LDC2004T19 for transcripts). Taken as a whole, the two parts comprise 11,699 recorded telephone conversations.
The individual audio files are presented in NIST SPHERE format, and contain two-channel mu-law sample data; "shorten" compression has been applied to all files.
For an example of this corpus, please examine this audio sample.


They're all accused of illegally prescribing pain meds, but charges against these medical professionals are the most shocking from this week's sweep.
PARIS (AP) - Hunkered down in their hives and drunk on smoke, Notre Dame's smallest official residents - some 180,000 bees - somehow managed to survive the inferno that consumed the cathedral's ancient wooden roof.
North Korea's leader Kim Jong Un will visit Russia for talks with Vladimir Putin this month, the Kremlin said Thursday, as tensions between Washington and Pyongyang spiked higher. The Kremlin announced the talks just hours after North Korea launched a blistering attack on US Secretary of State Mike Pompeo, demanding he be removed from negotiations over its banned nuclear programme.
Attorney General William Barr said Thursday morning that he did not believe Trump met the legal standard for obstruction of justice.
Footage from the camera, which was placed on the northern bell tower, and is now in the hands of investigators.
United Continental still expects to receive new Boeing 737 MAX planes in 2019 and does not expect a fight with the manufacturer over recovering costs from the planes' grounding, United executives said Wednesday. Boeing's 737 MAX planes have been grounded globally since mid-March following two deadly crashes involving the planes in less than five months. United, parent to United Airlines, currently has 14 of the 737 MAX planes in its fleet and had been scheduled to receive five more planes in the second quarter and 11 additional planes in the third.
Another day, another small step of progress in the fight against robocalls.
The normal annual budget for restoring national monuments is about 300 million euros, he said. The immediate priority is to secure Notre Dame's vault, which has a gaping hole in the middle after its spire collapsed during Monday night's fire, Riester said in an interview on France2 television. President Emmanuel Macron Tuesday night said the cathedral will be rebuilt in five years.
Centers for Medicare & Medicaid Services Administrator Seema Verma warns the Medicare system cannot function with millions more Americans added.
It doesn't promise extra power or performance over its MKC predecessor, but Lincoln's new small crossover does look and feel more luxurious.
President Emmanuel Macron on Tuesday vowed to rebuild Notre-Dame cathedral "even more beautifully" within five years, as France reeled with shock from the fire that gutted the great Paris landmark. Macron announced the fast timescale -- for a process some experts said would take decades -- in an address to the nation where he hailed how the disaster had shown the capacity of France to mobilise and unite. Macron's defiant comments indicated he wants the reconstruction of the cathedral to be completed by the time Paris hosts the Olympic Games in 2024.
Qualcomm Inc on Tuesday won a major victory in settling its wide-ranging legal dispute with Apple Inc, signing a six-year patent license deal and a supply agreement that could pave the way to getting its modem chips back in the iPhone, which featured only Intel Corp chips last year. The settlement also includes a payment from Apple to Qualcomm, but the companies did not disclose the amount. Shares of Qualcomm jumped 22 percent in late afternoon trading, their biggest gain in more than 19 years.
Tucked away for 40 years, this 1955 Chevrolet Corvette looks worse-for-wear in its hiding place - but now it's out, don't even think about trying to buy it. Anyone who owns a rare classic car like a 1955 Corvette could tell you that car collectors are constantly trying to buy them up, and that's the exact reason Bob Doucette put his 1955 Corvette into hiding - that, and wanting a safe place to preserve the car.
DAMASCUS, Syria (AP) - Syria and Iran said Tuesday the United States is waging "economic terrorism" against countries that have different opinions and should pursue its aims through diplomacy instead.


text:
by Nicole Ponce | Dec 23, 2022 | Cities On The Frontline
About this session The economic recession and supply chain-disruption caused by Covid-19 pandemic, as well as the global fallout from the Ukrainian war, have made global food security and food affordability a growing concern. In fact, up to 71 million people from the...
by Resilient Cities Network | Dec 15, 2022 | Urban Exchange Podcast
In this episode, our Executive Director Lauren Sorkin hosts Glasgow City Council leader, Susan Aitken, to uncover some of the key takeaways from COP27 and how it compared to COP26, the significance of cities at these conferences, and the critical role of finance in...
About this session As COP27 approaches, global attention focuses on the urgent commitments needed to address the unfolding challenges of climate change. Cities are at the front and center of the fight against the cascading climate crisis and have a critical role in...
Cities on the Frontlines of Climate Resilience: 10 Pathways for Action from COP27 to COP28
by Resilient Cities Network | Dec 12, 2022 | Press Room
Authored by: Lauren Sorkin, Executive Director, Resilient Cities Network This year's UNFCCC COP27 was without a doubt the highest stakes UN meeting I have attended. Indeed, with the goal of capping global warming at 1.5 degree Celsius rapidly slipping through our...
Washington DC's Emergency Food Supply Chain
by Resilient Cities Network | Dec 12, 2022 | News and Blogs
BACKGROUND Communities across the United States and around the world depend on supply chains to deliver the commodities which are essential for daily life and survival. COVID-19 as well as other large scale natural and human-caused disasters taught us to expect...

redpajama_set_name: RedPajamaCommonCrawl


Ann is now the sole proprietor at The Spa Hotel.
Please contact us to reserve your table.
Christmas 2011 Looking for a venue ?
Our Christmas Fayre Menu is available throughout December.
We are serving a 5 course menu on Christmas Day and a 3 course menu on Boxing Day.
Pick up our Festive Season leaflet for full details.


text:
Search Results for Medbh McGuckian
Theory and Philosophy (3)
Twentieth-Century Literature (3)
Research Article (2)
1-3 of 3 Search Results for
Medbh McGuckian
Both Flower and Flower Gatherer: Medbh McGuckian's The Flower Master and H.D.'s Sea Garden
Lesley Wheeler
Twentieth-Century Literature (1 December 2003) 49 (4): 494–519.
DOI: https://doi.org/10.1215/0041462X-2003-1003
...Lesley Wheeler Copyright © Hofstra University 2004 HI Both Flower and Flower Gatherer: Medbh McGuckian s The Flower Master and H.D.'s Sea Garden Lesley Wheeler T h e relationship between maternity and other kinds of work remains a difficult subject for...
Famine Memory and Contemporary Irish Poetry
Marian Eide
Twentieth-Century Literature (1 March 2017) 63 (1): 21–48.
DOI: https://doi.org/10.1215/0041462X-3833456
... © Hofstra University 2017 Cultural memory Eavan Boland Eiléan Ní Chuilleanáin Ireland Irish history Katie Donovan Medbh McGuckian Patrick Cotter Patrick Kavanagh To mark the sesquicentennial anniversary of the Irish Famine, 1 entrepreneur Norma Smurfit donated the work of sculptor...
Index: Twentieth-Century Literature Volumes 45–50, 2000–2004
Keith Dallas
Twentieth-Century Literature (1 March 2005) 51 (1): 114–122.
... Remains of the Day and Midcentury Anglo-American Tensions." 48.1 (2002): 77-99 McGuckian, Medbh. See Wheeler McKinsey, Martin. "Classicism and Colonial Retrenchment in W. B.Yeats's 'No SecondTroy 48.2 (2002): 174-190 Meckier, Jerome. "Aldous Huxley's Americanization of the Brave New...


Толкова малко хранения, а толкова много вкусни неща..
Take me seriously at your own risk!
Gomeroi. This is MY truth.
We do the work, You get the honor!
A team of foodies based in Brussels with an international appetite for everything foodie.


I am currently working on my Ph.D in Developmental and Educational Psychology at Boston College. Prior to BC, I received my graduate degree and training in Education from Harvard University. I have six years of teaching experience at the middle and high school levels, and I specialize in working with struggling students and students with learning/developmental disabilities.
I make it a priority to meet my students where they are in their academic progress, and to work with them to set short-term and long-term goals. I prioritize working to develop logical and generalizable ways to address questions and problems, as this makes it easier to know which strategy can be used to solve them. I also work with students to learn about learning itself -- to understand the ebb and flow of knowledge acquisition and to take challenge and failure in stride. I value a growth mindset stemming from both hard work and having fun!
Cooking, running, and spending time with animals.


Help! My brain has been hijacked by reptiles!!!!
"I'm not going into justification mode BUT ……" and a stream of words spat out from my snarling lips. I could feel the tears well up in the corners of my eyes, my body tensed and an overwhelming need to grab my car keys and run for the nearest exit, overcame me.
Now you may be wondering, what on earth was going on? And as much as I'm sure you would enjoy the juicy details, there are just some things that a girl should keep to herself. Ok, ok. I'll give in and share, but only a little. Deal?
I had just been called out on something by someone close to me. Something that stung like a swarm of bees, to hear. And before I realised Tanya the Warrior Princess (in this case maybe just the Flame Thrower) emerged. At first with anger and then furiously wishing her white horse would appear and whisk her off to safety. Cool calm and collected? Ummm not so much!
Now I know I'm a coach and I should know better, but there are times when humanness trumps coach. Ordinarily I would tell a client who shares this kind of story "Practice the Pause", "Have an open mind", "Listen to understand".
The reality is that we are all human and our brains are all (or mostly all) wired the same. You see the explanation from neuroscience is that whenever we feel attacked, low trust or in survival mode, we experience an Amygdala Hijack. Or in simple terms our primitive Reptilian Brain takes over, which in turn impacts our Heart Brain (Limbic brain, that part which regulates our physical senses) and causes us to go into Fight, Flight or Freeze mode.
All higher level of logic and reasoning which comes from our Executive Brain (neocortex), goes out the door at light speed with not even a wave goodbye.
So to cut myself some slack and just state once again for the records – I'm human to the core. This is instinct at its best. Knowing this brain wiring fact is key.
There's a beauty in this process, because as soon as one can calm the heck down, the Executive Brain (neocortex) takes over and one starts to rationalise. "Is it true? What makes it so?" Logic returns to the building.
Now be honest, have you ever been there? And how has it worked out for you?
I guess my final thought on this all is that one of the things that we all have in common is the humanness of us, and our aim in these kinds of situations is to deal with them in the most constructive and least hurtful way possible. Also in order to master the hijack, takes raised awareness and constant work.
Well, go forth and may the calm be with you. I have something to work on. I'm off to build my reptile slaying muscle.


Sacramento's hot, dry weather can put a serious strain on our city's shade trees. Trees cope with this stress by dropping some leaves in an effort to use less water and nutrients. Mature trees that usually get regular irrigation can lose some of their leaves due to sudden watering restrictions imposed during drought. But, an occasional deep soak should get them through the summer and they should recover just fine. Learn more about how to water your mature tree.
Young trees are extra sensitive to heat stress and may not survive summer leaf drop. Check your tree and the soil regularly and be sure to properly water your young trees during dry weather!
If you think your tree is suffering from more than heat stress, consult a Certified Arborist. And to learn more about caring for your trees all year long, visit our Tree Care page.


Which Office features would you would like to see in Ribbon Hero challenges?
We want to hear from you about which Office features you'd love to play as a Ribbon Hero challenge! Please post your ideas below.


text:
Children's hearings training resource manual: volume 1
Children and Families Directorate
Children and families, Education, Law and order
Volume 1 contains the Children's Hearings (Scotland) Act 2011 and new rules regarding legislation and procedures.
Appendix 1 Antisocial Behaviour etc. (Scotland) Act 2004 (Extracts)
Children's Hearings (Scotland) Act 2011
The Children's Hearings (Scotland) Act 2011 (Rules of Procedure in Children's Hearings) Rules 2013
Section 2 Legal Framework and Best Practice
Section 3 The Children's Hearings (Scotland) Act 2011
1 The Structure of the Act
2 Fundamental Principles of the Act
Section 4 Children, Parents and Guardians
1 Parental Rights and Responsibilities
2 Applications for residence and contact orders - s 11 of the 1995 Act.
3 Consent to medical treatment - (s 186)
4 Instructing a solicitor
Section 5 Promotion of Children's Welfare
1 Local Authorities and their Duties
2 Relevant Local Authority
3 Implementation Authority
4 General Purpose of a Children's Hearing
5 The Provision of Advice to a Children's Hearing by the National Convener
7 Advocacy for Children (s 122)
Section 6 Referral to the Children's Reporter
1 Referral to the Children's Reporter
2 Section 67 Grounds
3 The Reporters Decisions
Section 7 Procedures for Pre-hearing Panels and Children's Hearings
1 General Duty of Panel Members
2 Procedures for Pre-hearing Panels
3 Matters for Determination by a Pre-hearing Panel
4 Procedures at Children's Hearings
5 Attendance at Hearings
6 Beginning the Hearing
7 Consideration of the Case
Section 8 Decisions and Reasons
2 Disposals available to Hearings
3 Appeals against a children's hearing
Section 9 Different Types of Hearing
1 Different Types of Hearing
2 Disposals open to the Sheriff
3 Non Disclosure of Information
Section 10 Emergency Protection of Children
Section 11 Warrants and Urgent Necessity Decisions
Section 12 Legal Assistance (s 191)
Section 13 Powers of the Hearing
1 Breach of Duty by Local Authority
2 Failure to Provide Education for Excluded Pupil (s 127)
3 Parenting Orders (s 128)
4 Mutual Assistance (s 183)
Section 14 Essential Information
Section 15 The Panel Member at the Hearing
2 Work on receipt of paperwork
3 Pre-hearing preparation
4 The Hearing - the beginning
5 The Hearing - the middle
6 The Hearing - making decisions
7 The Hearing - the ending
8 Post Hearing
Section 16 Step by Step Procedures - Pre-hearing Panel
Section 17 Step by Step Procedures - Children's Hearings
Section 18 Glossary of Terms
Appendix 2: Adoption and Children (Scotland) Act 2007 (extracts)
Appendix 3 The Rehabilitation of Offenders Act 1974
Appendix 4 Scottish Children's Reporter Administration (SCRA): Papers for Children
Appendix 5 Summary of Legal Aid and Assistance
Appendix 6: Amendments under Section 62 (5) and Section 67(2) of the Children's Hearings (Scotland) Act 2011
Section 4 Antisocial behaviour orders
(1) On the application of a relevant authority, the sheriff may, if satisfied that the conditions mentioned in subsection (2) are met as respects the person to whom the application relates (the "specified person"), make an antisocial behaviour order.
(2) Those conditions are-
(a) that the specified person is at least 12 years of age;
(b) that the specified person has engaged in antisocial behaviour towards a relevant person; and
(c) that an antisocial behaviour order is necessary for the purpose of protecting relevant persons from further antisocial behaviour by the specified person.
(3) For the purpose of determining whether the condition mentioned in subsection (2)(b) is met, the sheriff shall disregard any act or conduct of the specified person which that person shows was reasonable in the circumstances.
(4) Where the specified person is a child, the sheriff shall, before determining the application, require the Principal Reporter to arrange a children's hearing for the purpose of obtaining their advice as to whether the condition mentioned in subsection (2)(c) is met; and the sheriff shall, in determining whether that condition is met, have regard to that advice.
(5) Subject to subsections (6) and (7), an antisocial behaviour order is an order which prohibits, indefinitely or for such period as may be specified in the order, the specified person from doing anything described in the order.
(6) The prohibitions that may be imposed by an antisocial behaviour order are those necessary for the purpose of protecting relevant persons from further antisocial behaviour by the specified person.
(7) If an antisocial behaviour order is made on the application of a local authority the order may, in addition to imposing prohibitions that are necessary for the purpose mentioned in subsection (6), impose such prohibitions as are necessary for the purpose of protecting other persons ("affected persons") from further antisocial behaviour by the specified person.
Section 75A Requirement on Principal Reporter to consider application for parenting order
(1) Subsection (2) below applies where it appears to-
(a) the children's hearing to whom a child's case has been referred under section 65(1) of this Act; or
(b) a children's hearing arranged, under section 73(8) of this Act, to review a supervision requirement in respect of a child,
that it might be appropriate for a parenting order to be made in respect of a parent of the child under section 102 of the Antisocial Behaviour etc. (Scotland) Act 2004 (asp 8) (the "2004 Act").
(2) The hearing may require the Principal Reporter to consider whether to apply, under subsection (3) of that section of the 2004 Act, for such an order.
(3) A requirement under subsection (2) above shall specify-
(a) the parent in respect of whom it might be appropriate for the order to be made; and
(b) by reference to subsections (4) to (6) of that section of the 2004 Act, the condition in respect of which the application might be made.
(4) In subsection (1) above, "parent" and "child" have the same meanings as in section 117 of the 2004 Act."
102 Applications
(1) The court may make a parenting order in respect of a parent of a child where-
(a) subsection (2) or (3) applies; and
(b) the Scottish Ministers have notified the court that the local authority for the area in which the parent ordinarily resides has made arrangements that would enable the order to be complied with.
(2) This subsection applies where-
(a) the application for the order is made by the appropriate local authority; and
(b) the court is satisfied that-
(i) the behaviour condition; or
(ii) the conduct condition,
is met.
(3)This subsection applies where-
(a) the application for the order is made by the Principal Reporter; and
(i) the behaviour condition;
(ii) the conduct condition; or
(iii) the welfare condition,
(4) The behaviour condition is-
(a) that the child has engaged in antisocial behaviour; and
(b) that the making of the order is desirable in the interests of preventing the child from engaging in further such behaviour.
(5) The conduct condition is-
(a) that the child has engaged in criminal conduct; and
(b) that the making of the order is desirable in the interests of preventing the child from engaging in further such conduct.
(6) The welfare condition is that the making of the order is desirable in the interests of improving the welfare of the child.
(7) For the purposes of subsection (5), a child engages in criminal conduct if the child engages in conduct that constitutes a criminal offence (or would do so if the child had attained the age of 8 years).
(8) An application under this section shall be made by summary application to the sheriff of the sheriffdom where the parent ordinarily resides.
(9) Before an application is made under this section-
(a) by a local authority, it shall consult the Principal Reporter;
(b) by the Principal Reporter, the Principal Reporter shall consult the appropriate local authority.
(10) In this section, "appropriate local authority" means the local authority for the area where the child ordinarily resides.
103 Parenting orders
(1) A parenting order is an order requiring the specified person-
(a) to comply, during a specified period-
(i) beginning with the making of the order; and
(ii) not exceeding 12 months,
with such requirements as are specified; and
(b) subject to subsection (2), to attend, during a specified period-
(i) falling within the specified period mentioned in paragraph (a); and
(ii) not exceeding 3 months,
such counselling or guidance sessions as may be directed by a supervising officer appointed by the relevant local authority.
(2) Where a parenting order has been made in respect of the person on a previous occasion in the interests of the child in whose interests the order is to be made, the order need not include a requirement under subsection (1)(b).
135 Supervision requirements: conditions restricting movement
(9A) The powers are-
(b) that the children's hearing may impose, under subsection (3)(b) above, a movement restriction condition.".
(11) In this section, "movement restriction condition" means a condition-
(a) restricting the child's movements in such way as may be specified in the supervision requirement; and
(b) requiring the child to comply with such arrangements for monitoring compliance with the restriction mentioned in paragraph (a) above as may be so specified.
(12) Where a children's hearing impose a condition such as is mentioned in subsection (9A)(b) above, they shall also impose under subsection (3)(b) above such of the conditions prescribed by the Scottish Ministers for the purposes of this section as they consider necessary in the child's case.
(13) The Scottish Ministers may by regulations make provision as to the arrangements mentioned in subsection (11)(b) above.
(14) Regulations under subsection (13) above may in particular include provision-
(a) prescribing what method or methods of monitoring compliance with the restriction mentioned in paragraph (a) of subsection (11) above may be specified in a supervision requirement;
(b) specifying the devices which may be used for the purpose of that monitoring;
(c) prescribing the person who may be designated by a children's hearing to carry out that monitoring or the class or description of person from which that person may be drawn;
(d) requiring a children's hearing who have designated a person in pursuance of paragraph (c) above who is no longer within the provision made under that paragraph to vary the designation accordingly and notify the child of the variation.
(15) The Scottish Ministers may, by contract or otherwise, secure the services of such persons as they think fit to carry out the monitoring mentioned in subsection (11)(b) above and may do so in a way in which those services are provided differently in relation to different areas or different forms of that monitoring.
(16) Nothing in any enactment or rule of law prevents the disclosure to a person providing services in pursuance of subsection (15) above of information relating to a child where the disclosure is made for the purposes only of the full and proper provision of the monitoring mentioned in subsection (11)(b) above.
(17) A children's hearing may include in a supervision requirement a movement restriction condition only if the hearing is constituted from the children's panel for a local government area which is prescribed for the purposes of this section by the Scottish Ministers.".
Antisocial Behaviour etc. (Scotland) Act 2004 as amended by Schedule 5 of the Children's Hearings (Scotland) Act 2011
Section 12 Sheriff's power to refer case to children's hearing
(1) This section applies where-
(a) the sheriff makes an antisocial behaviour order or an interim order in respect of a child, and
(b) the sheriff considers that a section 67 ground(other than the ground mentioned in section 67(2)(j)) applies in relation to the child.
(1A) The sheriff may require the Principal Reporter to arrange a children's hearing.
(1B) The sheriff must give the Principal Reporter a section 12 statement if-
(a) The sheriff makes a requirement under section (1A), and
(b) A compulsory supervision order is not in force in relation to the child
(1C) A section 12 statement is a statement-
(a) Specifying which of the section 67 grounds the sheriff considers applies in relation to the child,
(b) Setting out the reasons why the sheriff considers the ground applies, and
(c) Setting out any other information about the child which appears to the sheriff to be relevant
(1D) In this section-
"compulsory supervision order" has the meaning given to it by section 83 of the Children's Hearings (Scotland) Act 2011,
"section 67 ground" means a ground mentioned in section 67(2) of that Act.".
Tom McNamara


Photo courtesy of John Graham.
The Barley to Barrel program hosts a release party tonight at Company Brewing. Get a glimpse at what's in store for the future of brewing in Milwaukee.
Barley to Barrel is a 10-week class that guides prospective brewers through every step of the process of launching a brewery, right down to selling their brew to real restaurants and bars.
The Barley to Barrel program benefits from a robust Milwaukee craft beer scene. And the Milwaukee beer scene gains from having something like Barley to Barrel in town. It's a win-win.
It's not about just the actual brewing; the learning includes seminars that cover sales and distribution, licensing issues, and marketing tactics. Barley to Barrel is run by the CrafterSpace and lists local luminaries like Lakefront Brewery founder Russ Klisch and Milwaukee Brewing founder Jim McCabe as mentors.
On Wednesday, Nov. 15, the third iteration of Barley to Barrel hosts a launch party at Company Brewing (735 E. Center St.). It's a graduation of sorts for fall participants, and that means the release of three different beers crafted by the group. The creations are Snowy Kromer Spiced Winter Cream Ale, Hideout Old Fashioned Ale and Bay View Brunch Brown Ale. Party attendees get to hear the stories of the brewers, sample all three brews and vote for their favorite.
Barley to Barrel debuted in the spring of 2016. The fourth installation is slated for spring of 2018.
Where: Company Brewing, 735 E. Center St.
When: Wednesday, Nov. 15, 6 to 9 p.m.
Previous ArticleWhat Happens to Milwaukee Zoo Animals During the Winter?


text:
'use strict';

// MODULES //

var isObject = require( '@stdlib/assert/is-plain-object' );
var hasOwnProp = require( '@stdlib/assert/has-own-property' );
var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive;
var isNonNegative = require( '@stdlib/assert/is-nonnegative-number' ).isPrimitive;
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
var format = require( '@stdlib/string/format' );

// MAIN //

/**
* Validates function options.
*
* @private
* @param {Object} opts - destination object
* @param {Options} options - function options
* @param {string} [options.name] - debug namespace
* @param {boolean} [options.objectMode] - specifies whether a stream should operate in object mode
* @param {NonNegativeNumber} [options.highWaterMark] - specifies the `Buffer` level for when `write()` starts returning `false`
* @param {boolean} [options.allowHalfOpen] - specifies whether the stream should remain open even if one side ends
* @param {boolean} [options.readableObjectMode] - specifies whether the readable side should be in object mode
* @returns {(Error|null)} null or an error object
*/
function validate( opts, options ) {
	if ( !isObject( options ) ) {
		return new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
	}
	if ( hasOwnProp( options, 'name' ) ) {
		opts.name = options.name;
		if ( !isString( opts.name ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'name', opts.name ) );
		}
	}
	if ( hasOwnProp( options, 'objectMode' ) ) {
		opts.objectMode = options.objectMode;
		if ( !isBoolean( opts.objectMode ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a boolean. Option: `%s`.', 'objectMode', opts.objectMode ) );
		}
	}
	if ( hasOwnProp( options, 'readableObjectMode' ) ) {
		opts.readableObjectMode = options.readableObjectMode;
		if ( !isBoolean( opts.readableObjectMode ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a boolean. Option: `%s`.', 'readableObjectMode', opts.readableObjectMode ) );
		}
	}
	if ( hasOwnProp( options, 'allowHalfOpen' ) ) {
		opts.allowHalfOpen = options.allowHalfOpen;
		if ( !isBoolean( opts.allowHalfOpen ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a boolean. Option: `%s`.', 'allowHalfOpen', opts.allowHalfOpen ) );
		}
	}
	if ( hasOwnProp( options, 'highWaterMark' ) ) {
		opts.highWaterMark = options.highWaterMark;
		if ( !isNonNegative( opts.highWaterMark ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a nonnegative number. Option: `%s`.', 'highWaterMark', opts.highWaterMark ) );
		}
	}
	return null;
}

// EXPORTS //

module.exports = validate;


With Internet security being the number one priority for anyone who is connected to the web, a firewall is an essential part of your security suite. What a firewall does is assist the user to prevent people or malicious programs from hacking into your data. You can surf the web without fear of having your identity stolen or privacy compromised. The Windows operating system does include its own firewall software, however due to the fact that it only offers an average level of protection, you may wish to consider upgrading your firewall with a free firewall software option available for download online, giving you more protection and performance.
Comodo Firewall can protect your system from viruses, trojans, worms, hacker attachs and zero day attacks. The software features a built-in antivirus program and has a simple-to-us interface and does not use up a great deal of your system resources.
The free version of Online Armor protects against attack from hackers, malicious programs and identity theft and can easily be upgraded to a premium version which adds automatic updates and a "banking mode" to add extra protection when you are banking online. It has a simple-to-use interface and additionally supports Windows 8.
Private Firewall is a feature-rich application with a numBer of key features including intelligent tracking, HIPS, process monitoring and port tracking. The software is simple to install and set-up and does not use much of the system's resources, preventing intrusion from malware and other online threats.
Preventing unauthorised access your your PC is simplified by using PC Tools Firewall. The easy to use software can be run in either "normal" or "expert" user mode for added customisation and the well-designed interface looks good and is a breeze to use. This is definitely a free firewall software to consider when strengthening your computer's defences.
Tiny Wall lives up to its name and is a software package extremely small in size. The program is best used within an existing firewall application, so using the Tiny Wall alongside the standard Windows Firewall will give you more than adequate protection. Tiny Wall is easy to configure and can be managed through a series of "Hot keys," as well as being light on your system resources.


Some kind of big release went out in EQ2, so they're offering folks free level 100 boosts to a character of choice. I'm so very far behind in content (I actually have never done any content beyond the 50s in that game) that the content itself doesn't concern me one bit.
However, I have a stable full of alts that for some reason I can't let go of. They all have huge undecorated houses, even the whole Isle of Refuge, and vet rewards for over a decade, still 5K Station Cash Daybreak bucks (whatever) and yet, I sadly let them gather dust.
Maybe I'll make it a goal to spend more time exploring EQ2 this year.
Anyhow, despite not actually playing the game, my ears still perk up every time they give away a character boost. I've actually boosted 5 characters (including the one I just did last night) over the years, at varying levels.
Last time they offered this, I put out a poll on who I should boost because it's a hard choice! My little Fury Rawring won… but I actually never played with him after I boosted (figures).
This time around, I knew there was no question who I wanted to boost. My Froglok monk, Chirrupp, is the only character who didn't have access to a flying mount (which I love so much in EQ2). All my other characters may be low leveled in their battle classes, but I spent a LOT of double XP weekends grinding their crafting classes to 90, soully for the flying mount, back when I was actually in a guild and had the means to.
So, yeah. Free level 100 boost.
If Daybreak is trying to remind me there's a game where I put a lot of time and money and have a huge amount of alts and content I've never seen… I guess it worked. I always feel a little ashamed that I haven't done more in EQ2 than I did.
I got that mount when I boosted my Necro last time round. She's an iksar and it suits her perfectly.
I'm going to log all my accounts in over the weekend and get the boosts – even though I do play fairly regularly i can still realistically only keep one character up to speed in current content (the levels are just the tip of the iceberg, as with all end game MMO progression) but I'm still not going to miss out on free stuff!
Interesting. Last time I boosted, I got a purple Pegasus instead. I totally agree on free stuff, and EQ2 is just too easy to roll alts for.


text:
President's Award - International Trademark Association (2023)
What are the criteria for the President's Award? Who is eligible to submit nominations? Who is eligible to be nominated? Who decides on the President's Award recipients? Pravin Anand Iris Quadrio Past Award Winners Anna Carboni Mladen Vukmir Lara Kayode Marion Heathcote Videos
About INTA
Nominations closed on Friday, September 2, 2022.
The President's Award acknowledges the profound appreciation of the global trademark and related intellectual property community to individuals of a member organization who, over the course of a career in trademark and related IP law, have made a lasting impact on our Association and our mission.
What are the criteria for the President's Award?
The President's Award is granted to one or more individuals from a member organization who:
Consistently provides outstanding service to INTA through work on committees, task forces, and/or the Board of Directors
Offers innovative approaches to the fulfillment of INTA's mission that have had an enduring impact on the Association
Acts as a role model and leader in the practice of trademark and related IP law
Who is eligible to submit nominations?
INTA Foundation Board of Governors
Past Presidents and Past Counsel
Global Advisory Council and Programming Advisory Council participants
Task Force and Project Team members
Who is eligible to be nominated?
Any individual of a member organization who meets the above criteria
Who decides on the President's Award recipients?
Our Board Officers evaluate the nominations and select the award recipients. We recognize them at the Awards Ceremony at the Leadership Meeting every year.
2021 President's Award
Pravin Anand
Anand and Anand Advocates
(Video) 2020 INTA Presidents Award Winners
I am delighted and honored to receive this award! They say sports and music create bonds, but INTA like brands build one big family. Yesterday was my father's 93rd birthday, and the first greeting came from an INTA friend in Pakistan.
An IP trailblazer, Mr. Anand has been a practicing attorney since 1979 when he joined Anand and Anand, an extension of the one-room law firm that his grandfather established in 1923. Since, Mr. Anand has expanded the firm to four major cities with 400 professionals. His practice encompasses all areas of IP litigation, including patents, copyright, design, trademarks, enforcement, and dispute resolution.
A dedicated INTA volunteer for decades, he has served on many committees, project teams, and task forces, and on INTA's Board of Directors from 2006 to 2008.
Mr. Anand's countless accomplishments include several landmark IP cases which have maintained the protection of creatives and led to extensive growth of India's IP jurisprudence. Among them are theFerid Allanicase, which paved the way for software patenting in India; theChristian Louboutincase, which protected the famous red sole as a single-color trademark in India;Philips v Amazestore, a landmark judgment on aggravated damages for IP infringers, and many more.
Recent work includes the Tommy Hilfiger Europe case, in which Mr. Anand argued for consumer health and trust in the face of counterfeit personal protective equipment that featured trademarks of well-known brands.
Human Resources announces 2022 Presidential Awards
Iris Quadrio
Marval, O'Farrell & Maira
INTA is and has always been very important in my professional and personal life. It highly impacted my career as a lawyer and helped me develop business and management skills.
Most importantly, INTA opened the door to long-lasting friendships and made me a more diverse and accomplished person and professional. Receiving the President's Award is a huge honor—a recognition that I also want to share with all the dedicated and committed INTA leaders and friends who have been inspirational in so many different ways.
Ms. Quadrio has been practicing at the law firm—the largest in Argentina— as a partner since 1998. She has extensive experience in trademarks, trade dress, copyright, and other IP issues.
A long-time active member of INTA who served on the Board of Directors from 2006 to 2008, Ms. Quadrio has a long and well-deserved history of receiving accolades for her volunteer work at the Association.
She received INTA's Volunteer Service Award for the Advancement of the Association in 2009 for "guiding the formation and leadership of the Latin America Council," as well as for her involvement in legislative initiatives and collaborative efforts in the region. Earlier, in 2004, she was recognized with the Volunteer Service Award for Advancement of Committee or Subcommittee Objectives for her role as chair of the Trademark Office Practices Committee, Examination Subcommittee.
During her two decades as an INTA volunteer, Ms. Quadrio also served as chair of the International Amicus Committee, and the Treaty Analysis Committee, and as vice chair of the Leadership Development Committee, among other roles. Currently, she is a member of the Non-Traditional Marks Committee, the Programming Advisory Council, and the 2021 Presidential Task Force on Diversity, Equity, and Inclusion.
(Video) Lara Kayode, 2019 INTA Awards Winner, President's Award
2020 President's Award Winner
Anna Carboni
Wiggin LLP
Being involved with INTA for a quarter century has given me enjoyment, legal knowledge, professional skills, and—best of all—friends all over the world. Receiving INTA's President's Award is fabulous icing on the cake, which I would love to share with my INTA friends and colleagues who have been so supportive all the way.
At the time of receiving this award, Anna Carboni had already committed more than 25 years to INTA, including serving on the Association's Board of Directors from 2012 to 2013. She served as INTA's Counsel in 2018 and 2019, becoming the first practitioner outside of North America to hold that position at the Association. During her time as Counsel, Ms. Carboni oversaw the revision of INTA's Code of Policies to ensure that they provide a best-practice platform from which the Association can continue to advance its work.
In the 2020–2021 Committee Term, she is serving on the Alternative Dispute Resolution Committee and as the European Union contributor to the Trademark Cancellations Practice Guide. In 2016, Ms. Carboni eagerly responded to INTA's request to participate in its Brexit Task Force, representing INTA members' interests and advocating before the UK government on various IP issues related to the United Kingdom's separation from the European Union.
In addition to her countless accomplishments at INTA, Ms. Carboni has made significant contributions to IP law through her judicial and quasi-judicial appointments. She was an Appointed Person hearing trademark appeals from the UK IP Office for more than seven years. She has been a Nominet Dispute Resolution Service Expert since 2004 and is an accredited mediator for The Centre for Effective Dispute Resolution. Ms. Carboni is also a thought leader in the IP world, sitting on the editorial boards of the European Trade Mark Reports and the Journal of Intellectual Property Law & Practice. She has published chapters on mediation in IP cases and overlapping rights. In 2007, Anna joined a group of IP lawyers from around world to climb Mount Kilimanjaro in Tanzania, raising a considerable amount of money along the way for ActionAid, an organization dedicated to ending poverty.
Mladen Vukmir
Vukmir & Associates
During my career I saw INTA as a source of professional excellence and integrity, of collegiality and friendship, of a globalized outlook at the world, of integration and tolerance—all things that I cherish. The work that went into my volunteer contributions always ended up having an impact, and that is most of what we can strive to achieve in our professional lives. This is why the INTA President's Award means so much to me.
Mladen Vukmir has participated on a staggering number and variety of committees, project teams, and advocacy groups at INTA for more than two decades. He's also assumed several leadership positions, including as member of INTA's Board of Directors from 2012 to 2014 and chairing the Brands and Innovation Committee during the 2018–2019 Committee Term.
(Video) INTA 2021 President's Award
One of Mr. Vukmir's passions is corporate social responsibility (CSR) and, as such, he has embraced INTA's focus, as part of its Strategic Plan, on CSR and sustainability. In the 2020–2021 Committee Term, he is a member of the Association's Brands for a Better Society Committee. And, in 2017, he co-chaired INTA's Brand Authenticity Conference in Berlin, Germany, which explored the powerful impact CSR, sustainability, and integrity can have had on brand value and business results. Also on the CSR front, Mr. Vukmir and his firm have committed to supporting a private venture developing a way to sequester carbon by the deployment of "marine snow," designed to beat global warming and contribute to the creation of a better planet. To raise awareness about the importance of CSR initiatives, Mr. Vukmir interviewed his business partner who developed the technology to produce marine snow, and authorized INTA to post the video interview on its YouTube channel.
Among his numerous accomplishments in Croatia, Mr. Vukmir has been appointed by the Government of the Republic of Croatia to serve as a member of the Board of Appeals for Patents and Topographies. He has also written and lectured on various IP topics, including regularly teaching as an adjunct lecturer at the University of Zagreb Faculty of Law.
Lara Kayode
O. Kayode and Co.
I believe my involvement at INTA is one of the reasons I describe myself as a citizen of the world. Winning the President's Award is a real honor which my colleagues and I do not take for granted. It is absolutely humbling to think that out of so many member volunteers at INTA we made the mark.
Lara Kayode is Founder and Managing Partner at O. Kayode and Co. and has been practicing law since 1992. Volunteering at INTA for nearly 20 years, she has participated on various committees, contributing to advocacy and policy work, educational programs, and legal resources. She served on the Board from 2012 to 2015.
Ms. Kayode has contributed significantly to INTA's anticounterfeiting efforts. For example, in 2010, while volunteering on the Anticounterfeiting Committee, she, together with fellow Committee member Uche Nwokocha, took the lead in organizing and hosting INTA's first official anticounterfeiting program in Nigeria. During the 2018‒2019 Committee Term, Ms. Kayode chaired INTA's Unreal Campaign Committee, Asia and Africa Subcommittee. Under her leadership in the region, INTA's awareness initiative for young consumers had exceptional growth—including a 172 percent increase in the number of students reached and a 67 percent increase in the number of events held.
Marion Heathcote
Davies Collison Cave
In a volunteer organization such as INTA, where many give generously of their time and experience and all work is ultimately collaborative, to be singled out is extremely humbling. To me this is a recognition not just of my efforts but also the contributions made by so many others, including those who have guided me, encouraged me, supported me, and worked alongside me over many years.
Marion Heathcote, Principal at Davies Collison Cave, has been a volunteer with INTA for nearly two decades. She has been a member of various committees, contributing to INTA's advocacy, educational programs, and publications. She served on the Board from 2005 to 2008 and has been a member of the Asia-Pacific Global Advisory Council since 2014.
In 2009, INTA presented Ms. Heathcote with the INTA Volunteer Service Award for the Advancement of Trademark Law for her work in championing indigenous rights regionally and globally. She served as the inaugural chair of the Indigenous Rights Committee from 2016 to 2018. During her time as chair, the Committee helped INTA provide pro bono assistance to the World Intellectual Property Organization's (WIPO) Traditional Knowledge Division for capacity-building workshops held in Iqualit, Laos, the Philippines, and Western Samoa to guide indigenous peoples and local communities in understanding the IP system. This led to INTA's involvement in WIPO's new "Project-Based Training and Mentoring Program on Intellectual Property for Women Entrepreneurs from indigenous Peoples and Local Communities."
(Video) Call for 2022 Award Nominations | Zeeger Vink
SEE THE FULL LIST OF PAST AWARD WINNERS
International Trademark Association LogoInternationalTrademarkAssociation
© 2022 International Trademark Association. All rights reserved. Privacy Policy, Cookies Policy, and Terms of Use.
To find out more please see ourCookies PolicyandPrivacy Policy.
(Video) Marion Heathcote, 2019 INTA Awards Winner, President's Award
1. INTA 2022 AM Leadership Interview-CEO and President
(INTATV1)
2. Introducing 2015 INTA President J. Scott Evans
3. The President Awards the National Medals of Science and National Medals of Technology and Innovation
(The Obama White House)
4. 2022 PIC Academic Awards
(Playford International College)
5. INTA President David Lossignol Explains why INTA Members Must Lead Fight Against Counterfeiting
6. Installation & Awards Dinner 2019 - Full Program | Beverly Hills Bar Association
(Beverly Hills Bar Association)
What is a Novella? Understanding the Form (with Examples)
What is the Difference Between Yay, Ya, Yah, and Yeah?
Author: Gov. Deandrea McKenzie
Name: Gov. Deandrea McKenzie
Address: Suite 769 2454 Marsha Coves, Debbieton, MS 95002
Job: Real-Estate Executive
Hobby: Archery, Metal detecting, Kitesurfing, Genealogy, Kitesurfing, Calligraphy, Roller skating
Introduction: My name is Gov. Deandrea McKenzie, I am a spotless, clean, glamorous, sparkling, adventurous, nice, brainy person who loves writing and wants to share my knowledge and understanding with you.
byllen.biz


text:
#ifndef SkPDFTag_DEFINED
#define SkPDFTag_DEFINED

#include "include/docs/SkPDFDocument.h"
#include "include/private/SkTArray.h"
#include "include/private/SkTHash.h"
#include "src/core/SkArenaAlloc.h"

class SkPDFDocument;
struct SkPDFIndirectReference;
struct SkPDFTagNode;

class SkPDFTagTree {
public:
    SkPDFTagTree();
    ~SkPDFTagTree();
    void init(SkPDF::StructureElementNode*);
    // Used to allow marked content to refer to its corresponding structure
    // tree node, via a page entry in the parent tree. Returns -1 if no
    // mark ID.
    int createMarkIdForNodeId(int nodeId, unsigned pageIndex);
    // Used to allow annotations to refer to their corresponding structure
    // tree node, via the struct parent tree. Returns -1 if no struct parent
    // key.
    int createStructParentKeyForNodeId(int nodeId, unsigned pageIndex);

    void addNodeAnnotation(int nodeId, SkPDFIndirectReference annotationRef, unsigned pageIndex);
    SkPDFIndirectReference makeStructTreeRoot(SkPDFDocument* doc);

private:
    // An entry in a map from a node ID to an indirect reference to its
    // corresponding structure element node.
    struct IDTreeEntry {
        int nodeId;
        SkPDFIndirectReference ref;
    };

    static void Copy(SkPDF::StructureElementNode& node,
                     SkPDFTagNode* dst,
                     SkArenaAlloc* arena,
                     SkTHashMap<int, SkPDFTagNode*>* nodeMap);
    SkPDFIndirectReference PrepareTagTreeToEmit(SkPDFIndirectReference parent,
                                                SkPDFTagNode* node,
                                                SkPDFDocument* doc);

    SkArenaAlloc fArena;
    SkTHashMap<int, SkPDFTagNode*> fNodeMap;
    SkPDFTagNode* fRoot = nullptr;
    SkTArray<SkTArray<SkPDFTagNode*>> fMarksPerPage;
    std::vector<IDTreeEntry> fIdTreeEntries;
    std::vector<int> fParentTreeAnnotationNodeIds;

    SkPDFTagTree(const SkPDFTagTree&) = delete;
    SkPDFTagTree& operator=(const SkPDFTagTree&) = delete;
};

#endif


In three weeks time another important report into leasehold is to be published, this time by the liberal think tank CentreForum.
Earlier this month LKP was invited to its Queen Anne's Gate to offer its contributions to report, which – we are assured – were gratefully received.
CentreForum had been alerted to LKP following its instigation of the House of Lords debate on the desirability of leasehold regulation, which took place last Monday.
Baroness Gardner of Parkes, who invited LKP's Melissa Briggs and Sebastian O'Kelly to the Lords last month, was behind the move.
CentreForum' has been researching the issue of leasehold since the autumn. Given that members of LKP have been behind the most outstandingly successful LVT actions in London, winning hundreds of thousands of pounds for leaseholders, CentreForum has wisely decided to ask us over.
Similarly, LKP-accredited managing agent Alan Coates, of HML Anderton has offered to contribute the benefit of his experiences to the report's researchers.
They have already discussed the issues with Peverel executives at its offices in New Milton, Hampshire, and will undoubtedly benefit from an alternative view.
So far the report appears to be treading similar ground to the London Assembly's hard-hitting Highly Charged, which was published last month. It is supporting regulation with licensed managing agents and an ombudsman scheme to provide the low-cost redress that LVTs have failed to offer.
The whole issue of LVTs – how they work, the costs, the barristers cleaning up at them etc – is to be examined further by LKP.
CentreForum's recommendations are still being finalized and LKP is delighted to have had the opportunity to contribute to the report.


Sun Lemon Lime Burst Orange Suede Accent Purse is a one of a kind machine sewn purse! It is the perfect size for all your purse essentials! For example coins, folded bills, drivers license, lip balm, car & house keys, and more!! Scroll down for more information.
Sun Lemon Lime Burst Orange Suede Accent Purse is a one of a kind machine sewn purse! It is the perfect size for all your purse essentials! For example coins, folded bills, drivers license, lip balm, car & house keys, and more!!