text:
Board Certified Civil Trial Attorney Lorraine "Lorrie" Robinson
Board Certified Civil Trial Attorney Lorrie Robinson
Lorraine Robinson was born and raised in Clearwater. Her friends call her "Lorrie" and she invites you to as well! Lorrie's interest in trial law surfaced very early in her life when, at 12 years of age, she read an exciting biography about early 20th century criminal defense attorney Earl Rodgers, who later was the inspiration for the fictional character Perry Mason. From that point forward, Lorrie knew she was going to be a lawyer and to her that meant a "trial lawyer."
Her early interest was confirmed and deepened as she took her first speech and debate class; later participating on debate teams throughout her high school and college years loving every minute of it! Her most formative experiences in law school occurred during the summer of 1977 when she clerked with the Clearwater State Attorney's office and then in 1978 when she interned with the public defender's office in West Palm Beach.
Within a week after her graduation from law school in March 1979, she returned as a lawyer to start work at the public defender's office in West Palm Beach. It was there she learned the ropes of trial practice over the course of the following 10 years. Over those years, she tried well over 100 serious felony cases before Palm Beach county juries including several first degree murder trials. Towards the end of her career as a public defender, she served as chief of felonies supervising approximately 25 felony attorneys while continuing to handle and try serious cases that needed her attention.
In 1989, Lorrie was approached with an opportunity to enter civil practice with an established firm handling commercial litigation and personal injury cases. She accepted the opportunity to take on the challenge of civil trial law. In 1992, she returned to the Tampa Bay area to be of assistance to her mother. She accepted a position with a Tampa firm where she continued her practice in the area of commercial litigation and personal injury. Lorrie joined Perenich Caulfield Avril & Noyes (formerly called Perenich, Carroll) in 1998 as an associate bringing her more than 20 years of personal injury experience to the firm.
Lorrie is a member of the Clearwater Bar Association and the Florida Justice Association. She formerly served as President of the Pinellas Chapter of the Florida Association for Women Lawyers. Over the years, she has taught at numerous seminars and in educational settings on Internet and computer usage as well as presentations to paralegals, nurses, and other health care professionals. Presentations have included: "Travels in Cyberspace" at St. Petersburg College (formerly St. Petersburg Jr. College); "Internet and the Law" and "Health Care, Hospital Law and Nursing Home Law" for The People's Law School, an educational program sponsored by the Clearwater Bar for the general public; a segment on legal-ethical issues for nurses presented to an advanced nursing class at the University of South Florida College of Nursing; a six hour seminar on "Legal/Ethical Issues for Health Care Professionals: A Legal Perspective", St. Petersburg College (formerly St. Petersburg Jr. College).
Since 2001, she has been recognized by the Florida bar as a Board Certified Civil Trial Attorney, a distinction held by a very small percentage of attorneys, in recognition of her knowledge and experience in civil trial practice. She is admitted to practice before all Florida state courts and to the United States District Court, Middle District of Florida and Southern District as well as to the Supreme Court of the United States. She currently focuses her practice in all areas of personal injury law including motor vehicle accidents, premises liability cases, medical malpractice, product liability, workers compensation and social security disability claims.


King John led an unsuccessful expedition against the French in February. Ten galleys based at Portsmouth. 1st February. The King, Queen, son Richard and niece Eleanor embarked but were delayed a week in the Solent by poor weather. They arrived at La Rochelle on 15th February and the King won back land south of the River Loire and moved northwards to Flanders where he was defeated at the Battle of Bouvines.


text:
National Mentoring Workshop on STRENGTHENING FARMER PRODUCER ORGANISATIONS (FPOs) -14 August 2022 | ICAR-Central Plantation Crops Research Institute (CPCRI)
In this meeting note, Thamban C, Anithakumari P and Regi Jacob Thomas reflect on their participation in the National Mentoring Workshop on Strengthening Farmer Producer Organisations (FPOs) organised by ICAR-CPCRI at Kayangulam on 14th August 2022.
During the last few decades, a wide range of FPOs have emerged and their number is on the rise. A central sector scheme for formation and promotion of 10,000 FPOs is being currently implemented by the Ministry of Agriculture & Farmers Welfare under which financial assistance and other incentives are provided to FPOs. Even though a large number of FPOs – of diverse types – has been formed and is functioning there are reports about various challenges they face in sustaining their activities and to achieve their objectives (Thamban et al. 2020).
Facilitating the formation of new FPOs is extremely relevant if the interests of the millions of small and marginal farmers in our country are to be protected (Box 1). But it is also equally important to analyse the performance of existing FPOs so that the nature and extent of problems they experience can be figured out, and viable strategies and interventions can be formulated and implemented to sustain their activities.
Box 1: Why FPOs?
Indian agriculture is dominated by small and marginal holders; the average size of farm holdings is only 1.08 ha. Of the total holdings, 86 per cent are in marginal and small farm categories of less than 2 ha (GOI 2019). Fragmentation of holdings is a major constraint if farming is to be remunerative. Due to inherent resource limitations, both bio-physical and socio-economic, farmers who cultivate the fragmented holdings are unable to utilise the improved technologies for realising higher productivity and value addition, and quite often they suffer due to low or fluctuating market prices.
By organizing small and marginal farmers into farmer groups and Farmer Producer Organisations (FPOs), farmers have better capacity for and access to technical knowhow on crop planning and management, inputs, credit, post-harvest management, value addition, marketing infrastructure and better market linkages. Primary producer organisations or collectives are being viewed as the only institutions that can protect small farmers from the ill-effects of globalization or enable them to participate successfully in modern competitive markets (Trebbin and Hassler 2012).
ICAR-Central Plantation Crops Research Institute (CPCRI), one of the national institutes under ICAR having the mandate for research on coconut, arecanut and cocoa, has been actively promoting farmer collectives as part of projects implementation pertaining to transfer of technologies, especially in the coconut sector. Hence, organising the National Mentoring Workshop for Strengthening Farmer Producer Organisations, on 14 August 2022 at the ICAR-Central Plantation Crops Research Institute (CPCRI) Regional Station, Kayangulam, as part of the Platinum Jubilee celebration of the Regional Station was an apt decision. The workshop was organised in collaboration with the National Bank for Agriculture and Rural Development (NABARD). About 75 FPOs from Kerala and Tamil Nadu participated in the workshop.
The first session had presentations related to support extended for formation and sustenance of FPOs by different agencies, and the status of FPOs in selected crop sectors. They included the following:
Experiences of NABARD in promoting FPOs s-Avenues for leveraging marketing, credit and institutional support;
Policies and development ecosystem of FPOs – An analysis and way forward – Kerala scenario;
APEDA's role in marketing, export promotion & opportunities for FPO linkages;
Experiences and perspectives of FPO – A case study by the Coconut Development Board;
State sector schemes for FPOs and criteria for funding;
FPOs in the coconut sector – Lessons learnt and way forward.
It was evident from the presentations that the financial incentives and technological support provided to FPOs in the initial phase to facilitate formation and initiate activities were substantial and resulted in the proliferation of FPOs with diverse sets of objectives. However, the involvement of the agencies for monitoring their performance and to extend a helping hand to sustain the activities in an effective manner in subsequent years as and when they encounter constraints/challenges was not very satisfactory.
In the next session panellists representing ICAR institutes, KVK and NABARD, interacted with FPO representatives and clarified various aspects especially the technology support available and opportunities for functional linkages. There was good response from the FPO representatives as they expressed their interest in availing of the opportunities to attend various capacity development programmes on technologies so as to initiate viable enterprises.
However, it was felt that a mechanism needs to be planned to link the scientists of various institutes with the enterprises under FPOs, enabling them to assess the performance of technologies transferred, to suggest measures to effectively utilise these technologies, and also to modify these technologies if the enterprises experience technological constraints.
The third session was set apart for experience sharing by four selected FPOs. The genesis of an FPO, the institutional support received, mobilisation of farmers and resources, services/products by FPOs, and their marketing practices, finance management, constraints experienced, etc., were briefly narrated by the FPO representatives. Out of the 75 FPOs from Kerala and Tamil Nadu that participated in the workshop, the majority were in their initial years of activities. But some of the FPOs were as old as 13 years. A cursory look at the profile of FPOs revealed that activities pursued by the FPOs were also very diverse in terms of number of shareholders, working capital mobilised, services offered, products manufactured and marketed, institutions linked, and of course problems encountered. Newly-formed FPOs were keen to know about the incentives and support measures available from different agencies as well as the potential technologies available for value addition. But the older FPOs were all keen to describe difficulties faced in sustaining their activities.
A representative of one of the FPOs in the coconut sector that was established 12 years ago, who shared her experience elaborated on the major difficulty with regard to lack of sufficient working capital for managing the production of coconut oil, the major product of the FPO. Another FPO representative spoke of the difficulty experienced in convincing the growers about the need to form an FPO. Innovative marketing practices including use of online platforms, such as Amazon, for marketing was described by one of the FPO representatives. Constraints mentioned by the representatives of FPOs in the coconut sector and suggestions for revitalising the FPOs were similar to the results from a study conducted by CPCRI among selected Coconut FPOs in Kerala, as well as the output of a Scientist-FPOs interface programme on 'FPOs in coconut sector – Status and challenges' organised by CPCRI during 2021 at Kozhikode.
Local Self Governments (LSGs) can play an important role in supporting farmer collectives by involving them in the implementation of a decentralised planning initiative, opined a representative of an FPO in the rice sector. Interventions on production and supply of planting materials, customised fertilizers, inputs for organic agriculture, interventions to provide support to growers by making available skilled labour and farm equipment and machinery, etc., can be included in the decentralised planning and linked to the FPOs for implementation. However, many of the FPOs felt that most of the LSGs do not realise the potential of linking decentralised planning in agriculture sector and FPOs. They recommended that specific norms be fixed and necessary guidelines issued to LSGs for supporting FPOs through decentralised planning.
According to one of the participants, it is quite encouraging that government is providing incentives for the formation of new FPOs. However, equal emphasis should also be placed on extending continuous support for the FPOs in subsequent years when they start experiencing difficulties in sustaining their activities. This is not happening.
Important suggestions to revitalise the FPOs in coconut sector included the following:
Facilitate formation of a consortium of FPOs in coconut sector and common branding for the coconut value added products produced and marketed by coconut FPOs;
A corpus fund may be raised with government support for generating sufficient working capital for coconut FPOs;
Procurement of coconut from coconut growers may be facilitated through a network of CPSs/CPFs, and primary processing of nuts facilitated by the formation of a nodal agency for the collection of copra, and a central facility for safe storage/warehousing;
Specific norms may be fixed and necessary guidelines issued to LSGs for supporting FPOs through decentralized planning.
As part of the workshop two agri-based start-ups – one on the 'Use of drones in agriculture' and the other on 'QR code imprinted seedling tagging and sensor for red palm weevil detection' introduced their products and services. The FPOs were made aware of the potential for taking up the services of such start-ups in their FPO interventions so as to benefit farmers.
Due to paucity of time, only a few selected representatives could share their experiences and offer suggestions, and hence it was suggested by many of the participants to have follow-up programmes with more specific sets of objectives centred around revitalising FPOs. It implies that while organising workshops or meetings on themes related to strengthening FPOs it is better to include homogenous group of FPOs in terms of crop/enterprise sector, age of the FPO, products and services offered, etc.
It is also necessary to conduct studies periodically to analyse the status of FPOs in different sectors including crop-oriented FPOs, sustainability of their activities, and development of a framework for action involving FPOs and other stakeholders to sustain activities so that farmers are able to derive the expected benefits from collectivisation.
Government of India. 2019. Agricultural census 2015-16. Phase-1. All India report on number and area of holdings. Agriculture Census Division, Ministry of Agriculture and Farmers Welfare, Government of India.
Thamban C, Jayasekhar S, Chandran KP and Rajesh M.K. 2020. Sustainability of Farmer Producer Organisations – The case of producer organisations involved in the production and marketing of 'neera' in the coconut sector in Kerala, India. Journal of Plantation Crops 48(2):150-159.
Trebbin A and Hassler M. 2012. Farmers' producer companies in India: a new concept for collective action?. Environment and Planning 44(2):411- 427.
Dr. Thamban C, Principal Scientist (Agricultural Extension), ICAR-Central Plantation Crops Research Institute (CPCRI), Kasaragode, Kerala, India. (Email: c.thamban@gmail.com)
Dr Anithakumari P, Principal Scientist (Agricultural Extension), ICAR-Central Plantation Crops Research Institute (CPCRI), Regional Station, Kayangulam, Kerala, India. (Email: anithacpcri@gmail.com)
Dr. Regi Jacob Thomas, Principal Scientist (Horticulture), ICAR-Central Plantation Crops Research Institute (CPCRI), Regional Station, Kayangulam, Kerala, India. (Email: regijacob.thomas@icar.gov.in)
Download Now!64 Downloads
Webinar on MANAGE Agricultural Extension 'Evening for Learning' Webinar Series, 19-30 November 2022
One CGIAR Consultation Workshop 'Digital Innovation and Transformation in Food-Water-Land Systems in India', 8-9 November 2022, Bhubaneswar, Odisha, India
Capacity Development of Citrus Growers of Nagpur NABARD- Sponsored Training Program on 'Advanced Production Technologies of Citrus' – 12 -14 July 2022
Training on Combating Predatory Academic Practices 4-5 August 2022 Continuing Education Center (CEC), Agriculture and Forestry University (AFU), Nepal
Webinar on 'Professional Competence of Rural Development Advisors' organized by the Society of Extension Professionals, Extension Education Institute, Hyderabad, India 20 May 2022

redpajama_set_name: RedPajamaCommonCrawl


You are purchasing a digital JPEG file at print size quality. Please specify if you are an individual or corporate customer and see following your rights to use the photo. After you finish the purchase process, you'll receive an email with the download link.
Belinda Shi, the photographer, owns the copyright of this photo. No individual or organization can change, edit, distribute or sell the photo without the photographer's permission.
For individual customer, the JPEG file is licensed to you for personal print only. No commercial use is allowed.
For corporate customer, the JPEG file is licensed to you for one time digital and print publication and distribution use.


text:
Q: FFMPEG wavelet transform What library should I add to use DWT? j2k_dwt.h is too old and I can't find what library is using in FFMPEG API now.
Thank you.

A: The updated version of j2k_dwt.c seems to be libavcodec/jpeg2000dwt.c
GitHub link

redpajama_set_name: RedPajamaStackExchange


text:
"""
A simple LCA2013 irc bot.

Run this script with two arguments, the channel name the bot should
connect to, and file to log to, e.g.:

  $ python lcabot.py

will log channel #test to the file 'test.log'.
"""

# twisted imports
from twisted.words.protocols import irc
from twisted.internet import reactor, protocol
from twisted.python import log

import datetime
import gzip
import imp
import os
import re
import sys
import time
import yaml

import utils

class MessageLogger:
    """
    An independent logger class (because separation of application
    and protocol logic is a good thing).
    """
    def __init__(self, file):
        self.file = file

    def log(self, message):
        """Write a message to the file."""
        timestamp = time.strftime("[%H:%M:%S]", time.localtime(time.time()))
        self.file.write('%s %s\n' % (timestamp, message))
        self.file.flush()

    def close(self):
        self.file.close()

class Lcabot(irc.IRCClient):
    """A logging IRC bot."""

    def __init__(self, factory):
        self.plugins = []
        self.verbs = {}

        self.last_heartbeat = time.time()
        self.current_topic = None
        self.seen_heartbeat = False
        self.last_input = time.time()

        self.factory = factory
        self.nickname = self.factory.conf['nickname']

        self.realtime_queue = []
        self.queue = []

        # Rate limiting implementation
        self.rate = 10.0           # messages
        self.per  = 5.0            # seconds
        self.last_check = time.time()
        self.allowance = self.rate

    def _writeLog(self, msg):
        try:
            self.logger.log(msg)
        except:
            pass
        log.msg(msg)

    def _enqueue(self, item, realtime):
        self._writeLog('Queued: %s' % repr(item))
        if not realtime:
            self.queue.append(item)
        else:
            self.realtime_queue.append(item)

    def _dequeue(self):
        if not self.seen_heartbeat:
            return

        current_time = time.time()
        time_passed = current_time - self.last_check
        self.last_check = current_time;

        self.allowance += time_passed * (self.rate / self.per)
        if self.allowance > self.rate:
            self.allowance = self.rate

        messages = int(self.allowance)
        self._writeLog('Dequeue %d messages of %d realtime and %d normal'
                       %(messages, len(self.realtime_queue), len(self.queue)))
        if messages > 0:
            outgoing = []
            realtime_outgoing = self.realtime_queue[:messages]
            if len(outgoing) < messages:
                outgoing = self.queue[:messages]

            self.allowance -= len(realtime_outgoing)
            self.allowance -= len(outgoing)

            for messages in [realtime_outgoing, outgoing]:
                for (method, channel, data) in messages:
                    self._writeLog('Dequeue %s %s %s' %(method, channel, data))
                    if method == 'msg':
                        self._send_msg(channel, data)
                        if data.startswith('ducking-bear: '):
                            self.privmsg('ducking-bear', channel, data)
                    elif method == 'topic':
                        self._send_topic(channel, data)
                    elif method == 'describe':
                        self._send_describe(channel, data)

            self.queue = self.queue[len(outgoing):]
            self.realtime_queue = self.realtime_queue[len(realtime_outgoing):]

    def _msg(self, channel, msg, realtime=False):
        self._enqueue(('msg', channel, msg), realtime)
        self._dequeue()

    def _send_msg(self, channel, msg):
        self._writeLog('%s >> <%s> %s' %(channel, self.nickname, msg))
        self.msg(channel, msg)

    def _topic(self, channel, topic, realtime=False):
        self._enqueue(('topic', channel, topic), realtime)
        self._dequeue()

    def _send_topic(self, channel, topic):
        self.topic(channel, topic)
        self._writeLog('%s >> Set topic to "%s"' %(channel, topic))

    def _describe(self, channel, action, realtime=False):
        self._enqueue(('describe', channel, action), realtime)
        self._dequeue()

    def _send_describe(self, channel, action):
        self.describe(channel, action)
        self._writeLog('%s >> /me %s' %(channel, action))

    def _loadPlugins(self):
        self._unloadPlugins()

        self._writeLog('[Loading plugins]')
        self.plugins = []
        self.verbs = {}

        plugin_directory = 'commands'
        re_plugin = re.compile('[^.].*\.py$')
        for plugin_file in os.listdir(plugin_directory):
            if re_plugin.match(plugin_file):
                name = plugin_file[:-3]
                self._writeLog('>> %s' % name)

                plugin_info = imp.find_module(name, [plugin_directory])
                plugin = imp.load_module(name, *plugin_info)

                for module in plugin.Init(self._writeLog,
                                          self.factory.conf):
                    try:
                        self.plugins.append(module)
                        yield module
                        for verb in module.Verbs():
                            self.verbs[verb] = module
                            self._writeLog('   implements verb %s' % verb)
                    except Exception, e:
                        self._writeLog('Exception from %s: %s' %(module, e))

    def _unloadPlugins(self):
        self._writeLog('[Unloading plugins]')
        for module in self.plugins:
            try:
                module.Cleanup()
            except Exception, e:
                self._writeLog('Exception from %s: %s' %(module, e))

    def _handleResponse(self, responses, realtime=False):
        for resp in responses:
            if resp:
                self._writeLog('Response: %s' %(repr(resp)))
                channel, kind, body = resp
                if channel is None:
                    channel = '#%s' % self.factory.conf['channels'][0]['name']

                if kind == 'msg':
                    self._msg(channel, utils.Normalize(body), realtime)
                elif kind == 'topic':
                    if body != self.current_topic:
                        self._topic(channel, body, realtime)
                    else:
                        self._writeLog('[Skipping topic update, no change]')
                else:
                    self._writeLog('Unknown response type')

    def _doHeartbeat(self):
        """Heartbeat our modules."""

        self.seen_heartbeat = True
        self.last_heartbeat = time.time()
        for module in self.plugins:
            try:
                self._writeLog('[Heartbeat sent to %s]' % module.Name())
                self._handleResponse(list(module.HeartBeat()), realtime=False)
            except Exception, e:
                self._writeLog('Exception from %s: %s' %(module, e))

    def connectionMade(self):
        irc.IRCClient.connectionMade(self)
        self.logger = MessageLogger(open(self.factory.filename, "a"))
        self._writeLog("[connected at %s]" %
                       time.asctime(time.localtime(time.time())))

    def connectionLost(self, reason):
        irc.IRCClient.connectionLost(self, reason)
        self._writeLog("[disconnected at %s]" %
                       time.asctime(time.localtime(time.time())))
        self.logger.close()

    ###########
    # callbacks for events
    def signedOn(self):
        """Called when bot has succesfully signed on to server."""
        self._writeLog("[I have signed on]")
        if self.factory.conf.get('password', None):
            self._msg('nickserv',
                      'identify %s %s' %(self.nickname,
                                         self.factory.conf['password']),
                      realtime=True)

        for channel in self.factory.conf['channels']:
            self.join(channel['name'], channel['password'])

    def joined(self, channel):
        """This will get called when the bot joins the channel."""
        self._writeLog('[I have joined %s]' % channel)
        for module in self._loadPlugins():
            self._writeLog('[Loaded %s]' % module.Name())
        self._writeLog('[Setup complete]')

        # Do some opping
        self._msg('chanserv', 'op %s %s' %(channel, self.nickname),
                  realtime=True)
        for op in self.factory.conf['operators']:
            self._msg('chanserv', 'op %s %s' %(channel, op),
                      realtime=True)

    def topicUpdated(self, user, channel, topic):
        """Called when the topic changes or we join a channel."""
        self._writeLog('%s >> topic set by %s is "%s"'
                       %(channel, user, topic))
        self.current_topic = topic

    def privmsg(self, user, channel, msg):
        """This will get called when the bot receives a message."""

        user = user.split('!', 1)[0]
        self._writeLog('channel: %s, user: %s, msg: %s' % (channel, user, msg))

        # We don't reply to ourselves
        if user == self.nickname:
            return

        # If this is a privmsg, then we need to handle channels. Ignore in
        # channel messages which aren't addressed to us
        outchannel = channel
        if channel == self.nickname:
            outchannel = user
        elif not msg.startswith(self.nickname + ':'):
            return

        # Determine the command
        command = msg.rstrip()
        if msg.startswith(self.nickname + ':'):
            command = ':'.join(command.split(':')[1:]).lstrip()
        elems = command.split(' ')
        self._writeLog('* %s *' % repr(elems))

        # Execute commands
        if elems[0] == 'reload':
            if user in self.factory.conf.get('operators', []):
                for module in self._loadPlugins():
                    self._msg(outchannel,
                              '%s: Loaded %s' %(user, module.Name()),
                              realtime=True)
            else:
                self._msg(outchannel, 'Damn kids today', realtime=True)

        elif elems[0] == 'heartbeat':
            if user in self.factory.conf.get('operators', []):
                self._doHeartbeat()
            else:
                self._msg(outchannel,
                          'I\'m sorry sonny, I can\'t quite hear you',
                          realtime=True)

        elif elems[0] in self.verbs:
            module = self.verbs[elems[0]]
            try:
                args = command[len(elems[0]):].lstrip()
                self._writeLog('[Command sent to %s]' % module.Name())
                self._handleResponse(list(module.Command(user,
                                                         outchannel,
                                                         elems[0],
                                                         args)))
            except Exception, e:
                self._writeLog('Exception: %s' % e)
                self._msg(outchannel, 'Error while handling command',
                          realtime=True)

        else:
            if channel == self.nickname:
                if elems[0] == 'help' and len(elems) > 1:
                    module = self.verbs.get(elems[1])
                    if module:
                        self._msg(user, module.Help(elems[1]),
                                  realtime=True)
                    else:
                        self._msg(user, 'That command is not registered',
                                  realtime=True)

                else:
                    sorted_verbs = self.verbs.keys()
                    sorted_verbs.sort()
                    self._msg(user, ('I understand the following commands: %s'
                                     % ', '.join(sorted_verbs)),
                              realtime=True)
            else:
                self._describe(outchannel, 'is confused', realtime=True)
                self._msg(outchannel, ('%s: I am a very simple irc bot. PM me '
                                       'for help.' % user),
                          realtime=True)

    def action(self, user, channel, msg):
        """This will get called when the bot sees someone do an action."""

        user = user.split('!', 1)[0]
        self._writeLog('%s >> * %s %s' % (channel, user, msg))

    def userJoined(self, user, channel):
        """This is called when a user joins a channel."""

        for module in self.plugins:
            try:
                self._writeLog('[Join event for %s on %s sent to %s]'
                               %(user, channel, module.Name()))
                self._handleResponse(list(module.NoticeUser(channel, user)))
            except Exception, e:
                self._writeLog('Exception from %s: %s' %(module, e))

    # irc callbacks
    def irc_NICK(self, prefix, params):
        """Called when an IRC user changes their nickname."""
        old_nick = prefix.split('!')[0]
        new_nick = params[0]
        self._writeLog("%s is now known as %s" % (old_nick, new_nick))

    # For fun, override the method that determines how a nickname is changed on
    # collisions. The default method appends an underscore.
    def alterCollidedNick(self, nickname):
        """
        Generate an altered version of a nickname that caused a collision in an
        effort to create an unused related name for subsequent registration.
        """
        return nickname + '^'

    # Scary inner goo
    def dataReceived(self, data):
        """Log all incoming data."""

        self.last_input = time.time()
        if self.factory.conf['verbose']:
            for l in data.replace('\r', '').split('\n'):
                self._writeLog('IN: %s' % l)
        irc.IRCClient.dataReceived(self, data)
        self._dequeue()

        if data.find(' PONG ') != -1:
            self._writeLog('Considering heartbeat')
            if time.time() - self.last_heartbeat > 60:
                self._doHeartbeat()

    def sendLine(self, line):
        """Log all outgoing data."""

        if self.factory.conf['verbose']:
            for l in line.replace('\r', '').split('\n'):
                self._writeLog('OUT: %s' % l)

        if self.last_input - time.time() > 300:
            self._writeLog('No input for more than five minutes. Aborting')
            sys.exit(1)

        irc.IRCClient.sendLine(self, line)

class LcaBotFactory(protocol.ClientFactory):
    """A factory for LcaBots.

    A new protocol instance will be created each time we connect to the server.
    """

    def __init__(self, conf, filename):
        self.conf = conf
        self.filename = filename

    def buildProtocol(self, addr):
        p = Lcabot(self)
        return p

    def clientConnectionLost(self, connector, reason):
        """If we get disconnected, reconnect to server."""
        connector.connect()

    def clientConnectionFailed(self, connector, reason):
        print "connection failed:", reason
        reactor.stop()

if __name__ == '__main__':
    # Initialize logging
    log.startLogging(sys.stdout)

    # Load config
    conf_file = open('bot.yaml')
    conf = yaml.load(conf_file.read())
    conf_file.close()
    print conf

    # Create factory protocol and application
    logfile = datetime.datetime.now().strftime('%Y%m%d-%H%M%S.log')
    f = LcaBotFactory(conf, logfile)

    # Connect factory to this host and port
    reactor.connectTCP("irc.freenode.net", 6667, f)

    # Run bot
    reactor.run()

redpajama_set_name: RedPajamaGithub


text:
A Batalha de Filipópólis, também chamada de Batalha de Plovdiv (), foi travada em 30 de junho de 1208 nas proximidades de Filipópolis (Plovdiv, Bulgária) entre as forças do Império Búlgaro e o Império Latino, resultando numa vitória dos cruzados latinos.

Origem do conflito
Depois que os exércitos da Quarta Cruzada tomaram Constantinopla, a capital bizantina, em 1204, eles fundaram um novo império que reinou sobre os antigos territórios bizantinos e continuaram a lutar contra os estados que surgiram na sequência - o Despotado de Epiro na Europa e o Império de Niceia na Ásia Menor. O imperador latino, Balduíno rejeitou uma proposta de paz do imperador búlgaro, Joanitzes, e, no ano seguinte, um exército cruzado foi aniquilado pelos búlgaros na Batalha de Adrianópolis. Balduíno foi capturado e morreu numa prisão em Tarnovo, a capital da Bulgária.

Porém, Joanitzes foi assassinado durante um cerco a Tessalônica em 1207. O complô foi organizado pelo seu primo, Boril, que o sucedeu no trono. O novo imperador logo teve que lidar com um golpe contra si orquestrado pelos aliados do herdeiro legítimo da coroa, João Asen II, que ainda era um garoto na época. A confusão na Bulgária deu aos latinos a chance de se reorganizar.

A batalha
Na primavera de 1208, Boril, acreditando que a situação em casa já estava mais calma, voltou sua atenção novamente para a política externa. É possível que fosse um partidário das políticas de seu antecessor e, por isso, continuou a guerra contra o Império Latino. O exército búlgaro invadiu a Trácia e derrotou os cruzados perto de Beroia (moderna Stara Zagora). Encorajado pelo sucesso, Boril marchou para o sul e, em 30 de junho de 1208, encontrou o principal exército latino. Boril tinha  soldados contra os  cavaleiros e alguns milhares de soldados latinos - Boril tentou utilizar-se da mesma tática aplicada por Joanitzes em Adrianópolis: os arqueiros montados búlgaros fustigaram os cruzados para esticar sua formação na direção da força principal búlgara. Os cavaleiros, porém, haviam aprendido a lição e não repetiram o mesmo erro. Eles organizaram uma armadilha e atacaram em peso destacamento que era liderado pelo próprio tsar. Boril, com apenas  não conseguiu resistir ao assalto e fugiu, forçando todo o exército búlgaro a recuar.

Os búlgaros sabiam que os latinos não iriam persegui-los nas montanhas e, por isso, recuaram para um dos passos orientais da cordilheira dos Bálcãs, chamado Turia. Os cruzados que seguiram o exército búlgaro foram atacados numa região montanhosa perto da moderna vila de Zelenikovo pela retaguarda búlgara e, depois de um duro combate, foram derrotados. Porém, quando a principal força latina chegou, conseguiram manter a formação e a batalha continuou por um bom tempo, terminando somente quando os búlgaros conseguiram fazer passar quase todo o exército pelas montanhas. Os cruzados também recuaram para Filipópolis.

Consequências
A derrota não foi desastrosa e, no ano seguinte, a guerra continuou. Borial era um líder enérgico e persistente, mas não conseguiu realizar seus planos. Em 1209, Henrique conseguiu convencer Aleixo Eslavo, que governava a região das montanhas Ródope, a quem deu a mão de sua filha. Para compensar, Boril teve que se aliar com seu irmão, Estrácio, que governava em Prosek - ele deu-lhe o título de sebastocrator e o direito de governar suas terras livremente. Em 1211, os búlgaros se aliaram aos nicenos, mas nem as forças conjuntas dos dois impérios foi suficiente para retomar Constantinopla. Depois do fracasso, Boril reorientou sua política externa e a paz com os latinos foi selada depois do casamento da filha de Joanitzes, Maria da Bulgária com Henrique.

Bibliografia

Йордан Андреев, Милчо Лалков, Българските ханове и царе, Велико Търново, 1996.

1208 na Europa
Filipopolis
Século XIII na Bulgária
Batalhas do século XIII
Plovdiv

redpajama_set_name: RedPajamaWikipedia


text:
Tegan Johnston
My Essence
Raising Up Wild
Loving Refuge
Beau's Coffee
Navigation Stories Breathe Easy My Essence One Wish Singles Action Multimedia Raising Up Wild Loving Refuge Beau's Coffee Nutshell Recent
As a child, Essence Garlington's family noticed she had an unusual tendency to run into things. After seeking medical attention, the doctor determined that Essence had nystagmus, a rapid, involuntary eye movement that prevents the eyes from focusing properly.
Essence is a senior in high school at the Governor Morehead School for the Blind in Raleigh. She doesn't consider herself blind.
"I guess I'm in the middle," she said. "I can see pretty well, where if I was in public school I could identify with most of the things that they were seeing, but there's also the points where they're like, 'oh, look at this!' and I'm like 'what? I can't see that.'"
Essence began attending the Governor Morehead School for the Blind in Raleigh halfway through her freshman year of high school.
"When I first got here I didn't talk to anybody for months," she said. "I was mad for a long time…I [still] don't want to be here. My answer still hasn't changed. I mean, I'm use to it now, and I've made friends and all that, but I still kind of miss being with my old friends and being in public school."
Essence rubs her eye as she waits for breakfast. The school keeps a very structured weekly schedule for the students to follow from the time they wake up in the morning until lights out in the evening.
"It can be frustrating," she said. "Sometimes I miss just being able to come home from school, eat a snack and just chill. It's different having to have structured time every time you're ready to do your own thing."
"It feels like an island," Essence said. "You feel like you're just here in this little place all the time. Then when you come home, you're outside the island where things are speedy and fast and where everybody is going and talking."
Like most of the students at GMS, Essence lives at the school from Sunday evening until Friday afternoon and then travels on a bus back to Charlotte to visit her family for the weekend.
"Lately, when I go home, I'm just really tired from off the bus, so I just go home and chill for a little bit or sleep," Essence said. "And then Saturday, if they have something planned, we do that or whatever. Sunday, I'm getting ready to come back up here."
When Essence travels to Charlotte each weekend, she stays with her older sister, Shana Phillips, her husband, Rico, and their four-year-old son, Rico Jr.
"My sisters are like my best friends," Essence said. "When we all get together, it's just like one big crazy party!"
Shana spreads Essence's eyelids open to take a closer look at her iris after reading about the eye in a textbook.
"You have really pretty eyes, Essence," Shana said.
Shana is currently taking online classes to become a nursing assistant.
Shana and her four-year-old son Rico Jr. vie for Essence's attention during her weekend visit.
"It's like our own little chill space," Essence said. "When you want to relax and watch movies and hang with your family that's where you can just be."
The sisters share a special relationship filled with love and support for each other.
"I'm so proud of the person she's become," Shana said.
"My sister calls me her personal therapist," Essence said.
Essence bounces on a ball in the gym at GMS during a free period before classes start in the morning.
"People here are a little different," she said. "They've been here a while, and they're a lot more sheltered then the people I'm use to hanging out [with]…sometimes I feel like I've missed out on the regular stuff because this school's a lot smaller and of course they're blind, so things are a little different."
Essence helps her classmate submit an assignment online during a class that consists of just the two of them.
"I love the teachers here because they each have something different and most of them are pretty fun," Essence said. "I'm not one for smaller classes because I don't like raising my hand, and so when your class is really, really small your teacher just kind of calls on you."
Essence looks out the window as she climbs stairs at GMS.
"I want to go to college, which is really hard to get ready for," she said as she thinks about the future. "Hopefully, one day, I'll open up my own little [therapy] office, so I won't have to work for somebody all the time. I'll be my own boss and have my own customers and in-and-out service…I want my own house…and that's all I know so far."


Welcome to 2018, a new Brigade year with new opportunities. If you are a BB leader, the new year brings new opportunities to achieve the BB Object in the lives of the Boys in your care. If you are a Brigader, the new year brings new opportunities to make friends, learn practical life skills, to be challenged to step out of your comfort zone, undertake adventurous pursuits, grow closer to Christ Jesus, and to have fun. If you are a church leader, the new year brings new opportunities to support your BB leadership team as they take your church into your community. If you are a parent, the new year brings new opportunities to see your son excel in new ventures, grow in responsibility, master skills, take big steps in putting others before himself, and to grow more into that young Christian man that you desire so much. Companies are starting up for the year and already planning those camps, outings, expeditions, canoeing trips, etc, for which BB is famous. If you are not yet linked with a BB Company, check out where we all are on the Brigade Groups tab on the left.
All BB Companies across Queensland have commenced their Summer recess, a time to review all that God has done in 2017, a time to relax, a time to enjoy being with family and friends, a time to enjoy God's peace, a time to wait on our Lord for His guidance and direction, and a time to organise another action-packed BB year for the Boys in 2018. From the members of the Board of Drectors may each one in the BB Queensland family - Boys, Officers, helpers, instructors, parents, and church leaders - have a very Merry Christmas and a safe and peaceful New Year. As the angels heralded some 2,000 years ago, praise God and His very special Son, our Lord, Christ Jesus.
November is when BB Companies across Queensland hold their Awards Night / Display Night / Presentation Night / Annual Inspection (are there other titles for the big occasion?). This is the occasion in which the Boys receive their very well deserved badges, certificates, prizes and trophies for the year. Normally there are several parents, siblings, Old Boys, church folk, and others present to cheer the Boys on. Super congratulations to those Boys who have won their Company's biggest award, be it Brigader of the Year or other name. We rejoice with each Boy whose development and growth is recognised and rewarded with badges, certificates and the like. And we thank God for each of the 200-plus volunteer Officers, leaders, instructors and helpers who make BB possible for Boys and young men. To all, after your awards night and break-up, have a refreshing and safe holiday period as we celebrate Immanuel - God with us.
International Men's Day 2017 is on Sunday 19th November. IMD focusses on men's health (suicide rates are still far too high), improving gender relations, and celebrating men's achievements in the areas of marriage, family and community. Male life expectancy is lower than women's. Some 95% of workplace fatalities and 99% of combat deaths are men. The following day is Universal Children's Day.
More than 200 men volunteer their time and energy to mentoring Boys and young men through The Boys' Brigade Queensland. Whether as a leader in a local Company, an event co-ordinator at regional or State level, or active in executive functions, each one is appreciated. Thank you each one for your commitment and dedication to advancing Christ's Kingdom among Boys.
If we each invited one more man to join us in this exciting ministry, think of the number of extra Boys we could help in faith development, leadership training, adventurous pursuits, meeting challenges, having fun, and building friendships.
A State Chaplaincy Team has been established to rejuvenate this vital role in BBQld with a well resourced chaplain working alongside captains, leaders and Boys in BB companies across the State. Rod Adam, Chadwick Palmer, Terrie Seymour and Gordon Wallace will be making contact with companies in the next few weeks.
The primary roles of the BBQld chaplain includes connecting with you and your team on a periodic basis as mutually beneficial, and praying for the specific issues, challenges, joys and achievements particular to your company and ministry within your local church.
In today's complex world the generations of Boys we work with in company are presented with challenges and stresses that mean the BB ministry is more vital than ever to build resilience and help them to find their identity in Christ and their place in the adult world as solid Christian men. Chaplaincy support is of growing importance generally in the community in lots of areas of life, schooling and industry. It is our prayer that BBQld chaplains will make a difference in the BB local ministry.
Board members had a little chuckle last year when Jason Knight suggested grouping the beginning of the year events under the title, Kickstart 2017. But that is exactly what happened on Saturday 18th February at Wynnum Baptist Church. Some 100 leaders and Omegas got kick started into the year. Of course, for many, PAC19 had already achieved that; but there is a time-honoured argument as to whether Pan Australian Camps start a new year or conclude the previous one.
Over 80 leaders, including several of our Life Members, once more ventured out for breakfast and were not disappointed with the spread that 18th Brisbane produced. The Leaders' Breakfast heard snap shots from Don Smith on PAC19 and Keith Young on BB History. Carlisle Wyllie also shared the latest news on our exciting 96.5 Family Radio advertising campaign.
Twenty of our 26 Captains then set the day aside (or were represented by another Company Officer) in a Captains' Conference, in which they discussed the latest legal and administrative requirements, upcoming events, and more. They were also inspired as National International Affairs Director, Graham Robertson, shared his faith walk story and exciting synopsis of his 69 years of BB service across NSW, ACT and now QLD.
A healthy number of leaders undertook their Safe Environments refresher training (all leaders are obliged to do this at least every three years) under the National Operations Director, Barry Sims. If you are needing to update your SE quals there will be opportunity at Connect 17 in May. Alternatively, speak to your Battalion to arrange a date.
Nine new BB Officers are in the making following involvement in ILT Fast Track. Fast Track allows Queen's Men of the past two years the opportunity to move into a white shirt as Lieutenants, recognising their previous learning as Brigaders.
Several Omegas turned up for the afternoon as they undertook Queen's Badge Info Sessions with State Operations Director, Anthony Campling.
Thank you to Training Director, Mike Richardson, for training sessions well put together.
2017 is shaping up to have one of the best starts to a Brigade year in many years. PAC19, attended by almost 300 campers from Australia-wide, has come and gone right here in Queensland, at Tamborine Mtn. Stories of great times are already seeping out.
Saturday 28th January will see our State Board assembling for a full day retreat, to consider the year ahead and to spend some quiet time with our God.
Companies will be starting up over the next fortnight. Indeed, 1st Mount Isa has already held its initial meeting with a good number of Boys checking out what this BB is. Another new Company is holding its opening church parade on Sunday 30th January - 6th Ipswich Coy. So, to Mount Isa Baptist and Raceview Congregational churches, welcome to the BB family. It is great to see and welcome back more churches who have enjoyed BB ministry in the past.
2017 is a special year as we celebrate 100 years of BB ministry to Junior-aged Boys. When BB commenced it was for 12 to 17 year old Boys, who today we would call young men. But it was in the midst of The Great War (1914-1918), in 1917, that The Boy Reserves started for youngsters from the age of nine. Of course, Anchors has since been added to the BB family. So, 2017 is the centenary of BB ministry in churches to children as well as young people.
To all the Boys, leaders, staff, parents and friends who comprise BB in Queensland may you know afresh this Christmas Season the real joy and peace that comes from knowing the Lord Jesus. He truly is Immanuel - God with us.
As you relax and rest from a busy BB year, may He re-charge your 'batteries'. If you are off to PAC19 in January, keep safe, hydrated and have the time of your life. As you plan an exciting, fun-filled and challenging 2017 Brigade programme do so keeping in mind that Boys' Brigade is all about advancing Christ's Kingdom among Boys and growing a true Christian disciple in each one.
Parents, we thank you wholeheartedly for allowing us the privilege of working with your precious sons throughout 2016 and look forward to doing so further in 2017.
"Where is He who has been born King of the Jews? For we have seen His star in the east and have come to worship Him ... and when they came into the house, they saw the young child with Mary His mother and fell down and worshipped Him. And when they opened their treasures, they presented gifts to Him: gold, frankincense and myrrh." (Matthew 2: 2, 11). Like the Magi, may we search with the attitude of wanting to worship the Almighty, and may we each be prepared to lay down our best gifts before Him. Merry Christmas.
At the State Annual General Meeting in November, several BB Officers and leaders were recognised for their exemplary service to Boys and the Lord through The Boys' Brigade. Life Membership was bestowed upon Mr Don Smith, an Officer for 56 years who continues to serve in several major capacities locally and internationally. Don mentors young leaders involved in staff responsibilities of the Leadership development courses and will be the Camp Director for the 19th Pan Australian Camp at Tamborine Mtn in January. He is the only person to participate in every PAC. Don has served as State President for a total of 14 years as well as in other capacities at State level. He has served on the National executive, led international camp contingents and advanced Christ's kingdom among Boys at every opportunity over a life time. Well done, good and faithful servant.
Also honoured was Rod Hurman, OIC Juniors at 45th Brisbane Company and long-term President of South Moreton Battalion. Captain of 46th Brisbane Company and President No.1 Brisbane Battalion, Noel Pinkerton, was recognised as Queensland Leader of the Year. It is interesting to note that Noel has succeeded Rod as the event-co-ordinator of the State Soapbox Derby. Lindon Pyle, an Officer in the 1st Ipswich Company was awarded Young Leader of the Year in recognition of his service on the Leadership team, taking up co-ordination of the Leadership Training Weekends and his Company work. Daniel Garlick (3rd Pine Rivers) received the peer-reviewed Leadership Award of Excellence.
Congratulations to each one. We know that you do not serve in order to receive accolades such as these. Nevertheless, it is appropriate to recognise and honour such exemplary service. Scripture calls us to honour those who serve well even to "Let the elders who manage well be counted worthy of double honour …" (1st Timothy 5: 17).
The Glengarry Open Day was a milestone day for all those involved with both the construction of the cabins and the extensions to the History and Memorabilia Centre.
Approximately 100 people came to join in the celebrations.
"The facilities are top notch. I was pleasantly surprised with the number of people who came and I also caught up with others that I haven't seen for a long time. I am very glad I came down from Gympie for the day. " Mr Max Gray, Former BB Australia President and Founder of PA Camps.
"It was a pleasure to attend and see your wonderful facilities. I enjoyed my chats with some of the many people who attended." Irene James, Atkinson District Commissioner, Scouts Qld.
These are just some of the comments received about this day. The official opening was carried out by our special guests, Mr Shayne Neumann MP, Federal Member for Blair, and Cr Dan Hall, Deputy Mayor, Somerset Regional Council. Both were very impressed with the standard of the facilities at Glengarry. Mr Neumann is also an "old boy" of 5th Ipswich Company so it was a great pleasure to have him in attendance on this day. Cr Hall was very interested to hear of the mission of BB and the vision for Glengarry. He spent some time viewing all that of the displays including a selection of the ANZAC "They Enlisted at My Age" projects.
The opening ceremony also saw the presentations of Certificates of Appreciation to Ross and Rhonda Rippingale, Keith Young and Wilson Kelly for all their work.
Guests were impressed with the quality of finish and facilities in the cabins. Everyone who viewed the History and Memorabilia Centre was quite amazed with the standard of the display about the early years of BB. Full credit must go to Keith Young and Wilson Kelly for the work they have done in this facility. If you were unable to join us for the day you might like to arrange a time to take your company for a day visit and find out the interesting history of BB in Queensland and Australia. Better still why not make it a company weekend camp and arrange to view the display as part of your program.
There was also a display of construction of the campsite from the commencement of the Sports Hall through to the completion of the new cabins. A number of boys are also in the process of compiling a history of Glengarry as their projects for the BB Knowledge Badge.
Thank you to all who contributed to a truly memorable day. We also say thank you to all the volunteers who have given of their time, energy and expertise to carry out the construction and for providing the first class facilities that will benefit young Queenslanders for years to come.


text:
Emotional win confirms Degenkolb's return
After three seasons of injuries and setbacks, John Degenkolb finally won a WorldTour race
ROUBAIX, FRANCE - JULY 15: Arrival / John Degenkolb of Germany and Team Trek Segafredo / Jasper Stuyven of Belgium and Team Trek Segafredo / Celebration / during the 105th Tour de France 2018, Stage 9 a 156,5 stage from Arras Citadelle to Roubaix on July 15, 2018 in Roubaix, France. (Photo by Justin Setterfield/Getty Images)
The emotion of victory defeated German stoicism on Sunday afternoon in Roubaix.
Tears in his eyes, John Degenkolb struggled to describe his feelings after winning Sunday's 9th stage of the Tour de France, a wild and crash-filled journey over the cobblestones from Amiens to Roubaix. Degenkolb is one of the peloton's brawniest riders, a winner of the 2015 edition of Paris-Roubaix. Known for his straight-faced interviews and no-nonsense attitude, the big German was simply overcome as he spoke to reporters after his victory.
His win was unbelievable, no, it was pure happiness. No, it was…
"It's fantastic can really find the right words to express how this feels," Degenkolb said. "The end is pretty similar to what I experienced in 2015 when I was sitting right here. It's amazing."
Sunday's victory marks Degenkolb's first major victory since the 2015 season, when he was perhaps the best one-day racer on the planet. That year Degenkolb won Milano-Sanremo, Paris-Roubaix, and even a stage of the Vuelta a España. The season made him one of the most sought-after riders on the planet. Since then, he has not had a single victory in cycling's WorldTour.
"Really, I was chasing this victory for so long," Degenkolb added. "It's hard to describe."
Whatever emotions coursed through Degenkolb's mind were unquestionably informed by the bitterness of the last two seasons and the incident that sparked Degenkolb's drought. VeloNews readers may remember that, in January of 2016, Degenkolb and his Giant-Alpecin teammates were on a training ride in Alicante, Spain when they were struck, head-on, by an elderly driver who was driving on the wrong side of the road. The crash injured six riders. American Chad Haga to the emergency room with fractures to his face; he received 45 stitches to his face and throat. Warren Barguil fractured his scaphoid. Max Walscheid broke his tibia. Two others received minor injuries.
Degenkolb received the worst damage. The crash broke his left forearm, and nearly ripped his left index finger off of his hand. One cannot steer a bicycle without the digit, let alone grasp a handlebar over pavé. Degenkolb underwent surgery to repair the hand. During his 2016 Classics campaign, Degenkolb told reporters he was healing, and that he would soon be back to 100 percent.
That full recovery never really occurred. Degenkolb's 2016 classics campaign was a wash. At the end of the season, he signed a big, multi-year contract to lead Trek-Segafredo's northern classics team for 2017 and 2018. Trek hired talented cobble crushers Jasper Stuyven, Fabio Felline, and Mads Petersen to aide Degenkolb's efforts. In both years Degenkolb was a disappointment. In 2017 he was just off the pace of the winners. In 2018 he was farther behind and said that he was working for Stuyven.
After his dismal 2018, cycling pundits began to wonder whether Degenkolb, at 29 years old, would ever reach cycling's pinnacle again. When Degenkolb fought through a knee injury earlier this season, he began to doubt himself too.
"You start to doubt if you also can do it," Degenkolb said. "That is the hardest part, to not lost the trust in yourself and the belief you can still be up there."
Degenkolb's return to the top step required both excellent luck and strong tactics from Trek-Segafredo. Despite a flat tire for GC leader Bauke Mollema—who finished in the main group alongside Chris Froome—the team suffered few, if any, setbacks. The team avoided the crashes that took down Mikel Landa (Movistar), Richie Porte (BMC Racing), Michal Kwiatkowski (Sky), and others.
Stuyven attacked into the fourth pavé sector with 24 km remaining, forcing the favorites to chase. The move placed Degenkolb in a preferable position. Peter Sagan (Bora-Hansgrohe) chased, as did Greg Van Avermaet (BMC Racing), while Degenkolb rode near the front.
With 18km remaining Yves Lampaert (Quick-Step Floors) charged off the front on the Camphin-en-Pévèle sector, and was joined by Van Avermaet. Sensing the move might stick Degenkolb powered away from the group to make the duo a trio. Behind, there was no response from the peloton.
The three built a sizable gap over the group, and as they came into the final kilometer Degenkolb rolled to the front. Usually, such a position can open a rider up to sneak attacks in the finale. As the strongest sprinter in the group, Degenkolb chose to lead the kick to the line. He opened his spring inside 200 meters, and held off Van Avermaet to take the win.
Degenkolb's' emotions at the finish line were heightened by a recent personal tragedy. The German told reporters that a family friend, described as "my second father," passed away over the winter. Degenkolb dedicated his victory to the memory of his deceased friend. After several questions, Degenkolb acknowledged the disappointments of the last three seasons.
"So many people said he's done, he's over, he will never come back. I am so happy to show all these guys who didn't believe me that I am still there, I am still alive," he said. "I think that's also what I took out of this accident: that you have to be happy after such a horrible crash that you are still alive, you're still there. I was fighting my way back, and I am so proud."
Dane Cash and Andrew Hood contributed to this report from Roubaix, France.
The green revolution: The Tour de France is trying to clean up its eco act
Sadhbh O'Shea
Tour de France: Is the 2022 edition the 'anti-Pogačar' route?
Throwback Thursday: Thomas Voeckler and his yellow jersey raids
Andrew Hood, James Startt
Did ASO get it right with 2022 Tour de France Femmes route?
Paris-Roubaix ticker: Chantal van den Broek-Blaak likes her chances, Lotto-Soudal brings two former winners
VN news ticker: Markus Hoelgaard wins Arctic Race of Norway opener; Premiere Tech to leave Astana
Paris-Roubaix revelation Florian Vermeersch extends with Lotto-Soudal through 2024


text:
/*jshint onevar:false */
var path = require('path'),
    minimatch = require('minimatch'),
    fs = require('graceful-fs');

/**
 * Utilities Class
 * @class Utils
 * @module yuidoc
 */

YUI.add('utils', function (Y) {

    Y.charset = 'utf8';

    var HTML_CHARS = {
        '&': '&',
        '<': '<',
        '>': '>',
        '"': '"',
        "'": ''',
        '/': '/',
        '`': '`'
    };

    /**
    Escapes HTML characters in _html_.

    @method escapeHTML
    @param {String} html String to escape.
    @return {String} Escaped string.
    **/
    Y.escapeHTML = function (html) {
        return html.replace(/[&<>"'\/`]/g, function (match) {
            return HTML_CHARS[match];
        });
    };

    /**
    Normalizes the initial indentation of the given _content_ so that the first line
    is unindented, and all other lines are unindented to the same degree as the
    first line. So if the first line has four spaces at the beginning, then all
    lines will be unindented four spaces.

    @method unindent
    @param {String} content Text to unindent.
    @return {String} Unindented text.
    @private
    **/
    Y.unindent = function (content) {
        var indent = content.match(/^(\s+)/);

        if (indent) {
            content = content.replace(new RegExp('^' + indent[1], 'gm'), '');
        }

        return content;
    };

    /**
    Like `getPages()`, but returns only the files under the `layout/` subdirectory
    of the specified _dir_.

    @method getLayouts
    @param {String} dir Directory path.
    @return {Object} Mapping of layout names to layout content.
    **/
    function getLayouts(dir) {
        return getPages(path.join(dir, 'layouts'));
    }
    Y.getLayouts = getLayouts;

    /**
    Loads and returns the content of the specified page file.

    @method getPage
    @param {String} pagePath Path to a single `.handlebars` page.
    @return {String|null} Page content, or `null` if not found.
    **/
    function getPage(pagePath) {
        if (!Y.Files.isFile(pagePath)) {
            return null;
        }
        return fs.readFileSync(pagePath, Y.charset);
    }
    Y.getPage = getPage;

    /**
    Loads pages (files with a `.handlebars` extension) in the specified directory and
    returns an object containing a mapping of page names (the part of the filename)
    preceding the `.handlebars` extension) to page content.

    @method getPages
    @param {String} dir Directory path.
    @return {Object} Mapping of page names to page content.
    **/
    var cache = {};
    function getPages(dir) {
        if (cache[dir]) {
            return cache[dir];
        }
        var pages = {};

        if (!Y.Files.isDirectory(dir)) {
            return pages;
        }

        fs.readdirSync(dir).forEach(function (filename) {
            var filePath = path.join(dir, filename);

            if (path.extname(filename) === '.handlebars' && Y.Files.isFile(filePath)) {
                pages[path.basename(filename, '.handlebars')] = fs.readFileSync(filePath, Y.charset);
            }
        });
        cache[dir] = pages;

        return pages;
    }
    Y.getPages = getPages;

    /**
    Like `getPages()`, but returns only the files under the `partial/` subdirectory
    of the specified _dir_.

    @method getPartials
    @param {String} dir Directory path.
    @return {Object} Mapping of partial names to partial content.
    **/
    function getPartials(dir) {
        return getPages(path.join(dir, 'partials'));
    }
    Y.getPartials = getPartials;

    /**
    Mix/merge/munge data into the template.

    @method prepare
    @param {String} inDir The starting directory
    @param {Object} options The `options` for the meta data.
    @param {callback} callback The callback to excecute when complete
    @param {Error} callback.err
    @param {Object} callback.options Merged options.
    **/
    function prepare(inDirs, options, callback) {
        var layouts,
            partials,
            type = 'project';

        if (options && options.skipLoad) {
            // Skip loading layouts, metadata, pages, and partials and assume that
            // the caller has provided them if they want them.
            options = Y.merge({
                layouts: {},
                meta: {},
                pages: {},
                partials: {},
                viewClass: Y.DocView
            }, options);
        } else {
            // Gather layouts, metadata, pages, and partials from the specified
            // input directory, then merge them into the provided options (if any).
            //
            // Gathered data will override provided data if there are conflicts, in
            // order to support a use case where global data are provided by the
            // caller and overridden by more specific component-level data gathered
            // from the input directory.
            //
            // The metadata inheritance chain looks like this:
            //
            //   - override metadata specified via CLI (highest precedence)
            //   - component metadata (if this is a component)
            //   - project-level component default metadata (if specified and this is a component)
            //   - theme-level component default metadata (if specified and this is a component)
            //   - project metadata
            //   - theme metadata (lowest precedence)
            try {
                if (inDirs[0] === inDirs[1]) {
                    layouts = getLayouts(inDirs[0]);
                    partials = getPartials(inDirs[0]);
                } else {
                    layouts = Y.merge(getLayouts(inDirs[0]), getLayouts(inDirs[1]));
                    partials = Y.merge(getPartials(inDirs[0]), getPartials(inDirs[1]));
                }
                options = Y.merge({
                        viewClass: Y.DocView
                    },
                    options || {}, {
                        layouts: layouts,
                        meta: options.meta,
                        partials: partials
                    }
                );
            } catch (ex) {
                return callback(ex);
            }
        }

        // Mix in the override metadata, if any. It takes precedence over everything
        // else.
        Y.mix(options.meta, options.overrideMeta);

        // Set a default asset path if one isn't specified in the metadata.
        if (!options.meta.projectAssets) {
            options.meta.projectAssets = options.component ? '../assets' : 'assets';
        }

        if (!options.meta.componentAssets && options.component) {
            options.meta.componentAssets = '../assets/' + options.meta.name;
        }

        if (typeof options.meta.layout === 'undefined') {
            options.meta.layout = options.layouts[type] ? type : 'main';
        }

        callback(null, options);
    }

    Y.prepare = prepare;

    /**
     * Walk the directory tree to locate the yuidoc.json file.
     * @method getProjectData
     * @param {Path} [dir=process.cwd()] The directory to start from
     */
    var getProjectData = function (dir) {
        var dirs = [dir || process.cwd()];
        var projectData, packageData;
        var dirCount = 0;
        // keep looping until
        //  * data is found
        //  * there are no more dirs to process
        //  * we abort due to failsafe
        while (dirs.length && !projectData) {
            /*jshint loopfunc:true */
            if (dirCount++ > 5000) {
                Y.log('Scanned ' + dirCount + ' directories looking for a yuidoc.json file, something is probably wrong here..', 'error', 'yuidoc');
                process.exit(1);
            }
            // accumulator for directories at this level
            var childDirs = [];
            // for each directory at the previous level
            dirs.forEach(function (dir) {
                // abort iterating if we have project data
                if (projectData) {
                    return;
                }
                // squelch (but log) any complaints about this particular directory
                try {
                    // for each item in this directory
                    var names = fs.readdirSync(dir);
                    names.forEach(function (name) {
                        // abort iterating a folder if we have found both data
                        if (projectData && packageData) {
                            return;
                        }
                        // build a full path
                        var p = path.join(dir, name);
                        // acquire project data from this item if possible
                        if (Y.Files.isFile(p)) {
                            projectData = getFileData(p, name, 'yuidoc.json');
                            // 'package.json' is used for auxilliary configuration
                            // if it's found. Formerly, it was only found if it
                            // came _before_'yuidoc.json' in the folder tree
                            // (never in the same folder).
                            // This code will find 'package.json' in the same
                            // folder as 'yuidoc.json'.
                            // If there is no 'yuidoc.json', former algorithm would
                            // use the deepest 'package.json' it can find, this one
                            // will use the first (most shallow) one.
                            packageData = packageData || getFileData(p, name, 'package.json');
                        }
                        // if we are a folder, but not ., .., or node_modules,
                        // then add to directory accumulator
                        if (Y.Files.isDirectory(p)) {
                            if (name.indexOf('.') === 0) {
                                return;
                            }
                            if (name === 'node_modules') {
                                Y.log('Skipping node_modules directory while scanning for yuidoc.json', 'warn', 'yuidoc');
                                return;
                            }
                            childDirs.push(p);
                        }
                    });
                } catch (dirPerm) {
                    Y.log('Accessing dir (' + dir + ') threw an error', 'warn', 'yuidoc');
                }
            });
            // iterate over new set of folders
            dirs = childDirs;
        }
        if ((packageData && projectData) || (packageData && packageData.yuidoc)) {
            projectData = mergeData(packageData, projectData);
        }
        return projectData;
    };

    var getFileData = function (p, name, file) {
        if (name === file) {
            Y.log('Loading ' + name + ' data from: ' + p, 'info', 'yuidoc');
            try {
                return Y.Files.getJSON(p);
            } catch (e) {
                var err = 'Failed to parse ' + name + ' file, please make sure it is valid JSON';
                Y.log(err, 'error', 'yuidoc');
                throw (e + '');
            }
        }
    };

    var mergeData = function (pack, project) {
        project = project || {};

        if (pack.yuidoc) {
            Object.keys(pack.yuidoc).forEach(function (key) {
                if (!project[key]) {
                    project[key] = pack.yuidoc[key];
                }
            });
        }

        ['name', 'description', 'version', 'url'].forEach(function (key) {
            if (pack[key] && !project[key]) {
                project[key] = pack[key];
            }
        });

        return project;
    };

    Y.getProjectData = getProjectData;

    /**
     * Walks the tree from this dir and returns all the subdirs
     * @method getDirs
     * @param {String} dir The dir to begin at
     * @return {Array} The array of directories..
     */
    var getDirs = function (dir) {
        var dirs = fs.readdirSync(dir),
            paths = [];

        dirs.forEach(function (d) {
            var _dir = path.join(dir, d),
                stat = fs.lstatSync(_dir);

            if (stat.isDirectory()) {
                if (_dir.indexOf('.') !== 0) {
                    paths = [].concat(paths, _dir, getDirs(_dir));
                }
            }
        });

        return paths;
    };

    Y.getDirs = getDirs;

    /**
     * Make sure all the paths passed are directories and that they are not in the ignore list.
     * @method validatePaths
     * @param {Array} paths The array of paths to validate
     * @param {String} [ignore=false] A string to call `.indexOf` on a path to determine if it should be ignored
     */
    var validatePaths = function (paths, ignore) {
        var newpaths = [];
        //Shortcut the *, . & ./ shortcuts that shall globbing fixes for us
        if (paths === '*' || paths === '.' || paths === './') {
            paths = [process.cwd()];
        }

        // Ensure that we always have an array of some kind.
        paths = paths || [];
        if (!Y.Lang.isArray(paths)) {
            paths = [paths];
        }
        paths.forEach(function (path) {
            var glob = path || '';

            if (process.platform === 'win32') {
                glob = path.replace(/\//g, '\\\\');
            }

            var glob_paths = getDirs('.'),
                is_globbed = false;

            glob_paths.forEach(function (dir) {
                //Don't scan things in node_modules
                if (dir.indexOf('node_modules') > -1) {
                    return;
                }
                if (minimatch(dir, glob, {
                    period: true
                })) {
                    newpaths.push(dir);
                    is_globbed = true;
                }
            });

            if (!is_globbed && (Y.Files.isDirectory(glob))) {
                //If minimatch fails, check to see if it's a relative directory
                // if it is, add it directly
                newpaths.push(glob);
            }
        });

        paths = newpaths;
        paths.forEach(function (p) {
            try {
                if (!Y.Files.isDirectory(p)) {
                    throw ('Path not a directory: ' + p);
                }
            } catch (e) {}
        });

        if (!paths || !paths.forEach) {
            throw ('Paths should be an array of paths');
        }

        if (ignore) {
            if (!(ignore instanceof Array)) {
                ignore = [ignore];
            }
            var p = [],
                shouldIgnore = false;

            paths.forEach(function (v) {
                shouldIgnore = false;
                ignore.forEach(function (i) {
                    if (!shouldIgnore && v.indexOf(i) !== -1) {
                        shouldIgnore = true;
                    }
                });
                if (!shouldIgnore) {
                    p.push(v);
                }
            });
            paths = p;
        }

        paths = paths.sort();
        return paths;
    };

    Y.validatePaths = validatePaths;

    /**
     * Takes a type string and converts it to a "First letter upper cased" type. e.g. `(string -> String, object -> Object)`
     * @method fixType
     * @param {String} t The type string to convert
     * @return {String} The fixed string
     */
    var fixType = function (t) {
        if (t && t.indexOf('.') === -1) {
            t = t.replace(/{/g, '').replace(/}/g, '');
            var firstChar = t.charAt(0),
                upperFirstChar = firstChar.toUpperCase();

            if (firstChar !== upperFirstChar) {
                return upperFirstChar + t.substring(1);
            }
        }

        return t;
    };

    Y.Lang.fixType = fixType;

    /**
     * Produces a normalized web path by joining all the parts and normalizing the
     * filesystem-like path into web compatible url.
     * Supports relative and absolute paths.
     * Courtesy of [Mojito's utils](https://github.com/yahoo/mojito/)
     *
     * @method webpath
     * @param {Array|String*} url the list of parts to be joined and normalized
     * @return {String} The joined and normalized url
     **/
    function webpath(url) {
        var args = [].concat.apply([], arguments),
            parts = path.join.apply(path, args).split(/[\\\/]/);
        return parts.join('/');
    }

    Y.webpath = webpath;
});


Meghan Trainor Performs Her New Song Lips Are Movin On The Today Show! We're All About This Song!
Meghan Trainor, you can do no wrong!
To the benefit of all our ears, Meghan performed her new song Lips Are Movin on the TODAY show! What a great way to wake up!
We love this sassy new single! We'll be dancing to this on repeat!
Ch-ch-check out the new ditty (above)!!!


See Mykonos, with its breathtakingly beautiful beaches, picturesque churches and unspoiled landscapes.
With our air-conditioned coach and guide, we will visit the beaches of Ag. Stefanos, Kalafatis, and Ag. Yiannis. While driving of course we see other beaches from a distance such as Panormos, Ftelia and as we are driving towards Kalafatis, we can see the beach of Kalo Leivadi and of Ag. Anna. Going to St. Stephanos we pass from Tourlos and the new port of the Island. Inland, we make a stop at the Monastery of Panagia Tourliani which was built in the 12th century (the Virgin Mary of Tourlos), with its intricately carved and gilded wooden Iconostasis. Enjoy the secret (or not so secret!) beauties... On the way back and while the sun (depending on the time of the year) is going to sunset we stop off at the Panorama point for pictures. Some days we combine it with a small walking tour so participants can see the Little Venice and the famous Winmdills of Mykonos.
The tour runs in English, German, French and Italian, according to the number of participants. Other languages on request. Duration of the tour is two hours, and it starts and ends at Fabrica Square.


text:
Q: Obtained different MAC Addresses during offline and online? I'm coding a part where the software need to obtain MAC Address of the current PC and found this solution which works for offline too:
https://stackoverflow.com/a/15784105/9641721
I obtained the same MAC Address using method 1 but somehow get different Addresses during offline vs online when using method 2, anyone can explain to me why? FYI my laptop only has one network card.
Method 2:
 public static string GetMACAddress2()
        {
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            String sMacAddress = string.Empty;
            foreach (NetworkInterface adapter in nics)
            {
                if (sMacAddress == String.Empty)// only return MAC Address from first card
                {
                    sMacAddress = adapter.GetPhysicalAddress().ToString();
                }
            }
            return sMacAddress;
        }

My result:
Online:
Method1: C85B76FD53xx
Method2: 6A00E3D94Exx

Offline:
Method1: C85B76FD53xx
Method2: C85B76FD53xx

Thanks.