text:
Land of The Nerds
Welcome to Land of The Nerds, where I, Douglas Laman, use my love of cinema to explore, review and talk about every genre of film imaginable!
Dragons Stay Atop The Box Office As Madea Goes Out On Strong Box Office Note And Greta Disappoints In First Weekend of The March 2019 Box Office
Back on Friday, it looked like a more neck-and-neck race for the top spot at the domestic box office between How to Train Your Dragon: The Hidden World and A Madea Family Funeral, but the animated dragons had the upper hand, though both titles managed to prosper over the first weekend of March 2019. The first seven weekends of 2019 might have been slow, but as this weekend shows, injecting some compelling titles into the marketplace will always get things back on track. Topping this frame was How to Train Your Dragon: The Hidden World with a $30 million second weekend haul. That's a 45% drop from last weekend, an improvement over the 50% drop of the second movie and the biggest second-weekend for any entry in the series. With $97.6 million after ten days of domestic play, The Hidden World looks like it'll make a serious play for a domestic total just over $200 million.
The final Madea film, A Madea Family Funeral, may not have topped the box office but it still grossed a great $27 million over the frame, the fourth biggest opening weekend for one of these Madea films. That's also the biggest opening weekend for a Lionsgate release since the $27.5 million bow of Wonder in November 2017, before that, you'd have to go back to March 2017 for the $40.3 million debut of Power Rangers for a bigger Lionsgate opening weekend. It's also the second biggest opening weekend for a comedy (only behind the $27.2 million debut of Night School) since Daddy's Home 2 in November 2017.
Moving on to more holdovers, in third place we find Alita: Battle Angel, which grossed $7 million this weekend, a 43% drop from last weekend for an underwhelming domestic total of only $72.2 million. The LEGO Movie 2: The Second Part actually held well this weekend with only a 31% dip for a fourth-weekend gross of $6.6 million but its domestic gross stands at only $91.6 million. Rounding out the top five was the most recent Best Picture winner Green Book (I know, I hate just writing that out) which went back into 2,641 locations this weekend and grossed another $4.7 million for a domestic total of $75.9 million. Right behind it was Fighting With My Family with $4.69 million, a 40% drop from last weekend, which isn't great for a title meant to be buoyed by strong word-of-mouth. Fighting With My Family has grossed only $14.9 million domestically. In its third weekend of release, Isn't It Romantic grossed another $4.64 million, a 34% drop from last weekend, for a domestic total of $40.2 million. Can this one get the extra $9.8 million it needs to crack $50 million domestically?
Our only other new wide release this weekend was Greta, which grossed only $4.5 million, a poor showing for a movie opening in over 2,400 locations. There's not much to say about this title, which didn't get much in the way of marketing and seemed to be an awkward release for Focus Features, which doesn't have a tremendous amount of experience marketing and releasing wide release thrillers. Both of those elements seemed to have been the key reasons behind its lackluster bow.
Moving on to the holdovers, What Men Want dropped 48% this weekend for a $2.7 million fourth weekend, bringing it up to a domestic total of $49.6 million. Happy Death Day 2U rounded out the top ten with a $2.5 million sum, a 48% drop from last weekend, for a $25.2 million domestic total which is still below the opening weekend of its predecessor. Fresh off its Best Animated Feature win at the Oscars, Spider-Man: Into The Spider-Verse went back into 2,404 locations and grossed another $2.1 million for a per-theater average of $874 and a fantastic domestic total of $187.3 million. The Upside kept on chugging this weekend as it dipped only 35% for an eighth weekend gross of $2 million for a domestic gross of $102.8 million. Also increasing its theater count this weekend, this time to show an extended cut, was A Star Is Born, which grossed $1.88 million from 1,235 locations for a $1,526 per-theater average in its 22nd weekend of release. This movie just keeps on going and going like the Energizer bunny! A Star Is Born has grossed $212.9 million.
NEON had a rough 2018 at the domestic box office save for the CNN Films documentary Three Identical Strangers. The studio kicked off their 2019 in excellent form with another CNN Films documentary, Apollo 11, which launched with $1.65 million from 120 IMAX locations for a per-theater average of $13,750, the biggest opening weekend ever for NEON. Maybe they should just stick to release documentaries? Cold Pursuit, in its fourth weekend of release, dropped 48% for another $1.6 million for a lackluster $29.9 million domestic gross. Yet another Oscar-winning movie to increase its theater count this weekend was Bohemian Rhapsody, which went back into 839 locations to gross $975,000 for a per-theater average of $1,162 and a domestic total of $214.4 million. Bohemian Rhapsody has now surpassed the $213.7 million domestic total of Solo: A Star Wars Story to crack the top ten biggest movies at the 2018 domestic box office.
The Favourite expanded back into 742 locations this weekend for an $825,000 15th weekend gross, a $1,112 per-theater average and a $33.2 million domestic total. Yet another Oscar winner, Free Solo, also made a location expansion this weekend, this time going back into 238 locations to gross another $364,100 for a per-theater average of $1,530 for a domestic total of $16.9 million. In its fifth weekend of limited release play, Arctic fell 27% from last weekend to gross another $362,124 from 268 locations for a per-theater average of $1,351 and a domestic total of $1.6 million. Ralph Breaks The Internet added $233,000 to its domestic gross this weekend, which finally took the title past the $200 million mark domestically. With $200.1 million, Ralph Breaks The Internet is now the fourteenth title of 2018 to crack $200 million domestically. Furie got off to a $145,400 start this weekend from only 14 locations for a per-theater average of $10,386 while the first A24 release in nearly five months, Climax, opened to $121,655 from 5 locations for a per-theater average of $24,331. That's actually one of the stronger domestic starts for a super limited release foreign-language film in a good long while and indicates A24 could take this one to a domestic run that far surpasses the ones seen by prior Gaspar Noe directorial efforts. Finally, Transit opened to $35,368 from 2 locations for a per-theater average of $17,684 while Giant Little Ones opened to $13,500 in a single location.
The top 12 movies this weekend grossed a title of $98.7 million, only the tenth biggest ninth weekend in any given year and it's down 29% from this same weekend last year. However, this isn't far off from the average sums seen in years past and it's actually up from the same weekend in 2016, 2015 and 2013.
Posted by Douglas Laman (NerdInTheBasement) at 10:36 AM
Labels: Box Office Analysis
Writing by Douglas Laman for Other Websites
Douglas Laman (NerdInTheBasement)
Douglas Laman is a life-long movie fan and writer whose works have appeared in outlets ranging from The Mary Sue to ScreenRant to The Spool to ScarleTeen. Residing both on the Autism spectrum and in Texas, Doug adores pugs, showtunes, Fantastic Mr. Fox and any music by Carly Rae Jepsen. Having already procured a Bachelor of Arts from the University of Texas at Dallas, Douglas Laman is currently preparing to pursue a Master of Arts from the University of Texas at Dallas.
Dumbo Debut, Unlike Unplanned, Disappointing, Beac...
Tim Burton's Take On Dumbo Results In A Perfunctor...
Half of Grindhouse Is Utterly Sublime, But The Oth...
Endlessly Inventive Filmmaking Is One of The Many ...
Ed Wood Provides A Thoughtful Ode To The Man Behin...
Paddleton Serves Up An Emotionally Affecting Portr...
In Laman's Terms: The Best Late Period Tim Burton ...
Us Only Gets More Terrifying The More One Thinks O...
All of The Fun Found In Shazam! Comes From Total C...
Former Gremlins 2 Creative Consultant Jordan Peele...
Half Nelson Tackles Two Troubled Human Beings With...
Hotel Mumbai Has A Grim Tone & Tons of Gunfire But...
Denzel Washington Delivers Some of His Best Work A...
In Laman's Terms: The Evolving Depiction of Identi...
Vincent D'Onofrio's Directorial Debut The Kid Is A...
Putting It All On Two Great Lead Performances And ...
Captain Marvel Continues To Soar At The Top of Dom...
Kiss Me Deadly Is A Fascinating Reflection of 1955...
Ezra Miller Might Not Be Playing The Flash In The ...
Monty Python and the Holy Grail Shatters The Fourt...
Triple Frontier, Thankfully, Evokes Treasure of th...
In Laman's Terms: Why Do Disney's Memorial Day Wee...
Crowdpleasing Classical Romance Gets Done Right In...
Sugar Is A Departure From Typical Sports Movies An...
"Higher, Further, Faster" Indeed, Captain Marvel S...
Fighting With My Family Is A Heartfelt And Delight...
What A Twist!: Captain Marvel Spoiler Discussion (...
Willem Dafoe Delivers A Haunting Lead Turn In The ...
The Wandering Earth Looks Pretty But Its Character...
Captain Marvel Has A Great Mixture of Cosmic Weird...
Clifton Webb Steals The Whole Show In The Excellen...
Hale County: This Morning, This Evening Is A Trans...
The Hills Are Alive With Ambition In The Sound of ...
Dragons Stay Atop The Box Office As Madea Goes Out...
Milk Is A Stirring Examination of An Everyday Huma...
The Curious Case of Benjamin Button's Unique Story...
All images on this website are used under fair use and belong to their respective owners.. Watermark theme. Powered by Blogger.


Very exciting news. We were awarded three more Queensland National Trust Awards for 2013. A High Commendation Govenror's Award was received for the Year Two Mudgeeraba Discovery Walk, A Silver Community Award for the Commemorations Project for th eLight Horse Museum, and a Gold Governors Award for the work done for Gold COast City Council on the Heritage Program of work. Great news for us – and excellent for the Gold Coast – not generally renowned for its heritage.


The history of this station and hill is mainly credited to the abundance of bananas in the area. The locals make use of "umubaga" which is the first juice squeezed out of the banana in order to brew beer, one of the many home-made brews the country so fondly makes. The word "umubaga" is also where the hill and station get their names, showing just how influential the bananas are in the area. The sub-hill of Butare which houses Rubagabaga station is particularly well known for holding large deposits of good quality clay which contributes to a lot of brick making. The word "butare" actually means jewel or precious stone although there's no record or tale of anything relating to jewels in the area. The station hasn't always had it easy, it's actually the which experiences the most competition as there are quite a few other stations in the area, that and it was burnt down by rebels in 1997 relating to all the political unrest in the country.


text:
IT education and training
Education secretary urges tech industry to transform classrooms
Education secretary Damian Hinds has called upon large technology firms to use tech to tackle some of the biggest issues in schools
Clare McDonald, Business Editor
Damian Hinds, the UK's education secretary, has urged the technology industry to help schools overcome common issues in the classroom.
Although schools, universities and colleges choose the technology tools best suited to their needs and budgets, they are quite often ill equipped to do so, and could use the help of the industry to make the best choices, as well as roll out technologies more widely, he said.
"I've been fortunate enough to see technology being used in revolutionary ways," said Hinds. "Students are able to explore the rainforest, steer virtual ships or programme robots from their classroom, while teachers are able to access training, share best practice with colleagues and update parents on a pupil's progress without being taken away from their main focus – teaching."
Collaboration between industry, education providers and the government has often been cited as the best way to address the UK's growing skills gap.
He said the UK should build partnerships between government, tech providers and the education sector to solve the problems in the latter.
Hinds also highlighted five main areas where the technology industry could help to promote changes to the education system, including reducing administration processes, improving efficiency and effectiveness of assessments, developing support for teachers and educators so they can learn and develop their skills, supporting access and inclusion to education, and developing digital solutions which promote lifelong learning.
The Department for Education will be working with the Chartered College of Teaching, the British Educational Suppliers Association and other industry leaders over the next few months to build and showcase an online portal with training packages and free software trials for schools.
Read more about technology skills
The majority of employers in the UK believe they will be facing a shortage of skilled technology professionals in the next year.
The Science and Technology Committee has released a report proposing new rules surrounding the immigration of skilled workers once Brexit has come into force.
It will also be working with businesses and schools to ensure the right infrastructure is in place to start adopting new technologies.
Part of the difficulty for teachers when trying to encourage young people into technology careers is that they often don't know what roles in the industry involve, and they already have so much to deal with such as administrative tasks.
By working with the technology industry to implement technology solutions that can save time and support teachers, Hinds said teachers will be able to better focus on their pupils.
In the Spring of 2018, the government announced a programme which would help to train more computing teachers, and the government's Autumn Budget also ensured most schools will have access to ultrafast broadband to make better use of tech.
Caroline Wright, Director General at the British Educational Suppliers Association, said: "I am delighted the Department for Education's plans place teacher training and support at the heart and soul of their future approach to EdTech and recognises that EdTech, when introduced as part of a whole school strategy, has the power to help improve pupil outcomes, save teacher time and reduce workload burdens."
Many believe schools and the curriculum are not fit to cope with the growing digital skills gap in the UK, and the government has put a lot of emphasis over the last year on investing in the education system to boost the nation's tech skills.
Read more on IT education and training
Government to provide 100,000 devices for remote learning
By: Clare McDonald
UK teachers want more computers in schools
By: Angelica Mari
Brexit an opportunity for global collaboration on edtech, says universities minister
BETT: Lenovo calls for more tech investment
By: Simon Quicke
Education minister calls for industry and educator ... – ComputerWeekly.com
Government invests £10m in education technology ... – ComputerWeekly.com
We need to be flexible to address future skills needs... – ComputerWeekly.com

redpajama_set_name: RedPajamaCommonCrawl


text:
Home News Briefs Argand promotes three
Argand promotes three
Argand Partners has promoted Joyce Schnoedl to partner; Dino Sawaya to principal; and Janel Maki to operations manager. Based in New York and the San Francisco Bay area, Argand is a middle-market buyout firm.
Argand Partners, the New York and San Francisco Bay Area-based middle market buyout firm, is pleased to announce the promotion of Joyce Schnoedl to Partner; Dino Sawaya to Principal; and Janel Maki to Operations Manager.
"Joyce provides important leadership across our firm in sourcing and executing complex deals. Her ability to identify and generate opportunities by navigating complexity and continually expanding relationships is a significant asset," commented Tariq Osman, Partner of Argand. Ms. Schnoedl has most recently been a Principal at Argand and has worked with several portfolio companies, including Sigma Electric Manufacturing Corp, Brintons Carpets, Ltd., and Concrete Pumping Holdings. Earlier in her career, Ms. Schnoedl had worked at Castle Harlan, J.H. Whitney, and Goldman Sachs. She graduated Cum Laude from Harvard University with a B.A. in Economics and received her M.B.A. from the Harvard Business School.
"Dino has demonstrated strong investment acumen and has a proven ability to balance the many competing demands of complex deals. We are excited to recognize Dino's important contributions to the firm," remarked Heather Faust, Partner of Argand. Mr. Sawaya has most recently been a Vice President at Argand. He previously worked at CHAMP Private Equity and Deutsche Bank. Mr. Sawaya graduated with Distinction from The University of New South Wales with a Bachelor of Commerce in Finance and Financial Economics and holds a Bachelor of Laws with First Class Honors from The University of Sydney.
"Janel plays a central role on the operations team and has taken on increasing responsibility related to managing the firm's administration, reporting, and compliance," stated Joe Del Toro, Partner of Argand. Ms. Maki has most recently been an Executive Assistant to the CFO at Argand, working on fund administration and special projects. She has worked at Salmon River Capital, StoneWater Capital, Price Waterhouse, and The Rockefeller University. Ms. Maki graduated Magna Cum Laude from Long Island University/C.W. Post with a B.A. in International Relations.
ABOUT ARGAND PARTNERS
Argand is a New York- and San Francisco Bay Area-based middle market buyout firm founded in 2015 by long-time colleagues, Heather Faust, Howard D. Morgan, and Tariq Osman. Argand is a growth-oriented, control investor focused on complex, often contrarian, situations that involve solid, market-leading industrial businesses, often with significant global operations and expansion opportunities. Argand has approximately $600 million in assets under management. Argand's portfolio includes Sigma Electric Manufacturing Corp., Brintons Carpets Ltd., Oase Living Water GmbH, and Concrete Pumping Holdings, Inc.
The Argand team has a disciplined approach of investing in businesses that have the potential for transformational value creation and growth through the implementation of managerial, operating, and strategic initiatives. Argand focuses on investments into manufacturers and service providers, where the team has deep sector experience and can leverage its senior executive advisory network to drive the rapid execution of an investment thesis.
Further information on Argand can be found on the website: www.argandequity.com.


text:
define(
   ({
    instruction: "Selecciona y configura las capas que se mostrarán en la tabla de atributos al principio.",
    label: "Capa",
    show: "Mostrar",
    actions: "Configurar campos de capa",
    field: "Campo",
    alias: "Alias",
    visible: "Visible",
    linkField: "Campo de vínculo",
    noLayers: "No hay capas de entidades disponibles",
    back: "Atrás",
    exportCSV: "Permitir exportación a CSV",
    expand: "Expandir inicialmente el widget",
    filterByExtent: "Habilita Filtrar por extensión de mapa de forma predeterminada",
    restore: "Restaurar al valor predeterminado",
    ok: "Aceptar",
    cancel: "Cancelar",
    configureLayerFields: "Configurar campos de capa",
    result: "Guardado correctamente",
    warning: "Selecciona primero la opción Mostrar.",
    fieldCheckWarning: "Se debe seleccionar al menos un campo.",
    unsupportQueryWarning: "La capa debe ser compatible con la operación de consulta para aparecer en el widget Tabla de atributos. Asegúrate de que la función de consulta en el servicio está activada.",
    unsupportQueryLayers: "La capa siguiente debe ser compatible con la operación de consulta para aparecer en el widget Tabla de atributos. Asegúrate de que la función de consulta en el servicio está activada.",

    fieldName: "Nombre",
    fieldAlias: "Alias",
    fieldVisibility: "Visibilidad",
    fieldActions: "Acciones"
  })
);

redpajama_set_name: RedPajamaGithub


text:
"The World's Most Dangerous Trail" Reopens This Week
A once-deadly path is now a modern tourist attraction
Matt Blitz
Restoration work being done on the El Caminito Del Ray. Clive Muir
Journalists walk along the new Caminito del Rey in El Chorro-Alora, March 15, 2015. © JON NAZCA/Reuters/Corbis
Journalists walk along the new Caminito del Rey in El Chorro-Alora, March 15, 2015. © JON NAZCA/Reuters/Corbi
Journalists walk along the new Caminito del Rey in El Chorro-Alora. © JON NAZCA/Reuters/Corbis
A journalist walks along the new Caminito del Rey in El Chorro-Alora, March 15, 2015. © JON NAZCA/Reuters/Corbis
The new Caminito del Rey (The King's Little Pathway) is seen in El Chorro-Alora. March 15, 2015. © JON NAZCA/Reuters/Corbis
El Caminito Del Ray circa 1998, prior to restoration work. Clive Muir
The El Caminito Del Ray prior to restoration work. Clive Muir
It's only three feet wide, clinging to a sheer cliff. Three hundred feet below lies a rocky gorge and the Guadalhorce River. Its 1.9 miles provide stunning views of southern Spain's natural beauty. The El Caminito del Rey, once called "the world's most dangerous path," has been in disrepair for nearly a hundred years. But on March 28, coinciding with Spain's Holy Week, the walkway near the small Spanish village of El Chorro will officially reopen for the first time in over ten years, thanks to a reported $5.8 million restoration effort that has made the trail safe and accessible for hikers.
The path was originally constructed between 1901 and 1905 as an access road to connect two local hydroelectric sites. At the time, it was considered state of the art, with concrete, steel rails, lights and barriers for safety. It soon became part of local villagers' daily lives: day and night, people would walk, bike and ride horses across the path—women going shopping in the next village, children going to and from school, men using it to get between the hydroelectric sites. In 1921, King Alfonso XIII walked the path when he attended the opening of the nearby Conde del Guadalhorce dam, which led locals to name it El Caminito del Rey ("The King's Little Pathway").
Over time, locals began to use the path less and less. Neglect left it crumbling and dangerous, with giant chunks of concrete falling into the river below. Nonetheless, adventurers flocked to the spot, willing to risk their lives for the thrill and amazing views. In 1999 and 2000, several people fell to their death from the path, and after that, local governments declared it officially closed, demolishing the entry points and imposing a hefty fine to discourage trespassers.
Their efforts didn't work, and with the rise of YouTube and GoPro cameras the El Caminito del Ray became even more popular with thrill seekers. Clive Muir, a local photographer, writer and operator of the tourism site Caminodelray.es, says the path's popularity really took off over the last decade. "Fame came when a few climbers 'found' it and their videos went viral on YouTube. That's when it really became a mecca for radical adrenalin junkies," he notes.
In the late 2000s, local governments decided there was enough interest—and danger—associated with the path to mount a restoration effort. After raising the millions required, work began in March 2014. An estimated 500 tons of metal and concrete were used to fortify, rebuild, strengthen and resurrect the route.
A year later, the El Caminito del Ray is safely re-opening, with all the features of a modern-day attraction: timed tickets, a museum and a visitors' center. Surrounding communities hope the reopening will bring more tourism and money to the region. However, there is some opposition from climbers upset that the path and gorge are becoming more public. "Many climbers that come from all over the world feel that their mecca has been destroyed and, in a way, it has been," Muir says. Yet as a local, he fully supports the project, believing the influx of visitors will ultimately help his home: "There will be a great improvement for many local businesses in an area that largely has been forgotten in the tourism market."
But for those considering a trip, hold off on booking that flight. There are no more tickets available in April or May (there is a limit of 600 people per day) and no other tickets have been released for dates down the line. However, authorities say that more tickets will eventually be available, offering the opportunity to see the once-dangerous trail in relative safety.
Matt Blitz | | READ MORE
Matt Blitz is a history and travel writer. His work has been featured on CNN, Atlas Obscura, Curbed, Nickelodeon, and Today I Found Out. He also runs the Obscura Society DC and is a big fan of diners.
European History Travel


text:
spiritnow Stories
Global Maps
Proxy Statement
U.S. Interest Owners
ConocoPhillips Center
Asia Pacific & Middle East
New International Ventures
Commercial Gas & Power
LNG Technology & Licensing
Safety, Health & Security
Integrating Sustainability
Managing Climate-Related Risks
Managing Local Environmental Risks
Creating Shared Value
Custom Sustainability Report Builder
ConocoPhillips Reports First-Quarter 2020 Results; Announces Quarterly Dividend and Additional Curtailments
HOUSTON – ConocoPhillips (NYSE: COP) today reported a first-quarter 2020 loss of $1.7 billion, or ($1.60) per share, compared with first-quarter 2019 earnings of $1.8 billion, or $1.60 per share. Excluding special items, first-quarter 2020 adjusted earnings were $0.5 billion, or $0.45 per share, compared with first-quarter 2019 adjusted earnings of $1.1 billion, or $1.00 per share. Special items for the current quarter were primarily driven by an unrealized loss on Cenovus Energy equity and price-driven non-cash impairments.
Quarterly Dividend
The company also announced a quarterly dividend of 42 cents per share, payable June 1, 2020, to stockholders of record at the close of business on May 11, 2020.
First-Quarter Highlights
Cash provided by operating activities was $2.1 billion. Excluding working capital, cash from operations (CFO) was $1.6 billion.
Ended the quarter with cash, cash equivalents and restricted cash totaling $4.2 billion and short-term investments of $3.9 billion, equaling more than $8.0 billion in ending cash and short-term investments.
Ended the quarter with approximately $14 billion of liquidity, including $6 billion of available revolving credit facility.
Repurchased $0.7 billion of shares and paid $0.5 billion in dividends.
Achieved first-quarter production, excluding Libya, of 1,278 MBOED.
Produced 399 MBOED from the Lower 48 Big 3 unconventionals.
Started up first Montney pad and infrastructure.
Generated $0.5 billion in disposition proceeds from Lower 48 non-core asset sales.
First-Quarter Review
Production excluding Libya for the first quarter of 2020 was 1,278 thousand barrels of oil equivalent per day (MBOED), a decrease of 40 MBOED from the same period a year ago. Adjusting for closed and pending dispositions, production increased 52 MBOED primarily due to growth from the Big 3, as well as development programs in Europe, Asia Pacific and Lower 48. This growth more than offset normal field decline and impacts from a third-party pipeline outage on the Kebabangan Field in Malaysia. Production from Libya averaged 11 MBOED.
In the Lower 48, production from the Big 3 averaged 399 MBOED, including Eagle Ford of 233 MBOED, Bakken of 96 MBOED and Permian Unconventional of 70 MBOED. In Alaska, the company progressed construction on the multi-year GMT-2 project, which remains on track for startup in late 2021. The company also completed drilling two wells to further appraise the Willow discovery and one well to test the Harpoon prospect, prior to early termination of the 2020 winter exploration program to minimize risks associated with COVID-19. In Canada, the first phase of development at Montney was initiated with the startup of a 14-well pad and associated infrastructure. Additionally, a planned 24-day turnaround in Qatar was completed.
Earnings decreased from first-quarter 2019 due to a change in Cenovus Energy equity market value, lower realized prices, and price-driven non-cash impairments. Excluding special items, adjusted earnings were lower compared with first-quarter 2019 due to lower realized prices and volumes, partially offset by decreases in operating costs. Dry hole and lease impairment expenses totaled $67 million pre-tax for the quarter, primarily for the Kamunsu East Field in Malaysia that is no longer in our development plans, as well as a dry hole in Norway. The company's total average realized price was $38.81 per barrel of oil equivalent (BOE), 23 percent lower than the $50.59 per BOE realized in the first quarter of 2019, reflecting lower marker prices.
For the quarter, cash provided by operating activities was $2.1 billion. Excluding a $0.5 billion change in operating working capital, ConocoPhillips generated CFO of $1.6 billion. CFO included a non-cash downward inventory valuation adjustment of $0.2 billion driven by lower commodity prices, which was offset in operating working capital. The company also generated $0.5 billion in disposition proceeds from the sale of the Lower 48 Niobrara and Waddell assets. In addition, the company funded $1.6 billion of capital expenditures and investments, repurchased $0.7 billion of shares, and paid $0.5 billion in dividends. Capital expenditures and investments included approximately $0.1 billion for payments toward the 2019 Argentina acreage acquisition, as well as bolt-on acquisitions in Lower 48. The company also purchased $0.9 billion of short-term and long-term financial instruments.
Upcoming operational activities for the company include several seasonal turnarounds and maintenance projects typically conducted in the second and third quarters each year. These activities are planned in Alaska, Norway and various areas in the Asia Pacific region.
The company recently announced that it expects to voluntarily curtail production due to weak prices. Voluntary curtailments for the month of May are now estimated to be 265 thousand barrels of oil per day (MBOD) gross, comprised of 165 MBOD gross in the Lower 48 and 100 MBOD gross at Surmont. This represents approximately 230 MBOED on a net basis.
The company currently estimates voluntary curtailments for the month of June will be 460 MBOD gross, comprised of 260 MBOD gross in the Lower 48, 100 MBOD gross at Surmont and 100 MBOD gross in Alaska. This represents approximately 420 MBOED on a net basis.
Future voluntary curtailment decisions across our areas of operations will be made on a month-by-month basis. Daily net barrel oil equivalent impacts may vary from estimates due to differences in working interests and product mixes.
The company also expects some level of additional curtailments from infrastructure constraints, actions from partner-operated assets or government mandates.
Given ongoing uncertainty, continued market volatility, and production curtailments over the coming months, the company recently announced that its original 2020 guidance items should not be relied upon and that further guidance has been temporarily suspended. During this suspension, the company may provide periodic updates, as appropriate. In addition, the previously provided net income and cash flow sensitivities should not be relied upon as current marker prices are outside the reference price ranges to which the previous sensitivities applied.
ConocoPhillips will host a conference call today at 12:00 p.m. Eastern time to discuss this announcement. To listen to the call and view related supplemental information, go to www.04pia.com/investor.
--- # # # ---
About ConocoPhillips
Headquartered in Houston, Texas, ConocoPhillips had operations and activities in 17 countries, $65 billion of total assets, and approximately 10,400 employees as of March 31, 2020. Production excluding Libya averaged 1,278 MBOED for the three months ended March 31, 2020, and proved reserves were 5.3 BBOE as of Dec. 31, 2019. For more information, go to www.04pia.com.
John C. Roper (media)
john.c.roper@conocophillips.com
investor.relations@conocophillips.com
CAUTIONARY STATEMENT FOR THE PURPOSES OF THE "SAFE HARBOR" PROVISIONS OF THE PRIVATE SECURITIES LITIGATION REFORM ACT OF 1995
This news release contains forward-looking statements as defined under the federal securities laws. Forward-looking statements relate to future events and anticipated results of operations, business strategies, and other aspects of our operations or operating results. Words and phrases such as "anticipate," "estimate," "believe," "budget," "continue," "could," "intend," "may," "plan," "potential," "predict," "seek," "should," "will," "would," "expect," "objective," "projection," "forecast," "goal," "guidance," "outlook," "effort," "target" and other similar words can be used to identify forward-looking statements. However, the absence of these words does not mean that the statements are not forward-looking. Where, in any forward-looking statement, the company expresses an expectation or belief as to future results, such expectation or belief is expressed in good faith and believed to be reasonable at the time such forward-looking statement is made. However, these statements are not guarantees of future performance and involve certain risks, uncertainties and other factors beyond our control. Therefore, actual outcomes and results may differ materially from what is expressed or forecast in the forward-looking statements. Factors that could cause actual results or events to differ materially from what is presented include the impact of public health crises, such as pandemics (including coronavirus (COVID-19)) and epidemics and any related company or government policies and actions to protect the health and safety of individuals or government policies or actions to maintain the functioning of national or global economies and markets; global and regional changes in the demand, supply, prices, differentials or other market conditions affecting oil and gas and the resulting company actions in response to such changes, including changes resulting from the imposition or lifting of crude oil production quotas or other actions that might be imposed by the Organization of Petroleum Exporting Countries and other producing countries; changes in commodity prices; changes in expected levels of oil and gas reserves or production; operating hazards, drilling risks, unsuccessful exploratory activities; unexpected cost increases or technical difficulties in constructing, maintaining, or modifying company facilities; legislative and regulatory initiatives addressing global climate change or other environmental concerns; investment in and development of competing or alternative energy sources; disruptions or interruptions impacting the transportation for our oil and gas production; international monetary conditions and exchange rate fluctuations; changes in international trade relationships, including the imposition of trade restrictions or tariffs on any materials or products (such as aluminum and steel) used in the operation of our business; our ability to collect payments when due under our settlement agreement with PDVSA; our ability to collect payments from the government of Venezuela as ordered by the ICSID; our ability to liquidate the common stock issued to us by Cenovus Energy Inc. at prices we deem acceptable, or at all; our ability to complete our announced dispositions or acquisitions on the timeline currently anticipated, if at all; the possibility that regulatory approvals for our announced dispositions or acquisitions will not be received on a timely basis, if at all, or that such approvals may require modification to the terms of our announced dispositions, acquisitions or our remaining business; business disruptions during or following our announced dispositions or acquisitions, including the diversion of management time and attention; the ability to deploy net proceeds from our announced dispositions in the manner and timeframe we currently anticipate, if at all; potential liability for remedial actions under existing or future environmental regulations; potential liability resulting from pending or future litigation; the impact of competition and consolidation in the oil and gas industry; limited access to capital or significantly higher cost of capital related to illiquidity or uncertainty in the domestic or international financial markets; general domestic and international economic and political conditions; changes in fiscal regime or tax, environmental and other laws applicable to our business; and disruptions resulting from extraordinary weather events, civil unrest, war, terrorism or a cyber attack; and other economic, business, competitive and/or regulatory factors affecting our business generally as set forth in our filings with the Securities and Exchange Commission. Unless legally required, ConocoPhillips expressly disclaims any obligation to update any forward-looking statements, whether as a result of new information, future events or otherwise.
Cautionary Note to U.S. Investors – The SEC permits oil and gas companies, in their filings with the SEC, to disclose only proved, probable and possible reserves. We may use the term "resource" in this news release that the SEC's guidelines prohibit us from including in filings with the SEC. U.S. investors are urged to consider closely the oil and gas disclosures in our Form 10-K and other reports and filings with the SEC. Copies are available from the SEC and from the ConocoPhillips website.
Use of Non-GAAP Financial Information–To supplement the presentation of the company's financial results prepared in accordance with U.S. generally accepted accounting principles (GAAP), this news release and the accompanying supplemental financial information contain certain financial measures that are not prepared in accordance with GAAP, including adjusted earnings (calculated on a consolidated and on a segment-level basis), adjusted earnings per share and cash from operations (CFO).
The company believes that the non-GAAP measures adjusted earnings (both on an aggregate and a per-share basis) are useful to investors to help facilitate comparisons of the company's operating performance associated with the company's core business operations across periods on a consistent basis and with the performance and cost structures of peer companies by excluding items that do not directly relate to the company's core business operations. The company further believes that the non-GAAP measure CFO is useful to investors to help understand changes in cash provided by operating activities excluding the timing effects associated with operating working capital changes across periods on a consistent basis and with the performance of peer companies. The company believes that the above-mentioned non-GAAP measures, when viewed in combination with the company's results prepared in accordance with GAAP, provides a more complete understanding of the factors and trends affecting the company's business and performance. The company's Board of Directors and management also use these non-GAAP measures to analyze the company's operating performance across periods when overseeing and managing the company's business.
Each of the non-GAAP measures included in this news release and the accompanying supplemental financial information has limitations as an analytical tool and should not be considered in isolation or as a substitute for an analysis of the company's results calculated in accordance with GAAP. In addition, because not all companies use identical calculations, the company's presentation of non-GAAP measures in this news release and the accompanying supplemental financial information may not be comparable to similarly titled measures disclosed by other companies, including companies in our industry. The company may also change the calculation of any of the non-GAAP measures included in this news release and the accompanying supplemental financial information from time to time in light of its then existing operations to include other adjustments that may impact its operations.
Reconciliations of each non-GAAP measure presented in this news release to the most directly comparable financial measure calculated in accordance with GAAP are included in the release.
Other Terms –This news release also contains the terms liquidity and underlying production. Liquidity includes cash, cash equivalents, short-term investments and available borrowing capacity under the company's revolving credit facility. The company believes liquidity is useful to investors to provide insight into the company's ability to fund its business plans and debt obligations. Underlying production excludes Libya and reflects the impact of closed and pending dispositions with an assumed close date of January 1, 2019. The company believes that underlying production is useful to investors to compare production excluding Libya and reflecting the impact of closed and pending dispositions on a consistent go-forward basis across periods and with peer companies.
References in the release to earnings refer to net income/(loss) attributable to ConocoPhillips.
Sustainability Report Builder
925 N. Eldridge Parkway (77079-2703)
P.O. Box 2197,	Houston, TX 77252-2197
© 2020 ConocoPhillips Company. All Rights Reserved. Terms & Conditions Privacy
Your PDF is Ready
成年女子黄网站色大全_色香欲天天天影视综合网_亚洲色最大色综合网站


text:
Gok Wan reveals he went to first rave aged 13 as he plans nation's biggest New Year's Eve party
Josh LaytonFriday 27 Nov 2020 10:50 pm
Gok Wan is planning to lend his national treasure status to a huge online dance music party on New Year's Eve (Picture: Getty/Rex)
Gok Wan is planning what could be could be the country's biggest New Year's Eve rave after a 'mind-blowing' response to his online DJ sets.
The party animal has already had 1.2million people tune in to one of his 'Isolation Nation' parties which he live-streams on Facebook.
Gok said that uniting house music fans has lifted him during what has been one of the hardest years of his life in the Covid-19 lockdowns.
He has been inundated with messages from fans worldwide who have said his sets from his home in London have also raised their spirits.
Gok might be an establshed fashion icon, author and chef but he has solid dance music credentials, having been a professional DJ for six years.
As a teenager growing up in Leicester, he was never far from the decks and went to his first rave when he was just 13.
Gok said: 'When I was younger I was very isolated within my own husk of a body and my paranoia about things like my sexuality.
https://www.instagram.com/p/CHbIqwlD-CM/
'I suddenly found a community of people in a warehouse in Coventry at a rave called Nemesis.
'I was very underage to be at a rave but I was there with my friends and nobody cared what I looked like or how I spoke or who I was, I was still discovering who I was at the time.
'We were all brought together by Grooverider, who was one of the DJs on the night. It was such a euphoric moment. I fell in love with house music and I have loved it ever since.'
A huge admirer of dance music legend Frankie Knuckles, the 46-year-old's kitchen sets are uplifting mixes with soulful vocals and infectious beats influenced by the Chicago house scene.
'It I did for a bit of fun at first to get people together and when I got a thousand people I was pleased,' Gok said.
'It was incredible to see how quickly the figures grew as I tapped into what I guess was a national need.
'It became very tribalistic, the response was just mind-blowing.'
At one point 1.2million people tuned in as he went into the mix, which he combines with a chatty repertoire to the camera and vodka mixers..
Gok went to his first rave aged 13 (Picture: EDUARD MUZHEVSKYI / SCIENCE PHOTO LIBRARY)
Isolation Nation was born out of Gok wanting to connect with others in times when he admits suffering from a lack of social contact.
'It's been one of the most trying years of my life,' he said.
'I'm a very sociable person and really enjoy my freedom, I like to work hard and go out a lot, whether it's dinner or drinks or clubbing or DJing or whatever.
'I felt like I'd had all of my freedom taken away. But Isolation Nation wasn't a selfish act.
More: Gok Wan
Gok Wan reveals secret ingredient to take your Chinese fakeaway to the next level
Rylan Clark-Neal asked for Gok Wan's blessing before taking on new fashion show
Gok Wan teaches how to make yummy sweet and sour chicken with simple recipe
'I needed to dance, connect with people and know there was hope at the end of this.'
Isolation Nation has spawned a CD and collaborations with the Defected Records label and leading house music artists.
Joining forces with Club Class Music Management and Creative Artists Agency, Gok now plans to turn the online energy into real-world parties.
He said: 'The virtual parties will stay but will become less frequent when we come out of lockdown properly and, fingers crossed, we have vaccinations and everything else.
Have your ordered yet Nationers? The CD is on pre-oder from https://t.co/pBEzeM5rgi (please see link in my bio) or Amazon https://t.co/spVToCxMUu https://t.co/rKis35SEUP
— Gok Wan MBE 🌈 (@therealgokwan) November 9, 2020
'But we are going to make the virtual a reality, we have all these plans for next year.
'We want to take it on the road and do a tour to say thankyou to everyone for listening and provide an opportunity for everyone to see each other.
'We can see on the feed how people have got to know each other but have never met in real life.
'On top of that I would love to take Isolation Nation into a residency in Ibiza, there's real scope for it with this vocal, disco-house.
'A lot of fans of Isolation Nation know these tunes from the first time round and I want to give them an opportunity to get back out there where they won't be judged for their age or what they're wearing, exactly what happened to me in Coventry when I was a kid.'
For the time being, Isolation Nation will keep spreading the love online once or twice a week, depending on Gok's filming commitments.
He is preparing to see in 2021 with what could be the biggest party in town.
'At Christmas I want to hold a big party and then I'm working on ideas for New Year's Eve, when it's safe to assume we won't be in clubs,' Gok said.
'If we could get seven hundred thousand to a million people tuned in over the course of many hours it could be one of the biggest parties thrown.'
Get in touch with our news team by emailing us at webnews@metro.co.uk.
For more stories like this, check our news page.
Gok Wan
Stormzy and Chip feud reignited with scathing new diss track as Ghetts speaks out: 'Nothing to do with me'
Everything you need to know about the drama behind Olivia Rodrigo's Drivers License
Strictly Come Dancing's Maisie Smith in talks for pop career: 'Record labels are desperate to sign her'
New Radicals reuniting after 22 years for Joe Biden inauguration and we suppose You Get What You Give
Myleene Klass has no interest in Hear'Say reunion: 'We're grannies and on second marriages'
Home › Entertainment › Music


According to author Christopher Booker, there are seven basic plots for stories, and nearly every tale we tell falls into one of those categories. By definition this extends to advertising, especially story-driven media like TV and online video.
But the type of story marketers choose to tell can have a big impact on how their video ads perform. An internal PointRoll study pulled nearly 1,000 video campaigns at random and found that interaction rates, completion rates, and click-through rates varied depending on the kind of story told in the video ad.
Here's a guide to the seven kinds of stories, as well as what to expect performance-wise when working within each category (for creative examples, consult this roundup).
This is the classic underdog story, and it's one of the most popular storylines, accounting for more ads in our study than any other category (and more impressions). Overcoming the monster videos also scored very highly on several video KPIs, driving interaction rates higher than most other kinds of plots, while achieving favorable completion rates. Click-throughs, while not necessarily the best indication of performance, were also noteworthy in this category, scoring the second highest rate among the seven story types. When you look at the different verticals that used this kind of story, pharmaceutical and travel scored the highest levels of interaction.
This tells the story of renewal. It was one of the least popular storyline types, but was popular in healthcare, pharma and professional services. Rebirth ads were the middle of the road when it came to the study, finishing in the bottom half for completion rate, interactions and click-throughs. Rebirth is a difficult idea to leverage. It may work for health-related campaigns, but it's not always a good fit performance-wise.
Quest stories should be very familiar to anyone whose evening routine involves inventing bedtime stories for their children where a hero travels from point A to point B. Quest videos were far and away the best when it comes to click-throughs, scoring a 0.8% CTR. Quest videos also scored second highest for interaction, showing that viewers are clearly attracted to the creative and are mousing over it. Clicks are becoming less important in advertising circles, but if the goal is to use video to drive awareness or site traffic, then quest-themed creative makes sense.
This is pretty straightforward: a story about transformation through a journey and then homecoming. These videos scored very well in completion rate. More than 40% of viewers watched the first 25% of the video, which was a good mark, and journey and return stories are really good at getting viewers to stick around. Just shy of 30% of viewers watched a video to the end, the second highest mark in the study. Consider this creative type if you're looking to drive completions.
Rags to riches storytelling is about rising from the ashes to achieve prominence, and it's a very interesting example when you look at the performance metrics. Rags to riches videos had the lowest performance for CTR and the second-lowest interaction rate. But somewhat amazingly, these story lines were far and away the best performers for completion rate. Nearly half of viewers watched the first quarter of a video, and 35% watched all the way through. In fact, viewers were more likely to watch a rags to riches video ad in its entirety than they were to watch the first quarter of a comedy or tragedy video (more on those in a second).
Advertising is supposed to make people feel a connection with a product, and sometimes that requires a story about the dark side of humanity and the futile nature of human experience. It's not a popular category, and was the least represented in the study. It should come as no surprise that tragedy videos were some of the worst performing as well, with the lowest interaction rate, and near the bottom in terms of completion rate. Probably best to avoid this category, no matter the vertical or KPI goals.
Fortunately, tragedy has a flipside -- we've seen lots of ads integrate comedy. The Nielsen Global Survey of Trust in Advertising found that humorous advertising resonates with consumers more than other kinds, and the findings from our independent study back that up. Comedy videos had the highest interaction rate by far, nearly two percentage points greater than the runner-up. Comedy came in near the bottom of the pack in completion rate, showing that what drives interactions doesn't necessarily equate to holding the viewer's attention for a long period. So, if deciding on comedy, weigh the importance of those two KPIs to the overall campaign.
Video excels at storytelling, and we're being admittedly simple in putting every piece of video creative into a box. But the type of story has an impact on how consumers respond to the message. With so much investment going into the media buy and the creative itself, it's important for marketers to know as much as they can about potential response going in. Keep these results in mind when crafting your creative.
2 comments about "Leveraging the Seven Basic Story Types For Video Ads".
Mike Einstein from the Brothers Einstein, November 26, 2013 at 12:12 p.m.
With all due respect to Mr. Booker, he left out the only two story lines I ever see these days: fear and envy.
Bill Brazell from WIT Strategy, December 2, 2013 at 3:25 p.m.
With all respect due to you, Mike Einstein, 'fear' and 'envy' are feelings, not plots. They can *drive* a plot -- and often do -- but are not, in themselves, plots.


text:
Films Like Dreams, Etc.
Music reviews, film reviews, and whatever else my heart desires!
2014 in Film
Oscar Thoughts 2017
Halloween TV Party: 2018
Year-End Hot 100 Challenge
Every Hot 100 Number-One Single
Rockin' Thru the Aughts
One Random Single a Day
← FILM REVIEW: A Simple Plan (1998) by Sam Raimi
FILM REVIEW: The Rider (2018) by Chloé Zhao →
Every Hot 100 Number-One Single: "West End Girls" (1986) by Pet Shop Boys
Posted on 6 April, 2018	by Lyzette
Just because I'm now trying to move over to video reviews doesn't mean that I have to abandon this site entirely! (Now that you're here, though, consider checking out my review for the latest EP from The Weeknd!)
Today's Every Number-One Single review may be the only one to reference T.S. Eliot! Well, unless I can somehow sneak in a reference in my review of "Look What You Made Me Do"… or something. I'll stop with my pitiful attempts at humor now and actually get on with this damn review.
When I, personally, think about the music of the 80s, the decade's biggest hits, and those that seem to define the decade as a whole the best, few fit these categories as well as Pet Shop Boys. Pet Shop Boys are a synthpop duo from London, consisting of Neil Tennant and Chris Lowe. While they have achieved considerable success in the states, there's no denying that they have found the most success in their home country, wherein they've achieved 22 top ten hits, four number-one singles, and are more than likely the most successful duo in UK music history. Some of their most notable tracks include "West End Girls", "Opportunities", "It's a Sin", "What Have I Done To Deserve This?" (with Dusty Springfield), and a cover of the Willie Nelson hit "Always On My Mind". Although the crux of their international success took place in the 80s and many consider them integral to the decade, they have actually achieved notable success all the way through the 2000s – and they are still recording!
"West End Girls" was the debut single for the duo in 1984, though the original mix of this single, produced by Bobby Orlando, didn't make much of a dent outside of the underground club scene Having been basically raised on the remixed version of the tune (which would be the one to top the charts), it was pretty jarring to go back to the original. While much of the original synth sound effects would make their way into the remix, the sub-par quality of the Casio-like keyboard sounds (including crashing glass and vocal chopping) feel so explicitly cheap and so very 80s. Depending on who you ask, though, these qualities are part of what makes this version so charming. Even the mixing on Tennant's voice sounds significantly rawer and even unfinished. Notable for this version, though, is the line, "Who do you think you are, Joe Stalin?", which didn't make its way into the hit version, for reasons that I hope are obvious. This was the mid-80s, after all.
Eventually, the guys would collaborate with producer Stephen Hague, who was a popular choice amongst British synthpop acts of the 80s. Prior to meeting Pet Shop Boys, Hague had worked with Gleaming Spires (who had a minor hit with "Are You Ready For the Sex Girls") as well as Malcolm McLaren on his ambitious hit single "Madam Butterfly". Hague worked wonders at cleaning up the sound, ridding of all the cheesy Casio gimmicks and crafting the tune into something sleek and sophisticated. Later singles from Pet Shop Boys would be recognized for their garishness and flamboyancy – just listen to "It's a Sin", their cover of The Village People's "Go West", and even their hit medley that meshes U2's "Where The Streets Have No Name" and Frankie Valli's "Can't Take My Eyes Off Of You". These dudes got around! However, the relaxed atmosphere of "West End Girls" proves that their artistic integrity stretches beyond these confines. The loveliest elements of the track are rightfully mixed at the forefront – the punchy bass synths, the ghost-like backing vocal effects, the saxophone bits at the bridge, Tennant's soothing lead vocals.
But I would be incorrect to discuss this song without remarking upon its richly illustrated lyrics and the delivery thereof. Written by both Lowe and Tennant and conveying images of inner-city life through spoken-word delivery, it's probably safe to say that this was the closest thing to rap music to top the pop charts at this time. Specifically, the duo were inspired by the cultural tidal wave that was Grandmaster Flash and the Furious Five's "The Message" (1982) ; it even lifts the bassline from this single. While it's obvious that there's an entire ocean separating these two environments from each other, the attention-grabbing opening line, "Sometimes you're better off dead / There's a gun in your hand, it's pointing at your head" could certainly belong to a number of records from the American rap scene. But equally as so, Pet Shop Boys were also inspired by T.S. Eliot's 1922 poem "The Waste Land" for its switching of narrative voices and kaleidoscope of cluttered, yet vivid imagery of hypnotic depravity. A line like, "Too many shadows, whispering voices / Faces on posters, too many choices" certainly portrays this well. Personally, the couplet that comprises the chorus ("In a west end town, a dead end world / The east end boys and west end girls") always conjured imagery of West Side Story for me… though, only the sad, dark, murderous parts, without all the romance or singing.
Honestly, even the production itself brings to mind the collage-like format of "The Waste Land". Like so many of the best dance tracks from the 80s, there are so many compellingly unique sounds on display here, all meshed together in a manner that comes off less cluttered and more appealingly hypnotic. This sound, coupled with the duo's rich lyricism, results in a pop single that is cinematic in its aesthetic and existential in its quality. While many synthpop acts of the time were still trying to cram as many hip keyboard sounds into their record as possible (the original version of "West End Girls" was certianly guilty of this!), this mix opts for a big, layered sound, rather than a gimmicky one. The end result is a beautiful piece of sonic atmospherics, certainly a good sign of what was next to come from Pet Shop Boys.
This entry was posted in Uncategorized and tagged 1986, Every Hot 100 Number One, Pet Shop Boys. Bookmark the permalink.
4 Responses to Every Hot 100 Number-One Single: "West End Girls" (1986) by Pet Shop Boys
Pingback: Every Hot 100 Number-One Single: "Evergreen (Love Theme from A Star is Born)" (1977) by Barbra Streisand | Films Like Dreams, Etc.
Pingback: Every Hot 100 Number-One Single: "Karma Chameleon" (1983) – Culture Club | Films Like Dreams, Etc.
Pingback: Billboard's Hot 100 of 1986 | Films Like Dreams, Etc.
Billboard's Hot 100 of 1989
Lyzette's 25 Best Albums of 2018
Lyzette's 15 Best Hit Singles of 2018
Lyzette's 15 Worst Hit Singles of 2018
Every Hot 100 Number-One Single: "Stuck on You" (1960) by Elvis Presley
It's Year-End List Season! 2018 Edition
Every Hot 100 Number-One Single: "Don't Leave Me This Way" (1977) by Thelma Houston
Every Hot 100 Number-One Single: "Hit the Road Jack" (1961) by Ray Charles
Lyzette's Tweets
Other Cool Folks
Abnormal Mapping
Alex Kittle
Atomic Caravan
CinEffect
Curtsies and Hand Grenades
Danny Bowes
Defiant Success
Dim the House Lights
Jaime Rebenal's Film Thoughts
Jackson Shrout's Blog
Land of the Nerds (a.k.a. Laman's Language)
Movies Silently
Pussy Goes Grrr
The Reviewing Rodders
Suddenly, a shot rang out


text:
package org.arakhne.afc.math.graph.astar;

import org.arakhne.afc.math.graph.GraphPath;

/**
 * This interface representes a graph's point.
 *
 * @author $Author: sgalland$
 * @version $FullVersion$
 * @mavengroupid $GroupId$
 * @mavenartifactid $ArtifactId$
 */
@SuppressWarnings("all")
class GraphPathStub extends GraphPath<GraphPathStub,SegmentStub,ConnectionStub> {

	/**
	 */
	public GraphPathStub() {
		super();
	}

	/**
	 * @param segment
	 * @param point
	 */
	public GraphPathStub(SegmentStub segment, ConnectionStub point) {
		super(segment, point);
	}

}


Product prices and availability are accurate as of 2019-04-21 03:33:00 UTC and are subject to change. Any price and availability information displayed on http://www.amazon.co.uk/ at the time of purchase will apply to the purchase of this product.
Quadcopter-Drones.co.uk are proud to offer the excellent Anbee Lipo Battery Safe Bag Fireproof Storage Bag Parrot Anafi Drone [3-Sizes].
With so many available these days, it is good to have a name you can believe in. The Anbee Lipo Battery Safe Bag Fireproof Storage Bag Parrot Anafi Drone [3-Sizes] is certainly that and will be a great purchase.
For this reduced price, the Anbee Lipo Battery Safe Bag Fireproof Storage Bag Parrot Anafi Drone [3-Sizes] comes highly respected and is always a popular choice amongst many people. Anbee have added some nice touches and this results in great value.
Li-Po Battery Safe Bag Fireproof Storage Bag for Parrot Anafi Drone. [3-Sizes for Choice] Charge with confidence knowing your home is safe from a li-po fire. Material: nylon, weight: 32g (Small) / 54g (Medium) / 71g (Large). Color: black Great for travelling, charging, storage, keep your stuff away from a fire disaster. Note: batteries for display only, not included for sale.


Silk Crepe Vest Dress by Alexander Wang. Tailored halter wrap dress in mid-weight silk crepe.
V-neck / Notch lapel halter collar / Right lapel drapes down at waist / Right crosses over left and secures with hidden silk-covered snaps at front waist / Handkerchief drape at front right edge / Low back / Top is self-lined / Color: Black / 100% Silk.
Shown with / Alexandra Neel Ankle Boot with Lace-Up Back.


text:
package gw.internal.gosu.parser;

import gw.config.ExecutionMode;
import gw.internal.ext.org.objectweb.asm.ClassReader;
import gw.internal.ext.org.objectweb.asm.ClassVisitor;
import gw.internal.ext.org.objectweb.asm.ClassWriter;
import gw.internal.ext.org.objectweb.asm.Label;
import gw.internal.ext.org.objectweb.asm.MethodVisitor;
import gw.internal.ext.org.objectweb.asm.Opcodes;
import gw.internal.ext.org.objectweb.asm.Type;
import gw.internal.ext.org.objectweb.asm.util.CheckClassAdapter;
import gw.internal.ext.org.objectweb.asm.util.TraceClassVisitor;
import gw.lang.GosuShop;
import gw.lang.reflect.IInjectableClassLoader;
import gw.lang.reflect.INonLoadableType;
import gw.lang.reflect.IType;
import gw.lang.reflect.ITypeRef;
import gw.lang.reflect.ITypeRefFactory;
import gw.lang.reflect.RefreshKind;
import gw.lang.reflect.TypeSystem;
import gw.lang.reflect.gs.IGosuClass;
import gw.lang.reflect.gs.IGosuObject;
import gw.lang.reflect.java.IJavaBackedType;
import gw.util.cache.FqnCacheNode;
import gw.util.Predicate;
import gw.util.cache.WeakFqnCache;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * There is one TypeRefFactory per ModuleTypeLoader.
 */
public class TypeRefFactory implements ITypeRefFactory
{
  private static boolean TRACE = false;
  private static boolean VERIFY = false;
  private static boolean ASM_CHECKER = false;
  private static final int JAVA_VER = Opcodes.V1_5;
  private static final Map<Class<? extends IType>, Class<? extends AbstractTypeRef>> ITYPE_PROXY_CLASS_BY_ITYPE_CLASS =
    new HashMap<Class<? extends IType>, Class<? extends AbstractTypeRef>>();
  private final WeakFqnCache<AbstractTypeRef> _refByName;
  private boolean _bClearing;

  public TypeRefFactory()
  {
    _refByName = new WeakFqnCache<AbstractTypeRef>();
  }

  /**
   * Wraps the actual class with a proxy.
   */
  @Override
  public ITypeRef create( IType type )
  {
    // already a proxy? return as is then
    if( type instanceof ITypeRef )
    {
      return (ITypeRef)type;
    }

    if( type instanceof INonLoadableType )
    {
      throw new UnsupportedOperationException( "Type references are not supported for nonloadable types: " + type.getName() );
    }

    String strTypeName = TypeLord.getNameWithQualifiedTypeVariables( type, true );
    if( strTypeName == null || strTypeName.length() == 0 )
    {
      throw new IllegalStateException( "Type has no name" );
    }

    ITypeRef ref;
    if (ExecutionMode.isRuntime()) {
      ref = getRefTheFastWay(type, strTypeName);
    } else {
      ref = getRefTheSafeWay(type, strTypeName);
    }
    return ref;
  }

  private ITypeRef getRefTheFastWay(IType type, String strTypeName) {
    AbstractTypeRef ref = getRef(_refByName, strTypeName, type);
    if (ref == null) {
      TypeSystem.lock();
      try {
        ref = getRef(_refByName, strTypeName, type);
        if (ref == null) {
          ref = createTypeRefProxy(type);
          putRef(_refByName, strTypeName, ref);
          return ref;
        }
      } finally {
        TypeSystem.unlock();
      }
    }

    if (!type.isDiscarded()) {
      ref._setType(type);
    }

    return ref;
  }

  private ITypeRef getRefTheSafeWay(IType type, String strTypeName) {
    TypeSystem.lock();
    try {
      AbstractTypeRef ref = getRef(_refByName, strTypeName, type);
      if (ref == null) {
        ref = createTypeRefProxy(type);
        putRef(_refByName, strTypeName, ref);
        return ref;
      }
      if (!type.isDiscarded()) {
        ref._setType(type);
      }
      return ref;
    } finally {
      TypeSystem.unlock();
    }
  }

  private AbstractTypeRef createTypeRefProxy( IType type )
  {
    Class<? extends IType> typeClass = type.getClass();
    try
    {
      Class<? extends AbstractTypeRef> proxyClass = getOrCreateTypeProxy( typeClass );
      AbstractTypeRef typeRef = proxyClass.newInstance();
      typeRef._setType( type );
      return typeRef;
    }
    catch( Exception e )
    {
      throw new RuntimeException( e );
    }
  }

  private Class<? extends AbstractTypeRef> getOrCreateTypeProxy( Class<? extends IType> typeClass )
  {

    Class<? extends AbstractTypeRef> proxyClass = ITYPE_PROXY_CLASS_BY_ITYPE_CLASS.get( typeClass );
    try
    {
      if( proxyClass == null )
      {
        proxyClass = generateProxyClass( typeClass );
        ITYPE_PROXY_CLASS_BY_ITYPE_CLASS.put( typeClass, proxyClass );
      }
      return proxyClass;
    }
    catch( Exception e )
    {
      throw new RuntimeException( e );
    }
  }

  private Class<? extends AbstractTypeRef> generateProxyClass(Class<? extends IType> typeClass) {
    ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
    ClassVisitor cv = writer;
    StringWriter trace = null;
    if (TRACE) {
      trace = new StringWriter();
      cv = new TraceClassVisitor(cv, new PrintWriter(trace));
      if (ASM_CHECKER) {
        cv = new CheckClassAdapter(cv);
      }
    }

    List<Class> interfaces = new ArrayList<Class>();
    getInterfacesFrom(typeClass, interfaces );

    String strProxyClassName = typeClass.getName() + SYSTEM_PROXY_SUFFIX;
    compileHeader(cv, strProxyClassName, interfaces);
    cv.visitSource( strProxyClassName, null );
    addDefaultConstructor(cv);
    compileInterfaceMembers(cv, typeClass);
    addToString(cv);

    cv.visitEnd();

    if( TRACE ) {
      System.out.println( "========================================================================" );
      System.out.println( strProxyClassName );
      System.out.println( "========================================================================" );
      System.out.println( trace );
    }

    byte[] bytes = writer.toByteArray();
    verify( bytes );

    //noinspection unchecked
    ClassLoader classLoader = typeClass.getClassLoader();
    if(classLoader instanceof IInjectableClassLoader) {
        return ((IInjectableClassLoader) classLoader).defineClass(strProxyClassName, bytes);
    } else {
      try {
          Method method = ClassLoader.class.getDeclaredMethod("defineClass", String.class, byte[].class, int.class, int.class);
          method.setAccessible(true);
          return (Class<? extends AbstractTypeRef>) method.invoke(classLoader, strProxyClassName, bytes, 0, bytes.length);
      } catch (NoSuchMethodException e) {
          throw new RuntimeException(e);
      } catch (InvocationTargetException e) {
          throw new RuntimeException(e);
      } catch (IllegalAccessException e) {
          throw new RuntimeException(e);
      }
    }
  }

  private void compileHeader(ClassVisitor cv, String name, List<Class> interfaces) {
     cv.visit( JAVA_VER,
               Opcodes.ACC_PUBLIC,
               name.replace( '.', '/' ),
               null,
               getSlashName( AbstractTypeRef.class ),
               getInterfaceNames(interfaces) );
  }

  private String[] getInterfaceNames(List<Class> interfaces) {
    String[] interfaceNames = new String[interfaces.size()];
    for (int i = 0; i < interfaces.size(); i++) {
      interfaceNames[i] = getSlashName(interfaces.get(i));
    }
    return interfaceNames;
  }

  private void addDefaultConstructor(ClassVisitor cv) {
    MethodVisitor mv = cv.visitMethod( Opcodes.ACC_PUBLIC,
                           "<init>",
                           "()V",
                           null, null );
    mv.visitCode();
    mv.visitVarInsn( Opcodes.ALOAD, 0 ); // Load the "this" pointer
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, getSlashName(AbstractTypeRef.class), "<init>", "()V");
    mv.visitInsn( Opcodes.RETURN );
    mv.visitMaxs(0, 0);
  }

  private void addToString(ClassVisitor cv) {
    MethodVisitor mv = cv.visitMethod( Opcodes.ACC_PUBLIC,
                           "toString",
                           "()Ljava/lang/String;",
                           null, null );
    mv.visitCode();
    mv.visitVarInsn( Opcodes.ALOAD, 0 ); // Load the "this" pointer
    // callMethod(mv, getMethod(AbstractTypeRef.class, "_getType"));
    mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
                        getSlashName( AbstractTypeRef.class ),
                        "_getType",
                        "()Lgw/lang/reflect/IType;" );
    // callMethod(mv, getMethod(Object.class, "toString"));
    mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
                        getSlashName( Object.class ),
                        "toString",
                        "()Ljava/lang/String;" );
    mv.visitInsn( Opcodes.ARETURN );
    mv.visitMaxs(0, 0);
  }

  private void compileInterfaceMembers(ClassVisitor cv, Class typeClass) {
    for( Method rawMethod : typeClass.getMethods() ) {
      // Note we keep the method from the impl class because we need to keep its modifiers intact
      Method ifaceMethod = getInterfaceMethod(rawMethod);
      if( ifaceMethod == rawMethod )
      {
        continue;
      }
      int nParameters = rawMethod.getParameterTypes().length;
      if( (rawMethod.getName().equals( "unloadTypeInfo" ) && nParameters == 0) ||
          (rawMethod.getName().equals( "isStale" ) && nParameters == 0) ||
          (rawMethod.getName().equals( "readResolve" ) && nParameters == 0) )
      {
        continue;
      }

      genMethod_DevMode( cv, ifaceMethod, rawMethod );
    }
  }

  private void genMethod_DevMode(ClassVisitor cv, Method ifaceMethod, Method proxyMethod) {
    int modifiers = proxyMethod.getModifiers();
    if (proxyMethod.isSynthetic() || proxyMethod.isBridge() ) {
        modifiers = modifiers | Modifier.VOLATILE;
    }
    MethodVisitor mv = cv.visitMethod( modifiers,
                           proxyMethod.getName(),
                           getMethodDescriptor(proxyMethod),
                           null,
                           getMethodExceptions(proxyMethod));
    mv.visitCode();

    // If the method is getName(), insert the short-circuit code
    if(ifaceMethod.getName().equals("getName")) {
      insertGetNameStart(mv);
    }

//  The code we're building up looks essentially like the following:
//    _reload();
//      gw.internal.gosu.parser.IGosuClassInternal   type;
//      try
//      {
//        type = (gw.internal.gosu.parser.IGosuClassInternal)_getType();
//      } catch (ClassCastException ex) {
//        throw new RuntimeException("Type interface changed.  Expected gw.internal.gosu.parser.IGosuClassInternal for " + _getType().getName(), ex);
//      }
//      return (java.util.List)type.getStaticFunctions( $$ );

    int iLastParamIndex = ifaceMethod.getParameterTypes().length + 1; // Use the first index after the this pointer and the arguments
    int typeIndex = iLastParamIndex + 1;
    int classCastExceptionIndex = iLastParamIndex + 2;
    Label tryLabel = new Label();
    Label catchLabel = new Label();
    Label tryEndLabel = new Label();
    Label endLabel = new Label();

    mv.visitTryCatchBlock( tryLabel, tryEndLabel, catchLabel, getSlashName( ClassCastException.class ) );

    //## hack: Before call_reload
    visitDebugLineNumber( 1, mv );

    call_reload(mv);

    // outer try
    mv.visitLabel( tryLabel );
    assignType(ifaceMethod, mv, typeIndex);
    mv.visitLabel( tryEndLabel );
    mv.visitJumpInsn( Opcodes.GOTO, endLabel );

    // inner catch
    mv.visitLabel( catchLabel );
    constructRuntimeException(mv, classCastExceptionIndex);
    mv.visitInsn( Opcodes.ATHROW );

    // call the method
    mv.visitLabel( endLabel );

    //## hack: Before delegateMethodCall
    visitDebugLineNumber( 2, mv );

    delegateMethodCall(ifaceMethod, proxyMethod, mv, typeIndex);

    //## hack: Before return
    visitDebugLineNumber( 3, mv );

    if (ifaceMethod.getReturnType().getName().equals(void.class.getSimpleName())) {
      mv.visitInsn( Opcodes.RETURN );
    } else {
      mv.visitInsn( getIns(Opcodes.IRETURN, ifaceMethod.getReturnType().getName()) );
    }
    mv.visitMaxs(0, 0);
  }

  private void visitDebugLineNumber( int iLine, MethodVisitor mv )
  {
    Label dbgLabel = new Label();
    mv.visitLabel( dbgLabel );
    mv.visitLineNumber(iLine, dbgLabel);
  }

  private void insertGetNameStart(MethodVisitor mv) {
    // For the getName() method, we want to insert this code at the start:
    //  if(_getTypeNameInternal() != null) {
    //    return _getTypeNameInternal();
    //  }
    mv.visitVarInsn( Opcodes.ALOAD, 0 );
    mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
            getSlashName( AbstractTypeRef.class ),
            "_getTypeNameInternal",
            "()Ljava/lang/String;" );
    Label afterIf = new Label();
    mv.visitJumpInsn( Opcodes.IFNULL, afterIf );

    mv.visitVarInsn( Opcodes.ALOAD, 0 );
    mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
            getSlashName( AbstractTypeRef.class ),
            "_getTypeNameInternal",
            "()Ljava/lang/String;" );
    mv.visitInsn( getIns( Opcodes.IRETURN, String.class) );

    mv.visitLabel(afterIf);
  }

  private void call_reload(MethodVisitor mv) {
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
        getSlashName(AbstractTypeRef.class),
        "_reload",
        "()V");
  }

  private void assignType(Method ifaceMethod, MethodVisitor mv, int typeIndex) {
    mv.visitVarInsn( Opcodes.ALOAD, 0 );
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
        getSlashName(AbstractTypeRef.class),
        "_getType",
        "()Lgw/lang/reflect/IType;");
    mv.visitTypeInsn(Opcodes.CHECKCAST, getSlashName(ifaceMethod.getDeclaringClass()));
    mv.visitVarInsn(Opcodes.ASTORE, typeIndex);
  }

  private void constructRuntimeException(MethodVisitor mv, int exceptionIndex) {
    /*RuntimeException("Type interface changed.  Expected gw.internal.gosu.parser.IGosuClassInternal for " + _getType().getName(), ex);*/
    mv.visitVarInsn( Opcodes.ASTORE, exceptionIndex );
    mv.visitTypeInsn(Opcodes.NEW, getSlashName(TypeRefException.class));
    mv.visitInsn( Opcodes.DUP );
    mv.visitTypeInsn( Opcodes.NEW, getSlashName( StringBuilder.class ) );
    mv.visitInsn( Opcodes.DUP );
    mv.visitLdcInsn("Type interface changed.  Expected gw.internal.gosu.parser.IGosuClassInternal for ");
    mv.visitMethodInsn( Opcodes.INVOKESPECIAL,
            getSlashName( StringBuilder.class ),
            "<init>",
            "(Ljava/lang/String;)V" );
    mv.visitVarInsn( Opcodes.ALOAD, 0 );
    mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
            getSlashName( AbstractTypeRef.class ),
            "_getTypeNameInternal",
            "()Ljava/lang/String;" );
    mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
            getSlashName( StringBuilder.class),
            "append",
            "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
    mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
            getSlashName( StringBuilder.class),
            "toString",
            "()Ljava/lang/String;");

    mv.visitVarInsn( Opcodes.ALOAD, exceptionIndex );
    mv.visitMethodInsn( Opcodes.INVOKESPECIAL,
            getSlashName( TypeRefException.class ),
            "<init>",
            "(Ljava/lang/String;Ljava/lang/Throwable;)V" );
  }

  private void delegateMethodCall(Method ifaceMethod, Method proxyMethod, MethodVisitor mv, int typeIndex) {
    mv.visitVarInsn( Opcodes.ALOAD, typeIndex );
    for(int i = 0; i < ifaceMethod.getParameterTypes().length; i++) {
      mv.visitVarInsn(getIns(Opcodes.ILOAD, ifaceMethod.getParameterTypes()[i].getName()), i + 1);
    }
    callMethod(mv, ifaceMethod);
    if (!ifaceMethod.getReturnType().isPrimitive()) {
      // The cast is necessary when we're invoking a bridge method on the parent; seems like that should never happen,
      // though, and that this should really be unnecessary
      mv.visitTypeInsn( Opcodes.CHECKCAST, getSlashName(proxyMethod.getReturnType().getName()) );
    }
  }

  private boolean isTypeGosuClassInstance(Class<?> declaringClass) {
    return IGosuObject.class.isAssignableFrom(declaringClass) &&
        TypeSystem.getByFullNameIfValid(declaringClass.getName().replace('$', '.')) instanceof IGosuClass;
  }

  private Method getInterfaceMethod( Method method ) {
    Class<?> declaringClass = method.getDeclaringClass();
    do
    {
      if( isTypeGosuClassInstance(declaringClass) )
      {
        String gosuClassName = IGosuClass.ProxyUtil.getNameSansProxy(declaringClass.getName());
        IGosuClassInternal gosuClass = (IGosuClassInternal) TypeSystem.getByFullNameIfValid(gosuClassName);
        if(gosuClass == null) {
          return method;
        }
        for( IType iface : gosuClass.getInterfaces() )
        {
          Class ifaceClass = getJavaClass( iface );
          if( ifaceClass != null )
          {
            try
            {
              method = ifaceClass.getMethod( method.getName(), method.getParameterTypes() );
              return getInterfaceMethod( method );
            }
            catch( NoSuchMethodException e )
            {
              // continue
            }
          }
        }
        IType supertype = gosuClass.getSupertype();
        declaringClass = getJavaClass( supertype );
      }
      else
      {
        for( Class<?> iface : declaringClass.getInterfaces() )
        {
          try
          {
            method = iface.getMethod(method.getName(), method.getParameterTypes());
            return getInterfaceMethod( method );
          }
          catch( NoSuchMethodException e )
          {
            // continue
          }
        }
        declaringClass = declaringClass.getSuperclass();
      }
    } while( declaringClass != null );

    return method;
  }

  @Override
  public ITypeRef get( IType type )
  {
    if( type instanceof ITypeRef )
    {
      return (ITypeRef)type;
    }

    if( type instanceof INonLoadableType )
    {
      throw new UnsupportedOperationException( "Type references are not supported for nonloadable types: " + type.getName() );
    }

    String strTypeName = TypeLord.getNameWithQualifiedTypeVariables( type, true );
    if( strTypeName == null || strTypeName.length() == 0 )
    {
      throw new IllegalStateException( "Type has no name" );
    }

    return getRef( _refByName, strTypeName, type );
  }

  @Override
  public ITypeRef get( String strTypeName )
  {
    return getRef( _refByName, strTypeName, null );
  }

  @Override
  public void clearCaches()
  {
    setClearing( true );
    TypeSystem.lock();
    try {
      // Invalidate types, inner types first
      _refByName.visitDepthFirst(
        new Predicate<AbstractTypeRef>() {
          public boolean evaluate( AbstractTypeRef typeRef ) {
            if( typeRef != null ) {
              typeRef._setStale( RefreshKind.MODIFICATION );
            }
            return true;
          }
        } );

      // Remove dead types
      _refByName.visitNodeDepthFirst(
        new Predicate<FqnCacheNode>() {
          public boolean evaluate( FqnCacheNode node ) {
            @SuppressWarnings("unchecked")
            WeakReference<AbstractTypeRef> ref = (WeakReference<AbstractTypeRef>)node.getUserData();
            if( ref != null ) {
              AbstractTypeRef typeRef = ref.get();
              if( typeRef == null ) {
                node.delete();
              }
            }
            return true;
          }
        } );
    } finally {
      TypeSystem.unlock();
      setClearing( false );
    }
  }

  private int computeSortIndex(Map.Entry<String,WeakReference<AbstractTypeRef>> entry)
  {
    AbstractTypeRef ref = entry.getValue().get();
    return ref != null ? ref._getIndexForSortingFast(entry.getKey()) : 10000;
  }

  private void setClearing( boolean bClearing )
  {
    _bClearing = bClearing;
  }

  @Override
  public boolean isClearing()
  {
    return _bClearing;
  }

  private void getInterfacesFrom( Class<? extends IType> classOfType, List<Class> interfaces )
  {
    if( isTypeGosuClassInstance(classOfType) )
    {
      String gosuClassName = IGosuClass.ProxyUtil.getNameSansProxy(classOfType.getName());
      IGosuClassInternal gosuClass = (IGosuClassInternal) TypeSystem.getByFullName(gosuClassName);
      for(IType iface : gosuClass.getInterfaces()) {
        Class ifaceClass = getJavaClass(iface);
        if(ifaceClass != null && !interfaces.contains(ifaceClass)) {
          interfaces.add(ifaceClass);
        }
      }
      IType supertype = gosuClass.getSupertype();
      if( supertype != null )
      {
        Class ifaceClass = getJavaClass( supertype );
        if( ifaceClass != null )
        {
          getInterfacesFrom( ifaceClass, interfaces );
        }
      }
    }
    else
    {
      for( Class iface : classOfType.getInterfaces() )
      {
        if( !interfaces.contains( iface ) )
        {
          interfaces.add( iface );
        }
      }
      Class superClass = classOfType.getSuperclass();
      if( superClass != null )
      {
        getInterfacesFrom( superClass, interfaces );
      }
    }
  }

  private Class getJavaClass( IType iface )
  {
    Class ifaceClass = null;
    if( iface instanceof IGosuClass )
    {
      ifaceClass = ((IGosuClass)iface).getBackingClass();
    }
    else if( iface instanceof IJavaBackedType )
    {
      ifaceClass = ((IJavaBackedType)iface).getBackingClass();
    }
    return ifaceClass;
  }

  private static void putRef( WeakFqnCache<AbstractTypeRef> map, String key, AbstractTypeRef value )
  {
    map.add( key, value );
  }

  private AbstractTypeRef getRef( WeakFqnCache<AbstractTypeRef> map, String key, IType type )
  {
    AbstractTypeRef typeRef = map.get( key );
    if( typeRef == null )
    {
      return null;
    }
    else
    {
      //make sure we're returning a compatible type ref.
      if( type != null && !typeRef.getClass().getName().startsWith( type.getClass().getName() ) ) {
        return null;
      }
      return typeRef;
    }
  }

  // ------------------ ASM Helpers

  private int getIns( int opcode, Class type )
  {
    if( opcode == Opcodes.DUP )
    {
      return isWide( type ) ? Opcodes.DUP2 : opcode;
    }

    if( opcode == Opcodes.POP )
    {
      return isWide( type ) ? Opcodes.POP2 : opcode;
    }

    switch( opcode )
    {
      case Opcodes.ILOAD:
      case Opcodes.ISTORE:
      case Opcodes.IALOAD:
      case Opcodes.IASTORE:
      case Opcodes.IADD:
      case Opcodes.ISUB:
      case Opcodes.IMUL:
      case Opcodes.IDIV:
      case Opcodes.IREM:
      case Opcodes.INEG:
      case Opcodes.ISHL:
      case Opcodes.ISHR:
      case Opcodes.IUSHR:
      case Opcodes.IAND:
      case Opcodes.IOR:
      case Opcodes.IXOR:
      case Opcodes.IRETURN:
        break;
      default:
        throw new IllegalArgumentException( "Opcode: " + Integer.toHexString( opcode ) + " is not handled" );
    }

    if( type == byte.class )
    {
      return Type.BYTE_TYPE.getOpcode( opcode );
    }
    else if( type == char.class )
    {
      return Type.CHAR_TYPE.getOpcode( opcode );
    }
    else if( type == short.class )
    {
      return Type.SHORT_TYPE.getOpcode( opcode );
    }
    else if( type == boolean.class)
    {
      return Type.BOOLEAN_TYPE.getOpcode( opcode );
    }
    else if( type == int.class)
    {
      return Type.INT_TYPE.getOpcode( opcode );
    }
    else if( type == long.class )
    {
      return Type.LONG_TYPE.getOpcode( opcode );
    }
    else if( type == float.class )
    {
      return Type.FLOAT_TYPE.getOpcode( opcode );
    }
    else if( type == double.class )
    {
      return Type.DOUBLE_TYPE.getOpcode( opcode );
    }
    else // handles array/ref types
    {
      return Type.getType(Object.class).getOpcode( opcode );
    }
  }

  private int getIns( int opcode, String typeName )
  {
    if( opcode == Opcodes.DUP )
    {
      return isWide( typeName ) ? Opcodes.DUP2 : opcode;
    }

    if( opcode == Opcodes.POP )
    {
      return isWide( typeName ) ? Opcodes.POP2 : opcode;
    }

    switch( opcode )
    {
      case Opcodes.ILOAD:
      case Opcodes.ISTORE:
      case Opcodes.IALOAD:
      case Opcodes.IASTORE:
      case Opcodes.IADD:
      case Opcodes.ISUB:
      case Opcodes.IMUL:
      case Opcodes.IDIV:
      case Opcodes.IREM:
      case Opcodes.INEG:
      case Opcodes.ISHL:
      case Opcodes.ISHR:
      case Opcodes.IUSHR:
      case Opcodes.IAND:
      case Opcodes.IOR:
      case Opcodes.IXOR:
      case Opcodes.IRETURN:
        break;
      default:
        throw new IllegalArgumentException( "Opcode: " + Integer.toHexString( opcode ) + " is not handled" );
    }

    if( typeName.equals("byte") )
    {
      return Type.BYTE_TYPE.getOpcode( opcode );
    }
    else if( typeName.equals("char") )
    {
      return Type.CHAR_TYPE.getOpcode( opcode );
    }
    else if( typeName.equals("short") )
    {
      return Type.SHORT_TYPE.getOpcode( opcode );
    }
    else if( typeName.equals("boolean") )
    {
      return Type.BOOLEAN_TYPE.getOpcode( opcode );
    }
    else if( typeName.equals("int") )
    {
      return Type.INT_TYPE.getOpcode( opcode );
    }
    else if( typeName.equals("long") )
    {
      return Type.LONG_TYPE.getOpcode( opcode );
    }
    else if( typeName.equals("float") )
    {
      return Type.FLOAT_TYPE.getOpcode( opcode );
    }
    else if( typeName.equals("double") )
    {
      return Type.DOUBLE_TYPE.getOpcode( opcode );
    }
    else // handles array/ref types
    {
      return Type.getType(Object.class).getOpcode( opcode );
    }
  }

  private boolean isWide( Class type )
  {
    return type == long.class || type == double.class;
  }

  private boolean isWide( String typeName )
  {
    return typeName.equals("long") || typeName.equals("double");
  }

  private String getSlashName(Class type) {
    return getSlashName(type.getName());
    //return Type.getType(type).getInternalName();
  }

  private String getSlashName(String typeName) {
    return typeName.replace('.', '/');
  }

  private String[] getParameterTypeDescriptors(Method _method) {
    Class<?>[] paramTypes = _method.getParameterTypes();
    String[] paramDescriptors = new String[paramTypes.length];
    for (int i = 0; i < paramTypes.length; i++) {
      paramDescriptors[i] = getDescriptor(paramTypes[i]);
//      paramDescriptors[i] = AbstractElementTransformer.getDescriptor(paramTypes[i]).getDescriptor();
    }
    return paramDescriptors;
  }

  private String getReturnTypeDescriptor(Method _method) {
    Class<?> returnType = _method.getReturnType();
    return getDescriptor(returnType);

//    return AbstractElementTransformer.getDescriptor(_method.getReturnType()).getDescriptor();
  }

  private String getDescriptor(Class<?> returnType) {
    String name = returnType.getName();
    if (!name.startsWith("[")) {
      name = GosuShop.toSignature(name);
    }
    name = name.replace('.', '/');
    return name;
  }

  private String getMethodDescriptor(Method m) {
    return getMethodDescriptor(getParameterTypeDescriptors(m), getReturnTypeDescriptor(m));
  }

  private String getMethodDescriptor( String[] paramTypeDescriptors, String returnTypeDescriptor )
  {
    StringBuilder sb = new StringBuilder();
    sb.append('(');
    for (String paramTypeDescriptor : paramTypeDescriptors) {
      sb.append(paramTypeDescriptor);
    }
    sb.append( ')' )
      .append( returnTypeDescriptor );
    return sb.toString();
  }

  private String[] getMethodExceptions( Method method )
  {
    Class<?>[] exceptionTypes = method.getExceptionTypes();
    if (exceptionTypes == null || exceptionTypes.length == 0) {
      return null;
    }
    String[] exceptionTypeNames = new String[exceptionTypes.length];
    for (int i = 0; i < exceptionTypes.length; i++) {
      exceptionTypeNames[i] = getSlashName(exceptionTypes[i]);
    }
    return exceptionTypeNames;
  }

  private void callMethod( MethodVisitor mv, Method method )
  {
    int opCode = Modifier.isStatic( method.getModifiers() )
                 ? Opcodes.INVOKESTATIC
                 : method.getDeclaringClass().isInterface()
                   ? Opcodes.INVOKEINTERFACE
                   : Opcodes.INVOKEVIRTUAL;

    mv.visitMethodInsn( opCode,
                        getSlashName( method.getDeclaringClass() ),
                        method.getName(),
                        getMethodDescriptor( method ) );
  }

  private static void verify( byte[] bytes )
  {
    if( VERIFY )
    {
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter( sw );
      CheckClassAdapter.verify( new ClassReader( bytes ), false, pw );
      String out = sw.toString();
      if( out.length() > 0 )
      {
        System.out.println( out );
      }
    }
  }

  @Override
  public List<ITypeRef> getSubordinateRefs(String topLevelTypeName) {
    FqnCacheNode<WeakReference<AbstractTypeRef>> node = _refByName.getNode( topLevelTypeName );
    final List<ITypeRef> types = new ArrayList<ITypeRef>();
    if( node != null ) {
      node.visitNodeDepthFirst(
        new Predicate<FqnCacheNode>() {
          public boolean evaluate( FqnCacheNode node ) {
            @SuppressWarnings("unchecked")
            WeakReference<AbstractTypeRef> ref = (WeakReference<AbstractTypeRef>)node.getUserData();
            if( ref != null ) {
              AbstractTypeRef typeRef = ref.get();
              if( typeRef != null ) {
                types.add( typeRef );
              }
            }
            return true;
          }
        } );
    }
    return types;
  }

  public List<String> getTypesWithPrefix(String namespace, final String prefix) {
    FqnCacheNode<WeakReference<AbstractTypeRef>> node = _refByName.getNode( namespace );
    final List<String> types = new ArrayList<String>();
    if( node != null ) {
      node.visitNodeDepthFirst(
        new Predicate<FqnCacheNode>() {
          public boolean evaluate( FqnCacheNode node ) {
            if (node.getName().startsWith(prefix)) {
              @SuppressWarnings("unchecked")
              WeakReference<AbstractTypeRef> ref = (WeakReference<AbstractTypeRef>)node.getUserData();
              if( ref != null ) {
                AbstractTypeRef typeRef = ref.get();
                if( typeRef != null ) {
                  types.add(node.getFqn());
                }
              }
            }
            return true;
          }
        } );
    }
    return types;
  }
}


text:
Q: count couplets from a list with \r\n line breaks I'm trying to get a count of couplets from a set of lyrics. Let's say the lyrics are:
I saw a little hermit crab
His coloring was oh so drab

It's hard to see the butterfly
Because he flies across the sky

etc etc...
Once upon a time
She made a little rhyme
Of course, of course

Before we say again
The pain the pain
A horse, a horse

Lightening, thunder, all around
Soon the rain falls on the ground

I tire of writing poems and rhyme

They're stored in the db as a string, separated by u'\r\n' and via string.splitlines(Tree), the object has them stored like this:
>>> lyrics[6].track_lyrics['lyrics']
[u'I saw a little hermit crab\r\n', u'His coloring was oh so drab\r\n', u'\r\n', u'It\u2019s hard to see the butterfly\r\n', u'Because he flies across the sky\r\n', u'\r\n',  u'\r\n', u'Before we say again\r\n', u'The pain the pain\r\n', u'A horse, a horse\r\n', u'\r\n', u'Lightening, thunder, all around\r\n', u'Soon the rain falls on the ground\r\n', u'\r\n', u'I tire of writing poems and rhyme\r\n']

I can get close with this:
len([i for i in lyrics if i != "\r\n"]) / 2

But it also counts sets of one, three or more lines as couplets.
I'm kind of getting there with this, which basically says if there's a "\r\n" one line previous and two lines later, we're a couplet:
>>> for k,v in enumerate(lyric_list):
...     if lyric_list[k+2] == "\r\n" and lyric_list[k-1] == "\r\n":
...             print(v)
...
It's hard to see the butterfly

Hear the honking of the goose

Lightening, thunder, all around

But, of course:
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: list index out of range

I could use try and except IndexError: with something like this:
>>> if len(lyric_string) > 1:
...     for k, v in enumerate(lyric_string):
...             if k == 0 and lyric_string[k+2] == "\r\n":
...                     print(v)
...             elif lyric_string[k-1] == "\r\n" and lyric_string[k+2] == "\r\n":
...                     print(v)
...
I saw a little hermit crab

It's hard to see the butterfly

Hear the honking of the goose

His red sports car is just a dream

The children like the ocean shore

I made the cookies one by one

My cat, she likes to chase a mouse,

Lightening, thunder, all around

Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
IndexError: list index out of range

And I considered doing something like this which is even uglier and doesn't work! (only gets the first and last lines):
>>> if len(lyric_string) > 1:
...     for k, v in enumerate(lyric_string):
...             if k == 0 and lyric_string[k+2] == "\r\n":
...                     print(v)
...             elif lyric_string[k-1] == "\r\n" and (k+2 > len(lyric_string) \
...                                                     or lyric_string[k+2] == "\r\b"):
...                     print(v)

But I bet there's a much more eloquent and even pythonic approach.

A: A somewhat simpler approach: Join the entire array with "" and count the occurrences of newlines.
>>> s = """Once upon a time
... She made a little rhyme
... Of course, of course
...
... Before we say again
... The pain the pain
... A horse, a horse
...
... Lightening, thunder, all around
... Soon the rain falls on the ground
...
... I tire of writing poems and rhyme"""

and then just do:
>>> s.strip().count("\n\n") + 1
4

To get s in the above code, you will need to do an additional join. An example
s = "".join(lyrics[6].track_lyrics['lyrics'])

I use \n on my system, you might have to use \r\n on yours.

A: I am making the assumption that a couplet is a set of lines containing 2 lines.
You can achieve this by splitting into blocks, then counting the amount of lines in each block. In this example I count the number of newlines in a block (should be 1 in a couplet).
>>> text = """I saw a little hermit crab
... His coloring was oh so drab
...
... It's hard to see the butterfly
... Because he flies across the sky
...
... etc etc...
...
... Once upon a time
... She made a little rhyme
... Of course, of course
...
... Before we say again
... The pain the pain
... A horse, a horse
...
... Lightening, thunder, all around
... Soon the rain falls on the ground
...
... I tire of writing poems and rhyme
... """.replace('\n', '\r\n')
>>> len([block for block in text.split('\r\n\r\n') if block.count('\r\n') == 1])
3

This is also assuming that there are exactly two newlines between each block. To handle 2+ newlines, you could use:
import re
...
.. block for block in re.split(r'(?:\r\n){2,}', text) ..

redpajama_set_name: RedPajamaStackExchange


Page Parkes Model + Talent: PP Talent in TV Show, Dallas!
PP Talent in TV Show, Dallas!
Keep your eyes out for our talent, Jesse De Luna, in an upcoming episode of Dallas!
We know this will be a great year for our talent! Thanks for kicking it off, Jesse!