text:
__all__ = ['Parser']

import os
import struct
import string
import logging
import time
from exceptions import ParseError
import core

# get logging object
log = logging.getLogger(__name__)

# List of tags
# http://kibus1.narod.ru/frames_eng.htm?sof/abcavi/infotags.htm
# http://www.divx-digest.com/software/avitags_dll.html
# File Format: google for odmlff2.pdf

AVIINFO = {
    'INAM': 'title',
    'IART': 'artist',
    'IPRD': 'product',
    'ISFT': 'software',
    'ICMT': 'comment',
    'ILNG': 'language',
    'IKEY': 'keywords',
    'IPRT': 'trackno',
    'IFRM': 'trackof',
    'IPRO': 'producer',
    'IWRI': 'writer',
    'IGNR': 'genre',
    'ICOP': 'copyright'
}

# Taken from libavcodec/mpeg4data.h (pixel_aspect struct)
PIXEL_ASPECT = {
    1: (1, 1),
    2: (12, 11),
    3: (10, 11),
    4: (16, 11),
    5: (40, 33)
}

class Riff(core.AVContainer):
    """
    AVI parser also parsing metadata like title, languages, etc.
    """
    table_mapping = { 'AVIINFO' : AVIINFO }

    def __init__(self, file):
        core.AVContainer.__init__(self)
        # read the header
        h = file.read(12)
        if h[:4] != "RIFF" and h[:4] != 'SDSS':
            raise ParseError()

        self.has_idx = False
        self.header = {}
        self.junkStart = None
        self.infoStart = None
        self.type = h[8:12]
        if self.type == 'AVI ':
            self.mime = 'video/avi'
        elif self.type == 'WAVE':
            self.mime = 'audio/wav'
        try:
            while self._parseRIFFChunk(file):
                pass
        except IOError:
            log.exception(u'error in file, stop parsing')

        self._find_subtitles(file.name)

        if not self.has_idx and isinstance(self, core.AVContainer):
            log.debug(u'WARNING: avi has no index')
            self._set('corrupt', True)

    def _find_subtitles(self, filename):
        """
        Search for subtitle files. Right now only VobSub is supported
        """
        base = os.path.splitext(filename)[0]
        if os.path.isfile(base + '.idx') and \
               (os.path.isfile(base + '.sub') or os.path.isfile(base + '.rar')):
            file = open(base + '.idx')
            if file.readline().find('VobSub index file') > 0:
                for line in file.readlines():
                    if line.find('id') == 0:
                        sub = core.Subtitle()
                        sub.language = line[4:6]
                        sub.trackno = base + '.idx'  # Maybe not?
                        self.subtitles.append(sub)
            file.close()

    def _parseAVIH(self, t):
        retval = {}
        v = struct.unpack('<IIIIIIIIIIIIII', t[0:56])
        (retval['dwMicroSecPerFrame'],
          retval['dwMaxBytesPerSec'],
          retval['dwPaddingGranularity'],
          retval['dwFlags'],
          retval['dwTotalFrames'],
          retval['dwInitialFrames'],
          retval['dwStreams'],
          retval['dwSuggestedBufferSize'],
          retval['dwWidth'],
          retval['dwHeight'],
          retval['dwScale'],
          retval['dwRate'],
          retval['dwStart'],
          retval['dwLength']) = v
        if retval['dwMicroSecPerFrame'] == 0:
            log.warning(u'ERROR: Corrupt AVI')
            raise ParseError()

        return retval

    def _parseSTRH(self, t):
        retval = {}
        retval['fccType'] = t[0:4]
        log.debug(u'_parseSTRH(%r) : %d bytes' % (retval['fccType'], len(t)))
        if retval['fccType'] != 'auds':
            retval['fccHandler'] = t[4:8]
            v = struct.unpack('<IHHIIIIIIIII', t[8:52])
            (retval['dwFlags'],
              retval['wPriority'],
              retval['wLanguage'],
              retval['dwInitialFrames'],
              retval['dwScale'],
              retval['dwRate'],
              retval['dwStart'],
              retval['dwLength'],
              retval['dwSuggestedBufferSize'],
              retval['dwQuality'],
              retval['dwSampleSize'],
              retval['rcFrame']) = v
        else:
            try:
                v = struct.unpack('<IHHIIIIIIIII', t[8:52])
                (retval['dwFlags'],
                  retval['wPriority'],
                  retval['wLanguage'],
                  retval['dwInitialFrames'],
                  retval['dwScale'],
                  retval['dwRate'],
                  retval['dwStart'],
                  retval['dwLength'],
                  retval['dwSuggestedBufferSize'],
                  retval['dwQuality'],
                  retval['dwSampleSize'],
                  retval['rcFrame']) = v
                self.delay = float(retval['dwStart']) / \
                             (float(retval['dwRate']) / retval['dwScale'])
            except (KeyError, IndexError, ValueError, ZeroDivisionError):
                pass

        return retval

    def _parseSTRF(self, t, strh):
        fccType = strh['fccType']
        retval = {}
        if fccType == 'auds':
            v = struct.unpack('<HHHHHH', t[0:12])
            (retval['wFormatTag'],
              retval['nChannels'],
              retval['nSamplesPerSec'],
              retval['nAvgBytesPerSec'],
              retval['nBlockAlign'],
              retval['nBitsPerSample'],
            ) = v
            ai = core.AudioStream()
            ai.samplerate = retval['nSamplesPerSec']
            ai.channels = retval['nChannels']
            # FIXME: Bitrate calculation is completely wrong.
            #ai.samplebits = retval['nBitsPerSample']
            #ai.bitrate = retval['nAvgBytesPerSec'] * 8

            # TODO: set code if possible
            # http://www.stats.uwa.edu.au/Internal/Specs/DXALL/FileSpec/\
            #    Languages
            # ai.language = strh['wLanguage']
            ai.codec = retval['wFormatTag']
            self.audio.append(ai)
        elif fccType == 'vids':
            v = struct.unpack('<IIIHH', t[0:16])
            (retval['biSize'],
              retval['biWidth'],
              retval['biHeight'],
              retval['biPlanes'],
              retval['biBitCount']) = v
            v = struct.unpack('IIIII', t[20:40])
            (retval['biSizeImage'],
              retval['biXPelsPerMeter'],
              retval['biYPelsPerMeter'],
              retval['biClrUsed'],
              retval['biClrImportant']) = v
            vi = core.VideoStream()
            vi.codec = t[16:20]
            vi.width = retval['biWidth']
            vi.height = retval['biHeight']
            # FIXME: Bitrate calculation is completely wrong.
            #vi.bitrate = strh['dwRate']
            vi.fps = float(strh['dwRate']) / strh['dwScale']
            vi.length = strh['dwLength'] / vi.fps
            self.video.append(vi)
        return retval

    def _parseSTRL(self, t):
        retval = {}
        size = len(t)
        i = 0

        while i < len(t) - 8:
            key = t[i:i + 4]
            sz = struct.unpack('<I', t[i + 4:i + 8])[0]
            i += 8
            value = t[i:]

            if key == 'strh':
                retval[key] = self._parseSTRH(value)
            elif key == 'strf':
                retval[key] = self._parseSTRF(value, retval['strh'])
            else:
                log.debug(u'_parseSTRL: unsupported stream tag %r', key)

            i += sz

        return retval, i

    def _parseODML(self, t):
        retval = {}
        size = len(t)
        i = 0
        key = t[i:i + 4]
        sz = struct.unpack('<I', t[i + 4:i + 8])[0]
        i += 8
        value = t[i:]
        if key != 'dmlh':
            log.debug(u'_parseODML: Error')

        i += sz - 8
        return (retval, i)

    def _parseVPRP(self, t):
        retval = {}
        v = struct.unpack('<IIIIIIIIII', t[:4 * 10])

        (retval['VideoFormat'],
          retval['VideoStandard'],
          retval['RefreshRate'],
          retval['HTotalIn'],
          retval['VTotalIn'],
          retval['FrameAspectRatio'],
          retval['wPixel'],
          retval['hPixel']) = v[1:-1]

        # I need an avi with more informations
        # enum {FORMAT_UNKNOWN, FORMAT_PAL_SQUARE, FORMAT_PAL_CCIR_601,
        #    FORMAT_NTSC_SQUARE, FORMAT_NTSC_CCIR_601,...} VIDEO_FORMAT;
        # enum {STANDARD_UNKNOWN, STANDARD_PAL, STANDARD_NTSC, STANDARD_SECAM}
        #    VIDEO_STANDARD;
        #
        r = retval['FrameAspectRatio']
        r = float(r >> 16) / (r & 0xFFFF)
        retval['FrameAspectRatio'] = r
        if self.video:
            map(lambda v: setattr(v, 'aspect', r), self.video)
        return (retval, v[0])

    def _parseLISTmovi(self, size, file):
        """
        Digs into movi list, looking for a Video Object Layer header in an
        mpeg4 stream in order to determine aspect ratio.
        """
        i = 0
        n_dc = 0
        done = False
        # If the VOL header doesn't appear within 5MB or 5 video chunks,
        # give up.  The 5MB limit is not likely to apply except in
        # pathological cases.
        while i < min(1024 * 1024 * 5, size - 8) and n_dc < 5:
            data = file.read(8)
            if ord(data[0]) == 0:
                # Eat leading nulls.
                data = data[1:] + file.read(1)
                i += 1

            key, sz = struct.unpack('<4sI', data)
            if key[2:] != 'dc' or sz > 1024 * 500:
                # This chunk is not video or is unusually big (> 500KB);
                # skip it.
                file.seek(sz, 1)
                i += 8 + sz
                continue

            n_dc += 1
            # Read video chunk into memory
            data = file.read(sz)

            #for p in range(0,min(80, sz)):
            #    print "%02x " % ord(data[p]),
            #print "\n\n"

            # Look through the picture header for VOL startcode.  The basic
            # logic for this is taken from libavcodec, h263.c
            pos = 0
            startcode = 0xff
            def bits(v, o, n):
                # Returns n bits in v, offset o bits.
                return (v & 2 ** n - 1 << (64 - n - o)) >> 64 - n - o

            while pos < sz:
                startcode = ((startcode << 8) | ord(data[pos])) & 0xffffffff
                pos += 1
                if startcode & 0xFFFFFF00 != 0x100:
                    # No startcode found yet
                    continue

                if startcode >= 0x120 and startcode <= 0x12F:
                    # We have the VOL startcode.  Pull 64 bits of it and treat
                    # as a bitstream
                    v = struct.unpack(">Q", data[pos : pos + 8])[0]
                    offset = 10
                    if bits(v, 9, 1):
                        # is_ol_id, skip over vo_ver_id and vo_priority
                        offset += 7
                    ar_info = bits(v, offset, 4)
                    if ar_info == 15:
                        # Extended aspect
                        num = bits(v, offset + 4, 8)
                        den = bits(v, offset + 12, 8)
                    else:
                        # A standard pixel aspect
                        num, den = PIXEL_ASPECT.get(ar_info, (0, 0))

                    # num/den indicates pixel aspect; convert to video aspect,
                    # so we need frame width and height.
                    if 0 not in [num, den]:
                        width, height = self.video[-1].width, self.video[-1].height
                        self.video[-1].aspect = num / float(den) * width / height

                    done = True
                    break

                startcode = 0xff

            i += 8 + len(data)

            if done:
                # We have the aspect, no need to continue parsing the movi
                # list, so break out of the loop.
                break

        if i < size:
            # Seek past whatever might be remaining of the movi list.
            file.seek(size - i, 1)

    def _parseLIST(self, t):
        retval = {}
        i = 0
        size = len(t)

        while i < size - 8:
            # skip zero
            if ord(t[i]) == 0: i += 1
            key = t[i:i + 4]
            sz = 0

            if key == 'LIST':
                sz = struct.unpack('<I', t[i + 4:i + 8])[0]
                i += 8
                key = "LIST:" + t[i:i + 4]
                value = self._parseLIST(t[i:i + sz])
                if key == 'strl':
                    for k in value.keys():
                        retval[k] = value[k]
                else:
                    retval[key] = value
                i += sz
            elif key == 'avih':
                sz = struct.unpack('<I', t[i + 4:i + 8])[0]
                i += 8
                value = self._parseAVIH(t[i:i + sz])
                i += sz
                retval[key] = value
            elif key == 'strl':
                i += 4
                (value, sz) = self._parseSTRL(t[i:])
                key = value['strh']['fccType']
                i += sz
                retval[key] = value
            elif key == 'odml':
                i += 4
                (value, sz) = self._parseODML(t[i:])
                i += sz
            elif key == 'vprp':
                i += 4
                (value, sz) = self._parseVPRP(t[i:])
                retval[key] = value
                i += sz
            elif key == 'JUNK':
                sz = struct.unpack('<I', t[i + 4:i + 8])[0]
                i += sz + 8
            else:
                sz = struct.unpack('<I', t[i + 4:i + 8])[0]
                i += 8
                # in most cases this is some info stuff
                if not key in AVIINFO.keys() and key != 'IDIT':
                    log.debug(u'Unknown Key: %r, len: %d' % (key, sz))
                value = t[i:i + sz]
                if key == 'ISFT':
                    # product information
                    if value.find('\0') > 0:
                        # works for Casio S500 camera videos
                        value = value[:value.find('\0')]
                    value = value.replace('\0', '').lstrip().rstrip()
                value = value.replace('\0', '').lstrip().rstrip()
                if value:
                    retval[key] = value
                    if key in ['IDIT', 'ICRD']:
                        # Timestamp the video was created.  Spec says it
                        # should be a format like "Wed Jan 02 02:03:55 1990"
                        # Casio S500 uses "2005/12/24/ 14:11", but I've
                        # also seen "December 24, 2005"
                        specs = ('%a %b %d %H:%M:%S %Y', '%Y/%m/%d/ %H:%M', '%B %d, %Y')
                        for tmspec in specs:
                            try:
                                tm = time.strptime(value, tmspec)
                                # save timestamp as int
                                self.timestamp = int(time.mktime(tm))
                                break
                            except ValueError:
                                pass
                        else:
                            log.debug(u'no support for time format %r', value)
                i += sz
        return retval

    def _parseRIFFChunk(self, file):
        h = file.read(8)
        if len(h) < 8:
            return False
        name = h[:4]
        size = struct.unpack('<I', h[4:8])[0]

        if name == 'LIST':
            pos = file.tell() - 8
            key = file.read(4)
            if key == 'movi' and self.video and not self.video[-1].aspect and \
               self.video[-1].width and self.video[-1].height and \
               self.video[-1].format in ['DIVX', 'XVID', 'FMP4']: # any others?
                # If we don't have the aspect (i.e. it isn't in odml vprp
                # header), but we do know the video's dimensions, and
                # we're dealing with an mpeg4 stream, try to get the aspect
                # from the VOL header in the mpeg4 stream.
                self._parseLISTmovi(size - 4, file)
                return True
            elif size > 80000:
                log.debug(u'RIFF LIST %r too long to parse: %r bytes' % (key, size))
                t = file.seek(size - 4, 1)
                return True
            elif size < 5:
                log.debug(u'RIFF LIST %r too short: %r bytes' % (key, size))
                return True

            t = file.read(size - 4)
            log.debug(u'parse RIFF LIST %r: %d bytes' % (key, size))
            value = self._parseLIST(t)
            self.header[key] = value
            if key == 'INFO':
                self.infoStart = pos
                self._appendtable('AVIINFO', value)
            elif key == 'MID ':
                self._appendtable('AVIMID', value)
            elif key == 'hdrl':
                # no need to add this info to a table
                pass
            else:
                log.debug(u'Skipping table info %r' % key)

        elif name == 'JUNK':
            self.junkStart = file.tell() - 8
            self.junkSize = size
            file.seek(size, 1)
        elif name == 'idx1':
            self.has_idx = True
            log.debug(u'idx1: %r bytes' % size)
            # no need to parse this
            t = file.seek(size, 1)
        elif name == 'RIFF':
            log.debug(u'New RIFF chunk, extended avi [%i]' % size)
            type = file.read(4)
            if type != 'AVIX':
                log.debug(u'Second RIFF chunk is %r, not AVIX, skipping', type)
                file.seek(size - 4, 1)
            # that's it, no new informations should be in AVIX
            return False
        elif name == 'fmt ' and size <= 50:
            # This is a wav file.
            data = file.read(size)
            fmt = struct.unpack("<HHLLHH", data[:16])
            self._set('codec', hex(fmt[0]))
            self._set('samplerate', fmt[2])
            # fmt[3] is average bytes per second, so we must divide it
            # by 125 to get kbits per second
            self._set('bitrate', fmt[3] / 125)
            # ugly hack: remember original rate in bytes per second
            # so that the length can be calculated in next elif block
            self._set('byterate', fmt[3])
            # Set a dummy fourcc so codec will be resolved in finalize.
            self._set('fourcc', 'dummy')
        elif name == 'data':
            # XXX: this is naive and may not be right.  For example if the
            # stream is something that supports VBR like mp3, the value
            # will be off.  The only way to properly deal with this issue
            # is to decode part of the stream based on its codec, but
            # kaa.metadata doesn't have this capability (yet?)
            # ugly hack: use original rate in bytes per second
            self._set('length', size / float(self.byterate))
            file.seek(size, 1)
        elif not name.strip(string.printable + string.whitespace):
            # check if name is something usefull at all, maybe it is no
            # avi or broken
            t = file.seek(size, 1)
            log.debug(u'Skipping %r [%i]' % (name, size))
        else:
            # bad avi
            log.debug(u'Bad or broken avi')
            return False
        return True

Parser = Riff


Wi-Fi is no longer an optional "extra" for most homes and businesses. It has become a critical component of connectivity. Just think about the number of wireless devices being used by your employees or family members including laptops, tablets, and smartphones. You need a wireless connection that is reliable and secure, and consumer-grade Wi-Fi access points are no longer adequate to meet the needs of most environments.
Managed Wi-Fi from YK Communications is your local answer to the challenges of wireless connections in homes, farms, retail stores, office buildings, restaurants, and more. The first step is for us to conduct a site survey of your location, along with your coverage and usage needs. Next, we will provide you with detailed recommendations regarding the number of access points required and where they should be located.
Managed Wi-Fi works in conjunction with your broadband Internet services.
Historically, networks relied on wired connections to do the heavy lifting for Internet usage. But in today's environment filled with wireless devices, you also need a carefully planned and installed Wi-Fi solution.
Managed Wi-Fi is specially designed for the home or office. Our team manages equipment firmware updates for the latest enhancements and security.
There is no huge upfront investment in Wi-Fi equipment. You also have the option to lease or purchase. We maintain and enhance the service for you, so there are no surprise costs for maintenance, upgrades, or replacements.
Your wireless network is at our fingertips with our cloud-based management portal. This gives our technicians real-time data on your access points, coverage areas, connected devices, data usage per device, and more.


text:
        Search docker hub for a container
        <input id="id_docker_hub_search" type="text" class="form-control input-md"
            [formControl]="searchTerm">

            Enter a search term to find a container within Docker Hub

                    {{ repo.repo_name }}

{{ repo.short_description }}

Configure: {{ selectedRepoDetail.name }}

            <markdown>
                {{ selectedRepoDetail.full_description }}
            </markdown>

                {{ selectedDockerFile }}

                Repository Name

            <input id="id_repo_name" type="text" class="form-control input-md" formControlName="repo_name">

        <clui-docker-file-editor id="id_docker_config_editor" [dockerFile]="selectedDockerFile"
            formControlName="docker_file"></clui-docker-file-editor>

redpajama_set_name: RedPajamaGithub


text:
Toyota To Consider Diesels Made by Supplier
Richard Truett | Automotive News
ANN ARBOR, Mich. -- Could Toyota break with 50 years of business practices and go outside the company for an engine?
It's not out of the question for the diesel engine being planned for the new generation of Toyota's Tundra pickup. Production of that vehicle begins next month, but Toyota has not said when a diesel option might be offered.
"We realize that to be a true truck company, it's important to develop a diesel," said Gary Convis, Toyota's executive vice president of engineering and manufacturing for North America. He spoke Sept. 8 at the groundbreaking ceremonies for Toyota's new North American Technical Center, scheduled to open in 2008.
Convis said that more than likely, Toyota will develop its own diesel or lean on its heavy-duty commercial-truck division, Hino, for diesel technology.
But Convis says Toyota has not ruled out buying one from an established supplier.
If Toyota does buy a diesel from a supplier, it would be the first time in the company's 50-year U.S. history that one of its vehicles would use a non-Toyota engine.
Possible U.S.-based diesel-engine suppliers could include Detroit Diesel Inc., John Deere & Co., Caterpillar Inc., Cummins Inc. and International Truck & Engine Corp.
Cummins and International already supply engines to automakers. Cummins builds the 5.9-liter turbocharged diesel in the Dodge Ram and has announced a new deal with an automaker for two more diesels, a V-6 and a V-8 that will be launched in 2010. Cummins has not named the automaker, but DaimlerChrysler is likely to be the customer.
International builds the Ford Power Stroke diesel and is well into negotiations with Nissan to supply a diesel V-8 for the Titan pickup.
Toyota will need a diesel for the Tundra not only because consumers are demanding better fuel economy but also because Ford, GM and Dodge are planning to use small-displacement diesels in light-duty trucks around 2010.
Convis says the Tundra launch late next month in San Antonio will be kept deliberately slow while Toyota officials keep an eye on quality. The truck will be built in a new factory and with a new engine. The first trucks will show up at dealerships before the end of the year, Convis said.
Without giving a number, Convis said the Tundra launch will be the biggest and most expensive in Toyota history. Toyota hopes to double sales of the Tundra to about 250,000 units a year.

redpajama_set_name: RedPajamaCommonCrawl


There are 327 Garden Clearance specialists in Weoley, and last month we helped 150658 homeowners get quotes for their home improvement jobs.
Great service all around, garden was left brilliantly clean and trees removed without any issue to the neighbours! Would highly recommend!
K&K landscape and tree care . We offer a wide range of service , all kinds of trees , all types of garden maintenance . All fencing work done . Slabbing ,gravel ,patios, high pressure cleaning . All work done to your satisfactory .
Excellent all round job carried out. Horticultural knowledge also very good. Looking to book another visit later in the year to prepare our garden for the Winter so enough said.
I'm a loyal hard honest worker, I take pride in my job, I've been doing this fencing,Slabing and garden maintenance since I was 16yrs old with my dad brothers. I give a fair price for today's economy and plz feel free to look at my ratings .Mick .
Brilliant job done to a high standard. Would use him again in the future due to the reasonable cost and reliable service. He would always let me know in advance when he would be able to come/not come, which I appreciated after most tradespeople I have come across in the past have let me down/can be unreliable or just not turn up.
A Family run business specialising in domestic and commercial grounds maintenance. Staff are fully trained, professional, insured, friendly and polite. Lawn Mowing, Hedge Trimming, Tree Pruining, Lawn Care, Weed Control, Turfing and Garden clearance.
Professional, reasonably priced, excellent job done on time as agreed. I will use this company again. I highly recommend this company to anyone.


MIAMI (February 6, 2007) – Carnival Cruise Lines, which led the cruise industry by initiating measures two years ago to remove trans fats from its menus, is taking that program to the next level in 2007.
The world's most popular cruise line stopped using cooking oils containing trans fats in 2005 and also currently offers trans-fat-free salad dressings, Spa Carnival Fare, vegetarian entrees and dinner breads. Designated by a special menu symbol, the Spa Carnival dishes are available on all lunch and dinner menus in the ships' main dining rooms and are lower in fat, sodium, cholesterol and calories. Poultry and meats are broiled or roasted, salads are prepared with low-fat or fat-free dressings and desserts with sugar substitutes. Carnival also offers delectable vegetarian selections and a diverse array of warm, delicious breads at each meal, all free of trans fats.
Additionally, while most items among Carnival's tantalizing cuisine choices are already trans fat free, the cruise line is conducting a detailed analysis of remaining items that can be replaced with trans-fat-free variations and is working with vendors to find suitable alternatives. Pastries, buns, certain cheeses and dessert icings (cake mixes are already trans fat free) are all among the items currently being examined.
"We quietly began moving away from ingredients containing trans fats two years ago, motivated simply by a desire to take the healthiest possible approach to food preparation and menu offerings in the interest of our guests' well-being," said Natko Nincevic, senior vice president of hotel operations, who oversees Carnival's food and beverage operations. "With the recent surge in consumer awareness on the risks associated with trans fats, we want to assure our guests that we're not only ahead of the curve on this important issue, but we're now taking it to the next level," Nincevic added.
Carnival's latest initiative to eliminate trans fats is slated to advance over the course of the next six months as the company continues to identify and replace additional items.
Carnival Cruise Lines, a unit of Carnival Corporation & plc (NYSE/LSE: CCL; NYSE: CUK), is the most popular cruise line in the world with 21 "Fun Ships" operating voyages ranging from three to 16 days in length to the Bahamas, Caribbean, Mexican Riviera, Alaska, Hawaii, Canada, New England, Bermuda, Europe and the Greek Isles.
The company currently has four new ships scheduled for delivery between now and 2011. The first of those, Carnival Freedom, is slated to debut in Europe March 5, 2007.


text:
Wooden Science And Know-how
Posted on December 24, 2017 July 3, 2018 by Cerys
Category:science and technology
Taggedknowhow, science, wooden
The scientists of at present have the nice luck of elevated productiveness and lower costs for laboratories and thus, extra artistic time for particular person researchers. Advances in medical technology have contributed immensely in extending the life span of people. National Taiwan College of Science and Know-how (NTUST, also called Taiwan Tech) is a technological university positioned in Taipei, Taiwan. He ought to give book talks at college Literary and Debating Society(L & D S) meetings and provide studying awards as a manner of encouraging pupils to love and browse books.
The CMRE organises and conducts scientific research and know-how growth, centred on the maritime domain, delivering progressive options to handle the Alliance's defence and safety needs. As a part of its mandate, the Canada Science and Expertise Museum should provide a secure atmosphere for guests and employees.
The STO generates and exploits a number one-edge science and expertise programme of labor, delivering timely outcomes and recommendation that advance the defence capabilities of Allies, partners and NATO in support of the core duties of collective defence, disaster administration and cooperative security.
Go forward and capture those fun moments during your visit to the Canada Science and Expertise Museum - images and movies for private use are permitted (inside the museum and on museum grounds). The Scientific Policy Resolution adopted by our Parliament on March four, 1958 laid stress on Government duty to safe for the folks, the benefits from acquisition of scientific information and practical application of analysis.
Arithmetic is essential in on a regular basis life, many types of employment, science and technology, medication, the financial system, the environment and growth, and in public decision-making. The Federal Ministry of Science and Know-how was established on 1st January, 1980 by Act No1 of 1980, because the successor organ of Authorities to the Nationwide Science and Technology Improvement Agency (NSTDA) which was established in 1976.


text:
Clear skies. Scattered frost possible. Low 32F. Winds W at 5 to 10 mph..
Clear skies. Scattered frost possible. Low 32F. Winds W at 5 to 10 mph.
1. David Byrne's "American Utopia"
Photo Contributed by Warner Music Group
Photo contributed by Amazon Prime Video
3. "Nomadland "
Photo Contributed by Searchlight Pictures
4. "Promising Young Woman"
Photo Contributed by Focus Features
5. "Another Round"
Contributed Photo by Det Danske Filminstitut
6. "Possessor Uncut"
Photo Contributed by Neon
Photo Contributed by Working Title Films
8. "The Nest"
Photo Contributed by IFC Films
9. "Minari"
Photo Contributed by A24
10. "Never Rarely Sometimes Always"
Dec 28, 2020 Updated Jan 6, 2021
Many of the films I saw in a theater at the beginning of this year including "Dolittle," "Fantasy Island," and "Brahms: The Boy II" prove that screen size isn't everything. While home viewing will never take the place of the cinema experience — I'm glad I had the chance to see "Tenet" in a theater — viewing movies at home can still be a rewarding and enjoyable experience. The movie industry took a major hit in 2020 like so many other businesses but there was no shortage of good films. Here are my 10 favorites of the year of which only one was viewed in a cinema. But don't worry, movie theaters will bounce back despite such a challenging year. In the meantime, if you feel comfortable venturing out to see a film on the big screen, please do so. I feel better protected in a movie theater thanks to all the safety protocols than I do at the grocery store.
Not your traditional film or documentary, but then this is 2020, and traditions went straight out the window. It is however a celebration of song and life. The exhilarating performance by David Byrne and the 11 musicians on stage is beautifully captured by Spike Lee. It is also the only film that made me forget about this past year as I got out of my seat and danced around. The power of music.
Once again, music plays an important role as we venture back to the 80s for a taste of the London House Party scene featuring the Jamaican sounds of reggae and rocksteady as a young couple played by Amarah-Jae St. Aubyn and Michael Ward fall in love. It's the second film in Steve McQueen's "Small Axe" anthology streaming on Amazon Prime. Tensions rise, lovers quarrel, but mostly people vibe on the dancefloor seduced by a great selection of music including an 11-minute singalong of Janet Kay's "Silly Games." A terrific cast and beautiful cinematography.
3. NOMADLAND
Frances McDormand can do no wrong. In Chloé Zhao's new film she plays a 60-year-old woman who lives in a van as she traverses the American West after losing her husband and her home. Based on Jessica Bruder's nonfiction novel "Nomadland: Surviving America in the Twenty-First Century" the film blends fiction with reality by incorporating real people living the nomadic life alongside first-rate performances by McDormand and David Strathairn. The emancipation from the American way of life is both heartbreaking and invigorating.
Carey Mulligan delivers her best performance in the biting dark comedy that takes aim at male predators. Writer-director Emerald Fennell knocks it out of the ballpark with a remarkable debut feature filled with vibrant colors that resemble a 90s music video with a soundtrack to match. The film deals with the serious subject matter by using the power of laughter to get the message across. The less you know about the film the more effective its shock factor becomes. Funny, entertaining and packs a helluva punch.
Mads Mikkelsen reunites with writer-director Thomas Vinterberg for a dramedy about four male high school teachers who start hitting the bottle after learning that Norwegian psychiatrist Finn Skårderud once theorized that humans are born with a 0.05% blood alcohol deficiency and in order to achieve peak social and professional performance, should drink daily to compensate. It's funny until it's not as the drinking brings deep-rooted problems to the surface. Still, there's hope and Mads Mikkelsen as you've never seen in the final act. Cheers!
Science fiction and horror come together for Brandon Cronenberg's sophomore film which echoes the work of his famous father. Andrea Riseborough plays a corporate assassin who uses brain implants to possess someone's body turning them into her executioner who in this case is portrayed by Christopher Abbot. Dazzling yet savage, the gory film is destined to become a classic of the genre.
Just as theaters began to shutter at the start of the pandemic, audiences began to once again fall in love with Jane Austen's self-imposed matchmaker Emma Woodhouse in this delightful adaptation from photographer and music video director Autumn de Wilde. The move to the small screen during its initial release may have hindered its impact but make no mistake the vibrant film with vivid costumes by Oscar-winner Alexandra Byrne features a terrific Anya Taylor-Joy ("The Queen's Gambit") as our protagonist and an endearing Bill Nighy as Emma's hypochondriac father.
Carrie Coon is outstanding as the strong-willed American wife of a British commodities broker played by Jude Law whose excessive lies and reckless behavior lead to a downward spiral that threatens to destroy the family and marriage. Writer-director Sean Durkin's follow up to 2011's "Martha Marcy May Marlene" has the look and feel of a horror film and in many ways, that's exactly what it is. You can be wealthy without being rich and rich without being wealthy. Here's another film that takes place in the 80s but this one has a terrific soundtrack that features Heart, The Cure, and New Order plus a haunting score by Richard Reed Parry.
Lee Isaac Chung's autobiographical drama about a Korean family reaching for the American dream takes place in the 80s as Steven Yeun plays the optimistic patriarch who uproots his clan from California to Arkansas to try his hand at farming. The terrific cast led by Yeun features Yeri Han as his pessimistic wife, a scene-stealing Youn Yuh-jung as the visiting mother-in-law, and great character actor Will Patton as the quirky Christian neighbor. A lovely film that reinforces family as the glue that holds the fabric of society together.
Writer-director Eliza Hittman remains impartial with the moving drama about a teenage girl (an excellent Sidney Flanigan) dealing with an unwanted pregnancy in a state where abortions are illegal. Talia Ryder is equally impressive as the self-sacrificing best friend and cousin who offers more than emotional support. Whatever your beliefs, you can't help but feel empathy for the film's protagonist. Emotional and engaging.
HONORABLE MENTIONS: "First Cow," "Tenet," "Dick Johnson is Dead," "The Invisible Man," "Bacurau," "Sound of Metal," "Kajillionaire," "Beanpole," "The Vast of Night," "Yellow Rose."
{span}Joe Friar is a member of the Critics Choice Association (Los Angeles) and the Houston Film Critics Society. A lifelong fan of cinema, he co-founded the Victoria Film Society, Frels Fright Fest, and is a Rotten Tomatoes approved critic. {/span}


text:
Leo Stallworth (Reporter) Bio, Wiki, Age, Height, Family, Wife, ABC7, Salary and Net Worth
Leo Stallworth is an American general assignment reporter who is ABC7 Eyewitness News Reporter. He attended the University of Texas at Austin
Leo Stallworth Profile
Leo Stallworth is an American journalist working for ABC7 serving as a general assignment reporter. He has been working for the station since joining in July 2000. He attended the University of Texas at Austin where he graduated with a degree in broadcast journalism.
Leo Stallworth Career
Stallworth is a journalist who started his reporting career on the radio in Dallas, Texas. Stallworth's first television reporting position was in Tyler, Texas, but he quickly moved on to Sarasota, Florida. Stallworth then worked as an anchor in Florence/Myrtle Beach, South Carolina, and a reporter and anchor in St. Louis, Missouri.
Since joining ABC7, he has become very involved in community events on behalf of ABC7, including helping to organize charity basketball games to benefit the Foothill Unity Center. He is also very active when it comes to his social media platforms including Facebook, Twitter as well as Instagram. Whenever he is not working, he loves spending his free time with his family and friends and enjoying outdoor activities. Furthermore, he also enjoys trying out new restaurants all across his community.
Leo Stallworth Age
Stallworth's age is not known for he has managed to keep his personal life private. It is therefore not known how old Stallworth is or when he celebrates his birthday. However, he might be in his 50s.
Leo Stallworth Height
Stallworth stands at an approximate height of 5 feet 6 inches.
Leo Stallworth Family / Parents
Stallworth was born in Los Angeles but spent most of his childhood in Texas. He has however not revealed the names of his parents or siblings.
Leo Stallworth Wife
Information about Stallworth's dating life is not known for he has managed to keep his personal life away from the limelight. It is therefore not known if Stallworth is engaged to someone or whether he is married. It is also not known if he has any children.
Quick Facts About Leo Stallworth
Full Name Leo Stallworth
Leo Stallworth Salary
Being one of the top general assignment reporters at ABC7, Stallworth earns an annual salary ranging between $ 20,000 – $ 100,000.
Leo Stallworth's Net Worth
Stallworth has an estimated net worth of between $1 Million – $5 Million which he has earned through his successful career as a general assignment reporter.
Leo Stallworth Photo
Leo Stallworth obituary
Stallworth is still very much healthy and alive.
Leo Stallworth ABC7
At ABC7, Stallworth works alongside;
Eileen Frere – Reporter
Rob Fukuzaki – Sports Anchor
Sid Garcia – General Assignment Reporter
Carlos Granda – General Assignment Reporter
Sophie Flay – Journalist
Kimi Evans – Metrologist
Chris Cristi – Helicopter Reporter
Jessica De Nova – Multi-Skilled Journalist
Denise Dador – Health Specialist
Tony Cabrera – General Assignment Reporter
Alex Cheney – General Assignment Reporter
Lori Corbin – Food Coach and Journalist
Marc Cota-Robles – General Assignment Reporter
Adrienne Alpert – General Assignment Reporter
Rachel Brown – Anchor and General Assignment Reporter
Leo Stallworth Twitter
Tweets by abc7leo


Our Mobile app developers really love creating apps and it's their passion. As a result, iOS & Android App development has been our forte for years. We build apps for your business, consumers and enterprise at a fixed price or can augment your current team for finite period. We've launched many successful apps for companies with offshore dedicated programmers as well as for agencies when they outsource to us.
We began building iOS apps the day the iPhone SDK opened up, & we have not stopped since. We leverage the strengths of each and every iOS platform to build incredible & awesome solutions across iPhone and iPad.
Finding a true partner that can provide expertise on mobile technology has become crucial for startups, large and small organizations across a wide range of businesses.
A mobile app can be an excellent addition to your business as more and more people are turning to smartphones for all their needs. If you are in the market to hire a mobile app developer. We provide the best mobile app solutions which will attract more users, keep them engaged and drive more conversions.
Mobile app is a magical tool that makes life easier, faster and colorful. A highly interactive mobile app makes you delighted when you are a user and makes your customers delighted.
Do you prefer iPhone App or Android App or both? We have a right and great blend of solution for you. Need a native or custom app or cross-platform responsive web app.
Whatever the industry you are in, you can expect a highly interactive mobile app from us that works smoothly on all sorts of devices and makes your customers satisfied.


In oxygenic photosynthesis, where does the oxygen molecule in glucose come from - is it from water or carbon dioxide? Not the oxygen released as a byproduct, but the oxygen present in the glucose molecule formed.
Oxygen in glucose comes from carbon dioxide.
In case of oxygenic photosynthesis, water splitting results in oxygen molecule that is released into the atmosphere.
2. would salt water impact the ability of cells to perform cellular respiration?


text:
Q: View [auth.login] not found I am working on login part of application where i am creating two seperate login for admin and user.
My Controller structure is like :
 Controller -    Admin (For Admin)
       LoginController.php
       -- Auth
          login.blade.php
       ....   Auth  (For Normal user)
       LoginController.php
       ...

Views:

 Admin
   login.blade.php
 auth
   login.blade.php

till now i'm working on the admin part.
LoginController.php

<?php

namespace App\Http\Controllers\Admin;

use Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Where to redirect admins after login.
     *
     * @var string
     */
    protected $redirectTo = '/admin';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest:admin')->except('logout');
    }

    /**
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function showLoginForm()
    {
        return view('admin.auth.login');
    }

    public function login()
    {
        $this->validate($request, [
            'email'   => 'required|email',
            'password' => 'required|min:6'
        ]);
        if (Auth::guard('admin')->attempt([
            'email' => $request->email,
            'password' => $request->password
        ], $request->get('remember'))) {
            return redirect()->intended(route('admin.dashboard'));
        }
        return back()->withInput($request->only('email', 'remember'));
    }

    /**
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    /*public function logout(Request $request)
    {
        Auth::guard('admin')->logout();
        $request->session()->invalidate();
        return redirect()->route('admin.login');
    } */
}

RedirectIfAuthenticated.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        switch($guard){
            case 'admin':
                if (Auth::guard($guard)->check()) {
                    return redirect('/admin');
                }
                break;
            default:
                if (Auth::guard($guard)->check()) {
                    return redirect('/');
                }
                break;
        }
        return $next($request);
    }
}

Authenticate.php

<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}

web.php

Route::group(['prefix'  =>  'admin'], function () {

    Route::get('login', 'Admin\LoginController@showLoginForm')->name('admin.login');
    Route::post('login', 'Admin\LoginController@login')->name('admin.login.post');
    Route::get('logout', 'Admin\LoginController@logout')->name('admin.logout');

    //Route::get('dashboard', 'Admin\LoginController@dashboard')->name('admin.dashboard');

    Route::group(['middleware' => ['auth:admin']], function () {

        Route::get('/dashboard', function () {
            return view('admin.dashboard.index');
        })->name('admin.dashboard');

    });

whenever i access dashboard throgh url i get View[auth.login] not found.

A: You can modify the file Authenticate.php  to receive the guard name in redirectTo method.
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * @var array
     */
    protected $guards = [];

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @param  string[] ...$guards
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle($request, Closure $next, ...$guards)
    {
        $this->guards = $guards;

        return parent::handle($request, $next, ...$guards);
    }

    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request $request
     * @return string
     */
    protected function redirectTo($request)
    {
        if (!$request->expectsJson()) {
            if (reset($this->guards) === 'admin') {
                return route('admin.login');
            }
            return route('login');
        }
    }
}

Note that it may be necessary to execute php artisan cache:clear after the change.
source

redpajama_set_name: RedPajamaStackExchange


What NEW can be done?
The truth is, everyone has cellulite. Photoshop can make celebrities appear cellulite free but in truth there is very little you can do to stop the process; although we all try. The trick is however, to treat it properly when it becomes visible and a confidence inhibitor. At SAI we take cellulite treatment very seriously and follow global trends and research very closely because so many people promise results with little actual success. At SAI we are different.
The best way to answer this is to tell what cellulite isn't. Cellulite isn't excessive fat, and you don't need to be overweight to suffer from cellulite. Right, with that out of the way lets discuss what cellulite is.
Cellulite is a combination of fat and connective tissue lying very close to the surface of the skin. The fibrous connective tissue pull your skin inward while the layer of fat protrudes outward. This creates the pot marked effect.
So how do you treat cellulite and get results?
Again, lets start with what wont work. Creams will not eradicate cellulite, they can make the skin appear smoother, but they will not degrade the fat and connective tissue. Similarly losing weight won't solve your problems either. Losing weight can reduce the pressure of the fat cells pushing against the surface of the skin but weight loss rarely makes an excessive improvement most patients are looking for.
At SAI Dr Clark and his team take a combination approach to treat both elements of cellulite: the fat and the connective tissue. The principle idea is to reduce the fat while breaking the fibrous bands to release the skin.
At SAI treatment options can and will be tailored to achieve your desired results and meet your budget.
LipoKontur offers patients a two-fold treatment approach. The protocol provides a direct treatment to break the connective tissue bonding the skin to the fat below and releasing it for a smooth skin appearance. This is called the acoustic shockwave. Then, using thermal energy and radio frequency the treatment destroys the fat cells, further enhancing the result.
If you combine VelaSmooth into the protocol this infrared and negative pressure therapy will help with drainage to smooth the skin surface for a wonderful contoured effect. Finally mesotherapy introduces vitamins into the skin to create a healthy and stable skin environment to reduce the risk of reoccurrence.
Is there anything I can do at home to improve my cellulite appearance?
Yes there is. There are many theories about homecare for cellulite and for most of Dr Clarks' patients at SAI he explains that each individual will need to find what works best for them. Combine the SAI treatment protocol with attempts to eat healthier, wear sunblock and avoid smoking and other harmful chemicals and you will see improved results.
To make your Cellulite treatment appointment and get your body Valentines ready, call SAI today on 011 883 3116.


text:
Q: ContentView ViewModelLocator.AutowireViewModel I am trying to auto wire my view model to my content view in Xamarin forms using this syntax:

<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="APP.Views.PostEntryView"
             x:Name="postEntryView">

the name of my view model is PostEntryViewViewModel but it does not doing anything
Is there any way to auto wire a content view to a view model, how I have to register it in the container??

A: Rename your ViewModel to PostEntryViewModel. The default naming would be as follows:

View              ViewModel
SomeView          SomeViewModel
SomePage          SomePageViewModel
Something         SomethingViewModel

Alternatively you may follow something like the function the Container Extensions use to register a specific View and ViewModel


The New Jersey Department of Labor and Workforce Development (NJDOL) recently issued proposed regulations to implement the New Jersey paid sick leave law (PSLL), which goes into effect on October 29, 2018. The proposed regulations address many questions New Jersey employers have about the new law, but other areas of uncertainty remain.
Integration with Existing PTO Policies. The regulations confirm that an employer's existing paid time off (PTO) policy will be in compliance with the PSLL if it complies with the accrual, use, payment, and carry over provisions of the PSLL.
Required Notice and Posting. The proposed regulations state that the required notice may be provided by email, and the required posting may be posted via "an internet site or intranet site for exclusive use by its employees and to which all employees have access." The NJDOL has not yet made the required notice/posting available.
Independent Contractors. The proposed regulations state that the test to determine whether a worker is an employee (and, therefore, covered under the law) or an independent contractor (and, therefore, not covered) will be the "ABC" test currently used under the state's unemployment compensation law.
Hours Worked. The proposed regulations state that "hours worked" for purposes of the accrual method shall be defined in accordance with New Jersey's existing wage and hour regulations under NJAC 12:56-5.
Benefit Year. The proposed regulations state that the employer must establish a single benefit year for all employees. If the employer wishes to change the benefit year, the employer must supply the NJDOL with specified, detailed information, and the NJDOL can refuse the change if it determines the change is intended to prevent use or accrual of PSL.
Current Employees. The proposed regulations state that employees hired on or before October 29, 2018 must begin to accrue earned sick leave no later than October 29, 2018.
Foreseeable Need. The proposed regulations define what is meant by a "foreseeable" need for paid sick leave ("such as a scheduled doctor's visit")—which requires no more than 7 days advance notice.
[S]hall be limited to verifiable high-volume periods or special events, during which permitting the use of foreseeable earned sick leave would unduly disrupt the operations of the employer.
i. An example of a high-volume period would be, for an airline industry employer, the period during which they experience a predictable increase in customer activity (which is to say, flying) in and around a particular holiday, like Thanksgiving.
ii. An example of a special event would be, for a manufacturer of retail products, the day or week during which it is making a new product available for the first time (that is, a product launch).
(d) Where an employee has two or more different jobs for the same employer or if an employee's rate of pay fluctuates for the same job, the rate of pay for earned sick leave shall be the amount that the employee is regularly paid for each hour of work as determined by adding together the employee's total earnings, exclusive of overtime premium pay, for the seven most recent workdays when the employee did not take leave and dividing that sum by the total hours of work during that seven-day period.
(e) Where an employee is paid by commission, whether base wage plus commission or commission only, the employer must pay the employee during earned sick leave an hourly rate that is the base wage or the State minimum wage rate, whichever is greater.
(f) When an employee is paid on a piecework basis, whether base wage plus piecework or piecework only, to calculate the employee's rate of pay for earned sick leave, the employer shall add together the employee's total earnings for the seven most recent workdays when the employee did not take leave and divide that sum by the number of hours the employee spent performing the work during workdays.
(g) Where an employee uses earned sick leave during hours that would have been overtime if worked, the employer is not required to pay the overtime rate of pay.
(i) Where the amount of a bonus is wholly within the discretion of the employer, the employer is not required to include the bonus when determining the employee's rate of pay for earned sick leave purposes.
Penalties. The proposed regulations set forth in detail the hearing procedures and the penalties for violations of the PSLL.
The proposed regulations do not address every open question, but do address many. The NJDOL will accept comments on the proposed regulations for 60 days, until December 14, 2018, and the final regulations will be issued sometime thereafter. It is likely that the final regulations will not be substantially different from the proposed regulations. The attorneys of the New Jersey office of Ogletree Deakins will be submitting comments to the NJDOL with a request that other issues be addressed in the final regulations.
On September 13, 2018, the attorneys in Ogletree Deakins' New Jersey office conducted a webinar, "New Jersey's Looming Paid Sick Leave Law: Are You Ready?" To hear a recording of this timely webinar, click here.


Great presentation from Kevin Kelly ([praized subtype="small" pid="9d3ee2214959dec2f68d97fb4c3d24fe" type="badge" dynamic="true"]) last week at the Web 2.0 Summit. I've been a big big fan of Kelly ever since he wrote this blog post.
He starts by mentioning it's been 6527 days since Tim Berners-Lee built his first Web page, marvels at the things we've accomplished and wonders what will happen in the next 6500 days.
He explains the various phases we went through. Phase 1 of the Internet was all about linking computers together and sharing packets. Phase 2 was about linking pages (when the Web came along) and sharing links. Phase 3, the next phase, will be about linking data. Linking to the information inside the page down to the elemental unit (what I often call "atomization). This new semantic Web will understand the meaning of words. For example, "Pacifica" (a small town near San Francisco) is a place with attributes.
Everything, all media, will be online. "Newspapers, print, videos, music, music, etc. will obey the same kind of laws. If I show you a blank screen, you can't tell me whether that's going to show a movie, the Web, a game or TV" We will have one single inter-media platform, running on the same machine.
We're moving to the Cloud, we're moving to the Database and we're moving to sharing. And it means life will be "always on", we will see extreme dependence (because the connection makes us smarter), we will have extended self (not knowing exactly where we begin and where we end). Finally, we will see the value of the collective where the individual will be able to shine but the collective work will be bigger than the individual.
< Previous LeWeb '08 Conference in Paris: Any of My Readers Going?


text:
Nashville's Keenan Reynolds ties NCAA touchdown mark
David Ginsburg
ANNAPOLIS, Md. — On his way to earning a place in the NCAA record book, Nashville's Keenan Reynolds showed his potential as a head football coach.
Reynolds scored twice in the fourth quarter to tie the collegiate mark for career rushing touchdowns, and Navy set a school record with three 100-yard rushers in a 29-17 victory over South Florida on Saturday.
The Midshipmen never led until Reynolds bulled in from the 1 to make it 22-17 with 6:58 left. After South Florida fumbled the ensuing kickoff, Reynolds clinched it with another 1-yard touchdown run with 1:49 remaining.
Reynolds' final TD came on a fourth-and-goal after a sideline chat with coach Ken Niumatalolo.
"I was going to kick the field goal just to go up by eight," Niumatalolo said.
Reynolds would have none of it.
"I said, 'Coach, we don't need to kick a field goal here,'" Reynolds recalled. "Let's don't give them any life. They're not going to stop us on the 1."
Former Goodpasture QB eyes more Navy football records
Keenan Reynolds leads Navy to bowl win
Reynolds was right. Following his fullback, the senior quarterback scored his 77th career rushing TD, tying former Wisconsin running back Montee Ball (2009-12) for most in NCAA history.
"The kid is smarter than I am," Niumatalolo said.
Reynolds didn't convince his coach to keep the offense on the field because of the record. He did it because it was the best way to assure Navy a victory.
"It's just a number," Reynolds said of his touchdown total. "At the end of the day, it was just about getting ahead and putting the game out of reach. We were able to execute that play. It's a big deal, obviously. I am very blessed and fortunate. But I always deflect the attention to my teammates because it's 11 guys out there working."
Reynolds can set the record next Saturday at Memphis.
Nose guard Bernie Serra, who was in the room when Reynolds was talking, added this: "I hear him saying it's just a number. Yeah, it's a number — a really big number."
Reynolds finished with 117 yards rushing, Dishan Romine had 115 and Chris Swain totaled 131 for Navy.
The victory made the Midshipmen (6-1, 4-0 AAC) bowl eligible for the 12th time in 13 years. Navy has ties to the Military Bowl but could go to a more prestigious venue if it wins the AAC title game.
Ex-Goodpasture QB shakes hands with Obama
Navy trailed 17-16 before Reynolds launched an 80-yard drive for the winning score, accounting for 56 yards on seven carries. Before the Midshipmen took the field, Reynolds had a message for them.
"I just told the guys, it's gut-check time," he said. "If we want to be a great team, this is where it starts. All of the goals we have as a team, it's an opportunity."
After Reynolds scored, USFlost the handle of the following kickoff. Navy then covered 42 yards to increase its lead.
The Midshipmen finished with 428 yards on the ground, its most since Sept. 6, 2014, against Temple.
Roger Staubach has high praise for former Goodpasture star


text:
using namespace std;
using namespace boost::property_tree;
using namespace utils::intros_ptree;

struct test_multiple_items
{
	int x;
	string s;
	double d;
	bool b;
};

bool operator==(const test_multiple_items& lhs, const test_multiple_items& rhs)
{
	return
		lhs.x == rhs.x &&
		lhs.s == rhs.s &&
		lhs.d == rhs.d &&
		lhs.b == rhs.b;
}

BEGIN_INTROS_TYPE(test_multiple_items)
	ADD_INTROS_ITEM(x)
	ADD_INTROS_ITEM(s)
	ADD_INTROS_ITEM(d)
	ADD_INTROS_ITEM(b)
END_INTROS_TYPE(test_multiple_items)

struct test_multiple_items_diff_names
{
	int x;
	string s;
	double d;
	bool b;
};

bool operator==(const test_multiple_items_diff_names& lhs, const test_multiple_items_diff_names& rhs)
{
	return
		lhs.x == rhs.x &&
		lhs.s == rhs.s &&
		lhs.d == rhs.d &&
		lhs.b == rhs.b;
}

BEGIN_INTROS_TYPE_USER_NAME(test_multiple_items_diff_names, "test_another_name")
	ADD_INTROS_ITEM(x)
	ADD_INTROS_ITEM_USER_NAME(s, "string_name_different")
	ADD_INTROS_ITEM(d)
	ADD_INTROS_ITEM(b)
END_INTROS_TYPE(test_multiple_items_diff_names)

struct test_multiple_items_diff_scope
{
	int x;
	string s;
	double d;
	bool b;
};

bool operator==(const test_multiple_items_diff_scope& lhs, const test_multiple_items_diff_scope& rhs)
{
	return
		lhs.x == rhs.x &&
		lhs.s == rhs.s &&
		lhs.d == rhs.d &&
		lhs.b == rhs.b;
}

BEGIN_INTROS_TYPE(test_multiple_items_diff_scope)
	ADD_INTROS_ITEM(x)
	ADD_INTROS_ITEM_USER_NAME(s, MAKE_USER_NAME("s", "temp_scope", false))
	ADD_INTROS_ITEM_USER_NAME(d, MAKE_USER_NAME("d", "temp_scope", false))
	ADD_INTROS_ITEM(b)
END_INTROS_TYPE(test_multiple_items_diff_scope)

struct test2
{
	int x;
};
namespace test_sc
{
	BEGIN_INTROS_TYPE(test2)
		ADD_INTROS_ITEM(x)
	END_INTROS_TYPE(test2)
}

template<typename T>
void check(istream& is, const T& res, bool is_xml = false)
{
	ptree tree;

	if (is_xml)
		read_xml(is, tree);
	else
		read_json(is, tree);

	auto ob1 = make_intros_object<T>(tree);

	BOOST_CHECK(ob1 == res);

	auto tree2 = make_ptree(res);

	auto ob2 = make_intros_object<T>(tree2);

	BOOST_CHECK(ob2 == res);
}

struct test_c_array
{
	int a[10];
};

BEGIN_INTROS_TYPE(test_c_array)
	ADD_INTROS_ITEM(a)
END_INTROS_TYPE(test_c_array)

struct test_no_intros
{
	int x;
};

struct test_nested_no_intros
{
	int x;
	test_no_intros y;
};

BEGIN_INTROS_TYPE(test_nested_no_intros)
	ADD_INTROS_ITEM(x)
	ADD_INTROS_ITEM(y)
END_INTROS_TYPE(test_nested_no_intros)

struct test_unsupported_type
{
	map<int, string> ms;
};
BEGIN_INTROS_TYPE(test_unsupported_type)
	ADD_INTROS_ITEM(ms)
END_INTROS_TYPE(test_unsupported_type)

struct test_unsupported_no_def_ctor
{
	int x;
	explicit test_unsupported_no_def_ctor(int _x) : x(_x) {}
};
BEGIN_INTROS_TYPE(test_unsupported_no_def_ctor)
	ADD_INTROS_ITEM(x)
END_INTROS_TYPE(test_unsupported_no_def_ctor)

struct test_containers
{
	int x;
	vector<string> vs;
	set<double> sd;
};
BEGIN_INTROS_TYPE(test_containers)
	ADD_INTROS_ITEM(x)
	ADD_INTROS_ITEM(vs)
	ADD_INTROS_ITEM(sd)
END_INTROS_TYPE(test_containers)

bool operator==(const test_containers& lhs, const test_containers& rhs)
{
	return
		lhs.x == rhs.x &&
		lhs.vs == rhs.vs &&
		lhs.sd == rhs.sd;
}

struct test_containers_diff_scope
{
	int x;
	vector<string> vs;
	set<double> sd;
};
BEGIN_INTROS_TYPE(test_containers_diff_scope)
	ADD_INTROS_ITEM(x)
	ADD_INTROS_ITEM_USER_NAME(vs, MAKE_USER_NAME("vs", "all_vs", false))
	ADD_INTROS_ITEM_USER_NAME(sd, MAKE_USER_NAME("sd", "all_sd", false))
END_INTROS_TYPE(test_containers_diff_scope)

bool operator==(const test_containers_diff_scope& lhs, const test_containers_diff_scope& rhs)
{
	return
		lhs.x == rhs.x &&
		lhs.vs == rhs.vs &&
		lhs.sd == rhs.sd;
}

struct test_attributes_2
{
	int x;
	string name;
	vector<string> vs;
	set<double> sd;
};
BEGIN_INTROS_TYPE(test_attributes_2)
	ADD_INTROS_ITEM_USER_NAME(x, MAKE_USER_NAME("x", "", true))
	ADD_INTROS_ITEM_USER_NAME(name, MAKE_USER_NAME("name", "", true))
	ADD_INTROS_ITEM_USER_NAME(vs, MAKE_USER_NAME("vs", "all_vs", false))
	ADD_INTROS_ITEM_USER_NAME(sd, MAKE_USER_NAME("sd", "all_sd", false))
END_INTROS_TYPE(test_attributes_2)

bool operator==(const test_attributes_2& lhs, const test_attributes_2& rhs)
{
	return
		lhs.x == rhs.x &&
		lhs.name == rhs.name &&
		lhs.vs == rhs.vs &&
		lhs.sd == rhs.sd;
}

BOOST_AUTO_TEST_CASE(test_intros_ptree_tags_read_intros)
{
	//item_has_intros
	static_assert(std::is_base_of<details::tags::item_has_intros, details::item_category_read_intros<test_multiple_items>>::value, "");
	static_assert(std::is_base_of<details::tags::item_has_intros, details::item_category_read_intros<const test_multiple_items>>::value, "");

	//item_is_array
	//we only detect it to give static_assert
	static_assert(std::is_base_of<details::tags::item_is_array, details::item_category_read_intros<int[10]>>::value, "");

	//item_can_stream_insert
	static_assert(std::is_base_of<details::tags::item_can_stream_insert, details::item_category_read_intros<int>>::value, "");
	static_assert(std::is_base_of<details::tags::item_can_stream_insert, details::item_category_read_intros<string>>::value, "");
	static_assert(std::is_base_of<details::tags::item_can_stream_insert, details::item_category_read_intros<const string>>::value, "");

	//item_has_input_iterator
	static_assert(std::is_base_of<details::tags::item_has_input_iterator, details::item_category_read_intros<vector<int>>>::value, "");
	static_assert(std::is_base_of<details::tags::item_has_input_iterator, details::item_category_read_intros<list<int>>>::value, "");
	static_assert(std::is_base_of<details::tags::item_has_input_iterator, details::item_category_read_intros<map<int, string>>>::value, "");
	static_assert(std::is_base_of<details::tags::item_has_input_iterator, details::item_category_read_intros<set<double>>>::value, "");

	//item_not_supported
	//intros needs to be in global scope
	static_assert(std::is_base_of<details::tags::item_not_supported, details::item_category_read_intros<test2>>::value, "");
	static_assert(std::is_base_of<details::tags::item_not_supported, details::item_category_read_intros<map<int, string>::value_type>>::value, "");
}

BOOST_AUTO_TEST_CASE(test_intros_ptree_tags_write_intros)
{
	//item_has_intros
	static_assert(std::is_base_of<details::tags::item_has_intros, details::item_category_write_intros<test_multiple_items>>::value, "");

	//item_is_array
	static_assert(std::is_base_of<details::tags::item_is_array, details::item_category_read_intros<int[10]>>::value, "");
	static_assert(std::is_base_of<details::tags::item_is_array, details::item_category_write_intros<int[10]>>::value, "");

	//item_can_stream_extract
	static_assert(std::is_base_of<details::tags::item_can_stream_extract, details::item_category_write_intros<int>>::value, "");
	static_assert(std::is_base_of<details::tags::item_can_stream_extract, details::item_category_write_intros<string>>::value, "");
	static_assert(std::is_base_of<details::tags::item_has_input_iterator, details::item_category_read_intros<set<double>>>::value, "");

	//item_can_insert_at_end
	static_assert(std::is_base_of<details::tags::item_can_insert_at_end, details::item_category_write_intros<vector<int>>>::value, "");
	static_assert(std::is_base_of<details::tags::item_can_insert_at_end, details::item_category_write_intros<list<int>>>::value, "");
	static_assert(std::is_base_of<details::tags::item_can_insert_at_end, details::item_category_write_intros<map<int, string>>>::value, "");

	//item_not_supported
	// intros needs to be in global scope
	static_assert(std::is_base_of<details::tags::item_not_supported, details::item_category_write_intros<test2>>::value, "");
	static_assert(std::is_base_of<details::tags::item_not_supported, details::item_category_write_intros<map<int, string>::value_type>>::value, "");
	// we can't write into const object

	// this check fails with GCC
#ifndef __GNUC__
	static_assert(std::is_base_of<details::tags::item_not_supported, details::item_category_write_intros<const string>>::value, "");
#endif

	static_assert(std::is_base_of<details::tags::item_not_supported, details::item_category_write_intros<const int>>::value, "");
}

BOOST_AUTO_TEST_CASE(test_intros_ptree_c_array)
{
	ptree tree;
	test_c_array ob{};
	// following won't compile
	//tree = make_ptree(ob);
	//ob = make_intros_object<test_c_array>(tree);
	ob = {};
}

BOOST_AUTO_TEST_CASE(test_intros_ptree_no_intros)
{
	test_no_intros ob;
	ptree tree;
	// following won't compile
	//tree = make_ptree(ob);
	//ob = make_intros_object<test_no_intros>(tree);
	ob = { 10 };// to remove unused variable warning
}

BOOST_AUTO_TEST_CASE(test_intros_ptree_nested_no_intros)
{
	test_nested_no_intros ob;
	ptree tree;
	// following won't compile
	//tree = make_ptree(ob);
	//ob = make_intros_object<test_nested_no_intros>(tree);
	ob = {};// to remove unused variable warning
}

BOOST_AUTO_TEST_CASE(test_intros_ptree_unsupported_type)
{
	test_unsupported_type ob;
	ptree tree;
	// following won't compile
	//tree = make_ptree(ob);
	//ob = make_intros_object<test_unsupported_type>(tree);
	ob = {};// to remove unused variable warning
}

BOOST_AUTO_TEST_CASE(test_intros_type_unsupported_no_def_ctor)
{
	test_unsupported_no_def_ctor ob(10);
	ptree tree;
	// we can read from it
	tree = make_ptree(ob);
	// but we can't write to it
	// following won't compile
	//ob = make_intros_object<test_unsupported_no_def_ctor>(tree);
}
BOOST_AUTO_TEST_CASE(test_intros_ptree_general)
{
	string s = R"(
{"test_multiple_items":{"x":"10", "s":"hello", "d":"123.456", "b":"true"}}
)";
	test_multiple_items val{ 10, "hello", 123.456, true };

	stringstream ss(s);
	check(ss, val);
}

BOOST_AUTO_TEST_CASE(test_intros_ptree_dif_names)
{
	string s = R"(
{"test_another_name":{"x":"10", "string_name_different":"hello", "d":"123.456", "b":"true"}}
)";
	test_multiple_items_diff_names val{ 10, "hello", 123.456, true };

	stringstream ss(s);
	check(ss, val);
}

BOOST_AUTO_TEST_CASE(test_intros_ptree_multiple_items_diff_scope)
{
	string s = R"(
{"test_multiple_items_diff_scope":{"x":"10", "temp_scope":{"s":"hello", "d":"123.456"}, "b":"true"}}
)";
	test_multiple_items_diff_scope val{ 10, "hello", 123.456, true };

	auto tree = make_ptree(val);
	//write_json(cout, tree);

	stringstream ss(s);
	check(ss, val);
}

BOOST_AUTO_TEST_CASE(test_intros_struct_containers)
{
	string s = R"(
{"test_containers":{"x":"10", "vs":"string1", "sd":"-40", "vs":"string2", "vs":"string3", "sd":"-20", "sd":"100"}}
)";
	test_containers val;
	val.x = 10;
	val.vs = vector<string>{ "string1", "string2", "string3" };
	val.sd.insert(-20);
	val.sd.insert(-40);
	val.sd.insert(100);

	auto tree = make_ptree(val);
	//write_json(cout, tree);

	stringstream ss(s);
	check(ss, val);
}

BOOST_AUTO_TEST_CASE(test_intros_struct_containers_diff_scope)
{
	string s = R"(
{"test_containers_diff_scope":{"x":"1234", "all_vs":{"vs":"1", "vs":"708", "vs":"789"}, "all_sd":{"sd":"123.456", "sd":"-108", "sd":"456"}}}
)";
	test_containers_diff_scope val;
	val.x = 1234;
	val.vs = vector<string>{ "1", "708", "789" };
	val.sd.insert(123.456);
	val.sd.insert(-108);
	val.sd.insert(456);

	stringstream ss(s);
	check(ss, val);
}

BOOST_AUTO_TEST_CASE(test_intros_struct_attributes)
{
	string s = R"(
<test_attributes_2 x="1234" name="hello">
	<all_vs>
		<vs>1</vs>
		<vs>708</vs>
		<vs>789</vs>
	</all_vs>
	<all_sd>
		<sd>123.456</sd>
		<sd>-108</sd>
		<sd>456</sd>
	</all_sd>
</test_attributes_2>
)";
	test_attributes_2 val;
	val.x = 1234;
	val.name = "hello";
	val.vs = vector<string>{ "1", "708", "789" };
	val.sd.insert(123.456);
	val.sd.insert(-108);
	val.sd.insert(456);

	stringstream ss(s);
	check(ss, val, true);
}


text:
Q: How to implement 'undo' operation in .net windows application? Assume that, a win form has certain input fields and user enters/re-enters some data.
How to retain data previously entered by 'undo' operation?
Just I want to know the best way to accomplish it.

A: I'm not sure if WinForms/.Net has some type of built-in Undo feature that you can take advantage of.  But what you are really looking for is a Stack datastructure to help you manage a list of actions.  You'll need to create some type of "action" object to represent the actions that a user could do and as they progress through the application you'll need to push these actions onto the Stack.  When they hit the undo button, or Ctrl-Z or whatever method of initiating the undo action you'll pop off the current action and restore the application state to the previous action.
This is a very basic and high level overview of how this would work but I imagine that implementing such a feature can get quite complex.  Just imagine how it needs to work for a program like Adobe Photoshop.  :O

A: This might not be the best way to go about it depending on what you're trying to accomplish, but you could use a richtextbox and call upon the undo method built into that control.
For example:
richTextBox1.Undo();

A: CTRL + Z works on individual controls.
If you work with data and a BindingSource, you can "undo" the not persisted changes to the record(s) by calling the CancelEdit function or alternatively you can reload the data for the database.

A: There are a few options.  The important thing is that you start designing it in early in the project.  Trying to add it to an existing project can be very expensive if it wasn't designed with this capability in mind.
There are a few fundamental patterns that you'll want to take advantage of:

*

*MVC or Observer pattern.  The first key isn't so much the religious or pattern-zealot implementation of your high-level architecture.  What is important is that your software recognizes the difference between its current state and the displayed state, and decouples appropriately.  There needs to be a common, clearly-defined coupling between your visual state and your application state.  This provides you with the common architecture you need to create a command (see #2).

*The Command pattern.  You get a lot of quality with the command pattern (though it can come at the cost of some code that looks like it should be wizard-generated).  The specific approach you take to the command pattern may vary (one class per command with implementation via overrides versus one class per many commands with implementation via event handlers, e.g.), but commands are the "action" class that @Ralph suggested structuring a stack around.
This can be a bit tricky, but the general approach would be to listen for an event that would "commit" data from the visual state to the app state.  The Validated event might be a good hook for a Textbox.  The Click event would make more sense for a Button. When that commit happens, you create the command associated with that control, you attempt to execute the command, and you add the command to your undo stack if the command completes successfully.  Now you're tracking exactly what's happening and exactly the data it's happening with.

*The Memento pattern.  @JP Pulled out the last piece of the puzzle.  You can use a memento on the saved command to store what the affected control's state was before the command executed.  This, combined with an UnExecute() member on your command's interface, should be the last core piece of design you need to perform your task.
The nice thing about a structured approach like this is that you now have a natural extension point for additional behavior that needs to happen on a command-basis.  Transactions are a natural fit, for example.  In my current project, I'm using the WPF ICommand interface (in my winforms project) to provide feedback about whether a given command CanExecute() at any given time.  This lets me enable and disable UI widgets appropriately in a purely command-driven way.  :)
The unfortunate thing is that there isn't a lot of support for this structure built-in to Winforms (as far as I know), so you'll need to build most of it from scratch.  No single piece is particularly complicated, but you can find yourself generating a fair amount of mostly-boilerplate code for each command.  It's also a pervasive design technique.  For it to be effective, it has to be used consistently throughout the appropriate portions of the application.  This makes retrofitting the functionality pretty expensive, especially if the original code is tightly coupled and incohesive.

A: My suggestion is to determine the specific undo requirements and its practical benefits before starting the design and implementation. I inherited a WinForms app that used a multiple operation sequential undo via a stack of generic "action" objects internally. However, it turned out that none of the users of the app I spoke with use nor requested the feature! And the way this particular app works, if I was a user of the app, I just would not see myself using the feature either.
The Undo functionality could have been more useful in this case if it was a 'selective' undo; where the user could select any single operation/edit of several previous edits made, prior to data commit, and restore that single edit to its original state, instead of only being able to undo the last operation first, followed by the second to last operation, etc. which is how it was implemented.
In any case, the app thus contains unneeded complexity and indirection, making it harder and slower to 'grok' and make changes and enhancements to existing functionality, in this case for little or no real-world benefit. Since I inherited the project, I have implemented new features without undo and nobody has had any complaints.

A: You may also found the Reversi library useful, as several others seems to have. See [http://www.codeproject.com/KB/dotnet/reversibleundoredo.aspx][1] or [this][2]
[1]: http://www.codeproject.com/KB/dotnet/reversibleundoredo.aspx Make Your Application Reversible to Support Undo And Redo
[2]: http://www.codeproject.com/script/Articles/Article.aspx?aid=22502 Undo Redo

A: Depends on how many levels of undo, you wish to have.
You could store values before it is "committed" in some sense into a Form level collection for each of the controls, which you can "Restore" on click of a button for user to go back.