text:
South Slavic: July 13, 2000
13 July 2000, Volume 2, Number 26
What Do Serbs Think Of Their Country's Politics?
Omer Karabeg: In today's Radio Most (Bridge), we are going to discuss how fear and apathy, together with the obvious disappointment with the opposition leaders, affect people in Serbia. Their resistance to the regime has been decreasing in spite of the fact that repression is on the rise. Our guests are two Belgrade university professors: psychology professor Zarko Trebjesanin and social psychology professor Bora Kuzmanovic.
Mr. Trebjesanin, do you think that there is more fear in Serbia now than at the time when Milosevic came to power?
Zarko Trebjesanin: Well, I am not so sure that there is more fear now than ever before. The fear today might be compared to that aroused when tanks went into the streets on 9 March 1991. There were other situations as well when repression was extremely brutal and when many people really lived in fear. In any event, fear is obvious and widespread today.
Bora Kuzmanovic: My impression is that fear was very strong at the end of last year and earlier this year. Deputy Prime Minister [Vojislav] Seselj was then calling the opposition "traitors," saying that all possible measures should be taken against them. It seems to me that fear was very strong then but that the situation subsequently calmed down a little. Now fear has been on the rise again after the announcement of the new law against terrorism and after the threats to [the student movement] Otpor (Resistance), which the authorities have dubbed a fascist organization.
Actually, two things inspire fear. On the one hand, there are verbal accusations that the opposition is guilty of treason, that they are a fifth column, violence-prone, and pro-fascist. On the other hand, there are acts of repression such as arrests and beatings. What has actually happened is that verbal threats have turned into physical acts that have further increased fear.
Omer Karabeg: Professional thugs are on the scene now. It seems to me that by spreading fear, the regime wants to kill the will for a revolt. Do you think that Milosevic's regime has already become similar to the Stalinist type of regime?
Zarko Trebjesanin: I think that this regime is nearing its death throes. But I would not say that the repression is here like it was in the Stalinist era.
I think that what we have here is repression that is getting out of control. For instance, while the citizens were beaten up in front of the Belgrade City Assembly, some policemen tried to force their way into the building. Probably they were not told to do so. Therefore, I have the impression that repression sometimes simply gets beyond the control of those who issue orders. Of course, all those things create a very dangerous situation since repression and violence generate still more violence, and things could easily get completely out of control.
Omer Karabeg: Mr. Kuzmanovic, do you think that Milosevic's regime is becoming similar to Stalinism?
Bora Kuzmanovic: This is a repressive, authoritarian regime, but I would not know whether to say it is Stalinist or not. I would rather call it a mixture of different types of regimes, older than Stalinism, like, for instance, the South American and Asiatic [authoritarian] types.
I do agree that they resort to repression because that is their final recourse. However, I think that they use repression as a temporary measure, hoping that they will eventually find a better way to stay in power.
Together with the spread of fear, they use propaganda about our country's successful recovery after the NATO bombing, as well as about the allegedly important international role of the Serbian regime. They claim that this regime opposes those who wield power in the world, the new world order, etc.
I have the impression that they are preparing themselves for elections and therefore count on fear to intimidate a part of the voters. Another part of the voters is to be won over by so-called positive propaganda, but I don't think it will work.
I think that what we have here are two sorts of fear. One is the citizens' fear of the regime. The other is the regime's fear of the opposition and the citizens. The point is that the regime has the stronger means to turn its fear into a force for its own self-defense.
Omer Karabeg: Do you think, Mr. Kuzmanovic, that the law against terrorism will serve to legalize repression?
Bora Kuzmanovic: I do believe so. There is some talk that prosecutors will have sweeping authority, that preventive arrests will be allowed without a special warrant--which is against not only some existing laws but the constitution as well. It thus will be not a law aimed at suppressing terrorism but will serve as an excuse for institutionalized state repression against its own citizens.
Omer Karabeg: Mr. Trebjesanin, do you think that the law against terrorism will lead to a rise in fear because it will make repressive measures legal?
Zarko Trebjesanin: I think that the regime has nearly achieved its goal, since not only is fear spreading among the people, but there is also an anxiety that is even more dangerous than fear. The point is that fear is oriented towards something concrete or something that can be identified, while anxiety is a more vaguely-based fear of something that has not yet become concrete but is seen as terrifying. We already have one foot in an Orwellian system, and when the law comes into effect we will be there with both feet.
Anxiety makes us imagine what sorts of repressive measures might be introduced with that law. It is, therefore, understandable that some people have started leaving public life. Being in politics has been a dangerous profession, and now it is becoming life-threatening.
I think that the law will also help spread apathy and make people withdraw into themselves. They will accept the philosophy that everybody should cultivate his own garden instead of thinking about the public interest.
Omer Karabeg: It seems to me that, at this moment, only a part of the most militant students, members of the Otpor movement, are fearless. Apart from some rare exceptions, their professors have not joined them. Are professors of your Faculty of Philosophy frightened, Mr. Kuzmanovic?
Bora Kuzmanovic: I must say that, among the professors of the Faculty of Philosophy, there are many who are afraid of possible repression. Older people still remember times of repression and fear that this time might be even worse.
The fact is that many professors did give up and sign their contracts when the university law came into effect, [even though that legislation ended academic autonomy and subordinated the university to politics.] Many professors did not join Otpor although some do support it. I must say nonetheless that there is quite a strong group in the Faculty of Philosophy who are ready to oppose the regime.
Zarko Trebjesanin: I do not think that you are right, Mr. Karabeg, when you say that members of Otpor are fearless. I am a member of Otpor but I am afraid, too. Therefore, the point is not whether one is afraid or not. Fear is a universal feeling, we all fear. It would not be normal not to be afraid. The point is whether we are going to be overwhelmed by fear, which would make us unable to oppose violence.
The question is whether or not we are going to let fear paralyze our activities and make us forget about moral standards. I believe that there are still enough people who are not going to be overwhelmed by fear and who will not violate basic moral standards and human values.
But people here do not believe that they can achieve a lot by opposing repression. They are disappointed with the opposition leaders. People feel that they have been somehow deceived and abandoned. The best metaphor for this situation is--according to some--the scene with the leaders of the opposition well protected in the City Assembly building, drinking whiskey while the police were beating the citizens in front of that building. People are not ready to endure beatings and expose themselves to brutal repression when they do not know what their leaders are up to and whether sacrifice would serve a good cause.
Omer Karabeg: You think that apathy, as a consequence of the disappointment with the opposition leaders, might be a stronger force for giving up the fight than fear--because people can simply see that the opposition leaders are getting rich and have a good life, together with their closest collaborators and advisors?
Zarko Trebjesanin: People do not see [their leaders as having] a clear strategy, they cannot understand what the opposition leaders really want.... The citizens are completely disoriented and confused. One should not expect them to try to overcome their own fear without being certain what will come out of it, whether it will make a difference at all.
Bora Kuzmanovic: I think that apathy is a more important reason than fear for the passivity of the citizens. Apathy is, to put it simply, discontent mixed with feelings of helplessness and of distrust toward the present opposition leaders.
I think that there is one more thing involved, and that is that the well-known forms of protest and expressing discontent have run their course. There were several efforts [this year] aimed at restoring old forms of protest such as street demonstrations and street walks, but people remember that they led to nothing. Everybody is waiting for a new form to emerge, but the citizens do not know what it might be. Nor do the opposition leaders know what to offer people.


text:
Q: Deletion of a list in python with and without ':' operator I've been working with python for quite a bit of time and I'm confused regarding few issues in the areas of Garbage Collection, memory management as well as the real deal with the deletion of the variables and freeing memory.
>>> pop = range(1000)
>>> p = pop[100:700]
>>> del pop[:]
>>> pop
[]
>>> p
[100.. ,200.. 300...699]

In the above piece of code, this happens. But,
>>> pop = range(1000)
>>> k = pop
>>> del pop[:]
>>> pop
[]
>>> k
[]

Here in the 2nd case, it implies that the k is just pointing the list 'pop'.
First Part of the question :
But, what's happening in the 1st code block? Is the memory containing [100:700] elements not getting deleted or is it duplicated when list 'p' is created?
Second Part of the question :
Also, I've tried including gc.enable and gc.collect statements in between wherever possible but there's no change in the memory utilization in both the codes. This is kind of puzzling. Isn't this bad that python is not returning free memory back to OS? Correct me if I'm wrong  in the little research I've did. Thanks in advance.

A: Slicing a sequence results in a new sequence, with a shallow copy of the appropriate elements.
Returning the memory to the OS might be bad, since the script may turn around and create new objects, at which point Python would have to request the memory from the OS again.

A: 1st part:
In the 1st code block, you create a new object where the elements of the old one are copied before deleting that one.
In the 2nd code block, however, you just assign a reference to the same object to another variable. Then you empty the list, which, of course, is visible via both references.
2nd part: Memory is returned when appropriate, but not always. Under the hood of Python, there is a memory allocator which has control over where the memory comes from. There are 2 ways: via the brk()/sbrk() mechanism (for smaller memory blocks) and via mmap() (larger blocks).
Here we have rather smaller blocks which get allocated directly at the end of the data segment:
datadatadata object1object1 object2object2

If we only free object1, we have a memory gap which can be reused for the next object, but cannot easily freed and returned to the OS.
If we free both objects, memory could be returned. But there probably is a threshold for keeping memory back for a while, because returning everything immediately is not the very best thing.

redpajama_set_name: RedPajamaStackExchange


This is definitely a destructive teardown. Hopefully it will help to show how the adapter was put together. Also that it does have a DAC on the adapter, not the lightning connector on the idevice.
Again, nice packaging for the adapter.
The total length of the adapter is 3 1/8 inches or 8cm. One side with the lightning connector and the other end is the 3.5mm headphone jack.
Checked to see if there was any way to remove the outside of the adapter by slipping some thin tools in between. No way on that.
This is the business end that requires the removal of the covering.
The only way to do that is by cutting into it. Using a good scalpel does cut it with relative ease.
Careful while using a sharp instrument, not much room to hold onto the connector.
Then flipping the two halves that were created by the cuts.
This makes for an easy removal.
The next thing to be removed is the ground shield.
Using a pair of small side cutters that shield is easily removed as well.
and rolling it around the connector.
The connector is now left with another plastic covering.
Luckily the removal of the ground shield seems to have open slots lengthwise in the plastic covering.
Using these slots, the plastic needs to be carefully pulled away from the circuit board.
Here is the business end with the cover removed.
Close-up of the circuit board shows Apple's fascination with adhesive and other sticky substances. Both sides of the circuit board are covered with it.
as well as the other. As more information becomes available about the DAC this teardown will be edited to reflect those.
Carefully slice down the headphone jack connector with a sharp knife, being careful to not cut yourself.
The device is clearly not meant to be opened or repaired in any way.
It is impossible to open the adapter without destroying it.
Perhaps it supports both standard pinout methods for mics/remotes, rather than just Apples flipped data/ground pin standard?
I am currently looking into modyfying an Apple TRRS connector so I can take some readings on what is what and how it may function. Only hold-up is that I do work for a living:-) so time is always an issue.
Mac 128 mystery already solved. Check this teardown by Mason Dowell Apple Earphones with Remote and Mic (Lightning Edition) Teardown. It'll explain what each wire does.


Nectarine Travels: Mallorca Day 2: Illetes, mistranslations and pelican-cocktails!
Mallorca Day 2: Illetes, mistranslations and pelican-cocktails!
Today was the day for ILLETES :) Tell you about Illetes? Ok.
We discovered it sort of accidentally last time, as it was at the other terminus of our bus route (NOT Pont D'Inca, see previous entry...). So, since we are a wealthy professional couple... Wait no.
After an amazing morning swim in the hostel pool and a scrumptious breakfast, we took the bus number 3 to Illetes. I do want to say that if Illetes is "largely undiscovered by package tourists" I dread to think what beaches that have been discovered by package tourists look like... It felt that every inch of the beach was covered.
So, quick question time now. Do you think touristy places like Mallorca have crazy humongous ridiculous mistakes in their English menus on purpose? Sometimes it just seems so hard to believe that so many English-speaking tourists go through these cafés and yet the English in their menus is... questionable!?
Let me give you a few examples from the menu from the café at Illetes beach that literally never fail to make us giggle when we see them.
Example Dos. My personal favourite. Frozen glass of Nuts, anyone? (Upgrade to frozen bowl for 50 cents, frozen plate for a euro... OR EVEN buy your own cooler bag for an extra 5 euros so you can enjoy your Frozen glass of Nuts wherever you want...) In all seriousness, I understand this one too - hazelnut-flavoured ice cream is probably what a more native speaker would say. But 'glass' is similar to at least the Swedish word for ice cream ('en glass')... Ok, understandable.
It is fair to say we had a highly amused time queueing up for our Frappé and our, hrm, Handle Smoothie (the other languages on the menu informed us that 'Handle' is the English word for 'Mango').
Fair enough, well done Illetes-beach café for having four different languages on your menus. And don't get me wrong, I am NOT complaining. It's all the holiday experience, and I'm sure we gained at least a few minutes of life time from laughing at your menu... And the Handle Smoothie was AMAZING, like, it was clearly not tinned Handle or anything, but proper fresh Handle made into a freshly-made, summery Handle Smoothie. OM NOM.
ANYHOW. New topic. Five years ago we discovered 'The Island'. An island with a tower on it, which H-le tried bravely wading/swimming to (it's not even that deep). However, the current of April 2009 was very strong and quite dangerous, so even courageous H-le gave up. But, one day we will... we decided.
One day was today. For H-le. We even considered the idea of trying to take our stuff to the island by wading the whole trip. We watched some guys do it – it looked precarious, but they managed... H-le decided she was up for the challenge. With her kiwi-bag (Christmas present from me:)) on her head like a talented exotic woman, she joined The Island Queue (consisting completely of fit-looking young men, so we were very proud of our female addition <3) and made her way through the jagged rocks to The Island. Hurray!
H and I decided we preferred just dressing up in the various multi-coloured clothes we had taken with us and take photos. H-le returned, so now we just needed the kiwi bag back from The Island shore. H-le swam back, and managed to successfully ask one of them young fit lads (or well, man) to bring the bag back to us (while she disappeared off to check out the tower, recommended by him, apparently twas very cool!!). He broke his flip-flop on the way. :( But what a hero!
Our evening meal was most probably "lunch" in Spanish, since we had it at about half past five. (If my Spanish housemate was anything to go by, breakfast was at 1pm, lunch at 6pm and dinner at midnightish...) We stopped at a nearby café which offered meals for under ten euros, and our choice of food hole was confirmed to be excellent when the café owner turned out to be a ridiculously adorable elderly man called Tito who keenly practised his limited English with us. His adorableness points rose even higher after he poured an entire glass of wine on me, apologised cutely and brought us a packet of M&M's as compensation.
INCREDIBLE. That was H's drink, topping all other drinks we had taste- and appearance- and accessorywise! H-le's was a good second with a massively long straw, so long that if you wanted to drink from it you had to be stood up.
And that was Day 2! All in all a perfect day.
Tackar Hannasein :) Best day ever!!
Well, after commenting on day 1 that you would not be a food-blogger, most of this one seemed to be about food and drink in one way or another! Do you serve You Happen and Scum together? And I'll make sure I visit Tito next time I'm passing by.
Raisins and cream! Maybe served in a frozen glass of nuts!


text:
import os
import shutil
import yaml

from collections import namedtuple
from urlparse import urlparse

import deploy_types

from config_files import ConfigFiles
from utils import cmd, create_venv_paths, listdir_abs, log, rmtree_if_exists

class Workspace(object):
    """
    Keeps track of the various file paths in the workspace and downloads the
    source from github.
    """

    debug = False
    _cmd = lambda self, *args, **kwargs: cmd(*args, debug=self.debug, **kwargs)

    def __init__(self, workspace_id, workspace_base, install_location, repo):
        self.install_location = install_location
        self.repo = repo

        self._init_paths(workspace_id, workspace_base, install_location)

    def _init_paths(self, workspace_id, workspace_base, install_location):
        """ Initialise the paths to various directories in the workspace. """
        self._dir = os.path.abspath(os.path.join(workspace_base, workspace_id))

        package_path = os.path.join(self._dir, 'package')
        dirs = {
            'repo': os.path.join(self._dir, self.repo.name),
            'build': os.path.join(self._dir, 'build'),
            'package': package_path,
            'install': os.path.join(package_path,
                                    install_location.lstrip('/'))
        }
        self._dirs = namedtuple('WorkspaceDirs', dirs.keys())(**dirs)

    def set_up(self):
        """
        Create the workspace and fetch the repo.
        """
        self.create_clean_workspace()
        self.fetch_repo()

    def create_clean_workspace(self):
        """
        Create the workspace directory if it doesn't exist or clean it out.
        """
        if os.path.exists(self._dir):
            self.clean_workspace()
        else:
            os.makedirs(self._dir)

    def clean_workspace(self):
        """ Clean up the workspace directory (but not the virtualenv). """
        for path in self._dirs:
            rmtree_if_exists(path)

    def fetch_repo(self):
        """ Clone the repo and checkout the desired branch. """
        log('Fetching github repo')
        self._cmd(['git', 'clone', self.repo.url, self._dirs.repo])
        self._cmd(['git', '-C', self._dirs.repo, 'checkout', self.repo.branch])

    def load_deploy(self, deploy_file='.deploy.yaml'):
        """
        Load the .deploy.yaml file in the repo or fallback to the default
        settings if one could not be found. Merge any overrides.
        """
        if not os.path.exists(self._dirs.repo):
            log('WARNING: Repo directory not found. Has it been fetched yet?')

        deploy_file_path = self.get_repo_path(deploy_file)
        if os.path.exists(deploy_file_path):
            return Deploy.from_deploy_file(deploy_file_path)
        else:
            log('No deploy file found, continuing with defaults')
            return Deploy()

    def make_build_dir(self):
        """
        Create the build directory (the workspace directory should already
        exist).
        """
        os.mkdir(self._dirs.build)

    def make_package_dir(self):
        """
        Create the package directory (the workspace directory should already
        exist).
        """
        os.mkdir(self._dirs.package)

    def make_install_dir(self):
        """
        Create the install directory (the package directory should already
        exist).
        """
        package_relpath = os.path.relpath(self._dirs.install,
                                          self._dirs.package)
        parts = package_relpath.split(os.sep)
        subpath = self._dirs.package
        for part in parts:
            subpath = os.path.join(subpath, part)
            os.mkdir(subpath)

    def get_path(self, *paths):
        """ Get a path within the workspace directory. """
        return os.path.join(self._dir, *paths)

    def get_package_path(self, *paths):
        """ Get a path within the package directory. """
        return os.path.join(self._dirs.package, *paths)

    def get_build_path(self, *paths):
        """ Get a path within the build directory. """
        return os.path.join(self._dirs.build, *paths)

    def get_repo_path(self, *paths):
        """ Get a path within the repo directory. """
        return os.path.join(self._dirs.repo, *paths)

    def get_install_path(self, *paths):
        """ Get a path within the install directory. """
        return os.path.join(self._dirs.install, *paths)

class Build(object):

    debug = False
    _cmd = lambda self, *args, **kwargs: cmd(*args, debug=self.debug, **kwargs)

    def __init__(self, workspace, deploy, deploy_type):
        """
        :param: workspace:
        The workspace to build in.

        :param: deploy:
        The definition of the deployment as loaded from the project's deploy
        file.

        :param: deploy_type:
        The deploy type object describing the type of the deploy.
        """
        self.workspace = workspace
        self.deploy = deploy
        self.deploy_type = deploy_type

        self.venv_paths = create_venv_paths(workspace.get_path())

    def build(self):
        """
        Build the workspace. Gets everything into a state that is ready for
        packaging.
        """
        self.prepare_environment()
        self.run_buildscript()
        self.copy_files()
        self.freeze_virtualenv()
        self.create_postinstall_script()

    def prepare_environment(self):
        """
        Prepare the workspace so that everything is ready to run the
        buildscript including the virtualenv, build directory, and environment
        variables.
        """
        self.create_build_virtualenv()
        self.workspace.make_build_dir()
        self.put_env_variables()

    def create_build_virtualenv(self):
        """ Create a virtualenv for the build and install the dependencies. """
        log('Creating virtualenv')

        # Create clean virtualenv
        if not os.path.exists(self.venv_paths.python):
            self._cmd(['virtualenv', self.venv_paths.venv])

        log('Upgrading pip')
        self._cmd([self.venv_paths.pip, 'install', '--upgrade', 'pip'])

        log('Installing pip dependencies')
        # Install things
        for dep in self.deploy.pip:
            log('Installing %s' % (dep))
            self._cmd([self.venv_paths.pip, 'install', '--upgrade', dep])

    def put_env_variables(self):
        """ Initialises the current working environment. """
        env = {
            'VENV': self.venv_paths.venv,
            'PIP': self.venv_paths.pip,
            'REPO': self.workspace.repo.name,
            'BRANCH': self.workspace.repo.branch,
            'WORKSPACE': self.workspace.get_path(),
            'BUILDDIR': self.workspace.get_build_path(),
            'INSTALLDIR': self.workspace.get_install_path(),
            'NAME': self.deploy.name,
            'PATH': ':'.join([self.venv_paths.bin, os.getenv('PATH')])
        }
        for k, v in env.items():
            os.environ[k] = v

    def run_buildscript(self):
        """
        Run the buildscript for the project if one has been specified.
        """
        if not self.deploy.buildscript:
            return

        buildscript_path = self.workspace.get_repo_path(
            self.deploy.buildscript)
        self._cmd(['chmod', 'a+x', buildscript_path])

        # Push package directory before running build script
        old_cwd = os.getcwd()
        os.chdir(self.workspace.get_path())

        self._cmd([buildscript_path])

        # Pop directory
        os.chdir(old_cwd)

    def copy_files(self):
        """ Copy the build and nginx/supervisor config files. """
        log('Preparing package')
        self.workspace.make_package_dir()

        self.copy_build()
        self.copy_config_files()

    def copy_build(self):
        """ Copy build contents to install location. """
        self.workspace.make_install_dir()

        for directory in os.listdir(self.workspace.get_build_path()):
            shutil.copytree(self.workspace.get_build_path(directory),
                            self.workspace.get_install_path(directory))

    def copy_config_files(self):
        """
        Copy the config files specified in the deploy over to the relevant
        config directory within the package.
        """
        for config_files in self.deploy.config_files:
            config_dir_path = self.workspace.get_package_path(
                config_files.config_dir_path)
            os.makedirs(config_dir_path)

            for config_file in config_files.files:
                shutil.copy(self.workspace.get_build_path(config_file),
                            config_dir_path)

    def freeze_virtualenv(self):
        """ Freeze post build requirements. """
        freeze_output = self._cmd([self.venv_paths.pip, 'freeze'])

        requirements_path = self.workspace.get_install_path(
            '%s-requirements.pip' % self.deploy.name)
        with open(requirements_path, 'w') as requirements_file:
            requirements_file.write(freeze_output)

    def create_postinstall_script(self):
        """ Generate the postinstall script and write it to disk. """
        content = self.generate_postinstall_script()
        if self.debug:
            log(content)

        self.write_postinstall_script(content)

    def generate_postinstall_script(self):
        """ Generate the contents of the postinstall script. """
        log('Constructing postinstall script')

        # Insert some scripting before the user's script to set up...
        set_up = self.deploy_type.get_set_up_script(
            self.workspace, self.deploy)

        # ...and afterwards to tear down.
        tear_down = self.deploy_type.get_tear_down_script()

        user_postinstall = ''
        if self.deploy.postinstall:
            user_postinstall = self.read_postinstall_file()

        return """#!/bin/bash

{set_up}

INSTALLDIR={installdir}
REPO={repo}
BRANCH={branch}
NAME={name}

{user_postinstall}

{tear_down}
""".format(
            set_up=set_up,
            tear_down=tear_down,
            installdir=self.workspace.get_install_path(),
            repo=self.workspace.repo.name,
            branch=self.workspace.repo.branch,
            name=self.deploy.name,
            user_postinstall=user_postinstall)

    def read_postinstall_file(self):
        """ Read the user's postinstall file. """
        postinstall_path = self.workspace.get_repo_path(
            self.deploy.postinstall)
        with open(postinstall_path) as postinstall_file:
            return postinstall_file.read()

    def write_postinstall_script(self, content):
        """ Write the final postinstall script. """
        postinstall_path = self.workspace.get_path('postinstall.sh')
        with open(postinstall_path, 'w') as postinstall_file:
            postinstall_file.write(content)
        os.chmod(postinstall_path, 0755)

class Package(object):

    debug = False
    sign = True
    _cmd = lambda self, *args, **kwargs: cmd(*args, debug=self.debug, **kwargs)

    def __init__(self, workspace, deploy, deploy_type, target='deb',
                 gpg_key=None):
        self.workspace = workspace
        self.deploy = deploy
        self.deploy_type = deploy_type
        self.target = target
        self.gpg_key = gpg_key

    def package(self):
        self.run_fpm()
        self.sign_debs()

    def run_fpm(self):
        """ Run the fpm command that builds the package. """
        log('Building .%s package' % self.target)

        fpm = [
            'fpm',
            '-C', self.workspace.get_package_path(),
            '-p', self.workspace.get_package_path(),
            '-s', self.deploy_type.fpm_deploy_type,
            '-t', self.target,
            '-a', 'amd64',
            '-n', self.deploy.name,
            '--after-install', self.workspace.get_path('postinstall.sh'),
        ]

        if not self.deploy_type.provides_version:
            fpm += ['-v', self.deploy.version]

        fpm += sum([['-d', dep] for dep in self.list_all_dependencies()], [])

        if self.deploy.user:
            fpm += ['--%s-user' % self.target, self.deploy.user]

        if self.debug:
            fpm.append('--debug')

        fpm += self.deploy_type.get_fpm_args(self.workspace._dirs)

        self._cmd(fpm)

        log('Build completed successfully')

    def list_all_dependencies(self):
        """ Get a list of all the package dependencies. """
        deps = []
        # Dependencies defined in the deploy file
        deps += self.deploy.dependencies

        # Dependencies from the deployment type
        deps += self.deploy_type.dependencies

        # Dependencies from the config files
        for config_files in self.deploy.config_files:
            deps += config_files.dependencies

        return deps

    def sign_debs(self):
        """ Sign the .deb file with the configured gpg key. """
        if self.gpg_key is None:
            log('No GPG key configured, skipping signing')
            return
        log('Signing package')
        # Find all the .debs in the directory and indiscriminately sign them
        # (there should only be 1)
        # TODO: Get the actual package name from fpm
        debs = [path for path in listdir_abs(self.workspace.get_package_path())
                if os.path.splitext(path)[1] == '.deb']
        for deb in debs:
            self._cmd(
                ['dpkg-sig', '-k', self.gpg_key, '--sign', 'builder', deb])

class Sideloader(object):

    def __init__(self, config_path, github_url, branch=None, workspace_id=None,
                 debug=False):
        self.config = Config.from_config_file(config_path)
        self.repo = self._create_git_repo(github_url, branch)
        self.workspace_id = (workspace_id if workspace_id is not None
                             else self.repo.name)
        self.debug = debug

    def _create_git_repo(self, github_url, branch):
        branch = branch if branch is not None else self.config.default_branch
        return GitRepo.from_github_url(github_url, branch)

    def run(self, deploy_file='.deploy.yaml', dtype='virtualenv', target='deb',
            build_num=None, sign=True, **deploy_overrides):
        workspace = self._create_workspace()
        workspace.set_up()

        deploy = self._load_deploy(workspace, deploy_file, build_num,
                                   **deploy_overrides)
        deploy_type = self._get_deploy_type(dtype)

        build = self._create_build(workspace, deploy, deploy_type)
        build.build()

        package = self._create_package(workspace, deploy, deploy_type, target,
                                       sign)
        package.package()

    def _create_workspace(self):
        workspace = Workspace(self.workspace_id, self.config.workspace_base,
                              self.config.install_location, self.repo)
        workspace.debug = self.debug
        return workspace

    def _load_deploy(self, workspace, deploy_file, build_num,
                     **deploy_overrides):
        if 'version' not in deploy_overrides:
            if build_num is None:
                build_num = 1
            deploy_overrides['version'] = '0.%s' % build_num

        deploy = workspace.load_deploy(deploy_file)
        deploy = deploy.override(**deploy_overrides)
        return deploy

    def _get_deploy_type(self, deploy_type_str):
        if deploy_type_str == 'python':
            return deploy_types.Python()
        elif deploy_type_str == 'virtualenv':
            return deploy_types.VirtualEnv()

        return deploy_types.DeployType()

    def _create_build(self, workspace, deploy, deploy_type):
        build = Build(workspace, deploy, deploy_type)
        build.debug = self.debug

        return build

    def _create_package(self, workspace, deploy, deploy_type, target, sign):
        package = Package(workspace, deploy, deploy_type, target,
                          self.config.gpg_key)
        package.sign = sign
        package.debug = self.debug

        return package

class Config(object):
    """
    Container class for Sideloader config, typically loaded from 'config.yaml'.
    """
    def __init__(self, install_location, default_branch, workspace_base,
                 gpg_key):
        self.install_location = install_location
        self.default_branch = default_branch
        self.workspace_base = workspace_base
        self.gpg_key = gpg_key

    @classmethod
    def from_config_file(cls, config_file_path):
        with open(config_file_path) as config_file:
            config_yaml = yaml.load(config_file)

        return Config(
            config_yaml['install_location'],
            config_yaml.get('default_branch', 'develop'),
            config_yaml.get('workspace_base', '/workspace'),
            config_yaml.get('gpg_key')
        )

class GitRepo(object):
    def __init__(self, url, branch, name):
        self.url = url
        self.branch = branch
        self.name = name

    @classmethod
    def from_github_url(cls, github_url, branch):
        parse_result = urlparse(github_url)
        path_segments = parse_result.path.strip('/').split('/')

        name = path_segments[1].rstrip('.git')

        return GitRepo(github_url, branch, name)

class Deploy(object):
    def __init__(self, name=None, buildscript=None, postinstall=None,
                 config_files=[], pip=[], dependencies=[],
                 virtualenv_prefix=None, allow_broken_build=False, user=None,
                 version=None):
        """
        Container class for deploy prefernces, typically loaded from the
        project's '.deploy.yaml' file.
        """
        self.name = name
        self.buildscript = buildscript
        self.postinstall = postinstall
        self.config_files = config_files
        self.pip = pip
        self.dependencies = dependencies
        self.virtualenv_prefix = virtualenv_prefix
        self.allow_broken_build = allow_broken_build
        self.user = user
        self.version = version

    @classmethod
    def from_deploy_file(cls, deploy_file_path):
        with open(deploy_file_path) as deploy_file:
            deploy_yaml = yaml.load(deploy_file)

        config_files = []
        nginx_files = deploy_yaml.get('nginx')
        if nginx_files:
            config_files.append(ConfigFiles.nginx(nginx_files))

        supervisor_files = deploy_yaml.get('supervisor')
        if supervisor_files:
            config_files.append(ConfigFiles.supervisor(supervisor_files))

        return Deploy(
            deploy_yaml.get('name'),
            deploy_yaml.get('buildscript'),
            deploy_yaml.get('postinstall'),
            config_files,
            deploy_yaml.get('pip', []),
            deploy_yaml.get('dependencies'),
            deploy_yaml.get('virtualenv_prefix'),
            deploy_yaml.get('allow_broken_build', False),
            deploy_yaml.get('user'),
            deploy_yaml.get('version')
        )

    def override(self, **overrides):
        """
        Override attributes in this Deploy instance and return a new instance
        with the values given. Overrides with a None value will be ignored.
        """
        attrs = ['name', 'buildscript', 'postinstall', 'config_files', 'pip',
                 'dependencies', 'virtualenv_prefix', 'allow_broken_build',
                 'user', 'version']
        for override in overrides.keys():
            if override not in attrs:
                raise ValueError('Deploy has no attribute \'%s\'' % override)
        kwargs = {}
        for attr in attrs:
            kwargs[attr] = getattr(self, attr)
            if attr in overrides:
                value = overrides[attr]
                if value is not None:
                    kwargs[attr] = value

        return Deploy(**kwargs)

redpajama_set_name: RedPajamaGithub


27/9/2016- A mere week after his arrest for desecrating the grave of Sir Rigel Rinkenbach, Lord Rodahn Despartes, son of Duchess Amelie of Amaranth, has vanished from custody. The young Lord was being held in the cells below the Imperial Palace.
Duchess Amelie isn't buying that story.
Duchess Amelie didn't expand on her statement, though we are sure it was made in a moment of grief and suffering.
Despite the brief amount of time that has passed, several theories have already cropped up as to Lord Despartes fate. They range from the banal (and most likely), such as the boy was killed in custody and Empress Bastian is trying to cover it up, to the outlandish (and ever more interesting) that the entire affair is a ruse concocted by the Subterfuge Society to help bring an increasingly unruly Amaranth to heel.
The story gets stranger, however, as several witnesses are said to have seen a young man matching Lord Despartes description being placed into an unmarked carriage in the small hours, accompanied by four men in black uniforms bereft of any insignia or rank. One might be quick to dismiss this rumor as the machinations of night walkers seeking attention. However, a single dockworker is said to have seen a similar carriage approach the river bank just before dawn.
According to this dock worker, a woman briefly entered the carriage. Muffled shouts followed afterward. The woman then exited the carriage and spoke to the driver and several others before leaving. A moment later, the men pulled a limp body from the carriage and placed it in a motor boat that headed east down the river, toward the Sea of Wrecked Beginnings and Bitter Ends. The dock worker did not field questions on whether he thought the unconscious man was Lord Despartes, and refused to discuss the matter further once the name was mentioned. I can't say I blame the man, given the nature of such events.
A few weeks ago, I posted the beginnings of an illustration I planned to use in a trailer for a novel. Well, I've been hard at work and thought I'd share how it's coming along!
I know that it's taken a while, but I lost about a week's worth of work when I decided I wasn't happy with the initial line drawing and tossed it. I'm still finding little things to obsess over (I spent most of yesterday completely re-doing the window in the back ground and just this morning I changed the position of her right arm and some of the detail on the vest). I'm hoping that now that I have a workflow locked down and a firmer concept in my mind of what I want the art work in the trailer to look like, the other images will come much more quickly.
And I just noticed I haven't shaded the cuff of her left sleeve. Wonderful.
Hope to have more soon!


text:
package com.squareup.javapoet;

import java.io.IOException;
import java.io.StringWriter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.Modifier;

import static com.squareup.javapoet.Util.checkArgument;
import static com.squareup.javapoet.Util.checkNotNull;
import static com.squareup.javapoet.Util.checkState;

/** A generated class, interface, or enum declaration. */
public final class TypeSpec {
  public final Kind kind;
  public final String name;
  public final CodeBlock anonymousTypeArguments;
  public final CodeBlock javadoc;
  public final List<AnnotationSpec> annotations;
  public final Set<Modifier> modifiers;
  public final List<TypeVariableName> typeVariables;
  public final TypeName superclass;
  public final List<TypeName> superinterfaces;
  public final Map<String, TypeSpec> enumConstants;
  public final List<FieldSpec> fieldSpecs;
  public final List<MethodSpec> methodSpecs;
  public final List<TypeSpec> typeSpecs;
  public final List<Element> originatingElements;

  private TypeSpec(Builder builder) {
    this.kind = builder.kind;
    this.name = builder.name;
    this.anonymousTypeArguments = builder.anonymousTypeArguments;
    this.javadoc = builder.javadoc.build();
    this.annotations = Util.immutableList(builder.annotations);
    this.modifiers = Util.immutableSet(builder.modifiers);
    this.typeVariables = Util.immutableList(builder.typeVariables);
    this.superclass = builder.superclass;
    this.superinterfaces = Util.immutableList(builder.superinterfaces);
    this.enumConstants = Util.immutableMap(builder.enumConstants);
    this.fieldSpecs = Util.immutableList(builder.fieldSpecs);
    this.methodSpecs = Util.immutableList(builder.methodSpecs);
    this.typeSpecs = Util.immutableList(builder.typeSpecs);

    List<Element> originatingElementsMutable = new ArrayList<>();
    originatingElementsMutable.addAll(builder.originatingElements);
    for (TypeSpec typeSpec : builder.typeSpecs) {
      originatingElementsMutable.addAll(typeSpec.originatingElements);
    }
    this.originatingElements = Util.immutableList(originatingElementsMutable);
  }

  public boolean hasModifier(Modifier modifier) {
    return modifiers.contains(modifier);
  }

  public static Builder classBuilder(String name) {
    return new Builder(Kind.CLASS, checkNotNull(name, "name == null"), null);
  }

  public static Builder interfaceBuilder(String name) {
    return new Builder(Kind.INTERFACE, checkNotNull(name, "name == null"), null);
  }

  public static Builder enumBuilder(String name) {
    return new Builder(Kind.ENUM, checkNotNull(name, "name == null"), null);
  }

  public static Builder anonymousClassBuilder(String typeArgumentsFormat, Object... args) {
    return new Builder(Kind.CLASS, null, CodeBlock.builder()
        .add(typeArgumentsFormat, args)
        .build());
  }

  void emit(CodeWriter codeWriter, String enumName, Set<Modifier> implicitModifiers)
      throws IOException {
    // Nested classes interrupt wrapped line indentation. Stash the current wrapping state and put
    // it back afterwards when this type is complete.
    int previousStatementLine = codeWriter.statementLine;
    codeWriter.statementLine = -1;

    try {
      if (enumName != null) {
        codeWriter.emit("$L", enumName);
        if (!anonymousTypeArguments.formatParts.isEmpty()) {
          codeWriter.emit("(");
          codeWriter.emit(anonymousTypeArguments);
          codeWriter.emit(")");
        }
        if (fieldSpecs.isEmpty() && methodSpecs.isEmpty() && typeSpecs.isEmpty()) {
          return; // Avoid unnecessary braces "{}".
        }
        codeWriter.emit(" {\n");
      } else if (anonymousTypeArguments != null) {
        TypeName supertype = !superinterfaces.isEmpty() ? superinterfaces.get(0) : superclass;
        codeWriter.emit("new $T(", supertype);
        codeWriter.emit(anonymousTypeArguments);
        codeWriter.emit(") {\n");
      } else {
        codeWriter.emitJavadoc(javadoc);
        codeWriter.emitAnnotations(annotations, false);
        codeWriter.emitModifiers(modifiers, Util.union(implicitModifiers, kind.asMemberModifiers));
        codeWriter.emit("$L $L", kind.name().toLowerCase(Locale.US), name);
        codeWriter.emitTypeVariables(typeVariables);

        List<TypeName> extendsTypes;
        List<TypeName> implementsTypes;
        if (kind == Kind.INTERFACE) {
          extendsTypes = superinterfaces;
          implementsTypes = Collections.emptyList();
        } else {
          extendsTypes = superclass.equals(ClassName.OBJECT)
              ? Collections.<TypeName>emptyList()
              : Collections.singletonList(superclass);
          implementsTypes = superinterfaces;
        }

        if (!extendsTypes.isEmpty()) {
          codeWriter.emit(" extends");
          boolean firstType = true;
          for (TypeName type : extendsTypes) {
            if (!firstType) codeWriter.emit(",");
            codeWriter.emit(" $T", type);
            firstType = false;
          }
        }

        if (!implementsTypes.isEmpty()) {
          codeWriter.emit(" implements");
          boolean firstType = true;
          for (TypeName type : implementsTypes) {
            if (!firstType) codeWriter.emit(",");
            codeWriter.emit(" $T", type);
            firstType = false;
          }
        }

        codeWriter.emit(" {\n");
      }

      codeWriter.pushType(this);
      codeWriter.indent();
      boolean firstMember = true;
      for (Iterator<Map.Entry<String, TypeSpec>> i = enumConstants.entrySet().iterator();
          i.hasNext();) {
        Map.Entry<String, TypeSpec> enumConstant = i.next();
        if (!firstMember) codeWriter.emit("\n");
        enumConstant.getValue()
            .emit(codeWriter, enumConstant.getKey(), Collections.<Modifier>emptySet());
        firstMember = false;
        if (i.hasNext()) {
          codeWriter.emit(",\n");
        } else if (!fieldSpecs.isEmpty() || !methodSpecs.isEmpty() || !typeSpecs.isEmpty()) {
          codeWriter.emit(";\n");
        } else {
          codeWriter.emit("\n");
        }
      }

      // Static fields.
      for (FieldSpec fieldSpec : fieldSpecs) {
        if (!fieldSpec.hasModifier(Modifier.STATIC)) continue;
        if (!firstMember) codeWriter.emit("\n");
        fieldSpec.emit(codeWriter, kind.implicitFieldModifiers);
        firstMember = false;
      }

      // Non-static fields.
      for (FieldSpec fieldSpec : fieldSpecs) {
        if (fieldSpec.hasModifier(Modifier.STATIC)) continue;
        if (!firstMember) codeWriter.emit("\n");
        fieldSpec.emit(codeWriter, kind.implicitFieldModifiers);
        firstMember = false;
      }

      // Constructors.
      for (MethodSpec methodSpec : methodSpecs) {
        if (!methodSpec.isConstructor()) continue;
        if (!firstMember) codeWriter.emit("\n");
        methodSpec.emit(codeWriter, name, kind.implicitMethodModifiers);
        firstMember = false;
      }

      // Methods (static and non-static).
      for (MethodSpec methodSpec : methodSpecs) {
        if (methodSpec.isConstructor()) continue;
        if (!firstMember) codeWriter.emit("\n");
        methodSpec.emit(codeWriter, name, kind.implicitMethodModifiers);
        firstMember = false;
      }

      // Types.
      for (TypeSpec typeSpec : typeSpecs) {
        if (!firstMember) codeWriter.emit("\n");
        typeSpec.emit(codeWriter, null, kind.implicitTypeModifiers);
        firstMember = false;
      }

      codeWriter.unindent();
      codeWriter.popType();

      codeWriter.emit("}");
      if (enumName == null && anonymousTypeArguments == null) {
        codeWriter.emit("\n"); // If this type isn't also a value, include a trailing newline.
      }
    } finally {
      codeWriter.statementLine = previousStatementLine;
    }
  }

  @Override public String toString() {
    StringWriter out = new StringWriter();
    try {
      CodeWriter codeWriter = new CodeWriter(out);
      emit(codeWriter, null, Collections.<Modifier>emptySet());
      return out.toString();
    } catch (IOException e) {
      throw new AssertionError();
    }
  }

  private enum Kind {
    CLASS(
        Collections.<Modifier>emptySet(),
        Collections.<Modifier>emptySet(),
        Collections.<Modifier>emptySet(),
        Collections.<Modifier>emptySet()),

    INTERFACE(
        Util.immutableSet(Arrays.asList(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)),
        Util.immutableSet(Arrays.asList(Modifier.PUBLIC, Modifier.ABSTRACT)),
        Util.immutableSet(Arrays.asList(Modifier.PUBLIC, Modifier.STATIC)),
        Util.immutableSet(Arrays.asList(Modifier.STATIC))),

    ENUM(
        Collections.<Modifier>emptySet(),
        Collections.<Modifier>emptySet(),
        Collections.<Modifier>emptySet(),
        Collections.singleton(Modifier.STATIC));

    private final Set<Modifier> implicitFieldModifiers;
    private final Set<Modifier> implicitMethodModifiers;
    private final Set<Modifier> implicitTypeModifiers;
    private final Set<Modifier> asMemberModifiers;

    private Kind(Set<Modifier> implicitFieldModifiers,
        Set<Modifier> implicitMethodModifiers,
        Set<Modifier> implicitTypeModifiers,
        Set<Modifier> asMemberModifiers) {
      this.implicitFieldModifiers = implicitFieldModifiers;
      this.implicitMethodModifiers = implicitMethodModifiers;
      this.implicitTypeModifiers = implicitTypeModifiers;
      this.asMemberModifiers = asMemberModifiers;
    }
  }

  public static final class Builder {
    private final Kind kind;
    private final String name;
    private final CodeBlock anonymousTypeArguments;

    private final CodeBlock.Builder javadoc = CodeBlock.builder();
    private final List<AnnotationSpec> annotations = new ArrayList<>();
    private final List<Modifier> modifiers = new ArrayList<>();
    private final List<TypeVariableName> typeVariables = new ArrayList<>();
    private TypeName superclass = ClassName.OBJECT;
    private final List<TypeName> superinterfaces = new ArrayList<>();
    private final Map<String, TypeSpec> enumConstants = new LinkedHashMap<>();
    private final List<FieldSpec> fieldSpecs = new ArrayList<>();
    private final List<MethodSpec> methodSpecs = new ArrayList<>();
    private final List<TypeSpec> typeSpecs = new ArrayList<>();
    private final List<Element> originatingElements = new ArrayList<>();

    private Builder(Kind kind, String name,
        CodeBlock anonymousTypeArguments) {
      checkArgument(name == null || SourceVersion.isName(name), "not a valid name: %s", name);
      this.kind = kind;
      this.name = name;
      this.anonymousTypeArguments = anonymousTypeArguments;
    }

    public Builder addJavadoc(String format, Object... args) {
      checkState(anonymousTypeArguments == null, "forbidden on anonymous types.");
      javadoc.add(format, args);
      return this;
    }

    public Builder addAnnotations(Collection<AnnotationSpec> annotationSpecs) {
      checkState(anonymousTypeArguments == null, "forbidden on anonymous types.");
      checkArgument(annotationSpecs != null, "annotationSpecs == null");
      this.annotations.addAll(annotationSpecs);
      return this;
    }

    public Builder addAnnotation(AnnotationSpec annotationSpec) {
      checkState(anonymousTypeArguments == null, "forbidden on anonymous types.");
      this.annotations.add(annotationSpec);
      return this;
    }

    public Builder addAnnotation(ClassName annotation) {
      return addAnnotation(AnnotationSpec.builder(annotation).build());
    }

    public Builder addAnnotation(Class<?> annotation) {
      return addAnnotation(ClassName.get(annotation));
    }

    public Builder addModifiers(Modifier... modifiers) {
      checkState(anonymousTypeArguments == null, "forbidden on anonymous types.");
      Collections.addAll(this.modifiers, modifiers);
      return this;
    }

    public Builder addTypeVariables(Collection<TypeVariableName> typeVariables) {
      checkState(anonymousTypeArguments == null, "forbidden on anonymous types.");
      checkArgument(typeVariables != null, "typeVariables == null");
      this.typeVariables.addAll(typeVariables);
      return this;
    }

    public Builder addTypeVariable(TypeVariableName typeVariable) {
      checkState(anonymousTypeArguments == null, "forbidden on anonymous types.");
      typeVariables.add(typeVariable);
      return this;
    }

    public Builder superclass(TypeName superclass) {
      this.superclass = superclass;
      return this;
    }

    public Builder superclass(Type superclass) {
      return superclass(TypeName.get(superclass));
    }

    public Builder addSuperinterfaces(Collection<TypeName> superinterfaces) {
      checkArgument(superinterfaces != null, "superinterfaces == null");
      this.superinterfaces.addAll(superinterfaces);
      return this;
    }

    public Builder addSuperinterface(TypeName superinterface) {
      this.superinterfaces.add(superinterface);
      return this;
    }

    public Builder addSuperinterface(Type superinterface) {
      return addSuperinterface(TypeName.get(superinterface));
    }

    public Builder addEnumConstant(String name) {
      return addEnumConstant(name, anonymousClassBuilder("").build());
    }

    public Builder addEnumConstant(String name, TypeSpec typeSpec) {
      checkState(kind == Kind.ENUM, "%s is not enum", this.name);
      checkArgument(typeSpec.anonymousTypeArguments != null,
          "enum constants must have anonymous type arguments");
      checkArgument(SourceVersion.isName(name), "not a valid enum constant: %s", name);
      enumConstants.put(name, typeSpec);
      return this;
    }

    public Builder addFields(Collection<FieldSpec> fieldSpecs) {
      checkArgument(fieldSpecs != null, "fieldSpecs == null");
      for (FieldSpec fieldSpec : fieldSpecs) {
        addField(fieldSpec);
      }
      return this;
    }

    public Builder addField(FieldSpec fieldSpec) {
      checkArgument(fieldSpec.modifiers.containsAll(kind.implicitFieldModifiers),
          "%s %s.%s requires modifiers %s", kind, name, fieldSpec.name,
          kind.implicitFieldModifiers);
      fieldSpecs.add(fieldSpec);
      return this;
    }

    public Builder addField(TypeName type, String name, Modifier... modifiers) {
      return addField(FieldSpec.builder(type, name, modifiers).build());
    }

    public Builder addField(Type type, String name, Modifier... modifiers) {
      return addField(TypeName.get(type), name, modifiers);
    }

    public Builder addMethods(Collection<MethodSpec> methodSpecs) {
      checkArgument(methodSpecs != null, "methodSpecs == null");
      for (MethodSpec methodSpec : methodSpecs) {
        addMethod(methodSpec);
      }
      return this;
    }

    public Builder addMethod(MethodSpec methodSpec) {
      checkArgument(methodSpec.modifiers.containsAll(kind.implicitMethodModifiers),
          "%s %s.%s requires modifiers %s", kind, name, methodSpec.name,
          kind.implicitMethodModifiers);
      methodSpecs.add(methodSpec);
      return this;
    }

    public Builder addTypes(Collection<TypeSpec> typeSpecs) {
      checkArgument(typeSpecs != null, "typeSpecs == null");
      for (TypeSpec typeSpec : typeSpecs) {
        addType(typeSpec);
      }
      return this;
    }

    public Builder addType(TypeSpec typeSpec) {
      checkArgument(typeSpec.modifiers.containsAll(kind.implicitTypeModifiers),
          "%s %s.%s requires modifiers %s", kind, name, typeSpec.name,
          kind.implicitFieldModifiers);
      typeSpecs.add(typeSpec);
      return this;
    }

    public Builder addOriginatingElement(Element originatingElement) {
      originatingElements.add(originatingElement);
      return this;
    }

    public TypeSpec build() {
      checkArgument(kind != Kind.ENUM || !enumConstants.isEmpty(),
          "at least one enum constant is required for %s", name);

      boolean isAbstract = modifiers.contains(Modifier.ABSTRACT) || kind != Kind.CLASS;
      for (MethodSpec methodSpec : methodSpecs) {
        checkArgument(isAbstract || !methodSpec.hasModifier(Modifier.ABSTRACT),
            "non-abstract type %s cannot declare abstract method %s", name, methodSpec.name);
      }

      boolean superclassIsObject = superclass.equals(ClassName.OBJECT);
      int interestingSupertypeCount = (superclassIsObject ? 0 : 1) + superinterfaces.size();
      checkArgument(anonymousTypeArguments == null || interestingSupertypeCount <= 1,
          "anonymous type has too many supertypes");

      return new TypeSpec(this);
    }
  }
}


text:
Etixx-Quick Step second in Richmond Worlds team time trial
Belgian team medals for fourth year in trade team event
The Etixx-Quick Step riders on the podium (Image credit: Tim de Waele/TDWSport.com)
The Etixx-Quick Step set up pre-stage (Image credit: Tim de Waele/TDWSport.com)
World Champion Michal Kwiatkowski (Image credit: Tim de Waele/TDWSport.com)
Etixx-Quick Step went into the Worlds team time trial looking for its third win in four years under pressure for the Richmond event, having finished third in Ponferrada last season. Etixx-Quick Step cut the difference between itself and BMC Racing from 35 seconds to 11 seconds 12 months on from last year's Spanish Worlds, passing through the three intermediate time checks in second place with a slower middle section of the 38km course ending its ambition for gold.
Boonen: More TTT pressure for Etixx-QuickStep this year at Worlds
BMC repeat as team time trial World Champions
The Cyclingnews podcast: Interviews with Taylor Phinney, Michał Kwiatkowski and Kristy Scrymgeour
Video: Tony Martin disappointment over missing TTT title
"It was surprising, the time difference on the last section of the parcours," sport director Tom Steels said. "We were gaining time at the end of the race. At the middle of the race we were already improving. If you see the values of the riders, their data, I don't think we could have gone any faster than what we did today. It was a really close TTT, and I can't think of any moment when we really lost the race. BMC Racing Team was just better today, so congratulations to them. I think we earned silver as a cohesive unit, and we can be satisfied with a strong performance."
With Orica GreenEdge fading to fourth place on the day, Etixx-Quick Step become the only team to have won a medal in each of the four years since the event was reintroduced to the Worlds schedule in 2012.
Three-time individual time trial champion Tony Martin and road World Champion Michal Kwiatkowski drove the team over the line with the fastest time, but with BMC starting three minutes behind them it wasn't long before they were demoted to silver.
"I'm really happy about the performance of the team here in Richmond," Kwiatkowski said. "We did the best we could. The team was really motivated. I did my best, as did everyone. Yves, Rigo, Tom, Tony, Niki, we all worked really well together on this parcours. We tried to go for the victory, but BMC Racing Team was the strongest today. Congratulations to them. As for me, I had great sensations today. I did even better than I expected. I think we all really performed at our highest level possible. The fastest team won today. That's sport."
Disappointed to miss out on gold, Martin explained the race has given him good indicators ahead of his quest for a fourth individual time trial rainbow jersey.
"This was also one of my big objectives of the season, and my performance gives me confidence ahead of the UCI World TT Championship on Wednesday," Martn said of the team time trial. "It's hard to analyze myself, but as my teammates said, they were suffering a little bit when I was in front (laughs). So, I'm sorry for that, but it means I am in a good way. It gives me a good feeling for my next objective. I will go for it. I am disappointed for the team in that we didn't win, but we did our best, and my own performance boosted my morale before Wednesday. We will see what can happen in a few days. "
Click here to subscribe to the Cyclingnews podcast on iTunes and here for our complete World Championships coverage.

redpajama_set_name: RedPajamaCommonCrawl


NOROMECTIN PLUS Broadspectrum Antiparasitic Injection for Cattle contains ivermectin, a member of the avermectin family of compounds, and clorsulon, a compound belonging to the benzenesulfonamide family. Ivermectin is effective against both internal and external parasites sensitive to this family. Clorsulon controls adult liver fluke. Resistance may develop to any chemical.
GASTROINTESTINAL NEMATODES: Adult and immature – Ostertagia ostertagi (including third and fourth stage larvae and inhibited immatures) O. lyrata, Haemonchus placei (including third and fourth stage larvae), Trichostrongylus axei, T. colubriformis, Cooperia spp (including third and fourth stage larvae), Bunostomum phlebotomum (including third and fourth stage larvae), Oesophagostomum radiatum (including third and fourth stage larvae) and adults of Nematodirus spathiger, Nematodirus helvetianus, Strongyloides papillosus, Toxocara vitulorum and Trichuris spp.
Lungworms: (adult and immature) Dictyocaulus viviparus (including inhibited stages).
Screw Worm Fly: parasitic larval stages of Chrysomyia bezziana (not reported in Australia but present in Papua-New Guinea).
Sucking Lice: Linognathus vituli, Haematopinus eurysternus and Solenopotes capillatus. Does not provide full control of the cattle biting louse Bovicola bovis.
Mites: Sarcoptes scabiei var bovis.
The recommended dose is 1 mL NOROMECTIN PLUS per 50 kg bodyweight (200 µg ivermectin/kg and 2 mg clorsulon/kg liveweight) by subcutaneous injection. This product should not be used intravenously or intramuscularly.
Dose the mob according to the heaviest animal by liveweight in each group (cows, bulls, calves, heifers, etc). Do not underdose. A representative sample of cattle should be weighed before treatment either with scales or with a weighband.
Where there is a large variation in size within the group, draft into two or more lines based on bodyweight, to avoid excessive overdosing.
EXPORT SLAUGHTER INTERVAL: DO NOT slaughter for export until 42 days after treatment.
Safety: Studies have demonstrated a wide safety margin. Pregnant and breeding cattle may be safely treated provided normal care is taken in handling.Transitory discomfort has been observed in some cattle following subcutaneous administration. Soft-tissue swelling at the injection site has also been observed. These reactions have disappeared without treatment. Divide doses greater than 10 mL between two injection sites to reduce occasional discomfort or site reaction. Different injection sites should be used for other parenteral products.
Store below 30°C (Room temperature). Store bottle in carton to protect from light. Once broached, the product must be used within 28 days.
When the temperature of the product is below 5oC, difficulty in administration may be encountered due to increased viscosity. Warming the product and injection equipment to about 15oC will greatly increase the ease with which the product can be injected.
Dispose of empty container by wrapping with paper and putting in garbage.
Discarded needles/sharps should immediately be placed in a designated and appropriately labelled 'sharps' container.


ONLINE PARENTING COACH: You Disapprove of Your Daughter's Boyfriend?
"We have a beautiful seventeen year old daughter who has just started to become rebellious. Her grades have been up and down over the past several years. She currently is doing okay (all b's and c's). However, she will only be attending junior college because her grades aren't good enough for a state school. Our biggest issues have been a boyfriend last year who we did not approve of and eventually ended the relationship for her because we were concerned for her safety. This year we caught her online talking to a new boy very late at night and a text messaging session that was sexual in nature with the phone in her bed after midnight. As a result, we told her that she was no longer allowed to see him. We feel very lucky that she has not been experimenting with alcohol or drugs. Her only "brush with the law" has been a speeding ticket in February. However, she has insisted on maintaining a relationship with this new boy and caused such a scene yesterday because I refused to let her hang out with him that I had to cancel her senior portraits. I don't think we are probably in as severe a situation as many of your clients, but I'm wondering if your program is appropriate for our situation. Any information you have will be helpful."


text:
dunkin donuts franchise in philippines
Dunkin Donuts. Dunkin Donuts Franchise Philippines. You have 3 business models to choose from if you are interested to get a Dunkin' Donuts franchise. With plans to double the number of restaurants in the U.S. within the next 20 years, we are looking for exceptional franchise candidates to help keep America running on Dunkin' each and every day. The "Pasalubong ng Bayan" remained on the top spot because of its Best Donut Quality and Good tasting coffee. Dunkin' Donuts has grown into a very well-known brand globally, and as such the barriers to entering are rather high. Continue … Rosenberg credited Howard Johnson and his chain of franchised ice cream stores with giving him the idea to franchise Dunkin' Donuts. That's because they have proven their success in the Philippine market. Now in its 38 th year in the country, Mister Donut is offering various franchise packages depending on the type of shop you ' d like to manage. Dunkin Donuts is a brainchild of Bill Rosenberg. Dunkin' Donuts was established in 1950 by William Rosenberg and has since grown to have more than 7,000 locations. By 1963, the company had opened its 100th restaurant and grew to over 1,000 locations by … Franchises with names beginning with numbers 0-9. Subway, a company that has four times the number of locations as Dunkin' Donuts, sued its franchisees 12 times. Franchising in the Philippines can be rough, especially if you don't know where to start. Order Dunkin' Donuts delivery in Butuan Agusan del Norte now! CODES (2 days ago) In the 1960s, Dunkin' Donuts founder William Rosenberg established an International Franchising Association that paved the way for the brand's business franchising model. Year of establishment: 1950 Started Franchise: 1955 (61 years) Franchise Fee: $40,000 – $90,000 Initial Investment: $217,300 – $1,637,700 Royalty Fee: 5.9% Ad Fee: 2-6% Net-Worth: $250,000 Liquid Cash: $125,000. Franchised restaurants sell Dunkin' coffee, donuts, bagels, muffins, compatible bakery products, sandwiches, as well as other food items and beverages compatible with the franchisor's concept. *Required fields. Dunkin' Donuts is another franchise we get a lot of calls about. ... (COVID-19), we are taking steps to help keep everyone who interacts with Dunkin' safe during these challenging times. The average Dunkin' Donuts franchise startup fee depends on the location you choose, the type of store, and the number of stores that you will be putting up at the same time. Keeping You Informed on Our Response to COVID-19 . Dunkin Donuts is probably the oldest running donut shop in the world. Ranking on Entrepreneur's 2016 Top Franchises list: 8. Every day, they sell thousands of donuts to their Filipino patrons. Dunkin' Donuts sued franchise owners 154 times from 2006 to April 2008. Because of its popularity, getting a Dunkin Donut franchise is not so easy when compared with other franchises on this list. Financial requirements This is one of the most popular coffee chains around the world. Dunkin Donuts is the most popular doughnut store in the world and that fact is a big factor why you should pick it from your franchise list, my business minded friend. The only reliable 24/7 place in Tagbilaran - Dunkin Donuts franchise is lame in other big cities but this branch here is so patronized- it's the only one that's kept it's good service. In 1963, Mr. Robert "Bob" Rosenberg became the President and the Chief Executive Officer (CEO), which ensured continuity of the success the company had been experiencing. When. The Mister Donut Franchise then reached the Philippines in 1982 where it grew to be one of the largest donut chains in the country today. Photo credit: TravelMate. Dunkin Donuts Philippines. Confirm. Dunkin' Donuts is a market leader in the hot regular/decaf/flavored coffee, iced coffee, donut, bagel and muffin categories. Superfast food delivery to your home or office Check Dunkin' Donuts menu and prices Fast order & easy payment. About Dunkin' Donuts Founded in 1950, Dunkin' Donuts is America's favorite all-day, everyday stop for coffee and baked goods. Franchisin' Full Steam Ahead . In 1955, the first franchised restaurant was opened in Dedham, Massachusetts, selling 52 varieties of donuts, enough to have a different special each week of the year. Additional funds are required for real estate and vary on the number of restaurants acquired, restaurant size, and construction costs associated. Dunkin Donuts Franchise Details. Dunkin' Donuts parent company, Dunkin' Brands Inc., also franchises Baskin-Robbins, and the two concepts are sometimes co-branded. Franchise Contact Details: tigersugarphilippines@gmail.com; PMT Database of Franchises in the Philippines: A-Z. Year Business Began: 1954 Franchising Since: 1955 Headquarters: Canton, Massachusetts Estimated Number of Units: 12,960 Franchise Description: The franchisor is Dunkin' Donuts Franchising LLC. This business opportunity requires significant resources, including … We stopped by Dunkin Donuts while we were in Robinson's Mall in Cebu Philippines. In 1950, Bill Rosenberg opened the first Dunkin' Donuts shop in Quincy, Massachusetts. Over the same period, McDonald's was involved in five lawsuits. Dunkin' Donuts parent company, Dunkin' Brands Inc., also franchises Baskin-Robbins, and the two concepts are sometimes co-branded. Dunkin' Donuts restaurants sell hot, decaffeinated, iced, and flavored coffee along with bagels, donuts and muffins, making them a popular stop for many coffee lovers. To date, it already has over 2,000 branches across the Philippines. If you have to money to start a popular franchise, you can have a great opportunity with Dunkin' Donuts. Originally from Boston Massachusetts, the Mister Donut Franchise came to the Philippines in 1982 and began offering franchise business to Filipino entrepreneurs in 1983.
Overwatered Outdoor Plants, Temporary Housing Cost, Mrs Renfro Ghost Pepper Queso, Candy Clipart Png, Fender Justin Meldal-johnsen Road Worn Mustang Bass,


These offerings aim to help large, energy-intensive companies that are increasingly looking for new ways to reduce energy costs and emissions.
During the installation of distributed energy resources (DERs) such as wind and solar, the energy-intensive companies often lack capabilities to reduce energy cost and site emissions because they may not adequately measure, monitor or control their energy use.
A part of the ABB Ability™ Energy Management, OPTIMAX® aims to solve these problems by connecting to the distributed energy resources and optimising their use to achieve reduced energy cost and emissions.
"The energy and grid transformation is driving changes in how electricity is being generated, transported and consumed, with bi-directional energy and information flow having accelerated in the past couple of years," said Kevin Kosisko, managing director at ABB power generation and water.
For industrial and commercial companies that actively manage their power consumption and resources, OPTIMAX® provides with the opportunity to trade more efficiently with the grid while optimising their own power consumption and resources, reducing energy costs and minimising environmental impact.
In addition, OPTIMAX® also allows users to monitor energy use by adding new generation assets into a virtual power pool and aggregating decentralised generation and flexible loads.
"This aggregation and pooling of assets allow for seamless collection, management and reporting of environmental data related to energy use. The result is that users can automate the operation of their generation assets, controllable loads and/or storage to achieve an energy cost reduction of three to five per cent. Additionally, these sites can actively participate in energy markets and demand response schemes," explained Kosisko.
The new digital solution can also be supported through ABB Ability™ collaborative operations, providing access to ABB controls and performance experts that can perform system maintenance, optimisation and expansion.


text:
Update from Richmond Heathrow Campaign on the Operational Freedoms trial
Date added: November 20, 2012
The Operational Freedom Trials have caused a great deal of concern among residents under areas of London under Heathrow flight paths over the last few months. The Richmond Heathrow Campaign is helping its local residents to understand the issues, and send in complaints if necessary. They give details of who to complain, and where to. On 1st November, Heathrow Airport Limited announced that 2 further elements of the trials will not now take place. These are Operational Freedom 2 – Re-directing departing aircraft, which would have allowed aircraft to be redirected from their route sooner after take-off, increasing capacity when both runways were in use for take-offs. Also Operational Freedom 3 – landing inbound aircraft without holding, which would have decreased the number of flights arriving before 5:00 am, but increased the number arriving between 5:30 and 6:00 am as airlines determined it to be impractical. Around 16 landings per night are allowed, which normally arrive between 4:30 am and 6:00 am. The Richmond campaign's position is that flights between 11:00 pm and 6:00 am should end immediately.
From the Richmond Heathrow campaign – website at http://www.richmondheathrowcampaign.org/
The Operational Freedom Trials together with rumours of a third runway at Heathrow have caused a great deal of concern among residents over the last few months.
Operational Freedoms Trial
The trial continues, and so do the complaints to BAA resulting from intrusions into our quiet periods. A summary of the situation can be found on our website, and we have also prepared calendars for you to download, for Richmond and Barnes, and for Kew and Mortlake.
If you are disturbed by landing noise during one of your quiet periods, please complain to BAA. Call 0800 344844 or email noise_complaints@baa.com. Always include the date and time, together with your name, address and postcode. If you also copy your email to heathrow@richmond.gov.uk this will help us in monitoring how well BAA is processing complaints.
Some good news. On 1st November, Heathrow Airport Limited announced that two further elements of the trials will not now take place. These are:
Operational Freedom 2 – Re-directing departing aircraft: this would have allowed aircraft to be redirected from their route sooner after take-off, increasing capacity when both runways were in use for take-offs. It would have resulted in different take-off noise patterns over Ham. The reason for cancelling this part of the trial was that NATS and the CAA determined that safe procedures for this would take longer than expected to develop.
Operational Freedom 3 – landing inbound aircraft without holding:this would have decreased the number of flights arriving before 5:00 am, but increased the number arriving between 5:30 and 6:00 am. As it would not necessarily have delayed the time of the first arrival, the net effect on Richmond and Kew would probably have been neutral or negative. The reason for cancelling this was that the airlines determined it to be impractical.
Complaints Auditing: The Richmond Heathrow Campaign will be working to ensure that there is effective auditing of complaints received by BAA, so that all are taken into full consideration.
Government Consultations
Forthcoming Night Flights Consultation:
Around 16 landings per night are allowed. Normally these arrive between 4:30 am and 6:00 am. Our position is that:
Flights between 11:00 pm and 6:00 am should end immediately. As well as breaching human rights, they are a net drain on the UK's economy.
Over time, there should be no flights between 11:00 pm and 7:00 am, an 8 hour period as recommended by the World Health Organisation.
The existing night flight regime is due to be replaced. A first stage consultation on this is expected sometime between December 2012 and February 2013. We will publicise it here and via our mailing list once it's issued.
Making better use of Heathrow
Despite popular misconceptions, Heathrow is not full, but could be used in a more efficient way to satisfy growing passenger demand from the current annual 69 million passengers to 90 million without increasing current air traffic, but subject to congestion and pollution constraints on surface transport. This could be achieved by:
Encouraging larger aircraft and discouraging smaller aircraft
Encouraging higher seat occupancy
Making better co-ordinated use of London's five main airports
Encouraging more direct point-to-point services from regional airports
http://www.richmondheathrowcampaign.org/
Earlier, see
Heathrow 'Operational Freedoms' trials to be extended by 6 months – with surprise change to night flights
Theresa Villiers has agreed to significant changes to the second phase of operational trials at Heathrow. As well as the 6 month extension, Air Traffic Control will be allowed to vary the routes some planes take on departure. And, in a surprise move, the trials will also allow some aircraft currently scheduled to arrive after 0600 to land between 0530 and 0600 provided that the same number of flights scheduled to arrive between 0430 and 0500 are rescheduled to after 0500. She stressed that the trials would result in no overall increase in the number of planes using Heathrow each day. HACAN is surprised by the extent of the changes which have been made to the second phase of the trial. John Stewart commented that "The big concern of local people is that they will lose their half day's break from the noise. It is this which makes life bearable for so many people. There will also be a lot of anger that more flights are being allowed before six in the morning".
Details at http://www.airportwatch.org.uk/?p=1921
Posted: Tuesday, November 20th, 2012. Filed in News about Airports, Noise News, Recent News.


text:
Eastern Loop
Monday, July 15, 2019 to Thursday, July 25, 2019
6 Ballparks, 6 Games, 10 Teams + Baseball Hall of Fame Induction Weekend.
6 Ballparks: Camden Yards, Citizens Bank Park, Fenway Park, Yankee Stadium, Citi Field and Nationals Park. 4 Hall of Fame Events: Awards Presentation, Parade of Legends, Induction Ceremony and Legends of the Game Roundtable
1 Stadium Tour: Camden Yards
4 Attractions: National Baseball Hall of Fame and Musuem, Liberty Bell, Nat'l Constitution Center and Babe Ruth Museum
Arrival in Baltimore by 4:00 PM on July 15th, 2019
Suggested airport for your arrival is the Baltimore/Washington International Thurgood Marshall Airport (BWI). Your final documents will include the available transportation options to the hotel upon your arrival.
Umps Eye View
An inside look into Baseball - Enjoy stories and Q&A from former Big League Umpire of 26 years - Al Clark. Learn more about Ump's Eye View here.
Hotel: Hotel Accommodations - Baltimore
Stadium Tour of Camden Yards
See Oriole Park at Camden Yards from a whole new perspective. Enjoy the charm of the ballpark from club level suites, the press level, and even the Orioles dugout. Take a Stroll Through The Ballpark That Forever Changed Baseball! (areas visited and tour are pending availability).
Since opening in 1974, the Birthplace has served as a monument to the life and times of "The Babe".
Reserved Ticket to Washington Nationals @ Baltimore Orioles
Liberty Bell and National Constitution Center
The Liberty Bell in Philadelphia is a bell of great historic significance. The Liberty Bell is one of the most prominent symbols associated with the American Revolutionary War. The National Constitution Center, the World's only museum dedicated to the U.S. Constitution, is just 2 short blocks from the Liberty Bell.
Reserved Ticket to Los Angeles Dodgers @ Philadelphia Phillies
Hotel: Hotel Accommodations - Philadelphia
Day: 4 - Thu, July 18, 2019
Reserved Ticket to Toronto Blue Jays @ Boston Red Sox
Hotel: Hotel Accommodations - Boston
Day: 5 - Fri, July 19, 2019
Reserved Ticket to Colorado Rockies @ New York Yankees
Hotel: Hotel Accommodations - New York City
Day: 6 - Sat, July 20, 2019
National Baseball Hall of Fame & Museum
The National Baseball Hall of Fame and Museum collections feature just under 40,000 three-dimensional items, three million books and documents and 500,000 photographs. The Museum tells visitors the story of baseball through its three-story timeline, with the majestic Plaque Gallery serving as a centerpiece.
Hall of Fame Awards Presentation
The Ford C. Frick and J.G. Taylor Spink Awards presentation Saturday afternoon.
Doubleday Field
Hall of Fame Parade of Legends
Join the pageantry and excitement as the Hall of Famers ride in trucks provided by Ford Motor Company down Main Street on their way to a private reception at the National Baseball Hall of Fame and Museum. Staging for the Parade takes place at Doubleday Field and fans are encouraged to attend the Awards Presentation prior to making their way to the Parade at 6:00 PM.
Hotel: Hotel Accommodations - Albany
Day: 7 - Sun, July 21, 2019
Reserved Ticket to Induction Ceremony
Open Lawn Seating (Chairs Provided)
The Ceremony is expected to last two to three hours. Refreshments are sold at the site.
Reserved Ticket to Legends of the Game Roundtable
"It's the weekend they've worked for all their lives. And with memories of their Hall of Fame inductions fresh in their minds, new inductees will be ready to reminisce with fans during the annual Induction Weekend Legends of the Game Roundtable event in Cooperstown."
Afternoon leisure time in Cooperstown
Depart for New York City after leisure time in Cooperstown
Morning and Afternoon Leisure Time in New York City
Reserved Ticket to San Diego Padres @ New York Mets
Day: 10 - Wed, July 24, 2019
Reserved Ticket to Colorado Rockies @ Washington Nationals
Hotel: Hotel Accommodations - Washington DC
Day: 11 - Thu, July 25, 2019
Depart at leisure from Washington, DC
Suggested airport for your departure is the Ronald Regan Washington National Airport (DCA). Your final documents will include the available transportation options to the airport for your convenience.
Baseball Hall of Fame Membership
Hall of Fame Membership entitles you to a subscription to Memories and Dreams magazine, a Hall of Fame Yearbook, 10% discount on purchases from the Museum Store, catalog, website and much more!
Trip ID: 19PEL


In addition to picking up Rise and For God and Country, NBC has also given the green light for Seth Myers' new sitcom entitled A.P. Bio, which stars Glenn Howerton and Patton Oswalt. This news comes off of the previous announcement that It's Always Sunny in Philadelphia Season 13 will be delayed until 2019. Howerton has not yet said whether he will be returning to It's Always Sunny and this could be one of the major indicators, as well as his frequent outside acting work, that he'll not be returning. Howerton is the second Sunny star to become the lead on their own network show. Philadelphia co-star Kaitlin Olson stars in Fox's The Mick. Regardless, this is big news for fans of Howerton and Oswalt.
Variety reports that A.P. Bio stars Glenn Howerton as a philosophy scholar who loses out on his dream job and instead goes to work at a high school as an advanced placement biology teacher. Howerton's character soon makes it known that he will not be teaching advanced placement biology, but instead use the class of honor students for his own purposes. Patton Oswalt will play the high school's principle, which is a role perfect for him and is sure to be hilarious. The show also stars Lyric Lewis, Jacob McCarthy, Mary Sohn, Apama Brielle, and Nick Peine. In addition, it has been announced that Vanessa Bayer of Saturday Night Live will appear in the pilot episode of A.P. Bio.
A.P. Bio will reunite Meyers and SNL writer Mike O'Brien who will write the new series as Lorne Michaels and Meyers serve as executive producers. Meyers and O'Brien worked together on SNL from 2009 until 2014 when Meyers left the show to host Late Night with Seth Meyers, which is also produced by Lorne Michaels. In addition to serving as executive producer on A.P. Bio, Meyers is also an executive producer on Documentary Now!, a show on IFC that stars fellow SNL alumni Fred Armisen and Bill Hader. Documentary Now! tries to realistically spoof famed documentaries, often tracking down original lenses used in cameras and specific locations for filming.
Fans of It's Always Sunny in Philadelphia will at least have some Howerton, Olson, and the rest of the gang to watch in different projects during the hiatus of the cult favorite show. Rob McElhenney who created the show, is set to make his directorial debut for the upcoming Minecraft movie. Charlie Day recently had a costarring role in Fist Fight and is set to be in the upcoming Pacific Rim: Uprising, opening in 2018. And Danny DeVito has Tim Burton's Dumbo and an upcoming comedy series with Jeff Goldblum on Amazon.
SNL joining forces with Howerton and Oswalt sure looks like a homerun on paper. Only time will tell if fans of Howerton and Oswalt will tune in to watch A.P. Bio, but fans of the duo should be able to trust that they're going to be delivering the goods. Oswalt has an impeccable track record of choosing projects and why would this be any different. The show will be the first comedy ordered for the network in the 2017-2018 slate.


text:
Not quite a culture of corruption
Are the Democrats the new party of the crooked?
by The Economist | WASHINGTON
HERE'S a compelling case, by Eve Fairbanks of the New Republic, for why Republican giddiness at Democratic scandals may be premature. (And if you listen to talk radio, the giddiness is reaching Willy Wonka-factory levels.) The rundown:
• The Democrats' scandals are (mostly) localised, and are not coming from the party's national leadership.
• The scandals are not linked—Rod Blagojevich of Illinois has nothing to do with Bill Richardson of New Mexico has nothing to do with the departed William Jefferson of Louisiana.
• Barack Obama is popular, which takes some heat off his party. (Also, none of the scandals are connected to him.)
As far as Mr Obama is concerned, this is correct: Republicans got facefuls of egg when they tried to link the president-elect to the crooked Illinois governor with whom he feuded for four years. By this point in 1993, Bill Clinton could already be tied to shadowy sex and real estate scandals from his home state. It's a bit less correct as it concerns the Democrats: they really can't keep punting on an investigation of Charlie Rangel, the Ways and Means Committee chairman in the House whose minor financial scandals continue to fester.
One point Ms Fairbanks leaves out is that Republicans overrate the role "corruption" played in the party's downfall. It was Iraq, the immigration debate, and distate for George Bush. Two years after the midterm losses, John McCain, whom no one has accused of corruption since the late 1980s and Keating Five, lost as badly as the party at large did.


text:
Playmaker: My Life and the Love of Football (Paperback)
By Glenn Hoddle
'On the pitch he was a magician' - Ars ne Wenger
The first full autobiography from former footballer and England manager Glenn Hoddle
Glenn Hoddle was one of the most celebrated footballers of his generation. A wonderfully talented No. 10 - he formed part of the great Spurs teams of the early 1980s and cut his teeth in the blood and thunder of an England team that prioritised aggression over creativity.
Often seen as a player 'out of time', Glenn was a playmaker in the purest sense. A creator and a goal scorer, he rose through the Tottenham youth academy - playing under Keith Burkinshaw and crossing paths with the likes of club legends Bill Nicholson and Danny Blanchflower - before going on to play in Monaco under the tutelage of Ars ne Wenger. In Playmaker, he looks back on his rise as a prodigious young footballer and talks at length about his career that took him from cleaning the cockerel at White Hart Lane to managing the England football team at a World Cup.
From scoring in an FA Cup final to winning the league in France; from revitalising Chelsea in the early 1990s, to managing the fall-out after David Beckham's infamous sending off at the 1998 World Cup; from surviving a near fatal cardiac arrest at the age of 61, to continuing to work within the game he loves - Playmaker is a life lead through football, and an autobiography of one of the game's most admired, thoughtful and respected personalities.
Glenn Hoddle is a former footballer and manager - and one of the most respected players of his generation. He began his career at Tottenham Hotspur and played for AS Monaco under Arsene Wenger. He managed Swindon Town and Chelsea, before becoming England manager in 1996. He is now a pundit for BT Sport.
Coaching - Football


text:
Q: C# error CS1513 and CS1023 I was making some kind of terminal simulator and everything was working fine until I edited something, I don't know what anymore, and I got this error
..\Playground\(14,38): error CS1513: } expected
..\Playground\(21,1): error CS1022: Type or namespace definition, or end-of-file expected

Can anyone tell me what happened?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MCMD{
    class INFO{
        static string LANG="CSharp";
        static string STAT="A";
        static string VERS="0.0.1.0";
    }
    class TERMINAL{
        static void IFunc(string question){
            private string lang=System.MCMD.INFO.LANG;
        }
        static void Main(string[] args){
            Console.Write(IFunc());
        }
    }
}

A: private is not a valid modifier for local variables as you have in IFunc, so you need to remove it. You also need to remove System from the fully-qualified name of INFO.LANG.
static void IFunc(string question){
    string lang=MCMD.INFO.LANG;
}

You also need to provide a string argument when calling IFunc from main:
static void Main(string[] args){
    Console.Write(IFunc("some string"));
}