Gabriela's Restaurant and Tequila Bar boasts the largest tequila selection on the Upper West Side and on par with the largest collections in the city. With well over 175 different bottles we have explored every corner of the tequila universe. We pour only 100% agave tequila, even in our frozen margaritas. We do not use any sour mix or the like. At Gabriela's it is only 100% agave tequila, fresh squeezed lime, and a little triple sec or agave nectar. You will never find a mixto behind our bar. We know that tequila is meant to be sipped and enjoyed. We know that our body process's tequila more easily than other spirits. We know that no celebration is complete without a taste of the good stuff.
Come by and taste our Gabriela's Single Barrel Tequilas by Casa Noble. Come by and talk about tequila with out knowledgeable bar tenders. There is nothing we enjoy more than talking about and tasting good tequila. Plan your private tequila tasting event today!
Mezcal is made from the fermented juice from up to 28 different species of agave. It is produced throughout most of Mexico. Mezcals has a fine, smokey essence.
HACIENDA DE CHIHUAHUA (Organic Certified) Sotol is produced with a wild agavacea variety called Daysylirion. It grows in the Chihuahua desert, located in the northern Mexico, with its own origin of denomination.
* SUPER PREMIUM TEQUILAS ARE EXCLUDED. ALL FLIGHTS ARE SERVED WITH A HOMEMADE SANGRITA CHASER. "THE PERFECT WAY TO EDUCATE YORSELF ON TEQUILAS FROM OUR SELECTION."
Produced at the Thames Distillery in the heart of London & Uses only the world's finest organic grain, water and a combination of 100% Organic Botanicals.
Puebla Viejo 100%Agave Tequila, triple sec and fresh squeezed lime juice. Simple & perfect Served on the rocks.
La Union Joven Mezcal, fresh carrot juice and pineapple juice. Served on the rocks in a salted-rimmed glass.
Papalote Joven Mezcal, La Pinta Pomegranate Tequila, Carpano antica vermouth and bitters. Served on the rocks and garnished with an orange twist.
1800 Silver Tequila, Cruzan Mango rum, orange jice and a splash of frozen mango margarita. Served on the rocks.
Casa noble Cristal Organic Tequila (Triple Distilled), muddled organic strawberries, organic raspberries and organic blueberries. organic agave nectar, fresh lemon- lime juice. Served on the rocks.
Don Julio Blanco Tequila, muddled cucumber & Jalapeno pepper, organic agave nectar, fresh lemon- lime juice. Served on the rocks.
Camarena Blanco Tequila, muddled fresh strawberry and fresh pineapple, triple sec, pineapple juice, fresh lime juice. Serve on the rocks, rimmed with rosemary salt.


WEST LAFAYETTE, Ind. (AP) - When Caleb Swanigan and Isaac Haas are in sync, it's difficult trying to name a better power forward-center combination in college basketball.
No. 21 Purdue's two interior players certainly were in sync on Tuesday night against outmanned Illinois.
Haas had 24 points and six rebounds, and power forward Swanigan added 22 points and 10 rebounds in the Boilermakers' dominating 91-68 victory.
Illinois (12-7, 2-4) got 15 points from Maverick Morgan and 12 from Malcolm Hill but had no answer for the Boilermakers' two post players, each of whom had his way around the basket.
With this victory, Purdue leads the all-time series with Illinois, 100-87.
Purdue made 9 of its first 14 field goal attempts, including 5 of 7 from 3-point range, built a 19-5 lead with 13:01 to play in the first half and led 44-30 through 20 minutes, shooting 60 percent from the field (15 of 25).
Haas was grateful for the 3-point help.
Carsen Edwards had 12 first-half points for Purdue, and Haas had 11. The two were a combined 9 of 10 from the field before halftime. The Boilermakers outrebounded Illinois 20-13 during the opening 20 minutes, although they did not get a single offensive rebound.
Illinois: The Illini never recovered from the early 19-5 deficit and fell to 0-4 in games against Top 25 competition. Illinois had trouble coping with Purdue's size and watched as the Boilermakers made five 3-pointers during the first 7 minutes. If Illinois loses Saturday at Michigan, it will be 2-5 in the Big Ten.
Purdue: As the Boilermakers have done every time after a regular-season loss in the past two seasons, they won the next game, getting a nice balance of perimeter play from Carsen Edwards and Haas.
With 22 points and 10 rebounds, Swanigan has nine double-doubles in the past 10 games, missing only this past Thursday with 17 and eight in an 83-78 loss at Iowa.
If the 21st-ranked Boilermakers beat Penn State on Saturday in Mackey Arena and improve to 16-4, 5-2, chances are solid that they will move up a bit in the AP Top 25.
Including Tuesday's loss, Illinois is 0-3 in Big Ten road games, losing by 25 at Maryland, by 16 at Indiana and by 23 at Purdue.
"It's a lot about being inconsistent," Groce said.
Illinois: The Illini travel to Ann Arbor on Saturday to play Michigan.
Purdue: The Boilermakers are at home again Saturday for a game with Penn State.
More AP college basketball:www.collegebasketball.ap.org andhttps://twitter.com/AP_Top25.


text:
Christmas post chaos feared as Royal Mail staff vote to strike over festive season
Dad accused of killing ex-partner 'panicked and threw phones into river after fearing cops would think he was a suspect'
What are 'super' rats and how do you get rid of them?
Meghan Markle wows in green dress as she arrives at WellChild awards with Prince Harry to meet seriously ill kids
Hysterical schoolboy, 12, screamed 'help me, help me' after friend, 12, was electrocuted on railway tracks in Merseyside
Sickening moment laughing students high-five and hug after raping helpless drunk woman in London West End nightclub
Royal Mail strikes 2019 – when are they and what are they about?
What date was the Battle of Trafalgar and how is Trafalgar Day celebrated?
Bulgaria stewards 'took off bibs and entered crowd to join in racist abuse' of England players
Obese man who called himself 'big cuddly bear' cleared of raping Match.com date alleged attack after 'turning him down'
All News Stay live for all updates
theviralmagazine
Toxic narrative about EU citizens being kicked out after Brexit is sensationalist scaremongering
- in Usa News
A LOT of rubbish is talked about what will happen after Brexit.
And unfortunately, the future of EU citizens has fallen victim to some inaccurate, sensationalist scaremongering.
No stone will be left unturned in protecting EU citizens residing here — ignore the Brexit scaremongering, writes Home Secretary Priti Patel
Critics say there is a "toxic narrative" around immigration, promoted by the Home Office.
They claim we don't value EU citizens, that we are making it hard for them to stay and that we are even denying them an immigration status.
The reality is that none of this is true. So let me lay out the facts, loud and clear.
EU citizens have made a huge contribution to this country and will play a key role in cementing Britain's status as an outward-looking, global leader after Brexit.
That is why we want EU citizens who have made the UK their home to stay. Our EU Settlement Scheme allows them to do that.
It provides an immigration status under UK law and ensures they can continue to live their lives as they currently do.
It means that whether it is in four or 40 years' time, EU citizens currently living here and their children will have the evidence they need to prove they can access our NHS and any other services and benefits they have already been using, just like Brits.
So it has been disappointing to see some political leaders in Europe — such as Guy Verhofstadt, the Brexit co-ordinator for the European Parliament — repeating some of the myths around our offer. The facts are:
Unlike most EU member states, our scheme fully opened in March, it is free, and whatever happens, EU citizens have until at least December 2020 to apply.
Internal figures show that more than 1.7million people have applied and almost 1.5million have already got a British immigration status. We are processing up to 20,000 applications a day.
It is a scheme designed from scratch and is in fact more generous than what we agreed with the EU.
By the end of August only one person had been refused, and that person had a history of serious criminality. Sun readers would expect that we do not allow serious criminals to stay.
No one that has lived here legally is being denied status.
The scheme is designed to be simple and only includes three key steps — to prove they are who they say they are, to prove that they live in the UK and to inform us whether they have a criminal record.
Like the current EU system, applicants need to have lived in the UK for five years before they can get the status for them to live here permanently.
For those who haven't, we are giving them some-thing called pre-settled status, so they can build up five years.
They still have the same access to benefits and services as they do now.
But it is only right where someone who has not come up automatically on our government systems, for whatever reason, that we ask them to give us more evidence that they have lived here for five years — you would expect us to do so.
But I understand this can be frustrating for people and there are plenty of reasons why someone might not come up on our records.
Let me be clear, it is not a rejection. It might be that they have their maiden name on their tax records and not on their application, or if someone is self-employed that their tax returns only go up to last year.
NO STONE LEFT UNTURNED
So we are making it as simple as possible for those who have every right to settled status to prove it.
They can show things such as phone bills, bank statements and even a letter from the doctor.
A dedicated team is on the end of the phone to help people from the start to finish in their application to get the status they are entitled to.
The help centre is open seven days a week and they are doing a great job.
We have put in place an army of voluntary organisations and charities right across the UK to help us spread the word to those who are harder to reach, such as the elderly or those who have suffered from domestic abuse.
With the help of these organisations, local authorities and businesses, we are making sure no stone is left unturned and that EU citizens living here have the certainty and security they need.
This includes setting out the rules for EU citizens arriving after October 31 if we don't get a deal.
MOST READ IN OPINION
ROD LIDDLE
Privileged Prince Harry's 'struggle to get out of bed' is getting people down
THE SUN SAYS
Labour refusing to oust the Government they've crippled is pathetic cowardice
It's time to buck up Captain Mercer – where's the new Ministry for Veterans?
QUENTIN LETTS
Judges just blew their hallowed status and are fair game for public scrutiny
Boris Johnson's only hope is an election pact with Farage's Brexit Party
It's better, Greta, if kids cut back… just like us oldies did!
Under these rules, EU citizens can continue to come to the UK to work and study; and they provide our businesses, universities and public services certainty that they will still have the people they need.
So I find it hard to stomach when EU leaders lecture us on what we are doing for EU citizens when we have people getting the status and reassurance they need.
We have been clear that they are part of our future and have acted on it. Now it is time for the EU to step up and match this offer for Brits.
We want EU citizens who have made the UK their home to stay and our EU Settlement Scheme allows them to do that
Alamy Live News
It's disappointing to see Guy Verhofstadt, the Brexit co-ordinator for the European Parliament, repeating some of the myths around our offer
How can you apply for 'settled status' in the UK?
EU nationals will have to apply through the Home Office for a residency document over a two-year window.
They will have to answer three "simple" questions.
Home Secretary Sajid Javid said the government's "default" position would be to grant, not refuse, settled status.
Applicants will be asked to prove their ID, whether they have criminal convictions and whether they live in the UK.
Their answers will be checked against government databases and they should receive a decision within a fortnight.
People will be able to apply online and over a smartphone app.
GOT a story? Ring The Sun on 0207 782 4104 or WHATSAPP on 07423720250 or email [email protected]
Previous article Vile woman, 23, who left baby girl brain damaged then moaned about missing haircut walks free
Next article Lotto liar who faked £8.4m jackpot win is hunted by cops 18 years on for 'conning three heartbroken women out of £400k'
POSTIES have voted to bring havoc to Christmas
Copyright © 2014 Bdayh. Powered by WordPress.

redpajama_set_name: RedPajamaCommonCrawl


text:
Over 20 Countries Started Building The "Great Green Wall" To Stop Climate Change & Poverty
Nature1 year ago
Robertas Lisickis
Greta Thunberg is challenging nations to go green, MrBeast is rounding up YouTubers to plant trees, and Ethiopia is restoring its natural landscapes with record-breaking feats—saving the planet has never been more important than it is now.
These initiatives are certainly not the first, but they definitely help in the battle against climate change. Not only do they bring to the forefront the issues that we as inhabitants of Earth face, but it also sheds light on a number of other green campaigns—campaigns like the Great Green Wall.
The Great Green Wall is planned to span 8,000km, covering 100 million hectares of land
Image credits: EcoPandas
Officially approved in 2005 and heavily endorsed in 2007, the Great Green Wall (sometimes called the Great Wall of Africa) is an initiative that aims to combat the effects of desertification in the Sahel Region (Northern Africa) and climate change worldwide.
The Great Green Wall Initiative aims to restore 100 million hectares of land that is currently degraded in the region and to sequester 250 million tons of carbon by 2030.
Image credits: Great Green Wall
The initiative will also provide a number of socioeconomic advantages, like creating 10 million green jobs and greater economic opportunities for the youth as well as ensuring greater food security to millions.
Needless to say, the Great Green Wall Initiative will also grow an 8,000km chain of forests, making it a possible contender for the natural wonders of the world and a potential tourist location.
20+ African countries are already on board with the project with another 23 regional & international partners
The ecological project gathers a great deal of inspiration and wisdom from other similar projects around the globe. Among them is the Algerian Green Dam, a massive reforestation program to safeguard and develop pre-Saharan areas, and the Green Wall of China, a series of wind-breaking forest strips in China to hold back the expansion of the Gobi Desert.
It has been 12 years since the official launch of the program, during which a handful of nations have achieved great results. According to the UN Convention to Combat Desertification, a bit over 20 million hectares of land (roughly 20% of the goal) has been restored in Ethiopia, Senegal, Nigeria, Sudan, Burkina Faso, Mali, Niger, and a handful of other nations. At the moment, a total of 21 countries are hosting projects related to the Great Green Wall with 23 regional and international partners in support.
The Great Green Wall Campaign has received a bit of criticism for attempting to solve desertification problem using the wrong means. According to Alessandra Giannini, a climate scientist at the International Research Institute for Climate and Society, the Saharan Desert formed because of where it is and how little rain it gets. The amount of vegetation will not change the amount of rainfall.
Regardless, planting trees will mean reducing the effects of climate change, which now brings less frequent, but more intensive rainfall. Forestation should help reduce run-off and increase water infiltration into the soil resulting in a more efficient use of rainfall.
The Great Green Wall Initiative even has its own movie to reinforce the pathos of the issue & project
Image credits: The Great Green Wall
Robertas, nicknamed the Comma Inquisitor by friends, is a Bored Panda writer and content creator. After his studies at LCC International University, where he got a BA in English Language and Literature, Robertas went on to do freelance teaching, translation, and copywriting work, primarily specializing in IT. He spent nearly three years writing about all things Wi-Fi, eventually being picked up by Bored Panda. Whenever there's free time, he spends it playing video games, like No Man's Sky and Euro Truck Simulator 2, or hosting Dungeons & Dragons sessions for his primarily Chaotic Evil team called the Natural Ones.
The best wall idea I ever heard of
I care way more about habitat loss and deforestation than I do about climate change. I like this initiative. Hopefully they are planting drought resistant vegetation like Stille20 mentions.
valed
do you actually know that climate change and deforestation/habitat loss are....you know ..linked??? they are part of the consequences
M O'Connell
But an individual has more control over habitat restoration and reforestation than they have over reducing climate change. It's a more tangible concept that way.
Johnny Magumbo
Yes, drought resistant vegetation is particularly wise because climate change increases the frequency of droughts. I once heard there's a feedback loop between habitat loss/deforestation and climate change, but those scientists were probably making it up.
Brett Connor
They should be planting weed! Income, quick turnover, and large amounts of Biiomass!
This climate scientist is not wrong about rainfall, but if they can introduce drought resistant plants, I don't understand why that wouldn't make a difference. Plants lower the temperature, preserve moister, build the eco system, ect.
That would be the logic behind the entire project. Time will tell.
Carson Skjerdal
Yeah I thought it was a good point. I would assume someone has evaluated the types of plants they should use.
THEPS
This is a great idea !
Vincent Jay
It's a big project. I hope it works out well.
Maria Ramirez
I find these green walls absolutely superb. Wish something of the kind would take place in Chile, where we have the driest desert of the workd. Unfortunately our authorities care nthing but economy
Joel Blazquez Sargatal
This initiative's money is going to end up in a bunch of corrupt African countries' rulers like most of the aid that is sent there
Heidi Geary
Better than Trump's wall.
Liz Valle
This is great! Around the end of the year I'm usually looking for environmental projects to donate to as a way to offset my carbon footprint.
Aria Clarke
how the HECK are comments like this getting downvoted, i guess the trolls have taken over this article.
It's ironic, the first planet that we will terraform is the Earth itself. But not too bad, we will survive, we will learn a lot and we will not start from scratch when we decide to make Mars green.
don't understand why you're getting down votes, but I completely agree
Molly Cule
I've recently started working for a massive company that operates worldwide. They plant a tree every time they hire someone. I think it's a brilliant idea. (Mine was planted in Peru.)
hava yna
That's brilliant. Not to be indiscret, what's the name of the Company? Thank you.
Ahnnah Newell
The only wall I would support!
TheExtremeSmell
I find it strange that even the country of Africa is following Americas position and building a wall to keep Mexicans out.
You just couldn't help yourself, could you? Let the hate out and some good energy in, please. The "country" of America could learn from this example of the "country" of Africa.
totally agree, it's so unnecessary when people hate FOR NO REASON. just appreciate the fact that people are cleaning up messes that we should all be working towards, but aren't.
the only wall we need
It's our choice. I have hope for my species, but so many of us will suffer because of the selfishness and stupidity of others. Will we ever learn? We'll see won't we.
Selty
walls are good now??
Jenica Thomas
They're TREES
Sotsonwift
oh my....
i... oh lord. that is such a one dimensional comment, do you even understand the post?
Tara Curry
Hey, we're building a wall too! Oh wait...ours sucks.
Oscar Jeong
Make Africa Great Again!
HeySuze Christ
It's to stop the spread of the desert. Stop editorializing.
And those needed "Greta" to do this?
Did you see where it said it was launched 12 years ago, when Greta was 4? So no, it started way before she was an activist.
Ah, there is a Greta hater out already. You guys seriously need a life. Your hate of Greta is downright certifiable.
Yeah I'm all for this, but I'm not a fan of Greta.
No. In Niger they already started it loonnng time ago. I doubt Greta was born. There is an area in the Capital (Niamey) called " The Green Belt", where trees are planted since 1960's.
we Don't need greta. simple means are better than : A DARE YOU!.
"Over 20 Countries" You mean Over 20 African countries.
desertification,
desertization,
great green wall,
great wall of africa,
massive tree planting,
nations unite to plant trees,


text:
Christianity, Politics
If Atlanta Fire Chief's termination isn't a religious liberty case, then nothing is
The New York Times offers a lead editorial today supporting the termination of Atlanta Fire Chief Kelvin Cochran. The editorial argues that Cochran's Christian beliefs about homosexuality are "homophobic," "virulent anti-gay views." It denies that Cochran's firing has anything to do with religious liberty, but only with Chief Cochran's failure to get permission to publish the book, commenting on his suspension, and exposing the city to lawsuits.
But is this really accurate? Do the editors really believe that Chief Cochran's primary error was failing to get permission to publish the book? Mayor Kasim Reed, who fired Chief Cochran, first commented on the book in November. He made it plain that his main problem was with the message of the book, not with how it came about. Mayor Reed writes:
I was surprised and disappointed to learn of this book on Friday. I profoundly disagree with and am deeply disturbed by the sentiments expressed in the paperback regarding the LGBT community. I will not tolerate discrimination of any kind within my administration…
I want to be clear that the material in Chief Cochran's book is not representative of my personal beliefs, and is inconsistent with the Administration's work to make Atlanta a more welcoming city for all of her citizens – regardless of their sexual orientation, gender, race and religious beliefs.
These comments make it clear that the offense was primarily the Christian views expressed in the book, not how the book came about. The mayor states plainly that the Chief's Christian convictions are incompatible with being Chief. In fact, the Mayor says that his Christian views amount to "discrimination" against the LGBT community. The Mayor's comments are a matter of public record. How then can the "paper of record" fail to see the religious liberty question at stake?
The Times editorial also acknowledges the fact that the Mayor's own investigation turned up no evidence of discrimination against LGBT people on the Chief's part. The Chief treated all his employees fairly, regardless of their sexuality. Nevertheless, the editorial says something quite stunning:
It should not matter that the investigation found no evidence that Mr. Cochran had mistreated gays or lesbians. His position as a high-level public servant makes his remarks especially problematic, and requires that he be held to a different standard.
Did you get that? The editors at The New York Times think that it doesn't matter that Chief Cochran treated all of his employees well. His views are so toxic that he has to be "held to a different standard"—apparently a standard that punishes city employees for their religious views.
The Times editorial is a case-study in missing the point. Chief Cochran's book is not primarily about homosexuality. The offending remarks are only mentioned on a single page—a passing reference to what Christians have always believed about homosexuality. There's no evidence the Chief shared his book to make a statement about homosexuality. Nor is there any evidence that he mistreated any of his employees. Nevertheless, the editors at The New York Times are treating him like Jim Crow.
Do we really want to treat Christians as if believing the Bible amounts to discrimination? Do we want to foster public institutions that prohibit convictional Christians from believing and expressing their views? If these issues aren't religious liberty questions, then nothing is. The editors at the New York Times ought to be able to see that.
PCA Report Names Sin While Not Being Named by It
A Plan to Read through the Bible in 2023
The Innermost Meaning of the Cross
Dan Kreider
Absolutely stunning. I try to save such hyperbole until it's really needed… and it's needed here.
This is unprecedented. If the mayor's decision is not completely overturned, this is an historical moment in American religious liberty.
Terry Galloway
I hope and pray that he will have the courage to fight this. No freedom of speech and no freedom of religion.
Brian Watson
"I will not tolerate discrimination of any kind within my administration…" says the man who is discriminating within his own administration. How do people not see the hypocrisy?
Lauren Law
Isn't it strange that in his own words the mayor says, "to make Atlanta a more welcoming city for all of her citizens – regardless of their sexual orientation, gender, race and religious beliefs" while FIRING an administrator for his RELIGIOUS BELIEFS.
And for a newspaper…the bastion of FREE SPEECH…to tolerate such an action is incredible. Take away ONE RIGHT, you'd better prepare to lose all of them. That same newspaper will one day wish that someone would stand up for it when the government starts telling it what it can and cannot publish.
Shocking that we're here now…in this time and place in history! Astounding.
Free Expression for All! (Except for Traditional Religious Believers) | I Find It Interesting | Skip Rigney's Blog
Joseph Polk
Reed's constant reference to the content of the book may open up an EEOC case for Cochran. Either way, the city of Atlanta will at least be paying Cochran a healthy sum at some point. I'm hoping there is no settlement as this really needs to be heard in federal court at some point.
Barbara Jackson
I watched the video from today's rally in Atlanta, before they marched peaceably ober to the mayor's office to deliver some 40-50k signed petitions for his reinstatement. For a moment there, I thought I was looking at something out of the 1960s, but this was black and white, male and female (Dr. Martin Luther King's neice spoke also), all standing together on the Word of Christ and calling for a sleeping church to stand, to work, and to pray. Boy I gotta tell ya, this is one day that makes this ole' girl mighty proud to be a Georgia gal.
Zach W.
Thank you for this. I saw the article in the NYT this morning and couldn't believe what I read.
Several points are probably worth noting…
First, the book didn't merely recite that Christianity opposes homosexuality. Rather, the book compared homosexuality to pedophilia, thereby implying that gay people are comparable to those who rape children. So, it stands to reason that gay employees of the Atlanta fire department may wonder whether they will be treated fairly by a chief who authors a book containing such unfair comparisons. Even so, the Chief's book was published more than a year ago, and the city took no action against him.
Second, the Chief was not fired for distributing the book to subordinates at their workplace on company time. He was merely suspended for 30 days. He was fired because he engaged in insubordination during his suspension.
I share Denny's desire to protect religious liberty. But this is no hill to die on. The Chief's views hardly reflect anything resembling mainstream evangelical views about gay people. Or do we really believe that adults who engage in consensual gay sex should sit in prison for decades like child rapists? And, even if we believe that (which I hope that we don't), do we somehow fail to see the impropriety of a boss distributing books promoting such views to his subordinates on company property and on company time? And, if we're suspended for doing so, do we believe that Christians have free rein to engage in acts of insubordination during that suspension?
I'm sorry. But I can't defend this guy. In my view, he got exactly what he deserved and merits no defense. By defending such a guy, we only seem to prove that we are the bigots that we're often accused of being.
Johnny Mason
@Ryan – Homosexuality is listed with other sexual sins. The only equating is that they are sins. Homosexuality, pedophilia, adultery, sex outside of marriage are all sexual sins.
Romans 1 lists gossiping with murder, so, according to Ryan's logic, the Bible is therefore equating gossip with murder, and is thereby implying that gossip is comparable to murder. OH NOES!!
Cowardice, too. "But as for the cowardly, the faithless, the detestable, as for murderers, the sexually immoral, sorcerers, idolaters, and all liars, their portion will be in the lake that burns with fire and sulfur, which is the second death." Revelation 21:8. Well, that's pretty much everybody. That one drive me to much prayer, and He has been gracious to grow me in strength in the faith and in wisdom, though there is still quite a way to go yet. True grace never leaves us as it finds us.
To maybe fine tune your point a bit, may I add that In the sermon on the mount, Jesus Himself actually does equate unrighteous anger with murder, and lust with adultery. Paul said if you are guilty of one point of the law, you are guilty for all of it, because covetousness (the tenth commandment) is idolatry (the first commandment). That's because the root of sin is a sinful heart, and it corrupts everything. It is not merely an act. A person's life is the result of what is in his or her heart, and that, Jesus says, is what defiles a person. Sin is sin, and it corrupts everything we are and do if left to ourselves. It may vary in degrees, but all sin is ultimately rebellion against a holy God. We want to go our own way and thumb our nose at the One who made us for His own glory. And ultimately, it shows that apart from sovereign mercy, we are all justly condemned.
And yet, God demonstrated his love for us in that while we were yet sinners, Christ died for us. He who knew no sin became sin so.that in Him, we might become the righteousness of God. Pretty amazing stuff, that.
Christiane Smith
Hi Johnny,
I've been thinking about 'the list' and it occurred to me that of all the behaviors listed, the one that is criminal is the pedophilia. Now there are 'consequences' to adultery if a spouse finds out about it, yes. But that is handled in a family court. Pedophilia is a major crime in our country.
For someone with same sex tendencies to be listed with pedophiliacs in the same category is likely for them a severe insult to their dignity as a human person. There are many people sitting in Churches today who are adulterers or who are living 'in sin' in a relationship with another without benefit of marriage,
but pedophilia is one condition that is extremely harmful to its victims and I CAN see how placing these other labels in with 'pedophilia' could be upsetting, especially if someone's boss made up this list and published it and began to hand it around, as was the case.
I've tried to look at this from various angles. I think it was the inclusion of those 'sex sins' with the word 'pedophilia' that set off a fire storm. It was an infammatory thing to write, even though the Chief likely didn't realize fully what he was implying by making that connection so closely.
some thoughts
If Atlanta Fire Chief's Termination isn't a Religious Liberty Case, Then Nothing is | Restoring Liberty
6-String Salvo, January 16, 2015 – Mike Lee
Mitch Dean
First, I'd like to make sure we're all clear about something, folks. The statements at issue are hardly so benign as something like "I follow the christian faith and I believe that homosexuality is sinful." Rather he referred to homosexuality as a "perversion" and said, among other things, that homosexual acts are "vile, vulgar and inappropriate." So, an honorable standard bearer for religious liberty, this "fine fellow" is not.
Also, when you look at this, the real reason this guy got fired is that he was apparently too obtuse to know that, when you are a high-ranking public official, you need to choose your words carefully and that this is particularly true when those words express personal views of yours on a delicate subject like this. I obviously agree with the New York Times editorial's position that canning him was justified as does the Atlanta Professional Firefighters Union http://iaff134.org/index.cfm?Section=1 However, I keep coming back to the practical consideration of Cochran's sense of judgment. I have to believe there was a closed-door conversation (or several of them) somewhere in City Hall that went something like this: "Oh my gosh, if this guy is dumb enough to use words like perversion, vile, vulgar, bestiality and pedophilia when writing about this subject, who knows what other stunts he's likely to pull and what the fallout from those will be?" If I were the Mayor, I'd have done the same thing which was essentially to get rid of a loose cannon.
Finally, in his statement, I couldn't help notice Cochran's call for prayers for "my beloved little brother in Christ Mayor Kasim Reed." I feel fairly safe in concluding that this type of condescension gives Cochran away for what he really is…a jerk who got what was coming to him.


Stunning really beautiful Cath Kidston Eiderdown feather filled with matching double duvet set in 100% cotton picture shown on double bed pattern vintage blue rose looks very French country on bed has been freshly washed ironed/ dry cleaned please note the pale mark on spot side of eiderdown is the light from window shinning down on it. The item "Cath Kidston feather eiderdown Vintage large rose plus double duvet set" is in sale since Wednesday, May 02, 2018.
This item is in the category "Home, Furniture & DIY\Bedding\Bed Linens & Sets\Bedding Sets & Duvet Covers". The seller is "jay_louise1" and is located in Bracknell. This item can be shipped to United Kingdom.


text:
Rohan Dennis Powers to Victory in Elite Men's Time Trial
The Australian has taken the first world champion's jersey of his career, beating the defending champion Tom Dumoulin by a […]
By Monica Buck September 27, 2018 at 11:06 am 3 min reading
The Australian has taken the first world champion's jersey of his career, beating the defending champion Tom Dumoulin by a staggering 81 seconds. Dennis passed two riders while speeding towards the finish line, averaging 49.6 kph. He did the 52.5-kilometre course in just 1 hour 3 minutes and 2 seconds.
"It's a dream come true to be the world champion. I've been chasing this since I was a junior. I've never won it in any age group. I'll enjoy the next year in the rainbow jersey for sure," Dennis said to the reporters.
Knowing the power Dumoulin used in the team time trial, the Australian knew exactly how much he had to push on the vicious climb 20 km from the finish line.
"I knew that Tom rode the front of the team time trial and he was pushing pretty hard so I had a fairly good idea of what power I needed to hold. I think I was 35 seconds in front at the bottom and when I got to the top, I was fairly confident that I had at least done the same time as him."
#worldchamp @fotoreportersirotti
A post shared by Rohan Dennis (@rohandennis) on Sep 26, 2018 at 2:23pm PDT
The Australian was so sure he was faster than the Dutchman that he even considered a victory salute. However, he didn't want to ruin his first shot at a rainbow jersey, so in the end, he held back.
"I can only win against Dennis if I am in top shape. The top form was not there today," Dumoulin admitted in an interview for the NOS television.
Dumoulin was in fact lucky to have finished second as he clocked a time which was only half a second quicker than that of Victor Campenaerts. The Belgian, however, didn't mind at all. "What a way to end my season! Can't describe how happy I am to be on this podium!" he wrote on his Instagram.
3th place at the TT Word Championchips! What a way to end my season! Can't describe how happy I am to be on this podium! @ridley_bikes @lotto_soudal @hjcsports @gaernecycling @srmpower @campagnolosrl @lookcycle @sanaseurope @compexbenelux
A post shared by Victor Campenaerts (@campenaertsvictor) on Sep 26, 2018 at 10:52pm PDT
1. Rohan Dennis (Australia) 1:03:45.53
2. Tom Dumoulin (Netherlands) +1:21.09
3. Victor Campenaerts (Belgium) +1:21.62
4. Michal Kwiatkowski (Poland) +2:04.58
5. Nelson Oliveira (Portugal) +2:14.34
6. Jonathan Castroviejo (Spain) +2:17.53
7. Tony Martin (Germany) +2:25.23
8. Patrick Bevin (New Zealand) +2:34.78
9. Vasil Kiryienka (Belarus) +3:07.54
10. Martin Toft Madsen (Denmark) +3:23.39
2018 UCI Road World Championships Rohan Dennis Tom Dumoulin Victor Campenaerts
Written by: Monica Buck
Van Vleuten Wins UCI Road World Championships 2018 Women's Time Trial
A Man Who Wants to Cycle Down All of Scotland's Munros
The Swiss Voted to Officially Embed Cycling into Their Constitution
An Unbeaten Stunt: Riding Down a Dam Wall
VIDEO: Go Hard or Go Home – Lycra-Clad Pros Bested by an Effortless Colombian Farmer
video Road cycling
15 Spectacular Vintage Photos of Giro d'Italia
Tour de France Back in the Day: Check Out 10 Historical Photographs of the Grande Boucle
gallery Road cycling
Hell of the North: 10 Spectacular Vintage Photos of the Paris-Roubaix


Small lenders find it difficult to reduce cross-ownership in other banks.
The National Financial Supervisory Committee (NSFC) estimates that real estate-related credit makes up over 20 per cent of banks' total outstanding loans.
The State Bank of Viet Nam has sought the Government's permission to allow credit institutions more time to sell their stakes in other lenders since many smaller ones are struggling to do so.
Through a circular in 2015 it had set a February 2016 deadline for lenders to bring their ownership thresholds within the limits prescribed by the Law on Credit Institutions.
It wants to extend this to June 30, 2019.
The law allows individuals to own up to 5 per cent of the charter capital of a bank and institutions to own 15 per cent except in cases of distressed or equitised banks and ownership by a strategic foreign investor.
The extension of the deadline is aimed at helping small banks, who have reportedly had problems divesting and sought more time.
Big banks have had no such problems since they own shares mostly in large lenders who are doing quite well themselves.
Vietcombank for instance used to own stakes in Military Bank, Eximbank, OCB, SaigonBank and Cement Finance Company (CFC), and had to sell them to ensure its ownership was under 15 per cent.
In 2017 it sold VNĐ66 billion (US$2.09 million), or 10.9 per cent, worth of shares in CFC, and VNĐ132.5 billion ($5.84 million) or 4.3 per cent in SaigonBank.
In April this year it sold a 1.36 per cent stake in OCB for VNĐ66.7 billion ($2.94 million).
Now it only owns 8.19 per cent of Eximbank and 6.97 per cent of Military Bank.
The bank plans to sell them early next year.
BIDV and Vietinbank have also successfully reduced their stakes in several credit institutions.
Smaller lenders'capital withdrawal was not as smooth as the big ones was.
At its recent annual general meeting Maritime Bank, for instance, did not spell out when it would sell the 9.98 per cent and nearly 5 per cent it owns in from PGBank and Pvcombank.
Analysts admitted the process at small banks is moving at a snail's pace.
Experts said small banks have not been doing too well, and so selling stakes in them have been difficult or would have involved selling at low prices.
Another reason for the delay is that most small lenders, focused on settling bad debts, have been unable to multi-task.
The experts said, in the event, small banks should look at mergers and acquisitions, which would enable them to both reduce their cross-ownership and improve their balance sheets at the same time.
They pointed to Maritime Bank, which has merged with Mekong Development Bank and the Textile and Garment Finance Joint Stock Company, in each of which it owned a 10 per cent stake, as a successful example.
It also revealed that last year consumer lending grew at three times the overall credit growth rate of 18 per cent to VNĐ1.17 quadrillion (US$51.54 billion).
Some banks resorted to subterfuge by offering loans supposedly for "house repairs" and "house construction" to customers seeking consumer credit. Consequently, loans in these categories soared by 76.5 per cent.
A report by the Ministry of Planning and Investment's business registration department said in the first half of this year the property sector had the highest number of newly established enterprises -- 2,600 -- and they have a total capital of VNĐ150 trillion (US$6.6 billion).
In fact, they accounted for 41 per cent of all new businesses and 29 per cent of investment.
The aforesaid figures show that loans continued to be injected into the property sector despite the SBV's efforts.
The central bank has announced several policies to limit lending to the real estate and construction sectors to better control bad debts.
Its Document 563/NHNN issued recently requires lenders to avoid too much focus on real estate customers and maintain credit growth in the sector within safe limits.
They must closely monitor lending to the real estate sector, regularly review the progress of property projects and their developers' financial condition, particularly their collateral, and have measures in place to handle any defaults.
Besides properly evaluating and processing lending applications, the credit institutions must also monitor borrowers to ensure they do not use consumer loans for investment in property or securities.
Credit expansion should go hand in hand with strict supervision to ensure loans are used for their intended purpose and do not add to bad debts, the document said.
This is not the first time the central bank has instructed lenders to tighten credit to the real-estate and construction sectors. The move this time follows the acceleration of consumer lending last year and the diversion of a significant amount of consumer loans to the property sector this year.
In response to the central bank's appeal, many lenders have become more cautious in appraising property-related loan applications.
They have tended to approve loans worth only around half the value of a property, give or take 20 percentage points, instead of almot the full amount as before.
Some banks even refuse to accept properties bought with borrowed money as collateral, and require borrowers to put up unencumbered properties.
Yet the money flowing into the sector has only fallen very modestly.
A SBV report said in the first quarter of this year property-related lending had risen by 3.65 per cent from the end of last year.
This figure is slightly lower than a year ago but is still very high.
Experts have called for tightening credit to the property sector in the coming years, pointing out this would result in better appraisal of property projects meaning fewer chances of loans going bad in future.
Circular No.19/2017/TT-NHNN issued by the SBV late last year called for reducing the use of short-term deposits for medium- and long-term loans to 45 per cent this year and 40 per cent next year.
The central bank has also kept the risk index at 200 per cent of receivables from the real estate in the coming years.
Scores of local and foreign ride-hailing firms have entered the market since Uber's withdrawal last April, targeting Hà Nội and HCM City where Grab is the dominant player.
FastGo last week launched its ride-hailing service in Hà Nội after three years of development.
The company plans to expand to eight cities in the next three years, targeting mainly youth and office goers and hopes to sign up 20,000 drivers, according to Sài Gòn Times newspaper.
Besides FastGo, customers in Hà Nội and HCMC can also download other ride-hailing apps such as Vato, T.Net, Go-ixe, and Xelo for bike and car transport services.
These local firms also plan to develop delivery and shipping services, transport sharing and passenger car-leasing services instead of directly competing with Grab.
Some foreign players are also keen to enter Việt Nam, including Go-Jek of Indonesia, Didi Chuxing of China and MLV of Singapore.
Major local taxi companies like Mai Linh and Vinasun with fairly popular ride-hailing apps like V.Car and Taxi Mailing, face difficulties competing with Grab.
The departure of Uber has opened up a great opportunity for Vietnamese taxi firms and ride-hailing apps to jump into the e-hailing though analysts warn that the market will be not as lucrative as they think.


You are at:Home»RECAPS»BACHELORETTE»Category: "Bachelorette 10 Vlogs: Andi"
Dana Goodyear and Tyler Hayes are coming to you live and in person! On these videos they fill you in on all the romance, tears and batshit crazy moments from The Bachelorette! Find out what you missed this week so you're all caught up heading into next weeks show!


Funnyworks Oz is running term 4 workshops at Belconnen Arts Centre again for term 4. Just book on eventrbrite or at BAC website – only $240 for an 8 week course with all materials provided. Learn how to create a cartoon character and tricks of the trade including caricaturing – interactive and fun sessions to bring out the cartoonist within!


text:
Q: Why does an in-place member initialization use a copy constructor in C++11? I'm a little bit confused about the following code:
struct A {
  std::atomic<int> a = 0;
};

Which gives an error:

copying member subobject of type 'std::atomic' invokes deleted constructor

But almost the same code does work:
struct A {
  std::atomic<int> a = {0};
};

Okey, if the first variant requires the copy constructor, then it have to use operator=(). But wait! This operator perfectly works without the copy constructor:
A a;
a.a = 1;

Can anyone explain how both of the in-place initializations are expanded in terms of simple operations? Why the first one requires copy constructor?

A: Let consider the first case
struct A {
  std::atomic<int> a = 0;
};

For this initialization to be successful, there needs to be an accessible copy constructor. But the copy constructor is defined as deleted.
atomic(const atomic&) = delete;

So the compiler issues an error.
In the second case
struct A {
  std::atomic<int> a = {0};
};

where an initializer list is used the copy constructor is not required. The compiler searches for a constructor that accepts one int argument and such constructor indeed exists, so it is called.
constexpr atomic(T) noexcept;

or if to substitute template parameter for type int
constexpr atomic(int) noexcept;

According to the C++ Standard if a class has no constructor with the first parameter of type std::initializer_list (when an initializer list is specified) then

3 List-initialization of an object or reference of type T is defined
  as follows: ...
Otherwise, if T is a class type, constructors are considered. The
  applicable constructors are enumerated and the best one is chosen
  through overload resolution (13.3, 13.3.1.7). If a narrowing
  conversion (see below) is required to convert any of the arguments,
  the program is ill-formed.

In the last case
A a;
a.a = 1;

this uses an assignment operator
T operator=(T) noexcept;

or if to substitute template parameter for type int
int operator=(int) noexcept;

So there is no problem.

A: All references are to N3797, the C++1y current working draft. §8.5 Initializers [dcl.init]/15 states:

The initialization that occurs in the form
T x = a;

as well as in argument passing, function return, throwing an exception (15.1), handling an exception
  (15.3), and aggregate member initialization (8.5.1) is called copy-initialization. [ Note: Copy-initialization may invoke a move (12.8). —end note ]

So the declaration:
std::atomic<int> a = 0;

is performing copy-initialization. According to 8.5/17:

The semantics of initializers are as follows. The destination type is the type of the object or reference being initialized and the source type is the type of the initializer expression. If the initializer is not a single (possibly parenthesized) expression, the source type is not defined.

The destination type here is std::atomic<int> and the source type is int (i.e., decltype(0)). To determine the semantics of the initialization, we have to determine which of paragraph 17's bullets applies:

*

*If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized (8.5.4).

*If the destination type is a reference type, see 8.5.3.

*If the destination type is an array of characters, an array of char16_t, an array of char32_t, or an array of wchar_t, and the initializer is a string literal, see 8.5.2.

*If the initializer is (), the object is value-initialized.

*Otherwise, if the destination type is an array, the program is ill-formed.

*If the destination type is a (possibly cv-qualified) class type:

*

*If the initialization is direct-initialization, or if it is copy-initialization where the cv-unqualified version of the source type is the same class as, or a derived class of, the class of the destination, ... [does not apply, source type is int]

*Otherwise (i.e., for the remaining copy-initialization cases), user-defined conversion sequences that can convert from the source type to the destination type or (when a conversion function
  is used) to a derived class thereof are enumerated as described in 13.3.1.4, and the best one is chosen through overload resolution (13.3). If the conversion cannot be done or is ambiguous, the
  initialization is ill-formed. The function selected is called with the initializer expression as its argument; if the function is a constructor, the call initializes a temporary of the cv-unqualified
  version of the destination type. The temporary is a prvalue. The result of the call (which is the
  temporary for the constructor case) is then used to direct-initialize, according to the rules above,
  the object that is the destination of the copy-initialization. In certain cases, an implementation
  is permitted to eliminate the copying inherent in this direct-initialization by constructing the
  intermediate result directly into the object being initialized; see 12.2, 12.8.

*...

There we are. The initializer expression - 0 - is converted into a std::atomic<int> via the creation of a temporary object initialized with the std::atomic<int>(int) constructor. That temporary object is used to direct-initialize the original std::atomic<int> object. The other of the "(possibly cv-qualified) class type" bullets that we ignored before now applies:

*

*If the initialization is direct-initialization, or if it is copy-initialization where the cv-unqualified version of the source type is the same class as, or a derived class of, the class of the destination, constructors are considered. The applicable constructors are enumerated (13.3.1.3), and the best one is chosen through overload resolution (13.3). The constructor so selected is called to initialize the object, with the initializer expression or expression-list as its argument(s). If no constructor applies, or the overload resolution is ambiguous, the initialization is ill-formed.

Recall that the new initializer is a prvalue std::atomic<int>. Overload resolution determines that there is no appropriate std::atomic<int> constructor that accepts a single argument std::atomic<int>&& (std::atomic<int> is not movable or copyable) and diagnoses the program as ill-formed.
For the second part of the question,
std::atomic<int> a = {0};

is again copy initialization per 8.5/15. This time, however, the very first bullet of 8.5/17 applies:

*

*If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized (8.5.4).

For list-initialization, we must look to 8.5.4/3:

List-initialization of an object or reference of type T is defined as follows:

*

*If T is an aggregate, aggregate initialization is performed (8.5.1).

*Otherwise, if the initializer list has no elements and T is a class type with a default constructor, the object is value-initialized.

*Otherwise, if T is a specialization of std::initializer_list<E>, a prvalue initializer_list object is constructed as described below and used to initialize the object according to the rules for initialization of an object from a class of the same type (8.5).

*Otherwise, if T is a class type, constructors are considered. The applicable constructors are enumerated and the best one is chosen through overload resolution (13.3, 13.3.1.7). If a narrowing conversion (see below) is required to convert any of the arguments, the program is ill-formed.

*...

std::atomic<int> is a class type, not an aggregate or initializer_list specialization, so constructors are considered. The std::atomic<int>::atomic(int) constructor will be selected as a perfect match and is used to initialize the object.

redpajama_set_name: RedPajamaStackExchange


Really enjoy taking visitors here...bit of sophistication for a happy hour drink. Staff always welcoming. Only down side, stale smoke smell from smoking area...But will be returning.
Extremely classy bar, very chic atmosphere with exceptionally friendly and efficient bar staff not cheap but the views are amazing.
Get quick answers from Bar 44 staff and past visitors.


text:
Home / Uncategorized / Historicizing Arab blogs: Reflections on the transmission of ideas and information in Middle Eastern history
Cairo coffeehouse. Courtesy of Flickr user michaelmc under a Creative Commons license
Historicizing Arab blogs: Reflections on the transmission of ideas and information in Middle Eastern history
By Brian Ulrich May 6, 2009
Arab blogs have caught the attention of Middle East watchers. Much of the attention dedicated to them, however, has dealt with their political importance, whether as a mobilizing tool for activists or as an alternative source of news reporting. Blogging is also interesting, however, as a new and perhaps significant departure in the history of media in the Middle East. By this I do not mean "media" in the common late 20th century usage in which it applies primarily to those who work within unidirectional mass media, but rather as a medium of communication. In particular, I am interested in the way media enables and structures relationships between and among senders and receivers of ideas and information, as well as in the mechanisms of reception of messages and the perceptions of media forms and transmitters which circumscribe their authority.
This article is not designed to answer such questions, but to raise them through a brief survey of the immediate impacts of new media forms as currently understood by historians. Its approach to the history of technology is that while new media forms can enable certain changes in social practices, both the development of new forms and their utilization and impact are heavily, if not decisively, influenced by cultural, social, economic, and political factors. The intent is to use this survey to provide a general background giving rise to new comparisons and models which scholars may find useful, both in evaluating blogging in the Middle East as an activity and situating it in its historical context. It is necessarily preliminary, as many topics within the history of communication in the region require further investigation.
Parchment to print
In her study of blogging in the United States and Western Europe, Jill Walker Rettberg examined blogs in terms of their similarity to other forms of mass media introduced across centuries. For Rettberg, printed texts represented the first true mass media, and she suggested that blogs represent a similar increase in the ability to make texts available to wide audiences.[i] In the Arab context, we should note the introduction of paper nearly one thousand years before print, when the Abbasid dynasty sought to provide for the needs of government bureaucracy by supporting a paper industry to replace the expensive parchment and rare papyrus.[ii] Once readily available, paper became the medium for a vibrant book industry allowing for the rapid dissemination of knowledge in a number of fields.[iii]
Greater availability of writing materials did not lead quickly to a culture of learning which privileged writing. Gregor Schoeler has demonstrated the ways in which writing was used to support rather than supplant oral transmission, with shaykhs using notes during lectures to students, who took their own notes as study aids for an oral evaluation process.[iv] Simply studying a book on one's own was thought to open the door to errors of understanding which a learned shaykh could correct.[v] Even when the idea of books as fixed texts became dominant in the ninth and tenth centuries, orality and chains of transmission remained important. Books were usually dictated to scribes who checked their work through oral recitation back to the authority whose work they were transcribing, and guaranteed authenticity of the contents depended on a chain of authorizations leading back to the original author.[vi] Such means of transmitting knowledge continued to have currency in the Arab world deep into the Ottoman period, though there were increasing exceptions, particularly in the rational sciences.[vii] The ruling powers, which before long became culturally alien military elites, supported this work through waqf endowments and appointments to judgeships, as well as more direct forms of patronage. Both women and men participated in the transmission of knowledge in the premodern Middle East, though women's participation was often limited by the value placed on gender segregation.[viii] Knowledge was also not limited to the elite, the members of the general public were instructed orally in religious knowledge by ulama.[ix]
The first printing presses in the Ottoman capital of Istanbul were opened by Jewish immigrants (1492) and Armenians (1567).[x] The first printing in Ottoman Turkish was authorized during the reign of Ahmed III by Ibrahim Muteferrika, who in trying to sell the project "cited benefits for the masses needing instruction and for the ruling classes and the benefit of perpetuating books by printing them when manuscripts could be or had been destroyed by war."[xi] This statement represents a sense on the part of some in the Ottoman elite that mass production leads to permanence. The resulting firman permitted printing only in practical sciences, and not religious fields.[xii] Printing did not truly catch on, however, until the 19th century, and particularly its last quarter. One survey shows that, within the Ottoman Empire and across the fields of literature, positive science, religion, and governments, the period from 1820 until 1839 saw the publication of 217 titles, that from 1840 until 1876 had 2468 titles, and the period from 1876 until 1908 gave rise to 9094.[xiii] This seems to reflect the situation in the predominantly Arab provinces, as well, for despite some Arabic printing by Syrian Christians and in Muhammad Ali's Egypt, private printing did not become an important business in Egypt until the 1870's.[xiv]
According to Juan Cole, an important precondition for this was a rise in literacy generated by the new Egyptian education programs designed to staff the bureaucracy.[xv] Kemal Karpat takes this analysis further, arguing that education for service in Ottoman bureaucracies, which increased first during the Tanzimat period and again under Abdulhamid II, created a new class of elites imbued with then-current ideas of modernity and characterized by a receptivity to reconfigured geometries of identity supported by new media forms.[xvi] In particular, pan-Islamic sentiments spread through newspapers, which as Benedict Anderson pointed out is "a book sold on a colossal scale, but of ephemeral popularity."[xvii] Karpat highlights Basiret as the primary organ of Ottoman pan-Islamism,[xviii] while Cole notes the importance of Jamal al-Din al-Afghani and Muhammad 'Abduh's al-'Urwa al-Wuthqa and 'Abd Allah al-Nadim's Tankit wa Tabkit and al-Ta'if, the latter of which became the chief organ of the 'Urabi movement.[xix]
Print culture affected the transmission of ideas and knowledge in the Middle East in several ways. Those unable to access traditional perches of authority could popularize their ideas through print-related entrepreneurship. Jamal al-Din al-Afghani's formal theological training was not extensive enough for him to earn any formal credentials, and if he had it might have narrowed rather than expanded his potential audience on account of his Shi'ism.[xx] Nonetheless, he was able to become the father of the broad movement of Islamic reformism because of print publications. Such publications were able to reach the illiterate as well as the literate, as the educated read them aloud to an audience in coffeehouses and other venues.[xxi] This marked a practice of communication in which oral dissemination served to extend the reach of written texts, with education rather than intellectual trustworthiness as the basis of authority. The ready availability of printed Qur'ans and commentaries also helped sustain a movement among Sunnis toward greater acceptance of ijtihad, which depended on direct access to those texts.[xxii] Furthermore, as Albert Hourani notes, al-Afghani displayed a sense of the umma that would have been difficult to maintain before his era in that, "The centre of attention is no longer Islam as a religion, it is rather Islam as a civilization."[xxiii] Cole termed him a "Muslim nationalist" suggesting a receptivity within society to new horizontally circumscribed identities often associated with rituals of print.[xxiv]
In 1871, an Istanbul-based Lebanese journalist named Ahmad Faris ash-Shidyaq wrote of how ulama and poets became increasingly involved in political discussions when exposed to newspapers. The Young Ottoman intellectual Namik Kemal associated print culture with a simpler writing style that had mass appeal. Muhammad 'Abduh compared newspapers to mosque preachers, an indication of the close association of print with oral forms of idea transmission in popular perception in the late 19th century.[xxv] Other associates of al-Afghani actively called upon mosque preachers to disseminate news during their sermons.[xxvi] Some satirical political publications even used Egyptian Colloquial Arabic, making them even more accessible to the less educated public.[xxvii]
Women also benefited from the new media form. The first publications dedicated to women's issues appeared during the Tanzimat period (1839-1876). Under Abdulhamid II, an official women's press, "promoted a new idealized image of a Muslim mother and wife, who shopped at Muslim stores and raised obedient, pious children." This was followed under the Young Turks by a press which "gave vent to more liberal voices, and discussed a much broader range of issues, including sensitive ones like feminism, universal suffrage, and gender discrimination."[xxviii] Cole has noted that in Egypt, women such as Malak Hifni Nasif could participate much more easily in debates mediated by print than they could prior to its popularization.[xxix] The press was also not limited to politics, for, as Elizabeth B. Frierson notes, "Readers…wrote letters to endorse places of business or to protest high prices, and they fiercely debated moral-freighted products such as the corset."[xxx]
Print culture in the Arab world, however, also developed in an environment of increasingly strong governments. Under Abdulhamid II, the Ottoman Empire practiced rigorous censorship of politically sensitive books and newspapers.[xxxi] The same was true under colonial powers, whose rule saw the growth of new, linguistically defined forms of nationalism. The most open periods were during what William Rugh has called the "factional phases," where different groups competed for power within individual countries, thus diversifying the base of capital needed for printing, as well as preventing a monopoly of coercive potential. By the late 20th century, all newspapers printed in the Arab world were in a situation where they were expected to support the regime of the country where they were based.[xxxii] The taboos maintained, however, varied by country.
The mighty electron
This was the environment in which radio first became an important component of the Arab media landscape. Although radio began in Egypt during the 1920's, Gamal Abdel Nasser developed it both as a means of nationalization and to broadcast the regime's perspectives on contemporary issues throughout the Arab world. Other nationalist regimes, such as Iraq and Syria, soon followed.[xxxiii] More traditionalist regimes, such as Jordan, failed to compete with the nationalist broadcasts.[xxxiv] Marc Lynch characterizes Egypt's Voice of the Arabs as featuring, "little rational argument, and much invective and fierce rhetoric."[xxxv] Research on the reception of these perspectives by listeners, however, remains badly needed. Listening seems often to have taken place in groups, such as in coffeehouses.[xxxvi] In a striking interview recorded by Madawi al-Rasheed, a former ARAMCO worker from Najd recalls listening to radio broadcasts on significant regional issues with other workers from around the Arab world in 1953. The worker said that all he wanted to buy for himself with his wages was a radio to listen to those broadcasts.[xxxvii]
That worker's remarks suggest that, while not a "public sphere," Voice of the Arabs cannot be dismissed as simple propaganda. People will simply lose interest in media sources without credibility. Rugh has suggested that people's low trust in official state media has led to a persistent importance in oral communication among personal networks in the transmission of information.[xxxviii] Nasser had influence because his message resonated with a significant number of Arabs. At the same time, it both reflected the state's ability to dominate means of mass communication, while seeking to, and perhaps succeeding in, placing ultimate authority in Nasser as the great leader who embodied the nation. Rugh traces the state's ability to control broadcast media to the significant start-up costs and a higher level of state interest in controlling radio and television due to their massive reach. He also notes that radio expanded under strong governments and thus had no tradition of independence.[xxxix] This, however, may miss the critical point that it expanded precisely because the governments sought to use its aforementioned reach. Broadcast media not only existed under state control; it existed because the state desired it.[xl] The tradition of carrying advertising in blocks between programs may reflect an original sensitivity to the fact that state-sponsored radio was a political, rather than commercial venture, and programmers did not want ads to interrupt the content of shows regardless of the loss in their effectiveness.[xli] Charles Hirschkind has located Nasserist programming within a history of agentive listening.[xlii] More directly relevant to blogs, however, is the manner in which radio drew listeners into the imagined community of Arabic language and culture and shared projects of advancement for that community under Nasser's leadership.
A further transformation of the Arab media landscape took place during the 1990's with the rise of satellite television. Previous Arab television stations were driven by the same political concerns as radio, and sought to either promote a political agenda or counter one by providing alternative programming.[xliii] The new satellite stations, however, although linked to ruling families from the Arabian Peninsula, were driven in whole or part by commercial considerations.[xliv] Although difficult to measure, consumer demand played an increased role in determining content, making public opinion important in the competitive satellite TV market.[xlv] Lynch has highlighted al-Jazeera in particular as a key component of "a genuine public sphere, characterized by self-conscious, open, and contentious political argument before a vast but discrete audience" which shaped "not only public attitudes but also conceptions of political identity and the strategies of all political actors."[xlvi] The unidirectional character of mass media during the 20th century has been somewhat revised by open call-in shows in real time. Anyone who has frequented coffeehouses in the Arab world can also testify that people often watch in public groups, as well as through home satellite dishes. At the same time, practical controls limit the ability of any given individual to participate in the discussions and broadcast their voice to the community.
In the second half of the 20th century, an important alternative to state-regulated media developed in the form of audio cassettes. In the Iranian context, Annabelle Sreberny-Mohammadi and Ali Mohammadi have famously studied how cassettes played a role in the 1979 revolution.[xlvii] Many cassettes are produced cheaply by individuals and disseminated through personal networks below the radar of state censorship. Flagg Miller has examined the role of cassette poetry in Yemen, where it is marshaled in both disputes among tribes and popular dissatisfaction with the government.[xlviii] Far more common, however, are cassettes tied to discourses related to Islam. One Yemeni shop included both live and studio oral performances on spiritual and political topics, as well as songs, discussions and scripted dialogues.[xlix] Hirschkind quotes Egyptians who say that cassette sermons are a superior form of informative media to that run under the aegis of the state.[l] Once again, listening is frequently communal and gives rise to discussion and debate over the issues raised.[li]
Blogging and new rituals of engagement
Cassettes deserve mention as a possibly significant point of comparison for blogs. Both emerged among those culturally linked to the medium and were used to express dissent with the established order. Sermons have long been an important part of the Islamic Revival, and had been recorded on tape since the early 20th century.[lii] The origins of blogging are tied to those with an interest in computers. Lynch characterizes the first wave of Arab bloggers as, "young, technologically-oriented, and politically unengaged."[liii] Although it seems intuitively that blog reading before a computer screen would represent a break with the common practice of group reception of information seen in previous media forms, the existence of comment threads on many blogs may introduce a new element to that dynamic, as within virtual space time becomes more malleable and physical absence insignificant as those reading a post participate in a shared experience of the presented ideas and engage in discussion, not only with each other, but frequently with their originator in a new form of social rituals of engagement.
It is in such open rituals of engagement that blogs' true revolutionary potential may lie. As suggested by the term "cyberspace," the on-line creates a virtual space for the interaction of individuals regardless of physical distance. If this is the case, then within the history of the Middle East, the most apt comparison may not be to a media form, but rather to the rise of the coffeehouse as a new space for community interaction. Ralph Hattox's study is potentially instructive. As he says: "In place of newspapers or public forums, the coffeehouse quickly became the place of exchange of information, where news of the palace or Porte was spread by word of mouth…A forum for the public ventilation of news, views and grievances concerning the state possessed the potential for becoming a political 'clubhouse' from which concerted action might be taken by those with a common distaste for the regime."[liv] In addition, coffeehouses were the sites of much less controversial conversation, as well as games and entertainment, in keeping with the multitude of topics addressed by blogs.[lv]
If the internet represents a new public space in the Middle East, then many of its characteristics are shaped by the physical world within which it is embedded. For example, many blogs are most commonly found through national aggregators, such as Bahrain Blogs.[lvi] This has implications for the types of community created around a particular blog or between blogs. At the same time, the anonymity for which blogging provides makes it tempting for those seeking to escape an architecture of isolation created by the interface of their identity with that of those around them. As Courtney Radsch writes about Egypt: "As the blogosphere expanded and diversified, identity communities began to form. Bloggers who identified themselves as homosexual, Coptic, Bahai, and salafi created blogs and commented on each others' posts."[lvii] Sharon Otterman[lviii] and George Weyman[lix] have both written excellent studies of women's use of blogging in this fashion. Such involvement would have been all but impossible with previous media forms where a combination of convention and the frequent need for at least some physical communication rendered anonymity problematic.
This democratizing feature of blogs may be the most important. In most forms of mass media, some members of publicly marginalized groups have been able to participate in discussions of sensitive issues. However, the much lower barrier to entry for blogs, which require only the rapidly spreading internet access, means that anyone can jump in. Someone who would find it either impossible, or only possible with an unacceptable level of sacrifice, to say what they have to say in other formats will often find it easier to work behind an on-line pseudonym. At the same time, much as many in the 16th century Ottoman Empire looked down at coffeehouses, so its use to oppose dominant social discourses may discredit blogging in the eyes of many, as Radsch noted is already happening with some Egyptian professionals in response to bloggers' political activism.[lx] The social, cultural, and political conditions which inspire many to blog affect not only its pattern of voices, but the patterns of perception of the medium itself. At the same time, as economic imperatives dictate the spread of the internet which enables it, blogging holds out the potential of creating new perceptions of and means of exercising authority in the distribution of ideas based on the interaction of otherwise unknown on-line personas with given communities of interest. Given the importance of knowledge and ideas to social construction, the potential is there to shift the forces which help shape society itself.
Brian Ulrich is a visiting assistant professor of history at Colgate University in Hamilton, New York. He is currently working on a book project concerning Arab tribalism during the caliphates. He also blogs on topics related to the Middle East at American Footprints and Brian's Coffeehouse.
[i] Jill Walker Rettberg, Blogging, (Malden, MA: Polity Press, 2008), pp. 32-8.
[ii] Jonathan M. Bloom, Paper before Print: The History and Impact of Paper in the Islamic World, (New Haven: Yale University Press, 2001), pp. 48-9.
[iii] Bloom, pp. 110-6.
[iv] Gregor Schoeler, The Oral and the Written in Early Islam, tr. Uwe Vagelpohl, ed. James E. Montgomery, (New York: Routledge, 2006), p. 45.
[v] Jonathan Berkey, The Transmission of Knowledge in Medieval Cairo: A Social History of Islamic Education, (Princeton: Princeton University Press, 1992), p. 24-6. See also Francis Robinson, "Technology and Religious Change: Islam and the Impact of Print," Modern Asian Studies 27 (1993), p. 237-8.
[vi] Bloom, pp. 113-5.
[vii] Juan R.I. Cole, "Printing and Urban Islam in the Mediterranean World, 1890-1920," Modernity and Culture from the Mediterranean to the Indian Ocean, ed. Leila Tarazi Fawaz and C.A. Bayly, (New York: Columbia University Press, 2002), p. 348.
[viii] Berkey, pp. 167-81.
[ix] Berkey, pp. 201-16.
[x] Bloom, p. 221. Francis Robinson gives the Jewish date as 1493 in Robinson, p. 233.
[xi] Bloom, p. 222.
[xii] Bloom, p. 222.
[xiii] Kemal H. Karpat, The Politicization of Islam: Reconstructing Identity, State, Faith and Community in the Late Ottoman State, (New York: Oxford University Press, 2001), p. 134.
[xiv] Cole, "Printing and Urban Islam," pp. 349-50. The Ottomans brought the first printing press to Yemen in 1877. Brinkley Messick, The Calligraphic State: Textual Domination and History in a Muslim Society, (Berkeley: University of California Press, 1993), p. 115.
[xv] Cole, "Printing and Urban Islam," p. 350.
[xvi] Karpat, pp. 101-3.
[xvii] Benedict Anderson, Reflections on the Origin and Spread of Nationalism, Revised Edition, (London: Verso, 1991), p. 34.
[xviii] Karpat, pp. 119-22.
[xix] Cole, "Printing and Urban Islam," p. 355.
[xx] Cole, "Printing and Urban Islam," p. 355.
[xxi] Juan R.I. Cole, Colonialism and Revolution in the Middle East: Social and Cultural Origins of Egypt's 'Urabi Movement, (Cairo: The University of Cairo Press, 1999), pp. 112, 115.
[xxii] Cole, "Printing and Urban Islam," p. 354.
[xxiii] Albert Hourani, Arabic Thought in the Liberal Age 1798-1939, (Cambridge: Cambridge University Press, 1983), p. 114.
[xxiv] Cole, "Printing and Urban Islam," p. 344; Anderson, pp. 34-5.
[xxv] Cole, Colonialism and Revolution, pp. 116-8.
[xxvi] Charles Hirschkind, The Ethical Soundscape: Cassette Sermons and Islamic Counterpublics, (New York: Columbia University Press, 2006), pp. 42-3.
[xxvii] Cole, Colonialism and Revolution, p. 124.
[xxviii] M. Sukru Hanioglu, A Brief History of the Late Ottoman Empire, (Princeton: Princeton University Press, 2008), p. 183.
[xxix] Cole, "Printing and Urban Islam," pp. 358-9.
[xxx] Elizabeth B. Frierson, "Cheap and Easy: The Creation of Consumer Culture in Late Ottoman Society," Consumption Studies and the History of the Ottoman Empire, 1550-1922: An Introduction, ed. Donald Quataert, (Albany: State University of New York Press, 2000), p. 247.
[xxxi] Karpat, pp. 133-4.
[xxxii] William A. Rugh, Arab Mass Media: Newspapers, Radio, and Television in Arab Politics, (Westport, CT: Praeger, 2004), pp. 43-58. This has a detailed discussion of the history of the environment for newspapers in different countries during the 20th century.
[xxxiii] Rugh, pp. 184-5.
[xxxiv] Rugh pp. 190-2.
[xxxv] Marc Lynch, Voices of the New Arab Public: Iraq, al-Jazeera, and Middle East Politics Today, (New York: Columbia University Press, 2006), p. 36.
[xxxvi] Paul Starkey, "Modern Egyptian culture in the Arab world," The Cambridge History of Egypt, Vol. II: Modern Egypt from 1517 to the End of the Twentieth Century, ed. M.W. Daly, (Cambridge: Cambridge University Press, 1998), p. 424.
[xxxvii] Madawi al-Rasheed, A History of Saudi Arabia, (Cambridge: Cambridge University Press, 2002), pp. 97-8.
[xxxviii] Rugh, pp. 12-3.
[xxxix] Rugh, pp. 181-2.
[xl] The importance of the state in 20th century development in the Middle East could also be marshaled as an explanation for the lack of alternate forms of radio technology.in the region. On the predominance of unidirectional broadcast media, see Rettberg, pp. 53-5.
[xli] Rugh, pp. 182-3.
[xlii] Hirschkind, pp. 50-4.
[xliii] Rugh, pp. 186-8, 192-4.
[xliv] Rugh, pp. 211-22.
[xlv] Fatima Mernissi, "The Satellite, the Prince, and Shaherazad: Women as Communicators in Digital Islam," On Shifting Ground: Muslim Women in the Global Era, ed. Fereshteh Nouraie-Simone, (New York: The Feminist Press at The City University of New York, 2005), pp. 7-10.
[xlvi] Lynch, Voices, pp. 247-8, and passim for much of this section.
[xlvii] Annabelle Sreberny-Mohammadi and Ali Mohammadi, Small Media, Big Revolution: Communication, Culture and the Iranian Revolution, (Minneapolis: University of Minnesota Press, 1994).
[xlviii] Flagg Miller, The Moral Resonance of Arab Media: Audiocassette Poetry and Culture in Yemen, (Cambridge: Harvard University Press, 2007), pp. 84-98.
[xlix] Miller, pp. 76-7.
[l] Hirschkind, pp. 115-6.
[li] For just two examples, see Miller, pp. 89-96, and Hirschkind, pp. 118-20.
[lii] Hirschkind, pp. 54-60.
[liii] Marc Lynch, "Blogging the New Arab Public," Arab Media & Society (February 2007), pdf p. 6.
[liv] Ralph S. Hattox, Coffee and Coffeehouses: The Origins of a Social Beverage in the Medieval Near East, (Seattle: University of Washington Press, 1985), pp. 101-2.
[lv] Hattox, pp. 98-111.
[lvi] http://www.barhainblogs.org
[lvii] Courtney Radsch, "Core to Commonplace: The evolution of Egypt's blogosphere," Arab Media & Society," (September 2008), pdf p. 7.
[lviii] Sharon Otterman, "Publicizing the Private: Egyptian Women Bloggers Speak Out," Arab Media & Society (February 2007).
[lix] George Weyman, "Personal Blogging in Egypt: pushing social boundaries or reinforcing them?" Arab Media & Society, (October 2007).
[lx] Radsch, pdf p. 11.
About Brian Ulrich


text:
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
/* globals PDFJS, expect, it, describe, Promise, combineUrl, waitsFor,
           InvalidPDFException, MissingPDFException, StreamType, FontType,
           PDFDocumentProxy, PasswordException, PasswordResponses,
           PDFPageProxy, createPromiseCapability */

'use strict';

describe('api', function() {
  var basicApiUrl = combineUrl(window.location.href, '../pdfs/basicapi.pdf');
  var basicApiFileLength = 105779; // bytes
  function waitsForPromiseResolved(promise, successCallback) {
    var resolved = false;
    promise.then(function(val) {
      resolved = true;
      successCallback(val);
    },
    function(error) {
      // Shouldn't get here.
      expect(false).toEqual(true);
    });
    waitsFor(function() {
      return resolved;
    }, 20000);
  }
  function waitsForPromiseRejected(promise, failureCallback) {
    var rejected = false;
    promise.then(function(val) {
      // Shouldn't get here.
      expect(false).toEqual(true);
    },
    function(error) {
      rejected = true;
      failureCallback(error);
    });
    waitsFor(function() {
      return rejected;
    }, 20000);
  }

  describe('PDFJS', function() {
    describe('getDocument', function() {
      it('creates pdf doc from URL', function() {
        var loadingTask = PDFJS.getDocument(basicApiUrl);

        var isProgressReportedResolved = false;
        var progressReportedCapability = createPromiseCapability();

        // Attach the callback that is used to report loading progress;
        // similarly to how viewer.js works.
        loadingTask.onProgress = function (progressData) {
          if (!isProgressReportedResolved) {
            isProgressReportedResolved = true;
            progressReportedCapability.resolve(progressData);
          }
        };

        var promises = [
          progressReportedCapability.promise,
          loadingTask.promise
        ];
        waitsForPromiseResolved(Promise.all(promises), function (data) {
          expect((data[0].loaded / data[0].total) > 0).toEqual(true);
          expect(data[1] instanceof PDFDocumentProxy).toEqual(true);
          expect(loadingTask).toEqual(data[1].loadingTask);
        });
      });
      it('creates pdf doc from URL and aborts before worker initialized',
          function() {
        var loadingTask = PDFJS.getDocument(basicApiUrl);
        loadingTask.destroy();
        waitsForPromiseRejected(loadingTask.promise, function(reason) {
          expect(true).toEqual(true);
        });
      });
      it('creates pdf doc from URL and aborts loading after worker initialized',
          function() {
        var loadingTask = PDFJS.getDocument(basicApiUrl);
        // This can be somewhat random -- we cannot guarantee perfect
        // 'Terminate' message to the worker before/after setting up pdfManager.
        var destroyed = loadingTask._transport.workerInitializedCapability.
          promise.then(function () {
          return loadingTask.destroy();
        });
        waitsForPromiseResolved(destroyed, function (data) {
          expect(true).toEqual(true);
        });
      });
      it('creates pdf doc from typed array', function() {
        var nonBinaryRequest = PDFJS.disableWorker;
        var request = new XMLHttpRequest();
        request.open('GET', basicApiUrl, false);
        if (!nonBinaryRequest) {
          try {
            request.responseType = 'arraybuffer';
            nonBinaryRequest = request.responseType !== 'arraybuffer';
          } catch (e) {
            nonBinaryRequest = true;
          }
        }
        if (nonBinaryRequest && request.overrideMimeType) {
          request.overrideMimeType('text/plain; charset=x-user-defined');
        }
        request.send(null);

        var typedArrayPdf;
        if (nonBinaryRequest) {
          var data = Array.prototype.map.call(request.responseText,
              function (ch) {
            return ch.charCodeAt(0) & 0xFF;
          });
          typedArrayPdf = new Uint8Array(data);
        } else {
          typedArrayPdf = new Uint8Array(request.response);
        }
        // Sanity check to make sure that we fetched the entire PDF file.
        expect(typedArrayPdf.length).toEqual(basicApiFileLength);

        var promise = PDFJS.getDocument(typedArrayPdf);
        waitsForPromiseResolved(promise, function(data) {
          expect(data instanceof PDFDocumentProxy).toEqual(true);
        });
      });
      it('creates pdf doc from invalid PDF file', function() {
        // A severely corrupt PDF file (even Adobe Reader fails to open it).
        var url = combineUrl(window.location.href, '../pdfs/bug1020226.pdf');

        var promise = PDFJS.getDocument(url);
        waitsForPromiseRejected(promise, function (error) {
          expect(error instanceof InvalidPDFException).toEqual(true);
        });
      });
      it('creates pdf doc from non-existent URL', function() {
        var nonExistentUrl = combineUrl(window.location.href,
                                        '../pdfs/non-existent.pdf');
        var promise = PDFJS.getDocument(nonExistentUrl);
        waitsForPromiseRejected(promise, function(error) {
          expect(error instanceof MissingPDFException).toEqual(true);
        });
      });
      it('creates pdf doc from PDF file protected with user and owner password',
         function () {
        var url = combineUrl(window.location.href, '../pdfs/pr6531_1.pdf');
        var loadingTask = PDFJS.getDocument(url);

        var isPasswordNeededResolved = false;
        var passwordNeededCapability = createPromiseCapability();
        var isPasswordIncorrectResolved = false;
        var passwordIncorrectCapability = createPromiseCapability();

        // Attach the callback that is used to request a password;
        // similarly to how viewer.js handles passwords.
        loadingTask.onPassword = function (updatePassword, reason) {
          if (reason === PasswordResponses.NEED_PASSWORD &&
              !isPasswordNeededResolved) {
            isPasswordNeededResolved = true;
            passwordNeededCapability.resolve();

            updatePassword('qwerty'); // Provide an incorrect password.
            return;
          }
          if (reason === PasswordResponses.INCORRECT_PASSWORD &&
              !isPasswordIncorrectResolved) {
            isPasswordIncorrectResolved = true;
            passwordIncorrectCapability.resolve();

            updatePassword('asdfasdf'); // Provide the correct password.
            return;
          }
          // Shouldn't get here.
          expect(false).toEqual(true);
        };

        var promises = [
          passwordNeededCapability.promise,
          passwordIncorrectCapability.promise,
          loadingTask.promise
        ];
        waitsForPromiseResolved(Promise.all(promises), function (data) {
          expect(data[2] instanceof PDFDocumentProxy).toEqual(true);
        });
      });
      it('creates pdf doc from PDF file protected with only a user password',
         function () {
        var url = combineUrl(window.location.href, '../pdfs/pr6531_2.pdf');

        var passwordNeededPromise = PDFJS.getDocument({
          url: url, password: '',
        });
        waitsForPromiseRejected(passwordNeededPromise, function (data) {
          expect(data instanceof PasswordException).toEqual(true);
          expect(data.code).toEqual(PasswordResponses.NEED_PASSWORD);
        });

        var passwordIncorrectPromise = PDFJS.getDocument({
          url: url, password: 'qwerty',
        });
        waitsForPromiseRejected(passwordIncorrectPromise, function (data) {
          expect(data instanceof PasswordException).toEqual(true);
          expect(data.code).toEqual(PasswordResponses.INCORRECT_PASSWORD);
        });

        var passwordAcceptedPromise = PDFJS.getDocument({
          url: url, password: 'asdfasdf',
        });
        waitsForPromiseResolved(passwordAcceptedPromise, function (data) {
          expect(data instanceof PDFDocumentProxy).toEqual(true);
        });
      });
    });
  });
  describe('PDFDocument', function() {
    var promise = PDFJS.getDocument(basicApiUrl);
    var doc;
    waitsForPromiseResolved(promise, function(data) {
      doc = data;
    });
    it('gets number of pages', function() {
      expect(doc.numPages).toEqual(3);
    });
    it('gets fingerprint', function() {
      var fingerprint = doc.fingerprint;
      expect(typeof fingerprint).toEqual('string');
      expect(fingerprint.length > 0).toEqual(true);
    });
    it('gets page', function() {
      var promise = doc.getPage(1);
      waitsForPromiseResolved(promise, function(data) {
        expect(data instanceof PDFPageProxy).toEqual(true);
        expect(data.pageIndex).toEqual(0);
      });
    });
    it('gets non-existent page', function() {
      var promise = doc.getPage(100);
      waitsForPromiseRejected(promise, function(data) {
        expect(data instanceof Error).toEqual(true);
      });
    });
    it('gets page index', function() {
      // reference to second page
      var ref = {num: 17, gen: 0};
      var promise = doc.getPageIndex(ref);
      waitsForPromiseResolved(promise, function(pageIndex) {
        expect(pageIndex).toEqual(1);
      });
    });
    it('gets destinations', function() {
      var promise = doc.getDestinations();
      waitsForPromiseResolved(promise, function(data) {
        expect(data).toEqual({ chapter1: [{ gen: 0, num: 17 }, { name: 'XYZ' },
                                          0, 841.89, null] });
      });
    });
    it('gets a destination', function() {
      var promise = doc.getDestination('chapter1');
      waitsForPromiseResolved(promise, function(data) {
        expect(data).toEqual([{ gen: 0, num: 17 }, { name: 'XYZ' },
                              0, 841.89, null]);
      });
    });
    it('gets a non-existent destination', function() {
      var promise = doc.getDestination('non-existent-named-destination');
      waitsForPromiseResolved(promise, function(data) {
        expect(data).toEqual(null);
      });
    });
    it('gets attachments', function() {
      var promise = doc.getAttachments();
      waitsForPromiseResolved(promise, function (data) {
        expect(data).toEqual(null);
      });
    });
    it('gets javascript', function() {
      var promise = doc.getJavaScript();
      waitsForPromiseResolved(promise, function (data) {
        expect(data).toEqual([]);
      });
    });
    // Keep this in sync with the pattern in viewer.js. The pattern is used to
    // detect whether or not to automatically start printing.
    var viewerPrintRegExp = /\bprint\s*\(/;
    it('gets javascript with printing instructions (Print action)', function() {
      // PDF document with "Print" Named action in OpenAction
      var pdfUrl = combineUrl(window.location.href, '../pdfs/bug1001080.pdf');
      var promise = PDFJS.getDocument(pdfUrl).then(function(doc) {
        return doc.getJavaScript();
      });
      waitsForPromiseResolved(promise, function (data) {
        expect(data).toEqual(['print({});']);
        expect(data[0]).toMatch(viewerPrintRegExp);
      });
    });
    it('gets javascript with printing instructions (JS action)', function() {
      // PDF document with "JavaScript" action in OpenAction
      var pdfUrl = combineUrl(window.location.href, '../pdfs/issue6106.pdf');
      var promise = PDFJS.getDocument(pdfUrl).then(function(doc) {
        return doc.getJavaScript();
      });
      waitsForPromiseResolved(promise, function (data) {
        expect(data).toEqual(
          ['this.print({bUI:true,bSilent:false,bShrinkToFit:true});']);
        expect(data[0]).toMatch(viewerPrintRegExp);
      });
    });
    it('gets outline', function() {
      var promise = doc.getOutline();
      waitsForPromiseResolved(promise, function(outline) {
        // Two top level entries.
        expect(outline.length).toEqual(2);
        // Make sure some basic attributes are set.
        expect(outline[1].title).toEqual('Chapter 1');
        expect(outline[1].items.length).toEqual(1);
        expect(outline[1].items[0].title).toEqual('Paragraph 1.1');
      });
    });
    it('gets metadata', function() {
      var promise = doc.getMetadata();
      waitsForPromiseResolved(promise, function(metadata) {
        expect(metadata.info['Title']).toEqual('Basic API Test');
        expect(metadata.info['PDFFormatVersion']).toEqual('1.7');
        expect(metadata.metadata.get('dc:title')).toEqual('Basic API Test');
      });
    });
    it('gets data', function() {
      var promise = doc.getData();
      waitsForPromiseResolved(promise, function (data) {
        expect(data instanceof Uint8Array).toEqual(true);
        expect(data.length).toEqual(basicApiFileLength);
      });
    });
    it('gets download info', function() {
      var promise = doc.getDownloadInfo();
      waitsForPromiseResolved(promise, function (data) {
        expect(data).toEqual({ length: basicApiFileLength });
      });
    });
    it('gets stats', function() {
      var promise = doc.getStats();
      waitsForPromiseResolved(promise, function (stats) {
        expect(stats).toEqual({ streamTypes: [], fontTypes: [] });
      });
    });

    it('checks that fingerprints are unique', function() {
      var url1 = combineUrl(window.location.href, '../pdfs/issue4436r.pdf');
      var loadingTask1 = PDFJS.getDocument(url1);

      var url2 = combineUrl(window.location.href, '../pdfs/issue4575.pdf');
      var loadingTask2 = PDFJS.getDocument(url2);

      var promises = [loadingTask1.promise,
                      loadingTask2.promise];
      waitsForPromiseResolved(Promise.all(promises), function (data) {
        var fingerprint1 = data[0].fingerprint;
        expect(typeof fingerprint1).toEqual('string');
        expect(fingerprint1.length > 0).toEqual(true);

        var fingerprint2 = data[1].fingerprint;
        expect(typeof fingerprint2).toEqual('string');
        expect(fingerprint2.length > 0).toEqual(true);

        expect(fingerprint1).not.toEqual(fingerprint2);
      });
    });
  });
  describe('Page', function() {
    var resolvePromise;
    var promise = new Promise(function (resolve) {
      resolvePromise = resolve;
    });
    var pdfDocument;
    PDFJS.getDocument(basicApiUrl).then(function(doc) {
      doc.getPage(1).then(function(data) {
        resolvePromise(data);
      });
      pdfDocument = doc;
    });
    var page;
    waitsForPromiseResolved(promise, function(data) {
      page = data;
    });
    it('gets page number', function () {
      expect(page.pageNumber).toEqual(1);
    });
    it('gets rotate', function () {
      expect(page.rotate).toEqual(0);
    });
    it('gets ref', function () {
      expect(page.ref).toEqual({ num: 15, gen: 0 });
    });
    it('gets view', function () {
      expect(page.view).toEqual([0, 0, 595.28, 841.89]);
    });
    it('gets viewport', function () {
      var viewport = page.getViewport(1.5, 90);
      expect(viewport.viewBox).toEqual(page.view);
      expect(viewport.scale).toEqual(1.5);
      expect(viewport.rotation).toEqual(90);
      expect(viewport.transform).toEqual([0, 1.5, 1.5, 0, 0, 0]);
      expect(viewport.width).toEqual(1262.835);
      expect(viewport.height).toEqual(892.92);
    });
    it('gets annotations', function () {
      var promise = page.getAnnotations();
      waitsForPromiseResolved(promise, function (data) {
        expect(data.length).toEqual(4);
      });
    });
    it('gets text content', function () {
      var promise = page.getTextContent();
      waitsForPromiseResolved(promise, function (data) {
        expect(!!data.items).toEqual(true);
        expect(data.items.length).toEqual(7);
        expect(!!data.styles).toEqual(true);
      });
    });
    it('gets operator list', function() {
      var promise = page.getOperatorList();
      waitsForPromiseResolved(promise, function (oplist) {
        expect(!!oplist.fnArray).toEqual(true);
        expect(!!oplist.argsArray).toEqual(true);
        expect(oplist.lastChunk).toEqual(true);
      });
    });
    it('gets stats after parsing page', function () {
      var promise = page.getOperatorList().then(function () {
        return pdfDocument.getStats();
      });
      var expectedStreamTypes = [];
      expectedStreamTypes[StreamType.FLATE] = true;
      var expectedFontTypes = [];
      expectedFontTypes[FontType.TYPE1] = true;
      expectedFontTypes[FontType.CIDFONTTYPE2] = true;

      waitsForPromiseResolved(promise, function (stats) {
        expect(stats).toEqual({ streamTypes: expectedStreamTypes,
                                fontTypes: expectedFontTypes });
      });
    });
  });
});

redpajama_set_name: RedPajamaGithub


Walnut dining table with 6 matching chairs. Has 2 extension panels. Standard dimensions 1700x1130, one insert panel 2300x1130, 2 insert panels 2900x1130. Table is in very good condition.
Chairs only 8 x solid cane chairs. Quality is A Grade. Perfect condition. plus Timber table Like new condition. Last a lifetime. Comes with black cushions Reason for selling: redecorating Pickup only, Wheelers Hill. Chairs originally cost $400 each, selling for $190 each. Will not separate. Selling all 8 chairs together.
Wooden Dining set - 1.5 metre square table plus 8 chairs in very good condition . Table stands 760cm high.
6-8 seater dining table - FURNITURE CLEARANCE CENTRE.
Solid hard wood dining table. 6 chairs. Great condition minimal scratches on surface.