I train some very talented and motivated individuals. Here's what some of them have to say about me.
Throughout my baseball career, I've been around dozens of strength coaches at the high school, Division-1 and professional level. The mark of a good coach is someone who is fully invested in each and every one of his athletes, and who constantly adjusts and adapts his methods both based on the latest research and on an individual basis. Andrew is one of the few I've met who fits the bill.
Andrew understands the intricacies involved in creating an optimal training approach for each athlete, taking into account the sport, position, mobility assessment, training and injury history of the individual. As a strength coach and pro athlete myself, I fully appreciate the expertise that he brings to the table.
For athletes with the desire and the passion to truly improve themselves, Andrew is more than a coach, he is a mentor, and is one of the genuine, unsung experts in his field.
Andrew's knowledge of lifting is way beyond his years. He is perfecting the way athletes should lift based on not only their sport, but of the position they play within the sport. Andrew designed a program for me that catered to my specific needs as a D1 pitcher. Within weeks, I was able to see results. Every week my front squat was increasing by at least 10lbs. and my deadlift was jumping 15-20lbs. as well. While I was getting stronger, I was also getting more flexible. Andrew focused a lot on my hip and shoulder flexibility and this was a key factor in gaining strength and preventing injuries throughout the season. During my Senior season at Virginia Tech, I reached another goal of mine, throwing a baseball 95mph. I cannot thank Andrew enough for helping me with all of my success, and I will continue to work with him to reach more goals that I have set for myself.
The change we have seen in Tommy as he has trained with you for the past 2 to 3 months is absolutely incredible. Tommy's physical strength has grown exponentially. I watched him last week hit a ball just as far and as hard with a BBCOR bat as he does with his live non BBCOR bat. He has played every position on the field this year except for first and catcher. We started working last week a little on catching and he squatted down in catchers position and I said how does that feel. His answer "I could be in this position for 20 minutes without moving thanks to Andrew". Just this week hit a ball bad and the ball still went approximately 300 ft for a double. As we were riding home he said the double is all because of Andrew. I do not know of a better compliment for you. His confidence is the biggest aspect his mom and I have noticed. He carries himself with a ton of confidence now, where as last year he was more soft spoken and mild. The confidence is not over the top cocky, it is just what I would call an inner arrogance where he is confident in his abilities. Physically looking at Tommy we are able to see his shoulders squaring up and his legs getting so much stronger. You know Tommy was not keen on the training at the beginning, because of your ability to work with him and your baseball background, he loves coming to training now. The techniques you are teaching him and the importance of stretching in your sessions has been invaluable. I have heard on numerous occasions Tommy talking to his teammates about his training sessions with you and he says to them you will get results if you listen to Andrew.
I recently started training with Andrew over the summer of 2013 . Being a Division 1 college athlete you realize that you have to work to develop into an elite player . Working with Andrew was one of the best choices I have made toward my baseball career. After working with Andrew my speed and strength improved tremendously . My deadlift increased to 495 and my squat went up to 395 . My 60 yard dash time also improved by a full second. Prior to lifting with Andrew I was doing bodybuilding lifts that had no benefit for baseball and after working with Andrew I developed into a strong baseball player. Andrew will educate and train you to reach your full potential. Andrew is what you expect in a trainer who is friendly and yet still very professional and demanding in his workouts . I will continue to train with Andrew in the fall in preparation for the spring in which I hope to get All-conference honors and potentially take my game to the next level.
I have been working with Andrew for the past off season and focusing on strength training. After offseason workouts, I started my high school season at Eastern Tech. This season, I noticed an increase in my pitching velocity and more movement on my pitches. I also hit the ball harder than I ever have before and I experienced less soreness as I was well conditioned. Andrew put together an awesome workout program for me and I really enjoyed coming in to work with him! He is an amazing coach who knows what he's talking about and knows how to make workouts fun! I look forward to working with him in season this year and continuing to work with him this fall as well.
I have been working with Andrew for about 3 years now. I'm a rising junior in high school, and I owe most of my success to Andrew, who has been with me every step of the way helping me make both varsity football and baseball as a sophomore. I started working with Andrew in 8th grade, so I could go into high school knowing what and how to lift with the football program. Ever since that day I have been working with him and have some of the highest maxes for my football team for my size. We have been working on my speed quite a bit lately and in my combine numbers you can see a steady improvement in my times. Before you do anything with Andrew he makes sure you know the science behind each exercise, and is very patient with you in order to make sure you use proper form. If you are an athlete looking to become the best you can be and reach your goals, I suggest seeing this man in the near future.
We came to Andrew with the hopes of helping our son improve his running speed and form. He has not only changed my son's flexibility and running form, but more importantly, he has changed his attitude about exercising and working hard. Andrew communicates well with me and has the ability to connect and communicate with teens making training fun and enjoyable. As a parent, I am thrilled with the physical improvement and even more so the life long skills and healthy habits being taught in a fun atmosphere.
I have been training with Andrew for the past off-season and have also continued to train with him during my summer season. Throughout my whole off-season Andrew constantly pushed me to my limits, which definitely contributed to my increase in velocity as well as hitting. I have noticed a tremendous increase in my pitching speed as well as my pitching movement and speed on the base path. I always look forward to my training sessions because of my awesome workout program that Andrew always put together. I can't thank Andrew enough for his dedication and hard work he put into always making our workouts fun as well as getting the job done and putting the right work in.
I was always skeptical of going to an athletic trainer because of my heart disease (my condition limits me to only lifting half my body weight). However, I can truly say going into training with Andrew Sacks was one of the best decisions I made relative to my athletic career. He created a custom program for me addressing my heart problem. I went into training with Andrew with little knowledge about strength conditioning and weight training. Andrew was extremely patient with me and taught me all the exercises I needed to know. He was a great instructor and pushed me to new limits. As a result I have seen excellent results. When I started my training I was looking to make the Varsity baseball team at my high school. I was a pitcher throwing 75-78 mph with below average leg strength. My broad jump was 6'9" and my vertical was 19 inches. Andrew helped me accomplish my goal of making the Varsity baseball team by working on my weaknesses. Going into my senior year my broad jump increased to 8'11" and my vertical to 27 inches. However the greatest result was my pitching velocity. In my first pitching appearance of my senior year I was sitting at 84 mph, and was able to hit 90 mph from a crow hop. During the season he would take the time and constantly check up on me and give me advice. I am truly happy with the results and I recommend everyone to come and train with Andrew.
Andrew is the kind of trainer that you want to work hard for. He makes every single workout extremely strenuous but still do-able. He keeps things light, but is still a professional at all times; he knows how to keep that line between friend and coach. He demands respect from his athletes and gives respect back. After working with Andrew last offseason, I had the best season of my high school baseball career. I batted .424, and was named 1st-Team All-County. I was also named as one the Top-18 players in the region. Next year I will be playing baseball in college, and I owe that in large part to the sense of determination and drive that Andrew instilled in me.


text:
namespace NetMsg
{
    struct Net_File
    {
        std::uint32_t transferID;
        bool isRequest;
        char filename[1024];
    };
}

DECLARE_NET_HANDLERS(Net_File);

redpajama_set_name: RedPajamaGithub


I am completely baffled by the way we as African Americans are starting to think…I seriously just don't understand exactly what we value anymore. I say WE because whether we like it or not, we are all a representation of each other. If you don't believe me, think about it… If someone walks into a building and decides to act a fool, and I go into that same building 10 minutes later with a classy and demure attitude, how do you think I will be looked at? Let's just say I will definitely have to work twice as hard to make a good impression. So my question is WHY people Why?
The reason for my seemingly harsh rant just comes from buildup frustrations. And I honestly think that this weekend topped it off. On Saturday I went to see Red Tails with my father, and to my surprise, it was a mixed audience, which I must say was very pleasant to see. But what I could not understand was why did this movie only make 19.1 million dollars this weekend? Yes, that was a higher opener than expected but my questions are still why? if it had been any other RETARDED movie, which I will digress from naming, I am so sure It would have made so much more money and there definitely would have been more black faces.
Did anyone go to the theaters this weekend? tell me what you think?
Unfortunately, I have not yet gone to see the film because of my lack of a vehicle and funds. I asked someone last week if they went to see the film and they said yes. This person said that she saw a decent amount of young African Americans sitting in the seats and I was proud to hear that. I think that the lack of pride in our history or heritage within some young African Americans may be the answer to your question.
When I was growing up, I was taught to take pride in my heritage, love my black brothers and sisters, and to also have respect for myself. I see people my age and younger acting otherwise. There are many factors as to why they CHOOSE to act this way. The main factor is EDUCATION. I'm not talking about education as far as school but I am talking about our parents, grandparents, and other family members as well as friends teaching the youth about their heritage and how to have honor and respect for it and themselves.
We all know that mothers, fathers, and grandparents are becoming younger and younger. Most of them were not taught about their heritage and they are not teaching their children. It all starts when you're a child because that's when you are molded and shaped into the person you need to be. Most parents depend on the school system to teach African Americans about their history or heritage. American History books do not have everything about our heritage in them. There are many things that are not mentioned. For example, I did not know that African Americans invented so many things that we use everyday until my mother took me to the library and read to me.
The point is many young African Americans are not knowledgeable about their heritage. Instead of trying to find out about themselves and where they come from, some rather listen to music that does not have a positive message, smoke weed, and ditch class and talk about young African Americans that actually do something positive with their time and lives. Because of this lack of knowledge some young African Americans will continue to be lost, confused, and unsure of who they really are. You don't know who you are unless you know where you come from!


Gravity Accent Table is a perfect example of elegance, style, and functionality. Angled shelf underneath the top is great for putting books, and magazines. Whether you need a highly functional and space saving side table to have beside your recliner in bedroom or family room, or you are looking to add this in middle of armchairs in your living room… Its suitable for everywhere!
Available in a variety of water-based UV-cured wood veneer finishes.


Ask even the most knowledgeable connoisseurs about the origin of the modern cocktail and it is unlikely you will get a simple or straightforward answer. However, despite its ambiguous origins, one thing we know for sure is that the cocktail has been a staple of Italian culture. You can find some of the very best in the speakeasies in Rome.
Italian chefs structure their meals to create a careful progression of food and drink. This encourages proper digestion, therefore creating a healthier eating experience. Each staple of the Italian table has its own role to play in this elaborate and delicately-balanced routine. Italy also has a rich history of using bitters and liquors, such as vermouth. Doctors used these for medicinal and curative purposes as well as part of this dining process. However, it was a long time before these Italian homemade cure-alls found their way into our negronis and our americanos.
Although cocktails date back to the Incan empire, mixologists agree that the modern cocktail gained popularity during the prohibition years in the United States. With all liquor banned, people had to resort to more creative ways to make and disguise alcohol (think bathtub gin!) and subsequently more creative ways to enjoy it. Enter the cocktail: an inventive way to mask subpar alcohol with honey, fruits, spices and whatever else was on hand to make it palatable.
As a result of this new and clandestine demand, the speakeasy was born. These establishments were selling and serving alcohol illegally and as they quickly popped up in basements and alleyways all over the United States they began to share a set of unspoken rules: an inconspicuous entrance, sense of exclusivity and need for the utmost discretion. How the speakeasy found its way into the vicoli of Rome is another story! Whether it was the involvement of Italian mafiosi in American speakeasies, the Italians' evolving palette or just plain old globalization, we can't know for sure, but speakeasies are slowly becoming a main player in the Roman drinking scene and whatever the reason, we're not complaining.
So suit up, join the club and check out this list of our favorite speakeasies in Rome. Just remember: shhh…!
Just off Corso Vittorio Emanuele lies Jerry Thomas: one of the first speakeasies in Rome. Named after the 'father of mixology' and the author of the first comprehensive bar-tending guide and cocktail recipe book, this prohibition era speakeasy does a great job of keeping Mr. Thomas' legacy alive. Once you have made your way past the password-protected entrance, you can either sink into one of plush leather sofas or grab a front row seat at the bar to witness some seriously skilful cocktail mixing. Whatever you order here is sure to be delicious! They have also recently opened up the 'Jerry Thomas Emporium' selling a line of cocktail-related merchandise, from bitters to bar tools: in short, gifts to satisfy all your DIY cocktail needs!
This speakeasy is tucked in the back streets of the quaint Campo de Fiori neighbourhood. This cocktail bar is the brainchild of three young Romans. Of the bars on this list Argot is definitely the place that most effectively evokes a prohibition-style speakeasy. Nevertheless the owners prefer to refer to it as a "salotto di casa." It hides behind an inconspicuous entrance. Upon arrival customers head downstairs to a cavernous space with dim lighting and carefully-chosen kitsch design pieces to enjoy a delicious cocktail and some nibbles. If you drop by on a weekend you can catch live music performances while sipping on a classic negroni or a whisky sour with a twist.
This speakeasy has an entrance that is much more obvious to the casual passerby. Somehow it still manages to maintain an exclusive feel. It lies in the bustling neighborhood of Trastevere. Keyhole offers a wide range of cocktails which are sure to please even the most discerning enthusiast. The space itself really achieves the feel of an authentic 1920s speakeasy. Here you'll find cavernous lounge spaces, original light fixtures and mismatched furniture. The barmen even have carefully trimmed moustaches. This is one of the most sophisticated speakeasies in Rome.
Perfectly groomed facial hair is not all the barmen have to offer – not sure what to order ? Let them know your taste and spirit of choice and the skilful staff will be more than happy to create a custom concoction just for you. Warning: you might actually have to make conversation at this bar, as the etiquette discourages phones and table service is non existent.
The Barber Shop off of Via Labicana is perhaps the most intriguingly-disguised speakeasy in the city. Furthermore, hidden behind the guise of a vintage barber shop, this bar offers visitors an escape from tourist crowds just a stone's throw from the Colosseum. The barmen are moreover friendly, knowledgeable and well-dressed (in typical speakeasy style). Despite the low ceilings and dim-lighting the bar itself remains inviting and is the perfect place for an after-hours nightcap (as Barber Shop stays open until 4am). Out of all the speakeasies in Rome, here you get the warmest welcome.
One of the newer contenders on the Rome speakeasy scene is Club Derrière. It has already made quite a name for itself in Rome's historic centre. The bar itself lies within a hidden extension to the restaurant Osteria delle Coppelle. It remains inconspicuous, tucked behind a pretty piazzetta which has tables spilling out on to the road. This is therefore perfect if you are looking for something more sophisticated than the standard spritz aperitivo. You can find it at the back of the restaurant to the white closet door. The entrance requires a password. That said, once inside, you will find yourself inside one of the most beautifully curated speakeasies in Rome. It is small, discreet and serves truly excellent drinks. Relax in a velvet-covered armchair with an unusual and carefully-spiced cocktail, and watch the eclectic clientele mingle to a sultry jazz soundtrack.


text:
Look at this graph: Morning Brief
Even amid Fed rate hikes, stocks usually go up
Rampant inflation in an overheating economy is bad. And so to fight that or prevent that, the Federal Reserve is expected to tighten monetary policy via the tapering of its quantitative easing program and the hiking of its fed funds rate.
Currently, employment is rising and the prices of goods and services are climbing. But it's hard to argue that the economy is overheating with employment still 7.6 million jobs below pre-pandemic levels. And it's hard to argue that inflation is rampant as the increase in prices largely appears to be related "transitory" factors like base effects, reopening quirks, and some unusual short-term supply chain bottlenecks.
Nevertheless, with the consumer price index (CPI) jumping a hotter-than-expected 5.0% year-over-year in May — the biggest jump since August 2008 — it's worth exploring what tighter monetary policy could mean for investors.
Credit Suisse's Jonathan Golub did just that earlier this week, and he found that tighter policy isn't obviously bad for stocks as investors might expect.
"While investors might interpret the reversal of Fed policy as a bad omen, history shows that stock returns remain robust in the months leading up to and following the first rate hike," Golub said in a note to clients on Wednesday. "More specifically, over the past four rate hike cycles ('94, '99, '04, '15) the S&P 500 gained 9.5% in the 12 months prior to the first hike, and 26.0% over the subsequent three years."
Stocks tend to go up. (Credit Suisse)
"The real damage from higher rates tends to occur later in the cycle when tighter policy flattens/inverts the curve," he added. "We are eons away from that happening."
Now, we'll acknowledge that the average Golub computed is arguably an oversimplification and that four rate hike cycles is a pretty small sample size.
And when you consider all the other variables in the market, you could also argue that what we're experiencing today is totally unprecedented. And so, the past won't help outline the future.
But we can't help but appreciate the "stocks usually go up" energy emanating from Golub's chart. And to that, we'd make two points.
First, everyone is already talking about the risk of inflation heating up. And so the downside of tighter monetary policy amid rising prices is an event that may already be priced into the market.
Second, businesses can be very flexible in the pursuit to grow profits. This means that when they are confronted by challenges that threaten profit growth, they will make changes to their strategies or even outright overhaul their business models. This is something we learned throughout the coronavirus pandemic. Offices had employees working remotely. Restaurants ramped up their pickup and delivery options. TV personalities broadcast from their homes. And so on.
All this speaks to the truth about the stock market. There are always major risks that'll have investors reluctant to put money in the market. And there are often unexpected shocks that'll come with big scary sell-offs. But even when things are still bad, stocks rally as investors look past the challenges and bet that consumers and businesses will figure out a way to make things better.
In other words, it's never a given that stocks will fall.
By Sam Ro, managing editor. Follow him at @SamRo
Upgrade now to stay ahead of the market with Yahoo Finance Plus.
Try Yahoo Finance Plus nowWhat to watch today
10:00 a.m. ET: University of Michigan sentiment, June preliminary (84.4 expected, 82.9 in May)
No notable reports scheduled for release
European market steams ahead as UK economy grows at fastest pace since July 2020 [Yahoo Finance UK]
Chinese ride-hailing firm Didi reveals $1.6 billion loss in IPO filing [Bloomberg]
Bitcoin shrugs off global regulation proposals [Yahoo Finance UK]
Bond market becomes battleground for fight over inflation [Yahoo Finance]
UnitedHealthcare faces intense backlash for new ER visit policy
'We will see a financial crisis' if COVID-19 benefits are left in the budget: Kevin Brady
Salesforce CEO: We're going to rebuild all of our technology to become Slack-first
Previous: Danes Get a New Meme Stock After 1,387% Spike in U.S. Hours
Next: Can Student Loan Forgiveness Still Happen?

redpajama_set_name: RedPajamaCommonCrawl


text:
An account of the late action...
An account of the late action of the New-Englanders under the command of Sir William Phips against the French at Canada / together with the articles of war composed and agreed upon for that purpose.
Savage, Thomas, 1640-1705.
London : Printed for Thomas Jones ..., 1691.
1 online resource (12, [3] pages)
Phips, William, -- Sir, -- 1651-1695.
Québec Expedition (1690)
Québec Expedition, 1690.
E-Resource Book
http://pi.lib.uchicago.edu/1001/cat/bib/11648373
Restrictions unspecified
Wing S771
Sabin 77246
Electronic reproduction. [S.l.] : HathiTrust Digital Library, 2011.
Master and use copy. Digital master created according to Benchmark for Faithful Digital Reproductions of Monographs and Serials, Version 1. Digital Library Federation, December 2002. http://purl.oclc.org/DLF/benchrepro0212
digitized 2011 HathiTrust Digital Library committed to preserve
Print version record.
Other form:
Print version: Savage, Thomas, 1640-1705. Account of the late action of the New-Englanders under the command of Sir William Phips against the French at Canada. London : Printed for Thomas Jones ..., 1691
An account of the late action of the New-Englanders under the command of Sir William Phips against the French at Canada/
by: Savage, Thomas, 1640-1705
Two narratives of the expedition against Quebec, A.D. 1690, under Sir William Phips.
by: Wise, John, 1652-1725
Sir William Phips devant Québec; histoire d'un siège,
by: Myrand, Ernest, b. 1854
The life of Sir William Phips,
by: Mather, Cotton, 1663-1728
Pietas in patriam: the life of His Excellency Sir William Phips, Knt. late Captain General and Governour in Chief of the province of the Massachuset-Bay, New England, containing the memorable changes undergone, and actions performed by him /


There are also some smaller (although very frustrating) fixes coming like the map not working in multiplayer by always showing 'Level 0' and no tiles being revealed. Problems with Swap Bodies and the Secret Level causing sounds to disappear. If there is anything you think should be given priority be sure to mention it in the [email protected] email or the Canny/Discord links mentioned above. We're gonna do our best to make this game perfect for you, thanks for your patience on this journey.


text:
Q: Why can't I bind a function using .bind the same way with as command flag in a list of buttons in tkinter I'm trying to bind a lambda to a button with a different event. However, the interpreter is saying
TypeError: list indices must be integers or slices, not Event
If I replace buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i])) with buttons_list[z].bind("<Button-3>", lambda i: print(myList[z])) it prints no regardless of the button pressed. When replacing the line with buttons_list[z].bind("<Button-3>", print(myList[z])), it prints them in order at the beginning of the program only, not upon right click (as expected). So why don't buttons_list.append(tk.Button(self.root, text="Click here" + str(z), command=lambda e=z:print(myList[e]))) and buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i])) behave identically?
import tkinter as tk

myList = ["foo", 'bar', 'no']

class TestClass:
    def __init__(self):
        self.num = 0
        self.root = tk.Tk()
        self.make_buttons()
        self.root.mainloop()

    def make_buttons(self):
        buttons_list = []
        for z in range(len(myList)):
            buttons_list.append(
                tk.Button(self.root, text="Click here" + str(z), command=lambda e=z: print(myList[e])))
            buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i]))
            buttons_list[z].pack()

p = TestClass()

Any help is appreciated, thanks in advance

A: Try this:
class TestClass:
    ...
    def make_buttons(self):
        buttons_list = []
        for z in range(len(myList)):
            button = tk.Button(self.root, text="Click here " + str(z), command=lambda z=z: print(myList[z]))
            buttons_list.append(button)
            button.bind("<Button-3>", lambda event, i=z: print(myList[i]))
            button.pack()

The problem is that when executing the command parameter tkinter doesn't give it an argument. .bind's command is executed with an argument (an event).

redpajama_set_name: RedPajamaStackExchange


A drug manufacturer is recalling bottles of one of its products because of a labeling error that provided people with pills that are double the expected dose, according to NJ.com.
C.O. Truxton, Inc. has issued a nationwide recall for bottles of its 15 mg Phenobarbital tablets because they may actually contain 30 mg tablets.
The company said it received a complaint from a consumer about the mislabeled bottles.
The product comes in 1,000-count bottles with lot number 70952A and an expiration date of Nov. 17. The bottles are identified by the UPC code 7 0463616010 6. The tablets are used as a sedative or an anticonvulsant.
The company is issuing recall notices to all affected customers, with protocol on refunds and replacements.
Can I Start A Phenobarbital Claim?


High quality illuminated plastic outdoor led furniture for disco bar Specification LED bar counter Item No. 3, High quality (1) Use aluminium mould for the production of products for more smooth surface. 5, Prompt delivery: 7-20days bulk production time ,we can adjust production schedule according to your urgency.
Guangzhou Biaoxin Plastic Co., Ltd.
W 14/17kg Warranty Period 3 years warranty for furniture,2 years warranty for LED lights. Q: How about the shipment9 A: For sample order, we usually ship by express or by air, for bulk order, we usually ship by sea. Q: How about the warranty9 A: 3 years warranty for furniture,2 years warranty for LED lights.
Alibaba.com offers 57,729 cocktail bar products. About 30% of these are bar tools, 12% are bar tables, and 1% are refrigeration equipment.
A wide variety of cocktail bar options are available to you, such as plastic, metal, and wood. You can also choose from no, yes. As well as from modern, antique. And whether cocktail bar is free samples, or paid samples.
There are 57,305 cocktail bar suppliers, mainly located in Asia. The top supplying countries are China (Mainland), India, and Hong Kong, which supply 93%, 5%, and 1% of cocktail bar respectively.
Cocktail bar products are most popular in North America, Western Europe, and South America.
You can ensure product safety by selecting from certified suppliers, including 5,379 with Other, 4,542 with BSCI, and 4,174 with ISO9001 certification.


text:
import contextlib
import logging
import os
import re
import subprocess
import sys
import tempfile
import threading
import time
import unittest
import shutil

from benchexec import container
from benchexec import containerexecutor
from benchexec import filehierarchylimit
from benchexec.runexecutor import RunExecutor
from benchexec import runexecutor
from benchexec import util

sys.dont_write_bytecode = True  # prevent creation of .pyc files

here = os.path.dirname(__file__)
base_dir = os.path.join(here, "..")
bin_dir = os.path.join(base_dir, "bin")
runexec = os.path.join(bin_dir, "runexec")

trivial_run_grace_time = 0.2

class TestRunExecutor(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.longMessage = True
        cls.maxDiff = None
        logging.disable(logging.NOTSET)  # need to make sure to get all messages
        if not hasattr(cls, "assertRegex"):
            cls.assertRegex = cls.assertRegexpMatches

    def setUp(self, *args, **kwargs):
        with self.skip_if_logs(
            "Cannot reliably kill sub-processes without freezer cgroup"
        ):
            self.runexecutor = RunExecutor(*args, use_namespaces=False, **kwargs)

    @contextlib.contextmanager
    def skip_if_logs(self, error_msg):
        """A context manager that automatically marks the test as skipped if SystemExit
        is thrown and the given error message had been logged with level ERROR."""
        # Note: assertLogs checks that there is at least one log message of given level.
        # This is not what we want, so we just rely on one debug message being present.
        try:
            with self.assertLogs(level=logging.DEBUG) as log:
                yield
        except SystemExit as e:
            if any(
                record.levelno == logging.ERROR and record.msg.startswith(error_msg)
                for record in log.records
            ):
                self.skipTest(e)
            raise e

    def execute_run(self, *args, expect_terminationreason=None, **kwargs):
        (output_fd, output_filename) = tempfile.mkstemp(".log", "output_", text=True)
        try:
            result = self.runexecutor.execute_run(list(args), output_filename, **kwargs)
            output = os.read(output_fd, 4096).decode()
        finally:
            os.close(output_fd)
            os.remove(output_filename)

        self.check_result_keys(result, "terminationreason")
        if isinstance(expect_terminationreason, list):
            self.assertIn(
                result.get("terminationreason"),
                expect_terminationreason,
                "Unexpected terminationreason, output is \n" + output,
            )
        else:
            self.assertEqual(
                result.get("terminationreason"),
                expect_terminationreason,
                "Unexpected terminationreason, output is \n" + output,
            )
        return (result, output.splitlines())

    def get_runexec_cmdline(self, *args, **kwargs):
        return [
            "python3",
            runexec,
            "--no-container",
            "--output",
            kwargs["output_filename"],
        ] + list(args)

    def execute_run_extern(self, *args, expect_terminationreason=None, **kwargs):
        (output_fd, output_filename) = tempfile.mkstemp(".log", "output_", text=True)
        try:
            runexec_output = subprocess.check_output(
                args=self.get_runexec_cmdline(*args, output_filename=output_filename),
                stderr=subprocess.DEVNULL,
                universal_newlines=True,
                **kwargs,
            )
            output = os.read(output_fd, 4096).decode()
        except subprocess.CalledProcessError as e:
            print(e.output)
            raise e
        finally:
            os.close(output_fd)
            os.remove(output_filename)

        result = {
            key.strip(): value.strip()
            for (key, _, value) in (
                line.partition("=") for line in runexec_output.splitlines()
            )
        }
        self.check_result_keys(result, "terminationreason", "returnvalue")
        if isinstance(expect_terminationreason, list):
            self.assertIn(
                result.get("terminationreason"),
                expect_terminationreason,
                "Unexpected terminationreason, output is \n" + output,
            )
        else:
            self.assertEqual(
                result.get("terminationreason"),
                expect_terminationreason,
                "Unexpected terminationreason, output is \n" + output,
            )
        return (result, output.splitlines())

    def check_command_in_output(self, output, cmd):
        self.assertEqual(output[0], cmd, "run output misses executed command")

    def check_result_keys(self, result, *additional_keys):
        expected_keys = {
            "cputime",
            "walltime",
            "memory",
            "exitcode",
            "cpuenergy",
            "blkio-read",
            "blkio-write",
            "starttime",
        }
        expected_keys.update(additional_keys)
        for key in result.keys():
            if key.startswith("cputime-cpu"):
                self.assertRegex(
                    key,
                    "^cputime-cpu[0-9]+$",
                    f"unexpected result entry '{key}={result[key]}'",
                )
            elif key.startswith("cpuenergy-"):
                self.assertRegex(
                    key,
                    "^cpuenergy-pkg[0-9]+-(package|core|uncore|dram|psys)$",
                    f"unexpected result entry '{key}={result[key]}'",
                )
            else:
                self.assertIn(
                    key,
                    expected_keys,
                    f"unexpected result entry '{key}={result[key]}'",
                )

    def check_exitcode(self, result, exitcode, msg=None):
        self.assertEqual(result["exitcode"].raw, exitcode, msg)

    def check_exitcode_extern(self, result, exitcode, msg=None):
        exitcode = util.ProcessExitCode.from_raw(exitcode)
        if exitcode.value is not None:
            self.assertEqual(int(result["returnvalue"]), exitcode.value, msg)
        else:
            self.assertEqual(int(result["exitsignal"]), exitcode.signal, msg)

    def test_command_output(self):
        if not os.path.exists("/bin/echo"):
            self.skipTest("missing /bin/echo")
        (_, output) = self.execute_run("/bin/echo", "TEST_TOKEN")
        self.check_command_in_output(output, "/bin/echo TEST_TOKEN")
        self.assertEqual(output[-1], "TEST_TOKEN", "run output misses command output")
        for line in output[1:-1]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_command_error_output(self):
        if not os.path.exists("/bin/echo"):
            self.skipTest("missing /bin/echo")
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")

        def execute_Run_intern(*args, **kwargs):
            (error_fd, error_filename) = tempfile.mkstemp(".log", "error_", text=True)
            try:
                (_, output_lines) = self.execute_run(
                    *args, error_filename=error_filename, **kwargs
                )
                error_lines = os.read(error_fd, 4096).decode().splitlines()
                return (output_lines, error_lines)
            finally:
                os.close(error_fd)
                os.remove(error_filename)

        (output_lines, error_lines) = execute_Run_intern(
            "/bin/sh", "-c", "/bin/echo ERROR_TOKEN >&2"
        )
        self.assertEqual(
            error_lines[-1], "ERROR_TOKEN", "run error output misses command output"
        )
        for line in output_lines[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")
        for line in error_lines[1:-1]:
            self.assertRegex(line, "^-*$", "unexpected text in run error output")

        (output_lines, error_lines) = execute_Run_intern("/bin/echo", "OUT_TOKEN")
        self.check_command_in_output(output_lines, "/bin/echo OUT_TOKEN")
        self.check_command_in_output(error_lines, "/bin/echo OUT_TOKEN")
        self.assertEqual(
            output_lines[-1], "OUT_TOKEN", "run output misses command output"
        )
        for line in output_lines[1:-1]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")
        for line in error_lines[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run error output")

    def test_command_result(self):
        if not os.path.exists("/bin/echo"):
            self.skipTest("missing /bin/echo")
        (result, _) = self.execute_run("/bin/echo", "TEST_TOKEN")
        self.check_exitcode(result, 0, "exit code of /bin/echo is not zero")
        self.assertAlmostEqual(
            result["walltime"],
            trivial_run_grace_time,
            delta=trivial_run_grace_time,
            msg="walltime of /bin/echo not as expected",
        )
        if "cputime" in result:  # not present without cpuacct cgroup
            self.assertAlmostEqual(
                result["cputime"],
                trivial_run_grace_time,
                delta=trivial_run_grace_time,
                msg="cputime of /bin/echo not as expected",
            )
        self.check_result_keys(result)

    def test_wrong_command(self):
        (result, _) = self.execute_run(
            "/does/not/exist", expect_terminationreason="failed"
        )

    def test_wrong_command_extern(self):
        (result, _) = self.execute_run(
            "/does/not/exist", expect_terminationreason="failed"
        )

    def test_cputime_hardlimit(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        with self.skip_if_logs("Time limit cannot be specified without cpuacct cgroup"):
            (result, output) = self.execute_run(
                "/bin/sh",
                "-c",
                "i=0; while [ $i -lt 10000000 ]; do i=$(($i+1)); done; echo $i",
                hardtimelimit=1,
                expect_terminationreason="cputime",
            )
        self.check_exitcode(result, 9, "exit code of killed process is not 9")
        self.assertAlmostEqual(
            result["walltime"],
            1.4,
            delta=0.5,
            msg="walltime is not approximately the time after which the process should have been killed",
        )
        self.assertAlmostEqual(
            result["cputime"],
            1.4,
            delta=0.5,
            msg="cputime is not approximately the time after which the process should have been killed",
        )

        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_cputime_softlimit(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        with self.skip_if_logs(
            "Soft time limit cannot be specified without cpuacct cgroup"
        ):
            (result, output) = self.execute_run(
                "/bin/sh",
                "-c",
                "i=0; while [ $i -lt 10000000 ]; do i=$(($i+1)); done; echo $i",
                softtimelimit=1,
                expect_terminationreason="cputime-soft",
            )
        self.check_exitcode(result, 15, "exit code of killed process is not 15")
        self.assertAlmostEqual(
            result["walltime"],
            4,
            delta=3,
            msg="walltime is not approximately the time after which the process should have been killed",
        )
        self.assertAlmostEqual(
            result["cputime"],
            4,
            delta=3,
            msg="cputime is not approximately the time after which the process should have been killed",
        )

        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_walltime_limit(self):
        if not os.path.exists("/bin/sleep"):
            self.skipTest("missing /bin/sleep")
        (result, output) = self.execute_run(
            "/bin/sleep", "10", walltimelimit=1, expect_terminationreason="walltime"
        )

        self.check_exitcode(result, 9, "exit code of killed process is not 9")
        self.assertAlmostEqual(
            result["walltime"],
            4,
            delta=3,
            msg="walltime is not approximately the time after which the process should have been killed",
        )
        if "cputime" in result:  # not present without cpuacct cgroup
            self.assertAlmostEqual(
                result["cputime"],
                trivial_run_grace_time,
                delta=trivial_run_grace_time,
                msg="cputime of /bin/sleep is not approximately zero",
            )

        self.check_command_in_output(output, "/bin/sleep 10")
        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_cputime_walltime_limit(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        with self.skip_if_logs("Time limit cannot be specified without cpuacct cgroup"):
            (result, output) = self.execute_run(
                "/bin/sh",
                "-c",
                "i=0; while [ $i -lt 10000000 ]; do i=$(($i+1)); done; echo $i",
                hardtimelimit=1,
                walltimelimit=5,
                expect_terminationreason="cputime",
            )

        self.check_exitcode(result, 9, "exit code of killed process is not 9")
        self.assertAlmostEqual(
            result["walltime"],
            1.4,
            delta=0.5,
            msg="walltime is not approximately the time after which the process should have been killed",
        )
        self.assertAlmostEqual(
            result["cputime"],
            1.4,
            delta=0.5,
            msg="cputime is not approximately the time after which the process should have been killed",
        )

        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_all_timelimits(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        with self.skip_if_logs("Time limit cannot be specified without cpuacct cgroup"):
            (result, output) = self.execute_run(
                "/bin/sh",
                "-c",
                "i=0; while [ $i -lt 10000000 ]; do i=$(($i+1)); done; echo $i",
                softtimelimit=1,
                hardtimelimit=2,
                walltimelimit=5,
                expect_terminationreason="cputime-soft",
            )

        self.check_exitcode(result, 15, "exit code of killed process is not 15")
        self.assertAlmostEqual(
            result["walltime"],
            1.4,
            delta=0.5,
            msg="walltime is not approximately the time after which the process should have been killed",
        )
        self.assertAlmostEqual(
            result["cputime"],
            1.4,
            delta=0.5,
            msg="cputime is not approximately the time after which the process should have been killed",
        )

        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_input_is_redirected_from_devnull(self):
        if not os.path.exists("/bin/cat"):
            self.skipTest("missing /bin/cat")
        (result, output) = self.execute_run("/bin/cat", walltimelimit=1)

        self.check_exitcode(result, 0, "exit code of process is not 0")
        self.assertAlmostEqual(
            result["walltime"],
            trivial_run_grace_time,
            delta=trivial_run_grace_time,
            msg='walltime of "/bin/cat < /dev/null" is not approximately zero',
        )
        if "cputime" in result:  # not present without cpuacct cgroup
            self.assertAlmostEqual(
                result["cputime"],
                trivial_run_grace_time,
                delta=trivial_run_grace_time,
                msg='cputime of "/bin/cat < /dev/null" is not approximately zero',
            )
        self.check_result_keys(result)

        self.check_command_in_output(output, "/bin/cat")
        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_input_is_redirected_from_file(self):
        if not os.path.exists("/bin/cat"):
            self.skipTest("missing /bin/cat")
        with tempfile.TemporaryFile() as tmp:
            tmp.write(b"TEST_TOKEN")
            tmp.flush()
            tmp.seek(0)
            (result, output) = self.execute_run("/bin/cat", stdin=tmp, walltimelimit=1)

        self.check_exitcode(result, 0, "exit code of process is not 0")
        self.assertAlmostEqual(
            result["walltime"],
            trivial_run_grace_time,
            delta=trivial_run_grace_time,
            msg='walltime of "/bin/cat < /dev/null" is not approximately zero',
        )
        if "cputime" in result:  # not present without cpuacct cgroup
            self.assertAlmostEqual(
                result["cputime"],
                trivial_run_grace_time,
                delta=trivial_run_grace_time,
                msg='cputime of "/bin/cat < /dev/null" is not approximately zero',
            )
        self.check_result_keys(result)

        self.check_command_in_output(output, "/bin/cat")
        self.assertEqual(output[-1], "TEST_TOKEN", "run output misses command output")
        for line in output[1:-1]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_input_is_redirected_from_stdin(self):
        if not os.path.exists("/bin/cat"):
            self.skipTest("missing /bin/cat")

        (output_fd, output_filename) = tempfile.mkstemp(".log", "output_", text=True)
        cmd = self.get_runexec_cmdline(
            "--input",
            "-",
            "--walltime",
            "1",
            "/bin/cat",
            output_filename=output_filename,
        )
        try:
            process = subprocess.Popen(
                args=cmd,
                stdin=subprocess.PIPE,
                stdout=subprocess.PIPE,
                stderr=subprocess.DEVNULL,
                universal_newlines=True,
            )
            try:
                runexec_output, unused_err = process.communicate("TEST_TOKEN")
            except BaseException:
                # catch everything, we re-raise
                process.kill()
                process.wait()
                raise
            retcode = process.poll()
            if retcode:
                print(runexec_output)
                raise subprocess.CalledProcessError(retcode, cmd, output=runexec_output)

            output = os.read(output_fd, 4096).decode().splitlines()
        finally:
            os.close(output_fd)
            os.remove(output_filename)

        result = {
            key.strip(): value.strip()
            for (key, _, value) in (
                line.partition("=") for line in runexec_output.splitlines()
            )
        }
        self.check_exitcode_extern(result, 0, "exit code of process is not 0")
        self.assertAlmostEqual(
            float(result["walltime"].rstrip("s")),
            trivial_run_grace_time,
            delta=trivial_run_grace_time,
            msg='walltime of "/bin/cat < /dev/null" is not approximately zero',
        )
        if "cputime" in result:  # not present without cpuacct cgroup
            self.assertAlmostEqual(
                float(result["cputime"].rstrip("s")),
                trivial_run_grace_time,
                delta=trivial_run_grace_time,
                msg='cputime of "/bin/cat < /dev/null" is not approximately zero',
            )
        self.check_result_keys(result, "returnvalue")

        self.check_command_in_output(output, "/bin/cat")
        self.assertEqual(output[-1], "TEST_TOKEN", "run output misses command output")
        for line in output[1:-1]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_append_environment_variable(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        (_, output) = self.execute_run("/bin/sh", "-c", "echo $PATH")
        path = output[-1]
        (_, output) = self.execute_run(
            "/bin/sh",
            "-c",
            "echo $PATH",
            environments={"additionalEnv": {"PATH": ":TEST_TOKEN"}},
        )
        self.assertEqual(output[-1], path + ":TEST_TOKEN")

    def test_new_environment_variable(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        (_, output) = self.execute_run(
            "/bin/sh", "-c", "echo $PATH", environments={"newEnv": {"PATH": "/usr/bin"}}
        )
        self.assertEqual(output[-1], "/usr/bin")

    def test_stop_run(self):
        if not os.path.exists("/bin/sleep"):
            self.skipTest("missing /bin/sleep")
        thread = _StopRunThread(1, self.runexecutor)
        thread.start()
        (result, output) = self.execute_run(
            "/bin/sleep", "10", expect_terminationreason="killed"
        )
        thread.join()

        self.check_exitcode(result, 9, "exit code of killed process is not 9")
        self.assertAlmostEqual(
            result["walltime"],
            1,
            delta=0.5,
            msg="walltime is not approximately the time after which the process should have been killed",
        )
        if "cputime" in result:  # not present without cpuacct cgroup
            self.assertAlmostEqual(
                result["cputime"],
                trivial_run_grace_time,
                delta=trivial_run_grace_time,
                msg="cputime of /bin/sleep is not approximately zero",
            )

        self.check_command_in_output(output, "/bin/sleep 10")
        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_reduce_file_size_empty_file(self):
        with tempfile.NamedTemporaryFile() as tmp:
            runexecutor._reduce_file_size_if_necessary(tmp.name, 0)
            self.assertEqual(os.path.getsize(tmp.name), 0)

    def test_reduce_file_size_empty_file2(self):
        with tempfile.NamedTemporaryFile() as tmp:
            runexecutor._reduce_file_size_if_necessary(tmp.name, 500)
            self.assertEqual(os.path.getsize(tmp.name), 0)

    def test_reduce_file_size_long_line_not_truncated(self):
        with tempfile.NamedTemporaryFile(mode="wt") as tmp:
            content = "Long line " * 500
            tmp.write(content)
            tmp.flush()
            runexecutor._reduce_file_size_if_necessary(tmp.name, 500)
            with open(tmp.name, "rt") as tmp2:
                self.assertMultiLineEqual(tmp2.read(), content)

    REDUCE_WARNING_MSG = (
        "WARNING: YOUR LOGFILE WAS TOO LONG, SOME LINES IN THE MIDDLE WERE REMOVED."
    )
    REDUCE_OVERHEAD = 100

    def test_reduce_file_size(self):
        with tempfile.NamedTemporaryFile(mode="wt") as tmp:
            line = "Some text\n"
            tmp.write(line * 500)
            tmp.flush()
            limit = 500
            runexecutor._reduce_file_size_if_necessary(tmp.name, limit)
            self.assertLessEqual(
                os.path.getsize(tmp.name), limit + self.REDUCE_OVERHEAD
            )
            with open(tmp.name, "rt") as tmp2:
                new_content = tmp2.read()
        self.assertIn(self.REDUCE_WARNING_MSG, new_content)
        self.assertTrue(new_content.startswith(line))
        self.assertTrue(new_content.endswith(line))

    def test_reduce_file_size_limit_zero(self):
        with tempfile.NamedTemporaryFile(mode="wt") as tmp:
            line = "Some text\n"
            tmp.write(line * 500)
            tmp.flush()
            runexecutor._reduce_file_size_if_necessary(tmp.name, 0)
            self.assertLessEqual(os.path.getsize(tmp.name), self.REDUCE_OVERHEAD)
            with open(tmp.name, "rt") as tmp2:
                new_content = tmp2.read()
        self.assertIn(self.REDUCE_WARNING_MSG, new_content)
        self.assertTrue(new_content.startswith(line))

    def test_append_crash_dump_info(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        (result, output) = self.execute_run(
            "/bin/sh",
            "-c",
            'echo "# An error report file with more information is saved as:";'
            'echo "# $(pwd)/hs_err_pid_1234.txt";'
            "echo TEST_TOKEN > hs_err_pid_1234.txt;"
            "exit 2",
        )
        self.assertEqual(
            output[-1], "TEST_TOKEN", "log file misses content from crash dump file"
        )

    def test_integration(self):
        if not os.path.exists("/bin/echo"):
            self.skipTest("missing /bin/echo")
        (result, output) = self.execute_run_extern("/bin/echo", "TEST_TOKEN")
        self.check_exitcode_extern(result, 0, "exit code of /bin/echo is not zero")
        self.check_result_keys(result, "returnvalue")

        self.check_command_in_output(output, "/bin/echo TEST_TOKEN")
        self.assertEqual(output[-1], "TEST_TOKEN", "run output misses command output")
        for line in output[1:-1]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_home_and_tmp_is_separate(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        (result, output) = self.execute_run("/bin/sh", "-c", "echo $HOME $TMPDIR")
        self.check_exitcode(result, 0, "exit code of /bin/sh is not zero")
        self.assertRegex(
            output[-1],
            "/BenchExec_run_[^/]*/home .*/BenchExec_run_[^/]*/tmp",
            "HOME or TMPDIR variable does not contain expected temporary directory",
        )

    def test_temp_dirs_are_removed(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        (result, output) = self.execute_run("/bin/sh", "-c", "echo $HOME $TMPDIR")
        self.check_exitcode(result, 0, "exit code of /bin/sh is not zero")
        home_dir = output[-1].split(" ")[0]
        temp_dir = output[-1].split(" ")[1]
        self.assertFalse(
            os.path.exists(home_dir),
            f"temporary home directory {home_dir} was not cleaned up",
        )
        self.assertFalse(
            os.path.exists(temp_dir),
            f"temporary temp directory {temp_dir} was not cleaned up",
        )

    def test_home_is_writable(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        (result, output) = self.execute_run("/bin/sh", "-c", "touch $HOME/TEST_FILE")
        self.check_exitcode(
            result,
            0,
            f"Failed to write to $HOME/TEST_FILE, output was\n{output}",
        )

    def test_no_cleanup_temp(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        self.setUp(cleanup_temp_dir=False)  # create RunExecutor with desired parameter
        (result, output) = self.execute_run(
            "/bin/sh", "-c", 'echo "$TMPDIR"; echo "" > "$TMPDIR/test"'
        )
        self.check_exitcode(result, 0, "exit code of /bin/sh is not zero")
        temp_dir = output[-1]
        test_file = os.path.join(temp_dir, "test")
        subprocess.run(["test", "-f", test_file], check=True)
        self.assertEqual(
            "tmp", os.path.basename(temp_dir), "unexpected name of temp dir"
        )
        self.assertNotEqual(
            "/tmp", temp_dir, "temp dir should not be the global temp dir"
        )
        subprocess.run(["rm", "-r", os.path.dirname(temp_dir)], check=True)

    def test_require_cgroup_invalid(self):
        with self.assertLogs(level=logging.ERROR) as log:
            with self.assertRaises(SystemExit):
                RunExecutor(additional_cgroup_subsystems=["invalid"])

        self.assertIn(
            'Cgroup subsystem "invalid" was required but is not available',
            "\n".join(log.output),
        )

    def test_require_cgroup_cpu(self):
        try:
            self.setUp(additional_cgroup_subsystems=["cpu"])
        except SystemExit as e:
            self.skipTest(e)
        if not os.path.exists("/bin/cat"):
            self.skipTest("missing /bin/cat")
        (result, output) = self.execute_run("/bin/cat", "/proc/self/cgroup")
        self.check_exitcode(result, 0, "exit code of /bin/cat is not zero")
        for line in output:
            if re.match(r"^[0-9]*:([^:]*,)?cpu(,[^:]*)?:/(.*/)?benchmark_.*$", line):
                return  # Success
        self.fail("Not in expected cgroup for subsystem cpu:\n" + "\n".join(output))

    def test_set_cgroup_cpu_shares(self):
        if not os.path.exists("/bin/echo"):
            self.skipTest("missing /bin/echo")
        try:
            self.setUp(additional_cgroup_subsystems=["cpu"])
        except SystemExit as e:
            self.skipTest(e)
        (result, _) = self.execute_run(
            "/bin/echo", cgroupValues={("cpu", "shares"): 42}
        )
        self.check_exitcode(result, 0, "exit code of /bin/echo is not zero")
        # Just assert that execution was successful,
        # testing that the value was actually set is much more difficult.

    def test_nested_runexec(self):
        if not os.path.exists("/bin/echo"):
            self.skipTest("missing /bin/echo")
        self.setUp(
            dir_modes={
                # Do not mark /home hidden, would fail with python from virtualenv
                "/": containerexecutor.DIR_READ_ONLY,
                "/tmp": containerexecutor.DIR_FULL_ACCESS,  # for inner_output_file
                "/sys/fs/cgroup": containerexecutor.DIR_FULL_ACCESS,
            }
        )
        inner_args = ["--", "/bin/echo", "TEST_TOKEN"]

        with tempfile.NamedTemporaryFile(
            mode="r", prefix="inner_output_", suffix=".log"
        ) as inner_output_file:
            inner_cmdline = self.get_runexec_cmdline(
                *inner_args, output_filename=inner_output_file.name
            )
            outer_result, outer_output = self.execute_run(*inner_cmdline)
            inner_output = inner_output_file.read().strip().splitlines()

        logging.info("Outer output:\n%s", "\n".join(outer_output))
        logging.info("Inner output:\n%s", "\n".join(inner_output))
        self.check_result_keys(outer_result, "returnvalue")
        self.check_exitcode(outer_result, 0, "exit code of inner runexec is not zero")
        self.check_command_in_output(inner_output, "/bin/echo TEST_TOKEN")
        self.assertEqual(
            inner_output[-1], "TEST_TOKEN", "run output misses command output"
        )

    def test_starttime(self):
        if not os.path.exists("/bin/echo"):
            self.skipTest("missing /bin/echo")
        before = util.read_local_time()
        (result, _) = self.execute_run("/bin/echo")
        after = util.read_local_time()
        self.check_result_keys(result)
        run_starttime = result["starttime"]
        self.assertIsNotNone(run_starttime.tzinfo, "start time is not a local time")
        self.assertLessEqual(before, run_starttime)
        self.assertLessEqual(run_starttime, after)

    def test_frozen_process(self):
        # https://github.com/sosy-lab/benchexec/issues/840
        if not os.path.exists("/bin/sleep"):
            self.skipTest("missing /bin/sleep")
        if not os.path.exists("/sys/fs/cgroup/freezer"):
            self.skipTest("missing freezer cgroup")
        self.setUp(
            dir_modes={
                "/": containerexecutor.DIR_READ_ONLY,
                "/home": containerexecutor.DIR_HIDDEN,
                "/tmp": containerexecutor.DIR_HIDDEN,
                "/sys/fs/cgroup": containerexecutor.DIR_FULL_ACCESS,
            }
        )
        (result, output) = self.execute_run(
            "/bin/sh",
            "-c",
            """#!/bin/sh
# create process, move it to sub-cgroup, and freeze it
set -eu

cgroup="/sys/fs/cgroup/freezer/$(grep freezer /proc/self/cgroup | cut -f 3 -d :)"
mkdir "$cgroup/tmp"

sleep 10 &
child_pid=$!

echo $child_pid > "$cgroup/tmp/tasks"
echo FROZEN > "$cgroup/tmp/freezer.state"
# remove permissions in order to test our handling of this case
chmod 000 "$cgroup/tmp/freezer.state"
chmod 000 "$cgroup/tmp/tasks"
chmod 000 "$cgroup/tmp"
echo FROZEN
wait $child_pid
""",
            walltimelimit=1,
            expect_terminationreason="walltime",
        )
        self.check_exitcode(result, 9, "exit code of killed process is not 9")
        self.assertAlmostEqual(
            result["walltime"],
            2,
            delta=0.5,
            msg="walltime is not approximately the time after which the process should have been killed",
        )
        self.assertEqual(
            output[-1],
            "FROZEN",
            "run output misses command output and was not executed properly",
        )

class TestRunExecutorWithContainer(TestRunExecutor):
    def setUp(self, *args, **kwargs):
        try:
            container.execute_in_namespace(lambda: 0)
        except OSError as e:
            self.skipTest(f"Namespaces not supported: {os.strerror(e.errno)}")

        dir_modes = kwargs.pop(
            "dir_modes",
            {
                "/": containerexecutor.DIR_READ_ONLY,
                "/home": containerexecutor.DIR_HIDDEN,
                "/tmp": containerexecutor.DIR_HIDDEN,
            },
        )

        self.runexecutor = RunExecutor(
            *args, use_namespaces=True, dir_modes=dir_modes, **kwargs
        )

    def get_runexec_cmdline(self, *args, **kwargs):
        return [
            "python3",
            runexec,
            "--container",
            "--read-only-dir",
            "/",
            "--hidden-dir",
            "/home",
            "--hidden-dir",
            "/tmp",
            "--dir",
            "/tmp",
            "--output",
            kwargs["output_filename"],
        ] + list(args)

    def execute_run(self, *args, **kwargs):
        return super(TestRunExecutorWithContainer, self).execute_run(
            workingDir="/tmp", *args, **kwargs
        )

    def test_home_and_tmp_is_separate(self):
        self.skipTest("not relevant in container")

    def test_temp_dirs_are_removed(self):
        self.skipTest("not relevant in container")

    def test_no_cleanup_temp(self):
        self.skipTest("not relevant in container")

    def check_result_files(
        self, shell_cmd, result_files_patterns, expected_result_files
    ):
        output_dir = tempfile.mkdtemp("", "output_")
        try:
            result, output = self.execute_run(
                "/bin/sh",
                "-c",
                shell_cmd,
                output_dir=output_dir,
                result_files_patterns=result_files_patterns,
            )
            output_str = "\n".join(output)
            self.assertEqual(
                result["exitcode"].value,
                0,
                f"exit code of {' '.join(shell_cmd)} is not zero,\n"
                f"result was {result!r},\noutput was\n{output_str}",
            )
            result_files = []
            for root, _unused_dirs, files in os.walk(output_dir):
                for file in files:
                    result_files.append(
                        os.path.relpath(os.path.join(root, file), output_dir)
                    )
            expected_result_files.sort()
            result_files.sort()
            self.assertListEqual(
                result_files,
                expected_result_files,
                f"\nList of retrieved result files differs from expected list,\n"
                f"result was {result!r},\noutput was\n{output_str}",
            )
        finally:
            shutil.rmtree(output_dir, ignore_errors=True)

    def test_result_file_simple(self):
        self.check_result_files("echo TEST_TOKEN > TEST_FILE", ["."], ["TEST_FILE"])

    def test_result_file_recursive(self):
        self.check_result_files(
            "mkdir TEST_DIR; echo TEST_TOKEN > TEST_DIR/TEST_FILE",
            ["."],
            ["TEST_DIR/TEST_FILE"],
        )

    def test_result_file_multiple(self):
        self.check_result_files(
            "echo TEST_TOKEN > TEST_FILE; echo TEST_TOKEN > TEST_FILE2",
            ["."],
            ["TEST_FILE", "TEST_FILE2"],
        )

    def test_result_file_symlink(self):
        self.check_result_files(
            "echo TEST_TOKEN > TEST_FILE; ln -s TEST_FILE TEST_LINK",
            ["."],
            ["TEST_FILE"],
        )

    def test_result_file_no_match(self):
        self.check_result_files("echo TEST_TOKEN > TEST_FILE", ["NO_MATCH"], [])

    def test_result_file_no_pattern(self):
        self.check_result_files("echo TEST_TOKEN > TEST_FILE", [], [])

    def test_result_file_empty_pattern(self):
        self.assertRaises(
            ValueError,
            lambda: self.check_result_files("echo TEST_TOKEN > TEST_FILE", [""], []),
        )

    def test_result_file_partial_match(self):
        self.check_result_files(
            "echo TEST_TOKEN > TEST_FILE; mkdir TEST_DIR; echo TEST_TOKEN > TEST_DIR/TEST_FILE",
            ["TEST_DIR"],
            ["TEST_DIR/TEST_FILE"],
        )

    def test_result_file_multiple_patterns(self):
        self.check_result_files(
            "echo TEST_TOKEN > TEST_FILE; "
            "echo TEST_TOKEN > TEST_FILE2; "
            "mkdir TEST_DIR; "
            "echo TEST_TOKEN > TEST_DIR/TEST_FILE; ",
            ["TEST_FILE", "TEST_DIR/TEST_FILE"],
            ["TEST_FILE", "TEST_DIR/TEST_FILE"],
        )

    def test_result_file_wildcard(self):
        self.check_result_files(
            "echo TEST_TOKEN > TEST_FILE; "
            "echo TEST_TOKEN > TEST_FILE2; "
            "echo TEST_TOKEN > TEST_NOFILE; ",
            ["TEST_FILE*"],
            ["TEST_FILE", "TEST_FILE2"],
        )

    def test_result_file_absolute_pattern(self):
        self.check_result_files("echo TEST_TOKEN > TEST_FILE", ["/"], ["tmp/TEST_FILE"])

    def test_result_file_absolute_and_pattern(self):
        self.check_result_files(
            "echo TEST_TOKEN > TEST_FILE; mkdir TEST_DIR; echo TEST_TOKEN > TEST_DIR/TEST_FILE",
            ["TEST_FILE", "/tmp/TEST_DIR"],
            ["tmp/TEST_FILE", "tmp/TEST_DIR/TEST_FILE"],
        )

    def test_result_file_relative_traversal(self):
        self.check_result_files(
            "echo TEST_TOKEN > TEST_FILE", ["foo/../TEST_FILE"], ["TEST_FILE"]
        )

    def test_result_file_illegal_relative_traversal(self):
        self.assertRaises(
            ValueError,
            lambda: self.check_result_files(
                "echo TEST_TOKEN > TEST_FILE", ["foo/../../bar"], []
            ),
        )

    def test_result_file_recursive_pattern(self):
        self.check_result_files(
            "mkdir -p TEST_DIR/TEST_DIR; "
            "echo TEST_TOKEN > TEST_FILE.txt; "
            "echo TEST_TOKEN > TEST_DIR/TEST_FILE.txt; "
            "echo TEST_TOKEN > TEST_DIR/TEST_DIR/TEST_FILE.txt; ",
            ["**/*.txt"],
            [
                "TEST_FILE.txt",
                "TEST_DIR/TEST_FILE.txt",
                "TEST_DIR/TEST_DIR/TEST_FILE.txt",
            ],
        )

    def test_result_file_log_limit(self):
        file_count = containerexecutor._MAX_RESULT_FILE_LOG_COUNT + 10
        with self.assertLogs(level=logging.DEBUG) as log:
            # Check that all output files are transferred ...
            self.check_result_files(
                f"for i in $(seq 1 {file_count}); do touch $i; done",
                ["*"],
                list(map(str, range(1, file_count + 1))),
            )
        # ... but not all output files are logged ...
        self.assertEqual(
            len([msg for msg in log.output if "Transferring output file" in msg]),
            containerexecutor._MAX_RESULT_FILE_LOG_COUNT,
        )
        # ... and the final count is correct.
        count_msg = next(msg for msg in log.output if " output files matched" in msg)
        self.assertIn(f"{file_count} output files matched", count_msg)

    def test_file_count_limit(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        self.setUp(container_tmpfs=False)  # create RunExecutor with desired parameter
        filehierarchylimit._CHECK_INTERVAL_SECONDS = 0.1
        (result, output) = self.execute_run(
            "/bin/sh",
            "-c",
            "for i in $(seq 1 10000); do touch $i; done",
            files_count_limit=100,
            result_files_patterns=None,
            expect_terminationreason="files-count",
        )

        self.check_exitcode(result, 9, "exit code of killed process is not 15")

        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_file_size_limit(self):
        if not os.path.exists("/bin/sh"):
            self.skipTest("missing /bin/sh")
        self.setUp(container_tmpfs=False)  # create RunExecutor with desired parameter
        filehierarchylimit._CHECK_INTERVAL_SECONDS = 0.1
        (result, output) = self.execute_run(
            "/bin/sh",
            "-c",
            "for i in $(seq 1 100000); do echo $i >> TEST_FILE; done",
            files_size_limit=100,
            result_files_patterns=None,
            expect_terminationreason="files-size",
        )

        self.check_exitcode(result, 9, "exit code of killed process is not 15")

        for line in output[1:]:
            self.assertRegex(line, "^-*$", "unexpected text in run output")

    def test_path_with_space(self):
        temp_dir = tempfile.mkdtemp(prefix="BenchExec test")
        try:
            # create RunExecutor with desired parameter
            self.setUp(
                dir_modes={
                    "/": containerexecutor.DIR_READ_ONLY,
                    "/home": containerexecutor.DIR_HIDDEN,
                    "/tmp": containerexecutor.DIR_HIDDEN,
                    temp_dir: containerexecutor.DIR_FULL_ACCESS,
                }
            )
            temp_file = os.path.join(temp_dir, "TEST_FILE")
            result, output = self.execute_run(
                "/bin/sh", "-c", f"echo TEST_TOKEN > '{temp_file}'"
            )
            self.check_result_keys(result)
            self.check_exitcode(result, 0, "exit code of process is not 0")
            self.assertTrue(
                os.path.exists(temp_file),
                f"File '{temp_file}' not created, output was:\n" + "\n".join(output),
            )
            with open(temp_file, "r") as f:
                self.assertEqual(f.read().strip(), "TEST_TOKEN")
        finally:
            shutil.rmtree(temp_dir)

    def test_uptime_with_lxcfs(self):
        if not os.path.exists("/var/lib/lxcfs/proc"):
            self.skipTest("missing lxcfs")
        result, output = self.execute_run("cat", "/proc/uptime")
        self.check_result_keys(result)
        self.check_exitcode(result, 0, "exit code for reading uptime is not zero")
        uptime = float(output[-1].split(" ")[0])
        self.assertLessEqual(
            uptime, 10, f"Uptime {uptime}s unexpectedly high in container"
        )

    def test_uptime_without_lxcfs(self):
        if not os.path.exists("/var/lib/lxcfs/proc"):
            self.skipTest("missing lxcfs")
        # create RunExecutor with desired parameter
        self.setUp(container_system_config=False)
        result, output = self.execute_run("cat", "/proc/uptime")
        self.check_result_keys(result)
        self.check_exitcode(result, 0, "exit code for reading uptime is not zero")
        uptime = float(output[-1].split(" ")[0])
        # If uptime was less than 10s, LXCFS probably was in use
        self.assertGreaterEqual(
            uptime, 10, f"Uptime {uptime}s unexpectedly low in container"
        )

class _StopRunThread(threading.Thread):
    def __init__(self, delay, runexecutor):
        super(_StopRunThread, self).__init__()
        self.daemon = True
        self.delay = delay
        self.runexecutor = runexecutor

    def run(self):
        time.sleep(self.delay)
        self.runexecutor.stop()

class TestRunExecutorUnits(unittest.TestCase):
    """unit tests for parts of RunExecutor"""

    def test_get_debug_output_with_error_report_and_invalid_utf8(self):
        invalid_utf8 = b"\xFF"
        with tempfile.NamedTemporaryFile(mode="w+b", delete=False) as report_file:
            with tempfile.NamedTemporaryFile(mode="w+b") as output:
                output_content = f"""Dummy output
# An error report file with more information is saved as:
# {report_file.name}
More output
""".encode()  # noqa: E800 false alarm
                report_content = b"Report output\nMore lines"
                output_content += invalid_utf8
                report_content += invalid_utf8

                output.write(output_content)
                output.flush()
                output.seek(0)
                report_file.write(report_content)
                report_file.flush()

                runexecutor._get_debug_output_after_crash(output.name, "")

                self.assertFalse(os.path.exists(report_file.name))
                self.assertEqual(output.read(), output_content + report_content)


text:
Don't Be Fooled: New York and Virginia are Putting Patients First
By: Noel León, Former Senior CounselPosted on February 5, 2019 Issues: Abortion Health Care & Reproductive Rights Religious Refusals
On January 22, New York acted to protect patients who need a range of care during pregnancy, including abortion, by passing the Reproductive Health Act. This law ensures that people in New York can safely seek the full range of care that they need throughout every stage of pregnancy. It means that when a patient experiences serious complications later in pregnancy, her health care providers can treat her with the best and safest care based on her specific medical circumstances, without medically unnecessary requirements or political interference.
But many anti-abortion organizations and advocates – and even President Trump – are using inflammatory language to misrepresent the NY Reproductive Health Act, creating a fake controversy intended to shame and stigmatize both those who need abortions and their health care providers. What's more, this misleading rhetoric about the NY Reproductive Health Act is being manipulated to raise opposition to bills in other states that would protect patient health.
People who have needed abortion care later in pregnancy are speaking out in response to these egregious mischaracterizations of bills that protect patient health, asking lawmakers to have the compassion to hear their stories. It is crucial for women's health that the public and lawmakers listen to the women who have needed abortion care, instead of letting themselves be misled by cruel and inaccurate rhetoric intended to stigmatize people who have abortion at all costs.
The NY Reproductive Health Act means doctors can treat patients with the best medical care
Before the NY Reproductive Health Act, a woman in New York who faced complications later in pregnancy was forced to make decisions about her health that may not have been what she or her provider wanted. People who needed abortion care had to travel out of state to obtain health care that they should have been able to access at home from their own provider. For example, Erika Christensen was pregnant and living in New York when she faced a devastating fetal diagnosis later in pregnancy. She and her doctor knew that her best option was an abortion, but because of New York law, Erika had to fly to across the country in order to receive care. Many others have also faced difficult complications later in pregnancy and could not access treatment in New York. Those who cannot meet the cost and burden of travel, which can be enormous, face potentially life-threatening consequences.
The NY Reproductive Health Act will change that. Now women like Erika and their providers have available to them the full range of medical treatment options – including c-section, induction, or abortion. And they can make the decision that is right for them, based on what's best for those specific medical circumstances. The Reproductive Health Act also enables licensed, qualified non-physician clinicians to provide abortion earlier in pregnancy. And it removes the threat of criminal prosecution for health care providers by moving abortion from the criminal code to the public health code. It also repeals an outdated and unconstitutional law that criminalized women who try to end a pregnancy on their own.
All in all, this is a law that is about protecting and trusting women and the decisions they make, and ensuring that health care providers are not punished for or deterred from properly caring for their patients.
Opponents of abortion are using this faux controversy to mislead people about bills in other states
In Virginia, HB 2491,which would repeal several medically unnecessary requirements on abortion providers and those seeking abortion, is similarly being misrepresented. Under current law, in order for someone with pregnancy complications to receive an abortion later in pregnancy, a doctor has to get two additional doctors to certify that she is at risk for death or that her mental or physical health is "substantially and irremediably" at risk. Virginia's bill would repeal these burdensome, unnecessary requirements, putting trust back where it belongs: with women and their health care providers.
Laws that place medically unnecessary requirements on abortion providers, like those currently in effect in Virginia, are intended to shame and block people seeking abortion and their providers. These laws harm women. Virginia's bill would be an enormous step forward to remove some of the unnecessary and stigmatizing barriers facing people who need abortion care.
Lawmakers should not be fooled by misleading rhetoric
Bills like the NY Reproductive Health Act and Virginia's HB 2491 are about making sure that a patient's health and a provider's medical expertise drive medical decision-making at every point in pregnancy. Make no mistake—those who are speaking out against these bills don't have women's interests in mind. They are purposefully misrepresenting what these bills would do in order to stoke fake outrage. Lawmakers should not be fooled by sensationalized anti-abortion responses to measures that improve access to abortion and support women who experience complications later in pregnancy. Patients' health and dignity should never be compromised by political interference.
We urge lawmakers to reject the misleading rhetoric being spun by those whose true motives are to ban abortion completely. Instead, side with women who need compassionate, medically informed care at all stages of pregnancy, and with the doctors and nurses who are dedicated to providing that care to their patients.
Celebrating the Wins: A Reminder the ACA Is Working


This user has so far shared a total of 207 links, started a total of 3 discussions and submitted a total of 660 comments.
Submissions: This user has upvoted 5997 and downvoted 5 submissions.
Comments: This user has upvoted 406 and downvoted 7 comments.
Wow, suicide by "multiple blunt force injuries"
Is this fake or not ?


St Petersburg's Pulkovo Airport (LED), Russia's fourth largest airport by passenger numbers, is struggling to increase its transfer traffic.
Of the 18.1 million passengers which passed through the airport last year, only four per cent were transit travellers.
Rossiya Airlines, which became a subsidiary of the Aeroflot Group in 2014, remains the main generator of transfer traffic (87 per cent in total) by carrying some 500,000 transfer passengers on its flights in 2018, the majority of whom were travelling from Russian cities to European destinations, the airline reveals. Other contributors to Pulkovo's transfer business are carriers S7 Airlines, Ural Airlines and Nordavia.
Pulkovo, which is operated by Northern Capital Gateway (NCG) has, for more than a decade, harboured ambitions to become a significant hub. To keep this dream alive NCG has implemented a number of projects including, constructing a new terminal to bring domestic and international flights under one roof, as they were previously handled in different terminals separated by two runways. But enticing a major airline to base its operations at Pulkovo, a prerequisite for a successful hub, remains a sticking point.
Some hope arose when Transaero Airlines, then Russia's second largest air carrier, moved part of its operations to Pulkovo, but it soon left the market. Meanwhile, Rossiya Airlines appears to be in no hurry to establish hub operations at the airport just 660 km from its parent Aeroflot's main Moscow Sheremetyevo nest.
NCG even made an attempt to go it alone, supported by the administration of St Petersburg. In addition to proffering a number of incentives to attract airlines, the company has, since 2015, implemented and promoted an M2 programme, also referred to as Closed Fare, which is a platform that allows the airport to offer passengers connections between flights on airlines that do not have interline agreements.
In this scenario, the airport takes responsibility for arranging the through fare and handling the passengers' baggage transfers between the two legs. The scheme was developed by Russia's Transport Clearing House.
Other NCG initiatives include proactively working with the Russian government to introduce an open-skies policy in Pulkovo and also offer visa-free periods for foreign travellers.
However, strong competition from nearby large hubs such as Moscow's Shremetyevo, Domodedovo and Vnukovo, as well as from Helsinki in Finland, and also the developing airports located in the Baltic states, are impeding Pulkovo's progress, as much as Rossiya's reluctance to go with NCG's plans.
Rossiya bases half of its 60-strong fleet at Pulkovo. Last year it carried 5.5 million passengers through the St Petersburg airport.


text:
Tag: clubbing
Suit Up Saturday – Minnesota's Furry Club night gives a Q&A for the Furclub Survey.
Furclubbing: "A repeat/regular nightclub event by furries for furries." It's a New Thing that's been spreading since the late 2000's. This kind of dance party is independent from cons. This builds on the growth of cons, and takes things farther. It's more ambitious than events that happen once, house parties, or informal meets. Those can stay inner-focused for friends who already know each other. This brings partnership with new kinds of venues, and new supportive interest in the kind of events they host. It crosses a line to public space. A stranger may walk in off the street to discover their new favorite thing. It encourages new blood, and crossover to other scenes. It makes subculture thrive. It's a movement!
See the list of parties at The Furclub survey. Any party that gives a Q&A will get a featured article. Featured here is a new event in Minneapolis, Minnesota. It's yet another one inspired by Frolic in San Francisco, the seed for many new ones across the USA. Organizer Rachel introduces the party:
Suit Up Saturday (2016)
Website: www.suitupsaturday.com
Twitter: @suitupsaturday – "Minnesota's First and Only FURRY Club Night"
Facebook: fan page
See also MNFurs on Facebook
My name is Rachel, that's my real name and furry name too. I've been a furry for about 15 years now, and I recently moved back to Minnesota from San Francisco, where I lived for 10 years and went to college. When in San Francisco I frequently went to FROLIC, which is run by some friends of mine, and I began to miss it.
While Minnesota has an amazing team running all the PG, all ages events (mnfurs.org, and DRAKE in particular)… There was nothing serving the adult, kink or 18+ community. Up until that point, any kinky or adult events were held in private homes or we would loosely organize a bar event. Even so, events were sporadic and lightly attended, as there wasn't even a good way for kinky furs to even connect with each other in this state.
At my current job I do club promotions and events occasionally, so I had a few contacts. I picked a bar that most reminded me of the STUD in San Francisco (where Frolic happens every month), a bar called the EagleBolt here in Minneapolis. I spoke with the owner and manager and they allowed us to throw a trial basis party on January 31st. If that went well, they would be willing to host us every 5th saturday, or more.
Howl Toronto's Q&A for "The Furclub Survey", from organizer Raverfox.
Furclubbing: "A repeat/regular nightclub event by furries for furries." It's a New Thing that's been spreading since the late 2000's.
This kind of dance party is independent from cons. This builds on the growth of cons, and takes things farther. It's more established than events that happen once, house parties or informal meets. Those can be inner-focused, or gather cliquish friends to only seek each other. This brings partnership with venues that aren't hotels, and supportive interest in the kind of events they host and promote. It crosses a line to public space. A stranger may walk in off the street to discover their new favorite thing. It encourages new blood and crossover to other scenes.
See the list of parties at The Furclub survey. Any one that gives a Q&A will get their own article. Raverfox tells you more about his party…
Howl Toronto (2014 – now)
Howl Toronto on FA
Raverfox on FA
Howl Toronto is active since summer 2014.
For Furries, Suiters, and any other member of all fandom communities in the GTA and abroad, Howl is about giving us a place to come to and cut loose with your friends, your mates and your fandoms. Convention dances are annual events, we want to be a heartbeat throughout the year.
For Furry DJ's, Howl is about giving those who love electronic dance music a chance to experience that thrill of playing to a crowd of shouting fans and community members. Convention dances happen once a year, and it doesn't matter what side of the mixing board you're on, that's just not enough to fill the need!
Denver's Fox Trot Club – Q&A for "The Furclub Survey", from organizer Kelar.
See the list of parties at The Furclub survey. Anyone that gives a Q&A will get their own article. Kelar tells you more…
Fox Trot Club in Denver, CO (2011 – now)
The Furclub Survey: introducing the world's independent Furry dance parties.
Howl Toronto.
Furclubbing: "A repeat/regular nightclub event by furries for furries." The concept has been spreading since the late 2000's. This kind of dance party is independent from conventions. It builds on their growth but takes things farther. It's more established than informal meets or events that happen once. Those can stay inner-focused for friends who already know each other, but this brings partnership with new venues that support and host furries. It crosses into public space, so a stranger may walk in off the street and discover their new favorite thing. It encourages new blood and crossover. It makes a subculture thrive. There are connections to DJ and rave scenes. But this is its own unique movement!
The Survey Questions
Any party that responds will get their own featured article! (Check back for new responses linked with party names below.)
Do you know any others? Please share these questions to them, and send responses or tips to patch.ofurr@gmail.com.
Casual answers are fine (they will get partnership to create and boost an article). Please include graphics, pics or vids.
Philly's "Unleashed" joins a New Thing of independent Furry dance parties. Call it- "Furclubbing?"
There's a New Thing happening in lots of places. (And it doesn't have to do with baby seals. Yikes!)
This is how it starts. Furry social life thrives when friends get together informally – like this 2009 meet in Ottawa. Ahh… I want to go here!
Frolic, the original Furry dance party, is a model. (Check this interview if you don't know it.) Frolic founder Neonbunny says:
I think society in general, especially when we have the internet and different ways of finding very specific niche culture- I think subcultures are taking off. People like to party, socialize, and be around each other – and use the internet to find new ways to get together and be together in person, not just on the internet. The internet makes us feel a little isolated, and we try to balance that by going to these crowded events… It's changed in the last 10-20 years, and more and more people are seeking these crowds rather than getting away from it all. It's why countercultures are thriving. It's about events. Whether it's a Furry convention, or Frolic, or other get togethers, it's about events.
"Furclubbing" is the New Thing that I see becoming a trend since the late 2000's. It's been spreading by furries influencing others to start formal events independent from cons. This builds on the growth of cons, and takes things farther.
Neonbunny defines it as: "A repeat/regular nightclub event by furries for furries. There's probably a half dozen events. Then there's probably been a couple hundred one off furry events done in a bar or other legal (non house) venue." As Howl Toronto puts it: Con dances happen once a year, and "that's just not enough to fill the need!"


text:
Edinburgh's Urban Enlightenment and George IV: Staging North Britain, 1752-1822
Pirrie, Robert (2019). Edinburgh's Urban Enlightenment and George IV: Staging North Britain, 1752-1822. Student dissertation for The Open University module A826 MA History part 2.
This dissertation was produced by a student studying the Open University postgraduate module A826 MA History part 2. The research showcased here achieved a distinction.
Please note that this student dissertation is made available in the format that it was submitted for examination, thus the author has not been able to correct errors and/or departures from academic standards in areas such as referencing.
Copyright resides with the author and all rights are reserved.
From 1752 until the visit of George IV in 1822, Edinburgh expanded and improved through planned urban development on classical principles. Historians have broadly endorsed accounts of the public spectacles and official functions of the king's sojourn in the city as ersatz Highland pageantry projecting a national identity devoid of the Scottish Lowlands. This study asks if evidence supports an alternative interpretation locating the proceedings as epochal royal patronage within urban cultural history.
Three largely discrete fields of historiography are examined: Peter Borsay's seminal study of English provincial towns, 1660-1770; Edinburgh's urban history, 1752-1822; and George IV's 1822 visit. The analysis reveals how authorial preferences have shaped secondary literature, obscuring common urban cultural forms and inhibiting potentially illuminating synthesis. The study's resulting hypothesis is to flex and extend Borsay's analytical framework to characterise as an 'Urban Enlightenment' the cultural resurgence and planned expansion of Edinburgh, 1752-1822. The concept is developed using primary sources to identify similarities and distinctions between Edinburgh and English provincial towns, before being applied to primary sources relating to the royal visit, disclosing cultural patterns that conform to the 'Urban Enlightenment' paradigm.
The study concludes that reframing George IV's visit within urban cultural history offers fresh insight into the role of the city in projecting Scottish identity. This proposes new perspectives on widely disseminated interpretations, suggesting historians' disproportionate concerns over the legitimacy of Highland cultural signifiers have eclipsed Edinburgh's Urban Enlightenment as a context for the royal visit.
Download Redacted Version of Record (PDF / 349kB)
Student Dissertation
Other Departments > Other Departments
ORO Import


Charles Dickens' compelling seasonal classic – A Christmas Carol – is about to be staged by the talented young actors of Hunting Hills High School.
Performances run Dec. 15th-17th at the Red Deer Memorial Centre, with curtain at 7 p.m. There is also a 1 p.m. matinee on Dec. 17th as well.
A Christmas Carol was first published in London on Dec. 19th, 1843, according to Wikipedia.
"The novella met with instant success and critical acclaim. A Christmas Carol tells the story of a bitter old miser named Ebeneezer Scrooge and his transformation into a gentler, kindlier man after visitations by the ghost of his former business partner Jacob Marley and the Ghosts of Christmas Past, Present and Yet to Come.
"I think the interesting thing about what we've done this year is that the actual story we are telling is probably truer to the original novella by Dickens then many of the interpretations of A Christmas Carol," said instructor and director Bill Jacobsen, adding that he and the class adapted the famous work themselves. The classic elements remain of course, but there are some changes that will in effect make the play a bit more accessible and relatable perhaps to modern audiences.
"There are whole sections of dialogue that are exactly as written in the novel," he said. "On the other hand, we aren't setting it specifically in Victorian England with people in heavy wool coats and top hats.
The overall look isn't really time specific.
"We purposefully removed references to work houses and things like that, and injected terms such as 'refugees' and 'welfare' instead. So we have given it a little bit of a modern view that way.
"Given the political situations that we are in in the world, the idea of referring to some of the the poor and the downtrodden in our society in those kinds of terms were relevant. So we are happy with that change.
"The other thing that really struck me as we were working through the creation of the script is that I've felt so often as I've watched versions of A Christmas Carol before – film or stage adaptations – it always seems sort of magically at the end that Scrooge changes. But if you read the book, from the very first visit of the first ghost, he's beginning to say, 'My heavens – what have I done?
Jacobsen said there are 64 speaking roles in the show by 27 actors. "People are playing multiple roles." The cast also includes three narrators to move the fascinating plot along.
"We are really pleased with the work the kids have done. Some of the design in this show are beautiful, too.
It's been noted the book was written at a time when the British were examining and exploring Christmas traditions from the past as well as new customs such as Christmas cards and Christmas trees. Carol singing took a new lease of life during this time.
"A Christmas Carol also remains popular — having never been out of print — and has been adapted many times to film, stage, opera and other media." The book was written for Dickens to read aloud to audiences as well.
Wikipedia noted that he read the tale in an abbreviated version 127 times, until 1870 (the year of his death), when it provided the material for his farewell performance.
To Jacobsen, part of the core of the story that is so impactful is that of the theme of transformation.
Advance tickets for A Christmas Carol are $10, and are available at the high school's office. They can also be picked up for $13 at the door.


text:
Ла Сијенага има више значења:

 Ла Сијенага (Санта Катарина), насеље у савезној држави Сан Луис Потоси у Мексику
 Ла Сијенага (Тамасопо), насеље у савезној држави Сан Луис Потоси у Мексику
 Ла Сијенага (Силитла), насеље у савезној држави Сан Луис Потоси у Мексику

redpajama_set_name: RedPajamaWikipedia


The Awakening Church's Grow Group Ministry helps people say "YES" to God and fulfills the "GROW" piece of our church's vision. While Pastor Stephen teaches God's word on Sundays, we come together mid-week to grow spiritually through relationships. We believe that deeper friendships are made when people are able to support and encourage one another, break bread, and pray for each other..
We invite you to join our Grow Groups to build a deeper relationship with God and others!


text:
<?xml version="1.0" encoding="UTF-8"?>

<project name="FlatPack">

		<menu name="FlatPack">
			<item name="Main Page" href="../index.html" />
			<item name="Examples" href="../flatpack-examples/index.html" />
			<item name="Documentation" href="../documentation/index.html" />
		</menu>

		<menu name="Links">
			<item name="QALab" href="http://qalab.sourceforge.net/" />
			<item name="ObjectLab Kit" href="http://objectlabkit.sourceforge.net/" />
			<item name="ObjectLab" href="http://www.objectlab.co.uk" />
		</menu>

</project>