text:
Sie lesen: Luc Tissot recounts 60 Years of Watchmaking Between Crises and Challenges
This article has been freely translated from the original French version of LUC-OLIVIER.ERARD @ARCINFO.CH
He receives us not far from the Le Locle tower, which still bears his name, at the headquarters of the Tissot Foundation he created. At the age of 83, Luc Tissot is a passionate witness to the history of the watchmaking industry in the Neuchâtel mountains. A history intimately linked to his own journey, as winding as the Paraná River.
Indeed, it all began in Argentina... "I was born in Buenos Aires, where my father worked for an electricity company. I lived there until I was twelve years old and I have wonderful memories of it. I remain binational Swiss and Argentinean."
In 1951, the death of his uncle Paul Tissot, then director of Omega and Tissot, precipitated the family's return to Switzerland. He studied in Geneva, then in Neuchâtel and graduated in La Chaux-de-Fonds.
"Part of my family wanted me to go on to train as a watchmaker. I wanted to undertake more advanced studies. My parents agreed with my ideas. In 1962, I obtained a degree in mechanical engineering from the Swiss Federal Institute of Technology in Zurich and an MBA from the IMD in Lausanne in 1965."
"I could have settled anywhere in the world, but I chose Le Locle out of family tradition. I joined the factory." So far as taking over the reins in 1981.
The 1960s: A rich heritage
From its beginnings, the watchmaking workshop founded in Le Locle in 1853 by Charles-Félicien Tissot (1804-1873) and his son Charles-Emile (1830-1910) was able to adapt to the needs of the time.
An historical production method of Swiss watchmaking, établissage consists in having watch components manufactured by small decentralized units, for example by peasant families. After assembly, the watches are entrusted to sales structures.
But at the end of the 1870s, mainly under pressure from American competition, industrialization began in Switzerland.
This is what historian Pierre-Yves Donzé (author of "Histoire de l'industrie horlogère suisse, XIX-XXe siècle" published by Alphil) calls the "Philadelphia shock": during the 1876 Universal Exhibition in this Pennsylvanian city, Swiss watchmakers became aware of the need to modernize their production methods. The factories gradually replaced établissage, to take advantage of mechanization.
At the turn of the 20th century, the Americans introduced customs duties to protect their industry. The Tissot family reacted by sending their watches to the land of the tsars, until the Russian revolution. "We had to leave then. But my family kept links with Russia. I have an aunt whose mother was Russian."
In the 1930s, the Tissot family joined forces with the Brandt family, owners of Omega, in a holding company, the Swiss Society for the Watch Industry (SSIH).
"This made it possible to divide up production. But the objective of this alliance was mainly commercial: to make a luxury watch, Omega, most models of which are sold at around 1,000 francs, and to occupy the segment of so-called 'civilian' watches with Tissot. They were about 30% cheaper than an Omega. Such an assortment allowed us to occupy a lot of space on the retailer's shelves."
This distribution of the market will enable the brands to overcome several crises. The SSIH was already about 30 years old when Luc Tissot took off in the 1960s. "My father, Edouard-Louis, had introduced the unique caliber [ed.: a watch movement] for the four main models in our range. Sales had increased sevenfold in just a few years. The company gradually employed more than 1,000 people. My father was its CEO. I was production manager."
In 1965, the current buildings of the Tissot company had to be built. "After examining the construction plans for the North Wing, the Le Locle Municipal Council had asked for two more floors to be added to the building, as this would embellish the city, according to them." This request was granted. The period is prosperous. "It was amazing. We helped each other within the holding company, which had no debts. The construction of the Tissot buildings was financed by loans from Omega."
1962-1971: The emergence of the synthetic
Leaders are confident. They have already started several years back several innovation projects. In particular, Edouard- Louis Tissot is behind the introduction of synthetic materials in watchmaking.
Around 1953, the first effort in this direction was the introduction of the self-lubricating bearing. Rubies, traditionally used in watchmaking to hold the gears of the movement in place, are expensive and need to be oiled for the movement to work perfectly. By replacing natural stones with this synthetic device, it is hoped to create cheaper movements.
At the time, innovation was not considered as formally as it is today, explains Luc Tissot: "We had problems, and we used to look at other industries to pick up ideas and adapt them to our needs. That is what happened with the self-lubricating bearing: the power generation industry was already using plastics for moving parts, just much larger."
"To do the same, we were in front of the need to develop machines capable of injecting plastic at very high pressure, because our molds are much smaller." It is partly these developments that will later allow a wider use of synthetic materials in the watch industry, such as for the Swatch for example.
"Tissot is then a veritable hotbed of creation. We were faced with many obstacles, and we were also lucky. With the nylon used initially, the bearings were deforming too quickly. The gears were then housed in an oval, which disrupted the operation of the watches. Delrin, a much harder nylon derivative, came along, and we were able to overcome this problem."
Gradually, Tissot succeeds in making many precise components out of synthetic material, up to a complete movement and a box. In 1971, the Astrolon was launched, the world's first plastic watch without oil, which never goes out of order.
The very special design by Lucien Gurtner and the translucent case give a glimpse of the plastic gears. An aesthetic choice that Luc Tissot claims: "Of course! We wanted to show that making these pieces was an achievement." Commercially, the Astrolon was a failure: "The nylon derivative we used did not have the prestige of noble metals. We were told, 'Why make watches out of the same material as stockings?' It was also too expensive, and we didn't have the commercial power at the time to make a cheap product".
The 1970's: Quartz becomes essential, the crisis breaks out
It is in this climate that the electronic quartz watch emerges. Since the early 1960s, Swiss watchmakers have been allied within the Neuchâtel Electronic Watchmaking Center (CEH), the forerunner of the CSEM. The challenge: to miniaturize electronic quartz clocks so that they fit in a watch. For their part, the SSIH holding company of Tissot and Omega, together with the Batelle Institute in Geneva, developed a very high frequency circuit. The idea was to make an electronic quartz watch the most accurate watch in the world. This product is therefore imagined to be intended for the luxury range. 15 years later, this work gave birth to Omega's megaquartz caliber.
In 1969, the first quartz watches of the CEH would indeed turn out to be the most precise in the world. "But the Japanese watch factories, which were more industrialized at the time, seized this new possibility with a completely different idea than ours: that of low-cost watches.
They quickly flooded the market. It was a tragedy," recalls Luc Tissot.
"SSIH continued to work with quartz for Omega, but at Tissot there was no more work. The company phased out production and concentrated on assembly. It was necessary to cut back." These are difficult times. "Up until then, the company was a bit paternalistic. For Christmas, for an hour or two, there were candles in the workshop. We also celebrated work anniversaries; we had built housing for the employees. During the watchmaking crisis between the mid-1970s and the mid- 1980s, many companies disappeared or, at best, fell into the hands of the banks."
"Between 1974 and 1982, SSIH saw its sales decrease from 12.4 to 1.9 million units," says historian Pierre-Yves Donzé. The vulnerability of Swiss watchmaking companies to foreign competition can be explained, according to the historian, by "poorly rationalized industrial management" and "a mismatch between products and the market," particularly because they are too expensive.
The 1980s and 1990s: Restructuring and diversification
Banks are forced to inject large sums of money into companies, including the SSIH, and call on the consultant Nicolas G. Hayek to carry out restructurings.
"The SSIH will finally join another holding company, ASUAG (Allgemeine Schweizerische Uhrenindustrie AG), to form what Nicolas G. Hayek will remarkably group together in 1983 under the banner of the SMH (today's Swatch Group)," explains Luc Tissot.
Under the signature of Pierre- Yves Donzé, history must remember that, once at the head of the SMH, after having acquired the majority of the capital in 1985, Nicolas G. Hayek "implemented an innovative industrial policy that contributed greatly to the rebirth of the Swiss watch industry."
From the beginning of the crisis, in the mid-1970s, Luc Tissot chose a different path. That of putting watchmaking techniques at the service of other industries.
"We had the idea of developing a device to measure blood pressure. I was introduced to Branco Weiss, director of Kontron, a subsidiary of the pharmaceutical group Hofmann-La Roche. He said: 'I'm not interested at all! What I want is a pacemaker.'" There are about 20 manufacturers of this implantable device that regulates the heart rhythm. But Hofmann-La Roche is trying to seduce cardiologists with a Swiss Made quality product made by watchmakers.
"When I presented our project to him, my father was dying. But he approved. He said, 'This is where we have to go. The authorities of Le Locle were happy, since we were hiring people."
"On the other hand, the SSIH board of directors said no. I was told, 'It has nothing to do with what we do. Moreover, watchmakers generally do not diversify their activities."
"In 1977, Hoffman-La Roche offered me the opportunity to become a shareholder in the new company Precimed instead of SSIH. It took us only one year from the foundation of the company to bring the product on the market, thanks in particular to the Dutch engineer Jerry Boer, whom we brought to Neuchâtel and who still lives there today."
Taken over three years later by the American company Intermedics, then by Sulzer, the activity of Precimed (editor: which has no link with the Precimed company existing today) will then be bought by the pacemaker manufacturer Guidant which closed the site in 1999. The staff will be laid off.
Another medical project marks the path of Luc Tissot.
"One day, Professor Salomon Hakim, a Colombian neurosurgeon, contacted me from Bogotá about an implantable valve to regulate brain pressure". Thanks to engineer Jean-Jacques Desaules and micromechanic Jean-Marie Delaye, Luc Tissot's team equipped it with a magnetic device that allows adjustment through the skin. Thus Medos was created in 1983. In 1991, the acquisition of Medos brought the Medtech giant Johnson & Johnson to the canton of Neuchâtel, an important milestone in the diversification of the Neuchâtel economy. The American group would eventually employ more than 1,000 people in Le Locle and Neuchâtel.
Thanks to the Tissot Economic Foundation Luc Tissot has created a third company, Tissot Medical Research, which is developing a contact lens that measures the intraocular pressure peaks that can cause glaucoma.
The years 2000 and 2010: The reign of the big groups
The 2000s confirmed the Swatch Group's domination of the watchmaking landscape, with the brands Omega, Tissot, Longines, Rado, Mido and, of course, Swatch, launched in 1983. The success of the Swatch made it possible to develop the Group. "The profits from the Swatch are also reinvested in the purchase of companies to enable the group to be present in all market segments," writes Pierre-Yves Donzé. The Biel-based giant Breguet, Blancpain and others will join the group in the coming years.
But Swatch Group is not alone in carrying out industrial restructuring in the Mountains. The Richemont Group was created in 1988 to diversify the activities of the family owning BAT (British American Tobacco) into luxury goods. Before 2000, Baume et Mercier, Piaget and Vacheron- Constantin joined the group. At the beginning of the century, the French group LVMH acquired TAG Heuer, Zenith and Hublot.
At that time, the sector experienced a strong trend towards vertical concentration, which saw many subcontractors come under the control of the brands.
As for Luc Tissot, he will return to watchmaking, but much more recently. Again thanks to personal relationships, maintained all over the world: "A friend I met 40 years ago during a research project in Houston (Texas), the famous scientist and artist Professor Dominic Mam-Kit Lam, connected me with the Chinese owners of Milus, They didn't know what to do with it. I took it over, and we are now working on reviving it by making quality watches at a fair price. I want us to return to the original spirit of the house. The watch is not just technology, it's something else. You wear it on your body, it closely represents the personality of the wearer. It is this personal link that is the hallmark of the mechanical watch."
A partnership based on mutual thinking and shared values


Joan Jett was born here.
Rocker Joan Jett was born in this hospital on September 22, 1958.
Comments : It would be great to learn more about Astrud Gilbertos time living on the Philly Main Line. I saw this online in a story about Philly-area garageband record company wizzard Dave Bass, He (Bass) studied percussion during his school years, joining his first band, Crosstown Traffic in 1974, an Ardmore, PA band whos guitarist was the son of singer Astrud Gilberto. Maybe more info will surface.
Comments : //www.spokeo.com/PA/Philadelphia/200-Locust-St/14A, now on Cyber Plaque.


text:
package de.kuei.metafora.shared.event.graph;

import de.kuei.metafora.shared.event.interfaces.MapEvent;
import de.novanic.eventservice.client.event.Event;

public class NodeEvent implements Event, MapEvent {

	private String nodeXML;
	private String map;

	public NodeEvent() {

	}

	public NodeEvent(String nodeXML, String map) {
		this.nodeXML = nodeXML;
		this.map = map;
	}

	public String getNodeXML() {
		return nodeXML;
	}

	public String getMap() {
		return map;
	}

}

redpajama_set_name: RedPajamaGithub


text:
Home > AJTE > Vol. 24 (1999) > Iss. 2
Australian Journal of Teacher Education
Bruce Russell, Huddersfield University
Peter Sanderson, Huddersfield University
Competence and quality in the training of teachers for the post compulsory sector in the UK
10.14221/ajte.1999v24n2.1
This issue addresses the broad theme of quality learning. When we invited authors to submit papers for this special issue. we were not prescriptive about what we meant by quality learning However. we were especially interested in some aspects of learning that are particularly important to teacher education at the present time. One of these relates to the quality of the learning outcomes that are achieved by teacher education students. What sort of outcomes should prospective teachers achieve before they take on the complex task of helping others learn?
Russell, B., & Sanderson, P. (1999). Competence and quality in the training of teachers for the post compulsory sector in the UK . Australian Journal of Teacher Education, 24(2).
http://dx.doi.org/10.14221/ajte.1999v24n2.1
Education Commons
Link to publisher version (DOI)
Publication Rights Form
Call for Papers (Special Issue)
All Issues Vol. 46, Iss. 11 Vol. 46, Iss. 10 Vol. 46, Iss. 9 Vol. 46, Iss. 8 Vol. 46, Iss. 7 Vol. 46, Iss. 6 Vol. 46, Iss. 5 Vol. 46, Iss. 4 Vol. 46, Iss. 3 Vol. 46, Iss. 2 Vol. 46, Iss. 1 Vol. 45, Iss. 12 Vol. 45, Iss. 11 Vol. 45, Iss. 10 Vol. 45, Iss. 9 Vol. 45, Iss. 8 Vol. 45, Iss. 7 Vol. 45, Iss. 6 Vol. 45, Iss. 5 Vol. 45, Iss. 4 Vol. 45, Iss. 3 Vol. 45, Iss. 2 Vol. 45, Iss. 1 Vol. 44, Iss. 12 Vol. 44, Iss. 11 Vol. 44, Iss. 10 Vol. 44, Iss. 9 Vol. 44, Iss. 8 Vol. 44, Iss. 7 Vol. 44, Iss. 6 Vol. 44, Iss. 5 Vol. 44, Iss. 4 Vol. 44, Iss. 3 Vol. 44, Iss. 2 Vol. 44, Iss. 1 Vol. 43, Iss. 12 Vol. 43, Iss. 11 Vol. 43, Iss. 10 Vol. 43, Iss. 9 Vol. 43, Iss. 8 Vol. 43, Iss. 7 Vol. 43, Iss. 6 Vol. 43, Iss. 5 Vol. 43, Iss. 4 Vol. 43, Iss. 3 Vol. 43, Iss. 2 Vol. 43, Iss. 1 Vol. 42, Iss. 12 Vol. 42, Iss. 11 Vol. 42, Iss. 10 Vol. 42, Iss. 9 Vol. 42, Iss. 8 Vol. 42, Iss. 7 Vol. 42, Iss. 6 Vol. 42, Iss. 5 Vol. 42, Iss. 4 Vol. 42, Iss. 3 Vol. 42, Iss. 2 Vol. 42, Iss. 1 Vol. 41, Iss. 12 Vol. 41, Iss. 11 Vol. 41, Iss. 10 Vol. 41, Iss. 9 Vol. 41, Iss. 8 Vol. 41, Iss. 7 Vol. 41, Iss. 6 Vol. 41, Iss. 5 Vol. 41, Iss. 4 Vol. 41, Iss. 3 Vol. 41, Iss. 2 Vol. 41, Iss. 1 Vol. 40, Iss. 12 Vol. 40, Iss. 11 Vol. 40, Iss. 10 Vol. 40, Iss. 9 Vol. 40, Iss. 8 Vol. 40, Iss. 7 Vol. 40, Iss. 6 Vol. 40, Iss. 5 Vol. 40, Iss. 4 Vol. 40, Iss. 3 Vol. 40, Iss. 2 Vol. 40, Iss. 1 Vol. 39, Iss. 12 Vol. 39, Iss. 11 Vol. 39, Iss. 10 Vol. 39, Iss. 9 Vol. 39, Iss. 8 Vol. 39, Iss. 7 Vol. 39, Iss. 6 Vol. 39, Iss. 5 Vol. 39, Iss. 4 Vol. 39, Iss. 3 Vol. 39, Iss. 2 Vol. 39, Iss. 1 Vol. 38, Iss. 12 Vol. 38, Iss. 11 Vol. 38, Iss. 10 Vol. 38, Iss. 9 Vol. 38, Iss. 8 Vol. 38, Iss. 7 Vol. 38, Iss. 6 Vol. 38, Iss. 5 Vol. 38, Iss. 4 Vol. 38, Iss. 3 Vol. 38, Iss. 2 Vol. 38, Iss. 1 Vol. 37, Iss. 12 Vol. 37, Iss. 11 Vol. 37, Iss. 10 Vol. 37, Iss. 9 Vol. 37, Iss. 8 Vol. 37, Iss. 7 Vol. 37, Iss. 6 Vol. 37, Iss. 5 Vol. 37, Iss. 4 Vol. 37, Iss. 3 Vol. 37, Iss. 2 Vol. 37, Iss. 1 Vol. 36, Iss. 12 Vol. 36, Iss. 11 Vol. 36, Iss. 10 Vol. 36, Iss. 9 Vol. 36, Iss. 8 Vol. 36, Iss. 7 Vol. 36, Iss. 6 Vol. 36, Iss. 5 Vol. 36, Iss. 4 Vol. 36, Iss. 3 Vol. 36, Iss. 2 Vol. 36, Iss. 1 Vol. 35, Iss. 8 Vol. 35, Iss. 7 Vol. 35, Iss. 6 Vol. 35, Iss. 5 Vol. 35, Iss. 4 Vol. 35, Iss. 3 Vol. 35, Iss. 2 Vol. 35, Iss. 1 Vol. 34, Iss. 6 Vol. 34, Iss. 5 Vol. 34, Iss. 4 Vol. 34, Iss. 3 Vol. 34, Iss. 2 Vol. 34, Iss. 1 Vol. 33, Iss. 6 Vol. 33, Iss. 5 Vol. 33, Iss. 4 Vol. 33, Iss. 3 Vol. 33, Iss. 2 Vol. 33, Iss. 1 Vol. 32, Iss. 4 Vol. 32, Iss. 3 Vol. 32, Iss. 2 Vol. 32, Iss. 1 Vol. 31, Iss. 2 Vol. 31, Iss. 1 Vol. 30, Iss. 2 Vol. 30, Iss. 1 Vol. 29, Iss. 2 Vol. 29, Iss. 1 Vol. 28, Iss. 2 Vol. 28, Iss. 1 Vol. 27, Iss. 2 Vol. 27, Iss. 1 Vol. 26, Iss. 2 Vol. 26, Iss. 1 Vol. 25, Iss. 2 Vol. 25, Iss. 1 Vol. 24, Iss. 2 Vol. 24, Iss. 1 Vol. 23, Iss. 2 Vol. 23, Iss. 1 Vol. 22, Iss. 2 Vol. 22, Iss. 1 Vol. 21, Iss. 2 Vol. 21, Iss. 1 Vol. 20, Iss. 2 Vol. 20, Iss. 1 Vol. 19, Iss. 2 Vol. 19, Iss. 1 Vol. 18, Iss. 2 Vol. 18, Iss. 1 Vol. 17, Iss. 2 Vol. 17, Iss. 1 Vol. 16, Iss. 2 Vol. 16, Iss. 1 Vol. 15, Iss. 2 Vol. 15, Iss. 1 Vol. 14, Iss. 2 Vol. 14, Iss. 1 Vol. 13, Iss. 1 Vol. 12, Iss. 2 Vol. 12, Iss. 1 Vol. 11, Iss. 2 Vol. 11, Iss. 1 Vol. 10, Iss. 2 Vol. 10, Iss. 1 Vol. 9, Iss. 2 Vol. 9, Iss. 1 Vol. 8, Iss. 2 Vol. 8, Iss. 1 Vol. 7, Iss. 2 Vol. 7, Iss. 1 Vol. 6, Iss. 2 Vol. 6, Iss. 1 Vol. 5, Iss. 2 Vol. 5, Iss. 1 Vol. 4, Iss. 2 Vol. 4, Iss. 1 Vol. 3, Iss. 2 Vol. 3, Iss. 1 Vol. 2, Iss. 2 Vol. 2, Iss. 1 Vol. 1, Iss. 2 Vol. 1, Iss. 1
View Papers on map
View Papers in Google Earth

redpajama_set_name: RedPajamaCommonCrawl


Irvine Valley sophomore women's soccer players Rosa Soto-Aleman and Evelyn Lucatero have signed with Missouri Valley College.
Missouri Valley College is an NAIA school in Marshall, Mo.
The two will join former Laser players Marissa Perez and Herminia Verduzco, who signed with Missouri Valley in 2015 and played last season.
Soto-Aleman and Lucatero were key defenders for IVC this past season.
The two helped Irvine Valley shut out four teams in 2016.
With her speed, Soto-Aleman also pushed forward to become part of the Irvine Valley attack.
Soto-Aleman played and started in all 21 of the team's matches this past season.
She ended up four goals and three assists for 11 points. Soto-Aleman had one goal and one assist in Irvine Valley's 3-1 win over Santa Ana at home on Sept. 30 and another goal and assist in IVC's 3-3 tie at Santa Ana on Nov. 1.
At the end of the year, Soto-Aleman was named first team all-Orange Empire Conference.
Soto-Aleman red-shirted at IVC during the 2015 season.
She helped Irvine Valley finish with a record of 12-4-6 overall in 2014 and make a trip to the Southern California Regional Playoffs.
Playing mostly in the midfield, she was named second team all-conference in 2014 after scoring seven goals and recording three assists. She ranked second on the team in goals and second on the team in points with 17.
Lucatero played in 15 matches for the Lasers in 2016 and finished with one assist.
She red-shirted in 2015, but was a first-team all-conference defender as a freshman in 2014.
She was part of the IVC team to end with a record of 12-4-6 overall in 2014 and make the Southern California Regional Playoffs. As the team's center back, she was part of an IVC defense that allowed just 17 goals in 22 matches. The Lasers also recorded 11 shutouts.
Irvine Valley finished with a record of 7-8-6 overall and was 5-7-5 in conference in 2016. The Lasers took fifth place in the OEC.


text:
Special Edition: Massive Oil Spill on San Francisco Bay
By LaDonna | November 8, 2007 | San Francisco Bay | 0
The Cosco Busan had a 160-ft gash torn into her side yesterday morning when she hit the Bay Bridge.
©2007 Latitude 38 Media, LLC
Yesterday at 8:30 in the morning, the 810-ft container ship Cosco Busan was leaving Oakland for Pusan, South Korea in dense fog when it sideswiped the Bay Bridge, tearing an enormous 160-ft-long gash in its side. Initially, the owners of the ship reported that only 140 gallons of bunker fuel had spilled, a claim the Coast Guard officially supported until 10 p.m. last night. It was clear early on, though, that significantly more fuel had escaped the ship's holds, causing the Coast Guard and clean-up agencies to scramble to contain what's now estimated to be 58,000 gallons of oil.
The spill quickly spread throughout the Bay on the ebb tide and by 3 p.m. had reached Fort Point just inside the Golden Gate Bridge. Currently, agencies are focusing on three major slicks in the Bay — one west of Treasure Island, one north of the Bay Bridge and one south of Angel Island. Sheens have been spotted all over the Bay, including Bayfront Park all the way up Richardson Bay in Mill Valley. Several Bay Area destinations have been closed due to the spill: Baker Beach, China Beach, Crissy Field, Fort Point, Alcatraz, and Muir Beach, Black Sands Beach, East Beach, Rodeo Beach and Kirby Cove in the Marin Headlands. Though it hasn't been closed, swimmers are advised against diving into Aquatic Park as oil blobs have been spotted there. The latest update reports Point Bonita as contaminated as well. Eight oil skimming vessels — five inside the Gate, three outside — are working to suck up as much oil as possible and have recovered about 8,000 gallons of the stuff but it may be a losing battle: "Bunker fuel oil tends to be rather heavy," reports Wil Bruhns of the San Francisco Bay Regional Water Quality Control Board, "and it doesn't float as well as other oils. It's hard to contain."
Southwest winds and a minus tide are expected to push the oil up onto the beaches and into Drakes Bay today. A giant oil-absorbing boom will be set up to deflect as much oil as possible onto a stretch of beach that will be more easily cleaned. Unfortunately, the mouth of Drakes Bay is too wide to fully prevent any oil from entering.
Multiple reports of oiled waterfowl have been cited and several agencies are frantically trying to save as many as possible. If you spot oil covered birds, you're asked to call the Oiled Wildlife Reporting Hotline at (877) 823-6926. Though volunteers will undoubtedly be needed to help with clean-up soon, officials are asking everyone to stay away from the beaches and shores for the next couple days. It goes without saying that it would be wise to stay off the water during the clean up process, which will likely last at least through the weekend.
The ship never came in contact with the concrete base but did destroy much of the base's fender system.
© Latitude 38 Media, LLC
The cause of the collision is still under investigation — even in dense fog, the Bay Bridge can be seen clearly on any radar and, unless there's something we don't know, it would seem experienced bar pilot John Cota he should have easily been able to deal with the 2.7-knot flood current. Cota and the ship's navigational crew were given drug and alcohol tests but the results aren't yet available. We'll have more on the spill in tomorrow's 'Lectronic but for now apologize for the delay in reporting this important story.
'Lectronic Latitude: Wednesday, Nov 7
Special Ha-Ha Bulletin
The Grand Poobah sent in the following succinct report: "At the start of Leg 3, with 160+ boats and more than 600 people, having too much fun to write.
Sailboat Thefts
While Johnny Depp is charming as Captain Jack Sparrow, he may be having a bad influence on Florida's thieves.
Big Brother Run Amok
We knew sailors were an opinionated bunch but you guys really had some things to say regarding Monday's report that Homeland Security wants to initiate bomb searches on rec boats: "This administration is doing everything it can to create a police state, using the pretext of protecting us from terrorism.


This illusion demonstrates that the perception of dark and light features in a face is strongly influenced by context. A picture of a face is split into a dark-half and light-half version by setting either the light or dark pixels to a fixed gray value (while keeping the other pixels unchanged). The 'white' of the eyes in the dark-half picture has the same luminance as the 'dark' lips in the light-half version but the lips appear much darker. This strong illusion can be demonstrated with any face or visual scene photographed with a standard digital camera.


There are many ways to create a Pinterest Graphic. I personally like to use Canva.com, but there are similar sites you can use such as Fotor.com. Here are the steps I use to make my graphics.
1. Go to Canva.com and type Pinterest Graphic in the search box.
3. You can now change the font, the font size, and the color of the text.
4. You can search under elements for a background or upload your own image.
5. I chose a box from elements and added a pretty design after changing around the fonts and colors more. Play around with the graphic and explore everything available to make the graphic look exactly how you want it.
When you are done, simply download your creation and use it anywhere!


This day begins like most others, I go downstairs and watch a little news and weather while I eat breakfast, then some spiritual nourishment from my Heavenly Father as we spend some quiet moments together in His Word and in prayer. After that the first order of the day is morning chores. A thin sliver of pink peaks over the eastern horizon and through the naked treetops as I walk to the barn. A fast moving "clipper" system sends some snow flakes gently to the earth. It's late January but the ground is not frozen nor is there any snow on the ground. But the ground is firmer this morning, starting to dry out a little after a run of rainy days.
The first one to greet me, before I enter the barn, is the cat, Lil Bitty Kitty.
She lays right in front of the barn door and rolls over and over on her side waiting for me to open the door. As I step into the darkness of the barn I am engulfed by the earthy smells of hay, straw, feed and manure all mingled as one.. The inhabitants begin to stir. The heifer rises from her bed and the rooster, not really crowing, makes some cackling noises as if to say, "I heard you come in the door".
The first to receive my full attention is the beef heifer, May Bell (or as Henderson says, "Mabel"). May Bell has only been at Lil Bitty Farm for two weeks so she is still very shy. She is a cross-bred, which means she is a mixture of two breeds. Her mama was an Angus and daddy a Hereford. I open her pen door, grab her water bucket and go back outside to empty what remains in the bucket and refill it with fresh water from the newly installed yard hydrant. I put the full bucket of water back in her pen and then head to the feed box where I dish out a generous portion of feed for her and pour it into her feed trough. Then check her hay supply. If she needs more I cut open a fresh bale of alfalfa hay and fill her hay rack. Lastly, I scoop the messes that have been left behind since the last time I've been there.
Next I move on to the chickens. Same routine, clean out the waterer and fill with fresh water. Generous helpings of chicken feed in the feed trough and then a little bonus - I throw a handful of "scratch grain" onto the floor for them to scratch and peck at. Funny how they would much rather scratch and peck for their food on the floor of the barn instead of eat "clean" feed out of their feed trough. Then I open the little trap door to allow them access to fresh air and sunlight for the day. This is Saturday morning so I have a little extra time so I do a "chore" I don't particularly enjoy - cleaning out their nesting boxes (where they lay their eggs). Necessary tools for this job are a good pair of gloves and a hand scraper. Yeah, it's dirty and smelly but once the old stuff is gone I fill the nest boxes with clean, fresh straw - sort of like a fresh set of sheets on the bed for them.
The pigs aren't here right now, they will arrive in April or May. If they were here they would be starting to squeal about now. Funny how they don't make any noise til I start working on preparing their particular rations, then the squealing begins. The whole time I am moving about my routine the cat is either rubbing up against my leg or just "underfoot" in general, incessantly reminding me not to forget her and her ration. I don't want her to go hungry but I want her to be a little hungry as motivation to continue doing what she was brought here to do - control the rodent population. And she has done a very good job of that I must say. Occasionally I will inadvertently step on her foot and she lets out a sound that I have no idea how to discribe. The whole routine takes me about 15 minutes if I move with purpose, if I decide to dwaddle a little (which I like to do from time to time) it may take 25 or 30 minutes.
If I am working from home (which I usually am, in my woodshop) I will go down to the barn after lunch to gather the eggs. An average daily collection is approximately 4 dozen per day, some days more, some days less.
Just before supper time I repeat the above process. After supper I clean the eggs, crate them up and put them in the basement refrigerator awaiting future egg customers.. After dark I will return to the barn again to make sure all is well for the night and close the little chicken trap door so no marauding critters can enter the chicken coop during the night. I enjoy this little nightly trek (assuming the weather is cooperative), especially when it is full moon - and on the way back to the house I look up into the star-filled night and thank my Father for another good day here at Lil Bitty Farm.
To most people "chores" are a chore, but not for me, I rather like it. I like caring for the critters that God has entrusted to my care - maybe because it is a daily reminder of how my Heavenly Father cares for me. Every morning He comes to me with fresh nourishment. His love, grace, peace and faithfulness nourish and fill my soul each new day. And He also "cleans up my daily messes" when I come to Him in repentance. Thank you Father for this little farm that teaches me so much about you and your goodness to me.
Many agrarian blessings to you my friends. Stay well and warm.
Anybody looking forward to this in a few months?
There's something comforting about having animals. Right now we are animal-less. But we love on our neighbors' black lab and two black cats named Cinder and Ash. Wish I had a few chickens and a sheep or two. Maybe when we retire.


text:
MARSHALL TEXAS REPUBLICAN
Max S. Lale
MARSHALL TEXAS REPUBLICAN. The Marshall Texas Republican, established on March 30, 1849, by Trenton A. and Frank J. Patillo, was one of the state's most articulate voices for states' rights and secession. Robert W. Loughery, a Calhoun Democrat, became associate editor in July 1849, editor in November 1849, and owner of the weekly publication in 1851, when he gave his note for $1,251.92, payable in two annual installments. During his ownership Loughery earned a reputation as one of the state's most outspoken newspapermen, and his editorials were frequently reprinted around Texas. Under his editorship the Republican opposed the Compromise of 1850 and the rise of the American (Know-Nothing) party in the mid-1850s. In the months before the war, it spoke forthrightly for withdrawal from the Union, and it was among the staunchest supporters of the Confederacy during the war years, when it insisted until the end that Texas could and should become a redoubt for the Confederacy's remnants. However, once the war ended, the paper came out vigorously for conciliation and compliance with the requirements of surrender. Because of paper shortages and labor scarcity, the Republican reduced its page size; it suspended publication with its issue of July 25, 1863, but resumed with two five-column pages on September 24, 1864. It then continued publication uninterruptedly until a fire destroyed the paper's offices at Marshall in 1869, when the press and type were moved to the Daily Times offices in Jefferson. (Probably in 1867, Loughery had associated himself with A. D. McCutchan, publisher of the Daily Times, from whom he bought the paper.) From conciliation during Presidential Reconstruction, the Republican turned bitterly against Congressional Reconstruction, particularly in connection with the so-called Stockade Case in Jefferson. The paper ceased publication in 1872.
Marilyn M. Sibley, Lone Stars and State Gazettes: Texas Newspapers before the Civil War (College Station: Texas A&M University Press, 1983). William S. Speer and John H. Brown, eds., Encyclopedia of the New West (Marshall, Texas: United States Biographical Publishing, 1881; rpt., Easley, South Carolina: Southern Historical Press, 1978). Traylor Russell, Carpetbaggers, Scalawags, and Others (Waco: Texian Press, 1973).
Antebellum Texas
Handbook of Texas Online, Max S. Lale, "MARSHALL TEXAS REPUBLICAN," accessed January 17, 2020, http://www.tshaonline.org/handbook/online/articles/eemhq.


text:
Why you won't see Team USA in men's 3-on-3 basketball at the Olympics
Ethan Fuller
July 25 2021 2:54PM UTC
Backyard-style 3-on-3 hoops is making its debut as an Olympic sport this summer. But you won't see a Team USA men's team in Tokyo.
Team USA failed to qualify for men's 3-on-3 basketball after floundering in qualifying games. Back in May, the group was ranked second in the world, but stumbled in the qualifying tournament and ultimately lost to the Netherlands in the quarterfinals.
The roster did not feature a single active NBA player.
Robbie Hummel, a college standout for Purdue who suited up for the Minnesota Timberwolves from 2014-16, and Dominique Jones, who played for the Dallas Mavericks from 2010-2013, were the only players with NBA experience on the team. The other two members had played overseas: Joey King, who played collegiately at Minnesota, and Kareem Maddox, who played four years at Princeton. (Maddox quit his job as a podcast producer to chase his dream of winning a gold medal).
While the men's squad won't be competing in Tokyo, the women's squad is off to an impressive start. Team USA rolled through France (17-10) and Mongolia (21-9) on Saturday to open pool play 2-0, then kept up the momentum Sunday with victories over Romania (22-11) and the Russian Olympic Committee (20-16).
The group features four WNBA talents in Kelsey Plum and Jackie Young of the Las Vegas Aces, as well as Chicago Sky center Stefanie Dolson and Dallas Wings guard Allisha Gray.
US loses to France 83-76, 25-game Olympic win streak ends
Pelicans discussing sending Eric Bledsoe, No. 10 pick to Grizzlies


text:
/*
 * Harbor API
 *
 * These APIs provide services for manipulating Harbor project.
 *
 * OpenAPI spec version: 0.3.0
 *
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package apilib

type SearchProject struct {

	// The ID of project
	Id int64 `json:"id,omitempty"`

	// The name of the project
	Name string `json:"name,omitempty"`

	// The flag to indicate the publicity of the project (1 is public, 0 is non-public)
	Public int32 `json:"public,omitempty"`
}


text:
Devil's Messages
Authors: Thomas Aiello
The evolution of American cultural history pivots on those moments, large and small, where definitions break down, where meaning is contested, and a new kind of understanding is created in the bargain. We would be hard pressed to call that evolution progress, as new situational realities are defined by their newness and the situations that create them, but they breed difference, nonetheless, and create a new synthesis from the rubble. Those situational realities are created by shifts in meaning, by the cross-currents of language, which ultimately drive the system not forward, perhaps, but into a new state of being, for better or worse, depending on one s own needs or beliefs."The Devil s…
Messages" is a collection of essays that examines instances of definitional difference, of contested meaning. The essays move chronologically, but they are by no means comprehensive. The evolution of American history tracks along myriad similar disputes. Instead, each essay is exemplary of historical points where disagreements over language create contested space. Some of those spaces are large Civil Rights, Christianity, the Cold War. Others are smaller, more limited examples of similar problems."The Devil s Messages" chronicles an art controversy in the mid-century South, the linguistic nomenclature that gave the country godless communism, and the fight to remove prayer from public schools. It finds the devil in the films of Otto Preminger and Woody Allen and in the details of Ira Levin novels and disco, remembering throughout that historians themselves can be his most effective advocate when dealing with the rest of the liberal arts.Thomas Aiello is an assistant professor of history and African American studies at Valdosta State University. He is the editor of "Dan Burley s Jive" (Northern Illinois University Press, 2009) and "Paul Morphy: The Pride and Sorrow of Chess" (UL Press, 2010), and the author of "Bayou Classic: The Grambling-Southern Football Rivalry" (LSU Press, 2010) and "The Kings of Casino Park: Race and Race Baseball in the Lost Season of 1932" (University of Alabama Press, 2011). He has published dozens of articles on American history, philosophy, religion, linguistics, and culture.
Publisher: Cognella, Inc.
Size: 6.00" wide x 9.00" long


text:
Interpretations and Actions: December 2014
Corporate Decisions
2014-07 (PDF) Application by Bank of Southern California, National Association, San Diego, California, to acquire certain assets and assume certain liabilities of Frontier Bank, FSB, Palm Desert, California (Failed Entity). (Control Number: 2014 WE FailureAcq 140395), 11/07/2014
Conditional Approvals
1112 (PDF) Applications by Madison Bank of Maryland, Forest Hill, Maryland, to convert to a Federally chartered stock savings association, make a capital distribution, and establish a stock information center. (Control Numbers: R2-2014-0071 & 0073), 11/12/2014
1113 (PDF) Bulk transfer application, capital distribution application, voluntary dissolution application, and branch closing notification filed on behalf of NJM Bank FSB, West Trenton, New Jersey. (Control Numbers: R1-2014-0042, 0043, & 0044), 11/20/2014
1114 (PDF) Applications by Citizens Bank, National Association, Providence, Rhode Island, for the reduction of $220 million in Tier 1 capital and issuance of $220 million of subordinated debt. (Control Numbers: 2014-NE-Capital&Div-140365 & 2014-NE-Capital&Div-140373), 11/24/2014
Final Enforcement Actions
See OCC News Release 2014-173 announcing the availability of enforcement actions. All final enforcement actions are searchable.
Community Reinvestment Act (CRA) Performance Evaluations
See OCC News Release 2014-166 announcing all CRA performance evaluations that became public from November 1, 2014, through November 30, 2014. A search of all public CRA evaluations can be done.
PLEASE NOTE: Interpretive Letters and No-Objection Letters reflect the views of the Office of the Comptroller of the Currency's (OCC) legal staff. Corporate Decisions, CRA Decisions and Conditional Approvals are from the office of Licensing Activities. The Community Development Investment Letters are from the office of Community Affairs. The Supervisory Conditions Letters are from the Special Supervision Division. The list of CRA Ratings is from the Communications Division.
You can obtain copies of CRA evaluations or enforcement actions by writing to the Freedom of Information Act Officer, Communications Division, OCC, 400 7th Street, SW, Suite 3E-218, Mail Stop 6W-11, Washington, DC 20219. You may also submit a request electronically at the OCC's online FOIA site. Please provide all identifying information when requesting documents. You may also contact the bank directly for copies of the CRA evaluations.
The OCC publishes INTERPRETATIONS AND ACTIONS monthly. Send suggestions, comments or questions to Jacqueline England, Disclosure Services, Communications Division, OCC, 400 7th Street, SW, Suite 3E-218, Mail Stop 6W-11, Washington, DC 20219.


Even history buffs sometimes have a hard time picturing Roman ruins how they might have looked 2,000 years ago. Two new evening sound-and-light shows in Trajan's Forum—the Caesar's Forum Stroll and the Forum of Augustus Show—help put the site into context. This archaeological area was previously closed to the public, but now visitors can walk through the ruins while projected lights trace the outlines of the forum's original layout on the ground, walls, and porticoes and an English narration (through headphones) explains how the area once appeared. Similarly, L'Ara Com'era ("The Ara as it was") lets visitors experience what the Roman Altar of Peace looked like originally via a 45-minute virtual reality show at the Museo dell'Ara Pacis.
In a somewhat less positive sign of the times, for the first time in its long history, the Pantheon will be charging an entry fee. More significant than the fee itself (reportedly to be set at €1.50), this change may lead to long lines to enter, as the Pantheon is one of the city's most beloved and best-preserved Roman monuments.
The Renaissance capital of Italy highlights its sumptuous past and present with two new attractions. The first are the newly unveiled "Caravaggio Rooms" at the Uffizi Gallery, eight halls painted a deep burgundy red and hung with a collection of 50 17th-century masterpieces, of which the works by Caravaggio are the undisputed stars. The works are grouped by theme, including "Between Reality and Magic", "Caravaggio and Artemisia", and "By Candlelight", and form perhaps the most dramatic section in the whole of the Uffizi—not to be missed.
For some contemporary, yet no-less-Baroque style, head designer Alessandro Michele's reworked the historic Gucci Museo into a cutting-edge, multi-functional space with areas dedicated to the fashion house's museum, The Gucci Osteria led by three-Michelin-star chef Massimo Bottura, and the stunning Gucci Garden concept store, described as a chic gift shop on steroids. The place to see and be seen right now in Florence, the Gucci universe is the talk of Italy.
It's not just Florence that has a new shopping hotspot. Just steps from the Rialto Bridge, the 13th-century Fondaco dei Tedeschi palazzo was renovated by Dutch architect Rem Koolhaas at the end of 2016 and is now a posh shopping center. Though a bit slow to gain traction, the building's breathtaking interiors and unbeatable view from the rooftop terrace have cemented its place as one of the Floating City's most elegant attractions.


text:
Q: Sharing files between 2 Ubuntu One accounts I have Ubuntu-One both at work and at home, and would like to share files between the two. However, these are set up under two different Ubuntu-One accounts, with different logins and passwords; I'd like to integrate both accounts into one, with the same login/password, so that files can be shared/synced between the two. Is this possible?

A: On the machine you wish to change open ubuntuone navigate to the Devices tab and remove that machine. close ubuntuone, reopen it and sign in with the info from the other machine. Then you simply have to select the cloud folders you wish  to sync.

redpajama_set_name: RedPajamaStackExchange


Bake at 425°F for about 30 minutes, or until browned and knife inserted comes out clean. Allow to cool 5 minutes before cutting.
Mix mustard, sugar and salt. Add water and vinegar. Heat. Add peeled eggs. Refrigerate for 24 hours.
Bring water a boil and add grits. Cover and reduce heat. Let cook until water absorbs. Mix in 1/4 cup butter and 2 cups cheese. Fry sausage. Add to grit mixture. Mix together milk and eggs. Add to grit mixture and season however you prefer.
Place in greased pan or casserole dish. Dot with remaining 1/4 cup butter and sprinkle with 1 cup cheese. Bake at 350°F for 30 minutes.
Place the croutons in a greased 10"x6"x2" baking dish. Sprinkle the cheese over the croutons. Combine the remaining ingredients and mix well. Pour mixture over the croutons and cheese. Bake at 350°F for 25 minutes. Garnish with parsley.
Coat a small pan with cooking spray. Place over medium heat until hot. Add the pepper and mushrooms and sauté until tender. Stir in the tomato and cook just until heated. Set aside.
Combine the next 5 ingredients and mix well. Coat a 10" non-stick pan with cooking spray. When hot, pour in the egg mixture. As it starts to cook, gently lift the edges and tilt the pan to let the uncooked portion flow underneath. Spoon mushroom mixture over half of the omelet, sprinkle with cheese. Fold over unfilled side.
This is a low calorie recipe. 257 calories per person. Serves 2.
Beat eggs until foamy. Stir in meat, hash browns, cheeses and milk. Place into a 9"x13" pan or dish. Cover and refrigerate overnight. Just before baking, top with cornflake crumbs. Bake uncovered at 325°F for 50 minutes. Serves 10 to12.
Butter a 9"x13" baking pan or dish. Place bread on bottom. Place meat on top of the bread. Mix the milk, eggs and mustard and pour over the bread. Top with cheese and refrigerate overnight.
Bake at 350°F for 45 minutes. Let stand for 5 minutes before serving.
Place crust on a greased pizza pan. Using a 2½" biscuit cutter, cut out six circles from crust, evenly spaced and about 1 inch from edge. (Remove circles and save for another use.) Break an egg into each hole. Sprinkle with cheese, bacon, peppers and onion. Bake at 450°F for 8 to 10 minutes or until the eggs are completely set.
In a large skillet over medium heat, cook bacon until crisp. Remove bacon; crumble and set aside. Drain, reserving 2 tablespoons of drippings. Add potatoes, green peppers, onion, salt and pepper to drippings; cook and stir for 2 minutes. Cover and cook, stirring occasionally, until potatoes are browned and tender, about 15 minutes.
Make six wells in the potato mixture; break one egg into each well. Cover and cook on low heat for 8 to 10 minutes or until the eggs are completely set. Sprinkle with cheese and bacon.
Blend potatoes and olive oil. Spread into a pie pan. Sprinkle lightly with salt and pepper. Bake at 400°F till just beginning to turn brown.
Add sausage, onion, eggs, salt and cheese. Sprinkle with paprika and parsley. Bake at 400°F for 30 minutes.


text:
(function() {
  'use strict';

  describe('T002: CookieManager', function() {

    before(function() {
      global.should = require('should');
      global.requirejs = require('./requirejs-config-node');
      global.jQuery = require('jquery');
      global.window = {
        jQuery: jQuery
      };
    });

    after(function() {
      require('child_process')
        .exec('rm test-cookie-*.db');
      require('child_process')
        .exec('rm t002-*.db');
    });

    describe('001: #clear', function() {
      it('001: 定義されているか確認する', function(done) {
        requirejs([
          'cookie-manager'
        ], function(CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-1.db'
            }
          });
          var type = typeof cookie_manager.clear;
          type.should.be.equal('function');
          done();
        });
      });
    });

    describe('002: #getCookieHeader', function() {
      it('001: 定義されているか確認する', function(done) {
        requirejs([
          'cookie-manager'
        ], function(CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-2.db'
            }
          });
          var type = typeof cookie_manager.getCookieHeader;
          type.should.be.equal('function');
          done();
        });
      });
    });

    describe('003: #setCookieHeader', function() {
      it('001: 定義されているか確認する', function(done) {
        requirejs([
          'cookie-manager'
        ], function(CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-3.db'
            }
          });
          var type = typeof cookie_manager.setCookieHeader;
          type.should.be.equal('function');
          done();
        });
      });
    });

    describe('004: #set', function() {
      it('001: 定義されているか確認する', function(done) {
        requirejs([
          'cookie-manager'
        ], function(CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-4.db'
            }
          });
          var type = typeof cookie_manager.set;
          type.should.be.equal('function');
          done();
        });
      });

      it('002: 同じキーの値を複数回格納したときに更新されているか確認する', function(done) {
        requirejs([
          'cookie-manager'
        ], function(CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-4-2.db'
            }
          });

          cookie_manager.set('http://www.example.info', [{
            key: 'key1',
            value: 'value1',
            domain: 'www.example.info',
            path: '/'
          }])
            .done(function() {
              cookie_manager.getCookieHeader('http://www.example.info')
                .done(function(cookie_header) {
                  cookie_header.should.be.equal('Cookie: key1=value1');
                  cookie_manager.set('http://www.example.info', [{
                    key: 'key1',
                    value: 'value2',
                    domain: 'www.example.info',
                    path: '/'
                  }])
                    .done(function() {
                      cookie_manager.getCookieHeader('http://www.example.info')
                        .done(function(cookie_header) {
                          cookie_header.should.be.equal('Cookie: key1=value2');
                          done();
                        });
                    });
                })
            });

        });
      });
    });

    describe('005: experiments', function() {
      it('001: set-cookie', function(done) {
        requirejs([
          'underscore',
          'cookie-manager'
        ], function(_, CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-5.db'
            }
          });
          cookie_manager.clear()
            .done(function() {
              var http_response_list = [
                'HTTP/1.1 200 OK',
                'Set-Cookie: key1=value1; path=/; expires=Wed, 22-Jun-2033 09:07:54 GMT',
                'Set-Cookie: key2=value2; path=/; expires=Wed, 22-Jun-2033 09:07:54 GMT'
              ];
              http_response_list = _(http_response_list)
                .map(function(line) {
                  return line + '\r\n';
                });

              var http_response_text = http_response_list.join('');
              cookie_manager.setCookieHeader('http://www.example.com/', http_response_text)
                .done(function() {
                  cookie_manager.getCookieHeader('http://www.example.com/login')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1; key2=value2');
                      done();
                    });
                });

            });
        });
      });

      it('002: set-cookie twice request', function(done) {
        requirejs([
          'underscore',
          'cookie-manager'
        ], function(_, CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-6.db'
            }
          });

          cookie_manager.clear()
            .done(function() {
              var http_response_list = [
                'HTTP/1.1 200 OK',
                'Set-Cookie: key1=value1; path=/; expires=Wed, 22-Jun-2033 09:07:54 GMT',
              ];
              http_response_list = _(http_response_list)
                .map(function(line) {
                  return line + '\r\n';
                });
              var http_response_text = http_response_list.join('');
              cookie_manager.setCookieHeader('http://www.example.com/', http_response_text)
                .done(function() {
                  var http_response_list = [
                    'HTTP/1.1 200 OK',
                    'Set-Cookie: key2=value2; path=/; expires=Wed, 22-Jun-2033 09:07:54 GMT',
                  ];
                  http_response_list = _(http_response_list)
                    .map(function(line) {
                      return line + '\r\n';
                    });
                  var http_response_text = http_response_list.join('');
                  cookie_manager.setCookieHeader('http://www.example.com/', http_response_text)
                    .done(function() {
                      cookie_manager.getCookieHeader('http://www.example.com/login')
                        .done(function(cookie_header) {
                          cookie_header.should.be.equal('Cookie: key1=value1; key2=value2');
                          done();
                        });
                    });
                });
            });

        });
      });

      it('003: 異なるドメインでCookieの共有が遮断されているか確認する', function(done) {
        requirejs([
          'underscore',
          'jquery',
          'cookie-manager'
        ], function(_, $, CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-7.db'
            }
          });

          cookie_manager.clear()
            .done(function() {
              var http_response_list = [
                'HTTP/1.1 200 OK',
                'Set-Cookie: key1=value1; path=/; expires=Wed, 22-Jun-2033 09:07:54 GMT',
              ];
              http_response_list = _(http_response_list)
                .map(function(line) {
                  return line + '\r\n';
                });
              var http_response_text = http_response_list.join('');
              cookie_manager.setCookieHeader('http://test-domain.example.com', http_response_text)
                .done(function() {
                  var deferreds = [];

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://sub.test-domain.example.com')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example2.com')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: ');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.net')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: ');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.net:8080')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: ');
                    }));

                  $.when.apply(null, deferreds)
                    .done(function() {
                      done();
                    });

                });
            });
        });
      });

      it('004: ポート番号が異なるホストでCookieが共有されているか確認する', function(done) {
        requirejs([
          'underscore',
          'jquery',
          'cookie-manager'
        ], function(_, $, CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-8.db'
            }
          });

          cookie_manager.clear()
            .done(function() {
              var http_response_list = [
                'HTTP/1.1 200 OK',
                'Set-Cookie: key1=value1; path=/; expires=Wed, 22-Jun-2033 09:07:54 GMT'
              ];
              http_response_list = _(http_response_list)
                .map(function(line) {
                  return line + '\r\n';
                });
              var http_response_text = http_response_list.join('');
              cookie_manager.setCookieHeader('http://test-domain.example.com', http_response_text)
                .done(function() {
                  var deferreds = [];

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://sub.test-domain.example.com')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com:8080')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://sub.test-domain.example.com:8080')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com:80')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://sub.test-domain.example.com:80')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: key1=value1');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example2.com')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: ');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.net')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: ');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.net:8080')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: ');
                    }));

                  $.when.apply(null, deferreds)
                    .done(function() {
                      done();
                    });

                });
            });
        });
      });

      it('005: 禁止されているパスでCookieの共有が遮断されているか確認する', function(done) {
        requirejs([
          'underscore',
          'jquery',
          'cookie-manager'
        ], function(_, $, CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 'test-cookie-manager-9.db'
            }
          });

          cookie_manager.clear()
            .done(function() {
              var http_response_list = [
                'HTTP/1.1 200 OK',
                'Set-Cookie: user=alice; path=/login; expires=Wed, 22-Jun-2033 09:07:54 GMT',
              ];
              http_response_list = _(http_response_list)
                .map(function(line) {
                  return line + '\r\n';
                });
              var http_response_text = http_response_list.join('');
              cookie_manager.setCookieHeader('http://test-domain.example.com/login', http_response_text)
                .done(function() {
                  var deferreds = [];

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com/login')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: user=alice');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com/login/auth')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: user=alice');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com:8080/login')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: user=alice');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com:8080/login/auth')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: user=alice');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com/home')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: ');
                    }));

                  deferreds.push(cookie_manager.getCookieHeader('http://test-domain.example.com/login2')
                    .done(function(cookie_header) {
                      cookie_header.should.be.equal('Cookie: ');
                    }));

                  $.when.apply(null, deferreds)
                    .done(function() {
                      done();
                    });

                });
            });
        });
      });

    });

    describe('006: #get', function() {

      it('001', function(done) {
        requirejs([
          'underscore',
          'jquery',
          'cookie-manager'
        ], function(_, $, CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 't002-006-001.db'
            }
          });

          cookie_manager.clear()
            .done(function() {
              var http_response_list = [
                'HTTP/1.1 200 OK',
                'Set-Cookie: user=alice; path=/login; expires=Wed, 22-Jun-2033 09:07:54 GMT',
              ];
              http_response_list = _(http_response_list)
                .map(function(line) {
                  return line + '\r\n';
                });
              var http_response_text = http_response_list.join('');
              cookie_manager.setCookieHeader('http://test-domain.example.com/login', http_response_text)
                .done(function() {
                  var deferreds = [];

                  deferreds.push(cookie_manager.get('http://test-domain.example.com/login')
                    .done(function(cookie_obj) {
                      cookie_obj.user.should.be.equal('alice');
                    }));

                  deferreds.push(cookie_manager.get('http://test-domain.example.com/login/auth')
                    .done(function(cookie_obj) {
                      cookie_obj.user.should.be.equal('alice');
                    }));

                  deferreds.push(cookie_manager.get('http://test-domain.example.com:8080/login')
                    .done(function(cookie_obj) {
                      cookie_obj.user.should.be.equal('alice');
                    }));

                  deferreds.push(cookie_manager.get('http://test-domain.example.com:8080/login/auth')
                    .done(function(cookie_obj) {
                      cookie_obj.user.should.be.equal('alice');
                    }));

                  deferreds.push(cookie_manager.get('http://test-domain.example.com/home')
                    .done(function(cookie_obj) {
                      cookie_obj.should.not.have.property('user');
                    }));

                  deferreds.push(cookie_manager.get('http://test-domain.example.com/login2')
                    .done(function(cookie_obj) {
                      cookie_obj.should.not.have.property('user');
                    }));

                  $.when.apply(null, deferreds)
                    .done(function() {
                      done();
                    });

                });
            });
        });
      });

      it('002', function(done) {
        requirejs([
          'underscore',
          'jquery',
          'cookie-manager'
        ], function(_, $, CookieManager) {
          var cookie_manager = new CookieManager({
            storage: {
              target: 't002-006-002.db'
            },
            'cookie-manager': {
              cookie: [{
                'key': 'user',
                'value': 'alice',
                'domain': '.example.com',
                'path': '/login/'
              }]
            }
          });

          cookie_manager.clear()
            .done(function() {
              var deferreds = [];
              deferreds.push(cookie_manager.get('http://test-domain.example.com/login')
                .done(function(cookie_obj) {
                  cookie_obj.user.should.be.equal('alice');
                }));
              deferreds.push(cookie_manager.get('http://test-domain.example.com/login/auth')
                .done(function(cookie_obj) {
                  cookie_obj.user.should.be.equal('alice');
                }));
              deferreds.push(cookie_manager.get('http://test-domain.example.com:8080/login')
                .done(function(cookie_obj) {
                  cookie_obj.user.should.be.equal('alice');
                }));
              deferreds.push(cookie_manager.get('http://test-domain.example.com:8080/login/auth')
                .done(function(cookie_obj) {
                  cookie_obj.user.should.be.equal('alice');
                }));
              deferreds.push(cookie_manager.get('http://test-domain.example.com/home')
                .done(function(cookie_obj) {
                  cookie_obj.should.not.have.property('user');
                }));
              deferreds.push(cookie_manager.get('http://test-domain.example.com/login2')
                .done(function(cookie_obj) {
                  cookie_obj.should.not.have.property('user');
                }));
              $.when.apply(null, deferreds)
                .done(function() {
                  done();
                });
            });
        });
      });

    });

  });

})();


text:
Q: Base R way of counting by multiple groups I want to count instances based on many categorical variables using only base R.
Sample data:
create_sample <- function(){sample(LETTERS[1:3], size = 500, replace=T)}
df <- data.frame(
          x1 = create_sample(),
          x2 = create_sample(),
          x3 = create_sample(),
          x4 = create_sample()
        )

Normally I'd use dplyr and do something like this:
df %>%
  mutate(count = 1) %>%
  group_by(x1, x2, x3, x4) %>%
  summarise_all(funs(sum))

To get the dataframe output I want:
# A tibble: 55 x 5
# Groups:   x1, x2, x3 [?]
   x1    x2    x3    x4    count
   <fct> <fct> <fct> <fct> <dbl>
 1 A     A     A     A      3.00
 2 A     A     B     A      1.00
 3 A     A     B     B      1.00
 4 A     A     B     C      2.00
 5 A     A     C     B      1.00
 6 A     B     A     A      3.00
 7 A     B     A     B      2.00
 8 A     B     A     C      1.00

But now I have the constraint of having to do the data manipulation with base R. One option I tried was something like:
as.data.frame(table(df$x1, df$x2, df$x3, df$x4))

Aside from the output being too large counting all the 0 cases, it starts to run a long time and even crash R when I have larger data
Is there a reasonable base R approach to handling multiple groups?

A: We can use count in dplyr
df %>%
   count(!!!rlang::syms(names(.)))

In base R, we use aggregate
aggregate(n~ ., transform(df, n = 1), sum)

Or
aggregate(cbind(n = rep(1, nrow(df)))~ ., df, sum)


Create a maze from chipboard and plastic straws! This simple project has lots of room to scale into an exercise in design thinking. Sketch your maze, lay out your straws, and test it out!
Using a pencil, add a 1 inch mark on each side of the chipboard. You'll use these marks as a guide for cuts. They don't need to be exact, but try to keep each side consistent.
Repeat the process in step 1 until you've made a 1 inch mark on all 4 sides of the chipboard.
Using the scissors, cut a single slit on all 4 sides of the chipboard.
Cut a 1 inch slit into each side of the chipboard. When you're done, your chipboard should have 4 one-inch cuts. The photo here shows 2 of the cuts completed and 2 remaining.
You should now have 4 slits — one on each side of the chipboard. Stop and check to make sure that you cut all these slits. Your chipboard should look like the picture.
Now that the slits are cut, fold each side of the chipboard upward to create 4 walls. If you're having trouble folding these, consider making the slit slightly larger.
Once the sides are folded, add masking tape to the corners to hold them in place. The tape should be placed on the exterior of the folds. This doesn't need to be perfect — just add enough tape to keep the walls folded up.
After adding the tape, the walls should stay in place. If the walls aren't, make sure to redo the folds and tape. The walls keep the marble/bearing from escaping the maze, so take time to ensure that the walls are solid!
Once the walls are sturdy, start planning out your maze. Use this time to plan out your maze and think about the path you want the marble to take.
Once you've planned out your maze path, start drawing the lines with a pencil. Each line is where a plastic straw will be placed. Take as much time as you like during this phase — this is where you can decide how complex you want the project to be!
When drawing the lines, it's a good idea to pause and think about how the maze will work when straws are added. Think about the size of the marble you'll be using and make sure that it'll be able to fit! It's a good idea to use straight and diagonal lines at first that connect together.
Check your maze sketch once you finish. Make sure that the paths are how you want them to be for now. It's much quicker to change the maze plan now than after the straw are glued!
This is optional, but it's a good idea to include a Goal marking so that your players can find the end of your maze!
Likewise, it's a good idea to add a Start label to the top of your maze. This can be done as creatively as you'd like — or you can omit it completely if your plan calls for it!
Once you're happy with the first version of your plan, go ahead and start cutting the straws with your scissors. If you know that you're using a lot of the same size pieces, you can start cutting the straws in preparation for placing them on the chipboard.
If you have lots of precise, different length cuts you can place the straw over each line and cut it from there. This will help make sure that you don't waste any straws. In this photo, the straw sits on top of the first line which is then used as a reference point for cutting.
If you're using the previous method, the next step is to cut each straw to match the line size. This is a longer process but is more accurate and is likely to result in wasted straws.
At this point, it's a good idea to double check your maze layout once you've placed the straws. Take a look at the overall design and move anything around that you want to before applying glue.
Once you've placed your straws you're ready to start adding the hot glue! You'll find a good method that works for you, but one suggestion is to apply glue to one line at a time, placing each straw as you go.
Here's an example of one way to apply the glue to the chipboard. It's recommended to go one line at a time.
After adding the hot glue to each line, you'd place the cut straw and hold it in place while it dries. You'll want the straws to be attached pretty firmly so that they don't come off when the marble hits them.
Periodically stop and check your maze as you glue the straws to the chipboard. You may find that you need to adjust one or two straws as you're working. Try to do this before the glue is completely dry, otherwise you may detach the straw and have to glue it again.
Once your straws are in glued, take a moment to check your maze. Make sure that there aren't any loose straws — you'll want these to be pretty firmly attached!
Use your marble or bearing to test your maze! At this point you may find that you want to make some alterations, especially if your marble gets stuck. Make adjustments as needed, remembering to firmly reattach any straws that you move!


The Native American Bank may set up a bank branch at Rocky Boy's Indian Reservation this year.
The Chippewa Cree tribal council unanimously voted last Thursday to initiate the application process with the bank, council member Jonathan Windy Boy said.
"We've already made our initial commitment," Windy Boy said. "This is an opportunity (for) our investment, and I think it's going to help us and the whole area."
Windy Boy said the buy-in would cost the tribe $1 million. The tribe would take the money from a sum of about $3 million the tribe acquired as part of its water rights settlement with the federal government.
Jim Morsette, director of the tribal Water Resources Department, said the money is in an economic development fund that was part of the settlement package the tribe received from the federal government in 1999.
Native American Bank president and chief executive officer John Beirise said the bank is having conversations with the tribe about the possibility of opening a branch at Rocky Boy.
The bank's executive offices are in Denver, Beirise said, but its only banking facility is in Browning.
"We are having discussions with the leaders at Rocky Boy to talk about how we can assist the tribe and provide banking services in a more convenient fashion," Beirise said Tuesday.
Beirise said the bank is now gathering financial information from the tribe before submitting an application for a new branch to federal regulators.
"They would own a percentage of our holding company," Beirise said. The tribe would own less than 10 percent of the bank, he said.
Windy Boy said that if the branch moves in, it is likely that the tribe will pull its financial assets from Independence Bank and Wells Fargo in Havre.
"I'm sure it probably will happen," Windy Boy said. He said he was not sure how much the tribe has in Havre banks.
"It's a significant amount," he said.
Windy Boy, who is also a Democratic state representative, said a branch at Rocky Boy would help the tribe invest more in local projects.
"In this day and age we need to try to make the best bang for our buck," he said.
"We're just going to be investing more with our own dollars in our own infrastructure up here," Windy Boy said, adding that the bank would help support projects like a $10 million to $20 million health facility planned at Rocky Boy.
Windy Boy said a bank branch at the reservation would be much more convenient for tribal members, noting the inconvenience of driving 30 miles to do banking. But he said the tribe would not be advising tribal members to close their accounts in Havre and move them to the tribal bank.
"That's going to be an individual choice," he said. "We're not going to be dictating to anybody what they need to do."
Beirise also emphasized the distance between Rocky Boy and Havre.
"The reality is, how far is Havre from Rocky Boy? Not the most convenient location," he said.
Beirise said that once the tribe completes the application, the bank will apply to the Office of the Comptroller of the Currency in Washington, D.C., for approval.
The decision will depend in part on the local economy and the type of banking services already available, he said. Once the application is filed, it will probably take about 90 days, he said, adding that he thinks approval is likely.
"This would be our first expansion," Beirise said. "This is a really big deal."


text:
'Killing Eve' failed its queer fan base in the end, but great acting preserves show's legacy
Carla Meyer April 10, 2022Updated: April 11, 2022, 6:46 pm
Sandra Oh as Eve Polastri (left) and Jodie Comer as Villanelle star in "Killing Eve." Photo: Anika Molnar / BBC America
Editor's note: This story contains spoilers from the series finale of "Killing Eve."
After two seasons of studious avoidance, "Killing Eve" finally and unambiguously acknowledged its lead characters' romance during its Sunday, April 10, series finale.
This 11th hour, or more literally, 32nd hour (four seasons of eight episodes) development spared the BBC America spy thriller from the hall of shame reserved for shows that pander to queer audiences. Those of us who had waited since 2018 for former MI5 agent Eve (Sandra Oh) and assassin Villanelle (Jodie Comer) to acknowledge their feelings at the same time, in the same place, were rewarded with about 20 minutes of them having fun and showing physical affection.
The show's characteristically violent (but uncharacteristically badly staged) final scene then dashed all hopes of the romance ever growing further in a "Killing Eve" movie or reboot — or even as a flash forward in the planned prequel series focused on Fiona Shaw's Carolyn Martens. Or maybe not all hopes, if the writers revive a biblical storyline introduced early in season four.
Was it better to see Eve and Villanelle show their love only briefly than to never have seen it at all? Absolutely. But the ridiculous delay of this crucial plot point until the series finale highlights the creative timidity of the past two seasons. It tarnished the legacy of "Killing Eve," a onetime critical and awards darling (Oh won a Golden Globe and Comer an Emmy in 2019).
Jodie Comer won an Emmy in 2019 for her role as Villanelle in "Killing Eve." Photo: Anika Molnar / BBC America
Oh and Comer remained stellar throughout, their electric chemistry undiminished by the series' hemming, hawing refusal to acknowledge their characters' twisted yet fascinating bond as the only compelling element sustaining it through the latter half of its run. Instead, the third and fourth seasons' respective showrunners (each season had a different female chief) Suzanne Heathcote and Laura Neal took pains to keep the characters apart.
The dearth of joint scenes was so striking that one wondered if Oh and Comer were secretly feuding, as Julianna Margulies and Archie Panjabi allegedly were when they stopped filming together on "The Good Wife." But in joint interviews, Oh and Comer share a rapport that seems genuine.
Separating Eve and Villanelle for long stretches makes little storytelling sense. The two attempting a relationship (or at least a drunken night together) seemed like a natural step in Eve's odyssey from a wisecracking, seemingly content spy agency office worker — married to a good-natured teacher named Niko (Owen McDonnell, who was always more than just a mustache) — to an isolated malcontent beguiled by Villanelle and obsessed with the criminal organization known as the Twelve.
Sandra Oh earned a Golden Globe for her role as Eve Polastri in "Killing Eve." Photo: Olly Courtney / BBC America
It was never our idea to position Villanelle, who courts Eve by killing her best friend Bill (David Haig) practically in front of her and taunting Niko endlessly, as Eve's one and only. We started watching "Killing Eve" because of Oh, who has been flawless since "Arliss," and because we loved series creator Phoebe Waller-Bridge's "Fleabag."
But the first episode's clear "Black Widow" vibes hooked us. We refer not to last year's Scarlett Johannson Marvel movie but the 1987 thriller starring Debra Winger as an FBI desk jockey who becomes obsessed with a beautiful female killer (Theresa Russell), who enjoys being chased. That movie captured many a young sapphic heart, although the women did not get together, and nobody expected them to, because it was the '80s.
"Killing Eve," by contrast, set up huge expectations when it established Villanelle as clearly queer and Eve as clearly infatuated with her, almost from jump. The role of Eve's own homicidal urges in that infatuation would become more apparent as the series progressed. The first season obscured that aspect with the flash of its European travelogue cinematography, evocative pop music and Comer's dazzling way with accents and personas. Waller-Bridge's inimitable cheeky sensibility allowed us to accept the first season's queasier elements as part of a piece with the raunchier moments of "Fleabag."
Jodie Comer as Villanelle (left) and Sandra Oh as Eve face off in a scene from season two of "Killing Eve." Photo: BBC America
Then Emerald Fennell, the second season's showrunner, had Eve kill a guy with an ax. He was a bad guy, and Villanelle tricked her into doing it, but she still did it. Although far more heavy-handed than Waller-Bridge, Fennell (who later won a screenwriting Oscar and directing nomination for her film "Promising Young Woman") always recognized the Villanelle-Eve pairing as the show's primary allure.
Her season put them together often and featured the series' best acting, especially from Oh. Season two contains the series' best moment, when Eve admits to a therapist that her association with Villanelle, although disastrous in many ways, has her finally feeling "wide awake."
Fennell ultimately copped out, by repeating the first season's ending, this time having Villanelle shoot Eve instead of Eve stab Villanelle. Then "Killing Eve" just kept copping out.
We get it. It would be a challenge to sustain a romantic story line that would need to incorporate Eve's and Villanelle's pathologies. But no one asked for a full-fledged relationship — just the start of something before the series finale.
Fiona Shaw's Carolyn Martens character will be the focus of a planned "Killing Eve" prequel series. Photo: David Emery / BBC America
Heathcote did not even try, and Neal waited until the last possible minute. They instead gave loads of screen time to pointless new characters, while insisting that quip-ready spy chief Carolyn (an overburdened Shaw) was better in larger doses than small. The absence of other compelling story lines made a lack of Villanelle and Eve even more maddening.
When the romantic moments finally arrived, they made us long for what could have been. The series finale is slapdash in many ways, but the more intimate Villanelle and Eve scenes were crafted carefully. Comer shows her growth as an actor over the past four years — and she started out great — in the range of emotions that play on her face at any given moment.
Sandra Oh appears as Eve Polastri in season two's first episode of "Killing Eve." Photo: Aimee Spinks / BBC America
Oh's performance is similarly multidimensional, with Eve looking delighted, for the first time in a while, by something other than finding dirt on the Twelve. This Eve is reminiscent of the smart, fun woman from the start of the show — when Waller-Bridge's comedic style allowed for some Cristina Yang spillover. But hints of regret and exhaustion are visible around the edges of Eve's smile.
She is, in essence, a mirror image of the loyal "Killing Eve" viewers who were made briefly happy before reality set in.
"Killing Eve" (TV-MA) is available to stream on AMC+. The first season is also streaming on Hulu.
Carla Meyer
Carla Meyer Carla Meyer is a Northern California freelance writer.
Your weekly guide to Bay Area arts & entertainment.
5 shows and movies coming to Netflix, Disney+ and more in February
Review: Pamela Anderson documentary tells all — in her own words
New Castro Theatre plan 'only way' to keep venue open, Another Planet says
By Aidin Vaziri
Picnic at Hanging Rock
Mothering Sunday


text:
#ifndef APR_DBM_H
#define APR_DBM_H

#include "apu.h"
#include "apr.h"
#include "apr_errno.h"
#include "apr_pools.h"
#include "apr_file_info.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @file apr_dbm.h
 * @brief APR-UTIL DBM library
 */
/**
 * @defgroup APR_Util_DBM DBM routines
 * @ingroup APR_Util
 * @{
 */
/**
 * Structure for referencing a dbm
 */
typedef struct apr_dbm_t apr_dbm_t;

/**
 * Structure for referencing the datum record within a dbm
 */
typedef struct
{
    /** pointer to the 'data' to retrieve/store in the DBM */
    char *dptr;
    /** size of the 'data' to retrieve/store in the DBM */
    apr_size_t dsize;
} apr_datum_t;

/* modes to open the DB */
#define APR_DBM_READONLY        1       /**< open for read-only access */
#define APR_DBM_READWRITE       2       /**< open for read-write access */
#define APR_DBM_RWCREATE        3       /**< open for r/w, create if needed */
#define APR_DBM_RWTRUNC         4       /**< open for r/w, truncating an existing
                                          DB if present */
/**
 * Open a dbm file by file name and type of DBM
 * @param dbm The newly opened database
 * @param type The type of the DBM (not all may be available at run time)
 *

 *  db   for Berkeley DB files
 *  gdbm for GDBM files
 *  ndbm for NDBM files
 *  sdbm for SDBM files (always available)
 *  default for the default DBM type
 *

 * @param name The dbm file name to open
 * @param mode The flag value
 *

 *           APR_DBM_READONLY   open for read-only access
 *           APR_DBM_READWRITE  open for read-write access
 *           APR_DBM_RWCREATE   open for r/w, create if needed
 *           APR_DBM_RWTRUNC    open for r/w, truncate if already there
 *

 * @param perm Permissions to apply to if created
 * @param cntxt The pool to use when creating the dbm
 * @remark The dbm name may not be a true file name, as many dbm packages
 * append suffixes for seperate data and index files.
 * @bug In apr-util 0.9 and 1.x, the type arg was case insensitive.  This
 * was highly inefficient, and as of 2.x the dbm name must be provided in
 * the correct case (lower case for all bundled providers)
 */

APU_DECLARE(apr_status_t) apr_dbm_open_ex(apr_dbm_t **dbm, const char* type,
                                       const char *name,
                                       apr_int32_t mode, apr_fileperms_t perm,
                                       apr_pool_t *cntxt);

/**
 * Open a dbm file by file name
 * @param dbm The newly opened database
 * @param name The dbm file name to open
 * @param mode The flag value
 *

 *           APR_DBM_READONLY   open for read-only access
 *           APR_DBM_READWRITE  open for read-write access
 *           APR_DBM_RWCREATE   open for r/w, create if needed
 *           APR_DBM_RWTRUNC    open for r/w, truncate if already there
 *

 * @param perm Permissions to apply to if created
 * @param cntxt The pool to use when creating the dbm
 * @remark The dbm name may not be a true file name, as many dbm packages
 * append suffixes for seperate data and index files.
 */
APU_DECLARE(apr_status_t) apr_dbm_open(apr_dbm_t **dbm, const char *name,
                                       apr_int32_t mode, apr_fileperms_t perm,
                                       apr_pool_t *cntxt);

/**
 * Close a dbm file previously opened by apr_dbm_open
 * @param dbm The database to close
 */
APU_DECLARE(void) apr_dbm_close(apr_dbm_t *dbm);

/**
 * Fetch a dbm record value by key
 * @param dbm The database
 * @param key The key datum to find this record
 * @param pvalue The value datum retrieved for this record
 */
APU_DECLARE(apr_status_t) apr_dbm_fetch(apr_dbm_t *dbm, apr_datum_t key,
                                        apr_datum_t *pvalue);
/**
 * Store a dbm record value by key
 * @param dbm The database
 * @param key The key datum to store this record by
 * @param value The value datum to store in this record
 */
APU_DECLARE(apr_status_t) apr_dbm_store(apr_dbm_t *dbm, apr_datum_t key,
                                        apr_datum_t value);

/**
 * Delete a dbm record value by key
 * @param dbm The database
 * @param key The key datum of the record to delete
 * @remark It is not an error to delete a non-existent record.
 */
APU_DECLARE(apr_status_t) apr_dbm_delete(apr_dbm_t *dbm, apr_datum_t key);

/**
 * Search for a key within the dbm
 * @param dbm The database
 * @param key The datum describing a key to test
 */
APU_DECLARE(int) apr_dbm_exists(apr_dbm_t *dbm, apr_datum_t key);

/**
 * Retrieve the first record key from a dbm
 * @param dbm The database
 * @param pkey The key datum of the first record
 */
APU_DECLARE(apr_status_t) apr_dbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey);

/**
 * Retrieve the next record key from a dbm
 * @param dbm The database
 * @param pkey The key datum of the next record
 */
APU_DECLARE(apr_status_t) apr_dbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey);

/**
 * Proactively toss any memory associated with the apr_datum_t.
 * @param dbm The database
 * @param data The datum to free.
 */
APU_DECLARE(void) apr_dbm_freedatum(apr_dbm_t *dbm, apr_datum_t data);

/**
 * Report more information when an apr_dbm function fails.
 * @param dbm The database
 * @param errcode A DBM-specific value for the error (for logging). If this
 *                isn't needed, it may be NULL.
 * @param errbuf Location to store the error text
 * @param errbufsize The size of the provided buffer
 * @return The errbuf parameter, for convenience.
 */
APU_DECLARE(char *) apr_dbm_geterror(apr_dbm_t *dbm, int *errcode,
                                     char *errbuf, apr_size_t errbufsize);
/**
 * If the specified file/path were passed to apr_dbm_open(), return the
 * actual file/path names which would be (created and) used. At most, two
 * files may be used; used2 may be NULL if only one file is used.
 * @param pool The pool for allocating used1 and used2.
 * @param type The type of DBM you require info on @see apr_dbm_open_ex
 * @param pathname The path name to generate used-names from.
 * @param used1 The first pathname used by the apr_dbm implementation.
 * @param used2 The second pathname used by apr_dbm. If only one file is
 *              used by the specific implementation, this will be set to NULL.
 * @return An error if the specified type is invalid.
 * @remark The dbm file(s) don't need to exist. This function only manipulates
 *      the pathnames.
 */
APU_DECLARE(apr_status_t) apr_dbm_get_usednames_ex(apr_pool_t *pool,
                                                   const char *type,
                                                   const char *pathname,
                                                   const char **used1,
                                                   const char **used2);

/**
 * If the specified file/path were passed to apr_dbm_open(), return the
 * actual file/path names which would be (created and) used. At most, two
 * files may be used; used2 may be NULL if only one file is used.
 * @param pool The pool for allocating used1 and used2.
 * @param pathname The path name to generate used-names from.
 * @param used1 The first pathname used by the apr_dbm implementation.
 * @param used2 The second pathname used by apr_dbm. If only one file is
 *              used by the specific implementation, this will be set to NULL.
 * @remark The dbm file(s) don't need to exist. This function only manipulates
 *      the pathnames.
 */
APU_DECLARE(void) apr_dbm_get_usednames(apr_pool_t *pool,
                                        const char *pathname,
                                        const char **used1,
                                        const char **used2);

/** @} */
#ifdef __cplusplus
}
#endif

#endif	/* !APR_DBM_H */


text:
A moving experience
As the recognised voice of the professional moving industry, the British Association of Removers is dedicated to promoting professional excellence in removals.
Defining User Journeys for Website Successjo@rubiconmarketing.net2021-05-27T10:30:19+01:00
The integration of a number of disparate sub-group websites a year previously was always going to be a challenging task and whilst this was achieved, feedback from the key stakeholders shortly after launch was that the new site wasn't fully achieving its goals in terms of design, user experience, content and language.
UX/Wireframing
WordPress Build
Putting the customer first
We sought to make the website more engaging and user-centred by asking: 'Who will use this site? Why are they here? How will they use the site?' These answers provided firm foundations from which we could create a better multi-user experience which is intuitive, informative and ultimately meets the users' needs.
We revised the content; paring some down, adding additional content and re-ordering and rewriting other parts to create more of a 'narrative'. A website works best when it reads like a story, which is something people are hard-wired to respond well to and will engage with. We also changed the language in places, including removing industry terminology and replacing it with more conversational text.
The previous site analytics and the new content also helped us to put in place a suitable SEO strategy.
Visit the BAR website
"I have just seen the new website and wanted to congratulate you and the team on a great job! It's clean, concise, logical and I can see that a lot of hard work has gone into it. Well done to everyone involved. You should seriously consider doing this for a living!"
Paul Swindon, Company Secretary British Association of Removers
"Wow, that looks different, the new style and feel, really wants you to engage, I think this will now give the two functional groups more confidence, this is a massive step forward, and well done to all involved."
Nigel Shaw, BAR Commercial Moving Group Chairman
First month year-on-year comparisons
Increase in new users
Increase in sessions
Increase in average time spent on a page


If you or someone else is experiencing a substance use and/or mental health emergency, call 911 and/or ACCESS, 540-961-8400.
For the over 16,000 people estimated to have substance use and alcohol problems in our locale, help is available!
Disclosure and disclaimer: Anne Giles compiled these resource pages and is a counselor at New River Valley Community Services. The opinions expressed here are hers alone and do not necessarily reflect the positions of her associates, clients, employers or relatives.
This content is for informational purposes only and is not a substitute for medical or professional advice. Consult a qualified health care professional for personalized medical and professional advice.


Encrypts content at the time of capture, both in flight and at rest, and is then maintained as tamper proof. Manages administrator and user rights through existing enterprise security tools. Maintains a full audit trail of the content and its disposition. Manages web-based document requests through a partner or customer security-rich link.
Incorporates a capture wizard for a simple, guided user experience for deployment in virtually any scenario. Supplies an intuitive web client user interface that has been successfully evaluated and approved in the IBM Usability Lab. Minimizes the end-user learning curve with direct integration into the front panels of MFD devices. Eliminates the risk of inaccurate indexing with support for automated database lookups and validation.
Integrate with IBM Datacap for advanced document capture capabilities, including optical character recognition (OCR), Intelligent Character Recognition (ICR) and analytics-based classification tools.Integrates with all IBM image repositories as well as leading ECM workflow platforms. Supports a diverse device infrastructure, including support for most leading MFD manufacturers. Allows for centralized administration of settings, including scanner and logging configurations.
Scale to whatever business requirements dictate, whether 50 or 50,000 locations. Features Encapture mobile client with the ability to capture paper documents using the mobile device camera. Use with IBM Datacap to capture content from the palm of your hand and deliver it to large centralized repositories for classification, indexing and optimization.