text:
Tag: Rare Diseases
Research Australia welcomes additional rare cancers and rare diseases research
Posted on January 24, 2018 August 27, 2019 Author Peta GarrettCategories NewsTags Australian Health and Medical Research, HMR, HMR funding, medical research future fund, MRFF, MRFF Funding, Rare cancers, Rare Diseases
The Government has today announced an $69 million boost in funding for research in to rare cancers and rare diseases, including $26 million allocated to 19 projects as a part of the Medical Research Future Fund's "Rare Cancers, Rare Diseases and Unmet Needs Clinical Trials Program". This program has been expanded from $13 million when announced last year to $26 million in recognition of the quality of the applications received.
A $10 million targeted call for research into rare diseases and cancers is expected soon, and an additional $33 million will be made available in the next financial year to further expand research in this area.
Research Australia welcomes the additional funding, and recognises the importance of funding for these areas which impact many Australian families.
Last year Research Australia made a submission to the Senate Select Committee Inquiry into Funding for Research into Cancers with Low Survival Rates, which you can read in full here.
You can keep a track of all of the Medical Research Future Fund funding announcements here, or click here to read the Minister for Health's full statement on today's funding boost.
Funding boost from MRFF for clinical trials
Posted on May 19, 2017 June 5, 2017 Author Peta GarrettCategories Media, NewsTags Australian Clinical Trials Alliance, Clinical Trials, Government Funding, MRFF, Rare Diseases
Australian clinical trials received a much-needed boost today with details of the Medical Research Future Fund's disbursements announced.
The Minister for Health, Greg Hunt announced the detail around the allocation of the funding into clinical trials in Australia that was handed down at the Budget last Tuesday as part of the Medical Research Future Fund (MRFF).
As the Health and Medical Research industry body, we were pleased to hear the importance the Australian Government has placed on clinical trials, collaboration, and translation of research and mid-career medical researchers.
"Clinical trials are a crucial part of changing and saving lives," said Research Australia CEO, Nadia Levin. "This commitment goes a long way in making a difference to Australians whose lives depend on the outcomes of the best research we can offer".
The announcement was made at the Royal Prince Alfred Hospital in Sydney at an event to celebrate International Clinical Trials Day.
Continue reading "Funding boost from MRFF for clinical trials"


WASHINGTON, D.C. — Georgetown University students on Thursday voted to approve a new student fee to create a fund for the descendants of slaves sold by the university in the 1830s.
The vote's results were announced after a contentious day on campus with proponents of the measure hosting a rally on campus, chanting "when they don't act — we fight back," and encouraging students to get out the yes vote.
Some opponents of the measure, meanwhile, told The College Fix their fliers explaining arguments against the referendum were torn and discarded and that they felt scared to voice their opinions.
Of the 3,845 students who voted in the spring election, 2,541 students — or 66.08 percent — voted to approve the measure, according to the official announcement of the results presented by the Georgetown University Student Association Election Commission late Thursday night.
The turnout is considered among the highest ever for the private, Catholic institution.
The proposal, put forth by Georgetown University Student Association senators in coordination with the GU272 Movement, is one step closer to becoming the first slavery reparations policy in America. It calls for the establishment of a fund for the ancestors of the 272 men, women and children sold by Georgetown in 1838.
The student resolution will now be considered by the Board of Directors, which will likely have the ultimate authority on whether the fee will be officially implemented.
During the afternoon as the voting took place, roughly 40 students rallied to support and defend the measure.
"I think it's an excellent example of student activism and student action," student Kakazi Kacyira told The College Fix on why she supported the referendum.
Opponents criticized the lack of oversight and clarity of the funds' use, burden on low-income students, and the compulsory nature of the policy.
GUSA Senator Sam Dubke, who led the "Vote No" movement from the chamber, reacted to the results by telling The College Fix he was unsurprised but disappointed in the tactics of the other side.
A "Yes" vote on the referendum would recommend to the Georgetown Board of Directors a GU272 Reconciliation Contribution and Board of Trustees.
A "No" vote on the referendum would not recommend to the Georgetown Board of Directors a GU272 Reconciliation Contribution and Board of Trustees.
The proposal advocates that beginning in Fall 2020, undergraduate students would contribute $27.20 to honor and memorialize the GU272. The funds raised by the GU272 Reconciliation Contribution will be allocated for charitable purposes that benefit the descendants of the GU272 and others once held in slavery by the Maryland Jesuits. Similar to the student activities fee, the referendum recommends that the contribution should be adjusted annually for inflation. It further recommends special consideration for causes and proposals that directly benefit descendants still residing in underprivileged communities. To facilitate these charitable projects, the referendum recommends the creation of a GU272 Reconciliation Board of Trustees, which would consist of five GU undergraduate representatives and five representatives of the descendents of the GU272.
Over the past few years, Georgetown has worked to reckon with its legacy of slavery. It officially apologized for the sale in April 2017. Campus officials also renamed two buildings named after the Jesuits involved in the sale of the slaves, and created an African American Studies Department. The university also agreed to "offer an admissions edge to descendants of slaves as part of a comprehensive atonement" for the school's past actions.
Dalton Nunamaker is a government major at Georgetown University. Originally from mid-Missouri he worked on Senator Josh Hawley's (R-MO) campaign and is on the board of the Georgetown College Republicans. He is a cadet in the Georgetown Army ROTC Hoya Battalion and a member of Georgetown Right-to-Life and Campus Outreach ministry. He is interested in political theory, public policy, and the constitution and is active in the Georgetown Institute of Politics and Public Service.


This documentary series follows the pilots of the Yellowknife-based Buffalo Airways, which still flies Second World War airplanes to transport people around Northern Canada.
Joe and Mikey hire a helicopter for a salvage mission to retrieve the rare tailpiece from a Lockheed 10A that crashed in the Yellowknife woods forty years ago. It's a personal quest for Joe; he flew that plane at the beginning of his career. Justin and Cory battle severe icing that threatens to send them plummeting into the frigid North Atlantic on the longest ocean leg of their CL-215 water bomber journey to Turkey.
Buffalo Airways is still reeling from the recent accident – especially mechanic Chuck. Mikey tries to lift spirits by setting up a hockey shootout against a squad of NHL players that the airline is transporting around the north. He drafts a team and Buffalo's best players – including Chuck – test their shots against Ottawa goalie Craig Anderson. Young DC-3 co-pilot David flies farther north than he's ever been, facing a mysterious landing gear problem on approach to a remote Arctic airstrip. When his captain gets flustered, the rookie has to keep his cool.
Joe preps for a race in an antique snowplane – a 1940s ancestor of the snowmobile, powered by an airplane engine and devoid of brakes. No one knows what will happen when he unleashes it on frozen Great Slave Lake. The water bomber crew, led by Justin and Cory, try to move their two fire-fighting planes from Turkey to a maintenance facility in Wales, but get tangled up in red tape, threatening to ruin their chance of meeting up with Iron Maiden front man Bruce Dickinson. Rampie and cocky aspiring pilot Chris Staples pushes his way onto a C-46 flight, where he makes a critical mistake. AJ makes a last-second overshoot.
After a breakdown uses up the last of Joe's spare DC-3 engines, he enlists former Buffalo pilot Devan Brooks to ferry another plane all the way from Quebec. Flying 3,000 kilometres in a DC-3 that's been mothballed for 7 years, Devan faces a critical hydraulic leak at the worst possible moment. As a massive cold snap paralyzes the hangar, a major landing gear problem strikes the nightly passenger flight to Hay River. Captain Justin Simle has to make a snap decision with a full load of passengers on board – including his own newborn son.
Following almost a year of repairs after its crash landing, Buffalo Airways' Electra returns home to take on an urgent mission – returning to the very ice strip that set off the problems last year. It's the ultimate test for the plane and the crew. DC-4 co-pilot Tyler makes a major decision about his future, but now he has to face Joe. A pilot shows up out of the blue – all the way from Australia. Will Dyer has ten times the experience of a normal novice and quickly works to win a seat in a Buffalo cockpit. But the company throws him a curveball that puts his future in doubt.
It's Joe's 69th birthday and he's never flown a helicopter before. So Mikey plans a special gift of chopper flight lessons, complete with surprise pickup in front of the Buffalo hangar. Mikey jumps in for the ride as Joe struggles with the unfamiliar beast – and both McBryans will learn if they've finally found an aircraft that Joe can't master. Another cold snap has cut off heat and power in a small northern town. AJ and James battle a frozen engine before they can head up with a load of supplies. On the way home, an engine fire forces the crew into an emergency shutdown.
The Electra has become Buffalo's winter workhorse – the one plane they need to keep flying. During a High Arctic delivery mission, a 5,000-pound power unit tips off the forklift and crashes to the ground, smashing the fuselage – and sending Mikey into crisis management mode. With no backup Electras, Joe races to Atlantic Airways in Coventry, England on an urgent mission to scoop one up from other potential buyers while back at Buffalo, Mikey tries to prove he's really management material.
Co-pilot Graeme Ferguson gets the biggest opportunity of his short career when Buffalo needs to train a second Electra crew. But none of Buffalo's piston-pounders have prepared him for a plane this big and this fast. When Graeme fumbles a landing, he has to prove he's ready for his big chance after all. Meanwhile, Chris Staples gets to take the test he's been dreaming about – to qualify as a co-pilot in the C-46. But he'll have to take it with one of the toughest captains on the crew. When the C-46 breaks down in Deline, Adam Smith rushes to the rescue and Chris might finally get his chance to shine.
The Electra is still working around the clock and Buffalo is ready to pick up another, the second of its new British acquisitions. Joe and Mikey head across the Atlantic to fly home their new baby, ending an era of British aviation. Devan preps for fire season with some wild target practice in the DC-4 to see if his aim lives up to his cockiness. When James' son enters the local soapbox derby, James builds a Buffalo-style racer and finds out how his ugly green machine stacks up against the slick and pretty competition.
Mikey and Joe visit the Hamilton air show where Mikey has planned a major surprise for Father's Day. Joe is going to ride along in a CT-114 Tutor Jet with the famous Snowbirds. While Joe prepares for the big event, Mikey decides to conquer his fear of heights. He travels down the highway to Toronto and tries out the CN Tower "Edgewalk." But he's determined to go even higher. After all the bonding he and Joe have done in Hamilton, Mikey takes his first pilot lesson with Joe as the teacher. It turns out there are some heights Mikey still fears. As spring warms up Yellowknife, a longtime member of the Buffalo family announces a surprise departure.
It's been a wild five years for ICE PILOTS NWT. To celebrate the milestone, we pull back the curtain for an inside glimpse into the production of the TV show, and allow the cast of Buffalo characters to reflect on how it's affected their lives, for better or for worse. And we meet the cameramen who navigate prickly personalities and brave minus-forty conditions to capture the footage that has made ICE PILOTS NWT a cult phenomenon.


text:
No accountability: The curious case of Tessie Guillermo
What, exactly, does it take to lose a plum seat on the board of a national nonprofit? A lot, it seems, at least in the case of Tessie Guillermo, the former chief executive of ZeroDivide, a $50m foundation based in San Francisco that collapsed abruptly in 2016, leaving troubling questions in its wake. Missing money? A …
Categories: Foundations, Philanthropy•Tags: CommonSpirit, Marguerite Casey Foundation, Tessie Guillermo, ZeroDivide Foundation•
Reporting on philanthropy in an age of identity politics
Last June, The Chronicle of Philanthropy published my story about Luz Vega-Marquis, who has led the Marguerite Casey Foundation since 2001 . The headline was nuanced: Praised for Pathbreaking Grants, Marguerite Casey CEO Said to Foster a Culture of Fear by Staff Members. So, in my view, was the story. Vega-Marquis rightly has been acclaimed for her "longstanding commitment …
Categories: Foundations, Philanthropy, Women, Workplace culture•Tags: Emmett Carson, Luz Vega-Marquis, Marguerite Casey Foundation, Silicon Valley Community Foundation, Tessie Guillermo, ZeroDivide Foundation•
Let them eat mission: The troubles at the Marguerite Casey Foundation
There's a lot to like about the Marguerite Casey Foundation, a Seattle-based private foundation with about $800m in assets that, since its inception nearly 20 years ago, has been led by a advocate for social change named Luz Vega-Marquis. Leaders of social-justice organizations lavish praise on Vega-Marquis for providing multi-year and unrestricted support to grass-roots organizations that …
Categories: Foundations, Philanthropy, Workplace culture•Tags: Edgar Villanueva, Ludovic Blain, Marguerite Casey Foundation•
Philanthropy, psychedelics and effective altruism
Psychedelic drugs are having a moment in the sun. They have great potential, we're learning, as a treatment for a variety of mental illnesses, including post-traumatic stress disorder and depression. They are also attracting interest as a gateway to meaningful experiences that, advocates say, should be available to all. Philanthropists are taking note. More donors — though …
Categories: Effective Altruism, Foundations, Nonprofits, Philanthropy•Tags: Alan Badiner, Atman Retreat, Brain & Behavior Research Foundation, Cari Tuna, Dustin Moskovitz, MAPS, Rick Doblin, Threshold Foundation, Tim Ferriss•
Accountability? Not at the Humane Society of the US
So much for Wayne Pacelle's denials. Early in 2018, when women at the Humane Society of the U.S. alleged that Pacelle, the organization's charismatic leader, had sexually harassed them, he maintained his innocence before resigning under pressure. "This is a coordinated attempt to attack me and the organization," Pacelle said. "And I absolutely deny any suggestion that I …
Categories: Animal welfare, Foundations, Nonprofits, Women•Tags: Humane Society of the United States, Kate Kimpel, Kitty Block, Susan Atherton, Tom Sabatino, Wayne Pacelle•

redpajama_set_name: RedPajamaCommonCrawl


Tron: Legacy is a 2010 American science fiction action film directed by Joseph Kosinski from a screenplay written by Adam Horowitz and Edward Kitsis. It is a sequel to the 1982 film Tron, whose director Steven Lisberger returned to produce. The cast includes Jeff Bridges and Bruce Boxleitner reprising their roles as Kevin Flynn and Alan Bradley, respectively, as well as Garrett Hedlund, Olivia Wilde, Beau Garrett, and Michael Sheen. The story follows Flynn's son Sam, who responds to a message from his long-lost father and is transported into a virtual reality called the Grid, where Sam, his father, and the algorithm Quorra must stop the malevolent program Clu from invading the real world.
Interest in creating a sequel to Tron arose after the film garnered a cult following. Most sequences were shot in 3D and ten companies were involved with the extensive visual effects work. Chroma keying and other techniques were used to allow more freedom in creating effects. Daft Punk composed the musical score, incorporating orchestral sounds with their trademark electronic music.
Upon its release, the film received mixed reviews from film critics, who praised the visual effects, production design, and soundtrack, but criticized the character development, cast performance, and story.
The story follows Flynn's son Sam, who responds to a message from his long-lost father and is transported into a virtual reality called the Grid, where Sam, his father, and the algorithm Quorra must stop the malevolent program Clu from invading the real world.


Writing paper for first grade with picture essay about college lofe.
Us constitution essay ideas outsource business plan writing literature review political science timber frame construction dissertation homework oh homework poem worksheet common core essay outline 5th grade hemingway essay on hills like white elephants homework teaches life skills scientific ways of solving problems no homework for kindergarteners how to write personal essay apa assignment film music good essay questions for scholarships social problem solving inventory manual, how to use google scholar for research papers how to structure a business plan presentation sociological research paper examples example. Hemingway essay on hills like white elephants term paper bangla dnp capstone project ideas writing a business plan template free social class essay on the great gatsby essay watson glaser critical thinking test pdf creative writing prompts for elementary students 2017 homework 3rd grade pdf comparison and contrast essay examples block method i need help on my math homework for free students retail business plans samples capital assignments. Primary writing paper with picture box printable literacy homework year 4 25 examples of marketing plans for a small business account tips on how to write a good research proposal solving word problems using systems of linear equations algebra 12, essay on homework is waste of time finish your homework in spanish essay on underground railroad research papers on the scarlet letter.
Business plan on food restaurant physical therapy essay examples sapling learning online homework system problem solving software tools critical thinking process in nursing quizlet step by step research paper writing steps to writing a research paper for college student no business plan survives first contact international business plan deca plan essays on the great depression pdf college scholarship essay advice monthly homework calendar for fourth grade. Ideas for college essay topic how to write a reference paper for resume phd research proposal examples social sciences pdf.
Qualitative research proposal case study teaching essay writing in history pay to have homework done for you, compare and contrast essay topics for kids essay on drug abuse among teenagers website that solves algebra problems for you things to write a persuasive essay about business good essay titles for letters to future child. Successful college essay topics, essays on education system retirement plan options for small businesses kentucky assigned claims plan application no business plan survives first contact solving word problems using systems of linear equations algebra 10 homework teaches life skills problem solving algebra worksheets.
Commercial lease assignment research paper on tuberculosis, learn essay writing online social work courses in australia addition homework for 2nd graders childcare business plan template tolerance essay contest critical analysis assignment examples math problem solving websites for kids example of essay writing about my school pencil writing on paper sound effect youtube topic on research papers money essay dissertation citation in apa good essay titles for letters to future child transitions essays english research proposal ideas for business spa business plan free event planning business plan sample free how to write a research proposal in urdu gender pay gap essay examples.
Business plan workbook essay about honesty for grade 5 research paper topic outline business plan workbook gender pay gap essay examples how to prepare business plan using excel essay on drug addiction in punjabi language good things about having homework. Literature review summary tables samples essay on drug addiction in punjabi language federally assigned employer identify, schools for creative writing majors mobile app business plan template business plan on food restaurantBrainfuse live homework help santa clara example of problem statement in research proposal pdf sample of an executive summary of a business plan template study abroad essay answers marketing analysis for a business plan donald trump business pic research paper guidelines for college tuition homework oh homework poem worksheet business continuity plan template sample pdf cheap dissertation writing services reviews kentucky assigned claims plan application solving a word problem with quadratic equation. List of fallacies critical thinking top creative writing editing website for phd.
How to write a reaction paper to a book.
Definition essay on nature beauty do my accounting homework strict essay word count college 100 day business plan template pdf business plan for gym sem pdf in cold blood essay prompts math homework help for 6th graders business floor plan designer free sample of descriptive essay about a place steps in preparing a business plan sample strong argumentative essays othello essays iago social class essay on the great gatsby essay how to solve arithmetic sequence problems worksheet biodiversity essay writing template literature review on talent management pdf static assignment copy of a business plan pdf, connect accounting homework answers chapter 7 skin care business plan sample how to write abstract for paper presentation examples what is contingency planning in business crossword company research papers vs academic research paper examples of good thesis statements for a research paper template. Problem solving computer program proper research paper format apa af assignment availability code 31 how to write ca final law paper sports performance business plan template college essay format template sample of research proposal for masters degree discussion in a research paper example. Template for business plans for a pub. Firewood business plan ideas things to write a narrative essay about, should parents help with homework debate writing paper kindergarten with picture study music essay writing university of chicago creative writing program buy a term paper example of a scholarship essay comparing and contrast essay examples of introduction how to draw up a business plan for a restaurant business essay collections online preschool business plan sample how to solve projectile problems in physics fund management business plan design business plan headings should parents help with homework debate essay on homework is waste of time essay on war on terror publishing research papers who am i essay introduction samples rhetorical analysis essay the basics steps in organizing a research paper interview essay example romeo and juliet thematic essay fate informative essay structure examples show my homework student login solve ratio problems using algebra genetics problem solving crosses involving two traits answers.
Analytical essay template steps for a proposal for a research paper defense of a dissertation literature review healthcare topics write and essay win a house, dissertation topics on nutrition static single assignment form soccer club business plan template dental school essays examples.
How to access critical thinking in interviews genetics problem solving crosses involving two traits answers solving a word problem with quadratic equation handwriting paper cursive philosophy of teaching essays different types of essay planning business messages in hindi solved problems boolean fourier transform.
Essays on education system term paper bangla easy essay writing tips planning business messages in hindi.


(AP/Yankton.net) -- The AP reports, "The economy will likely continue growing at a healthy pace over the next few months in nine Midwest and Plains states," including Nebraska. That's according to a monthly survey of business leaders released Monday. The news agency notes that "the overall economic index for the region increased to 62.3 in June from May's solid 55.5. Any score above 50 suggests growth." Business leaders are feeling optimistic, as "the confidence index jumped to 67.5 in June from May's 61.4."


text:
Geoweb
Leaside, City of Toronto (1930s–50s)
Planned in 1912 according to garden suburb principles by landscape architect Frederick Todd, a protege of Frederick Law Olmsted and designer of the Town of Mount Royal in Montreal, Leaside became the first town in Ontario to be comprehensively planned before construction. Although the Town of Leaside (later annexed by the Borough of East York in 1967) was incorporated in 1913, much residential construction did not proceed for almost a quarter-century, held back by the Depression and the Second World War.
Most of Leaside's residential development took place after the Leaside Viaduct was built across the Don Valley in 1927. The residential area was planned in concert with heavy industry, most of which has now been replaced by large-format retail. The study area boundaries exclude the industrial lands to the east and Mount Pleasant Cemetery to the south, but take in a residential area west of Bayview to Mount Pleasant. This area, historically part of the City of Toronto, was built out contemporaneously with Leaside.
Leaside is of moderate density, reflecting the fact that half of its dwelling stock is single-detached. Due to its integration with high-frequency transit service, transit accounts for about a quarter of all journeys to work and school.
‹ Riverdale, City of Toronto (19th century) up Old Oshawa (19th century–1970) ›
Shaping the Toronto Region
Analysis of existing urban areas
Exploring development scenarios
Analysis of existing urban areas: district profiles (Appendix A)
Riverdale, City of Toronto (19th century)
Old Oshawa (19th century–1970)
Oshawa West (19th century–1970)
Whitby (pre-1960)
Brontë, Town of Oakville (1946–80)
The Peanut, City of Toronto (1960–80)
Milton (1970–90)
Meadowvale, City of Mississauga (1970–90)
Malvern, City of Toronto (1970–90)
Mississauga Valleys, City of Mississauga (1960–90)
Glen Abbey, Town of Oakville (1980s)
Markham Northeast (1980s)
Cachet, City of Markham (1990s)
Richmond Hill (1996–2001)
Vaughan (1996–2001)
Analysis of existing urban areas: methodology and data (Appendix B)
The development scenario model (Appendix C)
Take it With You
The Neptis Foundation
39A Madison Ave, Toronto, ON
M5R 2S2 Canada
publications [at] neptis [dot] org
Products and Program
Neptis Geoweb
Follow Neptis
The Analysis of Urban Regions
The Neptis Foundation conducts and publishes nonpartisan research on the past, present and future of urban regions.
© Neptis Foundation 2021


text:
Bill Maher: Typical White Male Liberal
On Friday's episode of Real Time, Bill Maher provided a clinic on some of the worst white male verbal behaviors, and in how not to take full responsibility. In two segments, he illustrated deflection, microaggression, defensiveness, gaslighting, and tone-deafness. This was in the form of an apology.
On the previous episode, Maher referred to himself as a "house n****r" in a conversation with Nebraska Senator Ben Sasse. At the time, Maher apologists pointed out that Sasse had used an awkward phrase ("work in the fields"), a defense Maher used himself in this Friday's post-mortem.
He begins the show with "Thank you for letting a sinner in your midst. Michael Eric Dyson will be out here shortly to take me to the woodshed." This introduction was filled awkward laughter.
I realize Maher is a comedian. In case I forgot it, he reminded his guests repeatedly of this. But his introduction here sets the tone for his approach to the issue: He doesn't really understand why what he said was so terrible, on several levels. He's sorry that he hurt people, but he doesn't really understand why what he said was so deeply offensive.
His first guest was Professor Michael Eric Dyson, a sociologist from Georgetown University. Bill Maher, an atheist who proclaims his disdain for religion, has set up a confessional with an ordained minister. He is not going to apologize directly to the people; he is, instead, going to lay out his self-labeled sin to Dyson for contrition.
I have no doubt he set up this tableau unconsciously. That's the point. It speaks to the depth of cultural programming: He was raised Roman Catholic, and this is what he has been trained to do.
The heart of the very issue is cultural programming: As Dyson says, correctly I believe, Maher was not being actively racist when he referred to himself as a house n****r. When Dyson and other black voices speak of the insidiousness of white privilege, that includes this deep-level programming that is so ingrained that we hear the phrase "work in the fields" and our brains immediately think of slavery.
Confessions are a fabric of Maher's reality, even if he's rejected Catholicism. Racism is a fabric of our reality, even if we've actively rejected it. It is, as Norman Rockwell put it, "The Problem We All Live With."
Giggling like a wayward child, Maher starts his interview with Dyson by admitting "I did a bad thing." While Dyson lauds Maher as starting from a good place, Maher's body language suggests that he's not taking this very seriously.
I think it would be fair and generous to point out that men in our society struggle with apologizing properly. We deflect. We use humor. We try to save face. Donald Trump has set the standard of avoiding apologies at all costs. So I understand that Maher isn't used to apologizing, and it shows.
When Maher does apologize around two minutes into the segment, he first excuses Sasse ("It's all on me") then immediately contextualizes ("but he said a weird thing"). More deflection.
Dyson asks if Maher understands that black people will still be skeptical, that Dyson himself is taking
heat for even appearing on the show, and Maher's answer is a mix of whitesplaining and obsequiousness towards Dyson himself. He doesn't get around to answering the core question.
When Dyson asks whether Maher understands the need for all white people to be reflective on their abuse of privilege, Maher insists it "happened once… it's not like I've made a career of this." Throughout his statements, he inserts clichés: "We're all evolving. We all make mistakes."
When Dyson asks whether Maher understands the need for all white people to be reflective on their abuse of privilege, Maher insists it "happened once… it's not like I've made a career of this."
Even when Dyson spends over a minute defending Maher by pointing out that a main concern is that "even Bill Maher" would say something so egregious, showing how deeply ingrained the privilege is, Maher's response is "I'm not here to make excuses, but the word is omnipresent in the culture."
This is directly related to Dyson's point, and Maher's use of "but" suggests that he doesn't even get it. Dyson is trying to defend Maher by giving him an excuse (white privilege is so ingrained that "even" Maher slips up), and Maher is so busy defending himself that he doesn't notice it.
Maher even manages to step on a landmine. In trying to deflect by claiming that this was more of a comedian thing than a race thing, he says that comedians are a "special kind of monkey." He does notice this gaffe and takes immediate responsibility for it, at least.
Dyson concludes the interview with appreciation of Maher's greater efforts in speaking to power. Dyson's recurrent theme is that Maher's gaffe speaks not to his personal racism but to the depth of racist enculturation.
♦◊♦
Later in the show, Maher speaks with Ice Cube, who is promoting the 25th Anniversary of "Death Certificate."
Ice Cube accuses Maher of having a lot of black jokes. When Maher claims his jokes are against racists, Ice Cube says that sometimes Maher sounds like a "redneck trucker" but says it's his opinion. Maher accepts this but inserts that he's never heard that opinion before. This casual invalidation of Ice Cube's perspective is a form of gaslighting.
While Ice Cube talks about his feelings, apparently struggling to hold back tears, Maher squirms uncomfortably and interrupts with, "I think people watching this show right now are saying that point has been made."
"Not by me," replies Ice Cube. This is Maher, trying to make the issue about his comfort level, and Ice Cube responds perfectly.
Symone Sanders is invited into the conversation at this point and adds her opinion eloquently. Maher says nothing at all in response to her, but her comments are perfectly on point.
None of this should be taken as a criticism exclusively of Maher. Both Dyson and Ice Cube conclude their dissections with an insistence that Maher is one of the good guys who made a terrible mistake. As he himself says, Maher is a product of his environment, as are we all.
Sadly, Maher is a typical white male liberal who happens to have a national podium. His squirming, his defensiveness, his plaintive looks of "why is this happening to me over a casual joke?" are not extraordinary to his (and my) kind. I've even been there myself; I just didn't happen to have an HBO camera watching me.
Several times on the broadcast, this was referred to as a teachable moment, so let it be one.
If you nodded along with Maher's squirming, if you agreed when he complained that Ice Cube was taking him to task again, if you're wondering why this is still an issue, I recommend you watch the clips again. This time, though, ignore everything Maher says. Frankly, his opinion doesn't count.
Listen to Dyson. Listen to Ice Cube. Listen to Sanders. Listen with an open mind, so if you're ever in Maher's position, you'll accept responsibility with more seriousness than he does.
Originally published on The Good Men Project.
A Writer
The smallest angle


text:
Milton Zaret: Microwave News Article Archive (2004 - )
Stephen Cleary(1936-2016)
Steve Cleary, whose career in microwave research spanned from the military's Tri-Service program in the late 1950s to the cell phone industry's sham project in the 1990s, died at home on June 7 of a heart attack. He leaves his wife, Fran, four daughters and ten grandchildren. He was 79.
Cleary was a professor of biophysics at Virginia Commonwealth University (VCU) in Richmond from 1964 to 2002. Like many other radiobiologists of his generation, he was trained at the University of Rochester. He later got his PhD at New York University under Merril Eisenbud, a former senior health official at the Atomic Energy Commission. Cleary's doctoral thesis was the first epidemiological study of the impact of microwaves on the eyes. He detected a significant increase in the incidence of defects in the lenses of military personnel who had long-term exposure, a rare published report of an adverse finding.
Milton Zaret, an "Early Prophet" of Microwave Hazards, Dies at 91
Milton Zaret, an ophthalmologist who was one of the first to warn about long-term health hazards of microwave radiation, died on May 29. He was 91.
"Dr. Zaret was an extraordinary pioneer who showed that microwaves have a profound effect on the eye," said Paul Brodeur, who chronicled Zaret's career in The New Yorker more than 35 years ago and in his subsequent 1977 book, The Zapping of America. Brodeur called Zaret an "early prophet" of the biological hazards of microwaves.


text:
Q: Take away bottom border before and after transition I have an on click dropdown menu thats animated on height, however, it has a 2px border and the border always appears when the menu is closed. Basically, it shows a little 2px strip where the menu would come out. I'm working in local, so its a bit hard to send all the code, but it's something like this:
(user__nav is a ul)
.user__nav {
        margin-top: 10px;
        background-color: #fff;
        position: absolute;
        border: 2px solid #2D3E65;
        border-radius: 0 0 12px 12px;
        max-height: 0;
        overflow: hidden;
        transition: max-height 0.7s;

        ul>li {
            padding: 5px 0 5px 20px;
            a {
                color: #2D3E65;
                font-weight: 500;
            }
            &:hover {
                background-color: #2D3E65;
                a {
                    color: #fff;
                }
            }
            &:last-child {
                border-radius: 0 0 9px 9px;
            }
        }
    }
}

when the element is clicked, I apply the following class to it:
.profile-transition {
max-height: 170px !important;
}

I also tried taking out the border from .user__nav {} and putting it in profile-transition but it doesn't seem to work at all:
.profile-transition:before {
border: 2px solid #2D3E65;
}

.profile-transition:after {
border: 2px solid #2D3E65;
}

Anything would help! Thank you!

redpajama_set_name: RedPajamaStackExchange


Is Japan Lilliput? Chair company appealing to 'short-legged and short-bodied' Japanese seems to think so.
National stereotypes, formed in a bygone, pre-globalised world, can be pervasive things. While there are probably some positive stereotypes, reaffirming national identities, many are not so, and recently a gaming chair that advertised itself as being perfect for Japanese gamers and desk workers found out that some people don't take too kindly to them.
Twitter user @nisiedas posted the above tweet, showing that the description given for the Zametan RS-400S explains that it's a "lowdown" chair, designed to cater to the "short-legged and bodied Japanese person" so they can rest their feet comfortably on the floor, stress-free, rather than have them dangle down as they sit at their desk.
The left-hand image below shows a Japanese woman, or skirt-wearing man with exceptionally smooth legs, supposedly suffering in an American-style chair with legs hanging down and undue stress on their back and hips, while the right shows the comfort advantage for the shorter office worker or gamer.
Other Twitter users had plenty to say, with some able to take a wry look at the Lilliputian image of Japanese people, while others were less happy.
The seat is made by office chair specialists, Bauhutte, and although many commenters and some news sites were angry at this tarring of the good name of the Japanese people with the short brush by a 'foreign company', it turns out that the company is actually Japanese, part of Osaka-based B-es; the same company that produces other niche goods like pet homes sized for humans.
While there are plenty of exceptionally tall Japanese men and women, it's true that the average height is still less than most other countries, standing at about 171 centimetres (5 feet, 6 inches) for men and 159 centimetres (5 feet, 3 inches) for women, according to statistical data from The Organisation for Economic Co-operation and Development. There's no need for Japanese men to be getting a Napoleon complex about it though; at least one survey suggests that Japanese women like their men fun-sized.
Whether or not there is actually a need for slightly shorter gaming chairs, the company has at least been getting plenty of publicity, so who knows what other alterations they might be able to make to cater to each countries' stereotype to give them the perfect gaming experience – perhaps a baguette holder for the French, a sombrero hook for Mexicans, or the name tag 'Bruce' sown into every chair that makes its way to Australia? Although speaking personally as a walking, talking stereotype, they won't have my interest until they install a tea urn on it.


text:
Susanna Hoffs: "Raining"
No, seriously . . . 53.
For today's New Music Monday, we've got a dose of temporal juxtaposition: music released in July 2012 by an '80s star, heavily influenced by music of the '60s. It's Susanna Hoffs, adored lead singer of the Bangles, from her newest album, Someday. As it turns out, I saw Susanna play at the Triple Door in Seattle last night, and she sounded fantastic (and, I feel the need to point out, looked fantastic — she's 53 now, if you can believe it, but could easily pass for 35 . . . the woman does not seem to age, and does not at all appear to have succumbed to the lure of plastic surgery). She played a mix of new and old solo songs, Bangles songs, and covers of great '60s and '70s songs ("Different Drum" by Linda Ronstadt and the Stone Poneys, "All I've Got to Do" by the Beatles, and "September Gurls" by Big Star, to name a few), and was in fine voice throughout. Somewhat disappointingly, her entire backing band sat in chairs the whole time, which felt like it turned down the collective energy a notch — maybe as a way to make sure the diminutive Hoffs got the audience's full attention, although I don't really think that would have been a problem anyway — but that's a small quibble, because overall, it was a really good show.
For the new album, Hoffs has turned more strongly than ever before toward the baroque pop of the '60s, with a majority of her songs sounding firmly rooted in the music of the Left Banke (of "Walk Away Renee" fame), the Zombies' Odessey and Oracle album, and Burt Bacharach. It's her first solo album since 1996's superb Susanna Hoffs (her recorded work since then has consisted primarily of the Under the Covers cover-song collaborations with Matthew Sweet). Produced by the great Mitchell Froom, the album is an excellent return to form for Hoffs, and one of the most memorable of the songs is the single, "Raining." It starts in sounding like Elvis Presley's "Suspicious Minds," but quickly turns into a song that would have sounded right at home on the flip side of Lulu's "To Sir with Love" (another song that Hoffs has covered, with fine results). It's a classic-sounding throwback to the '60s pop era, and Hoffs, a thoroughly underrated songwriter (this one is a collaboration with Mike Campbell of the Heartbreakers), handles tunes like this as well as anyone today.
Posted in Great Songs 2012, Reselect: New Music Monday | No Comments


MPhil students may attend all the Department's undergraduate lectures, classes and seminars. Since these include courses at first-, second-, and third-year levels, MPhils can either improve upon knowledge and skills already acquired during their undergraduate years or acquire a new area of expertise which will be useful to their future studies. The written exercise by which their attainment is formally assessed at the end of Lent Term will be calibrated according to the level at which each student started: beginner, intermediate or advanced.
Scandinavian history of the Viking Age.
The Brittonic-speaking peoples from the fourth century to the twelfth.
The Gaelic-speaking peoples from the fourth century to the twelfth.
Old English language and literature.
Old Norse language and literature.
Medieval Welsh language and literature.
Medieval Irish language and literature.
Insular Latin language and literature.
M.Phil students wishing to take a beginner-level Written Exercise should go to the classes and/or lectures for the relevant course attended by first-year undergraduates (i.e. those undergraduates preparing for year 1 exams, a.k.a. Prelims); and those opting for an intermediate-level Written Exercise should go to the classes and/or lectures attended by second-year undergraduates (i.e. those preparing for year 2 exams, a.k.a. Part I). Beginner-level and intermediate-level M.Phil Written Exercises are at a standard equivalent to the exams taken by Prelim and Part I level undergraduates respectively.
Part II is the third and final year of the undergraduate course and involves a range of papers which in some way or another take further the knowledge and skills acquired in the corresponding Part I courses. The teaching is generally by seminars, classes, and some lectures; in all cases the students will be expected to give brief oral presentations in class reporting on the results of their own reading. Advanced-level MPhil written exercises are at a standard equivalent to the exams taken by Part II students.
A subject in Scandinavian history of the Viking Age (currently The Coming of Christianity).
A subject in the history of the Celtic-speaking world (currently Sea-Kings and the Celtic-speaking world, c. 1014-1164).
A subject in ASNC History (currently Law and Lawlessness).
For more detail on the content of all these courses, please click here.
In addition to the courses which they have chosen for their written exericses, M.Phil students are welcome at any other undergraduate lecture-courses within ASNC. All members of the University are also entitled to attend the extensive range of lectures available in Faculties other than their own, for example Classics, Archaeology, Anthropology, English, History, and Modern & Medieval Languages. For information about these, you are advised to consult the University Lecture List available online (http:/timetables.caret.cam.ac.uk).


Technology evolves, hacking evolves, Post-Quantum Encryption is the evolution to protect your data.
The creation of continual encryption key code, with a virtually limitless amount random codes that is constantly changing could mean the difference of compromised data or secure data. The development of Quantum Entropy Encryption will ensure security at the highest level.
For more information call the experts. Bright Apps is here to help and provide a cost-free consultation!
Bright Apps helps start-ups and enterprises with a seamless, end-to-end process that takes the work off your plate.
Sign up to stay up to date on the latest Bright Apps News.


text:
Legal Tech's Predictions for E-Discovery in 2022
Evan Vega	 Jan 5, 2022
It might be an understatement to say that switching to remote work has only changed the complexion of the Discovery. Although the discipline has already shifted to a cloud-based model and focused more on remote…
Legal Tech's Predictions for Legal Technology Innovation in 2022
Are you looking forward to the future? My friend, we are already there. In the legal industry alone, artificial intelligence is built into everything from discovery to research, cloud and remote technologies enable…
Legal Tech's Predictions for Privacy in 2022
Evan Vega	 Dec 30, 2021
It's not just California anymore. While the California Consumer Privacy Act (CCPA) has picked up most of the headlines about privacy in the United States in recent years, now Virginia, Colorado, and others have entered the…
Legal Tech's Predictions for Remote Work and COVID-19 in 2022
Yes, Omicron and possibly future COVID-19 variants have thwarted plans to return to the office. But let's face it, plans to return to the office since they came together didn't mean "everyone will always be in the office"…
Legal Tech's Predictions for Cybersecurity in 2022
Last year was the Year of the Threat Vector. With so many people now working remotely, the number of infiltration points for potential villains has multiplied. Phishing attacks increased as employees married email and…
Predictions and trends in mergers and acquisitions for 2021
Ireland still attractive for international investorsKatharine Byrne, BDO Nearly a year on from the first Covid lockdown and M&A…
Evan Vega	 Sep 25, 2021
Seasoned law firms increasingly rely on innovation and experiential information provided to their frameworks to break down the accuracy and consistency of accounting rules and agreements. The effects of the 2020…


text:
Prime Day 2019: Deals
Google Glass review
Explorer Edition has ceased production, but its legacy lives on
By Matt Swider 2017-02-21T22:51:00.51Z Gadgets
1. Introduction and design
3. Apps
4. Camera and video
5. Google Glass accessories
7. Battery life
8. Google Glass in public
9. Prescription lenses
10. Release date and upgrades
The Google Glass camera shoots 5-megapixel photos equivalent to that of the iPhone 4 camera and each picture has a 2528 x 1856 resolution. To Google's credit, it took last-generation specs and made them useful again thanks to the camera's distinctive hands-free interface and, given the right lighting, terrific image quality.
There's a camera button you can manually press on top of the touchpad
There are three ways to take photos when that 21st-century Kodak moment strikes and your quickest method of capturing it is Google Glass. Precisely saying "Okay Glass, take a picture" (not "take a photo") snaps an image within the blink of an eye.
Believe it or not, the second way is by actually blinking your right eye. This recently added Wink feature is deemed as experimental by Google, so it also picks up your eye-shutting big yawns and sneezes for awkward, unexpected photos.
Glass captured the outdoor portions of Disneyland nicely
The third way to take a picture is by pressing the physical camera button at the top of the hardware. It's not as forward-thinking as talking to Google Glass, but it's ideal for noisy environments in which the otherwise strong microphone isn't a viable option.
All three methods allow you to bring up the viewfinder beforehand thanks to the update that arrived just prior Google IO 2014. Saying "OK Glass, show the viewfinder" brings up the four L-shaped corners and makes lining up the perfect shot even easier. Before this update, it was trial-and-error guess work.
Photos are saved to an internal 16GB flash drive of which 12GB is actually useable memory. The operating system controls the rest. This space doesn't fill up easily, as images are 1MB on average and are routinely synced with Google's cloud storage.
Syncing photos to a smartphone through the MyGlass app is also helpful, especially when you want to edit them before posting. As of September, even iOS users are in on the Photo Sync feature. Deleting photos en masse, however, doesn't work without plugging Glass into a computer via its USB cable. It's a feature I'd like to see in the future.
Sunsets make great Google Glass photos when there's no direct sunlight
Best Google Glass photos
Sunsets, friends' portraits and first-person snaps of everyday life offer the best photo results and make the camera the most rewarding Google Glass feature. Each one comes with a laundry list of caveats, though. Sunsets need to be bright, but not so bright that direct sunlight whites out the entire image.
Portraits need to be well-lit and your antsy friends can't be moving - at all. "Everyday life photos" should be read literally with an emphasis on day, and the subject needs to be close because there's no zoom function or cropping tool.
There's no crop or zoom to put this big dog into better context
Google Glass' inability to crop and zoom either when the picture is taken or post-snap is one of the biggest disadvantages to its 100% hands-off approach to photography. I didn't miss the opportunity to take a photo of an abnormally large dog on the sidewalk thanks to Glass, but I conversely couldn't put it into a better perspective before sharing it to Facebook sans a cropping tool. That large, distracting electrical box in the periphery remains.
Most #throughglass photos are admirably untouched, a rarity in the age of Instagram. Still, basic editing functionality by beaming a photo over to a smartphone or tablet before uploading it to the world would have been valued. Google+ does a nice job with Auto Enhanced photos with a few tricks.
The TechRadar party was a blast, but Glass' low-light performance isn't
An LED flash and better low-light performance is another obvious Google Glass feature that's sorely missing from the prototype. Taking photos and video in dimly lit environments is almost a non-starter, cutting down on the fun you can have with it in conjunction with nightlife scenarios.
With just the right amount of light, the results are vastly better
More sophisticated camera software could improve Glass in the future, but given the Nexus 5 camera problems, it might not be high on the Google's priority list when it should be No. 1.
Google Glass video
Google Glass also takes high-resolution video with all footage at a fairly steady 720p resolution. The camera's video performance mirrors its still image quality: it lives and dies by lighting and, if the right conditions are in place, provides a unique window to explore your everyday life.
This is exactly what happened when I filmed my too-often-repeated airport security line routine through the first-person perspective. Ever wonder what it's like to go through a luggage X-ray machine? Glass shed some light on the not-too-crazy-looking experience #throughglass. It also proved that airport security is way too frantic of an operation and that an indoor, well-lit airport environment is the best format for a Google Glass video.
The quality took a hit when I attempted to film rides at Disneyland. Without proper illumination on rides, it failed to capture the excitement of the theme park indoors and as soon as the sun set, the outdoor video and photo quality took a major dive along with the, by then, exhausted battery.
Google Glass' video capabilities could get you kicked out
Google Glass filming privacy
The Google Glass POV camera perspective is the most fulfilling feature, but it's also the reason the wearable is seen as being so invasive. It's always pointing forward at people and it often elicits a half-joking, half serious, "Are you filming me right now?"
Privacy concerned individuals are usually overreacting. Still, it's an accusation every Glass user has to expect. Casinos, clubs, and a handful of restaurants and bar have unceremoniously banned the prototype even before it's readily available. Google went as far as posting nine tips on how not to be a Glasshole.
Google+ Auto Backup, effects
Google+ automatically saves photos and video through the social network's Auto Backup feature. It syncs to a private online album when Google Glass is plugged into a charger and it's within WiFi range. It's essential to meet these two conditions if Auto Backup isn't working, a complaint echoed through Google's private forums for Glass users. When it does function properly, it has some extra surprises that are worth checking out.
Google Auto Awesome added snow to a Christmas-timed photo
Select pictures are automatically enhanced with Google+ photo editing software, panoramas are stitched together right away and animated GIFs are already moving about before you say action. During the holidays, twinkle and snow effects were routinely added to photos - although it didn't look right in a lot of cases. Luckily, all Google+ enhancements are saved as a copy of the original photo in the Auto Backup folder and never shared without your permission.
Current page: Camera and video
Prev Page Apps Next Page Google Glass accessories
Amazon Prime Day 2019: all the best tech deals in Australia


we possess treasures and qualities on the inside that we're unaware of. We are fully aware of what we are capable of but it's not about what is on the inside...it's about what you get out. Let us look at this statement in a practical sense: Africa has more resources than Europe but Europe 'excels'. Does this make sense? Shouldn't Africa excel more because of its resources? Let's look at hidden treasure – hidden treasure can be defined as something valuable kept in a safe place. Each and every one of us possess a hidden treasure, and it is up to us as to whether we dig it up or keep it in that safe place.
We need to quit limiting and belittling ourselves. We need to constantly believe and remind ourselves that we are full of potential and that we have everything we could possibly need in order to achieve our dreams. Another factor that causes us to under-achieve is that we are constantly in competition with one another, measuring our progress against the next person's and valuing and defining ourselves based on materialistic items. We forget that each of us is equally God's child, and as His child He has an individual plan for each one of us, according to His glory. We just keep appeasing Satan by competing against each other and hindering each other's success. We need to learn to declare things because you will rise and fall as you believe. We are anything but average, destined for only great things! There is treasure inside of each of us, we just need to dig deeper and do the unthinkable. It may look impossible, but that's what God specialises in!
Stop making excuses! Remove any reason or any doubt from your mind that tells you why you cannot possibly do it. All your excuses are silly and petty to your Creator and undermine His power. It simply means you don't trust Him enough. He wouldn't give you a talent/ability without it being above average. Learn to trust yourself as much as He trusts you.
What is in your hand? Give your talent to the Maker and ask Him to use you fully. Ask Him to direct you and lead you. Let him take control and that way you will fully excel and never struggle again.
Do it for His glory and not yours. We were created to glorify the Lord with our talents and abilities and not ourselves. You must never use your talents with the aim of being the greatest, but should use it to point people to God.
Last but not least: don't die with your treasure still locked up inside. Be the light in this dark world!


text:
Генна́дий Миха́йлович Добро́в (до 1971 года — Гладунов) (9 сентября 1937, Омск — 15 марта 2011, Москва) — советский и российский художник. Народный художник Российской Федерации (2010). Член-корреспондент Российской академии художеств (2011).

Биография
Геннадий родился в семье художников в Омске.
Отец — М. Ф. Гладунов — учил его рисовать с детских лет.

В 1951—1956 гг. учился в Московской средней художественной школе, с 1954 участвовал в художественных выставках. Учился в МГХИ им. Сурикова 1956 по 1962 годы.

На первом курсе Суриковского института Геннадий посещал кружок Матвея Алексеевича Доброва, превосходного офортиста, учившегося в Париже. В лице Матвея Алексеевича провинциальный юноша впервые увидел глубоко религиозного человека с врождёнными устоями морали и нравственности. Через 13 лет после его смерти, в память об учителе, художник, с разрешения родственников М. А. Доброва, взял его фамилию. Также на судьбу художника повлиял академик Евгений Адольфович Кибрик.

Геннадий работал в милиции (постовым на Белорусском вокзале в Москве), в приёмных отделениях больниц, на психоперевозках, художником в ООО «Арт-Ласта».

Скончался в Москве 15 марта 2011 года. Похоронен на Ваганьковском кладбище (15 уч.).

Творчество
Первую большую графическую серию «Автографы войны» художник создаёт в 1970-х годах. Мастерски с натуры нарисованные портреты инвалидов принимают выставкомы, они указываются в каталогах, но их не выставляют в экспозиции.

Графический цикл «Листы скорби», задуманные ещё во время учёбы в Суриковском институте, стали главным детищем творчества Геннадия Доброва, состоящим из сотни графических листов в пяти сериях:
«Автографы войны» (портреты инвалидов Великой Отечественной войны, написанные в Валаамском доме инвалидов, Бахчисарае, Омске, на Сахалине, в Армении), «Реквием» (рисунки остатков фашистских концлагерей в Польше, Чехии и Германии), «Молитва о мире» (результат пяти поездок в воюющий Афганистан), «Международный терроризм» (последствия военных конфликтов в Чечне и Южной Осетии), «Душевнобольные России» (портреты, сделанные в психиатрических больницах разных регионов страны).

 1974—1980 — Создание серии рисунков «Автографы войны».
 1974 — Принят в Московский Союз художников.
 1978—1981 — Работа в технике литографии, офорта. Живописные портреты.
 1981—1982 — Создание картины «Прощальный взгляд».
 1982—1986 — Работа над картиной «Бред преследования».
 1989—2001 — Пять поездок в Афганистан. Создание серии «Молитва о мире».
 1992—2006 — Работа над картиной «Воспоминания о коммуналке».
 1994—2000 — Посещение бывших фашистских концлагерей. Серия «Реквием».
 1999—2004 — Поездки в 124-ю лабораторию г. Ростова-на-Дону. Рисунки «Международный терроризм».
 2002—2004 — Работа над графической серией «Душевнобольные России».
 2004 — Две поездки в г. Грозный. Создание рисунков «Я любил этот город».
 2008 — Поездка в Нью-Йорк на открытие персональной выставки «Зарисовки в память о жертвах Холокоста и их освободителях» в штаб-квартире ООН.
 2008 — Выставка «Реквием» в Эндикотт-колледже в США (шт. Массачусетс).
 Сентябрь-октябрь 2008 — Поездка в разрушенный Цхинвал. Создание рисунков «Южно-Осетинская трагедия».

Выставки
Участник 68 художественных выставок (московских, республиканских, всесоюзных, персональных и международных).

Имел более 350 публикаций и показов в СМИ.

Работы хранятся в Центральном музее Великой Отечественной войны 1941—1945 гг., в Центральном Историческом музее и в Музее капитуляции Карлсхорст (Берлин).

Награды и звания
 1987 — За серию «Автографы войны» награждён медалью «Борцу за мир».
 1996 — Почётное звание «Заслуженный художник Российской Федерации».
 2003 — Почётное звание «Заслуженный деятель искусств Российской Федерации».
 2004 — Присуждён Диплом Академии художеств РФ за серию станковых рисунков из цикла «Листы скорби».
 2007 — Избрание почётным членом Российской Академии Художеств.
 2010 — Почётное звание «Народный художник Российской Федерации».
 2011 — Избрание членом-корреспондентом Российской Академии Художеств.

Отзывы о творчестве Доброва
Дмитрий Лихачёв, академик, написал в 1989 году:
Ищут нетронутые уголки Земли жалостливые живописцы… Не ведая сострадания, оберегая собственные чувства, они обходят стороной трагедии и страдания людей. Исключений немного, скажем, творческий подвиг художника Геннадия Доброва…

Т. С. Никитина, критик: …Он брал вещи, которых другие даже боялись касаться, вещи, которые не только находились вне сферы искусства, но противолежали искусству; он брал страшное, увечное, почти безобразное, — и делал это бесстрашно, как хирург бесстрашно входит в палату с тяжелоранеными. Своим материалом он избрал человеческое страдание: судьбы инвалидов войны, жертв геноцида, нищету, обездоленность, безумие.

Он заглядывал в глаза немых, юродивых, безымянных, потерявших все, даже прошлое, в глаза стариков и детей, изувеченных войнами, — и видел в них величие и красоту, истинный масштаб человека, его суть, открывающуюся именно в громадности страдания.

Примечания

Литература
 Московская энциклопедия. Том 1: Лица Москвы. Книга 6: А-Я. Дополнения. — М.: ОАО «Московские учебники», 2014

Ссылки
 Художник Геннадий Добров
 Страница на сайте Российской Академии Художеств
 Статья «Сила Добра» Григория Тельнова
 Галерея работ
 Художник Геннадий Добров. «Автографы войны»

Выпускники Московского академического художественного лицея
Выпускники МГХИ им. Сурикова
Художники России XX века
Члены-корреспонденты РАХ
Почётные члены РАХ
Похороненные на Ваганьковском кладбище

redpajama_set_name: RedPajamaWikipedia


After choosing what amount of area you can make room for dining tables and chairs for two and the place you would like possible parts to go, mark these spaces on the floor to obtain a easy match. Fit your pieces of furniture and each dining room in your interior must suit the rest. Otherwise, your room will look disorderly and thrown together with each other.
Establish the design and style that you like. When you have a concept for the dining room, such as contemporary or traditional, stay with parts that suit together with your design. There are numerous methods to separate up room to various designs, but the key is frequently contain contemporary, modern, classic or old fashioned.
Complete the room in with extra furniture as space makes it possible to add a great deal to a big space, but also several items may crowd out a tiny interior. Before you look for the dining tables and chairs for two and begin getting large furniture, make note of a few crucial factors. Purchasing new dining room is an interesting prospect that will entirely convert the look of your room.
When you're out shopping for dining tables and chairs for two, although it may be straightforward to be persuaded by a salesperson to buy anything outside of your normal style. Therefore, go purchasing with a specific you need. You'll manage quickly sort out what works and what does not, and produce narrowing down your choices much simpler.
Identify the correct way dining tables and chairs for two is likely to be implemented. That can help you determine what to get and what theme to pick. Determine the number of people will soon be using the room everyday to ensure that you can buy the appropriate measured.
Choose your dining room style and color scheme. Having a theme is very important when purchasing new dining tables and chairs for two so that you can accomplish your desired design style. You could also want to think about switching the color of your interior to enhance your choices.
Before choosing any dining tables and chairs for two, make sure you evaluate length and width of the room. See the place you have to position every single furniture of dining room and the ideal proportions for that area. Reduce your stuff and dining room if the room is small, select dining tables and chairs for two that matches.
No matter what design or color scheme you want, you will require the important furniture to enrich your dining tables and chairs for two. After you have achieved the essentials, you should add smaller ornamental furniture. Find artwork or candles for the interior is perfect ideas. You could also require more than one lamps to provide gorgeous ambience in your room.
Related Post "Dining Tables And Chairs For Two"


text:
using System;
using Yaclops.Commands;

namespace Yaclops
{
    /// <summary>
    /// Settings that alter the default behavior of the parser.
    /// </summary>
    /// <typeparam name="T">The type (usually an interface) of the commands generated by the parser.</typeparam>
    public class CommandLineParserSettings<T> : GlobalParserSettings
    {
        /// <summary>
        /// Constructor
        /// </summary>
        public CommandLineParserSettings()
        {
            NullCommand = () => default(T);
        }

        /// <summary>
        /// A func that returns the command that is returned when help or another internal command is parsed.
        /// </summary>
        public Func<T> NullCommand { get; set; }

        /// <summary>
        /// A func that returns the default command that is returned if no arguments are supplied.
        /// The default is to show help.
        /// </summary>
        public Func<T> DefaultCommand { get; set; }
    }

    internal class DefaultSubCommandSettings : CommandLineParserSettings<ISubCommand>
    {
        public DefaultSubCommandSettings()
        {
            NullCommand = () => new NullSubCommand();
        }
    }
}

redpajama_set_name: RedPajamaGithub


« 2014 and times already flying!
The big event in my Valentines weekend is that I have 4 shows with a comedy troupe and I actually get to partake in some improv myself! I haven't done it in quite some time and feel a bit rusty with only 5 rehearsals under my belt but it's going to be a ton of fun! I've always loved improv, it's so organic and amusing. Watching good improv makes it seem so effortless but in reality it's quite challenging-to be instantly clever and funny (although I think I have a knack lol).
I used to do musical theatre and some one act plays back in high school and actually debated pursuing drama instead of music when I was headed to college. Ultimately, music was my one true love and passion but drama takes a close second. I wish I had a bit more time, I would totally join the 'B-Side' improv team if I could but alas music is a full time job for me.
Ah love, I do have a poster in my room that says 'music is my first love' and so true it is. Even in a relationship, music may actually come slightly higher. It's my constant companion and I can't imagine my life without music everyday. Hearing new music is like an unquenchable thirst, I can never get enough and I never tire of hearing the same song over and over…and over again! Then there's the songs that stay with you always, the songs that just hit you on the first listen and you can't shake that intense love for the music. For me, many of those songs come from the Beach Boys massive inventory- so many gems that never cease to amaze me.
I do love love from a relationship to. I love the new feeling of being in love, I love comfortable love, I love passionate love and I love enduring and unconditional love. I'm lucky to have many people in my life who give me these types of love. What I've learned, and a lot over this past year, is self love. I've learned to spend time alone and enjoy it again and I've learned that there's a lot about myself to love and to remind myself of that.
To sum it all up- love is great so many forms! There are so many things in my life right now that I'm lucky enough to have and be doing and I have to say- I do love my life (in a completely humble way).
To all of you out there, enjoy Valentines by yourself or with someone, have a great long family day weekend and do something nice for someone-or yourself!
A song about love that I happen to really love!
This entry was posted on Friday, February 14th, 2014 at 4:15 pm and is filed under Uncategorized. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


text:
Glenmarch
September 2019 - UK auction highlights
A 1935 Bugatti Type 57 Atalante Faux Cabriolet claimed the top spot at Bonhams' Goodwood Revival sale, making £1,499,000 (estimate £1,000,000 – 1,500,000) after its headline car – the ex-Donald Campbell Aston Martin DB4GT – sold prior to auction.
Other '30s machinery finding new homes included an Alfa Romeo 6C 2300 B Short-Chassis Spider, with elegant Touring-style coachwork, at £408,250 (estimate £400,000 – 450,000); plus a Lagonda V12 'Le Mans Replica' which set a new national record in 1938 for covering 101.5 miles in an hour – hammered away for £207,000 (estimate £200,000 – 300,000).
The ex-works Sir Jack Brabham 1961 Cooper Climax T55 blitzed its £100,000 – 150,000 pre-sale estimate, going for £244,375 with all proceeds donated to Sir Jackie Stewart's charity, Race Against Dementia. Chassis F1/10/61 is one of just two T55s built and was driven to victory by Brabham on its debut at the 1961 Aintree 200.
A 1965 BMW 1800 Ti that had been modified to Ti/SA spec also recorded a strong result, achieving £58,650 (estimate £30,000 – 40,000), while a 2016 Land Rover Defender 90 Heritage with less than 30 miles on the clock – one of 400 special edition Hardtops – brought £51,750 (£45,000 – 48,000).
All the cars offered from the estate of the late Peter Phillips changed hands. Highlights included a 1969 Aston Martin DB6 Volante – converted to Vantage specification in period by the factory – which made £743,000 (estimate £650,000 – 750,000); a 1915 Rolls-Royce 40/50hp Silver Ghost Alpine Eagle Tourer drew £264,500 (estimate £300,000 – 500,000); and a 1968 Aston Martin DBS Vantage, meticulously restored by Works Service in 2008, generated £135,700 (estimate £90,000 – 130,000).
[ Full auction results here ]
A 1929 Bugatti Type 44 came within a whisker of making its £300,000 upper estimate, taking £293,250 at Bonhams' Beaulieu sale on 7 September.
The top five was rounded off with a 1908 Napier Type 23 45hp at £235,750 (estimate £250,000 – 300,000); a 1927 Rolls-Royce Phantom I Newmarket Tourer at £155,250 (estimate £110,000 – 150.000); a 1937 Alvis 4.3 Litre Short Chassis Drophead Coupe with unique coachwork by Vanden Plas at £126,500 (estimate £120,000 – 135,000); and a 1926 Frazer Nash Super Sports 1½-Litre – owned by the vendor since 1977 – at £91,666 (estimate £130,000 – 150,000).
Bonhams held its first 'MPH' sale at Bicester on 26 September, aimed at modern and affordable classics. A 38,207-mile 1993 Ford Escort RS Cosworth (estimate £40,000 – 50,000) – recently recommissioned following 10 years in storage – shared the honours for the top price on the day with an ex-military 1993 Land Rover Defender 110 SOV SAS (estimate £80,000 – 100,000), each bringing £49,500.
A 1960 Aston Martin DB4, offered as an unfinished restoration project, soared past its £100,000 – 120,000 estimate, selling for £210,560 at Brightwells' 4 September sale.
Other notable success among the 182-car catalogue included a US-Market 1974 Jaguar E-Type Series III V12 Roadster at a mid-estimate £84,560. Converted to right-hand drive, it had covered less than 1,000 miles since emerging from an exacting £118,000 restoration in 2017, which included discreet upgrades aimed at enhancing its everyday usability.
The first production right-hand drive Sunbeam Tiger being sold on behalf of its late long-term owner, Mike Griffiths, attracted a final bid of £57,120 (estimate £55,000 – 60,000), while a JD Classics-restored 1966 Mini Cooper S in concours condition took £49,280 (estimate £49,000 – 55,000).
Brightwells generated total sales of £1.9 million, with a sell-through rate of 73%.
Silverstone Auctions kicked off the first of its two single-marque sales on 21 September with a roster of 34 Ferraris going under the hammer at the Dallas Burston Polo Club. A left-hand drive 1972 365 GTC/4 was one of the star attractions, entered by the noted car collector and Jamiroquai frontman Jay Kay. Purchased by him in 2016 following a two year nut-and-bolt restoration by Joe Macari, it exceeded its lower estimate, fetching £219,375 (estimate £200,000 – 260,000).
Interest among the modern Ferraris saw a 19,000-km 2008 599 GTB – one of just 10 with a manual gearbox delivered to Europe – sell for £360,000 (estimate £365,000 – 400,000); a one-of-40 2012 599 GTB 60 F1 Alonso Final Edition with 8,000 miles on the clock taking £208,125 (estimate £220,000 – 260,000); and a left-hand drive 1995 512M with circa 30,000km drawing £153,000 (estimate £120,000 – 140,000).
Topping the Porsche sale was a 4,300-mile left-hand drive 2005 Carrera GT which sold to a telephone bidder for £607,500 (estimate £600,000 – 650,000). Silverstone Auctions reported £1.8 million in Ferrari sales, with the Porsche auction bringing £1.2 million.
Classic car auction results and prices for: Bugatti | Aston Martin | Alfa Romeo | Lagonda | Cooper | BMW | Land Rover | Rolls-Royce | Napier | Alvis | Frazer Nash | Ford | Jaguar | Sunbeam | Mini | Ferrari | Porsche
From leading auction houses: Bonhams | Brightwells | Silverstone Auctions
Read through the rest of our classic car auction reports for more auction results. Check out our online resource for upcoming classic car auction events and classic car auction results around the world.
Copyright © Glenmarch 2016-2020
Like other websites, our website uses cookies to enable us to analyse how our visitors use our website. Please tick the box if you are happy for us to use such cookies [ ]. For more information on the cookies used on our website please see our Privacy and Cookie Policy.


text:
const got = require('got')
const FormData = require('form-data')
const crypto = require('crypto')
const fromPairs = require('lodash/fromPairs')
const fs = require('fs')
const { access } = require('fs').promises
const log = require('debug')('transloadit')
const logWarn = require('debug')('transloadit:warn')
const intoStream = require('into-stream')
const isStream = require('is-stream')
const assert = require('assert')
const pMap = require('p-map')
const uuid = require('uuid')

const InconsistentResponseError = require('./InconsistentResponseError')
const PaginationStream = require('./PaginationStream')
const { version } = require('../package.json')
const { sendTusRequest } = require('./tus')

function decorateError (err, body) {
  if (!body) return err
  let { message } = err

  // Provide a more useful message if there is one
  if (body.message && body.error) message = `${body.error}: ${body.message}`
  else if (body.error) message = body.error

  if (body.assembly_ssl_url) message += ` - ${body.assembly_ssl_url}`

  /* eslint-disable no-param-reassign */
  err.message = message
  if (body.assembly_id) err.assemblyId = body.assembly_id
  if (body.error) err.transloaditErrorCode = body.error
  /* eslint-enable no-param-reassign */

  return err
}

// Not sure if this is still a problem with the API, but throw a special error type so the user can retry if needed
function checkAssemblyUrls (result) {
  if (result.assembly_url == null || result.assembly_ssl_url == null) {
    throw new InconsistentResponseError('Server returned an incomplete assembly response (no URL)')
  }
}

function getHrTimeMs () {
  return Number(process.hrtime.bigint() / 1000000n)
}

function checkResult (result) {
  // In case server returned a successful HTTP status code, but an `error` in the JSON object
  // This happens sometimes when createAssembly with an invalid file (IMPORT_FILE_ERROR)
  if (typeof result === 'object' && result !== null && typeof result.error === 'string') {
    const err = new Error('Error in response')
    // Mimic got HTTPError structure
    err.response = {
      body: result,
    }
    throw decorateError(err, result)
  }
}

class TransloaditClient {
  constructor (opts = {}) {
    if (opts.authKey == null) {
      throw new Error('Please provide an authKey')
    }

    if (opts.authSecret == null) {
      throw new Error('Please provide an authSecret')
    }

    if (opts.endpoint && opts.endpoint.endsWith('/')) {
      throw new Error('Trailing slash in endpoint is not allowed')
    }

    this._authKey = opts.authKey
    this._authSecret = opts.authSecret
    this._endpoint = opts.endpoint || 'https://api2.transloadit.com'
    this._maxRetries = opts.maxRetries != null ? opts.maxRetries : 5
    this._defaultTimeout = opts.timeout != null ? opts.timeout : 60000

    // Passed on to got https://github.com/sindresorhus/got/blob/main/documentation/7-retry.md
    this._gotRetry = opts.gotRetry != null ? opts.gotRetry : 0

    this._lastUsedAssemblyUrl = ''
  }

  getLastUsedAssemblyUrl () {
    return this._lastUsedAssemblyUrl
  }

  setDefaultTimeout (timeout) {
    this._defaultTimeout = timeout
  }

  /**
   * Create an Assembly
   *
   * @param {object} opts assembly options
   * @returns {Promise}
   */
  createAssembly (opts = {}, arg2) {
    // Warn users of old callback API
    if (typeof arg2 === 'function') {
      throw new TypeError('You are trying to send a function as the second argument. This is no longer valid in this version. Please see github README for usage.')
    }

    const {
      params = {},
      waitForCompletion = false,
      isResumable = true,
      chunkSize: requestedChunkSize = Infinity,
      uploadConcurrency = 10,
      timeout = 24 * 60 * 60 * 1000, // 1 day
      onUploadProgress = () => {},
      onAssemblyProgress = () => {},
      files = {},
      uploads = {},
      assemblyId,
    } = opts

    if (!isResumable) {
      process.emitWarning('Parameter value isResumable = false is deprecated. All uploads will be resumable (using TUS) in the future', 'DeprecationWarning')
    }

    // Keep track of how long the request took
    const startTimeMs = getHrTimeMs()

    // Undocumented feature to allow specifying a custom assembly id from the client
    // Not recommended for general use due to security. E.g if the user doesn't provide a cryptographically
    // secure ID, then anyone could access the assembly.
    let effectiveAssemblyId
    if (assemblyId != null) {
      effectiveAssemblyId = assemblyId
    } else {
      effectiveAssemblyId = uuid.v4().replace(/-/g, '')
    }
    const urlSuffix = `/assemblies/${effectiveAssemblyId}`

    // We want to be able to return the promise immediately with custom data
    const promise = (async () => {
      this._lastUsedAssemblyUrl = `${this._endpoint}${urlSuffix}`

      // eslint-disable-next-line no-bitwise
      await pMap(Object.entries(files), async ([, path]) => access(path, fs.F_OK | fs.R_OK), { concurrency: 5 })

      // Convert uploads to streams
      const streamsMap = fromPairs(Object.entries(uploads).map(([label, value]) => {
        const isReadable = isStream.readable(value)
        if (!isReadable && isStream(value)) {
          // https://github.com/transloadit/node-sdk/issues/92
          throw new Error(`Upload named "${label}" is not a Readable stream`)
        }

        return [
          label,
          isStream.readable(value) ? value : intoStream(value),
        ]
      }))

      // Wrap in object structure (so we can know if it's a pathless stream or not)
      const allStreamsMap = fromPairs(Object.entries(streamsMap).map(([label, stream]) => [label, { stream }]))

      // Create streams from files too
      for (const [label, path] of Object.entries(files)) {
        const stream = fs.createReadStream(path)
        allStreamsMap[label] = { stream, path } // File streams have path
      }

      const allStreams = Object.values(allStreamsMap)

      // Pause all streams
      allStreams.forEach(({ stream }) => stream.pause())

      // If any stream emits error, we want to handle this and exit with error
      const streamErrorPromise = new Promise((resolve, reject) => {
        allStreams.forEach(({ stream }) => stream.on('error', reject))
      })

      const createAssemblyAndUpload = async () => {
        const requestOpts = {
          urlSuffix,
          method: 'post',
          timeout,
          params,
        }

        if (isResumable) {
          requestOpts.fields = {
            tus_num_expected_upload_files: allStreams.length,
          }
        }

        // upload as form multipart or tus?
        const formUploadStreamsMap = isResumable ? {} : allStreamsMap

        const result = await this._remoteJson(requestOpts, formUploadStreamsMap, onUploadProgress)
        checkResult(result)

        if (isResumable && Object.keys(allStreamsMap).length > 0) {
          await sendTusRequest({
            streamsMap: allStreamsMap,
            assembly  : result,
            onProgress: onUploadProgress,
            requestedChunkSize,
            uploadConcurrency,
          })
        }

        if (!waitForCompletion) return result
        const awaitResult = await this.awaitAssemblyCompletion(result.assembly_id, {
          timeout, onAssemblyProgress, startTimeMs,
        })
        checkResult(awaitResult)
        return awaitResult
      }

      return Promise.race([createAssemblyAndUpload(), streamErrorPromise])
    })()

    // This allows the user to use or log the assemblyId even before it has been created for easier debugging
    promise.assemblyId = effectiveAssemblyId
    return promise
  }

  async awaitAssemblyCompletion (assemblyId, {
    onAssemblyProgress = () => {},
    timeout,
    startTimeMs = getHrTimeMs(),
    interval = 1000,
  } = {}) {
    assert(assemblyId)

    // eslint-disable-next-line no-constant-condition
    while (true) {
      const result = await this.getAssembly(assemblyId)

      if (!['ASSEMBLY_UPLOADING', 'ASSEMBLY_EXECUTING', 'ASSEMBLY_REPLAYING'].includes(result.ok)) {
        return result // Done!
      }

      try {
        onAssemblyProgress(result)
      } catch (err) {
        log('Caught onAssemblyProgress error', err)
      }

      const nowMs = getHrTimeMs()
      if (timeout != null && nowMs - startTimeMs >= timeout) {
        const err = new Error('Polling timed out')
        err.code = 'POLLING_TIMED_OUT'
        throw err
      }
      await new Promise((resolve) => setTimeout(resolve, interval))
    }
  }

  /**
   * Cancel the assembly
   *
   * @param {string} assemblyId assembly ID
   * @returns {Promise} after the assembly is deleted
   */
  async cancelAssembly (assemblyId) {
    // You may wonder why do we need to call getAssembly first:
    // If we use the default base URL (instead of the one returned in assembly_url_ssl),
    // the delete call will hang in certain cases
    // See test "should stop the assembly from reaching completion"
    const { assembly_ssl_url: url } = await this.getAssembly(assemblyId)
    const opts = {
      url,
      // urlSuffix: `/assemblies/${assemblyId}`, // Cannot simply do this, see above
      method: 'delete',
    }

    return this._remoteJson(opts)
  }

  /**
   * Replay an Assembly
   *
   * @param {string} assemblyId of the assembly to replay
   * @param {object} optional params
   * @returns {Promise} after the replay is started
   */
  async replayAssembly (assemblyId, params = {}) {
    const requestOpts = {
      urlSuffix: `/assemblies/${assemblyId}/replay`,
      method   : 'post',
    }
    if (Object.keys(params).length > 0) requestOpts.params = params
    const result = await this._remoteJson(requestOpts)
    checkResult(result)
    return result
  }

  /**
   * Replay an Assembly notification
   *
   * @param {string} assemblyId of the assembly whose notification to replay
   * @param {object} optional params
   * @returns {Promise} after the replay is started
   */
  async replayAssemblyNotification (assemblyId, params = {}) {
    const requestOpts = {
      urlSuffix: `/assembly_notifications/${assemblyId}/replay`,
      method   : 'post',
    }
    if (Object.keys(params).length > 0) requestOpts.params = params
    return this._remoteJson(requestOpts)
  }

  /**
   * List all assembly notifications
   *
   * @param {object} params optional request options
   * @returns {Promise} the list of Assembly notifications
   */
  async listAssemblyNotifications (params) {
    const requestOpts = {
      urlSuffix: '/assembly_notifications',
      method   : 'get',
      params   : params || {},
    }

    return this._remoteJson(requestOpts)
  }

  streamAssemblyNotifications (params) {
    return new PaginationStream(async (page) => this.listAssemblyNotifications({ ...params, page }))
  }

  /**
   * List all assemblies
   *
   * @param {object} params optional request options
   * @returns {Promise} list of Assemblies
   */
  async listAssemblies (params) {
    const requestOpts = {
      urlSuffix: '/assemblies',
      method   : 'get',
      params   : params || {},
    }

    return this._remoteJson(requestOpts)
  }

  streamAssemblies (params) {
    return new PaginationStream(async (page) => this.listAssemblies({ ...params, page }))
  }

  /**
   * Get an Assembly
   *
   * @param {string} assemblyId the Assembly Id
   * @returns {Promise} the retrieved Assembly
   */
  async getAssembly (assemblyId) {
    const result = await this._remoteJson({ urlSuffix: `/assemblies/${assemblyId}` })
    checkAssemblyUrls(result)
    return result
  }

  /**
   * Create a Credential
   *
   * @param {object} params optional request options
   * @returns {Promise} when the Credential is created
   */
  async createTemplateCredential (params) {
    const requestOpts = {
      urlSuffix: '/template_credentials',
      method   : 'post',
      params   : params || {},
    }

    return this._remoteJson(requestOpts)
  }

  /**
   * Edit a Credential
   *
   * @param {string} credentialId the Credential ID
   * @param {object} params optional request options
   * @returns {Promise} when the Credential is edited
   */
  async editTemplateCredential (credentialId, params) {
    const requestOpts = {
      urlSuffix: `/template_credentials/${credentialId}`,
      method   : 'put',
      params   : params || {},
    }

    return this._remoteJson(requestOpts)
  }

  /**
   * Delete a Credential
   *
   * @param {string} credentialId the Credential ID
   * @returns {Promise} when the Credential is deleted
   */
  async deleteTemplateCredential (credentialId) {
    const requestOpts = {
      urlSuffix: `/template_credentials/${credentialId}`,
      method   : 'delete',
    }

    return this._remoteJson(requestOpts)
  }

  /**
   * Get a Credential
   *
   * @param {string} credentialId the Credential ID
   * @returns {Promise} when the Credential is retrieved
   */
  async getTemplateCredential (credentialId) {
    const requestOpts = {
      urlSuffix: `/template_credentials/${credentialId}`,
      method   : 'get',
    }

    return this._remoteJson(requestOpts)
  }

  /**
   * List all TemplateCredentials
   *
   * @param {object} params optional request options
   * @returns {Promise} the list of templates
   */
  async listTemplateCredentials (params) {
    const requestOpts = {
      urlSuffix: '/template_credentials',
      method   : 'get',
      params   : params || {},
    }

    return this._remoteJson(requestOpts)
  }

  streamTemplateCredentials (params) {
    return new PaginationStream(async (page) => this.listTemplateCredentials({ ...params, page }))
  }

  /**
   * Create an Assembly Template
   *
   * @param {object} params optional request options
   * @returns {Promise} when the template is created
   */
  async createTemplate (params) {
    const requestOpts = {
      urlSuffix: '/templates',
      method   : 'post',
      params   : params || {},
    }

    return this._remoteJson(requestOpts)
  }

  /**
   * Edit an Assembly Template
   *
   * @param {string} templateId the template ID
   * @param {object} params optional request options
   * @returns {Promise} when the template is edited
   */
  async editTemplate (templateId, params) {
    const requestOpts = {
      urlSuffix: `/templates/${templateId}`,
      method   : 'put',
      params   : params || {},
    }

    return this._remoteJson(requestOpts)
  }

  /**
   * Delete an Assembly Template
   *
   * @param {string} templateId the template ID
   * @returns {Promise} when the template is deleted
   */
  async deleteTemplate (templateId) {
    const requestOpts = {
      urlSuffix: `/templates/${templateId}`,
      method   : 'delete',
    }

    return this._remoteJson(requestOpts)
  }

  /**
   * Get an Assembly Template
   *
   * @param {string} templateId the template ID
   * @returns {Promise} when the template is retrieved
   */
  async getTemplate (templateId) {
    const requestOpts = {
      urlSuffix: `/templates/${templateId}`,
      method   : 'get',
    }

    return this._remoteJson(requestOpts)
  }

  /**
   * List all Assembly Templates
   *
   * @param {object} params optional request options
   * @returns {Promise} the list of templates
   */
  async listTemplates (params) {
    const requestOpts = {
      urlSuffix: '/templates',
      method   : 'get',
      params   : params || {},
    }

    return this._remoteJson(requestOpts)
  }

  streamTemplates (params) {
    return new PaginationStream(async (page) => this.listTemplates({ ...params, page }))
  }

  /**
   * Get account Billing details for a specific month
   *
   * @param {string} month the date for the required billing in the format yyyy-mm
   * @returns {Promise} with billing data
   */
  async getBill (month) {
    assert(month, 'month is required')
    const requestOpts = {
      urlSuffix: `/bill/${month}`,
      method   : 'get',
    }

    return this._remoteJson(requestOpts)
  }

  calcSignature (params) {
    const jsonParams = this._prepareParams(params)
    const signature = this._calcSignature(jsonParams)

    return { signature, params: jsonParams }
  }

  _calcSignature (toSign) {
    return crypto
      .createHmac('sha1', this._authSecret)
      .update(Buffer.from(toSign, 'utf-8'))
      .digest('hex')
  }

  // Sets the multipart/form-data for POST, PUT and DELETE requests, including
  // the streams, the signed params, and any additional fields.
  _appendForm (form, params, streamsMap, fields) {
    const sigData = this.calcSignature(params)
    const jsonParams = sigData.params
    const { signature } = sigData

    form.append('params', jsonParams)

    if (fields != null) {
      for (const [key, val] of Object.entries(fields)) {
        form.append(key, val)
      }
    }

    form.append('signature', signature)

    if (streamsMap) {
      Object.entries(streamsMap).forEach(([label, { stream, path }]) => {
        const options = path ? undefined : { filename: label } // https://github.com/transloadit/node-sdk/issues/86
        form.append(label, stream, options)
      })
    }
  }

  // Implements HTTP GET query params, handling the case where the url already
  // has params.
  _appendParamsToUrl (url, params) {
    const { signature, params: jsonParams } = this.calcSignature(params)

    const prefix = url.indexOf('?') === -1 ? '?' : '&'

    return `${url}${prefix}signature=${signature}&params=${encodeURIComponent(jsonParams)}`
  }

  // Responsible for including auth parameters in all requests
  _prepareParams (paramsIn) {
    let params = paramsIn
    if (params == null) {
      params = {}
    }
    if (params.auth == null) {
      params.auth = {}
    }
    if (params.auth.key == null) {
      params.auth.key = this._authKey
    }
    if (params.auth.expires == null) {
      params.auth.expires = this._getExpiresDate()
    }

    return JSON.stringify(params)
  }

  // We want to mock this method
  // eslint-disable-next-line class-methods-use-this
  _getExpiresDate () {
    const expiresDate = new Date()
    expiresDate.setDate(expiresDate.getDate() + 1)
    return expiresDate.toISOString()
  }

  // Responsible for making API calls. Automatically sends streams with any POST,
  // PUT or DELETE requests. Automatically adds signature parameters to all
  // requests. Also automatically parses the JSON response.
  async _remoteJson (opts, streamsMap, onProgress = () => {}) {
    const { urlSuffix, url: urlInput, timeout = this._defaultTimeout, method = 'get', params = {}, fields, headers } = opts

    // Allow providing either a `urlSuffix` or a full `url`
    if (!urlSuffix && !urlInput) throw new Error('No URL provided')
    let url = urlInput || `${this._endpoint}${urlSuffix}`

    if (method === 'get') {
      url = this._appendParamsToUrl(url, params)
    }

    log('Sending request', method, url)

    // Cannot use got.retry because we are using FormData which is a stream and can only be used once
    // https://github.com/sindresorhus/got/issues/1282
    for (let retryCount = 0; ; retryCount++) {
      let form

      if (method === 'post' || method === 'put' || method === 'delete') {
        form = new FormData()
        this._appendForm(form, params, streamsMap, fields)
      }

      const isUploadingStreams = streamsMap && Object.keys(streamsMap).length > 0

      const requestOpts = {
        retry  : this._gotRetry,
        body   : form,
        timeout,
        headers: {
          'Transloadit-Client': `node-sdk:${version}`,
          'User-Agent'        : undefined, // Remove got's user-agent
          ...headers,
        },
        responseType: 'json',
      }

      // For non-file streams transfer encoding does not get set, and the uploaded files will not get accepted
      // https://github.com/transloadit/node-sdk/issues/86
      // https://github.com/form-data/form-data/issues/394#issuecomment-573595015
      if (isUploadingStreams) requestOpts.headers['transfer-encoding'] = 'chunked'

      try {
        const request = got[method](url, requestOpts)
        if (isUploadingStreams) {
          request.on('uploadProgress', ({ transferred, total }) => onProgress({ uploadedBytes: transferred, totalBytes: total }))
        }
        const { body } = await request
        return body
      } catch (err) {
        if (!(err instanceof got.HTTPError)) throw err

        const { statusCode, body } = err.response
        logWarn('HTTP error', statusCode, body)

        const shouldRetry = statusCode === 413 && body.error === 'RATE_LIMIT_REACHED' && body.info && body.info.retryIn && retryCount < this._maxRetries

        // https://transloadit.com/blog/2012/04/introducing-rate-limiting/
        if (!shouldRetry) throw decorateError(err, body)

        const { retryIn: retryInSec } = body.info
        logWarn(`Rate limit reached, retrying request in approximately ${retryInSec} seconds.`)
        const retryInMs = 1000 * (retryInSec * (1 + 0.1 * Math.random()))
        await new Promise((resolve) => setTimeout(resolve, retryInMs))
        // Retry
      }
    }
  }
}

// See https://github.com/sindresorhus/got#errors
// Expose relevant errors
TransloaditClient.RequestError = got.RequestError
TransloaditClient.ReadError = got.ReadError
TransloaditClient.ParseError = got.ParseError
TransloaditClient.UploadError = got.UploadError
TransloaditClient.HTTPError = got.HTTPError
TransloaditClient.MaxRedirectsError = got.MaxRedirectsError
TransloaditClient.TimeoutError = got.TimeoutError

TransloaditClient.InconsistentResponseError = InconsistentResponseError

module.exports = TransloaditClient