Obama: "The only people who don't want to disclose the truth are people with something to hide"
Warmists have always been rock-solid in refusing to follow the general scientific practice of making their raw data available to others for analysis. And on the big occasion when Warmist data did leak out we saw why. In constructing his hockeystick Michael Mann simply left out proxy data that did not suit him: Totally crooked. Tom Karl's controversial "adjustments" to sea-surface temperatures are also now under attack -- even requests from Congressional committees have not been sucessful in getting the data released.
So a failure to release data shouts loudly that the secretive scientists have something to hide. It shows that they have no confidence in their own conclusions. They fear that a re-analysis will arrive at conclusions different from theirs.
But these days Warmists are not the only unscientific ones. There is a lot at stake in today's "publish or perish" academic climate and it seems that people in lots of disciplines have been taking "shortcuts" to get their stuff published. The example below concerns a controversial medical study. Because of the great disbelief in the study's conclusions, it was a prime candidate for data release -- so that doubts could be set at rest for once and for all.
The authors have however dug their heels in so that really tells you all you need to know. There will now be no-one who trusts their conclusions.
The integrity of science as a whole now seems uncertain and faith in it is probably badly damaged.
Data sharing is all over academic news now. We had Research Parasites, a noxious species of scientists who want to analyse others' published data without granting its "owners" co-authorships and a certain control over the interpretations. Then there is a major battle between patients and clinicians about the release of the original data from the so-called PACE trial, originally published in The Lancet, which analysed medical efficiency and economic costs of different therapies for chronic fatigue syndrome/ myalgic encephalomyelitis (CFS/ME). Since the PACE study came out in 2011, the patients, but also a number of academic scientists, remained unconvinced of the published therapy recommendations and suspected a misinterpretation of data. The authors felt harassed and even threatened by the patients' incessant demands. The relevant research institutions, the Queen Mary University London and the King's College London, took the side of their clinicians and refused the release of data, using as argument the allegedly inappropriate nature of such requests and the privacy rights of trial participants.
Importantly, the data sharing requests always concerned anonymised patient data, where names and any other personal information of the trial participants was specifically deleted, to avoid any even approximate identification and breach of privacy. Yet even then, several attempts of patients as well as academics, to obtain the anonymised PACE trial data were converted by the universities from academic inquiries into the bureaucratic Freedom of Information Act (FOIA) requests, which were then repeatedly rejected. At the same time, some of the original PACE authors have been apparently somewhat critical of their original interpretations.
"The university considers that there is a lack of value or serious purpose to your request. The university also considers that there is improper motive behind the request. The university considers that this request has caused and could further cause harassment and distress to staff".
"we are seeking further expert advice on the analyses reported in the article, and we will evaluate how the request for the data from this study relates to the policy that applies to the publication".
"No one forced Peter White [lead author of PACE study,- LS] and colleagues to publish in an open access journal committed to data sharing, but by doing so they incurred an obligation. So, they should simply turn over the data".
A common claim by climate change deniers is that scientists have been "altering" ground-based temperature data to make it look like the Earth is warming. This claim—which is not just wrong, but exactly wrong, as I'll get to in a sec—has gotten more traction than most others offered by the forces of anti-science.
Rep. Lamar Smith, R-Texas, has been using this false claim as a blunt hammer against scientists in NOAA, for example, holding hearing after hearing trying to pin charges of conspiracy on them. But of course he's wrong and is wasting huge amounts of taxpayer money pursuing a lie. As I've written before, the scientists aren't "altering" the data, they're correcting them.
A new paper has come out reinforcing this. Researchers from Berkeley, the University of York, and NOAA have looked at the temperatures recorded at stations across the U.S. They assessed the corrections being applied to the data and have confirmed their accuracy. In other words, despite Smith's claims, the techniques the scientists are using to calibrate the data are solid.
The basic idea is this: There are temperature stations all over the U.S., and many have been in use for more than a century. However, over the years, some have been moved, replaced, or their environment has changed. This, of course, changes the temperature they record.
To account for that, scientists apply a correction to the data to make sure that they are comparing apples to apples when looking at modern measurements versus older ones. But how do they know if the corrections are accurate?
Actually, there are quite a few ways, but in the new study the researchers looked at more modern stations that are known to be quite accurate and compared them to the data from nearby older stations during the 12-year period where the two different systems were both in operation at the same time. As was expected, the uncorrected data from the older stations didn't match the newer ones well. However, when the corrections were applied, the older stations did in fact match the newer ones much better. This shows that the corrections being applied are in fact making the data more accurate.
Smith and his allies want you to think that scientists are nefariously altering the data, but that's not the case. Calibrating data isn't "altering" it. Think of it more like editing typos and bad grammar. Once those are gone, you get a far better picture of what's actually happening*.
A divided Supreme Court agreed Tuesday to halt enforcement of President Barack Obama's sweeping plan to address climate change until after legal challenges are resolved. The surprising move is a blow to the administration and a victory for the coalition of 27 mostly Republican-led states and industry opponents that call the regulations "an unprecedented power grab."
By temporarily freezing the rule the high court's order signals that opponents have made a strong argument against the plan. A federal appeals court last month refused to put it on hold. The court's four liberal justices said they would have denied the request.
The plan aims to stave off the worst predicted impacts of climate change by reducing carbon dioxide emissions at existing power plants by about one-third by 2030. Appellate arguments are set to begin June 2.
One small step for mankind. The high court ruling means the Obamabots can't start implementing the economy-crushing regulations and then present a fundamentally transformed country with a fait accompli somewhere down the long and winding legal road. For now, a victory for common sense against "green" superstition and cultism.
CNSNews.com cited statistics from a 2013 study in the Wildlife Society Bulletin, reported by the Institute for Energy Research (IER) in 2015, showing that every year 573,000 birds, including 83,000 raptors, and 888,000 bats, are killed by wind turbines, and asked Anderson if he could provide data showing how climate change posed a greater threat to the birds.
"You can find all sorts of information at National Audubon, National Wildlife Federation, National Resource Defense Council – all commissioned studies --showing that if we don't take drastic steps to reduce the impacts of climate change, that we will lose up to 50 percent of the global species in our generation," Anderson said.
Anderson also said he was not familiar with the source for the statistics CNSNews.com cited, but that he preferred data gathered at wind operations, and a 2007 estimate by the National Academy of Sciences on bird fatalities.
Thirty years ago, on January 28, 1986, the Space Shuttle Challenger shattered out of existence.
Nobel Prize-winning physicist Richard Feynman, the most famous member of the panel assigned to study the disaster, argued that the estimates of reliability offered by NASA management were wildly unrealistic, differing as much as a thousand times from the estimates of the engineers, who had called for the mission to abort due to extreme cold.
But management, determined to fly, ignored their advice, holding to fancy rather than facts.
Seven astronauts lost their lives — a physicist, five engineers and one school teacher.
Thirty years later, little has changed at NASA. It exemplifies many problems we see in science and culture — an inability or, perhaps more accurately, a dangerous unwillingness to deal with reality and truth. Truth seekers examine the world for what it is rather than fixate on what they want it to be. Ignoring reality can be dangerous.
Scientists should know this. But an emphasis on models has shown that new generations of scientists are becoming astonishingly immune to such reasoning. Trained mainly on computer modeling rather than real-world observations, they self-consciously admit that they frequently fail to distinguish models from reality. They keep aggressively massaging actual data, trying to make them fit models.
Huge sums have been thrown at studying global warming, nowhere more than at NASA, whose annual budgets for that alone now tally in the billions. Given lavish funding to blame global warming on human carbon dioxide emissions, NASA has done just that.
Inspiration and E.T.? Look, if you want inspiration, you can get it for a few bucks from Star Trek or Starbucks. You can boldly go … across the road. And looking for extraterrestrial civilization is about as nebulous a vision as Superman opening his own security firm. What next — no alien left behind?
It is difficult to see how making Muslims feel good about their worldview has anything to do with the science of going to space. But then, in our times, the pursuit of truth seems less important than thinking the correct political thoughts. Truth must bend the knee to other considerations. That there is no point beyond politics seems to be the point of NASAs reimagined vision.
When this modus operandi becomes the norm at the highest levels of a society, truth is only the first casualty. There is a loss to science via the useless diversion of valuable resources, a coarsening of the culture as people cynically begin to play the game, and eventually people die.
Models don't match reality? No problem. Keep changing the data till they do. We even have a technical term for it now, drawn from the name of the government scientist behind last year's attempt to erase the 18-year lack of warming by dodgy adjustments to already dodgy data: Karlization.
Shouldn't genuine pursuit of truth prefer to modify models? Instead, some scientists alter "official" climate records when they don't fit with their models. That is to prefer fancy over fact. It is tragic. And deadly.
"You touch on this Director Clapper in your report. I'm afraid that the Syrian refugee crisis is a precursor of a larger refugee crisis that we could be facing over the next 10 or 20 years, based upon predictions of climate change," said King.
"The band of the world that is going to be subject to drought, famine, crop loss, flooding in some areas, incredible heat in the band around north Africa, central Africa, into southeast Asia. We could see mass migrations that could really strain the western countries. Would you concur in that secretary?" King asked.
"Well I think you're quite right, and I alluded to that at least briefly in my oral statement about the fact that we have some 60 million people around the globe displaced in one way or another, and I think that—" Clapper responded.
"If that increases, it's going to create—because all those people are going to want to go where things are better, which happens to be the north hemisphere," King interjected.
"Exactly, and so that's why that …will place ever greater stresses on the remainder of the countries – whether here in the Americas, Europe, Africa, Asia, wherever – and the effects of climate change, of weather aberrations – however you want to describe them – just exacerbate this," Clapper said.
"What we have in the world by way of resource to feed and support the growing population is somewhat of a finite resource. There's only so much water, only so much arable land, and so the conditions that you mention I believe are going to foment more pressure for migrants – that on top of the instability of governance that I spoke briefly in my oral statement as well I think are going to make for a challenging situation in the future," he added.
In written testimony provided to the committee, Clapper said: "Extreme weather, climate change, environmental degradation, related rising demand for food and water, poor policy responses, and inadequate critical infrastructure will probably exacerbate—and potentially spark—political instability, adverse health conditions, and humanitarian crises in 2016.
"Several of these developments, especially those in the Middle East, suggest that environmental degradation might become a more common source for interstate tensions. We assess that almost all of the 194 countries that adopted the global climate agreement at the UN climate conference in Paris in December 2015 view it as an ambitious and long-lasting framework," he wrote in his opening statement.
"An increase in extreme weather events is likely to occur throughout this period, based on WMO reporting," he wrote.
"Human activities, such as the generation of greenhouse gas emissions and land use, have contributed to extreme weather events including more frequent and severe tropical cyclones, heavy rainfall, droughts, and heat waves, according to a November 2015 academic report with contributions from scientists at the National Oceanic and Atmospheric Administration (NOAA)," Clapper wrote.
"Scientists have more robust evidence to identify the influence of human activity on temperature extremes than on precipitation extremes," he added.
"The Paris climate change agreement establishes a political expectation for the first time that all countries will address climate change," Clapper wrote.
"The response to the deal has been largely positive among government officials and nongovernmental groups, probably because the agreement acknowledges the need for universal action to combat climate change along with the development needs of lower income countries," he added.


As you've seen, holiday overlays in Cars Land are full of visual puns, and they're pretty freaking cute. But along the side of a little shop building next to Mater's Junkyard Jamboree (or Jam-BOO-ree right now), there are some clever posters spoofing some classic Halloween movies--but with a Cars twist! From Hocus Pocus to Escape to Witch Mountain to grindhouse style movie aesthetics, they reinforce that Cars Land is full of witticism. That might be a little too much groan-inducing content for some, but I love it. And I hope you agree!
Punny movie posters line the side of the main drag on Radiator Springs!


Ben Nye Clown White Lite has all the whiteness of Clown White in a lighter consistency! Performs just as well and stays put throughout your act. For extended wear and opacity, set with Super White and mist with Final Seal.


Appointments Off by an Hour?
Warning: Appointments added to Google Calendar may show up in Outlook one hour off for the next week.
Free option: Double check your calendars to make sure the times are correct.
It all started when they changed the dates for daylight savings time. Apparently Google Calendar Sync is coded in such a way that it recognizes the old dates for daylight savings time. Between the last Sunday in October and the first Sunday in November, it will sync appointments one hour off. You'll have the same experience in spring when we do this again.
You'd think it would be simple to do a little recoding in Google Calendar Sync to recognize the new dates that have been in effect since 2007. But apparently not.


As of January 2019 WhatsApp is one of the most popular messaging apps worldwide with its 1.5 billion active monthly users. As the messaging apps start adding social media like features it become more important for the app users to protect their privacy.
WhatsApp users have long requested for a feature to control who can add them in a Group. Similar feature is already available in Telegram since they rolled out version 1.2 (build 10.12.17). Digital Trends reports that WhatsApp has added a privacy feature that allows users to control who can add that user to a WhatsApp group.
According to GSM Arena the 'Privacy' section of WhatsApp will have a new 'Groups' option with 3 radio buttons letting the WhatsApp user to choose from. 3 radio buttons would let user decide whether to allow everyone or the user's contacts or nobody to add the user in the group.
It is expected that the new Android and iOS updates of WhatsApp messenger after 06 April 2019 will have these features.
The author of this blog received a list of 200 achievements by BJP (NDA) government under the leadership of 14th Prime Minister of India Shri Narendra Modi.
The list represent more accomplishments in 5 years than what was achieved by previous leaders in 65 years from independence.
Indian citizens who plan to vote for Congress (UPA) or who are undecided which party to vote in upcoming 2019 Indian general elections must evaluate this list before casting their vote.
The numbers in the list are presented in international format instead of Indian format.
1. Fragile five to fastest growing economy – India.
2. 11th largest to 5th largest economy – India.
3. Share of world GDP from 2.43% in 2014 to 3.08% in 2018.
4. Average GDP 7.3% against 6.7% in previous regime.
5. Forex reserves from 300 Billion USD in 2014 to 420 billion USD in 2018.
6. Doubling of FDI inflow from 36 billion USD in 2014 to 66 billion USD in 2018.
7. Inflation less than 2.3 % (Nov 18) against 10.1% in 2014.
The author of this blog was invited to address Indian students commencing higher education at Griffith University, Queensland, Australia. The speech was part of a pre-departure session hosted by Griffith University at Courtyard by Marriott, Ahmedabad, Gujarat on 30/Jan/2019.
The speech covered wide range of subjects but one topic that needs to be briefly summarised here is the difference between Indian and Australian (western) education system. Indian education system clearly sets out the knowledge that students need to learn and assesses whether student has acquired that knowledge or not. Western education system at times sets student on discovery of knowledge through research in addition to traditional education system where student acquires knowledge from textbooks and classrooms.
The author also wants to thank Griffith University for felicitating the beautiful memento pictured below.
Recomendation To Belacam.com To Allow Embedding Content On Other Webpages.
Blog Post No– 002 in 'Missing Features' SeriesAt the time of writing this post sifting through the support content on Belacam.com did not show information to embed the user posts from Belacam to other websites and webpages.
When a main stream media (MSM) outlet embeds a social media post in the digital edition of an article or a news story then the chances of the post becoming viral increases. An embedded post going viral also increases chances of more internet traffic to; 1) social media website where the embedded post is published, 2) the user's social media page who posted the content, and 3) the social media post.
If Belacam considers more internet traffic generated towards their website as a positive success indicator (like other social media websites) then they should allow the easy embedding of their users' posts on other websites.
Work around to set about:blank (instead of about:NewsFeeds) as a default homepage in Microsoft Internet Explorer 11 and future versions.
It appears Microsoft Internet Explorer 11 users do not have an option to set 'about:blank' as their default homepage location, instead the new option is 'about:NewsFeeds' as can be seen in below screenshot.
Only problem with about:NewsFeeds homepage default is it downloads the multimedia content which slows the starting of the Internet Explorer and loading its homepage. A user who does not want to access the multimedia content can make the browser more efficient by manually changing the homepage to about:blank as per below screenshot.
JioGigaFibre Cometh. IoT and Smarthome Implications Of Ultra High Speed Internet For Indian Households.
In New Gandhinagar (Gandhinagar, Gujarat) a residential building was receiving JioGigaFibre installation on 23/12/2018. Further enquiries reveal all buildings in Sargasan and Kudasan area of New Gandhinagar are receiving JioGigaFibre installations.
Arrival of JioGigaFibre marks a watershed moment for Indian households and small businesses. It heralds dawn of IoT and smart home product and services for Indian consumers.
Internet of Things (IoT) involves connecting any electronic or mechanical device (or object) to internet that traditionally does not connect to internet. Philosophically IoT aims to allow objects and devices to process and communicate information, data and knowledge in order to improve its usefulness for the user.
A smart home system aims to automate the control household devices such as lighting, heating, cooling, climate, microphones, speakers and appliances.
Majority of Smartphone users are not software engineering or application development experts, or a technology expert for that matter. Application users trust their application distributor (application store or equivalent) and application owner to be honest while transacting with them. Craig Silverman at BuzzFeed News reported a research under taken by Kochava on 26 Nov 2018 alleging that a number of popular Android applications (developed by Cheetah Mobile and Kika Tech) have been committing advertisement fraud. The article explains 'click injection' and 'click flooding' concepts in very simple terminology along with the help of easy to understand diagrams.
The challenge of inserting malicious code in an application or a software by an unscrupulous technology company may be mitigated by; making the audit of source code compulsory by an independent code audit professional, andplacing necessary controls in place that only the audited code goes in to the production.


text:
/**
 * This file was taken and modified from the Gatling tool source code:
 * http://gatling-tool.org/
 */
package org.greencheek.app.compilation.scenario

import java.lang.reflect.Modifier

import scala.tools.nsc.interpreter.AbstractFileClassLoader
import scala.tools.nsc.io.{ Directory, File, Path }
import scala.tools.nsc.io.Path.string2path
import scala.tools.nsc.io.PlainFile

import grizzled.slf4j.Logging
import org.greencheek.app.compilation.zinc.ZincCompiler
import org.greencheek.jms.yankeedo.structure.scenario.ScenarioContainer

object ScenarioClassLoader extends Logging {

	def fromSourcesDirectory(sourceDirectory: Directory): ScenarioClassLoader = {

		// Compile the classes
		val classesDir = ZincCompiler(sourceDirectory)

		// Load the compiled classes
		val byteCodeDir = PlainFile.fromPath(classesDir)
		val classLoader = new AbstractFileClassLoader(byteCodeDir, getClass.getClassLoader)

		new FileSystemBackedScenarioClassLoader(classLoader, classesDir)
	}

	def fromClasspathBinariesDirectory(binariesDirectory: Directory) = new FileSystemBackedScenarioClassLoader(getClass.getClassLoader, binariesDirectory)
}

abstract class ScenarioClassLoader {

	def simulationClasses(requestedClassName: Option[String]): List[Class[ScenarioContainer]]

	protected def isSimulationClass(clazz: Class[_]): Boolean = classOf[ScenarioContainer].isAssignableFrom(clazz) && !clazz.isInterface && !Modifier.isAbstract(clazz.getModifiers)
}

class FileSystemBackedScenarioClassLoader(classLoader: ClassLoader, binaryDir: Directory) extends ScenarioClassLoader with Logging {

	private def pathToClassName(path: Path, root: Path): String = (path.parent / path.stripExtension)
		.toString
		.stripPrefix(root + File.separator)
		.replace(File.separator, ".")

	def simulationClasses(requestedClassName: Option[String]): List[Class[ScenarioContainer]] = {

		val classNames = requestedClassName match {
      case None =>  {
        binaryDir
          .deepFiles
          .collect { case file if (file.hasExtension("class")) => pathToClassName(file, binaryDir) }
          .toList
      }
      case Some(clazz : String) => {
        clazz :: binaryDir
          .deepFiles
          .collect { case file if (file.hasExtension("class")) => pathToClassName(file, binaryDir) }
          .toList
      }
    }

//		val classes = classNames
//			.map(try { classLoader.loadClass } catch { case e:Throwable => { null } } finally {})
//			.collect { case clazz if (isSimulationClass(clazz)) => clazz.asInstanceOf[Class[ScenarioContainer]] }

    val foundClasses = for { x <- classNames
      if(canLoadClass(x))
    } yield classLoader.loadClass(x)

    val classes = foundClasses.collect { case clazz if (isSimulationClass(clazz)) => clazz.asInstanceOf[Class[ScenarioContainer]] }

		requestedClassName.map { requestedClassName =>
			if (!classes.map(_.getName).contains(requestedClassName)) println("Simulation class '" + requestedClassName + "' could not be found.")
		}

		classes
	}

  private def canLoadClass(clazz : String) : Boolean = {
    try {
      classLoader.loadClass(clazz)
      true
    }
    catch {
      case e:Throwable => {
        warn("Unable to load class: " + clazz)
      }
      false
    } finally {}
  }
}

redpajama_set_name: RedPajamaGithub


Sorry, I am bad at English.
I can't find "Enable build processing" setting.
it's probably because I upgraded to the performance plan last monday.
Sorry for the confusion. The performance plan automatically enables build processing and removes the option.
I understand that but only new project?
Already existing project look disable build processing.
Hrm, that looks strange. Can you open a ticket with your build URL so we can take a look?


Twitter is giving its trolls a facelift.
Twitter is ditching the iconic egg avatar that appears as a default profile picture in favor of a more generic image of a dark gray disembodied head on a light gray background.
Or it could be an uneven power outlet. We're really not sure, to be honest.
In a blog post published Friday, Twitter said the redesign is intended to "encourage" new and existing users to upload profile pictures rather than stick with the quirky egg.
But the company also notes the egg has become associated with "negative behavior" from trolls who create accounts simply to harass other users.
The redesign led to more than a few jokes on Twitter (where else?) that the company is painting over a symbol of harassment on the platform rather than actually tackling the harassment itself.
In fact, Twitter has introduced new measures to crack down on harassment in recent months, but the problem persists.
While the default avatar change may be superficial, it does highlight yet another example of Twitter undoing its signature design features.
Twitter has begun chipping away at its 140 character limit, ditched favorites for likes and moved away from a reverse chronological timeline to one that relies partly on an algorithm.
With its user numbers stalled around 300 million and its stock in the gutter, Twitter is fighting to be more intuitive and approachable for a mainstream audience.
One day, however, Twitter may look in the mirror and not even recognize its own avatar.


This course is a project based class where students create presentations that require a moderate amount of research and critical thinking. Additionally, the basic concepts of debate are introduced through activities such as "Would You Rather?" Students learn how to support their decisions/arguments with reasoning.


text:
Gang Leader for a Day (Paperback)
A Rogue Sociologist Takes to the Streets
By Sudhir Venkatesh
Penguin Books, 9780143114932, 320pp.
Foreword by Stephen J. Dubner, coauthor of Freakonomics
When first-year graduate student Sudhir Venkatesh walked into an abandoned building in one of Chicago's most notorious housing projects, he hoped to find a few people willing to take a multiple-choice survey on urban poverty--and impress his professors with his boldness. He never imagined that as a result of this assignment he would befriend a gang leader named JT and spend the better part of a decade embedded inside the projects under JT's protection. From a privileged position of unprecedented access, Venkatesh observed JT and the rest of his gang as they operated their crack-selling business, made peace with their neighbors, evaded the law, and rose up or fell within the ranks of the gang's complex hierarchical structure. Examining the morally ambiguous, highly intricate, and often corrupt struggle to survive in an urban war zone, Gang Leader for a Day also tells the story of the complicated friendship that develops between Venkatesh and JT--two young and ambitious men a universe apart.
"Riveting."—The New York Times
"Compelling... dramatic... Venkatesh gives readers a window into a way of life that few Americans understand."—Newsweek
"An eye-opening account into an underserved city within the city."—Chicago Tribune
"The achievement of Gang Leader for a Day is to give the dry statistics a raw, beating heart."—The Boston Globe
"A rich portrait of the urban poor, drawn not from statistics but from viivd tales of their lives and his, and how they intertwined."—The Economist
"A sensative, sympathetic, unpatronizing portrayal of lives that are ususally ignored or lumped into ill-defined stereotype."—Finanical Times
Sudhir Venkatesh's latest book Floating City: A Rogue Sociologist Lost and Found in New York's Underground Economy—a memoir of sociological investigation revealing the true face of America's most diverse city—is also published by Penguin Press.
SUDHIR VENKATESH is William B. Ransford Professor of Sociology at Columbia University. He has written extensively about American poverty and is currently working on a project comparing the urban poor in France and the United States. His writings, stories, and documentaries have appeared in The American Prospect, This American Life, The Source, PBS, and National Public Radio. Venkatesh's latest book, Floating City: A Rogue Sociologist Lost and Found in New York's Underground Economy, was published in September 2013 by The Penguin Press.
Praise For Gang Leader for a Day: A Rogue Sociologist Takes to the Streets…
"Riveting." --The New York Times
"Compelling... dramatic... Venkatesh gives readers a window into a way of life that few Americans understand." --Newsweek
"An eye-opening account into an underserved city within the city." --Chicago Tribune
"The achievement of Gang Leader for a Day is to give the dry statistics a raw, beating heart." --The Boston Globe
"A rich portrait of the urban poor, drawn not from statistics but from viivd tales of their lives and his, and how they intertwined." --The Economist
"A sensitive, sympathetic, unpatronizing portrayal of lives that are ususally ignored or lumped into ill-defined stereotype." --Finanical Times

redpajama_set_name: RedPajamaCommonCrawl


text:
Men's basketball wins thriller over La Salle behind Petrie's clutch play: team then loses game to Penn
Sophomore forward Dylan Hastings scored a career high 12 points.(Photo courtesy of Athletic Communications)
The Lafayette men's basketball team defeated Atlantic-10 foe La Salle University 77-76 last Saturday with a late push to take the lead. Following the victory, the Leopards traveled to the University of Pennsylvania on Tuesday, Nov. 13, only to get routed by the Quakers 91-61. Lafayette's record moves to 1-2 after the first week of the season.
The victory over La Salle was the first of the year for the Leopards, highlighted by junior forward Myles Cherry's first career double-double, with 18 points and 12 rebounds. Sophomore guard Alex Petrie had both the game-tying bucket and the game-winning free throw when he was fouled driving down the lane.
"We brought energy for the entire game," said sophomore guard Justin Jaworski. "For us, a big thing is you are going to have your runs, but we took their punches, and then we gave them right back."
"We still made a ton of mistakes, but what we did differently that game was that we played our game the whole time. We never strayed away from that. We never went away from that. We just played as a team," Jaworski said.
Lafayette, however, did not see the same team success against UPenn, the defending Ivy League champions. The team struggled both offensively and defensively, but the gaudy offensive numbers for the Quakers show that Lafayette needs to improve defensively if they want to compete at a high level in the Patriot League. In the game, Penn shot 57.4 percent from the field and 44.8 percent from behind the arc, while the Leopards shot a respectable 50 percent from the field and 40 percent from three, but made just one of three free throws in the contest, and turned the ball over 18 times.
Sophomore forward Dylan Hastings scored a career-high 12 points to go with three blocks and four rebounds. Junior guard Kyle Stout was the only other Leopard in double figures, scoring 13 points on 5-7 shooting to go with four assists and two rebounds.
"Against La Salle, we played as a unit. Against Penn, when things got tough, we went our own directions," Jaworski said of the team's defensive struggles. "I think the [UPenn] loss is going to help us more than hurt us. It's humbling. We know we have to get back to work."
"It's energy and communication. You can play a ton of different defenses, but you still need to bring energy to the ball and play solid help side defense," Jaworski added.
This Sunday, the Leopards will host St. Francis College of New York at 2 p.m. in the Kirby Sports Center. St. Francis is 1-2 on the season, and Lafayette expects to return sophomore guard E.J. Stephens from his time out due to illness.
Men's basketball trounces Columbia in second victory of season
Men's basketball triumphs over Rutgers in first win of season
Men's basketball falls in home opener to Cornell and on the road at UPenn
Men's basketball falls to Syracuse in season opener
Unconventional senior seasons brings freshmen recruited during condensed seasons
Athletic Director Sherryta Freeman reflects on an unorthodox spring season
'Unfinished business': Lafayette athletes take advantage of extra year of NCAA eligibility
Senior guard E.J. Stephens is taking his talents to Minnesota
Recent TikTok video highlights gender-based inequities in the NCAA
Women's basketball season ends with quarterfinal loss to Boston University


6moons audio industry features: A broken system - or is it?
A few more comments on last month's A Broken Business Model and our subsequent policy change seem in order. To preface what follows, it's good to remind ourselves of our perennial human conflict between facts and perception. We're continuously surrounded by and interact with the facts of life. Yet our perception of these facts is subject to many filters. There are the biological filters of our nervous system and senses. Then there are psychological filters like beliefs, fears, biases, preferences and so forth. Changes in the psych filters alter our perception. Let's see whether we can apply that to our topic.
The perhaps biggest perception hurdle about our new policy is its new direct connection. As I intend to show, it's not really new. It seems more direct but has been in place since day one. People in general have no or fewer issues with the concept of a commercial review magazine's ad revenues when they all seem to pool into a pot somewhere in the cloud. The money pot's overall size and how much individual companies contribute to it is known only to the administrative offices and the owners. Out of those anonymous funds, the billing department dispenses monthly salaries to the full-time reviewers, per-job fees to the freelancers. It looks like a perfect separation of church and state.
That separation is an illusion. Once ads publish, everyone knows their contributors. The writers and public may not know specific rates; or for a given issue whether any ad is a single insertion or part of a lengthy campaign. But everyone knows that the front and back covers cost the most; and that full-page ads are costlier than small ones tucked into the classified section. Whilst advertising may really not talk to editorial, editorial is most assuredly looking at its own ads. Readers and writers following any magazine over time are fully informed who the most regular and biggest sponsors are.
Even so a staunch claim keeps being made about the impenetrable Chinese wall between the content-creation and admin departments. That's the essential disconnect upon which this entire business model rests to eliminate perception of undue influence between departments. If this separation was in place, how do you explain that in the close to nine years I've lived and worked out of Europe, I keep hearing this over and over again. "The print magazines in our country won't even talk to us about reviews unless we take out a one-year campaign which we can't afford. To us their doors are closed." What's the upshot? Whilst Editorial may not talk to the ad department, if manufacturer won't talk to it, Editorial won't talk to them.
This leads to what a Brit maker referred to when contacting us a few days ago for a review. He thought our new policy "most fair" and then explained why. "I do like the honest 6moons approach because I am very wary of certain corrupt publications which manipulate reviews based on a philosophy of back scratching." That's key. Reasonable people fully appreciate that a commercial publication must rely on revenues. Unless it's clearly spelled out however, they don't know the exact rules of engagement. Something is obviously required. It couldn't be any other way. But what. And how to go about it? Especially for manufacturers new at it or from a different culture, this very thing becomes a huge barrier of entry.
Our new direct approach removes this uncertainty. The rules of engagement are clearly spelled out. Now that artificial hole-ridden Chinese wall of perception collapses. With the pretense broken for good, naysayers now struggle with the concept that a writer who has become direct-connected to a revenue stream could remain fair, unbiased and untainted in his or her opinion. If their salary or review fee arrived in their bank account by some circuitous ad-revenue route, it's not a problem. If for each review you hand them a check in the envelope directly, they've become culpable. The indirect route is called salary or fee. The direct route is called quid pro quo. Doesn't that distinction seem just a bit artificial?
Still the contamination concern rules. So let's look at the detail in our case. Our new minimum review buy-in is a one-month small token ad. It costs less than my monthly health insurance. It's less than 1/10th of what a single-insertion full-page print ad in a major US glossy used to cost 10 years ago. It's something everyone can afford. Those who'd insinuate that I would treat reviewing for such a small amount any different than I have all along clearly have by themselves never built up something worthwhile from nothing. Otherwise they'd understand this to their very bones: You'd never jeopardize it for 100 times such an amount.
It all comes down to a reviewer's credibility being his only stock in trade. A technically brilliant writer without credibility makes noise. Perhaps it's beautiful noise but it's hollow. A writer with less finessed prose but solid credibility carries weight. Such credibility is hard to build, very easy to undermine. Having worked for more than a decade to create reader trust, why would we now betray it and in turn jeopardize our own sweat equity? Does it really make sense to first build a strong outreach pier, then start taking out its pylons one by one?
The obvious answer? It makes no sense whatsoever. Just as obviously, it doesn't prevent naysayers from thinking that's exactly what we're doing. So let me propose another way of looking at it. After all, it's about perception. Under our new policy, we've in effect become enthusiast-type paid consultants to our readers who have free access to our opinions and conclusions. If we were paid consultants to the manufacturers, our findings would remain off the record. They'd be used to quietly address and fix whatever criticisms we made. But since we're paid consultants to our readers, our findings are there for all to see - the good, the bad and the indifferent. That the outright bad occurs rarely is simply a function of most product today being at least competent (otherwise it'd bomb quickly in today's interconnected market); and review acceptance relying on some form of pre-vetting. Back to paid consultancy.
It's the norm in all sectors of business. Good consultants are paid to be honest. Otherwise they're of no use. In the review sector people only have a hard time accepting honesty because overt criticism can have such an obvious impact on a maker's ability to sell. That's why the going model hinges on the Chinese wall. It's just not as impenetrable as it claims to be. Put differently, it's not prevented widespread reader cynicism and pervasive accusations of undue influence. The great equalizer is today's Internet with its real-time responsiveness; and the fact that reviews are in the public domain for all to inspect and dissect at their leisure.
What are reviews? Sonic descriptions and practical complaints. The former are about flavours, different sonic ideals and subjective performance attributes. Practical complaints can connect with subjective complaints if a writer can't extricate his personal preferences; but mostly deal with price, lack of competitiveness, industrial design, finish, features and behavioural quirks. If a reviewer fails to properly cover the full range of potential criticisms as separate from personal likes or dislike about sonic personalities, he or she is subject to immediate triangulation in the forums, blogs and by competing reviews. If you're bad or sloppy at your job or play games, it's no secret. Your work is out in the open. Particularly with web-based publishing in English, it's global. The perception problem remains of course. Even though we're paid consultants to our readers, it's the manufacturers who pay us. How could we possibly remain unbiased and independent in our opinions?
The answer is so obvious that it's too easy to miss! Unlike 'big corporate' publications with physically separate admin offices in often different cities, we have never operated like that. From day one 6moons has been a single owner/operator affair and never pretended to be otherwise. I've always worn all of the hats and still do. I write my own reviews. I edit and format those of our contributors. I translate and reformat our syndications. I handle all our Photoshop processing. I cover news and certain shows. I write industry features and music reviews. I handle site maintenance. Upon instruction, I create banner and ad graphics for companies who lack their own graphic departments to supply them. I handle billing and receivables. I'm Editorial and admin in one person. Always have been, always will be.
So here's the upshot. If you've liked us so far, nothing has changed. We've never hidden behind the pretense of a wall. If we've managed to operate with fairness and credibility for all these years without having a Chinese wall in place, ever... what suggests that we couldn't or wouldn't continue in exactly the same way? It's not the system which guarantees fair play. All systems are imperfect. It's how people within them apply personal morality and self discipline. Our new system is no more or less infallible than the old. I simply believe that we've proven consistency and fair play to now implement a small change which, a/ begins to pay our writers a small fee for their efforts and dedication, and b/ offsets the imbalance of generous ad supporters holding the bag for the majority of their competitors who want our work for free whilst benefiting their own for-profit endeavours.
Remember, the prevailing attitude which prompted our policy change was "help us improve or launch our business but do it for nothing." This should really be countered with "if we agree to work for free on 70% of the reviews we write as we did before the policy change, will you agree to donate 70% of your equipment free of charge to people who can't afford it"? No matter how loud he may bark, I'm rather sure that dog won't hunt!


Planning Holiday Travel With a Senior Loved One?
Planning a trip with a senior loved one can be challenging. You want them to enjoy their experience and feel included. At same time, you want them to be safe.
Will it be fun for the entire family?
Is it going to be difficult to get there?
All of these questions can be daunting, especially if you've never planned a trip with an older adult. Here are a few things to consider when planning holiday travel with your senior loved one.
When planning your trip, be mindful of the changes that occur with age. Your loved one may walk a little slower, tire faster, and require more breaks than the rest of your family.
Choose a hotel where everything is nearby to reduce the amount of walking.
Book a non-stop flight for simplicity.
Avoid traveling to places where the terrain is rough.
Schedule lots of free time between activities to allow your loved one time to take breaks without feeling like they are missing out.
Reserve an accessible hotel room. They fill up quick, so do this as soon as you know where you are staying.
If you're flying, notify the airline about your needs in advance. Will your loved one need a wheelchair or boarding assistance? Do they need to borrow a wheelchair from the airport, or will they bring their own?
Inform the airline or cruise line of any dietary restrictions your loved one has. This will give them time to prepare and make sure they have food your loved one can eat.
If your loved one is okay to travel. If you are flying, let the doctor know. If you are going a cruise, tell them.
Discuss medications. Are you traveling to a new time zone? Ask if they should modify the times they take their medication.
Talk about vaccines. Are there any vaccinations they should get?
Get a list of all medications and dosages. This will be extremely helpful if your loved one needs to refill a prescription while on vacation.
Consider bringing the family to them. If your loved one is not cleared to travel, consider bringing your family to them. They will appreciate you making the extra effort to include them.
Schedule respite care. If travel is not possible or your loved one doesn't feel comfortable traveling, you may want to consider respite care for the duration of the trip.
Most senior living communities offer respite care, including the Heritage Senior Communities locations across Michigan. To learn more about respite care, contact the Heritage community nearest you.


text:
Auditions for West End
TRAVELS WITH MY AUNT by GRAHAM GREENE
March 1-March 17, 2019
Directed by Cy and Jane Hoffman
This stage adaptation of Graham Greene's novel of retired bank worker Henry Pulling and his eccentric Aunt Augusta was first presented at the Citizens' Theatre, Glasgow, in 1989. The play has a cast of four actors playing all 24 characters.
Performing at the VSA North Fourth Art Center
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LETTICE & LOVAGE by HUGH LEONARD – June 14 – June 30, 2019
Directed by Marty Epstein
"An evening of enchantment and delight." – New York Post
"Hilarious." – USA Today
"A celebration of the imagination, a celebration of the art of the theatre." – New York Daily News
"One of the sharpest, wittiest, most passionate and elegant plays of the year." – London Sunday Express
UNDER MILK WOOD by Dylan Thomas – October 18 – November 10, 2019
Directed by Joe Feldman
In lyrical, soaring and earthy prose, verse, and song, the most controversial poet of the mid-century stages a twenty-hour midnight pub crawl of a Welsh fishing village exposing the victorious and the venal among the denizens of a provincial Welsh fishing village. Fully staged play by Joe Feldman, although it was originally conceived as a play for radio.
© 2016 Westend Productions


text:
Q: Multiple selected File names to specific  elements I want to select multiple files for upload and show the names of the files in a table.
I found something similar in this jsFiddle:
http://jsfiddle.net/jonathon/bdbXk/
This fiddle uses li elements. but i want the list to get inserted into specific td elements identified by id or class.
What I am trying is depicted in this fiddle.
http://jsfiddle.net/5vecv/5/
the file names should only be inserted into the td having class as "files". or only the first td of every row..

redpajama_set_name: RedPajamaStackExchange


The Beachwaver Co.® was founded in 2010 by celebrity hairstylist Sarah Potempa. She has styled hair for the covers of magazines, movie premieres, ad campaigns, and celebrities. After continually explaining the complex process to get Beachywaves to editors, Sarah thought that there must be an easier way. She sat down and sketched the idea for the Beachwaver, the first ever rotating curling iron.


text:
> Modern & contemporary fiction (post c 1945)
Seven Days of Us : One of the best family dramas you'll ever read Paperback / softback
by Francesca Hornak
'One of the best books of the year' Hello!The joyful, sharply observed and life-affirming Christmas story for fans of One Day.
Also a Radio 2 Bookclub pick. It's Christmas, and the Birch family is gathering for the first time in years. Olivia, the eldest daughter, has returned from treating an epidemic abroad and must go into quarantine for seven days.
Her mother has decided it's the perfect opportunity to spend some 'special time' together.
Her youngest sister wholeheartedly disagrees. Her father isn't allowed an opinion. When no one can leave the house, seven days for the Birches feels like an eternity.
Especially when they're all harbouring secrets. One of whom is about to come knocking at their door... 'LOVED it! Warm and humane, funny and sad, with a great, twisty plot, Seven Days of Us is absolute pleasure reading from beginning to end.
Francesca Hornak is a true talent. Just gorgeous!' Marian Keyes'I loved this comic drama...the plot is genius...and the results are hilarious and touching' Daily Mail'One of the best family dramas you'll ever read' Best'Sharply observed by Hornak's satirical eye, this has "Working Title film deal" written all over it' Glamour'Francesca Hornak is hilariously funny with characters that jump off the page, grab you, and just won't let go' Rosamund Lupton, bestselling author of Sister 'Expertly captures the joys and the tensions of spending any time with those who know you best.
It thoroughly deserves to be this year's big Christmas hit' The i'Absorbing, insightful and immensely enjoyable' Laura Barnett, bestselling author of The Versions of Us'Compassionate, witty and wise' Saskia Sarginson, bestselling author of The Twins'I LOVED Seven Days of Us.
The story swallowed me up. It has all the makings of your classic rom-com, with characters that are both remarkable yet wonderfully relatable' The Unmumsy Mum'Gripping, powerfully emotional and life-affirming.
I read it in one sitting!' Maeve Haran, bestselling author of Having it All'Touching, funny, emotionally intelligent, Seven Days of Us is pure pleasure from beginning to end.
It's stylishly written and totally engrossing. I really, really loved it' Adele Geras'It's a cliche to say this book is a rollercoaster but the sun came up and the sun went down, people cried for help, and the bath overflowed, and I couldn't move, captivated by this extraordinary page-turner...It has more twists and turns than Hampton Court Maze and yet Francesca Hornak guides one through it all with a confident hand until one puts it down, exhausted but exhilarated by such a rollicking good read.
Terrific' Virginia Ironside'An engrossing and funny study of a middle-class British family in crisis.
I loved it!' Keith Stuart, bestselling author of A Boy Made of Blocks'Witty and deeply heartfelt' Bestselling author Emily Giffin 'Hornak's wry, masterful portrayal of a family in crisis is filled with flawed and funny characters who will capture - and break - your heart' Fiona Davis, bestselling author of The Dollhouse'Hornak's first novel is a farcical gem, perfect for fans of Matthew Norman and Emma Straub.
Alternately tender and razor-sharp, Seven Days of Us will resonate with anyone who regresses the minute they step inside their childhood home' Booklist starred review'A superb drama - smart and touching' Sunday Mirror'Read it if you like Marian Keyes' Rachel's Holiday...it's one of the best family dramas you'll ever read' Best Magazine
Publisher: Little, Brown Book Group
Category: Modern & contemporary fiction (post c 1945)
Also by Francesca Hornak | View all
History of the World in 100 Modern...
Seven Days of Us
Worry with Mother
Sieben Tage Wir


text:
Vota Unicamp
============

Objetivo
--------
O Objetivo desse app é oferecer um complemento democrático às assembleias da Unicamp.

Será possível colocar para votação aberta todas as pautas colocadas nas assembleias, todos os votos serão somados e somente alunos da Unicamp poderão votar

Funcionamento
-------------
O app usa o [sistema de verificação de documentos da Unicamp][1] para verificar a matrícula de cada aluno. Esse sistema devolve o Atestado de Matrícula (como PDF) que é lido para extrair as informações do aluno (Nome, RA e Curso). Essas informações são colocadas no banco de dados em conjunto com o voto de cada um. (vide [privacidade](#privacy))
Além disso, é possível compartilhar e avaliar argumentos e comentários sobre as pautas.

Segurança
---------
O app foi testado contra os ataques web mais comuns, não foi possível invadir o sistema dessa forma.

O sistema é seguro também contra ataques do tipo __brute force__, pois é necessário preencher um campo __captcha__ para cada voto.

Valores e preocupações
----------------------

O app toma privacidade e segurança como prioridades. Nenhuma informação além do nome, ra e curso é lida ou salva. O PDF de onde essas informações são retiradas também é deletado assim que é lido, não ficando salvo no sistema.

No desenvolvimento do aplicatico foram tomadas algumas decisões que podem ser questionadas.

Uma delas é o formato completamente anônimo dos votos. A versão anterior do aplicativo, para incentivar a confiança na disposição de apenas votos válidos, dispunha de informações como nome, ra e rg nos resultados. Isso cumpria com o propósito, mas trazia outro problema: a identificação de usuários por terceiros. Diante disso foi decidido que a segurança dos usuários e a capacidade de livremente expor seus ideais deveria estar em primeiro plano.

Infelizmente o voto anônimo e a validação do voto são características mutuamente exclusivas, portanto escolhi pela primeira.

##  Privacidade

O app salva apenas o Nome, RA e Curso do aluno. Nenhuma dessas informações é mostrada a outros usuários, com exceção do curso, que é mostrado na aba de resultados junto a um nome fictício gerado automaticamente.

Este nome fictício é único para cada usuário e serve para que o usuário se identifique nos comentários e resultados.

O RA é guardado na íntegra, porém não é mostrado aos outros usuários. É usado apenas para realizar o login e para garantir que um mesmo aluno não vote duas vezes.

[1]: https://www.daconline.unicamp.br/ActionConsultaDiploma.asp


text:
Home > Articles and tips > What Is Dubbing?
What Is Dubbing?
Dubbing can be challenging even for dubbing professionals. It takes the ability to portray characters based on their behaviours, responses and interactions with other characters. But what is dubbing really?
Dubbing encompasses the entire process of adding voices or sounds to a film or cartoon. Dubbing can be used for several reasons but is very commonly used for cartoon voices and in foreign films and series (in stead of subtitles).
How to get good at dubbing
There is a strong demand for people who do dubbing well. But what does it take to be cast in a dubbing role?
First and foremost, you must fluently speak the language you are dubbing for. Secondly, you need a good voice and be able to match your tone and dialogue with the gestures and body language of the original character being dubbed. A clear voice, and the ability to deliver dialogue that conveys emotion and feelings are key qualities that can help you stand out.
Also, accurately matching the timing of your dialogue with the dialogue in the original production is a real strength.
An easy way to get better at dubbing is by memorising some lines from a script, then recording yourself speaking them. Listen to what you've recorded and listen for ways to improve your tone or delivery.
But the best way to improve is to never be afraid of a challenge and jump right in.
Remember to never stop trying to get better, even after you've made big improvements. Your commitment and hard work will ultimately be the key to success!


text:
Twilight Time's 3rd Anniversary BD sale starts Wednesday, plus Philomena & more!
March 17, 2014 - 2:44 am | by Bill Hunt
Happy St. Patrick's Day! We've got a couple things for you here at The Bits today...
First, our own Tim Salmons has turned in a pair of new Shout! Factory Blu-ray reviews, including The Slumber Party Massacre and the new Darkman: Collector's Edition. Both are well worth a look. Enjoy the reviews! [Read on here...]
Also today, Doogan has posted another new installment of his Gripe Soda column, featuring his weekly Doogan's Queue rundown of what's new in stores on Blu-ray and DVD this week. Be sure to check it out.
Also today, I wanted to bring your attention to BIG sale promotion that Twilight Time and Screen Archives Entertainment are having starting this Wednesday (3/19) and running for FIVE DAYS, in honor of Twilight's third anniversary. Starting at 4 PM (Eastern) on Wednesday afternoon, 36 Twilight Blu-ray titles will be discounted by a whopping $10 each! So titles that normally sell for $34.95 will be just $24.95, and titles that are normally $29.95 will be just $19.95. Blu-ray titles will include Rapture, Picnic, Pal Joey, Demetrius & the Gladiators, Bite the Bullet, Desiree, The Wayward Blues, Cover Girl, High Time, Steel Magnolias, The Sound and the Fury, The Rains of Ranchipur, Bonjour Tristesse, Beloved Infidel, Lost Horizon, The Blue Lagoon, Experiment in Terror, Nicholas and Alexandra, Our Man Flint, In Like Flint, Pony Soldier, The Song of Bernadette, Philadelphia, The Only Game in Town, Love Is a Many-Splendored Thing, Sleepless in Seattle, The Disappearance, Sexy Beast, Alamo Bay, Mindwarp, The Other, Jane Eyre, Royal Flash, and Titus. There are also four DVD titles available, including The Kremlin Letter, Violent Saturday, Woman Obsessed, and My Cousin Rachel. Twilight will also have 150 copies of The Front signed by actress Andrea Marovicci. Again, this sale lasts just FIVE DAYS and starts on Wednesday at 4 PM (Eastern). So take advantage while you can. Here's a link to the Screen Archives website.
Finally, Anchor Bay and The Weinstein Company have officially set Stephen Frears' Philomena for Blu-ray and DVD release on 4/15.
That's all for now. Back tomorrow with more. Stay tuned...
Published in My Two Cents
Bluray Disc
Third Anniversary Sale
Screen Archives Entertainment
The Slumber Party Massacre
Darkman: Collector's Edition
Shout! Factory
Scream Factory
Doogan's Queue
Contact Bill Hunt
Please send us a message.
About Bill Hunt
Bill Hunt is the Editor in Chief of The Digital Bits, and the co-author (with Todd Doogan) of the Amazon Top 50 selling book The Digital Bits: Insiders Guide to DVD. Hunt founded The Bits in 1997, in the early days of the DVD format,…
Recent My Two Cents
TONS of new Blu-ray & 4K announcements: Godzilla: KotM, The Jetsons, V: Miniseries, Dark Phoenix & MUCH more
The Bits at Comic-Con, plus Rambo (2008), Brightburn, Shadow, Casino, Cornetto Trilogy, Akira & more in 4K (and BD)!
This week's Release Dates & Artwork update is here with the latest BD, DVD & 4K cover art!
Zombieland 4K, Apollo 11 4K (on iTunes for now), Walking Dead, and oh HELL yeah... The Great Waldo Pepper!
Jul 2, 2019 - 3:08 pm
Moonraker 40th, Bill at Comic-Con (w/Shout! Factory), Omen Collection, Doom Patrol & LOTS more new announcements
Avengers: Endgame, restored Monty Python & From the Earth to the Moon, Game of Thrones, Lost Highway & more!
Jun 26, 2019 - 10:26 am
My Two Cents Archives


When discussing global warming, the public eye is mostly directed to global average surface air temperatures, but that's just one slice of the climate pie. If you haven't noticed, the ocean is awfully big, and it holds a great deal more heat energy than the atmosphere. In fact, about 90 percent of the energy that's been added to the climate system by human activities has gone into the ocean.
Unfortunately, it's hard to monitor that. There are a multitude of measuring stations for surface air temperatures, but our presence in the ocean is limited. With the advent of the Argo array—a fleet of autonomous, drifting floats that measure ocean temperatures—in the early 2000s, our data improved drastically. Still, the uncertainty has historically been greater for deeper waters.
Some expected the "missing energy" would be found in deeper waters, but we didn't have the data to demonstrate that. Meanwhile, the rapid atmospheric warming trend of the 1990s, boosted by strong El Niños, slowed in the La Niña-ridden 2000s, prompting some to posit that global warming was over and the scientists could all go home.
A new paper published in Geophysical Research Letters compiles the available measurements of the ocean's heat content, including information on the deep ocean. The study finds that those deep waters have absorbed a surprising amount of heat—and they are doing so at an increasing rate over the last decade.
The researchers—Magdalena Balmaseda and Erland Källén of the European Centre for Medium Range Weather Forecasts (ECMWF) and Kevin Trenberth of the US National Center for Atmospheric Research—assembled the available data from 1958 to 2009 using a reanalysis model. These models are used to reconstruct global conditions from available measurements. In this case, the reanalysis model focused on the ocean, though atmospheric conditions were also included to complete the picture.
The resulting ocean heat content data shows some interesting features. Drops in ocean heat content coincide with large volcanic eruptions, which pump sunlight-reflecting aerosol particles into the atmosphere for a time. But there's also a small drop after 1998—a year known for the incredibly strong El Niño that pushed global surface temperature to a (then) high point.
That may seem odd at first blush, but it makes sense if you're not fixated on the atmosphere. An El Niño involves above-average sea surface temperatures in the eastern Pacific, and some of that energy is transferred to the atmosphere, which becomes warmer as a result. All that warm water means evaporation, and evaporation means cooling of the ocean, just like sweat cools your skin.
After this period, ocean heat content continued to rise sharply—especially in the deep ocean. The paper states that "recent warming rates of the waters below 700 [meters] appear to be unprecedented" in the record. Supporting some earlier estimates, the data shows about 30 percent of ocean warming after 1998 taking place more than 700 meters down.
While it's certainly useful to note the extent to which heat energy is accumulating in the climate system, it's more interesting to ask why the deep ocean has taken such a large share of it recently. It seems to relate to changes in ocean circulation. A 2011 study indicated that La Niñas and a circulation pattern called the Pacific Decadal Oscillation could cause lulls in surface warming while energy is stuffed into the deep ocean. That may be exactly what we've experienced over the past decade. When those conditions change, we'll see the effects in higher surface temperatures.


text:
DUKE AVENUE, 3400 BLOCK: A wallet containing a driver's license, Social Security card, and Skylight Netspend card was reported stolen and someone withdrew money from the Netspend card account.
MILAN WAY, 7100 BLOCK: CAsh in the amount of $15,000 to $17,000 was reported stolen.
2419 TOWSON AVE.: A red 2010 Dodge Challenger valued at $7,000 was reported stolen at Affordable Auto Sales.
YORKSHIRE DRIVE, 4400 BLOCK: Items valued at $2,120 were reported stolen during a burglary.
NORTH 50TH STREET, 4100 BLOCK: A wallet valued at $75 containing $20, a driver's license, Social Security card, WIC card, food stamps and a debit card was reported stolen during a vehicle break-in.
SOUTH 18TH STREET, 500 BLOCK: A wallet valued at $20 containing an Arkansas ID card and a Walmart prepaid debit card was reported stolen.
STONEY HEDGE DRIVE, 8900 BLOCK: A handgun, a rifle and a shotgun valued at $1,100 were reported stolen during a residential burglary.
CRESTON STREET, 800 BLOCK: Items valued at $1,140 were reported stolen.
ELLSWORTH ROAD, 6300 BLOCK: Items valued at $450 were reported stolen during a residential burglary.
NORTH 37TH STREET, 1400 BLOCK: Items valued at $200, including Hydrocodone, were reported stolen during a residential burglary.
SOUTH 24TH STREET, 800 BLOCK: A pair of sunglasses valued at $200 and a work ID badge were reported stolen during a vehicle break-in.
PARK AVENUE, 4200 BLOCK: Items valued at $120 were reported stolen during a vehicle break-in.
SOUTH W STREET, 2100 BLOCK: Items valued at $2,000 were reported stolen.
SOUTH M STREET, 2400 BLOCK: Two checkbooks and two Home Depot store credit cards were reported stolen during a vehicle break-in.
QUINCY STREET, 2700 BLOCK: Firearms and a gun cabinet valued at about $10,200 were reported stolen during a residential burglary.
BIRNIE AVENUE, 2400 BLOCK: A digital camera and a couch cushion valued at $60 were reported stolen during a residential burglary.
A FORT SMITH MAN reported another man head-butted him in the nose, breaking his nose and injuring his lip.
CHRISTINA WILKETT-LUMBA OF FORT SMITH was arrested on suspicion of second-degree battery of a state employee and first-degree assault.
THOMAS JOSEPH REDDICK OF FORT SMITH was arrested on suspicion of second-degree battery of an officer, criminal trespass, misdemeanor fleeing and a misdemeanor failure to appear warrant.
DAVID ALLEN RELEFORD OF FORT SMITH was arrested on suspicion of second-degree battery, aggravated assault and first-degree terroristic threatening.
TIFFANY ANN CROFF OF FORT SMITH was arrested on suspicion of possession of more than 10 grams of cocaine with the purpose to deliver, felony possession of drug paraphernalia, possession of less than 28 grams of a schedule IV/V controlled substance and a parole violation.
DERRICK SCOTT HAYNES OF FORT SMITH was arrested on suspicion of felony possession of less than four ounces of a schedule VI controlled substance and a misdemeanor failure to appear warrant.
FORGERIES/FRAUDS
1701 GRAND AVE.: An employee at Dollar General reported a fake $20 bill and a fake $10 bill had been passed there.
WILLIAM CODY SMITH OF VAN BUREN was arrested on suspicion of first-degree forgery, an absconding warrant and a parole violation.
OTHER INCIDENTS/ARRESTS
7914 U.S. 271 S.: An employee at Valero reported a man came into the store, stuck his hand in his right pocket, pointed it at him as if he had a gun and demanded the money from the cash register. The employee reported he did not believe the man had a gun, so he pulled a knife from behind the counter, after which the man removed his hands from his pockets and left the store.
SOUTH U STREET, 4700 BLOCK: A break-in was reported.
RAY ALLEN SEBASTIAN OF LITTLE ROCK was arrested on suspicion of possession of a firearm by certain person and a misdemeanor failure to appear warrant.
JOSEPH ARTHUR GARNET, 55, OF FORT SMITH was arrested on a fugitive from justice out of state warrant.
ELIZABETH LOUISE BACA, 34, OF FORT SMITH was arrested on an absconding warrant, a parole violation, a misdemeanor assist outside agency warrant and suspicion of obstructing governmental operations.
AUTUMN LEANN ALLEN OF DANVILLE was arrested on a felony assist outside agency warrant.
ASHLI RENEE BLACK, 43, OF MANSFIELD was arrested on a felony petition to revoke warrant.


text:
<?php

namespace WeiTest;

/**
 * @internal
 */
final class SqliteCacheTest extends CacheTestCase
{
    protected function setUp(): void
    {
        try {
            $this->object = $this->wei->sqliteDbCache;
        } catch (\PDOException $e) {
            $this->markTestSkipped($e->getMessage());
        }

        parent::setUp();
    }
}


MARSTONS MILLS - Erin Ann (Croughwell) Tibbitts of Marstons Mills passed away on March 1st at Cape Cod Hospital from cardiac arrest. She was 55 years old.
Erin was born in Framingham MA to Mary C. (Catusi) Croughwell and the late Owen F. Croughwell. She spent her youngest years in Mendon MA before moving to the cape with her family in 1973. Erin was a 1981 graduate of Barnstable High School and worked as a Real Estate Broker, for many years in the family business.
Erin's passions were many: from cooking to genealogy, interior design to politics. But no one thing mattered to her more than animals - dogs, cats, birds, squirrels- all were on the receiving end of her undivided attention and continuous snacks throughout her life.
Erin leaves behind the love of her life, husband Steven Tibbitts. She also leaves behind her mother Mary Croughwell of Marstons Mills; a son, Dillon Chouinard of Cotuit; her former husband, Brian Chouinard of Marstons Mills, Dillon's dear friend Jackie Friel of Cotuit, and a brother Owen Croughwell, of Cotuit.
Visitation will be held at John Lawrence Funeral Home, 3778 Falmouth Rd. (Rt 28) Marstons Mills, MA. On Thursday March 28 from 4-6 pm. Burial will be private.
In lieu of flowers, and in keeping with Erin's spirit, a donation to the animal charity of one's choice would be welcomed.
For online guestbook please visit www.johnlawrencefuneralhome.com.


text:
Developer Cookbook
==================

This cookbook consists of a set of examples of common tasks that developers may
encounter when developing Girder applications.

Client cookbook
---------------

The following examples are for common tasks that would be performed by a Girder
client application.

Authenticating to the web API
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Clients can make authenticated web API calls by passing a secure temporary token
with their requests. Tokens are obtained via the login process; the standard
login process requires the client to make an HTTP ``GET`` request to the
``api/v1/user/authentication`` route, using HTTP Basic Auth to pass the user
credentials. For example, for a user with login "john" and password "hello",
first base-64 encode the string ``"john:hello"`` which yields ``"am9objpoZWxsbw=="``.
Then take the base-64 encoded value and pass it via the ``Girder-Authorization``
header (The ``Authorization`` header will also work): ::

    Girder-Authorization: Basic am9objpoZWxsbw==

If the username and password are correct, you will receive a 200 status code and
a JSON document from which you can extract the authentication token, e.g.:

.. code-block:: javascript

    {
      "authToken": {
        "token": "urXQSHO8aF6cLB5si0Ch0WCiblvW1m8YSFylMH9eqN1Mt9KvWUnghVDKQy545ZeA",
        "expires": "2015-04-11 00:06:14.598570"
      },
      "message": "Login succeeded.",
      "user": {
        ...
      }
    }

The ``authToken.token`` string is the token value you should pass in subsequent API
calls, which should either be passed as the ``token`` parameter in the query or
form parameters, or as the value of a custom HTTP header with the key ``Girder-Token``, e.g. ::

    Girder-Token: urXQSHO8aF6cLB5si0Ch0WCiblvW1m8YSFylMH9eqN1Mt9KvWUnghVDKQy545ZeA

.. note:: When logging in, the token is also sent to the client in a Cookie header so that web-based
   clients can persist its value conveniently for its duration. However, for security
   reasons, merely passing the cookie value back is not sufficient for authentication.

.. note:: If you are using Girder's JavaScript web client library in a CORS environment,
   be sure to set ``girder.corsAuth = true;`` in your application prior to calling
   ``girder.login``. This will allow users' login sessions to be saved on the origin
   site's cookie.

Upload a file
^^^^^^^^^^^^^

If you are using the Girder javascript client library, you can simply call the ``upload``
method of the ``girder.models.FileModel``. The first argument is the parent model
object (an ``ItemModel`` or ``FolderModel`` instance) to upload into, and the second
is a browser ``File`` object that was selected via a file input element. You can
bind to several events of that model, as in the example below.

.. code-block:: javascript

    var fileModel = new girder.models.FileModel();
    fileModel.on('g:upload.complete', function () {
        // Called when the upload finishes
    }).on('g:upload.chunkSent', function (info) {
        // Called on each chunk being sent
    }).on('g:upload.progress', function (info) {
        // Called regularly with progress updates
    }).on('g:upload.error', function (info) {
        // Called if an upload fails partway through sending the data
    }).on('g:upload.errorStarting', function (info) {
        // Called if an upload fails to start
    });
    fileModel.upload(parentFolder, fileObject);

If you don't feel like making your own upload interface, you can simply use
the ``girder.views.UploadWidget`` to provide a nice GUI interface for uploading.
It will prompt the user to drag and drop or browse for files, and then shows
a current and overall progress bar and also provides controls for resuming a
failed upload.

Using the Girder upload widget in a custom app
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Your custom javascript application can easily reuse the existing upload
widget provided in the Girder javascript library if you don't want to write your
own upload view. This can save time spent duplicating functionality, since the
upload widget provides current and overall progress bars, file displays, a
drag-and-droppable file selection button, resume behavior in failure conditions, and
customizable hooks for various stages of the upload process.

The default behavior of the upload widget is to display as a modal dialog, but
many users will want to simply embed it underneath a normal DOM element flow.
The look and behavior of the widget can be customized when the widget is instantiated
by passing in options like so:

.. code-block:: javascript

    new girder.views.UploadWidget({
        option: value,
        ...
    });

The following options are not required, but may be used to modify the behavior
of the widget:

    * ``[parent]`` - If the parent object is known when instantiating this
      upload widget, pass the object here.
    * ``[parentType=folder]`` - If the parent type is known when instantiating this
      upload widget, pass the object here. Otherwise set ``noParent: true`` and
      set it later, prior to starting the upload.
    * ``[noParent=false]`` - If the parent object being uploaded into is not known
      at the time of widget instantiation, pass ``noParent: true``. Callers must
      ensure that the parent is set by the time ``uploadNextFile()`` actually gets called.
    * ``[title="Upload files"]`` - Title for the widget. This is highly recommended
      when rendering as a modal dialog. To disable rendering of the title, simply
      pass a falsy object.
    * ``[modal=true]`` - This widget normally renders as a modal dialog. Pass
      ``modal: false`` to disable the modal behavior and simply render underneath a
      parent element.
    * ``[overrideStart=false]`` - Some callers will want to hook into the pressing
      of the start upload button and add their own logic prior to actually sending
      the files. To do so, set ``overrideStart: true`` and bind to the ``g:uploadStarted``
      event of this widget. The caller is then responsible for calling ``uploadNextFile()``
      on the widget when they have completed their actions and are ready to actually
      send the files.

For general documentation on embedding Girder widgets in a custom application,
see the section on :ref:`client development <client_development_js>`.

Server cookbook
---------------

The following examples refer to tasks that are executed by the Girder application
server.

Creating a REST route
^^^^^^^^^^^^^^^^^^^^^

The process of creating new REST resources and routes is documented
:ref:`here <extending-the-api>`.

The API docs of the ``route`` method can be found
`here <api-docs.html#girder.api.rest.Resource.route>`__.

Loading a resource by its ID
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This is a fundamental element of many REST operations; they receive a parameter
representing a resource's unique ID, and want to load the corresponding resource
from that ID. This behavior is known as model loading. As a brief example, if
we had the ID of a folder within our REST route handler, and wanted to load its
corresponding document from the database, it would look like:

.. code-block:: python

    self.model('folder').load(theFolderId, user=self.getCurrentUser(), level=AccessType.READ)

The `load <api-docs.html#girder.models.model_base.AccessControlledModel.load>`__
method of each model class takes the resource's unique ID as its
first argument (this is the ``_id`` field in the documents). For access controlled
models like the above example, it also requires the developer to specify
which user is requesting the loading of the resource, and what access level is required
on the resource. If the ID passed in does not correspond to a record in the database,
``None`` is returned.

Sometimes models need to be loaded outside the context of being
requested by a specific user, and in those cases the ``force`` flag should be used:

.. code-block:: python

    self.model('folder').load(theFolderId, force=True)

If you need to load a model that is in a plugin rather than a core model, pass
the plugin name as the second argument to the ``model`` method:

.. code-block:: python

    self.model('cat', 'cats').load(...)

The `ModelImporter <api-docs.html#girder.utility.model_importer.ModelImporter>`__ class
conveniently exposes a method for retrieving instances of models that are statically
cached for efficient reuse. You can mix this class into any of your classes to
enable ``self.model`` semantics. The ``ModelImporter.model`` method is
static, so you can also just do the following anywhere:

.. code-block:: python

    ModelImporter.model('folder')...

Send a raw or streaming HTTP response body
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

For consistency, the default behavior of a REST endpoint in Girder is to take
the return value of the route handler and encode it in the format specified
by the client in the ``Accepts`` header, usually ``application/json``. However,
in some cases you may want to force your endpoint to send a raw response body
back to the client.

If you want to send a raw response, you can simply decorate your route handler
with the ``girder.api.rest.rawResponse`` decorator, or call
``girder.api.rest.setRawResponse()`` within the body of the route handler.
For example:

.. code-block:: python

    from girder.api import access, rest

    @access.public
    @rest.rawResponse
    def rawExample(self, params):
        return 'raw string'

That will make the response body precisely the string ``raw string``. If the data
size being sent to the client is large or unbounded, you should use a streaming
response.

If you want to send a streaming response, simply make your route handler return a
generator function. A streaming response is automatically sent as a raw response.
Developers have full control of the buffer size of the streamed response
body; each time you ``yield`` data in your generator function, the
buffer will be flushed to the client. As a minimal example, the following
route handler would flush 10 chunks to the client, and the full response
body would be ``0123456789``.

.. code-block:: python

    from girder.api import access

    @access.public
    def streamingExample(self, params):
        def gen():
            for i in range(10):
                yield str(i)
        return gen

Serving a static file
^^^^^^^^^^^^^^^^^^^^^

If you are building a plugin that needs to serve up a static file from a path
on disk, you can make use of the ``staticFile`` utility, as in the following
example:

.. code-block:: python

    import os
    from girder.utility.server import staticFile

    def load(info):
        path = os.path.join(PLUGIN_ROOT_DIR, 'static', 'index.html')
        info['serverRoot'].static_route = staticFile(path)

The ``staticFile`` utility should be assigned to the route corresponding to
where the static file should be served from.

.. note:: If a relative path is passed to ``staticFile``, it will be interpreted
  relative to the current working directory, which may vary. If your static
  file resides within your plugin, it is recommended to use the special
  ``PLUGIN_ROOT_DIR`` property of your server module, or the equivalent
  ``info['pluginRootDir']`` value passed to the ``load`` method.

Sending Emails
^^^^^^^^^^^^^^

Girder has a utility module that make it easy to send emails from the server. For
the sake of maintainability and reusability of the email content itself, emails are stored
as `Mako templates <http://www.makotemplates.org/>`_ in the
**girder/mail_templates** directory. By convention, email templates should
include ``_header.mako`` above and ``_footer.mako`` below the content. If you wish
to send an email from some point within the application, you can use the
utility functions within ``girder.utility.mail_utils``, as in the example
below: ::

    from girder.utility import mail_utils

    ...

    def my_email_sending_code():
        html = mail_utils.renderTemplate('myContentTemplate.mako', {
            'param1': 'foo',
            'param2': 'bar'
        })
        mail_utils.sendEmail(to=email, subject='My mail from Girder', text=html)

If you wish to send email from within a plugin, simply create a
**server/mail_templates** directory within your plugin, and it will be
automatically added to the mail template search path when your plugin is loaded.
To avoid name collisions, convention dictates that mail templates within your
plugin should be prefixed by your plugin name, e.g.,
``my_plugin.my_template.mako``.

If you want to send email to all of the site administrators, there is a
convenience keyword argument for that. Rather than setting the ``to`` field,
pass ``toAdmins=True``.

.. code-block:: python

    mail_utils.sendEmail(toAdmins=True, subject='...', text='...')

.. note:: All emails are sent as rich text (``text/html`` MIME type).

Logging a Message
^^^^^^^^^^^^^^^^^

Girder application servers maintain an error log and an information log and expose
a utility module for sending events to them. Any 500 error that occurs during
execution of a request will automatically be logged in the error log with a
full stack trace. Also, any 403 error (meaning a user who is logged in but
requests access to a resource that they don't have permission to access) will also be logged
automatically. All log messages automatically include a timestamp, so there
is no need to add your own.

If you want to log your own custom error or info messages outside of those default
behaviors, use the following examples:

.. code-block:: python

    from girder import logger

    try:
        ...
    except Exception:
        # Will log the most recent exception, including a traceback, request URL,
        # and remote IP address. Should only be called from within an exception handler.
        logger.exception('A descriptive message')

    # Will log a message to the info log.
    logger.info('Test')

Adding Automated Tests
^^^^^^^^^^^^^^^^^^^^^^

The server side Python tests are run using
`unittest <https://docs.python.org/2/library/unittest.html>`_. All of the actual
test cases are stored under `tests/cases`.

**Adding to an Existing Test Case**

If you want to add tests to an existing test case, just create a new function
in the relevant TestCase class. The function name must start with **test**. If
the existing test case has **setUp** or **tearDown** methods, be advised that
those methods will be run before and after *each* of the test methods in the
class.

**Creating a New Test Case**

To create an entirely new test case, create a new file in **cases** that ends
with **_test.py**. To start off, put the following code in the module (with
appropriate class name of course):

.. code-block:: python

    from .. import base

    def setUpModule():
        base.startServer()

    def tearDownModule():
        base.stopServer()

    class MyTestCase(base.TestCase):

.. note:: If your test case does not need to communicate with the server, you
   do not need to call **base.startServer()** and **base.stopServer()** in the
   **setUpModule()** and **tearDownModule()** functions. Those functions are called
   once per module rather than once per test method.

Then, in the **MyTestCase** class, just add functions that start with **test**,
and they will automatically be run by unittest.

Finally, you'll need to register your test in the `CMakeLists.txt` file in the
`tests` directory. Just add a line like the ones already there at the bottom.
For example, if the test file you created was called `thing_test.py`, you would
add:

.. code-block:: cmake

    add_python_test(thing)

Re-run CMake in the build directory, and then run CTest, and your test will be
run.

.. note:: By default, **add_python_test** allows the test to be run in parallel
   with other tests, which is normally fine since each python test has its own
   assetstore space and its own mongo database, and the server is typically
   mocked rather than actually binding to its port. However, some tests (such
   as those that actually start the cherrypy server) should not be run concurrently
   with other tests that use the same resource. If you have such a test, use the
   ``RESOURCE_LOCKS`` argument to **add_python_test**. If your test requires the
   cherrypy server to bind to its port, declare that it locks the ``cherrypy``
   resource. If it also makes use of the database, declare that it locks the
   ``mongo`` resource. For example: ::

       add_python_test(my_test RESOURCE_LOCKS cherrypy mongo)

.. _use_external_data:

Downloading external data files for test cases
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

In some cases, it is necessary to perform a test on a file that is too big store
inside a repository.  For tests such as these, Girder provides a way to link to
test files served at `https://midas3.kitware.com`_ and have them automatically
downloaded and cached during the build stage.  To add a new external file, first
make an account at `https://midas3.kitware.com`_ and upload a publicly accessible
file.  When viewing the items containing those files on Midas, there will be a
link to "Download key file" appearing as a key icon.  This file contains
the MD5 hash of the file contents and can be committed inside the
``tests/data/`` directory of Girder's repository.  This file can then be
listed as an optional ``EXTERNAL_DATA`` argument to the ``add_python_test``
function to have the file downloaded as an extra build step.  As an example,
consider the file currently used for testing called ``tests/data/test_file.txt.md5``.
To use this file in you test, you would add the test as follows

.. code-block:: cmake

    add_python_test(my_test EXTERNAL_DATA test_file.txt)

The ``EXTERNAL_DATA`` keyword argument can take a list of files or even directories.
When a directory is provided, it will download all files that exist in the given path.
Inside your unit test, you can access these files under the path given
by the environment variable ``GIRDER_TEST_DATA_PREFIX`` as follows

.. code-block:: python

    import os
    test_file = os.path.join(
        os.environ['GIRDER_TEST_DATA_PREFIX'],
        'test_file.txt'
    )
    with open(test_file, 'r') as f:
        content = f.read() # The content of the downloaded test file

Serving a custom app from the server root
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Normally, the root node (``/``) of the server will serve up the Girder web client.
Some plugins will wish to change this so that their own custom app gets served out of
the server root instead, and they may also want to move the Girder web client to
be served out of an alternative route so they can still use it in addition to
their custom front-end application.

To achieve this, you simply have to swap the existing server root with your own
and rebind the old app underneath. In your plugin's ``load`` method, you would
add something like the following:

.. code-block:: python

    info['serverRoot'], info['serverRoot'].girder = CustomAppRoot(), info['serverRoot']

This will make it so that ``/`` serves your ``CustomAppRoot``, and ``/girder`` will
serve the normal Girder web client. That also has the side effect of moving the
web API (normally ``/api``) as well; it would now be moved to ``/girder/api``, which
would require a change to the ``server.api_root`` value in ``girder.local.cfg``.

If you would rather your web API remained at ``/api`` instead of moving under
``/girder/api``, you would simply have to move it underneath the new server root. To
do that, just add the following line below the previous line:

.. code-block:: python

    info['serverRoot'].api = info['serverRoot'].girder.api

This will now serve the api out of *both* ``/api`` and ``/girder/api``, which
may be desirable. If you only want it to be served out of ``/api`` and not
``/girder/api``, just add a final line below that:

.. code-block:: python

    del info['serverRoot'].girder.api

Supporting web browser operations where custom headers cannot be set
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Some aspects of the web browser make it infeasible to pass the usual
``Girder-Token`` authentication header when making a request. For example,
if using an ``EventSource`` object for SSE, or when you must redirect the user's
browser to a download endpoint that serves its content as an attachment.

In such cases, you may allow specific REST API routes to authenticate using the
Cookie. To avoid vulnerabilities to Cross-Site Request Forgery attacks, you
should only do this if the endpoint is "read-only" (that is, the endpoint does
not make modifications to data on the server). Accordingly, only routes for
``HEAD`` and ``GET`` requests allow cookie authentication to be enabled (without
an additional override).

In order to allow cookie authentication for your route, simply add the
``cookie`` decorator to your route handler function. Example:

.. code-block:: python

    from girder.api import access

    @access.cookie
    @access.public
    def download(self, params):
        ...

As a last resort, if your endpoint is not read-only and you are unable to pass
the ``Girder-Token`` header to it, you can pass a ``token`` query parameter
containing the token , but in practice this will probably never be the case.


The best response you can give a critic is success. People will always trough stones in your path.. It depends on you, what you make of those. A wall of difficulties or a bridge of success ! Yet in all these things we are more than conquerors through Him who loved us Rom8:37.