text:
Chandler Elsbecker, Print Co-Editor-in-Chief|March 17, 2015
For the first time in eight years, Denton hoisted a trophy for winning a district title after beating a two-goal deficit to tie Wichita Falls 3-3 Monday night. The District 5-5A champions close the season two points clear of the competition and begin the playoffs next week.
"Everyone in our district predicted us to finish third," senior Chris Torres said. "And look where we are now."
Action started quickly when in just the fourth minute, senior Christian Rodriguez seemed to make an innocuous save. However, the spin got the better of Rodriguez, and he spilled the ball past the goal line and gave Wichita Falls an early 1-0 lead.
"I told someone before the game – I think I told Gio [Gonzalez], my other keeper – I told him, 'Gio, something's wrong with me," Rodriguez said. "'I don't have any energy right now. I don't know what it is.' He was like, 'I don't know, man, you'll be fine.' So I go in and… the first half, I just feel like something's wrong with me. And then finally, on the goal, I thought it was an easy scoop, but the way the ball was spinning, it just spun right out of my hands."
The Denton response came quickly. Senior Zach Ardis delivered a ball from a corner kick past the Wichita Falls defenders and directly into the path of a leaping Feliciano Amaya. The senior's header propelled into the net and tied the game at one in the tenth minute.
Photo by: Chandler Elsbecker
Senior Zach Ardis fights past a Coyote defender on March 16, 2015 game versus Wichita Falls Old High.
The Coyotes did not relent despite the restored parity on the scoreboard. After one of eight Bronco fouls in the first half, junior Josh McMath lined up for a free kick from near midfield and delivered a long ball into the box that junior Travis Collins got his head on and buried, re-establishing his team's lead 15 minutes in. A corner in the 27th rolled into the box and past the dummy of junior Brandon Wright, setting up a shot for senior Nick Stevens. Stevens, a defender by trade, hadn't scored all season before Monday, but he slipped the ball into the corner with the back heel flick anyway, making the lead two.
Denton struggled to capitalize on opportunities thanks to the goalkeeping of Daniel Gutierrez. The senior made six saves in the first half alone, including a diving stop from close range on Denton senior Rigels Diko in the 36th minute. The score remained 3-1 in favor of the visitors heading into the half.
"We weren't playing our game," Torres said. "Honestly, I was nervous from the get-go. I was in the warm-up, being nervous, just looking at the other side of the field."
The Broncos' fortunes immediately showed signs of change when they forced a free kick on the edge of the Coyotes' penalty area three minutes into the second period of play. Torres proceeded to rifle the ball off the bottom of the crossbar and past a sprawling Gutierrez, cutting the Broncos' deficit to one goal with plenty of time remaining.
"I practice it all the time," Torres said. "I was like, 'Just hit it, just like I know how to hit it, and it'll go in;' and we scored."
For much of the remainder of the game, the ball would remain on the Coyotes' end of the field, the Broncos not allowing their opponents any breathing room. Clearances out of bounds soon accumulated, bringing the number of Denton throw-ins in the second half to 16 by game's end. However, Wichita Falls allowed only six shots, blocking two of them, despite playing on their heels for so long.
In the 68th minute, Denton found themselves on the defensive for once, but a deep clearance found the forward Amaya, who was alone against senior Garrett Martin on the opposite side of midfield. Amaya won possession and sped past Martin, letting loose a shot despite the defender's continued duress. The ball rocketed past Gutierrez, who had come out of the goal mouth a few yards to cut Amaya off, and the score was again level for the first time in 51 minutes of play. 12 minutes later, the buzzer sounded, and the Broncos were District 5-5A champions.
I practice it all the time. I was like, 'Just hit it, just like I know how to hit it, and it'll go in;' and we scored,"
— senior Chris Torres
"I came in there [during halftime], and I challenged them," head coach Ryan Dunlevy said. "Everybody had kind of underrated them all year long. I challenged them; I said, 'We don't lose at home. We respond, and we go earn it.' And that's exactly what they did. They came out with a new fire, and they responded, and they worked to get it."
Dunlevy, in his first season as head coach of the Broncos, accredits the championship to his players' work ethic.
"The boys put hard work in all offseason long," Dunlevy said. "They earned it in the offseason. They came out, and they executed; they did what they had to do to win it."
Despite the deficit, Rodriguez had full confidence in his teammates.
"I never doubted my team for a second," Rodriguez said. "I know it's a team effort, but those goals, I could've prevented them, I could've had a better effort; but I just knew my team could do it. They have so much passion. We wanted it more than they did."
Wichita Falls, 14-5-4 (10-2-2 in district, 32 points) heading into the playoffs, fall to third place with rivals Rider overtaking them in the standings Monday after a 5-1 rout of Azle. The Coyotes face the runners-up from District 6-5A in the first round.
The Broncos finish the regular season 16-2-4 (11-1-2, 35 points) Their Bi-district round opponent, the fourth-place team from District 6-5A, is unknown.
After exiting the playoffs in a 1-0 loss to Rider in the third round last year in which the Wichita Falls wind blew in a throw-in early on, the team's seniors feel an extra bit of motivation to get the job done.
"We all knew as a team that we could've kept going," Rodriguez said. "We were good enough as a team, and our chemistry was so great. We know we're good enough to go far in the playoffs, in the state tournament. That goal was devastating on me, but I knew that I had one more year with my guys. Every game, especially in Wichita Falls, we look at that goal like that beat us, but this season that won't."
Rigels Diko
Ryan Dunlevy
37 Students Recognized By College Board
Seventeen Students Become AP Scholars
Academics Makes it to Regionals
Students Recognized as National Merit Scholars
Juniors Learning to Fly


text:
Q: При парсинге сайта получаю сообщение что надо подтвердить что ты человек Пробую сделать парсер сайтов. Пока что далеко я не ушел. Возникла проблема.
Что часть когда которая у меня получилась, код файла index.js:
const needle = require('needle');
const cheerio = require('cheerio');

const url = 'http://example.com/login.php';

needle.get(url, (err, res) => {
    if (err) {
        throw (err);
    };
    const $ = cheerio.load(res.body);

    console.log($('h1').text());
    console.log($('p').text());
    console.log($('a').attr('href'));
});

Получаю ответ:
Example Domain
This domain is established to be used for illustrative examples in documents. You may use this
    domain in examples without prior coordination or asking for permission.More information...
http://www.iana.org/domains/example

Проблема появилась когда при парсинге сайта я получаю ответ в консоль:
Please verify you are a human
Access to this page has been denied because we believe you are using automation tools to browse the website.

This may happen as a result of the following:

Javascript is disabled or blocked by an extension (ad blockers for example)
Your browser does not support cookies
Please make sure that Javascript and cookies are enabled on your browser and that you are not blocking them from loading.

Reference ID: #bb7cd410-8360-11e9-a0fb-d988de7d56a9

Можно ли обойти это и спарсить данный с сайты?

A: Скорее всего, сервер определил что запрос идет не от клиента, а от бота по UserAgent.
Попробуйте заменить UserAgent перед вызовом needle.get()
needle.defaults({
    user_agent: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
});

Если этот способ не поможет, то сайт использует другие проверки, например JS.
В таком случае, нужно расширение имитирующее браузер, например puppeteer.

redpajama_set_name: RedPajamaStackExchange


text:
The Chronicle of the Tocco () is a chronicle in fifteen-syllable blank verse written in medieval Greek. It covers the period of 1375-1425 and focuses on the ascent of the Tocco family, and especially Carlo I Tocco, Count palatine of Cephalonia and Zakynthos, to the rule over the Despotate of Epirus, as well as Carlo's conquest of territories in the Morea.

The anonymous author described events that occurred during his own lifetime and must have been present at some of them. He possibly belonged to the court of Carlo I Tocco and came from Ioannina. From the text we can deduce that he was not particularly educated since he was using the vernacular Greek language.

The author describes the Toccos as fair governors who care for the rights of their people. It is remarkable that he does not mention the Latin descent of the noble family. He appears to cultivate a sense of early Greek nationalism and of xenophobia towards the Albanian tribes.

The Chronicle was published for the first time in 1975 by Giuseppe Schirò (junior) (Cronaca dei Tocco di Cefalonia; prolegomeni, testo critico e traduzione, Corpus Fontium Historiae Byzantinae 10. Rome: Accademia nazionale dei Lincei, 1975). It comprises 3923 verses and was found in the codex Vaticanus Graecus 1831. The beginning and the end of the text are missing. This codex was written before June 1429, possibly by the author, as G. Schirò believed. There is also a 16th-century copy of it, codex Vatic. gr. 2214. Elisabeth Zachariadou proved that the first pages of the codex were placed in a wrong order and suggested a different order for the first 1,000 verses, which makes the text more coherent and easier to understand.

The Chronicle, despite its unimportant literary quality, has significant value as an historical source, as well as a linguistic source for medieval Greek.

Notes

References

 CRONACA DEI TOCCO DI CEFALONIA
 Hans-Georg Beck, Ιστορία της Βυζαντινής δημώδους λογοτεχνίας [History of the Byzantine vernacular literature], translated by Nike Eideneier, Μ.Ι.Ε.Τ., Athens 1988. (in Greek)

 G. Schirò, Το Χρονικό των Τόκκων. Τα Ιωάννινα κατά τας αρχάς του ΙΕ αιώνος [The Chronicle of the Tocco. Ioannina at the beginning of the 15th century], Etaireia Ipirotikon Meleton, Ioannina 1965 (in Greek)

15th-century history books
Tocco
County palatine of Cephalonia and Zakynthos
Tocco family
Despotate of Epirus
Books about monarchs
Works of unknown authorship

redpajama_set_name: RedPajamaWikipedia


First Look At Movie Adaptation Of Anna Todd's 'After' - MYX | YOUR CHOICE. YOUR MUSIC.
Diehard fans of American author Anna Todd—her best-selling five-book After series in particular—can finally breathe a sigh of relief because the much-awaited movie adaptation's first teaser trailer is living up to expectations.
The movie follows Tessa (Josephine Langford) a dedicated student, dutiful daughter and loyal girlfriend to her high school sweetheart, as she enters her first semester in college. Armed with grand ambitions for her future, her guarded world opens up when she meets the dark and mysterious Hardin (Hero Fiennes-Tiffin), a magnetic, brooding rebel who makes her question all she thought she knew about herself and what she wants out of life.
The film's tagline claims: "After your first, life will never be the same"—and if the one-minute teaser is any indication, expect the two stars to get hot and steamy more than a few times all throughout the film. It's just fair warning.
After is set to premiere in theaters April 12, 2019. Until then, watch the teaser trailer below.


text:
Home Guides What is Yield Guild Games? (YGG)
What is Yield Guild Games? (YGG)
Yield Guild Games is a DAO that specializes in the investment of NFTs in the blockchain gaming ecosystem.
The year 2021 has seen a rise in popularity for non-fungible tokens (NFTs). In Q1 of this year alone, NFT sales have reached a whopping $2 billion. Such assets have now become mainstream, all thanks to gaming projects like NBA Top Shots and artists like Beeple, who have campaigned for the expansion of NFTs.
Furthermore, the global gaming market is benefiting the most from the advent of NFTs. Blockchain-based games are showing no signs of slowing down. In 2020, the gaming market managed to reach upwards of $167.9 billion in value. Considering the rise of virtual worlds projects, such as Decentraland, and popular games like CryptoBlades, Infinity, and The Sandbox, blockchain-based games and play-to-earn protocols are here to stay.
Yield Guild Games and its team of experts have understood the task, and have successfully leveraged the unique set of attributes decentralized gaming possesses.
What is Yield Guild Games?
YGG Token
Game Selection Criteria and Launch
Rewards and Governance
Introduced in 2020, Yield Guild Games currently sits at the top of the decentralized gaming sector. YGG co-founders Gabby Dizon and Beryl Li are part of a multi-ethnic team of blockchain experts and engineers, with decade-long experience in DeFi.
Supported by the likes of Polygon, Bitscale, and Animoca Brands, YGG has already amassed massive support in the blockchain gaming ecosystem. Based in the Philippines, the gaming startup has invested in numerous games, being, F1 DeltaTime, Guild of Guardians, Zed Run, Axie Infinity, and The Sandbox. In 2020, Yield Guild Games recorded its best fiscal year yet, with $12.5 million worth of native tokens sold in just 31 seconds in a single sale, showcasing tangible public support and great potential for worldwide dominance.
Yield Guild Games or YGG is a decentralized autonomous organization (DAO), specializing in the investment of non-fungible tokens typically used in the blockchain gaming sector.
YGG aims to build the most stable virtual and gaming world economy, by leveraging its community-owned assets to their maximum and reward all token holders. Yield Guild Games has managed to effectively merge the intriguing protocol behind NFTs with decentralized finance (DeFi). Consequently, this has brought yield farming to in-game economies.
Within blockchain games like The SandBox and Axie, YGG managed to establish value-driven virtual worlds through the development of content and the economical structure of these games.
The project has already gained great influence within the decentralized ecosystem, as it aims to maximize the value of NFTs across the blockchain gaming industry. Yield Guild Games relies heavily on smart contracts, as well as consensus influenced by the DAO, where the platform's governance model is built upon a voting system of a distributed network of token holders.
YGG's main activities are centered around the establishment of a vibrant and dynamic international community of play-to-earn gamers, who primarily compete to gain in-game prices and rewards. Furthermore, the team behind the project continuously coordinates research and development strategies for participants in the DAO to arbitrage on yield generation by being competitive in metaverse-related games.
YGG's primary source of revenue is through the sale and rental of company-owned NFT assets for profits. Additionally, guild members can benefit from the platform's unique rental initiative through which assets can be used in the exchange for in-game prizes, that are given directly to YGG.
Throughout the YGG ecosystem, non-guild members also have the opportunity to produce revenue through in-game assets and take advantage of all economical benefits offered by the platform. Among those benefits is the constant rise of in-game assets values, typically mirrored in the values of their native fungible tokens on the free market.
Listed on Sushiswap, Okex, gate.io, and Uniswap, the YGG token is the tool of choice within the guild. The utility token is responsible for the health of the platform and all related operations. In total, there are 1,000,000,000 YGG tokens in supply.
The current tokens distribution is spread out across 5 stakeholders:
Treasury (13.3% of total supply)
Founders (15%)
Advisors (2.0%)
Investors (24.9%)
Community (45%)
Overall, seed investors will have 20% of their allocation released at the network launch, where 80% of the allocation will have a 1-year lock-up period. After which, tokens will vest linearly for 1year beyond the lock-up period.
YGG treasury holds 133,333,334 tokens with no specific lock-up period and vesting conditions. As for founding members, they will exactly have an 18 months lock-up period. Then, tokens vest linearly for 3 years. Regarding advisors, a 1-year lock-up period has been instated. However, during the 2nd year, advisory tokens will vest linearly for only 12 months.
For a gaming project to be placed under YGG DAO protocol, the following play-to-earn elements ought to be present:
A virtual land-based economy that can be acquired
A virtual economy with a native token
Play-to-earn functionality where players are rewarded native tokens for in-game activity.
However, during the platform launch, the team focused mainly on projects and games with great community support, as well as a tremendous potential to blossom in the industry. Among them are Axie Infinity, which was released by Sky Mavis, The Sandbox, introduced by TSB, and League of Kingdoms produced by NPlus.
YGG involvement in the play-to-earn gaming sector will continue to expand. The platform has already built a considerable portfolio, with games that fulfill the criteria and necessary yield requirements through DAO governance.
Under YGG DAO, the community will influence the voting processes heavily. Community members will have the power to determine token reward distribution to holders. Additionally, staking vaults will be introduced to directly receive rewards from smart contracts into designated accounts.
The overall mechanism of reward distribution will be subjected to routine proposal submission, ensuring safe and secure transactions. YGG will eventually release various staking vaults allowing token stakes to earn rewards from the platform's overall activities to a specific activity.
Voting within the YGG network will essentially be centered around 5 principal areas, being: Technology, Products, projects, Token distribution, and Governance structure. Therefore, any guild member within the YGG protocol can actively send proposals through the platform's website. Then the community will cast their votes, where the final decision will solely be based on the majority of votes and implemented through a distributed system.
The gradual and rapid growth of NFTs has been quite astonishing. Numerous decentralized technologies have caught up with the trend and established a noble presence in that sphere. Yield Guild Games and other blockchains actors have tremendously invested in the play-to-earn sector, where NFTs have facilitated the wide adoption of such games.
Therefore, ventures like Yield Guild Games can truly benefit from the immense influx of blockchain enthusiasts and newcomers alike within that sphere.
By relying heavily on NFTs, Yield Guild Games has galvanized an often lacking reward system within many decentralized projects. In YGG, community members can own and develop assets in a rich and diverse metaverse. Furthermore, as value is continuously placed on virtual economies, projected to have more worth than real-world economies over time, participants are always sure to gain and thrive within a virtual environment.
animoca brands
play-to-earn
Previous articleWhat is the AXIA Coin? (AXC)
Next articleWhat is Creaticles? (CRE8)

redpajama_set_name: RedPajamaCommonCrawl


We collect information when you fill out the Contact Form to place an order or to start communicating with us. When doing so, you may be asked to enter your Name, E-mail address, Country, Phone number etc. Your information, whether public or private, will not be sold, exchanged, transferred, or given to any other company for any reason whatsoever, without your consent. It will be used for the express purpose of contacting you for your writing project and the associated financial transactions in this regard.
The content of your ordered paper/project will NOT be used by us for any purpose. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating or conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or other's rights, property, or safety.
We are compliant with the requirements of Children Online Privacy Protection laws; we do not (intentionally) collect any information from anyone under 13 years of age. Our services are all directed to people who are at least 13 years old or older.
Our papers pass through strict quality control standards prior to their delivery to the clients. Despite these measures papers may, on extremely rare occasions, portray a high similarity index when subjected to plagiarism software testing. In cases where you are doubtful about plagiarism in a paper, please inform us and we will initiate immediate investigations. However, we require you to substantiate your allegation by a report generated by Plagscan, Turnitin or your educational institution. Reports generated by other systems are not accepted as they are not dependable for plagiarism reporting.
We request you to make use of our Free Revision Offer to get an improved version of your ordered content instead of opting for a refund.
Charges incurred while placing an order are deducted when a refund is made.
The Refund process may take more than 15 days to complete.
Decisions regarding refund vary from one case to another and our company's decision in this regard will be final and irrevocable.
Should you have further queries, please feel free to write to us.


text:
WWE: Top 5 WrestleMania moments of all time
Mike Tyson (M) gets in between Stone Cold Steve Austin (R) and Shawn Michaels (L) before their WWE Championship match at WrestleMania 14 in 1998. The match's surprise conclusion is one of the greatest moments in WrestleMania history. File Photo by Ezio Petersen/UPI | License Photo
March 29 (UPI) -- WrestleMania, WWE's biggest event of the year, is not only filled with spectacular matches, but also emotional and triumphant moments that define professional wrestling.
WrestleMania, which returns for its 35th edition on April 7, often acts as a season finale of sorts for WWE's slate of programming by bringing to an end heated rivalries, ongoing storylines and even careers.
Legends have risen and fallen, new stars have been born, fans have cried, booed and cheered, and history has been made at WrestleMania. Here are UPI's Top 5 WrestleMania moments of all time.
5. Shawn Michaels ends Ric Flair's legendary career at WrestleMania 24 in 2008
Few names are bigger and carry more prestige in professional wrestling then Ric Flair. The Nature Boy has done it all, from becoming a World Heavyweight Champion 16 times to competing all over the world in not only WWE, but also in WCW and NWA.
Flair's near unmatched career came to a heartbreaking, but satisfying end at WrestleMania 24 when the living legend's career was on the line in a match against his friend and fellow professional wrestling great, Shawn Michaels.
Flair, up to this point, had been winning a series of matches that each put his career on the line. Never wanting to give up being able to compete in the squared circle, he demanded that Michaels not hold back.
Michaels would ultimately prevail in the bout, ending Flair's career with a tear-filled Sweet Chin Music. As Michaels got ready to deliver his signature finishing maneuver, Flair -- exhausted and beaten down -- put his fist up in defiance, wanting to keep fighting. Michaels hesitated to end his friend's career and before he delivered the final blow he uttered, "I'm sorry. I love you."
The moment -- despite Flair performing in a handful of matches afterwards -- still stands as one of the best ends to one of the greatest careers in all of sports and entertainment. Flair also received love and admiration from the 70,000 in attendance after losing and thanked his family at ringside with tears running down his face.
4. 'Macho Man' Randy Savage is reunited with Miss Elizabeth at WrestleMania 7 in 1991
'Macho Man' Randy Savage had done the unthinkable and had turned into the villainous 'Macho King' before heading into WrestleMania 7, leaving behind his longtime manager and love interest Miss Elizabeth for Sensational Sherri.
Savage faced off against The Ultimate Warrior at the event, with the powerful grapplers both putting their careers on the line in an attempt to end their feud. Elizabeth was notably shown in the audience viewing the match with a concerned look as The Ultimate Warrior defeated Savage.
Sherri, upset at the outcome, entered the ring and berated Savage before she started kicking him in the stomach. Elizabeth had seen enough and quickly ran to Savage's aid, throwing Sherri out of the ring in the process.
Savage and Elizabeth were then reunited and shared an emotional hug in one of the most heartwarming and romantic moments in WWE history. Fans in attendance were filmed crying as Savage lifted up Elizabeth on his shoulders and then later lifted up the ropes so that she could step out of the ring, a gesture he had never done before.
The Macho King had finally returned back to being the 'Macho Man.'
3. Seth Rollins pulls off the "heist of the century" at WrestleMania 31 in 2015
Seth Rollins wasn't supposed to be in the main event of WrestleMania 31 between Brock Lesnar and Roman Reigns for the WWE World Heavyweight Championship.
Rollins did have the Money in the Bank contract -- a stipulation that allows its owner a championship match at any time -- however, The Kingslayer had lost earlier in the night to Randy Orton. Beyond that, no superstar had ever used their Money in Bank contract at WrestleMania.
Rollins broke all the rules and shocked the millions watching when he suddenly arrived at the tail end of Reigns and Lesnar's epic battle to turn it into a Triple Threat match. The Beast and the Big Dog were exhausted at this point, allowing Rollins to capitalize on the moment and become the biggest opportunist in WWE history.
Rollins was able to deliver a Curb Stomp to Lesnar, narrowly escape an F-5 from Lesnar due to Reigns attacking and then strike down Reigns with a Curb Stomp to become WWE World Heavyweight Champion in a matter of minutes.
The moment, dubbed the "heist of the century," proved that anything can and will happen at WrestleMania, even during the main event.
2. Stone Cold Steve Austin becomes champion, Mike Tyson knocks out Shawn Michaels at WrestleMania 14 in 1998
WWE struck gold and earned headlines worldwide when they inserted controversial boxing great 'Iron' Mike Tyson into the main event of WrestleMania 14 between Shawn Michaels and Stone Cold Steve Austin for the WWE Championship.
Tyson, who was made the special guest enforcer of the bout, had joined Michaels' D-Generation X stable which also included Triple H and Chyna leading up to the event. Tyson had also previously gotten into a highly-publicized altercation with Austin on Monday Night Raw.
The deck was stacked against Austin who was WWE's biggest star as the company was in the early stages of its lucrative Attitude Era.
Tyson, in a major plot twist, betrayed Michaels during the match when he counted to three and gave Austin the victory after the referee had been knocked out. Michaels confused and upset, confronted Tyson and attempted to attack him before The Baddest Man on the Planet knocked him out with a stiff right hand.
Austin and Tyson teaming up and pushing the Attitude Era into high-gear further helped The Rattlesnake become a household name and was the early start of WWE winning the ratings war against its biggest competitor, WCW.
1. Hulk Hogan body slams Andre the Giant at WrestleMania 3 in 1987
This is not only the moment that defines WrestleMania, but also WWE as a whole.
Hulk Hogan doing the unthinkable, the impossible, is still replayed before every WWE show. It represents overcoming the odds, pushing physical strength to the limit and ultimately shows how professional wrestling can create magical moments that live on forever.
If WWE needed a new logo that didn't contain their initials, it would have to be the image of Hogan body slamming the towering Andre the Giant, a man who, with his massive size, was able to remain undefeated for 15 years.
Hogan's historic body slam earned a frenzied response from the 93,173 fans in attendance who continued to cheer loudly after Hogan won the contest with a leg drop.
Hogan vs. Andre the Giant for the WWE Championship, despite being arguably the biggest main event WrestleMania has ever had, isn't actually a good match but it makes up for not being a technical showcase by delivering an entertaining power struggle that invented the idea of WrestleMania moments. It serves as a blueprint for what a WrestleMania main event should be, thrilling, shocking and joyous.
WrestleMania 35 will take place on April 7 at 7 p.m. ET on pay-per-view and the WWE Network.
WWE: Top 5 WrestleMania matches of all time WrestleMania to feature women's main event for first time WWE Smackdown: Charlotte Flair wins Women's Championship


Riverzedge Arts creates positive educational and economic outcomes for disadvantaged urban youth and their communities through artistic expression, disciplined effort and self-reliance.
Riverzedge Arts is a youth development program giving educationally and economically disenfranchised youth (ages 12-24) in northern Rhode Island paid employment in the arts and a voice in their community. Based in Woonsocket, one of Rhode Island's poorest cities, Riverzedge engages teens in a lifestyle of creative expression, disciplined effort, and economic self-reliance. Riverzedge is both a 501(c)(3) non-profit organization and a social enterprise (a business in service of a social mission).
The Arts & Business Entrepreneuship Program: Youth run micro-businesses in art and design and are paid educational stipends to create client projects and public works, while gaining workforce skills, college readiness, and experience in the fine and commerical arts. Riverzedge runs five studios in graphic design, digital photography and video, screen printing, visual art, and 'green' (sustainable) design.
Expanded Learning Opportunities Woonsocket: Students earn high school credit through independent learning projects completed with professional mentors, outside of school hours.
Mobile Studio: Innovative and customizable art and design classes for K-12 schools in low-income school districts.
After Hours: Free, hands-on evening classes for middle and high school students in media, entrepreneurship, and the arts.
The Woonsocket Parent Leadership Training Insitute (PLTI): A parent engagement intiative in which parents and community members learn to become advocates for children and develop skills in civics, democracy, and leadership.
Would you recommend Riverzedge Arts?


The Trust works hard to meet the diverse needs of its local population and staff by making sure that no person is ever at a disadvantage when it comes to their healthcare or place of work.
Committed to providing high quality and safe care for all, the Trust upholds a culture in which all people are valued and respected.
As an NHS organisation, the Trust has a duty to protect all people that use its services, such as patients, staff and volunteers, from any form of discrimination in relation to a personal characteristic.
The promotion of the Equality Act 2010 throughout the Trust creates an environment in which everyone feels valued and able to give their best.
To achieve this, we follow the principles and guidelines set out in NHS England's EDS2 (Equality Delivery System).
All NHS care providers are required to provide information in such a way to enable users with a disability, impairment or sensory loss to access its services - please see NHS England > Accessible Information Standard (www.england.nhs.uk/ourwork/accessibleinfo/).


text:
static Novocaine *audioManager = nil;

@interface Novocaine()

// redeclare readwrite for class continuation
@property (nonatomic, assign, readwrite) AudioUnit inputUnit;
@property (nonatomic, assign, readwrite) AudioUnit outputUnit;
@property (nonatomic, assign, readwrite) AudioBufferList *inputBuffer;
@property (nonatomic, assign, readwrite) BOOL inputAvailable;
@property (nonatomic, assign, readwrite) UInt32 numInputChannels;
@property (nonatomic, assign, readwrite) UInt32 numOutputChannels;
@property (nonatomic, assign, readwrite) Float64 samplingRate;
@property (nonatomic, assign, readwrite) BOOL isInterleaved;
@property (nonatomic, assign, readwrite) UInt32 numBytesPerSample;
@property (nonatomic, assign, readwrite) AudioStreamBasicDescription inputFormat;
@property (nonatomic, assign, readwrite) AudioStreamBasicDescription outputFormat;
@property (nonatomic, assign, readwrite) BOOL playing;
@property (nonatomic, assign, readwrite) float *inData;
@property (nonatomic, assign, readwrite) float *outData;

#if defined (USING_OSX)
@property (nonatomic, assign) AudioDeviceID *deviceIDs;
@property (nonatomic, strong) NSMutableArray *deviceNames;
@property (nonatomic, assign) AudioDeviceID defaultInputDeviceID;
@property (nonatomic, strong) NSString *defaultInputDeviceName;
@property (nonatomic, assign) AudioDeviceID defaultOutputDeviceID;
@property (nonatomic, strong) NSString *defaultOutputDeviceName;
- (void)enumerateAudioDevices;
#endif

// must be called prior to playing audio
- (void)setupAudioSession;
- (void)setupAudioUnits;

- (NSString *)applicationDocumentsDirectory;

- (void)freeBuffers;

@end

@implementation Novocaine

#pragma mark - Singleton Methods
+ (Novocaine *) audioManager
{
	@synchronized(self)
	{
		if (audioManager == nil) {
			audioManager = [[Novocaine alloc] init];
		}
	}
    return audioManager;
}

+ (id)allocWithZone:(NSZone *)zone {
    @synchronized(self) {
        if (audioManager == nil) {
            audioManager = [super allocWithZone:zone];
            return audioManager;  // assignment and return on first allocation
        }
    }
    return nil; // on subsequent allocation attempts return nil
}

// ND: If NSCopying protocol is to be supported, it should be declared with class and done correctly. Disabled for now.

//- (id)copyWithZone:(NSZone *)zone
//{
//    return self;
//}

- (id)init
{
	if (self = [super init])
	{

        // Initialize a float buffer to hold audio
		self.inData  = (float *)calloc(8192, sizeof(float)); // probably more than we'll need
        self.outData = (float *)calloc(8192, sizeof(float));

        self.inputBlock = nil;
        self.outputBlock = nil;

#if defined ( USING_OSX )
        self.deviceNames = [[NSMutableArray alloc] initWithCapacity:100]; // more than we'll need
#endif

        self.playing = NO;
        // self.playThroughEnabled = NO;

		// Fire up the audio session ( with steady error checking ... )
        [self setupAudioSession];

        // start audio units
        [self setupAudioUnits];

		return self;

	}

	return nil;
}

- (void)dealloc
{
    free(self.inData);
    free(self.outData);

#if defined (USING_OSX)
    if (self.deviceIDs){
        free(self.deviceIDs);
    }
#endif

    [self freeBuffers];
}

- (void)freeBuffers
{
    if (self.inputBuffer){

		for(UInt32 i =0; i< self.inputBuffer->mNumberBuffers ; i++) {

			if(self.inputBuffer->mBuffers[i].mData){
                free(self.inputBuffer->mBuffers[i].mData);
            }
		}

        free(self.inputBuffer);
        self.inputBuffer = NULL;
    }
}

#pragma mark - Properties

// TODO: Implement this.
//- (void)setInputEnabled:(BOOL)inputEnabled
//{
//    _inputEnabled = inputEnabled;
//}

#ifdef USING_IOS
- (void)setForceOutputToSpeaker:(BOOL)forceOutputToSpeaker
{

#if !TARGET_IPHONE_SIMULATOR
    UInt32 value = forceOutputToSpeaker ? 1 : 0;
    // should not be fatal error
    OSStatus err = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(UInt32), &value);
    if (err != noErr){
        NSLog(@"Could not override audio output route to speaker");
    }
    else{
        _forceOutputToSpeaker = forceOutputToSpeaker;
    }
#else
    _forceOutputToSpeaker = forceOutputToSpeaker;
#endif
}
#endif

#pragma mark - Audio Methods

- (void)setupAudioSession
{
    // Initialize and configure the audio session, and add an interuption listener

#if defined ( USING_IOS )

    // Set the audio session active
    NSError *err = nil;
    if (![[AVAudioSession sharedInstance] setActive:YES error:&err]){
        NSLog(@"Couldn't activate audio session: %@", err);
    }
    [self checkAudioSource];
#elif defined ( USING_OSX )
    // TODO: grab the audio device
    [self enumerateAudioDevices];
    self.inputAvailable = YES;
#endif
}

- (void)setupAudioUnits
{

    // --- Audio Session Setup ---
    // ---------------------------

#if defined ( USING_IOS )

    // TODO: Move this somewhere more dynamic - should update category as appropriate to current application behavior
    UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
    CheckError( AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
                                         sizeof (sessionCategory),
                                         &sessionCategory), "Couldn't set audio category");

    // Add a property listener, to listen to changes to the session
    CheckError( AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, sessionPropertyListener, (__bridge void*)self), "Couldn't add audio session property listener");

    // Set the buffer size, this will affect the number of samples that get rendered every time the audio callback is fired
    // A small number will get you lower latency audio, but will make your processor work harder
#if !TARGET_IPHONE_SIMULATOR
    Float32 preferredBufferSize = 0.0232;
    CheckError( AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize), "Couldn't set the preferred buffer duration");
#endif

    [self checkSessionProperties];

#endif

    // ----- Audio Unit Setup -----
    // ----------------------------

    // Describe the output unit.

#if defined ( USING_OSX )
    AudioComponentDescription inputDescription = {0};
    inputDescription.componentType = kAudioUnitType_Output;
    inputDescription.componentSubType = kAudioUnitSubType_HALOutput;
    inputDescription.componentManufacturer = kAudioUnitManufacturer_Apple;

    AudioComponentDescription outputDescription = {0};
    outputDescription.componentType = kAudioUnitType_Output;
    outputDescription.componentSubType = kAudioUnitSubType_HALOutput;
    outputDescription.componentManufacturer = kAudioUnitManufacturer_Apple;

#elif defined (USING_IOS)
    AudioComponentDescription inputDescription = {0};
    inputDescription.componentType = kAudioUnitType_Output;
    inputDescription.componentSubType = kAudioUnitSubType_RemoteIO;
    inputDescription.componentManufacturer = kAudioUnitManufacturer_Apple;

#endif

    // Get component
    AudioComponent inputComponent = AudioComponentFindNext(NULL, &inputDescription);
    CheckError( AudioComponentInstanceNew(inputComponent, &_inputUnit), "Couldn't create the output audio unit");

#if defined ( USING_OSX )
    AudioComponent outputComponent = AudioComponentFindNext(NULL, &outputDescription);
    CheckError( AudioComponentInstanceNew(outputComponent, &_outputUnit), "Couldn't create the output audio unit");
#endif

    // Enable input
    // TODO: Conditionally disable input if option has not been specified
    UInt32 one = 1;
    CheckError( AudioUnitSetProperty(_inputUnit,
                                     kAudioOutputUnitProperty_EnableIO,
                                     kAudioUnitScope_Input,
                                     kInputBus,
                                     &one,
                                     sizeof(one)), "Couldn't enable IO on the input scope of output unit");

#if defined ( USING_OSX )
    // Disable output on the input unit
    // (only on Mac, since on the iPhone, the input unit is also the output unit)
    UInt32 zero = 0;
    CheckError( AudioUnitSetProperty(_inputUnit,
                                     kAudioOutputUnitProperty_EnableIO,
                                     kAudioUnitScope_Output,
                                     kOutputBus,
                                     &zero,
                                     sizeof(UInt32)), "Couldn't disable output on the audio unit");

    // Enable output
    CheckError( AudioUnitSetProperty(_outputUnit,
                                     kAudioOutputUnitProperty_EnableIO,
                                     kAudioUnitScope_Output,
                                     kOutputBus,
                                     &one,
                                     sizeof(one)), "Couldn't enable IO on the input scope of output unit");

    // Disable input
    CheckError( AudioUnitSetProperty(_outputUnit,
                                     kAudioOutputUnitProperty_EnableIO,
                                     kAudioUnitScope_Input,
                                     kInputBus,
                                     &zero,
                                     sizeof(UInt32)), "Couldn't disable output on the audio unit");

#endif

    // TODO: first query the hardware for desired stream descriptions
    // Check the input stream format

# if defined ( USING_IOS )
    UInt32 size;
	size = sizeof( AudioStreamBasicDescription );
	CheckError( AudioUnitGetProperty(_inputUnit,
                                     kAudioUnitProperty_StreamFormat,
                                     kAudioUnitScope_Input,
                                     1,
                                     &_inputFormat,
                                     &size ),
               "Couldn't get the hardware input stream format");

	// Check the output stream format
	size = sizeof( AudioStreamBasicDescription );
	CheckError( AudioUnitGetProperty(_inputUnit,
                                     kAudioUnitProperty_StreamFormat,
                                     kAudioUnitScope_Output,
                                     1,
                                     &_outputFormat,
                                     &size ),
               "Couldn't get the hardware output stream format");

    // TODO: check this works on iOS!
    _inputFormat.mSampleRate = 44100.0;
    _outputFormat.mSampleRate = 44100.0;
    self.samplingRate = _inputFormat.mSampleRate;
    self.numBytesPerSample = _inputFormat.mBitsPerChannel / 8;

    size = sizeof(AudioStreamBasicDescription);
	CheckError(AudioUnitSetProperty(_inputUnit,
									kAudioUnitProperty_StreamFormat,
									kAudioUnitScope_Output,
									kInputBus,
									&_outputFormat,
									size),
			   "Couldn't set the ASBD on the audio unit (after setting its sampling rate)");

# elif defined ( USING_OSX )

    UInt32 size = sizeof(AudioDeviceID);
    if(self.defaultInputDeviceID == kAudioDeviceUnknown)
    {
        AudioObjectPropertyAddress propertyAddress;
        propertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice;
        propertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
        propertyAddress.mElement = kAudioObjectPropertyElementMaster;

        AudioDeviceID thisDeviceID;
        UInt32 propsize = sizeof(AudioDeviceID);
        CheckError(AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propsize, &thisDeviceID), "Could not get the default device");
        self.defaultInputDeviceID = thisDeviceID;
    }

    if (self.defaultOutputDeviceID == kAudioDeviceUnknown)
    {
        AudioObjectPropertyAddress propertyAddress;
        propertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
        propertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
        propertyAddress.mElement = kAudioObjectPropertyElementMaster;

        AudioDeviceID thisDeviceID;
        UInt32 propsize = sizeof(AudioDeviceID);
        CheckError(AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propsize, &thisDeviceID), "Could not get the default device");
        self.defaultOutputDeviceID = thisDeviceID;

    }

    // Set the current device to the default input unit.
    CheckError( AudioUnitSetProperty( _inputUnit,
                                     kAudioOutputUnitProperty_CurrentDevice,
                                     kAudioUnitScope_Global,
                                     kOutputBus,
                                     &_defaultInputDeviceID,
                                     sizeof(AudioDeviceID) ), "Couldn't set the current input audio device");

    CheckError( AudioUnitSetProperty( _outputUnit,
                                     kAudioOutputUnitProperty_CurrentDevice,
                                     kAudioUnitScope_Global,
                                     kOutputBus,
                                     &_defaultOutputDeviceID,
                                     sizeof(AudioDeviceID) ), "Couldn't set the current output audio device");

	UInt32 propertySize = sizeof(AudioStreamBasicDescription);
	CheckError(AudioUnitGetProperty(_inputUnit,
									kAudioUnitProperty_StreamFormat,
									kAudioUnitScope_Output,
									kInputBus,
									&_outputFormat,
									&propertySize),
			   "Couldn't get ASBD from input unit");

	// 9/6/10 - check the input device's stream format
	CheckError(AudioUnitGetProperty(_inputUnit,
									kAudioUnitProperty_StreamFormat,
									kAudioUnitScope_Input,
									kInputBus,
									&_inputFormat,
									&propertySize),
			   "Couldn't get ASBD from input unit");

    _outputFormat.mSampleRate = _inputFormat.mSampleRate;
//    outputFormat.mFormatFlags =  kAudioFormatFlagsCanonical;
    self.samplingRate = _inputFormat.mSampleRate;
    self.numBytesPerSample = _inputFormat.mBitsPerChannel / 8;

    self.numInputChannels = _inputFormat.mChannelsPerFrame;
    self.numOutputChannels = _outputFormat.mChannelsPerFrame;

    propertySize = sizeof(AudioStreamBasicDescription);
	CheckError(AudioUnitSetProperty(_inputUnit,
									kAudioUnitProperty_StreamFormat,
									kAudioUnitScope_Output,
									kInputBus,
									&_outputFormat,
									propertySize),
			   "Couldn't set the ASBD on the audio unit (after setting its sampling rate)");

#endif

#if defined ( USING_IOS )
    UInt32 numFramesPerBuffer;
    size = sizeof(UInt32);
    CheckError(AudioUnitGetProperty(_inputUnit,
                                    kAudioUnitProperty_MaximumFramesPerSlice,
                                    kAudioUnitScope_Global,
                                    kOutputBus,
                                    &numFramesPerBuffer,
                                    &size),
               "Couldn't get the number of frames per callback");

    UInt32 bufferSizeBytes = _outputFormat.mBytesPerFrame * _outputFormat.mFramesPerPacket * numFramesPerBuffer;

#elif defined ( USING_OSX )
	// Get the size of the IO buffer(s)
	UInt32 bufferSizeFrames = 0;
	size = sizeof(UInt32);
	CheckError (AudioUnitGetProperty(self.inputUnit,
									 kAudioDevicePropertyBufferFrameSize,
									 kAudioUnitScope_Global,
									 0,
									 &bufferSizeFrames,
									 &size),
				"Couldn't get buffer frame size from input unit");
	UInt32 bufferSizeBytes = bufferSizeFrames * sizeof(Float32);
#endif

	if (_outputFormat.mFormatFlags & kAudioFormatFlagIsNonInterleaved) {
        // The audio is non-interleaved
        printf("Not interleaved!\n");
        self.isInterleaved = NO;

        // allocate an AudioBufferList plus enough space for array of AudioBuffers
		UInt32 propsize = offsetof(AudioBufferList, mBuffers[0]) + (sizeof(AudioBuffer) * _outputFormat.mChannelsPerFrame);

		//malloc buffer lists
		self.inputBuffer = (AudioBufferList *)malloc(propsize);
		self.inputBuffer->mNumberBuffers = _outputFormat.mChannelsPerFrame;

		//pre-malloc buffers for AudioBufferLists
		for(UInt32 i =0; i< self.inputBuffer->mNumberBuffers ; i++) {
			self.inputBuffer->mBuffers[i].mNumberChannels = 1;
			self.inputBuffer->mBuffers[i].mDataByteSize = bufferSizeBytes;
			self.inputBuffer->mBuffers[i].mData = malloc(bufferSizeBytes);
            memset(self.inputBuffer->mBuffers[i].mData, 0, bufferSizeBytes);
		}

	} else {
		printf ("Format is interleaved\n");
        self.isInterleaved = YES;

		// allocate an AudioBufferList plus enough space for array of AudioBuffers
		UInt32 propsize = offsetof(AudioBufferList, mBuffers[0]) + (sizeof(AudioBuffer) * 1);

		//malloc buffer lists
		self.inputBuffer = (AudioBufferList *)malloc(propsize);
		self.inputBuffer->mNumberBuffers = 1;

		//pre-malloc buffers for AudioBufferLists
		self.inputBuffer->mBuffers[0].mNumberChannels = _outputFormat.mChannelsPerFrame;
		self.inputBuffer->mBuffers[0].mDataByteSize = bufferSizeBytes;
		self.inputBuffer->mBuffers[0].mData = malloc(bufferSizeBytes);
        memset(self.inputBuffer->mBuffers[0].mData, 0, bufferSizeBytes);

	}

    // Slap a render callback on the unit
    AURenderCallbackStruct callbackStruct;
    callbackStruct.inputProc = inputCallback;
    callbackStruct.inputProcRefCon = (__bridge void *)(self);

    CheckError( AudioUnitSetProperty(_inputUnit,
                                     kAudioOutputUnitProperty_SetInputCallback,
                                     kAudioUnitScope_Global,
                                     0,
                                     &callbackStruct,
                                     sizeof(callbackStruct)), "Couldn't set the callback on the input unit");

    callbackStruct.inputProc = renderCallback;
    callbackStruct.inputProcRefCon = (__bridge void *)(self);
# if defined ( USING_OSX )
    CheckError( AudioUnitSetProperty(_outputUnit,
                                     kAudioUnitProperty_SetRenderCallback,
                                     kAudioUnitScope_Input,
                                     0,
                                     &callbackStruct,
                                     sizeof(callbackStruct)),
               "Couldn't set the render callback on the input unit");

#elif defined ( USING_IOS )
    CheckError( AudioUnitSetProperty(_inputUnit,
                                     kAudioUnitProperty_SetRenderCallback,
                                     kAudioUnitScope_Input,
                                     0,
                                     &callbackStruct,
                                     sizeof(callbackStruct)),
               "Couldn't set the render callback on the input unit");
#endif

	CheckError(AudioUnitInitialize(_inputUnit), "Couldn't initialize the output unit");
#if defined ( USING_OSX )
    CheckError(AudioUnitInitialize(_outputUnit), "Couldn't initialize the output unit");
#endif

}

#if defined (USING_OSX)
- (void)enumerateAudioDevices
{
    AudioObjectPropertyAddress propertyAddress;
    propertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice;
    propertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
    propertyAddress.mElement = kAudioObjectPropertyElementMaster;

    UInt32 propSize = sizeof(AudioDeviceID);
    CheckError(AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propSize, &_defaultInputDeviceID), "Could not get the default device");

    propertyAddress.mSelector = kAudioHardwarePropertyDevices;
    propertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
    propertyAddress.mElement = kAudioObjectPropertyElementMaster;

    AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propSize);
    uint32_t deviceCount = ( propSize / sizeof(AudioDeviceID) );

    // Allocate the device IDs
    _deviceIDs = (AudioDeviceID *)calloc(deviceCount, sizeof(AudioDeviceID));
    [_deviceNames removeAllObjects];

    // Get all the device IDs
    CheckError( AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propSize, _deviceIDs ), "Could not get device IDs");

    // Get the names of all the device IDs
    // 256 chars should be big enough for pretty much any name
    char deviceNameBuffer[256];
    char mfrNameBuffer[256];
    UInt32 nameBufSize;
    AudioObjectPropertyAddress deviceAddress;

    for( int i = 0; i < deviceCount; i++ )
    {
        deviceAddress.mSelector = kAudioDevicePropertyDeviceName;
        deviceAddress.mScope = kAudioObjectPropertyScopeGlobal;
        deviceAddress.mElement = kAudioObjectPropertyElementMaster;

        nameBufSize = sizeof(deviceNameBuffer);

        CheckError( AudioObjectGetPropertyData(self.deviceIDs[i], &deviceAddress, 0, NULL, &nameBufSize, deviceNameBuffer), "Could not get device name");

        deviceAddress.mSelector = kAudioDevicePropertyDeviceManufacturer;
        deviceAddress.mScope = kAudioObjectPropertyScopeGlobal;
        deviceAddress.mElement = kAudioObjectPropertyElementMaster;

        nameBufSize = sizeof(mfrNameBuffer);

        CheckError( AudioObjectGetPropertyData(self.deviceIDs[i], &deviceAddress, 0, NULL, &nameBufSize, mfrNameBuffer), "Could not get device manufacturer");

        NSString *thisDeviceName = [NSString stringWithFormat:@"%@: %@", [NSString stringWithUTF8String:mfrNameBuffer], [NSString stringWithUTF8String:deviceNameBuffer]];
        NSLog(@"Device: %@, ID: %d", thisDeviceName, self.deviceIDs[i]);
        [self.deviceNames addObject:thisDeviceName];
    }

}

#endif

- (void)pause {

	if (self.playing) {
        CheckError( AudioOutputUnitStop(_inputUnit), "Couldn't stop the output unit");
#if defined ( USING_OSX )
		CheckError( AudioOutputUnitStop(_outputUnit), "Couldn't stop the output unit");
#endif
		self.playing = NO;
	}

}

- (void)play {

	UInt32 isInputAvailable=0;

#if defined ( USING_IOS )
    UInt32 size = sizeof(isInputAvailable);
	CheckError( AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable,
                                        &size,
                                        &isInputAvailable), "Couldn't check if input was available");

#elif defined ( USING_OSX )
    isInputAvailable = 1;

#endif

    self.inputAvailable = isInputAvailable;

	if ( self.inputAvailable ) {
		// Set the audio session category for simultaneous play and record
		if (!self.playing) {
			CheckError( AudioOutputUnitStart(_inputUnit), "Couldn't start the output unit");
#if defined ( USING_OSX )
            CheckError( AudioOutputUnitStart(_outputUnit), "Couldn't start the output unit");
#endif

            self.playing = YES;

		}
	}

}

#pragma mark - Render Methods
OSStatus inputCallback   (void						*inRefCon,
                          AudioUnitRenderActionFlags	* ioActionFlags,
                          const AudioTimeStamp 		* inTimeStamp,
                          UInt32						inOutputBusNumber,
                          UInt32						inNumberFrames,
                          AudioBufferList			* ioData)
{
    @autoreleasepool {

        Novocaine *sm = (__bridge Novocaine *)inRefCon;

        if (!sm.playing)
            return noErr;
        if (sm.inputBlock == nil)
            return noErr;

        // Check the current number of channels
        // Let's actually grab the audio
#if TARGET_IPHONE_SIMULATOR
        // this is a workaround for an issue with core audio on the simulator, //
        //  likely due to 44100 vs 48000 difference in OSX //
        if( inNumberFrames == 471 )
            inNumberFrames = 470;
#endif
        CheckError( AudioUnitRender(sm.inputUnit, ioActionFlags, inTimeStamp, inOutputBusNumber, inNumberFrames, sm.inputBuffer), "Couldn't render the output unit");

        // Convert the audio in something manageable
        // For Float32s ...
        if ( sm.numBytesPerSample == 4 ) // then we've already got flaots
        {

            float zero = 0.0f;
            if ( ! sm.isInterleaved ) { // if the data is in separate buffers, make it interleaved
                for (int i=0; i < sm.numInputChannels; ++i) {
                    vDSP_vsadd((float *)sm.inputBuffer->mBuffers[i].mData, 1, &zero, sm.inData+i,
                               sm.numInputChannels, inNumberFrames);
                }
            }
            else { // if the data is already interleaved, copy it all in one happy block.
                // TODO: check mDataByteSize is proper
                memcpy(sm.inData, (float *)sm.inputBuffer->mBuffers[0].mData, sm.inputBuffer->mBuffers[0].mDataByteSize);
            }
        }

        // For SInt16s ...
        else if ( sm.numBytesPerSample == 2 ) // then we're dealing with SInt16's
        {
            if ( ! sm.isInterleaved ) {
                for (int i=0; i < sm.numInputChannels; ++i) {
                    vDSP_vflt16((SInt16 *)sm.inputBuffer->mBuffers[i].mData, 1, sm.inData+i, sm.numInputChannels, inNumberFrames);
                }
            }
            else {
                vDSP_vflt16((SInt16 *)sm.inputBuffer->mBuffers[0].mData, 1, sm.inData, 1, inNumberFrames*sm.numInputChannels);
            }

            float scale = 1.0 / (float)INT16_MAX;
            vDSP_vsmul(sm.inData, 1, &scale, sm.inData, 1, inNumberFrames*sm.numInputChannels);
        }

        // Now do the processing!
        sm.inputBlock(sm.inData, inNumberFrames, sm.numInputChannels);

    }

    return noErr;

}

OSStatus renderCallback (void						*inRefCon,
                         AudioUnitRenderActionFlags	* ioActionFlags,
                         const AudioTimeStamp 		* inTimeStamp,
                         UInt32						inOutputBusNumber,
                         UInt32						inNumberFrames,
                         AudioBufferList				* ioData)
{
    // autorelease pool for much faster ARC performance on repeated calls from separate thread
    @autoreleasepool {

        Novocaine *sm = (__bridge Novocaine *)inRefCon;
        float zero = 0.0;

        for (int iBuffer=0; iBuffer < ioData->mNumberBuffers; ++iBuffer) {
            memset(ioData->mBuffers[iBuffer].mData, 0, ioData->mBuffers[iBuffer].mDataByteSize);
        }

        if (!sm.playing)
            return noErr;
        if (!sm.outputBlock)
            return noErr;

        // Collect data to render from the callbacks
        sm.outputBlock(sm.outData, inNumberFrames, sm.numOutputChannels);

        // Put the rendered data into the output buffer
        // TODO: convert SInt16 ranges to float ranges.
        if ( sm.numBytesPerSample == 4 ) // then we've already got floats
        {

            for (int iBuffer=0; iBuffer < ioData->mNumberBuffers; ++iBuffer) {

                int thisNumChannels = ioData->mBuffers[iBuffer].mNumberChannels;

                for (int iChannel = 0; iChannel < thisNumChannels; ++iChannel) {

                    int interleaveOffset = iChannel;
                    if (iBuffer < sm.numOutputChannels){
                        interleaveOffset += iBuffer;
                    }

                    vDSP_vsadd(sm.outData+interleaveOffset, sm.numOutputChannels, &zero, (float *)ioData->mBuffers[iBuffer].mData, thisNumChannels, inNumberFrames);

                }
            }
        }
        else if ( sm.numBytesPerSample == 2 ) // then we need to convert SInt16 -> Float (and also scale)
        {
            float scale = (float)INT16_MAX;
            vDSP_vsmul(sm.outData, 1, &scale, sm.outData, 1, inNumberFrames*sm.numOutputChannels);

            for (int iBuffer=0; iBuffer < ioData->mNumberBuffers; ++iBuffer) {

                int thisNumChannels = ioData->mBuffers[iBuffer].mNumberChannels;

                for (int iChannel = 0; iChannel < thisNumChannels; ++iChannel) {

                    int interleaveOffset = iChannel;
                    if (iBuffer < sm.numOutputChannels){
                        interleaveOffset += iBuffer;
                    }

                    vDSP_vfix16(sm.outData+interleaveOffset, sm.numOutputChannels, (SInt16 *)ioData->mBuffers[iBuffer].mData+iChannel, thisNumChannels, inNumberFrames);
                }
            }

        }
    }

    return noErr;

}

#pragma mark - Audio Session Listeners
#if defined (USING_IOS)
void sessionPropertyListener(void *                  inClientData,
							 AudioSessionPropertyID  inID,
							 UInt32                  inDataSize,
							 const void *            inData){

    // Determines the reason for the route change, to ensure that it is not
    //      because of a category change.
    CFNumberRef routeChangeReasonRef = (CFNumberRef)CFDictionaryGetValue ((CFDictionaryRef)inData, CFSTR (kAudioSession_AudioRouteChangeKey_Reason) );
    SInt32 routeChangeReason;
    CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);

    if (inID == kAudioSessionProperty_AudioRouteChange && routeChangeReason != kAudioSessionRouteChangeReason_CategoryChange)
    {
        Novocaine *sm = (__bridge Novocaine *)inClientData;
        [sm checkSessionProperties];
    }

}

- (void)checkAudioSource {
    // Check what the incoming audio route is.
    UInt32 propertySize = sizeof(CFStringRef);
    CFStringRef route;
    CheckError( AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &route), "Couldn't check the audio route");
    self.inputRoute = (__bridge NSString *)route;
    CFRelease(route);
    NSLog(@"AudioRoute: %@", self.inputRoute);

    // Check if there's input available.
    // TODO: check if checking for available input is redundant.
    //          Possibly there's a different property ID change?
    UInt32 isInputAvailable = 0;
    UInt32 size = sizeof(isInputAvailable);
    CheckError( AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable,
                                        &size,
                                        &isInputAvailable), "Couldn't check if input is available");
    self.inputAvailable = (BOOL)isInputAvailable;
    NSLog(@"Input available? %d", self.inputAvailable);

}

// To be run ONCE per session property change and once on initialization.
- (void)checkSessionProperties
{

    // Check if there is input, and from where
    [self checkAudioSource];

    // Check the number of input channels.
    // Find the number of channels
    UInt32 size = sizeof(self.numInputChannels);
    UInt32 newNumChannels;
    CheckError( AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareInputNumberChannels, &size, &newNumChannels), "Checking number of input channels");
    self.numInputChannels = newNumChannels;
    //    self.numInputChannels = 1;
    NSLog(@"We've got %lu input channels", self.numInputChannels);

    // Check the number of input channels.
    // Find the number of channels
    CheckError( AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareOutputNumberChannels, &size, &newNumChannels), "Checking number of output channels");
    self.numOutputChannels = newNumChannels;
    //    self.numOutputChannels = 1;
    NSLog(@"We've got %lu output channels", self.numOutputChannels);

    // Get the hardware sampling rate. This is settable, but here we're only reading.
    Float64 currentSamplingRate;
    size = sizeof(currentSamplingRate);
    CheckError( AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate, &size, &currentSamplingRate), "Checking hardware sampling rate");
    self.samplingRate = currentSamplingRate;
    NSLog(@"Current sampling rate: %f", self.samplingRate);

}

void sessionInterruptionListener(void *inClientData, UInt32 inInterruption) {

	Novocaine *sm = (__bridge Novocaine *)inClientData;

	if (inInterruption == kAudioSessionBeginInterruption) {
		NSLog(@"Begin interuption");
		sm.inputAvailable = NO;
	}
	else if (inInterruption == kAudioSessionEndInterruption) {
		NSLog(@"End interuption");
		sm.inputAvailable = YES;
		[sm play];
	}

}

#endif

#if defined ( USING_OSX )

// Checks the number of channels and sampling rate of the connected device.
- (void)checkDeviceProperties
{

}

- (void)selectAudioDevice:(AudioDeviceID)deviceID
{

}

#endif

#pragma mark - Convenience Methods
- (NSString *)applicationDocumentsDirectory {
	return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

@end

redpajama_set_name: RedPajamaGithub


text:
Artnodes celebrates 15 years
Subject: Arts and humanities
The UOC's scientific journal on art, science and technology celebrated its anniversary at an event at the Centre d'Arts Santa Mònica.
Artnodes is celebrating. On 7 July, the UOC's scientific journal marked its fifteenth anniversary with an event in the form of a debate at Barcelona's Centre d'Arts Santa Mònica. Entitled "The Future of Education and Arts Research", the event hosted the presentation of the present and future dossiers by the journal and the new UOC Bachelor's Degree in Art.
What does Artnodes consist of?
The research articles that it publishes revolve around the intersections between art, science and technology from historical, theoretical, structural and, especially, artistic praxis standpoints. The latest issue, "Art and speculative futures", includes a series of articles on the connections that are established between the past and the future in social and artistic manifestations. The previous issue, "Transmedia Narratives", explores the ability to tell the same story with multi-platform tools.
What is Artnodes like?
Open access: it provides free, immediate and unrestricted access to all the contents, with the conviction that making research available to the public openly and free of charge fosters the global exchange of knowledge.
Frequency: Artnodes publishes two issues a year, in June and December. Each issue contains a node that is also comprised of the various articles relating to the journal's subject areas.
Scientific review: All of the articles published in Artnodes have undergone a blind peer review by renowned experts in each subject area.
Artnodes in numbers
The scientific journal was founded in 2002 at the instigation of the Faculty of Arts and Humanities, the Faculty of Information and Communication Sciences and the Faculty of Computer Science, Multimedia and Telecommunications. Its editorial team has produced 19 issues and 188 articles, giving a voice to nearly 200 authors.
Internationalization and academic impact
New information graphics were published a few months ago, giving a visual representation of the five dimensions that comprise the indicator kit of the UOC's scientific journals, including Artnodes: consolidation in the academic network, internationalization, the scientific impact of articles, Internet activity and gender distribution of the stakeholders that take part in the journal's work.
During their lifetime, the academic journals have become an extensive academic network with professionals worldwide, with authorships from forty-five countries, reviewers from thirty-eight and committee members from twenty-two. Moreover, they are accepted and indexed in the leading databases and directories, libraries and catalogues. Artnodes is indexed in Scopus (Elsevier), ESCI (WoS, Clarivate Analytics), ERIH Plus and Carhus Plus, among others. In the 2017 edition of the Scimago Journal Rank (SJR), Artnodes is in the 2nd quartile in the field of Visual Arts.


House of Imports, a Buena Park, CA collision center, is part of AutoNation, America's largest and most trusted network of collision repair specialists. Our trained and certified technicians deliver the highest standard in accident repairs whether it is our Total Loss concierge service or the lifetime repair guarantee for work done on your car or truck to repair dents, paint or broken parts. House of Imports auto body repair shop services all makes and models.


LIVING creatures took millions of years to evolve from amphibians to four-legged mammals – with larger, more complex brains to match. Now an evolving robot has performed a similar trick in hours, thanks to a software "brain" that automatically grows in size and complexity as its physical body develops.
Existing robots cannot usually cope with physical changes – the addition of a sensor or new type of limb, say – without a complete redesign of their control software, which can be time-consuming and expensive.


The gastronomical extravaganza of the Oyster Festival was your favourite event this year, with the equally delicious Food & Wine Festival a second choice.
While skipping work we seem to either want to go to sleep or spend some time outside cruisin'.
Far and above the rest Chesterman Beach is our favourite, with being out in the surf as the runner up.
The Great Room at the Long Beach Lodge was Tofino's choice for a cocktail with Shelter showing a strong second.
For a little time away most folks headed to kennedy lake or down island to Victoria.
Out in the surf was your place of choice for this B.C. ritual or with the one you love.
The downtown core seems to be our location of choice for this sporting activity with First & Campbell being the top choice and the Common Loaf second.
The ocean is the center of our lives here so our favourite sports were surfing and fishing. Not a bad lifestyle Tofino.
When it came to truly unwinding we either hid ourselves in our homes or hit the beach.
The new Sacred Stone was a popular choice for a spa experience or some time in Therese Bouchard's beach side sanctuary.
A dip in Kennedy Lake was where Tofino chose to get in the water last year, or maybe a soothing soak in the hot springs.
Tofino's choice for a good jolt of the liquid life was Caffé Vincente. The Tofitian came in as a runner up.
The Schooner was our readers' choice as the best place to have breakfast, with Caffé Vincente in second.
Well the masses spoke with one voice SoBo! SoBo! SoBo! In all the categories there was nothing as definitive as Tofino's choice of SoBo for lunch. The Schooner was our second choice, for those rare moments when a fish taco just didn't seem right.
For a special night out for dinner, Schooner was your choice with the Raincoast Café as your close second.
Gord Austin's Chocolate Tofino was your location of choice for a sweet treat, with the Schooner as his closest rival.
Tofino's favourite spots for choosing a bottle was a 3 way tie between SoBo, Schooner and Shelter.
There really wasn't much of a question here, SoBo started off to an early lead and never looked back. The little purple truck took nearly all the votes in this field. The next closest source for a bite on the run was from Breakers Deli.
When it came to recommending a place to stay while in our area Middle Beach Lodge was the strong choice with Pacific Sands as your second to recommend.
Ocean Outfitters was voted as your favourite with Jamie's Whaling Station as a strong second place.
Of all our multitude of surf companies the top two were Storm and Surf Sister.
The eclectic Lounge Collection as a loved first choice with the serene setting of the Eagle Aerie Gallery of Roy Henry Vickers as your second.
Far a little shopping you headed to Plush or the new Boutique Upstairs.
Congrats to all the new businesses of 2005. The nod was given to Raven Skate Shop and Pasticceria Conradi as your favourites.
Thanks to everyone that took the time to enter their ballots and congratulations to all the winners.