text:
Tag Archives: early 1900s
Famous in its day: Blanco's
Blanco's Café was one of San Francisco's luxury restaurants of the early 20th century. Among the very first restaurants to open after the catastrophic earthquake and fire of 1906, it made its debut on November 7, 1907 at 859 O'Farrell Street.
It soon became a popular place for banquets, one of which is depicted in the 1915 postcard shown above. Typically such banquets were all male, often being made up of members of professional and cultural societies. Blanco's was also a favorite after-theater spot for men and women who enjoyed a "cold bot and hot bird" as a light supper of champagne and quail was referred to in those days.
Its owners and managers were mostly old hands in the restaurant business, Italians and Germans led by a Spaniard, Antonio Blanco, who had been born in Malaga. Blanco's reputation was built upon his pre-fire restaurant, The Poodle Dog, which he re-established a short time after opening Blanco's. Two of Blanco's managers had previously been at Delmonico's restaurant in San Francisco, another victim of the fire.
The city's newspapers were effusive about Blanco's when it opened, gushing over its Louis XIV entrance hall, marble pillars, murals, and chandeliers. The café's first chef came from The Poodle Dog, while the dining room manager had earned his exalted reputation at Tait's and the St. Francis Hotel. All in all, Blanco's was "a temple of art and beauty" destined to become the envy of caterers around the world. In 1914 Blanco's boldly advertised that it was "the finest café in the United States."
Naturally it classed itself as a French restaurant, French cuisine being synonymous with the good life – and the only kind that could command a high price then.
Blanco's continued in business until 1933 but not without problems. In 1917 a plan to add two stories to the restaurant was abandoned, perhaps because of the looming nationwide ban on the sale of alcohol. Prohibition in 1919 was indeed a blow to fine dining establishments such as Blanco's. The restaurant blithely advertised in 1919, "Good-bye to good old wines. Good-bye to good old times. But good eats will remain." But it was becoming increasingly difficult to operate a high-living restaurant in the style Blanco's was accustomed to. In 1921 its manager was arrested for not keeping a register of transient guests at Blanco's Annex, the hotel next door which the restaurant had constructed in 1908 and opened the next year.
Few San Franciscans would have failed to realize the significance of this infraction, even if they did not recall Blanco's "scandal" of 1912. In July of that year a Sausalito woman hired detectives to shadow her husband who was enjoying a romantic dinner at Blanco's in the company of another woman. Spotting the detectives but not knowing who was under surveillance, Blanco's manager went from table to table notifying all the guests of the detectives at work. Numbers of couples made a quick exit from the back door. Needless to say, the privacy curtains on the mezzanine booths shown in the ca. 1915 postcard were more than merely decorative.
Yet, despite all, Blanco's carried on and was recommended in San Francisco guide books of the 1920s. It is ironic that it made it through Prohibition yet failed just as alcohol was becoming legal once again in 1933.
In 1934 the contents of both the restaurant and hotel were sold off, including fine china, silver-plated cutlery, tapestry panels and hangings, 40 copper stock pots, French furniture, bronze statuary, and 140 Viennese arm chairs.
In October 1935 the restaurant reopened as The Music Box, a supper club under the direction of stripper and "fan dancer" Sally Rand. It had been partially modernized. Murals were replaced with mirrors and many other decorations by artist Attilio Moretti had been removed. Ruth Thomas, co-author of Eating Around San Francisco (1937), reported that she was given a tour of the Music Box and saw Venetian glass chandeliers and life-sized plaster statues of women in a basement storeroom.
The chandeliers and some of the murals were restored, possibly during the late sixties when the building was occupied by the Charles Restaurant. Today the building still stands and is in use as the Great American Music Hall. [Photo shows the altered restaurant building front, much of it bricked in including the large center window above the door which now supports a sign; the building to the left was Blanco's Annex hotel.]
Filed under elite restaurants
Tagged as early 1900s, French restaurants, luxury restaurants, restaurant booths, restaurant decor, San Francisco restaurants
Product placement in restaurants
Product placement usually refers to the display of branded products in movies and TV shows, such as when the main character sips a certain cola or goes into a coffee shop and opens up his laptop with an image of a glowing piece of fruit clearly visible.
But manufacturers of national brand foods have long been eager to have their products on display in restaurants and that, too, is a form of product placement. In both the media and in restaurants the product is supposed to gain exposure and status by association.
Beverages were among the very first branded "food" products in the United States, and perhaps the first to place their bottles on restaurant tables and in restaurant advertising such as the 1908 Hotel Empire postcard above which features Clysmic bubbling spring water. First advertised in the 1880s as a homeopathic drink that cured cystitis and other maladies, by the early 20th century the water in the unusually shaped green bottle with the red label had become a cocktail mixer. The company put out a complimentary Booze Book which told how to mix drinks.
The Faust restaurant at New York's Columbus Circle had similar postcards with slightly enlarged bottles of Coronet Sloe Gin and Old Quaker Rye Whiskey shown on tables in the foreground.
With restaurants it was a two-way street where food products were concerned: both the restaurants and the products sought to gain status. In the early 20th century people were distrustful of the cleanliness of restaurants as well as much of the food in the marketplace because of decades of widespread adulteration. This attitude became especially prominent following publication of Upton Sinclair's sensational book The Jungle which exposed disgusting practices in slaughterhouses. To counter distrust branded food products began to advertise extensively and were quite successful in convincing the public they were pure.
The ever-clever "Fra" Elbert Hubbard, head of the Roycroft craft studios, developed sophisticated advertising copy in his publication The Philistine in 1901 in which he stressed that Heinz products were regularly used in the Roycroft inn's dining room. Around 1902 the National Biscuit Company introduced industrially extruded ("shredded") wheat to the public through restaurants, dining cars, and steamships.
Even into the 1940s and beyond, restaurants were eager to let patrons know that they used brand-name food products. "Brag About Brands" because it gives the customer confidence, suggested the New York Restaurant Association in 1946. Manufacturers — and their advertising agencies – continued to rely upon nationally known restaurants to give products name recognition and cachet. Heinz advertised extensively in the mid-20th century, with photographs showing patrons at restaurants such as Bookbinder's in Philadelphia and the Brown Derby in Los Angeles using their catsup.
Filed under restaurant customs
Tagged as advertising, brand-name foods, early 1900s, Elbert Hubbard, Heinz catsup, shredded wheat
"Waiter, telephone please!"
As one year ends and another begins, it's a good time to think about what's old and what's new. For example, talking on a phone at the table in a restaurant seems a new-ish kind of activity. Of course you realize that I'm going to tell you it isn't.
Even though the telephone was invented in the 1870s, it took a while for it to become an everyday necessity. So it was still newsworthy when restaurants began to provide telephone service at patrons' tables in the early 1900s. The customer had only to say to the waiter, "Bring me a telephone," and it would be placed on the table and plugged into a jack.
In the first few years of the 20th century tabletop telephone service was available in Chicago, New York, Cleveland, Boston, and probably all big cities. Chicago restaurants such as Kinsley's, the Bismarck, and Boston Oyster House (pictured), as well as the tea room at Mandel Brothers department store were outfitted with table telephones. Boston's R. H. White department store also had phone service in its restaurant. In both these stores the telephones were undoubtedly in the men's, not the women's, sections.
Fans of old movies might remember scenes where waiters rush telephones to male VIPs enjoying the evening out dressed in tuxedos and accompanied by mink-clad companions. But, actually, early restaurant phoning was apparently more like today's: business transactions, usually conducted at lunch. Stock brokers in New York City — who paid a monthly telephone rental fee and might take as many as 30 calls while lunching at a restaurant — were at least liberated from their earlier practice of gulping sandwiches at their desks.
Social commentators worried about the effect on health, how working during times meant for rest would cause "brain fag" and indigestion. The invasion of the restaurant by telephones inspired one journalist in 1902 to imagine how one day "some brilliant genius will invent a telephone that can be carried in the vest pocket and then the hustling American can wire messages to his wife, telling how busy he is while he is crossing the street or going up in the elevator."
Filed under restaurant customs, technology
Tagged as businessmen patrons, early 1900s, telephones in restaurants
Famous in its day: Tony Faust's
By the 1880s Anthony E. Faust had established quite a culinary empire in St. Louis. He ran a Café and Oyster House downtown on Broadway which had a nationwide reputation. Since 1878 it had featured rooftop dining, uncommon in the U.S. then. From his adjoining "Fulton Market" he also retailed and wholesaled "Faust's Own" oysters and other delicacies such as truffles, soy sauce, and curry powder which he shipped to Southwestern and Western states. His Faust label beer, made for him by the Anheuser brewery, was also sold in the West.
He didn't start out in the food business but as an ornamental plasterer who immigrated from the Prussian province of Westphalia at age 17. After being accidentally shot while watching a parade, he gave up his trade and decided to open a café in 1865.
Obviously he had a knack for the new business. And it helped that St. Louis was a booming hub of shipping and commerce positioning itself to dominate commerce with the West. His closeness to the Adolphus Busch family of beer fame was undoubtedly another asset. In 1886 Tony opened a second restaurant in a huge new Exposition Building on Olive Street between 13th and 14th which hosted conventions of architects, music teachers, fraternal organizations, and the Democratic National Convention of 1888.
In the late 1880s he razed his restaurant and replaced it with a finer building. With an interior of carved mahogany woodwork, a tapestried ceiling, and an elaborate mosaic tile floor, the restaurant catered to the fashionable after-theater crowd. At some point, perhaps in 1889, a second story was added, eliminating the rooftop garden (above image, ca. 1906).
Success seemed to mean Tony could do as he wished. Caught serving prairie chickens out of season (under the frankly fraudulent name "Virginia owls"), he freely confessed and flippantly said he'd pay the fine or "break rock" if need be. When the Republican National Convention was held in St. Louis in 1896 he claimed his staff would not prepare or serve meals for Afro-American delegates. Even after the convention's managers offered to hire a space, furnish stoves, and buy provisions to feed the black delegates if Faust would oversee the work, he absolutely refused to do it. Period.
In preparation for the 1904 St. Louis World's Fair (the Louisiana Purchase Exposition), Faust joined half a dozen of St. Louis's top restaurateurs in a trust, the St. Louis Catering Company, probably designed to buy in large quantities and possibly to set prices too. Faust went into partnership with New York's Lüchow's to create a Tyrolean Alps Restaurant at the Fair which seated 5,000 diners and featured costumed singers (pictured). It represented brewers' interests as well, leading one observer to joke that the enormous beer hall should have been named "Budweiser Alps." According to the Fair's Official Program there was also a Faust restaurant in the Fair's west pavilion on Art Hill.
At the time Tony Sr. died in 1906 the Faust empire included a second Fulton Market location, and another Faust restaurant in the Delmar Gardens amusement park in University City managed by his son Tony R. Faust. Like many a successful businessman in the Midwest, Tony R. went to NYC to see about opening a branch there. There was a Faust restaurant in NYC's Columbus Circle in 1908 (pictured), but I am not certain whether this belonged to the St. Louis Fausts. In 1911 Tony Jr. was declared insane. After that his older brother Edward, an executive of Anheuser-Busch who was married to a daughter of Adolphus Busch, took over the restaurants and markets. The downtown restaurants in St. Louis and NYC, and probably the others as well, closed in 1915 and 1916, casualties of looming Prohibition.
Filed under outdoor restaurants, proprietors & careers
Tagged as 1880s, 1890s, 1904 World's Fair, early 1900s, food purveyors, German restaurants, Luchow, rooftop restaurants, St. Louis, Tony Faust


text:
Science —
Climate change could drive air conditioning to boost carbon emissions
Middle income economies could see a huge feedback that enhances future warming.
John Timmer - Apr 28, 2015 6:59 pm UTC
This could make getting carbon emissions in check that much harder.
Consumer Products Safety Commision
209 with 70 posters participating, including story author
The climate is full of feedback loops. When a warming climate melts sea ice, the water that's left behind reflects far less sunlight, leading to a further warming. Now, some researchers at the University of California Berkeley have looked at a human feedback loop: the relation between climate change and air conditioning. Using Mexico as an example, they find that the rising use of air conditioning may boost the country's electricity use and carbon emissions by 80 percent before the century is over—but only if economic growth continues at a pace that allows people to buy air conditioners.
Understanding the margins
The study involves combining two types of economic figures, the intensive and extensive margins. Intensive margins, in this case, focused simply on what happens to electricity use as the temperature goes up. Here, the authors took advantage of the complete household-level billing records of 25 million residential electricity customers in Mexico. That data was cross-correlated with local temperature data.
Mexico contains everything from high-elevation deserts to tropical forests at sea level, so customers are exposed to a range of climate conditions. The authors found that electricity use remained relatively flat until the temperatures reached about 24 degrees Celsius (75 degrees Fahrenheit), after which they rose to the point where each day of the month with temperatures at or above 35 degrees Celsius (95 degrees Fahrenheit) boosted electricity use by 3.2 percent.
On the low end, cooler days (10 degrees Celsius/50 degrees Fahrenheit or less) had no effect on electricity use. This is in contrast with the US, where cold days see an increase in electrical heating use. It's not clear how much of this is due to a lack of electrical heating in Mexico, how much is a cultural tendency to just deal with the cold, and how much is just that it doesn't get that cold in many areas of Mexico.
You could extrapolate this pattern to the temperature changes later in the century, but that would be unlikely to tell us much, as air conditioner use in middle-income economies is booming. China, for example, has seen it double in the last five years, and last year, its consumers bought eight times the number of air conditioners sold in the US.
So here is where an analysis of the extensive margins comes in. The authors tracked the number of air conditioners installed in communities relative to their average income. In areas of the country where temperatures were generally cool, there was only a slight increase in installations as annual income neared $25,000 a year. By contrast, hot areas saw installations start growing before annual income reached even $5,000 a year, and the growth increased in a linear manner as income rose past $25,000 a year.
Over the course of this century, two things are highly likely: incomes of Mexicans will continue to rise, and so will the temperatures. The authors handled the former very simply: they assumed a very conservative two percent growth in income a year over the rest of the century. For the latter, they used climate model projections for two IPCC scenarios: RCP 4.5, in which emissions are limited to stabilize the atmosphere at 500 parts-per-million CO2, and RCP 8.5, where emissions continue at current growth rates, leaving us at 900 ppm and rising at the end of the century.
The regional data for Mexico was obtained from the Climate Wizard website, a joint project between universities and the Nature Conservancy.
The effect of temperature changes alone would be pretty minor: a boost in electricity use of 7.5 percent. That change would add $357 million to the $4.8 billion that Mexicans spend on electricity and add 2.7 million tons to the country's carbon emissions, which stand at 35.9 million tons.
But the rising temperatures would also shift more locations into the warm category, meaning they'd see air conditioner installations go up with income. And annual income growth would mean that just about everyone in those locations would be installing air conditioners well before the end of the century. The result? Air conditioners will be installed in at least 70 percent of Mexican households by the end of the century.
This makes for a pretty radical difference. Even under RCP 4.5, the lower-emissions scenario, electricity consumption from air conditioning will go up by 64 percent, adding another $3 billion to the money Mexicans spend on it. Carbon emissions from feeding this demand would rise by 23 million tons (a boost of 63 percent). Under RCP 8.5, the increases would be larger: $4 billion in new electricity and a boost of carbon emissions by nearly 80 percent.
And while Mexico is meant to be representative, the real action will be elsewhere. India has over 10 times the population of Mexico. Compared to the US, the average Indian town sees three times the number of days that would typically trigger air conditioning use. Assuming these and other countries in the tropics see the same pattern of use as Mexico, where cool days don't boost electricity consumption, then the global increase could be staggering.
The authors are keen to point out that while this scenario is what's likely to happen without any changes, many changes are possible. Air conditioners have increased in efficiency, and there's always the prospect of switching to a different cooling (and/or insulating) technology entirely. The growth of renewable energy may at least cut down on the carbon emissions feedback, if not the added costs. And the government could also set policies that will discourage air conditioning purchase or use (either directly or through the price of energy). Finally, people may simply move to the cooler areas of the country or even other countries entirely.
Still, the analysis is a bit shocking in terms of the effect that just a single lifestyle habit can have on national carbon emissions. And since the majority of the impact comes in the lower emissions scenario, it reinforces how hard we'll have to work to avoid business-as-usual emissions growth.
PNAS, 2015. DOI: 10.1073/pnas.1423558112 (About DOIs).
John Timmer John became Ars Technica's science editor in 2007 after spending 15 years doing biology research at places like Berkeley and Cornell.
Email jtimmer@arstechnica.com // Twitter @j_timmer

redpajama_set_name: RedPajamaCommonCrawl


text:
Urban One Builders was selected to design and build the new Cowichan Secondary, which will be located on University Way. The new Cowichan Secondary groundbreaking and public design unveiling is set for Dec. 14. (Courtesy of Mike Russell)
New Cowichan Secondary groundbreaking and public design unveiling set for Dec. 14
Previous design showing postponed due to flooding
Sarah Simpson
Whether it's snowy, frozen or soggy, ground will be broken, at 2 p.m. on Dec. 14, to make way for the new Cowichan Secondary School at 2003 University Way.
"The Board of Education for the Cowichan Valley School District is excited to welcome the Right Honourable Jennifer Whiteside, MLA and minister of Education and representatives from Cowichan Tribes to officially break the ground on the site," said Cowichan Valley School District spokesperson Mike Russell in a press release.
The special guests will join board chair Candace Spilsbury in breaking ground and officially signaling the start of construction on the new high school.
The territory upon which the new school will sit was prepared by Cowichan Tribes during a ceremony in September.
Those curious to see the design details of the new school are invited to the public unveiling of the new Cowichan Secondary School design, also on Dec. 14, but at 4 p.m.
The Board of Education announced in November that Urban One Builders and HCMA Architecture + Design were selected as the builder and architecture firm, respectively.
"This celebratory event will be the first time the public can hear directly from project builder, Urban One, and the design team at HCMA," Russell noted in a press release.
The event had been scheduled for Nov. 15 but was postponed due to the heavy rainfall and resulting floods in the region.
The doors open at 3:30 p.m. for the event, which will be held in the gym at the current Cowichan Secondary School on James Street and the event will comply with all Provincial Health Orders, meaning guests 12 years and older must show proof of vaccination and masks will be required indoors for everyone five years of age and over.
cowichan valleySchools
Sooke cafe owner 'shocked, honoured and humbled' to win business of the year
Holiday spirit sparkles in Langford


text:
Achieve Tahoe celebrates 50 years changing lives through passion for the outdoors
Summer Recreation Summer-recreation |
Cassandra Walker
cwalker@sierrasun.com
Achieve Tahoe is built on incredible volunteer instructors, who Lang-Ree says "get more out of the experience than the athletes".
Courtesy Nichole Lockman / Nemus Photography |
Achieve Tahoe provides winter and summer sports instruction at all ability levels for adults and children with disabilities. For information on volunteering and ways to support Achieve Tahoe, visit http://www.achievetahoe.org.
What began in 1967 as programming for amputees to enjoy adventures in snow sports has since grown into an internationally recognized foundation that has impacted hundreds of thousands of lives.
Achieve Tahoe is an inclusive program that accommodates people with all physical, sensory and cognitive disabilities.
The nonprofit's instructors begin with standard techniques used in each respective sport and then create adaptive lesson plans based on each individual's needs.
"We don't turn anyone away for any disability," said Haakon Lang-Ree, Achieve Tahoe's executive director. "Our techniques and equipment allow us to turn our focus to each person's situation, and our experience and expertise creates a successful sport activity for them."
The heart and soul of Achieve Tahoe — which until late 2015 was known as Disabled Sports USA Far West — is the phenomenal staff made up of just a handful of year-round employees, and about 170 volunteer instructors.
'; AdBridg.cmd.push(function() { var vf_gpt_slot = AdBridg.defineSlot('/5195/SNMG_TahoeTribune/ROS/sports', [300,250], vf_div_id).setTargeting('slot', vf_div_id); var vf_size_mapping = AdBridg.sizeMapping().addSize([320,50]).build(); AdBridg.useSizeMapping(vf_gpt_slot, vf_size_mapping); AdBridg.display('ad-big-box4'); AdBridg.serve(); })
"Most of what we all have in common is the will to be outdoors, feeling the wind in your face and building self esteem," Lang-Ree said.
The immeasurable support of instructors and staff — paired with sponsorships from Anthem Blue Cross, Anthem Blue Cross and Blue Shield, as well as Squaw Valley Alpine Meadows, along with support from several Tahoe-area ski resorts — has helped the program grow and make invaluable opportunity available to adaptive sport participants.
The nonprofit's over-arching goal? To motivate and support one another.
"They can do it," Lang-Ree said. "We know they can do, it and we help them do it."
Achieve Tahoe now works with about 800 athletes each year in the nonprofit's flagship ski and snowboard program, with about half traveling from the Bay Area and the other half coming from along the Interstate 80 corridor as well as from states across the country.
"The way I look at it," Lang-Ree said, "(helping around 800 people a year) is just a drop in the bucket. We'd love to help tens of thousands of people in a single year."
"We're trying to give opportunities to people with disabilities that so many of us take for granted," he added. "It's about giving back. We want people with disabilities to be able to plan these winter or summer vacations to ski, snowboard, kayak, whatever they want to do."
Annual Ability Challenge set for April 1
Achieve Tahoe welcomes the entire community to spread the word about the nonprofit and participate in fundraising all season long, culminating in the Ability Challenge, a fun, daytime celebration at Squaw Valley Alpine Meadows set for April 1, 2017.
The event includes a lift ticket (if needed), a goodie bag and a lunch voucher. Hang around afterward for the Après Ski Party with food, drink and a generous raffle.
Achieve Tahoe also recently held its annual military sports camp and "Ability Bash" fundraising event, the latter of which took place Jan. 28 at the Squaw Valley Conference Center.
According to a news release from Squaw Valley, 17 injured veterans attended the camp, which consisted of specialized private instruction in skiing, snowboarding and snowmobiling for free.


Molecules that result in visible color are called pigments. They produce color because certain wavelengths of light energy are absorbed by electrons in the molecular bonds. All the wavelengths that are NOT absorbed are reflected back and result in color. (To produce reddish purple, a pigment would absorb orange, yellow, green and blue wavelengths.) Molecules that do not result in visible color simply do not absorb visible wavelengths of light.
Although all pigments produce color, there are many different kinds of pigments, depending on their molecular structure. The particular pigment that causes the red color in red cabbage is a type of pigment called anthocyanin, a flavenoid. Many natural red pigments contain anthocyanin. Although many plant pigments do have metal atoms in their structure (e.g. chlorophyll-a), anthocyanins do not. The electrons forming the chemical bonds in the benzene ring structures are what absorb light energy. The pH of the pigment molecule's environment affects the strength of the chemical bonds in the benzene rings, which affects the vibration speed of the chemical bonds and in turn the wavelengths of light the electrons in those bonds absorb.


text:
Texas Book Festival 2018
We went to the Texas Book Festival in Austin over the weekend. This included Francis Fukuyama talking about Identity (see Oct. 15 blog) and several more where politics was a major topic. Fukuyama was articulate and added a bit to his book. In addition to his political order triad of bureaucracy, rule of law and accountability, he focused on the need for a national identity and the necessity of legitimacy of institutions. He thought that Republicans potentially were a lost cause and Democrats needed to be the standard bearers in 2020 to get back on track to a workable democracy (and achieving political order). My daughter Renee asked about the importance of fear and Fukuyama suggested that social justice must be addressed by policy (at least there's hope).
Lawrence Wright (writer of The Looming Tower) wrote God Save Texas, which included multiple essays about all things Texas (many quite personal). Several chapters were on Texas politics and much of the discussion was on this topic. A major focus in the book was on how corrupt Texas politics is (and always has been). The politicians have favored the energy industry to the detriment of people. Fracking is big in Texas (aggie George Mitchell was a major innovator) and, despite dirty water, additional pollution, and earthquakes is almost unregulated. The Wall is big, although a sea wall to protect Houston and other sites from future hurricanes seems much more relevant. House Speaker Joe Straus (a business conservative) at least limited the damage (not allowing the bathroom bill and providing more money for basic government functions like education). But he resigned. Many politicians seems abominable, beginning with Dan Patrick who pushes a radical Tea Party agenda that limits education (except he wants to add vouchers), healthcare, eliminate abortions and birth control, stop gay marriage and all conceivable anti-immigration measures. Wright advocated for Beto O'Rourke, but had relatively little to say about Ted Cruz.
One session was straight 2016 politics: Chasing Hillary by Amy Chozick, a New York Times reporter on the Hillary beat throughout 2016 and before. In part, this described the deficiencies of Hillary as a candidate, apparently the only democratic candidate incapable of defeating Trump. Beautiful Country Burn Again by Ben Fountain probably is a good read, but I did not get a good handle about what it was about. I'm reading Chozick's book now.
An interesting session I only heard part of was Carol Anderson One Person, No Vote, an emphatic presentation on voter suppression. For blacks especially this goes back to the 19th century, with poll taxes and reading requirement (and other things) specifically to limit voting to white males. Universal suffrage is a 20th century thing and even minority voting was allowed (although this has not been a very active group). But Republicans over the years became masters as voter suppression, with measures such as ID laws (with types of IDs restricted--students IDs typically are not permitted, for example), people eliminated from the roles for all kinds of reasons, etc. The Georgia governor's race is a prominent current example. Wright (above) pointed out that whites are no longer the majority in Texas, but whites still dominate voting (and electing Republicans). The other major factor is gerrymandering, at the moment a Republican specialty.
Note: there was also lots of non-political stuff just as interesting, but this is my beat and future blogs with include some of the above books and related insights.
Amy Chozick: Chasing Hillary: Ten Years, Two Presidential Campaigns, and One Intact Glass Ceiling (2018). I finished the memoir and it interrelates her life and the Hillary campaign from the perspective of a New York Times reporter. It went into great detail about various facets of press conferences, rallies and so on, plus some description of the various types of reports she made for the NYT (over 1,200); some were basic news, some snarky, some detailing various issues and policy positions. Apparently, the more embarrassing and snarky the more likely it would make the front page. The stuff I would like, especially an analysis of policy positions might make the middle of the paper, more likely posted on the internet and never make it into the paper. Hillary and staff seemed to view just about everything Chozick wrote as an insult (I suppose, not that much different than Trump's "fake news"). Chozick admired Hillary and appreciated her determination (going into some detail over her life struggles), but also frustrated by the Hillary machine and many of the moves she considered inept. Presumably, the reporters following Hillary admired her and expected her to win, although this did not seem obvious from the actual reporting.
One of the important takeaways for me was the different perspectives of the various players (and compared to what I would have liked to see from both Hillary and the media); the result could be chaos among the intelligent, hard working people. There seems to be no reason why Hillary, Trump, Obama or any other politician would like media attention (although Trump seemed to benefit the most). The media are looking for stories that sell papers, not fairness, objectivity or complete analysis.


text:
package mgo

import (
	"errors"
	"fmt"
	"net"
	"sync"
	"time"

	"velocity/mgo/bson"
)

// ---------------------------------------------------------------------------
// Mongo cluster encapsulation.
//
// A cluster enables the communication with one or more servers participating
// in a mongo cluster.  This works with individual servers, a replica set,
// a replica pair, one or multiple mongos routers, etc.

type mongoCluster struct {
	sync.RWMutex
	serverSynced sync.Cond
	userSeeds    []string
	dynaSeeds    []string
	servers      mongoServers
	masters      mongoServers
	references   int
	syncing      bool
	direct       bool
	failFast     bool
	syncCount    uint
	setName      string
	cachedIndex  map[string]bool
	sync         chan bool
	dial         dialer
}

func newCluster(userSeeds []string, direct, failFast bool, dial dialer, setName string) *mongoCluster {
	cluster := &mongoCluster{
		userSeeds:  userSeeds,
		references: 1,
		direct:     direct,
		failFast:   failFast,
		dial:       dial,
		setName:    setName,
	}
	cluster.serverSynced.L = cluster.RWMutex.RLocker()
	cluster.sync = make(chan bool, 1)
	stats.cluster(+1)
	go cluster.syncServersLoop()
	return cluster
}

// Acquire increases the reference count for the cluster.
func (cluster *mongoCluster) Acquire() {
	cluster.Lock()
	cluster.references++
	debugf("Cluster %p acquired (refs=%d)", cluster, cluster.references)
	cluster.Unlock()
}

// Release decreases the reference count for the cluster. Once
// it reaches zero, all servers will be closed.
func (cluster *mongoCluster) Release() {
	cluster.Lock()
	if cluster.references == 0 {
		panic("cluster.Release() with references == 0")
	}
	cluster.references--
	debugf("Cluster %p released (refs=%d)", cluster, cluster.references)
	if cluster.references == 0 {
		for _, server := range cluster.servers.Slice() {
			server.Close()
		}
		// Wake up the sync loop so it can die.
		cluster.syncServers()
		stats.cluster(-1)
	}
	cluster.Unlock()
}

func (cluster *mongoCluster) LiveServers() (servers []string) {
	cluster.RLock()
	for _, serv := range cluster.servers.Slice() {
		servers = append(servers, serv.Addr)
	}
	cluster.RUnlock()
	return servers
}

func (cluster *mongoCluster) removeServer(server *mongoServer) {
	cluster.Lock()
	cluster.masters.Remove(server)
	other := cluster.servers.Remove(server)
	cluster.Unlock()
	if other != nil {
		other.Close()
		log("Removed server ", server.Addr, " from cluster.")
	}
	server.Close()
}

type isMasterResult struct {
	IsMaster       bool
	Secondary      bool
	Primary        string
	Hosts          []string
	Passives       []string
	Tags           bson.D
	Msg            string
	SetName        string `bson:"setName"`
	MaxWireVersion int    `bson:"maxWireVersion"`
}

func (cluster *mongoCluster) isMaster(socket *mongoSocket, result *isMasterResult) error {
	// Monotonic let's it talk to a slave and still hold the socket.
	session := newSession(Monotonic, cluster, 10*time.Second)
	session.setSocket(socket)
	err := session.Run("ismaster", result)
	session.Close()
	return err
}

type possibleTimeout interface {
	Timeout() bool
}

var syncSocketTimeout = 5 * time.Second

func (cluster *mongoCluster) syncServer(server *mongoServer) (info *mongoServerInfo, hosts []string, err error) {
	var syncTimeout time.Duration
	if raceDetector {
		// This variable is only ever touched by tests.
		globalMutex.Lock()
		syncTimeout = syncSocketTimeout
		globalMutex.Unlock()
	} else {
		syncTimeout = syncSocketTimeout
	}

	addr := server.Addr
	log("SYNC Processing ", addr, "...")

	// Retry a few times to avoid knocking a server down for a hiccup.
	var result isMasterResult
	var tryerr error
	for retry := 0; ; retry++ {
		if retry == 3 || retry == 1 && cluster.failFast {
			return nil, nil, tryerr
		}
		if retry > 0 {
			// Don't abuse the server needlessly if there's something actually wrong.
			if err, ok := tryerr.(possibleTimeout); ok && err.Timeout() {
				// Give a chance for waiters to timeout as well.
				cluster.serverSynced.Broadcast()
			}
			time.Sleep(syncShortDelay)
		}

		// It's not clear what would be a good timeout here. Is it
		// better to wait longer or to retry?
		socket, _, err := server.AcquireSocket(0, syncTimeout)
		if err != nil {
			tryerr = err
			logf("SYNC Failed to get socket to %s: %v", addr, err)
			continue
		}
		err = cluster.isMaster(socket, &result)
		socket.Release()
		if err != nil {
			tryerr = err
			logf("SYNC Command 'ismaster' to %s failed: %v", addr, err)
			continue
		}
		debugf("SYNC Result of 'ismaster' from %s: %#v", addr, result)
		break
	}

	if cluster.setName != "" && result.SetName != cluster.setName {
		logf("SYNC Server %s is not a member of replica set %q", addr, cluster.setName)
		return nil, nil, fmt.Errorf("server %s is not a member of replica set %q", addr, cluster.setName)
	}

	if result.IsMaster {
		debugf("SYNC %s is a master.", addr)
		if !server.info.Master {
			// Made an incorrect assumption above, so fix stats.
			stats.conn(-1, false)
			stats.conn(+1, true)
		}
	} else if result.Secondary {
		debugf("SYNC %s is a slave.", addr)
	} else if cluster.direct {
		logf("SYNC %s in unknown state. Pretending it's a slave due to direct connection.", addr)
	} else {
		logf("SYNC %s is neither a master nor a slave.", addr)
		// Let stats track it as whatever was known before.
		return nil, nil, errors.New(addr + " is not a master nor slave")
	}

	info = &mongoServerInfo{
		Master:         result.IsMaster,
		Mongos:         result.Msg == "isdbgrid",
		Tags:           result.Tags,
		SetName:        result.SetName,
		MaxWireVersion: result.MaxWireVersion,
	}

	hosts = make([]string, 0, 1+len(result.Hosts)+len(result.Passives))
	if result.Primary != "" {
		// First in the list to speed up master discovery.
		hosts = append(hosts, result.Primary)
	}
	hosts = append(hosts, result.Hosts...)
	hosts = append(hosts, result.Passives...)

	debugf("SYNC %s knows about the following peers: %#v", addr, hosts)
	return info, hosts, nil
}

type syncKind bool

const (
	completeSync syncKind = true
	partialSync  syncKind = false
)

func (cluster *mongoCluster) addServer(server *mongoServer, info *mongoServerInfo, syncKind syncKind) {
	cluster.Lock()
	current := cluster.servers.Search(server.ResolvedAddr)
	if current == nil {
		if syncKind == partialSync {
			cluster.Unlock()
			server.Close()
			log("SYNC Discarding unknown server ", server.Addr, " due to partial sync.")
			return
		}
		cluster.servers.Add(server)
		if info.Master {
			cluster.masters.Add(server)
			log("SYNC Adding ", server.Addr, " to cluster as a master.")
		} else {
			log("SYNC Adding ", server.Addr, " to cluster as a slave.")
		}
	} else {
		if server != current {
			panic("addServer attempting to add duplicated server")
		}
		if server.Info().Master != info.Master {
			if info.Master {
				log("SYNC Server ", server.Addr, " is now a master.")
				cluster.masters.Add(server)
			} else {
				log("SYNC Server ", server.Addr, " is now a slave.")
				cluster.masters.Remove(server)
			}
		}
	}
	server.SetInfo(info)
	debugf("SYNC Broadcasting availability of server %s", server.Addr)
	cluster.serverSynced.Broadcast()
	cluster.Unlock()
}

func (cluster *mongoCluster) getKnownAddrs() []string {
	cluster.RLock()
	max := len(cluster.userSeeds) + len(cluster.dynaSeeds) + cluster.servers.Len()
	seen := make(map[string]bool, max)
	known := make([]string, 0, max)

	add := func(addr string) {
		if _, found := seen[addr]; !found {
			seen[addr] = true
			known = append(known, addr)
		}
	}

	for _, addr := range cluster.userSeeds {
		add(addr)
	}
	for _, addr := range cluster.dynaSeeds {
		add(addr)
	}
	for _, serv := range cluster.servers.Slice() {
		add(serv.Addr)
	}
	cluster.RUnlock()

	return known
}

// syncServers injects a value into the cluster.sync channel to force
// an iteration of the syncServersLoop function.
func (cluster *mongoCluster) syncServers() {
	select {
	case cluster.sync <- true:
	default:
	}
}

// How long to wait for a checkup of the cluster topology if nothing
// else kicks a synchronization before that.
const syncServersDelay = 30 * time.Second
const syncShortDelay = 500 * time.Millisecond

// syncServersLoop loops while the cluster is alive to keep its idea of
// the server topology up-to-date. It must be called just once from
// newCluster.  The loop iterates once syncServersDelay has passed, or
// if somebody injects a value into the cluster.sync channel to force a
// synchronization.  A loop iteration will contact all servers in
// parallel, ask them about known peers and their own role within the
// cluster, and then attempt to do the same with all the peers
// retrieved.
func (cluster *mongoCluster) syncServersLoop() {
	for {
		debugf("SYNC Cluster %p is starting a sync loop iteration.", cluster)

		cluster.Lock()
		if cluster.references == 0 {
			cluster.Unlock()
			break
		}
		cluster.references++ // Keep alive while syncing.
		direct := cluster.direct
		cluster.Unlock()

		cluster.syncServersIteration(direct)

		// We just synchronized, so consume any outstanding requests.
		select {
		case <-cluster.sync:
		default:
		}

		cluster.Release()

		// Hold off before allowing another sync. No point in
		// burning CPU looking for down servers.
		if !cluster.failFast {
			time.Sleep(syncShortDelay)
		}

		cluster.Lock()
		if cluster.references == 0 {
			cluster.Unlock()
			break
		}
		cluster.syncCount++
		// Poke all waiters so they have a chance to timeout or
		// restart syncing if they wish to.
		cluster.serverSynced.Broadcast()
		// Check if we have to restart immediately either way.
		restart := !direct && cluster.masters.Empty() || cluster.servers.Empty()
		cluster.Unlock()

		if restart {
			log("SYNC No masters found. Will synchronize again.")
			time.Sleep(syncShortDelay)
			continue
		}

		debugf("SYNC Cluster %p waiting for next requested or scheduled sync.", cluster)

		// Hold off until somebody explicitly requests a synchronization
		// or it's time to check for a cluster topology change again.
		select {
		case <-cluster.sync:
		case <-time.After(syncServersDelay):
		}
	}
	debugf("SYNC Cluster %p is stopping its sync loop.", cluster)
}

func (cluster *mongoCluster) server(addr string, tcpaddr *net.TCPAddr) *mongoServer {
	cluster.RLock()
	server := cluster.servers.Search(tcpaddr.String())
	cluster.RUnlock()
	if server != nil {
		return server
	}
	return newServer(addr, tcpaddr, cluster.sync, cluster.dial)
}

func resolveAddr(addr string) (*net.TCPAddr, error) {
	// This hack allows having a timeout on resolution.
	conn, err := net.DialTimeout("udp4", addr, 10*time.Second)
	if err != nil {
		log("SYNC Failed to resolve server address: ", addr)
		return nil, errors.New("failed to resolve server address: " + addr)
	}
	tcpaddr := (*net.TCPAddr)(conn.RemoteAddr().(*net.UDPAddr))
	conn.Close()
	if tcpaddr.String() != addr {
		debug("SYNC Address ", addr, " resolved as ", tcpaddr.String())
	}
	return tcpaddr, nil
}

type pendingAdd struct {
	server *mongoServer
	info   *mongoServerInfo
}

func (cluster *mongoCluster) syncServersIteration(direct bool) {
	log("SYNC Starting full topology synchronization...")

	var wg sync.WaitGroup
	var m sync.Mutex
	notYetAdded := make(map[string]pendingAdd)
	addIfFound := make(map[string]bool)
	seen := make(map[string]bool)
	syncKind := partialSync

	var spawnSync func(addr string, byMaster bool)
	spawnSync = func(addr string, byMaster bool) {
		wg.Add(1)
		go func() {
			defer wg.Done()

			tcpaddr, err := resolveAddr(addr)
			if err != nil {
				log("SYNC Failed to start sync of ", addr, ": ", err.Error())
				return
			}
			resolvedAddr := tcpaddr.String()

			m.Lock()
			if byMaster {
				if pending, ok := notYetAdded[resolvedAddr]; ok {
					delete(notYetAdded, resolvedAddr)
					m.Unlock()
					cluster.addServer(pending.server, pending.info, completeSync)
					return
				}
				addIfFound[resolvedAddr] = true
			}
			if seen[resolvedAddr] {
				m.Unlock()
				return
			}
			seen[resolvedAddr] = true
			m.Unlock()

			server := cluster.server(addr, tcpaddr)
			info, hosts, err := cluster.syncServer(server)
			if err != nil {
				cluster.removeServer(server)
				return
			}

			m.Lock()
			add := direct || info.Master || addIfFound[resolvedAddr]
			if add {
				syncKind = completeSync
			} else {
				notYetAdded[resolvedAddr] = pendingAdd{server, info}
			}
			m.Unlock()
			if add {
				cluster.addServer(server, info, completeSync)
			}
			if !direct {
				for _, addr := range hosts {
					spawnSync(addr, info.Master)
				}
			}
		}()
	}

	knownAddrs := cluster.getKnownAddrs()
	for _, addr := range knownAddrs {
		spawnSync(addr, false)
	}
	wg.Wait()

	if syncKind == completeSync {
		logf("SYNC Synchronization was complete (got data from primary).")
		for _, pending := range notYetAdded {
			cluster.removeServer(pending.server)
		}
	} else {
		logf("SYNC Synchronization was partial (cannot talk to primary).")
		for _, pending := range notYetAdded {
			cluster.addServer(pending.server, pending.info, partialSync)
		}
	}

	cluster.Lock()
	ml := cluster.masters.Len()
	logf("SYNC Synchronization completed: %d master(s) and %d slave(s) alive.", ml, cluster.servers.Len()-ml)

	// Update dynamic seeds, but only if we have any good servers. Otherwise,
	// leave them alone for better chances of a successful sync in the future.
	if syncKind == completeSync {
		dynaSeeds := make([]string, cluster.servers.Len())
		for i, server := range cluster.servers.Slice() {
			dynaSeeds[i] = server.Addr
		}
		cluster.dynaSeeds = dynaSeeds
		debugf("SYNC New dynamic seeds: %#v\n", dynaSeeds)
	}
	cluster.Unlock()
}

// AcquireSocket returns a socket to a server in the cluster.  If slaveOk is
// true, it will attempt to return a socket to a slave server.  If it is
// false, the socket will necessarily be to a master server.
func (cluster *mongoCluster) AcquireSocket(slaveOk bool, syncTimeout time.Duration, socketTimeout time.Duration, serverTags []bson.D, poolLimit int) (s *mongoSocket, err error) {
	var started time.Time
	var syncCount uint
	warnedLimit := false
	for {
		cluster.RLock()
		for {
			ml := cluster.masters.Len()
			sl := cluster.servers.Len()
			debugf("Cluster has %d known masters and %d known slaves.", ml, sl-ml)
			if ml > 0 || slaveOk && sl > 0 {
				break
			}
			if started.IsZero() {
				// Initialize after fast path above.
				started = time.Now()
				syncCount = cluster.syncCount
			} else if syncTimeout != 0 && started.Before(time.Now().Add(-syncTimeout)) || cluster.failFast && cluster.syncCount != syncCount {
				cluster.RUnlock()
				return nil, errors.New("no reachable servers")
			}
			log("Waiting for servers to synchronize...")
			cluster.syncServers()

			// Remember: this will release and reacquire the lock.
			cluster.serverSynced.Wait()
		}

		var server *mongoServer
		if slaveOk {
			server = cluster.servers.BestFit(serverTags)
		} else {
			server = cluster.masters.BestFit(nil)
		}
		cluster.RUnlock()

		if server == nil {
			// Must have failed the requested tags. Sleep to avoid spinning.
			time.Sleep(1e8)
			continue
		}

		s, abended, err := server.AcquireSocket(poolLimit, socketTimeout)
		if err == errPoolLimit {
			if !warnedLimit {
				warnedLimit = true
				log("WARNING: Per-server connection limit reached.")
			}
			time.Sleep(100 * time.Millisecond)
			continue
		}
		if err != nil {
			cluster.removeServer(server)
			cluster.syncServers()
			continue
		}
		if abended && !slaveOk {
			var result isMasterResult
			err := cluster.isMaster(s, &result)
			if err != nil || !result.IsMaster {
				logf("Cannot confirm server %s as master (%v)", server.Addr, err)
				s.Release()
				cluster.syncServers()
				time.Sleep(100 * time.Millisecond)
				continue
			}
		}
		return s, nil
	}
	panic("unreached")
}

func (cluster *mongoCluster) CacheIndex(cacheKey string, exists bool) {
	cluster.Lock()
	if cluster.cachedIndex == nil {
		cluster.cachedIndex = make(map[string]bool)
	}
	if exists {
		cluster.cachedIndex[cacheKey] = true
	} else {
		delete(cluster.cachedIndex, cacheKey)
	}
	cluster.Unlock()
}

func (cluster *mongoCluster) HasCachedIndex(cacheKey string) (result bool) {
	cluster.RLock()
	if cluster.cachedIndex != nil {
		result = cluster.cachedIndex[cacheKey]
	}
	cluster.RUnlock()
	return
}

func (cluster *mongoCluster) ResetIndexCache() {
	cluster.Lock()
	cluster.cachedIndex = make(map[string]bool)
	cluster.Unlock()
}

redpajama_set_name: RedPajamaGithub


text:
Zabušivanje ili označavanje središta rupe je postupak obrade provrta (rupe) koji se koristi prije bušenja kako bi se spiralno svrdlo centriralo i pravilno vodilo. Također se koristi za izradu gnijezda kod vratila i osovina za centriranje i pravilno stezanje prilikom daljnjih strojnih obrada na vratilu ili osovini. Alat koji se koristi je zabušivač (zabušivalo). Glavno gibanje je kružno kontinuirano, a posmično gibanje (posmak) je pravolinijsko kontinuirano. Glavno i posmično gibanje se izvode istodobno. Izvodi se na alatnim strojevima, najčešće bušilicama. Zabušivač se još može koristiti za izradu konusa na kraju provrta ako je promjer zabušivača veći od promjera samog provrta. Promjer zabušivača bi trebao biti 70% promjera svrdla kojim će se izrađivati provrt. Kut zabušivača trebao bi biti veći ili manji od kuta svrdla kojim će se naknadno bušiti što ovisi o materijalu svrdla. Ako je svrdlo izrađeno od HSS-a (brzorezni čelik) onda je kut zabušivača manji od 90° (dugački i kratki zabušivači) ili 120° (kratki zabušivači). Kod svrdla izrađenih od tvrdog metala kut zabušivanja trebao bi biti veći od 142° ako je kut svrdla 140°.

Bušenje

Bušenje je način strojne obrade odvajanjem čestica kojim se posebnim alatom (svrdlom) izrađuju valjkaste (cilindrične) rupe u obratku. Alat obavlja glavno rotacijsko gibanje i pravocrtno posmično gibanje (posmak) koje mora biti u smjeru osi vrtnje (rotacije). Bušenje je povezano s predradnjom zabušivanja i naknadnim operacijama proširivanja, upuštanja, razvrtanja i izbušivanja.

Slike

Izvori

Obrada metala
Alati

redpajama_set_name: RedPajamaWikipedia


text:
William Z
Author: William Z
Gothic/Industrial Band BATAVIA Releases Quite Mean Spirited; An Exploration of Human Malevolence
August 30, 2020 William Z
FOR IMMEDIATE RELEASE: August 28, 2020 – US gothic/industrial band BATAVIA proudly announces the release of their newest EP, Quite Mean Spirited. The EP is an exploration of malevolence and what drives the human soul to inflict indignities upon their fellow beings. The video for the first single made its premiere on ReGen Magazine on August 27th. For fans of: 16 VOLT, THE SMITHS & SKINNY PUPPY Q U…
NewsLeave a comment
Darkwave Goth-Pop Artist THRILLSVILLE Reveals New Single, "The Fever"
FOR IMMEDIATE RELEASE: August 28, 2020: Los Angeles darkwave goth-pop artist THRILLSVILLE has just released the follow-up to their "Lockdown" single, "The Fever." "The Fever" was inspired by an original Twilight Zone episode of the same name. It's a song about how obsession and addiction can make one descend into madness as a result of never being fulfilled by the object of…
UK Electro-Industrial Band BIOMECHANIMAL Announces New Single/Visualizer Release: "Enter The Animal"
FOR IMMEDIATE RELEASE: August 17, 2020 – After five years of shows, adventures, rewrites, rerecords, hard drive failures, and other bodily fluids, UK electro-industrial artist BIOMECHANIMAL happily unveil their next single, the long awaited "Enter The Animal." The visualizer premiered at ReGen Magazine on August 13th. An absolute staple of their live show, a crowd favorite, and much loved by the band itself, "Enter The…
VAZUM Creates Hybrid 'Deathgaze' Genre With New Album:Vampyre Villa
FOR IMMEDIATE RELEASE: August 14, 2020 – Detroit-based goth/death rock band VAZUM has announced the release of their new 13-track album, Vampyre Villa. The video for "Poison" made its premiere via Post-Punk.com on August 6. Vampyre Villa was recorded exclusively in their home studio. VAZUM then fine-tuned and finished it during the beginning of the 2020 quarantine. This album features…
Melodic Metal Band TENSION RISING Reveals The End Of Days With New Single & Lyric Video, "Doomsayer"
August 2, 2020 William Z
FOR IMMEDIATE RELEASE: August 2, 2020: New York-based melodic metal band, TENSION RISING has unleashed their brand-new single & lyric video for the song, "Doomsayer." "Doomsayer" appears on the forthcoming release, Penumbra, due out in early September. For fans of: AVENGED SEVENFOLD, GODSMACK & TRIVIUM "Doomsayer" is a song essentially about the end of days. A bleak viewpoint of the world around us from one man who stands…
Gothic Rock Band BLACK ANGEL Crafts Stories Of Love With New Album: Kiss Of Death
FOR IMMEDIATE RELEASE: August 2, 2020: English gothic rock band BLACK ANGEL present their brand new second studio album, Kiss of Death: Ten tracks of pure gothic rock with a little sprinkling of psychobilly and punk. For fans of: SISTERS OF MERCY, BAUHAUS & THE CULT Kiss of Death is an album that is all about love. Whether it be unrequited, a lost love or a love out of reach. …
Post-Punk Band THE FUNHOUSE COLLECTIVE Unleashes Cover Of GOLDEN EARRING's "Twilight Zone"
FOR IMMEDIATE RELEASE: August 1, 2020: Former NEW CREATURES/JOHNATHAN CHRISTIAN co-founder Johnathan Mooney and MACHINERY OF DESIRE's Adrian Auchrome have teamed up to form the new project THE FUNHOUSE COLLECTIVE. The duo has announced the release of their cover of Golden Earring's classic song, "Twilight Zone." The original song was written by Golden Earring guitarist George Kooymans who got inspiration fromRobert Ludlum book, "The Bourne Identity." Produced…
PROVISION Breaks Seven Year Silence With "Hearts Turn Dark"
July 21, 2020 William Z
FOR IMMEDIATE RELEASE: July 20 2020 – North America's purveyors of "darkpop," PROVISION return with their long-awaited 6th Full Length LP, Hearts Turn Dark! "What does it mean to truly hurt? And to truly heal? " It's been 7 long and turbulent years since PROVISION gave the world A New Revolution. What followed that album in late 2012 was the internal breakdown of the band itself. While every attempt…
Darkwave Act THRILLSVILLE Reveals Life On "Lockdown" With New Video
FOR IMMEDIATE RELEASE: July 16, 2020 – Los Angeles darkwave rock artist THRILLSVILLE has unveiled the video for "Lockdown" addressing the Covid-19 pandemic. "Lockdown" made its premiere on ReGen Magazine. Lyrics like "Can't stop touching my face," "Don't even know what day it is anymore," and "Losing my f*cking mind" convey the mental and emotional strain the crisis has had on all of us.…
Electronic Act VEXILLARY Examines Surveillance Culture With New EP
Innovative New Video: "Maritime Panic" Streaming NOW FOR IMMEDIATE RELEASE: July 14, 2020 – New York electronic artist VEXILLARY examines a culture based on surveillance with their new EP, SurViolence. The video for the single, "Maritime Panic" was directed by Reza Seirafi, edited by Svitlana Zhytnia and features visuals by Luqman Ashaari. SurViolence adopts the theme of unease in an…
Categories Select Category Album Reviews (136) Concert Photography (311) Concert Reviews (180) Interviews (175) Music Festivals (30) Music Videos (112) News (4,041) Review (22) Uncategorized (4)
Rock All Photography
March 15, 2020 smokkeyy 0
Dermot Kennedy with SYML – Louisville, KY
Dermot Kennedy with SYML Old Forester's Paristown Hall Louisville, KY 3/10/20 Words and Images by Emily May Irish rock musician Dermot Kennedy performed recently in Louisville, KY on his Without Fear North American Tour in support of his debut album Without Fear. The venue was packed this evening with...
Coverage of Chelsea Cutler with Alexander 23 and X Lovers – Mercury Ballroom – Louisville, Kentucky
Chelsea Cutler with Alexander 23 and X Lovers...
March 4, 2020 smokkeyy 0
Coverage of Portland Folk Band "Joseph" in Louisville, KY
Coverage of Portland Folk Band "Joseph" in Louisville,...
December 4, 2019 smokkeyy 0
Review and Photos of Shallow Side Performing in Cincinnati, Ohio
Words and images by Shawn Wiseman Shallow...
Album Review alternative Alternative Rock Band Interview Blacktop Mojo Bunbury 2019 bunbury music festival Cincinnati Clutch Concert 2017 Concert Photography Concert Review EP Express Live Hard Rock Heavy Metal Heavy Rock Interview korn KY Louisville LP Lyric Video Metal MINISTRY Music Interview Music Video new album New Music New release news New Single Official Music Video Ohio Photo Gallery pop evil Puddle Of Mudd Review Riverbend Music Center Rock Rock Music Single Tour Tour 2017 Video
Archives Select Month January 2021 (3) September 2020 (4) August 2020 (27) July 2020 (21) June 2020 (18) May 2020 (29) April 2020 (21) March 2020 (28) February 2020 (20) January 2020 (42) December 2019 (17) November 2019 (44) October 2019 (86) September 2019 (88) August 2019 (21) July 2019 (86) June 2019 (118) May 2019 (110) April 2019 (107) March 2019 (200) February 2019 (163) January 2019 (119) December 2018 (132) November 2018 (202) October 2018 (203) September 2018 (233) August 2018 (248) July 2018 (143) June 2018 (198) May 2018 (192) April 2018 (150) March 2018 (156) February 2018 (96) January 2018 (112) December 2017 (98) November 2017 (119) October 2017 (154) September 2017 (146) August 2017 (168) July 2017 (136) June 2017 (115) May 2017 (97) April 2017 (72) March 2017 (63) February 2017 (14) January 2017 (6) December 2016 (5) November 2016 (5) October 2016 (11) September 2016 (4) August 2016 (11) July 2016 (11) June 2016 (2) May 2016 (3) April 2016 (1) October 2015 (1)
Tweets by rockallphoto
Icon For Hire Share Cinematic Video for Latest Single "Last One Standing"
SOUTH OF EDEN RELEASES OFFICIAL MUSIC VIDEO FOR "THE TALK"
THE HU COVER SONG AND VIDEO OF METALLICA's RENOWNED ANTHEM "SAD BUT TRUE"
Coverage of Static-X with Devildriver, Dope, Wednesday 13, and Raven Black The Aztec Theater in San Antonio! Review & Photos!
Copyright Rock All Photography and Music© All rights reserved


With a stay at The Blanket Hotel, you'll be centrally located in Phuket, steps from Phuket Trickeye Museum and minutes from Phuket Baba Museum. Featured amenities include limo/town car service, dry cleaning/laundry services, and multilingual staff. Free self parking is available onsite.


text:
PD Dr. Ulrich Knittel:
Vulkanismus.de
Virtuelle Vorlesung zum Thema Vulkanismus
Entstehung von Magma
Homepage Taal (Philippinen)
Steffeln-Kopf (Westeifel)
'Santorini and Its Eruptions'
by Ferdinand A. Fouqué,
translated into English by
Alexander McBirney
John Hopkins University Press
99.00 US $
88,50 Euro bei amazon.de
Order the book!
- german review -
This is the English translation of the book 'Santorin et ses éruptions' by Ferdinand A. Fouqué published in 1879. It is a classical work of the volcanological literature. The translation was carried out by Prof. Alexander McBirney, who himself is a well known volcanologist and author of at least one book on volcanology - a combination rarely found among the translators of German-language scientific texts.
The book is subdivided into nine chapters, one of which is devoted to the historical activity and a second one specifically to the eruption of 1866, which happed at the time that Fouqué studied the volcano. Other chapters are devoted to the older structures of the volcanic edifice, and to the chemical and petrographic composition of the eruption products. Unexpectedly, one also finds a chapter describing the discovery of ruins and archaeological artefacts below the pumice beds of the bronze-age eruption. In view of this, the Book by W. L. Friedrich follows an old tradition (this book is also available in English).
This book is considered to be a classical study in volcanology, because it more or less finally laid to rest all theories that explain the origin of calderas by gigantic explosions rather than the subsidence of the roofs of magma chambers.
But also readers interested in archeometry will learn something new: already more than a hundred years ago Fouqué was able to show that the ancient pottery was made from clays that originated on the archipelago rather than being imported. He used the technique of thin section microscopy, a technique that had been introduced into the geological science merely 20 years earlier, to show that the clays contained fragments of volcanic rocks, identical to the rocks found on the islands.
To the modern reader, the text appears to be drawn out in places. However, it must be remembered that 19th century author had to rely much more on descriptions where modern authors use graphics. Also, in current books, older works are usually not cited in length. But in the present case, such citations are an advantage, because many of the old sources are no more readily available.
The translation is supplemented by numerous footnotes by McBirney, that explain aspects of the text, not obvious to the modern reader or introduce people long forgotten except to the specialist. An appendix provides of short, but very interesting review of the history of geological research on Santorini.
All in all, the book is a 'must' for fans of the Santorini archipelago, who also care for the history of its study. It is also commendable to those, who simply want to enjoy the very beautiful lithographs.
Dr. Ulrich Knittel


Nervous adaptations (as well as muscular ones) are different between dry racing and triathlon racing, when the transition from cycling to racing must be trained to adapt the nerve response to technical action as soon as possible.
These are just some of the aspects that can affect and differentiate race management in the Triathlon, compared with the dry race. To limit these conditions to the maximum, as always it is advisable to train as much as possible and appropriately during athletic training, by evaluating all these variables.
Improve neuromuscular response and efficiency, through specific exercises that put the body in the condition of adapting to the change (nerve and muscle stimuli) from the bike to the run.
The combination of these training means will improve the race fraction in Triathlon races. Before you see specifically the ideal training methodology to propose these technical sessions, let's analyze the features of the Race!
Race Definition: Race can be defined as a succession of steps where alternating phases of flight are repeated regularly. In this flight and flight alternation, there is a time when, when the foot touches the ground, it develops kinetic energy and potential, which energies reach the minimum yield. At this stage there is accumulating elastic energies that are returned in the next push phase!
In addition to these exercises that are important to improve some technical aspects of "dry" racing, it's crucial to train the "race in the triathlon" with specific exercises!
As you can see the possible combinations of workouts to improve the Race Fraction in the Triathlon are different, you can train by inserting Long and Medium Racing Seats to improve the Race Resistance, Improve Resistance and Specific Force for the Bike with Horseshoe Seats beyond the distance provided by the race. Additionally, you can improve the passage between Cycling and Racing by adding Seats of Continuous or Fractioned Combined with a mileage that corresponds approximately to 2/3 of the total mileage of the scheduled race! As always every session and every training proposal must be adapted to its technical and physical characteristics!


text:
Hervey Bay hospital cleared of Legionella
by hannah.baker
6th Jun 2015 6:00 AM
HERVEY Bay Hospital has been cleared of Legionella, 17 days after the bacteria's outbreak was first confirmed on May 19.
Patients will soon be able to enjoy a hot shower and drink tap water after weeks of being sponge-bathed and given bottled water to drink.
Precautionary measures to reduce the risk of the bacteria's transmission were undertaken at the hospital on May 20 after the outbreak was confirmed, following autopsy results from a man who died in April and was found to have legionnaire's disease.
Initial efforts to sanitise the water system were made by Wide Bay Hospital and Health Services on May 22, and parts of the water system, including heating, chlorine monitoring and dosing and infrastructure were upgraded in the meantime.
Chief executive Adrian Pennington said: "I can assure staff and patients... our hot and cold water systems has shown water quality as meeting the required standards and Legionella has been removed."
Since then the WBHHS has worked to prevent ore outbreaks.
Mr Pennington said the hospital's shower heads and taps had been replaced and the chlorine monitoring system updated.
"The chlorine monitoring system improves the WBHHS's ability to dose extra chlorine into the cold water as it enters our facility from the town water supply as well as into our hot water loops within Hervey Bay Hospital," Mr Pennington said.
Water quality tests conducted after efforts to sanitise the water system were taken by WBHHS on May 26 and May 31, as well as tests carried out by independent contractor CETEC on May 27 and 29, he said.
Legionella cleared 17 days after outbreak confirmed in hospital's water system on May 19
Initial efforts to sanitise the water system undertaken on May 22
Upgrades to water system undertaken to prevent further Legionella outbreaks
Water quality tests conducted on May 26, May 27, May 29 and May 31
Legionella investigation continues
Hospital now waiting for Legionella test results
Board's quick action against Legionella praised
Staff gain clean bill of health after Legionella scare
hervey bay hospital legionella


text:
NAMA Data Protection Statement
NAMA acts as a Data Controller of Personal Data for a range of statutory purposes, including its objectives, purposes and functions under the National Asset Management Agency Act 2009.
NAMA and its group entities are committed to complying with our obligations in respect of the processing of Personal Data under data protection laws. The purpose of this Data Protection Statement ("Statement") is to ensure that we meet our transparency obligations pursuant to the General Data Protection Regulation ("GDPR"). The Statement sets out information about our duties and responsibilities regarding the protection of Personal Data. Please click on any of the links below to access aspects of the Statement that are of particular interest:
To review the full Data Protection Statement, click here.
To learn more about NAMA, click here.
For an explanation about how we use Personal Data, click here.
If you wish to exercise any of your rights in relation to your Personal Data, such as the rights of access, erasure, rectification, objection and complaint, click here.
For a glossary of data protection terms used in the Statement, click here.
This Statement has been adopted by NAMA with effect from 25 May 2018 which is the commencement date for the GDPR and will be reviewed from time to time. We will always post the most up to date version on the NAMA website.
Welcome to NAMA. This site uses Cookies per our Cookies Policy. View our Data Protection Statement. close
search-form opener
NAMA and the NTMA
Codes of Practice and Conduct
Protected Disclosures Act 2014
Offence to Lobby NAMA
Contract Award Certain Legal Services Panel
Loan Sales
Development Funding
Vendor Finance
NAMA Residential Delivery
Examples of Projects to Date
Dublin Docklands SDZ
Social Housing Units Offered by Local Authority
Examples of properties delivered for social housing
NARPS
Unfinished Housing Estates
Engagement with Public Bodies
Facilitating Transactions
Rent Abatement
Debtor Engagement
Debtor Business Plans
Templates and Guidance Notes
Loan Acquisition
NAMA Bonds
Other NAMA Issuance
Information for Analysts & Subordinated Bond Investors
Full Data Protection Statement
In December 2011, NAMA introduced a rent abatement initiative to deal with cases where commercial tenants of its debtors can demonstrate that the rents payable under their current leases are in excess of market levels and, as a result, that the viability of their businesses is threatened.
To date, NAMA has approved rent abatements with an annual aggregate value in excess of €25 million and long-term rent reliefs, including in a number of Examinership cases, worth over €40 million over the life-time of the related leases. The aggregate value of abatements agreed to date is the rent due to NAMA that it has agreed to forego in order to help businesses to survive.
The objective of agreeing rent abatements in the first instance is to support the short-term viability of small and medium businesses around the country which are intrinsically viable but which are experiencing difficulties arising from current economic conditions.
Rent abatements with an annual aggregate value in excess of €25 million
Working with debtors & receivers to help retail SME's
Over €40 million in long term rent relief
In cases where there is genuine hardship which can be ameliorated by rent abatement, NAMA achieves two significant benefits. Firstly, it helps to preserve the value of the collateral supporting NAMA loans by ensuring that tenants remain in business and continue thereby to generate rental income. Secondly, it safeguards jobs and economic activity in general. Any short-term loss of rental income arising from rent abatement is likely to be more than offset by these long-term benefits. The terms of NAMA's Guidance Note on Upwards Only Commercial Leases are not designed to confer benefits on businesses that are trading profitably or are part of trading groups that are in a position to honour their current contractual arrangements on rent.
Guidance Note on Upward Only Rent Reviews
NTMA
Publications section
NAMA Information Guide (PDF)
Guidance on upwards only rent reviews (PDF)
Copyright © NAMA, All Rights Reserved
Website by Roomthree Design


A baby can never have too many bodysuits and this is a keeper! Spotted cow print suit cleverly packaged in a milk carton! This is one way to stand out from the herd! Size medium--6 months. Price reflects 30% off! First come, first served. Supplies very limited!
A baby can never have too many bodysuits and this is a keeper! Spotted cow print suit cleverly packaged in a milk carton! This is one way to stand out from the herd! Size small--3 months. Price reflects 30% off! First come, first served. Supplies very limited!
A baby can never have too many bodysuits and this is a keeper! Spotted cow print suit cleverly packaged in a milk carton! This is one way to stand out from the herd! Large--12 months. Price reflects 30% off! First come, first served. Supplies very limited!


PPC stands for PAY-PER-CLICK. It is a type of internet marketing where advertisers pay a fee each time their ad is clicked on. It is a way advertisers are able to buy their visitors rather than earn them organically.
One of the most popular forms of PPC is search engine advertising. Search engine advertising allows advertisers to bid on ad placement when someone searches for a keyword that relates to the advertisers business. For example, if we bid on the keyword "Denver Marketing", our ad might show up on the top spot on the Google results page.
Every time someone clicks on our ad, it sends a visitor to our website. In turn we then have to pay the search engine a fee. If you are using PPC correctly the fee is is not a huge factor because the actual visit holds more value than what the advertiser is paying for it. For example if we as a advertiser were to pay $2 for the click, but if the result of that click ended in a $200 sale – then the profit greatly outweighs the initial cost.
Building a successful PPC campaign is extensive. You need to research which keywords will best target your focus group and then also be able to organize the keywords into organized campaigns and ad groups. From there you must set up optimized landing pages for conversions. When advertisers can create relevant and well targeted PPC campaigns search engines will reward those advertisers by charging them less for those ad clicks. When Google charges less, it means larger profits for the business.
Google Ads is the number one PPC advertising in the world. Their platform allows advertisers to not only appear on the search engine but also on other Google properties. Google ads uses a PPC model to operate. Whenever a search is started, Google chooses from a group of advertisers and picks who will "win" and be able to appear in the ad space on the pages of the search results.
Google picks these "winners" based off of several factors. It uses a combination of the quality, including relevance of the keywords, and the size of the keyword bids. Google uses the CPC Bid – this is the highest amount the advertiser is willing to spend; and the Quality Score – this is basically your value rate which includes your click through rate, quality of landing page and your relevance. Using this calculated system Google is able to allow advertisers to be able to reach their target customers while staying within their budget. You can think of it like an auction.
Navigating the PPC platform Google offers can be tedious and confusing. Because Google gets so much traffic and so many advertisers trying to place their ads, if you are not conducting your PPC correctly, you will not see the results you want.
Relevant Keywords – We will create a relevant PPC keywords, keyword groups and proper ad text. We can create targeted keywords that are focused.
Quality Landing Pages – We will create optimized landing pages that contain good relevant content and a call-to-action that is clear and created specific to your searches.
Quality Score – By creating quality landing pages and relevant keywords we will be able to create optimized PPC campaigns. Using these combined techniques we can get your company a better Quality Score and get your company more ad clicks at a lower cost.
Relevant – We don't want you to end up paying for web traffic that is not related to your business. We will create targeted keywords that will give you a higher PPC click through rate. They will be more cost effective and increase your profits.
Frequency – Our keywords will include the most popular and frequently searched terms that are within your niche. We will also include long-tail keywords, which are more specific and often less expensive.
Extensive – PPC is very repetitive. We will great an atmosphere where your keywords are constantly growing and adapting to fit your campaigns.
With our expertise and guidance we can run a successful and optimized PPC campaign for your business.


Posh have signed striker Luke Williams in a loan deal from Championship side Middlesbrough.
Peterborough United have completed the signing of Middlesbrough striker Luke Williams on a loan deal until the end of the campaign with the 21-year-old going straight into the squad for Saturday's clash with Coventry City at the ABAX Stadium.
Williams enjoyed loan spells last year with Scunthorpe United and Hartlepool United, netting four goals in 12 appearances and has also spent time with Coventry City this year.
Williams is an England under 20 international and has scored twice in four games for his country at that level.
Manager Dave Robertson said: 'Luke is an excellent addition to our strikeforce. He offers us something different. We spoke to Lee Tomlin and he gave us a glowing reference about Luke and his potential.


HSIIP Connectors can help you link with support and healthcare services after a health diagnosis like cancer.
The St. Joseph Home Care's Hospital Care Connector helps seniors being discharged from St. Josephs Hospital to connect with services and social opportunities. Learn how they assisted Mrs. Lee*.


text:
Q: How can I force initial conditions for optimal control problem in Gekko? How can you fix initial conditions in Gekko??  I am pretty new to Gekko still and am working on optimizing the AOA and bank angles for a shuttle-type reentry vehicle to maximize cross-range. The EOMs are 6 coupled, non-linear ODEs.  Right now I can only get a solution on small time horizons (about 2 seconds) and by providing bounds on the initial condition instead of making it fixed.  The figure below shows a solution where the altitude begins at around 0 meters when I need it to start at 79,248 meters.  I can't get convergence without providing bounds on the state variables.
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
import math

pi = math.pi

########################
######FRONT MATTER######
########################
m = GEKKO() # initialize GEKKO
tfin = 1
nt = 101 #simulation time is 2500 seconds
m.time = np.linspace(0,tfin,nt) #time array

#==================#
#PARAMS
#==================#
Re  = m.Param(value = 6371203.92)           # radius of the earth, m
S   = m.Param(value = 249.9091776)          # vehicle surface area, m^2
cl0 = m.Param(value = -0.2070)              # coeff lift param 1
cl1 = m.Param(value = 1.6756)               # coeff lift param 2
cd0 = m.Param(value = 0.0785)               # coeff drag param 1
cd1 = m.Param(value = -0.3529)              # coeff drag param 2
cd2 = m.Param(value = 2.0400)               # coeff drag param 3
H   = m.Param(value = 7254.24)              # density scale height, m
rho0= m.Param(value = 1.225570827014494)    # sea level atmospheric density, kg/m^3
mu  = m.Param(value = 3.986031954093051e14) #earth gravitational param, m^3/s^2
mass= m.Param(value = 92079.2525560557)     #vehicle mass, kg

#===============================#
#BOUNDARY CONDITIONS
#===============================#
t0     = 0
alt0   = 79248
rad0   = alt0+Re
altf   = 24384
radf   = altf+Re
lon0   = 0
lat0   = 0
speed0 = +7802.88
speedf = +762
fpa0   = -1*pi/180
fpaf   = -5*pi/180
azi0   = +90*pi/180
azif   = -90*pi/180

#===============================#
#LIMITS ON VARIABLES
#===============================#
tfMin = 0;              tfMax = 3000;
radMin = Re;            radMax = rad0;
lonMin = -pi;           lonMax = -lonMin;
latMin = -70*pi/180;    latMax = -latMin;
speedMin = 10;          speedMax = 45000;
fpaMin = -80*pi/180;    fpaMax =  80*pi/180;
aziMin = -180*pi/180;   aziMax =  180*pi/180;
aoaMin = -90*pi/180;    aoaMax = -aoaMin;
bankMin = -90*pi/180;   bankMax =   1*pi/180;

#===============================#
#VARIABLES
#===============================#

#state variables and bounds
rad = m.Var(value=rad0, lb=radMin, ub=radMax)       # radius, m
lon = m.Var(value=lon0, lb=lonMin, ub=lonMax)       # longitude, rad
lat = m.Var(value=lat0, lb=latMin, ub=latMax)       # latitude, rad
vel = m.Var(value=speed0, lb=speedMin, ub=speedMax) # velocity, m/sec
fpa = m.Var(value=fpa0, lb=fpaMin, ub=fpaMax)       # flight path angle, rad
azi = m.Var(value=azi0, lb=aziMin, ub=aziMax)       # azimuth angle, rad

#control variables
aoa     = m.MV(value=20*pi/180, lb=aoaMin, ub=aoaMax)    # angle of attack, rad
aoa.STATUS = 1

# aoa     = m.Const(value=17)    # angle of attack, rad

bank    = m.MV(value=0, lb=bankMin, ub=bankMax)    # bank angle, rad
bank.STATUS = 1
# bank.DCOST = 1e-2

# bank    = m.Const(value=0)    # bank angle, rad

#===============================#
#INTERMEDIATE VARIABLES
#===============================#
altitude = m.Intermediate(rad - Re)
CD       = m.Intermediate(cd0+cd1*aoa+cd2*aoa**2)
rho      = m.Intermediate(rho0*m.exp(-altitude/H))
CL       = m.Intermediate(cl0+cl1*aoa)
q        = m.Intermediate(0.5*rho*vel**2)
D        = m.Intermediate(q*S*CD/mass)
L        = m.Intermediate(q*S*CL/mass)
gravity  = m.Intermediate(mu/rad**2)

#===============================#
#EOMS
#===============================#

p = np.zeros(nt) # mark final time point
p[-1] = 1.0
final = m.Param(value=p)

m.Equation(rad.dt() == vel*m.sin(fpa))
m.Equation(lon.dt()*(rad*m.cos(lat)) == vel*m.cos(fpa)*m.sin(azi))
m.Equation(lat.dt()*rad == vel*m.cos(fpa)*m.cos(azi))
m.Equation(vel.dt() == -D-gravity*m.sin(fpa))
m.Equation(fpa.dt()*vel == (L*m.cos(bank)-m.cos(fpa)*(gravity-vel**2/rad)))
m.Equation(azi.dt()*vel == (L*m.sin(bank)/m.cos(fpa)+vel**2*m.cos(fpa)*m.sin(azi)*m.tan(lat)/rad))

#===============================#
#OPTIMIZATION SOLVER
#===============================#
m.Maximize(lat*final)

# m.options.SOLVER = 3
# m.options.IMODE = 6
# m.solve(disp=True)

# m.options.MAX_ITER = 500
m.options.IMODE = 6
# m.options.NODES = 3
# m.options.MV_TYPE = 1
m.options.SOLVER = 3
# m.open_folder()
m.solve()

#===============================#
#PLOTS
#===============================#

alt = np.array(rad.value)
alt = alt-Re
vel = np.array(vel.value)/1000
latitude = np.array(lat.value)*180/pi
longitude = np.array(lon.value)*180/pi
fpa     = np.array(fpa.value)*180/pi
azi     = np.array(azi.value)*180/pi
aoa = np.array(aoa.value)*180/pi
bank = np.array(bank.value)*180/pi

plt.subplot(4,2,1)
plt.plot(m.time,alt,label='alt')
plt.legend()
plt.subplot(4,2,3)
plt.plot(m.time,latitude,label='lat')
plt.legend()
plt.subplot(4,2,4)
plt.plot(m.time,longitude,label='lon')
plt.legend()
plt.subplot(4,2,2)
plt.plot(m.time,vel,label='vel')
plt.legend()
plt.subplot(4,2,5)
plt.plot(m.time,fpa,label='fpa')
plt.legend()
plt.subplot(4,2,6)
plt.plot(m.time,azi,label='azi')
plt.legend()
plt.subplot(4,2,7)
plt.plot(m.time,aoa,label='aoa')
plt.xlabel('Time')
plt.legend()
plt.subplot(4,2,8)
plt.plot(m.time,bank,label='bank')
plt.xlabel('Time')
plt.legend()
plt.show()

A: Okay looks like it was a simple fix.  I realized that where I define the first state, radius, I was using a m.param() to define the variable.  So I changed
rad = m.Var(value= Re)       # radius, m

to
rad = m.Var(value= 6371203.92+79248)       # radius, m

which now yields the right initial conditions:

redpajama_set_name: RedPajamaStackExchange


text:
Ren'Py es un motor de videojuego libre que permite crear novelas visuales, un tipo de historia interactiva a través de computadora. Ren'Py está escrito en Python y Pygame, y está disponible oficialmente para Windows, Mac OS X y Linux.

Características
Ren'Py incluye todas las opciones básicas de un motor de novela visual, como por ejemplo historias ramificadas, opción para guardar y cargas partidas, diferentes transiciones entre imágenes y la posibilidad de retroceder en la historia. Adicionalmente también se puede usar código Python para que los usuarios más avanzados puedan dar más opciones al juego.

Su lenguaje basado en script hace posible el desarrollo de novelas visuales complejas, un ejemplo sería Katawa Shoujo entre otras más. O hasta el desarrollo de novelas visuales simples.

Ren'Py cuenta con una documentación que nos puede ayudar a comenzar a desarrollar novelas visuales simples o juegos de simulación, pero a medida que nos alejemos de eso, estaremos luchando contra Ren'Py y eso nos llevara hasta tomar la decisión de escoger otros motores.

A partir de la versión 7.4.0 y posteriores, Ren'Py cuenta con compatibilidad con Python 3.

Como muchos motores de videojuegos, Ren'Py tiene soporte para compilar juegos a Microsoft Windows, Mac OS X, Linux, también podremos compilar juegos a dispositivos móviles, Android e IOS.

Requisitos
Estos son los requisitos que debes tener en cuenta a la hora de usar Ren'Py u jugar un juego hecho en este:

Windows

 Versión: Windows XP o superior. (A partir de la versión 7.4 no es compatible con Windows XP)
 CPU: 2.0 GHz Core 2 Duo
 RAM: 2.0 GB
 Gráficos: OpenGL 2.0 or DirectX 9.0c

MacOS

 Versión: 10.6+
 CPU: 2.0 GHz Core 2 Duo (solo 64 bit)
 RAM: 2.0 GB
 Gráficos: OpenGL 2.0

Linux

 Versión: Ubuntu 12.04+
 CPU: 2.0 GHz Core 2 Duo
 RAM: 2.0 GB
 Gráficos: OpenGL 2.0

Android

 Versión: Android 5.0 Lollipop+
 CPU: 2.0 GHz
 RAM: 2GB
 Gráficos: OpenGL 2.0

Novelas visuales y juegos destacados hechos con Ren'Py
Akabur
Princess Trainer
Witch Trainer
BerndSoft
Bernd and the Mystery of Unteralterbach
Christine Love
Digital: A Love Story
Don't take it personally, babe, it just ain't your story
Analogue: A Hate Story
Cyanide Tea
Break Chance Memento
Dischan Media
Cradle Song
Juniper's Knot
Dysfunctional Systems: Learning to Manage Chaos
Four Leaf Studios
Katawa Shoujo
Hanako Games
Date Warp
Long Live The Queen
Magical Diary
The Royal Trap
Jafasoft
Neko no Yume
 Love in Space
Sunrider:Mask of Arcadius
Sunrider:Academy
Sunrider:Liberation Day
Marcel Weyers
Sleepless Night
This Is Where I Want To Die
To Kill A Black Swan
Nekomura Games
Princess Battles
Paper Dino Software
Save the Date
Riva Celso
Always Remember Me
Bionic Heart
Heileen
Loren The Amazon Princess
Planet Stronghold
Roommates
Summer Session
Tales of Aravorn: Seasons of the Wolf
roseVeRte
Café 0 ~The Drowned Mermaid~
sakevisual
Jisei series
RE: Alistair
Soviet Games
Everlasting SummerWinter Tale
Spicy Tails
World End Economica (Sakai Visual port)
Team NEET
Sepia Tears ~midwinter's reprise~
Team Salvato
Doki Doki Literature Club!

Referencias

Enlaces externos
 Sitio web oficial de Ren'Py (en Inglés)

Motores de videojuegos
Software libre programado en Python
Videojuegos y novelas visuales basadas en Ren'Py
Herramientas de desarrollo de videojuegos
Software de 2004
Kits de desarrollo de software
Introducciones relacionadas a la ciencia de la computación de 2004


"Ub" 328; a Ub class steam locomotive, type 4-6-0, built by Baldwin. Photograph taken by Albert Percy Godber of an image in an unidentified book. Caption in the book reads: "Record of recent construction No. 24. Page 20", and the image is on Page 106 of the book.
1 image, related to Baldwin locomotives and Steam-engines.
Historical Notes: "Ub" 328 was built by Baldwin Locomotive Works, Philadelphia (maker's no 18574/01), entered service on the 17 June 1901 and was written off in March 1935. (Information from the 'Register of New Zealand Steam Locomotives 1863-1971' by W G Lloyd, 1974, page 59.) See also 'Cavalcade of New Zealand locomotives' by A N Palmer & W W Stewart (p 75).
Usage: You can search, browse, print and download items from this website for research and personal study. You are welcome to reproduce the above image(s) on your blog or another website, but please maintain the integrity of the image (i.e. don't crop, recolour or overprint it), reproduce the image's caption information and link back to here (http://mp.natlib.govt.nz/detail/?id=33826). If you would like to use the above image(s) in a different way (e.g. in a print publication), or use the transcription or translation, permission must be obtained. More information about copyright and usage can be found on the Copyright and Usage page of the NLNZ web site.


text:
import helpers from 'yeoman-test'
import assert from 'yeoman-assert'
import path from 'path'

describe('Script features', function () {
  beforeEach(function () {
    return helpers.run(path.join(__dirname, '../app'))
      .withOptions({
        'skip-install': true
      })
      .withPrompts({
        projectName: 'Pixel2HTML',
        qtyScreens: 3,
        markupLanguage: 'html',
        frontEndFramework: 'bootstrap-4',
        jQuery: true
      })
      .toPromise()
  })

  it('creates expected base files', function () {
    assert.file([
      'src/assets/js/index.js',
      'src/assets/js/app.js',
      'webpack.config.js',
      'webpack/commonPlugins.js',
      'webpack/debugPlugins.js',
      'webpack/developmentPlugins.js',
      'webpack/paths.js',
      'webpack/productionPlugins.js'
    ])
  })

  it('should exists a gulp routine', function () {
    assert.file([
      'gulp/common/scripts.js'
    ])
  })

  it('should have the project name on package.json', function () {
    assert.fileContent('src/assets/js/app.js', /Pixel2HTML/)
  })
})