text:
Data Storing Bacteria Could Last Millennia 252
PetManimal writes "Computerworld has a story about a new technology developed by Keio University researchers that creates artificial bacterial DNA that can carry more than 100 bits of data within the genome sequence. The researchers claimed that they encoded "e= mc2 1905!" on the common soil bacteria, Bacillius subtilis. The bacteria-based data storage method has backup and long-term archival functionality." The researchers say "While the technology would most likely first be used to track medication, it could also be used to store text and images for many millennia, thwarting the longevity issues associated with today's disk and tape storage systems ... The artificial DNA that carries the data to be preserved makes multiple copies of the DNA and inserts the original as well as identical copies into the bacterial genome sequence. The multiple copies work as backup files to counteract natural degradation of the preserved data, according to the newswire. Bacteria have particularly compact DNA, which is passed down from generation to generation. The information stored in that DNA can also be passed on for long-term preservation of large data files."


text:
Spring 2014 Course Offerings
Asian Studies Course Offerings - Spring 2014
Our program offers a well-rounded interdisciplinary approach to the study of Asia, as well as more specialized training in each student's particular area of interest. Courses cover a broad range of topics including history, economics, politics, society, geography, art and art history, business, film, and literature. The program faculty has rich and diverse interests that span from pre-modern times to the present day. Variety and depth are added to our students' regular coursework through experiential learning, including study abroad in Asia and internships in St. Cloud and the Twin Cities. Further, we understand that language is critical to understanding Asia: our students have access to three years of Chinese and Japanese language classes through the Department of Modern and Classical Languages.
Disciplinary Courses include:
ASIA 200 Into to Asian Studies
Wednesday Evening, 6:15-9:15 (open to all students)
This colloquium course, required of every Asian Studies major and minor, introduces the academic discipline of Asian Studies. Through modules taught by four faculty members from across the multidisciplinary spectrum, students will acquire an interdisciplinary understanding of Asia's enduring traditions, modern transformations, and recent emergence as a central player in global affairs.
A Mod: Understanding Hmong History and Culture in Minnesota
Dr. Deborah Pembleton, W, 6:15-9:15 pm, SJU
Minnesota has the largest population of Hmong people in the U.S How did this come to be and why is this valuable to know? In this mod, students will learn about Hmong history and culture particularly with respect to Hmong people residing in Minnesota. Through readings, guest lectures, videos, and meal sharing, students will gain an understanding and develop an appreciation for the essence of culture and sense of history of the Hmong in Minnesota in contexts that pertain to daily life.
B Mod: Gender Inequalities in Asian Economies
Dr. Sucharita Mukherjee, W, 6:15-9:15 pm
The analysis and experience of gender inequalities in any society is critical for complete understanding of human development within it. This mod focuses on studying gender inequalities between women and men in Asian economies that have had recent or continuing experiences of otherwise rapid economic development. Through a study of issues from academic papers, newspaper articles and other media we seek to understand and question the persistence of deep seated patriarchal norms which continue to create an unequal playing field for women in these parts of the world even as manifold opportunities for economic prosperity emerge with growing global integration.
C Mod: History and Philosophy of Aikido
Dr. Charles Wright, W, 6:15-9:15 pm, SJU
People familiar with contemporary movies, television, and computer games are apt to think that they have some idea of what Asian martial arts are about. For the most part this idea will be mistaken. The highest aspiration for traditional practitioners of Asian martial arts is wisdom, not victory. Consequently, these arts frequently embody the teachings of the region's philosophical systems. In this mod students will first be introduced to some of the philosophical ideas that have shaped the cultural values and beliefs of many Asian societies - the teachings of Confucius, the Tao Te Ching, Buddhism and Shinto. Then they will examine how these philosophical traditions are woven together in the teachings of the Founder of the Japanese martial art Aikido. During this unit of the course students will be required to gain direct experience of this philosophy-in-action through weekly practice of Aikido.
Mod D: The United States and China: A Century of Engagement
Joseph Rogers, W, 6:15-9:15 pm
This mod will focus on the history of the interaction between Americans and Chinese over the past century, examining 3 main phases of engagement: engagement during the late colonial period (1919-1949); the Communist era (1949-1978); and Reform and Opening (1978-present). Particular emphasis will be placed on how Americans and Chinese differ in their interpretation and understanding of this engagement (or lack of engagement). Students will also be challenged to view this interaction from different cultural and theoretical perspectives. For example, students will read excerpts from Orientalism by Edward Said, and will reflect on their own motivation and interest in studying China and, more generally, Asia. Finally, students will focus on the contemporary relationship between the U.S. and China, which is increasingly interdependent while at the same time fraught with competing agendas and potential conflicts. Students will be exposed to various opportunities available to them for engagement with China (and Asia generally) and will reflect on how these opportunities fit into their overall educational experience at CSB/SJU.
ASIA 399 Senior Capstone (required for majors)
Dr. Richard Bohr, Time TBA (agreed upon between student/instructor)
In this final course of the Asian Studies major, students will generate a capstone paper or project that demonstrates their understanding of the Asian Studies discipline by focusing in depth on one topic selected in consultation with their adviser and/or the Director of Asian Studies. Students will research and prepare a high-quality project suitable for presentation at Celebrating Scholarship and Creativity Day.
Interdisciplinary courses include:
ART 240F-01A Topics: China in Focus: Photography in China 1850-Present (FA)
Dr. Carol Brash, T/TH, 9:35, CSB
By the 1840s the medium of photography had arrived in China. Early photographers in China included Lai A Fong in Hong Kong, and Englishman John Thomson, whose later works document the plight of the poor in Victorian London. The early years were followed by years of upheaval and then of propaganda-oriented images and exhibitions, particularly during the Cultural Revolution under Mao Zedong. Since the 1980s, photography in China has emerged as a powerful tool for documenting and challenging the dramatic changes there. During this course, you will explore some of the major themes addressed by Chinese photographers, such as urban problems, the shift from a rural to an urban environment, the transient nature of cities and their residents, and the fragile coexistence of tradition and popular culture in daily life. The class will be a combination of lecture and discussion, focusing on the history of photography in China, visual analysis of the powerful images, and discussion of how the viewers' context plays a role in the understanding of the works. Although the primary topic will be the history of photography as art in China by Chinese artists, the course will include a brief history of photography as art in the west and will also examine western photographers who focus on China as a subject. In addition to doing close readings of primary texts (the photographs), the class will also investigate secondary texts with the aim of placing the photographs and the themes explored in the works in context.
ENGL 381: Literature by Women (HM, Gender)
Dr. Madhu Mitra, T/TH, 1:05, CSB
This course is designed to introduce students to the diversity of women's writings from Africa, the Middle East, and the Indian subcontinent. Mainly through novels, but supplemented by poetry, essays and memoirs, we will explore the ways in which women writers have articulated their concerns, challenged or re-inscribed societal and familial roles, responded to political and cultural pressures, and formulated a literary and feminist aesthetic.
A major objective of the course is to examine some of the central issues in the field of gender/women's studies: the socio-cultural construction of femininity and masculinity; the meanings and practices of hegemonic patriarchy; the politics and economics of gender relations/identities.
Some of the writers we will read are Nawal El-Saadawi (Egypt), Huda Barakat (Lebanon), Alia Mamoudi (Iraq), Majane Satrapi (Iran), Sahar Khalifeh (Palestine), and Kamila Shamsie (Pakistan).
ENVR 200A: Environmental Art/Architecture (FA)
Richard Bresnahan, T/TH, 9:35, and Lab on TH, 1:00-3:55
This course focuses on a range of issues addressing art, architecture and their relationship to a sustainable environment. Through analysis of critical theory, students will gain an understanding of the language and critical issues of art, architecture and their impact upon the environment. Through a hands-on approach, students will apply these concepts to make ceramic artwork in the SJU Pottery studio. Students will critically analyze readings, discuss examples of art and architecture and meet with artists in order to expand their understanding of the relationship between art, architecture and the environment.
GBUS 300: Global Enterprise
Prereq GBUS 210, 220, 230 & 240
Sanford Moskowitz, T/R, 8:00 and 9:35, SJU
This course covers the fundamental concepts, issues, and structure of 21st century global business. It explores the historical, cultural, economic, and political underpinnings of the basic themes of, and critical actors operating within international business today. The student learns about the nature of and relationships between the major components (or systems) that make up the international business system as a whole.
HI 115: East Asian History (HM)
Dr. Richard Bohr, T/TH, 9:55, CSB
A survey of continuity and change in the modern transformation of China (including the PRC, Hong Kong and Taiwan), Korea, Japan and Vietnam. This course examines each country's role in the other's development; the impact of Western imperialism on the "modernization" of the region since 1800; and the implications of the "Asian Century."
HI 118: Islam & The West (HM)
Dr. Jeffrey Diamond, M/W/F 10:40, CSB
This class will provide an introductory history of the Islamic World through a comparative analysis of Muslim societies in the Middle East and Asia. We will study the rise and spread of Islam, the emergence of the great early modern Islamic empires, and contemporary Islamic social movements. We also will concentrate on the interactions between Europe, the Middle East, and Asia, highlighting issues that include the influence of colonialism, Muslim-Christian-Jewish relations and Islam as a political, social, and religious force in the contemporary world.
HI 317: Peoples Republic of China (HM)
Dr. Richard Bohr, T/TH, 1:05, CSB
An evaluation of China's socialist revolution since 1949. Explores the rise of Communism in China; the China of Mao, Deng and beyond; and U.S.-China relations since 1972. Previews the integration of the PRC, Hong Kong and Taiwan into a post-communist "Greater China" during the twenty first century."
HI 381: Readings Seminar - Asia and Empire
Dr. Jeffrey Diamond, Tuesday, 8:20-11:20 am (3 hour block)
While academics and pundits debate if the 21st Century will be the Asian Century -- due to the rise of the economic, military, and political power of India and China, it is important to understand the historical roots that both helped and hindered the rise of Asian countries. During the later 18th century through the early 20th century, European nations were the rising economic, military, and political powers and Europeans used this influence to assert direct colonial control and indirect influence on various Asian societies. Although research historically has often centered on the rhetoric and actions of the colonizers, contemporary historical works have also emphasized how different Asian societies and individuals responded in a variety of ways to European influence -- as collaborators, resistors, and nationalists. We will explore these perspectives through a variety of books in the field that highlight topics such as nationalism, subaltern studies, and gender.
As we explore the history of colonialism and nationalism in Asia, we will read recent historical monographs as well as 'classics' in the field that exemplify different approaches and methods of historical analysis. We will evaluate the methodology, arguments, and evidence of each monograph in order to develop critical historical skills through detailed seminar discussions and a series of essays. Learning how to "read a history book" is an important and rewarding skill to master, and we will discuss and analyze engaging topics in modern Asian history as we develop that skill.
HONR 320: Security: Defense, Diplomacy and Development
Dr. Christi Siver, T/R, 12:45, SJU
In this course, students will explore issues of international security from different perspectives. The course will start by looking at traditional security issues involving violence and warfare, but then move on to economic security, environmental security, and human security. Students will examine the role of states, international institutions, and non-governmental actors in seeking to understand and increase security.
LANGUAGES AND CULTURES (formerly Modern and Classical Languages)
CHIN 112 Elementary Chinese II
Limei Danzeisen, M/W/F, 10:40, CSB
Introduction to the basic elements of the Chinese language. Practice in listening, speaking, reading, and writing, including work with grammar, pronunciation, and culture.
CHIN 212 Intermediate Chinese II (GLP)
Limei Danzeisen, M/W/F, 11:50, CSB
Review and continued study of grammar together with additional training in listening, speaking, reading, and writing. 211 and 212 emphasize Chinese culture and civilization. Satisfactory completion of Chinese 211 fulfills the global language proficiency requirement.
Limei Danzeisen, T/TH, 8:20, CSB
Designed to help students solidify and further their communicative and writing ability in Chinese through contact with various written styles of modern Chinese. Advanced Chinese also provides a basic introduction to contemporary Chinese literature and culture.
JAPN 112 Elementary Japanese II
Masami Limpert, M/W/F, 9:30, CSB
Introduction to the basic structure of the Japanese language. Practice in speaking, listening, reading and writing, with a focus on an accurate command of grammar and culturally appropriate communication skills.
JAPN 212 Intermediate Japanese II (GLP)
Masami Limpert, M/W,F, 11:50, CSB
Review and continued study of grammar together with additional training in speaking, listening, reading and writing.
JAPN 312 Advanced Japanese SPEAK/READ/WRIT (Prereq JAPN 311 or permission of instructor)
Masami Limpert, M/W/F, 1:00, CSB
Review and continued development of grammar together with development of skills in speaking, listening, reading and writing.
PCST 333 : Theology Violence/Nonviolence (Cross-listed with THEO 345)
Dr. Jon Armajani, T/R, 1:05, CSB
This course examines theological perspectives on violence and nonviolence ranging from absolute pacifism to just war theory to the celebration of "redemptive violence." Students have the opportunity to do service learning in an organization related to violence and nonviolence.
POLS 121: Introduction to International Relations (IC, SS)
Dr. Manju Parikh, T/R, 1:05, CSB
In this course, students will analyze the structure of the international system and explore concepts including power, economic development, war and peace. We will compare different theoretical explanations of significant international events and examine actors and their influence at the international and national levels. We will consider issues of security, global poverty, environmental challenges and cultural exchange. By the end of the course, students should be able to critically analyze international events and approach foreign policy issues with a more developed view of the world.
POLS 223: Comparative Politics
Dr. Christi Siver, M/W/F, 1:50, SJU
In this course, students will learn to understand and compare different styles of political and economic organization around the globe. We will research concepts, including democracy and nationalism, and gain greater understanding of what they mean in different contexts. We will also discuss the emergence of new forms of political and economic organization and discuss their implications for international relations. Students will also learn about social science methods commonly used in comparative politics and prepare individual research designs.
POLS 358: Topics: International Relations/Comparative Politics - Security
Dr. Christi Siver, T/R, 12:45, SJU
In this course, students will explore issues of international security from different perspectives. The course will start by looking at traditional security issues involving violence and warfare, but then move on to economic security, environmental security, human security and human rights. Students will examine the role of states, international institutions, and non-governmental actors that define the contemporary meaning of security.
THEO 345: Theology Violence and Nonviolence (TU. Cross-listed with PCST 333)
Prereq THEO 111 or HONR 240A
Dr. Jon Armajani, T/R, 1:05, CSB
This course examines theological perspectives on violence and nonviolence ranging from absolute pacifism to just war theory to the celebration of "redemptive violence." Students have the opportunity to do service learning in an organization related to violence and nonviolence.
THEO 363: Religions of the World (TU)
Dr. Jon Armajani, T/R, 2:40, CSB
This course focuses on major religions of the world cross-culturally in terms of categories such as sacred text, sacred time, sacred space, myth, ritual, symbol, ethics, and politics. The relationships among the religions and topics pertaining to inter-religious dialogue are examined.
THEO 369B: Modern Islam Political Movements (TU)
Dr. Jon Armajani, T/R, 8:20, CSB
After providing an introduction to the beliefs, practices, and history of Islam, this course will analyze some of the relationships between Islam and politics in the twentieth and twenty-first centuries among Islamist (or "fundamentalist Islamic groups") in the Middle East, South Asia, and other parts of the world. Specifically, the course will examine the histories, ideologies, and structures of groups. This course will examine the religious, theological, and political, foundations of these groups while analyzing their work in education, literacy, social service to people in many sectors of societies (including the underprivileged), religious and political instruction, and community-building. The course will also explore the various perspectives of members of these groups and movements toward peace and violence as well as their religiously- and politically-based reasons for attacking various targets. Finally, the course will compare and contrast those Islamist trends with those represented by some liberal Muslims.

subset: commoncrawl


text:
Skip to comments.Muslim leader says pope is model of what religious leader should be
Posted on 10/08/2013 1:24:33 PM PDT by haffast
VATICAN CITY (CNS) -- Pope Francis, like Islam's Sufi mystic theologians and poets, "is trying to do good for the sake of the Good One, motivated by love and compassion," said the president of the Islamic Affairs Council of Maryland.
Mohamad Bashar Arafat, a Syrian who has lived in the United States for more than 20 years, was visiting the Vatican and speaking to groups in Rome in early October as a guest of the U.S. Embassy to the Holy See as part of the U.S. State Department's international speakers program.
In an interview with Catholic News Service, Arafat said he sees Pope Francis acting as all truly religious leaders should: reaching out with respect for the human person and open to dialogue.
Arafat said the pope's love and openness were clear not only in his choice of being named after St. Francis of Assisi, but particularly in his decision in July to visit the Italian island of Lampedusa, praying for migrants lost at sea and calling the world's attention to the need for immigration reform, and in calling on people around the world to fast and pray for peace in Syria in early September when a military strike seemed imminent.
"From my perspective, Pope Francis is really doing a wonderful job in terms of outreach, in terms of contributing to world peace, in terms of contributing to stopping wars and conflicts, praying for better understanding," Arafat said. "This was the message of St. Francis Assisi and this is the message of Ibn Arabi, the great Muslim scholar and theologian and poet, and this is the spirit of all the Muslim saints and Sufis around the world."
(Excerpt) Read more at catholicnews.com ...
Hello! Well said.
Pope Francis, like Islam's Sufi mystic theologians and poets, "is trying to do good for the sake of the Good One, motivated by love and compassion," said the president of the Islamic Affairs Council of Maryland. Mohamad Bashar Arafat, a Syrian who has lived in the United States for more than 20 years, was visiting the Vatican and speaking to groups in Rome in early October as a guest of the U.S. Embassy to the Holy See as part of the U.S. State Department's international speakers program.
Errr...uuuhh....a "moderate"?
Imam Mohamad Bashar Arafat
Founder, Civilizations Exchange & Cooperation Foundation
Born and raised in Damascus, Syria, Imam Arafat attended Damascus University and graduated with a degree in Islamic Studies and Arabic Language in 1987 and a degree in Islamic Law in 1988. From 1975 to 1989 under the guidance and mentorship of the late Grand Mufti of Syria, Sheikh Ahmad Kuftaro, he studied Quranic interpretation, wisdom of the "Shari'ah" and the Islamic spiritual teachings. From 1989 to 1997, he accompanied the Grand Mufti during most of his international programs and conferences.
He served as Imam in Damascus from 1981 to 1989 and was then invited to the United States to lecture in various Islamic Centers. He was Imam of the Islamic Society of Baltimore, Maryland from 1989 to 1993, founded An-Nur Institute for Islamic Studies and Arabic Language in Baltimore in 1993, co-founded An-Nur Mosque in Carney, Maryland and was the Imam from 1995 to 1997. Currently he is President of the Islamic Affairs Council of Maryland, based in Baltimore.
He taught courses on Islamic Studies at the Ecumenical Institute of Theology at St. Mary's Seminary & University, the University of Maryland in Baltimore County (UMBC), Johns Hopkins University, Goucher College, the Renaissance Institute, as well as Comparative Religions at Potomac College in Washington, DC. Currently he is teaching at Notre Dame of Maryland University.
He served as Campus Imam at Johns Hopkins University from 1993 to October 2003, Adjunct Chaplain at Johns Hopkins Hospital from 2000 to October 2003, and Muslim Chaplain for Baltimore City Police Department from 1998 to 2006.
Since moving to Baltimore in 1989, he has been heavily involved with interfaith work, both nationally and internationally, promoting better understanding between Muslims and other Faith Traditions. Among the recent seminars and conferences he has participated in are:
"Schools of the Future: Sailing the Winds of Change", National Association of Independent Schools in Chicago, USA
"Islam & Civil Society", The Witherspoon Institute, Princeton University in New Jersey, USA
"Human Rights in Judaism, Christianity and Islam", Clergy Beyond Borders in Washington, DC, USA
"Imam & the Pastor" and "Mary in the Qur'an", Parliament of World Religions in Melbourne, Australia
"Qur'an Conference: Understanding Scientific Developments in the Light of Holy Qur'an" and "Muslims and Education: Challenges and Opportunities", in New Delhi, India
"Diaspora Forum", U.S. Department of State in Washington D.C.
Imam Arafat is the Founder and President of Civilizations Exchange and Cooperation Foundation (CECF), which functions as an umbrella to bring people together for exchanges aimed at creating a better world that promotes peace and cooperation.
Currently CECF provides religious & cultural training, consultation, and orientation services for the international exchange students and staff of the U.S. Department of State's sponsored Youth Exchange Study Program, "YES Program" in the USA. Imam Arafat is the convener of three annual youth leadership and interfaith conferences, "Better Understanding for a Better World" (BUBW) in Orlando, San Diego, and Baltimore.
As of January 2005, Imam Arafat began conducting programs on "Islam in America" through the International Speakers Program of The United States Department of States in Chad, Niger, Mauritania, Ethiopia, Tanzania, Kenya, Morocco, Egypt, Jordan, Bahrain, Saudi Arabia, Qatar, United Arab Emirates, Yemen, Philippines, Indonesia, Thailand, Malaysia, Maldives, Spain, Austria, Czech Republic, Switzerland, Iceland, Belgium and India.
"Ahmed Muhammad Amin Kuftaro (December 1915 September 1, 2004) was the Grand Mufti of Syria, the highest Sunni Muslim religious official in Syria."
Amman Message
Get that smelly islamist out of here!
Tony Blair!! He's everywhere, he's everywhere!!
Another "love the sinner, but hate the sin" and the sinner's ungodly religion.
That's good. Now that they are listening ..... PF should declare that Christian churches are open for everyone who wants to hear the wonderful news about Jesus of Nazareth who was born, performed miracles, taught us how to love God and each other, how to repent for our sins, and then took upon his shoulders the weight of our transgressions and offered himself up as a sacrifice to God. How fortunate we are to have such a Redeemer!
As of January 2005, Imam Arafat began conducting programs on Islam in America through the International Speakers Program of The United States Department of States in Chad, Niger, Mauritania, Ethiopia, Tanzania, Kenya, Morocco, Egypt, Jordan, Bahrain, Saudi Arabia, Qatar, United Arab Emirates, Yemen, Philippines, Indonesia, Thailand, Malaysia, Maldives, Spain, Austria, Czech Republic, Switzerland, Iceland, Belgium and India.
Sounds like a lot of geography for this U.S. State Department asset.
Suprising, again, given the fact that major schools of Salafists and Wahhabis and so on emphatically don't even consider them to be within the Dar al-Islam. A Sufi is not what you'd naturally expect to be the diplomatic selectman to be OK with everybody.
The Quran, Islam's holy book, does not teach Muslims to espouse the attitude "I am the only one who is right and all of you are wrong," he said, nor does it insist that every nation must be governed by Shariah, Islam law...Tell that to the people in the U.K. Back in August 16, 2013.A federal judge Thursday prohibited Oklahoma officials from certifying the results of a 2010 statewide election that approved a constitutional amendment to prohibit state courts from considering international or Islamic law when deciding cases.U.S. District Judge Vicki Miles-LaGrange permanently enjoined the State Election Board and its secretary, Paul Ziriax, from certifying results of the vote in which State Question 755 was approved by Oklahoma voters. The measure was passed with 70 percent of the vote on Nov. 2, 2010.
Muneer Awad, former executive director of the Council on American-Islamic Relations in Oklahoma, challenged the constitutional amendment in a lawsuit that claimed it would stigmatize his religion and would invalidate his will, which he said is partially based on Islamic Law, also known as Sharia Law.CAIR's current executive director, Adam Soltani, said the decision reinforces a ruling Miles-LaGrange almost three years ago in which she approved a temporary restraining order barring certification of the election's results. That decision was later upheld by the 10th U.S. Circuit Court of Appeals in Denver.
We are safe to practice our faith without being demonized, Soltani said. It's also a victory for our Constitution that guarantees and protects freedom of religion.
more@ http://newsok.com/u.s.-judge-permanently-bans-oklahoma-islamic-law-vote/article/3872460
Reread post #25.
Connect these dots:
"Imam" ( http://en.wikipedia.org/wiki/Imam )
With a lot of "respect":
Imam Arafat: respect for religious diversity
Vatican Radio - 2013-10-09 14:06:05
...and most likely he's Sunni, not Sufi, playing the ecumenical "all paths lead to Allah(God??)" angle, same as PF.......but with a working knowledge of the "wisdom of the Shariah" law.
Encouraged to walk like an Egyptian?:
So,for a one world religion, will it be Canon Law, Shariah Law, God's Law, or....under Grace following Jesus?
Imam Arafat's been ready for Christmas....
So, you think he's a Sunni? That would make sense. It would be more mutually advantageous to the Obamunist State Dept.'s overall project of promoting Sunni Islam around the world.
I think so, but it's hard for me to tell 'em apart, and I'm no expert on Islam. Opens up more questions than answers for me as far as to his underlying motives and associations (ie, spiritual, NWO, endtimes, politcal, cultural etc perspectives). Pretty clear he's concentrating on "educating" the young.
Sorry for the late replies, little time the last few days to feed my FR addiction or vet these guys.
Disclaimer: Opinions posted on Free Republic are those of the individual posters and do not necessarily represent the opinion of Free Republic or its management. All materials posted herein are protected by copyright law and the exemption for fair use of copyrighted works.


text:
Juan Mata says Chelsea are treating Shakhtar Donetsk clash as must-win tie
Juan Mata says Chelsea will treat Wednesday's key UEFA Champions League clash with Shakhtar Donetsk 'like a final'.
Last Updated: 05/11/12 4:19pm
The Blues go into the match knowing a second defeat in a fortnight against the Ukrainian Premier League champions would leave them with a mountain to climb to avoid becoming the first reigning UEFA Champions League winners to fail to reach the knockout stage.
Mata, who has been one of Chelsea's top performers during the early parts of the season, knows what a stern challenge Shakhtar pose and will treat the meeting as a cup final.
"It's time to move on and to focus on the Champions League match this Wednesday. It's like a final for us if we want to finish first in our group," he wrote on his official online blog.
"Besides, in Ukraine, Shakhtar proved to be a top team who are able to beat anyone. Even so, we always have a great support at the Bridge and I'm confident that we will get a victory to face the last two games in a good position. Champions League's nights at the Bridge are always special."
The Spain playmaker sat out Saturday's 1-1 draw with Swansea with a slight hamstring problem after playing the whole of Chelsea's 5-4 extra-time victory over Manchester United in the Capital One Cup and suggested he just needed to rest up following a tiring week.
"After such a huge effort during 120 minutes I was forced to rest a few days with a hamstring injury," he said.
"That's why I missed our game in Wales vs Swansea."
Summer signing Victor Moses made his first league start for the club at Swansea due to Mata's injury with the former Wigan forward opening the scoring before Pablo Hernandez's late equaliser.
Moses feels he has shown Chelsea boss Roberto Di Matteo what he can do but reckons the team still needs to improve.
"It's a massive club and with the amount and quality of players we have here you have to wait for your chance. That's what I've been doing and I have to show the manager I'm good enough to start. It's just part of the game," he told the club's official website.
"I was delighted to start but the game was a bit slow from us, though we came out second half and dominated, but it cost us at the end. It's not the best result but we have to take it and move on from it.
"Now we have to keep on improving week in week out, but I am delighted to be here."


text:
QuickTime for Java: A Developer's Notebook/Audio Media
From WikiContent
(Initial conversion from Docbook)
m (1 revision(s))
Revision as of 23:57, 6 March 2008
This is the first of three chapters dealing with specific media types. Video will be covered in Chapter 8, and several other kinds of media—including things you might not have thought of as media, such as text and time codes—will be covered in Chapter 9.
It's possible that you've never thought of QuickTime as being the engine for audio-only applications—the ubiquity of QuickTime's .mov file format probably makes it more readily recognized as a video standard. But QuickTime's support for audio has been critical to many applications. For example, the fact that QuickTime was already ported to Windows made bringing iTunes and its music store over to Windows a lot easier.
In fact, iTunes is probably responsible for getting QuickTime onto a lot more Windows machines than it would have reached otherwise. So, I'll begin with a few labs that are particularly applicable to the MP3s and AACs collected by iTunes users.
Reading Information from MP3 Files
If you've ever listened to an MP3 music file—and at this point, who hasn't—you've surely appreciated the fact that useful information like artist, song title, album title, etc., is stored inside the file. Not only does this make it convenient to organize your music, but also, when you move a song from one device to another, this metadata travels with it.
The most widely accepted standard for doing this is the ID3 standard, which puts this metadata into parts of the file that are not interpreted as containing audio data—MP3s arrange data in frames , and ID3 puts metadata between these frames. ID3 tags typically are found at the beginning of a file, which makes them stream-friendly, although some files tagged with earlier versions of the standard have the metadata at the end of the file.
Visit http://www.id3.org/ to learn more about ID3.
When QuickTime imports an MP3 file, it reads ID3 tags and makes them available to your program through the movie's user data, allowing you to display the tags to the user, or use them in any other way you see fit.
How do I do that?
Once you open an MP3 as a movie, you need to get at the user data, which contains the imported ID3 tags. Fortunately, it's wrapped as an object called UserData :
UserData userData = movie.getUserData( );
The user data is something of a grab bag of data that you can read from and write to freely. Items are keyed by FOUR_CHAR_CODE s, and the contents aren't required to adhere to any particular standard or format (after all, you're free to write whatever you like in user data). For example, QuickTime Player writes a "WLOC" entry that stores the window location last used for the movie.
Apple has a standard set of keys that you can use to retrieve the data parsed from an MP3's ID3 tags. Because these are text values, you use UserData 's getTextAsString( ) method to pull them out. getTextAsString( ) takes three arguments: the type you're requesting; an index to indicate whether you want the first, second, etc., instance of that type; and a region tag that's irrelevant in the ID3 case.
Example 7-1 shows a basic exercise of this technique, getting the UserData object and asking for album, artist, creation date, and song title information.
Run this example from the downloadable book code with ant run-ch07-id3tagreader.
Example 7-1. Retrieving ID3 metadata
package com.oreilly.qtjnotebook.ch07; import quicktime.*; import quicktime.std.*; import quicktime.std.movies.*; import quicktime.std.movies.media.*; import quicktime.io.*; import java.util.*; import com.oreilly.qtjnotebook.ch01.QTSessionCheck; public class ID3TagReader extends Object { /* these values are straight out of Movies.h */ final static int kUserDataTextAlbum = 0xA9616C62; /*'©alb' */ final static int kUserDataTextArtist = 0xA9415254; final static int kUserDataTextCreationDate = 0xA9646179; /*'©day' */ final static int kUserDataTextFullName = 0xA96E616D; /*'©nam' */ /* This array maps all the tag constants to human-readable strings */ private static final Object[ ][ ] TAG_NAMES = { {new Integer (kUserDataTextAlbum), "Album"}, {new Integer (kUserDataTextArtist),"Artist" }, {new Integer (kUserDataTextCreationDate), "Created"}, {new Integer (kUserDataTextFullName), "Full Name"} }; private static final HashMap TAG_MAP = new HashMap(TAG_NAMES.length); static { for (int i=0; i<TAG_NAMES.length; i++) { TAG_MAP.put (TAG_NAMES[i][0], TAG_NAMES[i][1]); } } public static void main (String[ ] args) { new ID3TagReader( ); System.exit(0); } public ID3TagReader( ) { try { QTSessionCheck.check( ); QTFile f = QTFile.standardGetFilePreview (null); OpenMovieFile omf = OpenMovieFile.asRead(f); Movie movie = Movie.fromFile (omf); // get user data UserData userData = movie.getUserData( ); dumpTagsFromUserData(userData); } catch (Exception e) { e.printStackTrace( ); } } protected static void dumpTagsFromUserData (UserData userData) { // try for each key in TAG_MAP Iterator it = TAG_MAP.keySet( ).iterator( ); while (it.hasNext( )) { Integer key = (Integer) it.next( ); int tag = key.intValue( ); String tagName = (String) TAG_MAP.get(key); try { String value = userData.getTextAsString (tag, 1, IOConstants.langUnspecified); System.out.println (tagName + ": " + value); } catch (QTException qte) { } // no such tag } } }
When run, this dumps the found tags to standard out, as seen in the following console output:
cadamson% ant run-ch07-id3tagreader Buildfile: build.xml run-ch07-id3tagreader: [java] Album: Arthur Or The Decline And Fall Of The British Empire [java] Full Name: Victoria [java] Artist: The Kinks
What just happened?
The application sets up some static values for keys it is interested in and maps them to human-readable names. For example, the FOUR_CHAR_CODE "@alb" is mapped to "Album."
The program prompts the user to select an MP3 file and imports it as a movie, from which it gets a UserData object. In dumpTagsFromUserData( ), it calls getTextAsString() to attempt to get a value for each known tag. If successful, it writes the key and value to the console. If a given tag is absent from the user data, QuickTime throws an exception, which this program quietly ignores.
QuickTime has an important and disappointing limitation: it does not import tags written in non-Western scripts. For example, here's the output when I run the application against an MP3 whose "artist" tag is in Japanese kana (characters):
cadamson% ant run-ch07-id3tagreader Buildfile: build.xml run-ch07-id3tagreader: [java] Album: COWBOY BEBOP O.S.T.1 [java] Created: 1998 [java] Full Name: SPACE LION
Because the artist (, or "Yoko Kanno" in romaji) is written in non-Western characters, QuickTime doesn't attempt to import it, and thus there's no artist item to retrieve from the user data.
What about...
...other tags? A big list of metadata tags are defined in the native API's Movies.h file. Unfortunately, these aren't in the StdQTConstants classes, or anywhere else in QTJ, so you have to define your own constants for them. Table 7-1 is the list of supported values.
Table 7-1. Audio metadata tag constants
|Constant name
|Hex value
kUserDataTextSpecialPlayback Requirements
Also, instead of requesting specific keys from the user data, can I just tour what's in there? Yes, you can use UserData.getNextType() to discover the types of items in the user data. This method takes an int of the last discovered type (use 0 on the first call), and returns the next type after that one. When it returns 0, there are no more types to discover. Given a type, you can get its data with getTextAsString() , but because you can't know that a discovered piece of user data necessarily represents textual data, it might be safer to call getData( ) , which returns a QTHandle , from which you can get a byte array with getBytes( ) .
This technique is a lot like the "Discovering All Installed Components" lab in Chapter 4.
Reading Information from iTunes AAC Files
If you read the last lab and thought about how ID3 metadata is imported into a QuickTime movie's UserData, you might well expect that the same thing would be true of AAC files created by iTunes: .m4a files for songs "ripped" by the user and .m4p files sold by the iTunes Music Store. In fact, because these files use an MPEG-4 file format that is itself based on QuickTime, you might think that using the same user data scheme would be a slam dunk.
But...you'd be wrong.
These AAC files do put the metadata in the user data, but they do so in a way that resists straightforward retrieval via QuickTime. Fortunately, it's not too hard to get the values out with some parsing.
Buckle up, this one is rough.
How do I do that?
For once, theory needs to come before code—you need to see the format to understand how to parse it. Here's a /usr/bin/hexdump of an iTunes Music Store AAC file from my collection, Toto Dies.m4p:
0000b010 00 3d 5f 3c 00 3d 7d 5e 00 3d 9a fb 00 03 18 da |.=_<.=}^.=......| 0000b020 75 64 74 61 00 03 18 d2 6d 65 74 61 00 00 00 00 |udta....meta....| 0000b030 00 00 00 22 68 64 6c 72 00 00 00 00 00 00 00 00 |..."hdlr........| 0000b040 6d 64 69 72 61 70 70 6c 00 00 00 00 00 00 00 00 |mdirappl........| 0000b050 00 00 00 03 11 9b 69 6c 73 74 00 00 00 21 a9 6e |......ilst...!.n| 0000b060 61 6d 00 00 00 19 64 61 74 61 00 00 00 01 00 00 |am....data......| 0000b070 00 00 54 6f 74 6f 20 44 69 65 73 00 00 00 24 a9 |..Toto Dies...$.| 0000b080 41 52 54 00 00 00 1c 64 61 74 61 00 00 00 01 00 |ART....data.....| 0000b090 00 00 00 4e 65 6c 6c 69 65 20 4d 63 4b 61 79 00 |...Nellie McKay.| 0000b0a0 00 00 24 a9 77 72 74 00 00 00 1c 64 61 74 61 00 |..$.wrt....data.| 0000b0b0 00 00 01 00 00 00 00 4e 65 6c 6c 69 65 20 4d 63 |.......Nellie Mc| 0000b0c0 4b 61 79 00 03 0e 76 63 6f 76 72 00 03 0e 6e 64 |Kay...vcovr...nd| 0000b0d0 61 74 61 00 00 00 0d 00 00 00 00 ff d8 ff e0 00 |ata.............| 0000b0e0 10 4a 46 49 46 00 01 01 01 02 f9 02 f9 00 00 ff |.JFIF...........|
Granted, this is not easy to read, but I'll bet you can pick out the artist (Nellie McKay) and the song title ("Toto Dies"), so you know this is the relevant section of the file. In fact, you also might notice the string "udta"...sounds a little like "user data," doesn't it?
At work here is the QuickTime file format and its concept of atoms , which are tree-structured pieces of data used to describe a movie, its contents, and its metadata. Without going too deeply into the details—there's a whole book on the format—each atom consists of 4 bytes of size, a 4-byte type, and then data. Atoms contain either data or other atoms, but not both. The 4 bytes before "udta", 0x000318da, indicate the size of all the user data. The first child is an atom called "meta". Because its size is 0x000318d2, just 8 less than the size of "udta", the "meta" atom is clearly the only child of "udta".
Unfortunately, because this is user data, the contents don't have to adhere to any published standard, and they don't. The first thing after "meta" should be the 4-byte size of its first child atom, but the value is 0x00000000—an illegal "no size" value—so, a normal QuickTime parser would ignore the contents of "meta".
Funny thing is, although these contents aren't real QuickTime atoms, they're awfully close. Start with the stuff that's obviously the metadata and work backward: "Toto Dies" is preceded by an 8-byte pad (0x00000001 and 0x00000000), and before that is "data" and a 4-byte number. That number, 0x00000019, is the size of itself, plus "data", plus the 8-byte pad, plus the string "Toto Dies." And just before that, you'll find the string "©nam", preceded by a 4-byte size. Better yet, "©nam" is one of the constants defined in Movies.h for metadata tagging.
See the previous lab for a list of QuickTime's metadata tags.
Dig further and you'll find that there's a run of these tag-name/data structures, each of which has the structure discovered earlier:
- Full size
- 4 bytes
- Type
- 4 bytes
- Contents size
- 4 bytes
- "data"
- 4 bytes
- Unknown
- 8 bytes
- Value
- Variable number of bytes (size is implicit from earlier size data)
The run of metadata blocks exists within a single pseudo-atom parent called "ilst". So, this analysis provides a strategy for getting iTunes AAC metadata:
- Get the user data.
- Look for a user data item called "meta" and get it as a byte array.
- Inside this array, find "ilst".
- Start reading 8-byte blocks as possible size/type combinations. If the type is known as a metadata type, skip past the 24 bytes of junk (the 8-byte pad, the "data", etc.) and read the String.
The sample program in Example 7-2 implements this strategy.
Run this example with ant run-ch07-aactagreader.
Example 7-2. Retrieving iTunes AAC metadata
package com.oreilly.qtjnotebook.ch07; import quicktime.*; import quicktime.std.*; import quicktime.std.movies.*; import quicktime.std.movies.media.*; import quicktime.io.*; import quicktime.util.*; import java.util.*; import java.math.BigInteger; import com.oreilly.qtjnotebook.ch01.QTSessionCheck; public class AACTagReader extends Object { /* these values are straight out of Movies.h */ final static int kUserDataTextAlbum = 0xA9616C62; /*'©alb' */ final static int kUserDataTextArtist = 0xA9415254; final static int kUserDataTextCreationDate = 0xA9646179; /*'©day' */ final static int kUserDataTextFullName = 0xA96E616D; /*'©nam' */ /* This array maps all the tag constants to human-readable strings */ private static final Object[ ][ ] TAG_NAMES = { {new Integer (kUserDataTextAlbum), "Album"}, {new Integer (kUserDataTextArtist),"Artist" }, {new Integer (kUserDataTextCreationDate), "Created"}, {new Integer (kUserDataTextFullName), "Full Name"} }; private static final HashMap TAG_MAP = new HashMap(TAG_NAMES.length); static { for (int i=0; i<TAG_NAMES.length; i++) { TAG_MAP.put (TAG_NAMES[i][0], TAG_NAMES[i][1]); } } public static void main (String[ ] args) { new AACTagReader( ); System.exit(0); } public AACTagReader( ) { try { QTSessionCheck.check( ); QTFile f = QTFile.standardGetFilePreview (null); OpenMovieFile omf = OpenMovieFile.asRead(f); Movie movie = Movie.fromFile (omf); // get user data UserData userData = movie.getUserData( ); dumpTagsFromUserData(userData); } catch (Exception e) { e.printStackTrace( ); } } protected void dumpTagsFromUserData (UserData userData) throws QTException { int metaFCC = QTUtils.toOSType("meta"); QTHandle metaHandle = userData.getData (metaFCC, 1); System.out.println ("Found meta"); byte[ ] metaBytes = metaHandle.getBytes( ); // locate the "ilst" pseudo-atom, ignoring first 4 bytes int ilstFCC = QTUtils.toOSType("ilst"); PseudoAtomPointer ilst = findPseudoAtom (metaBytes, 4, ilstFCC); // iterate over the pseudo-atoms inside the "ilst" // building lists of tags and values from which we'll // create arrays for the DefaultTableModel constructor int off = ilst.offset + 8; ArrayList foundTags = new ArrayList (TAG_NAMES.length); ArrayList foundValues = new ArrayList (TAG_NAMES.length); while (off < metaBytes.length) { PseudoAtomPointer atom = findPseudoAtom (metaBytes, off, -1); String tagName = (String) TAG_MAP.get (new Integer(atom.type)); if (tagName != null) { // if we match a type, read everything after byte 24 // which skips size, type, size, 'data', 8 junk bytes byte[ ] valueBytes = new byte [atom.atomSize - 24]; System.arraycopy (metaBytes, atom.offset+24, valueBytes, 0, valueBytes.length); String value = new String (valueBytes); System.out.println (tagName + ": " + value); } // if tagName != null off = atom.offset + atom.atomSize; } } /** find the given type in the byte array, starting at the start position. Returns the offset within the byte array that begins this pseudo-atom. a helper method to populateFromMetaAtom( ). @param bytes byte array to search @param start offset to start at @param type type to search for. if -1, returns first atom with a plausible size */ private PseudoAtomPointer findPseudoAtom (byte[ ] bytes, int start, int type) { // read size, then type // if size is bogus, forget it, increment offset, and try again int off = start; boolean found = false; while ((! found) && (off < bytes.length-8)) { // read 32 bits of atom size // use BigInteger to convert bytes to long // (instead of signed int) byte sizeBytes[ ] = new byte[4]; System.arraycopy (bytes, off, sizeBytes, 0, 4); BigInteger atomSizeBI = new BigInteger (sizeBytes); long atomSize = atomSizeBI.longValue( ); // don't bother if the size would take us beyond end of // array, or is impossibly small if ((atomSize > 7) && (off + atomSize <= bytes.length)) { byte[ ] typeBytes = new byte[4]; System.arraycopy (bytes, off+4, typeBytes, 0, 4); int aType = QTUtils.toOSType (new String (typeBytes)); if ((type = = aType) || (type = = -1)) return new PseudoAtomPointer (off, (int) atomSize, aType); else off += atomSize; } else { System.out.println ("bogus atom size " + atomSize); // well, how did this happen? increment off and try again off++; } } // while return null; } /** Inner class to represent atom-like structures inside the meta atom, designed to work with the byte array of the meta atom (i.e., just wraps pointers to the beginning of the atom and its computed size and type) */ class PseudoAtomPointer { int offset; int atomSize; int type; public PseudoAtomPointer (int o, int s, int t) { offset=o; atomSize=s; type=t; } } }
When run with Toto Dies.m4p, the output to the console looks like this:
cadamson% ant run-ch07-aactagreader Buildfile: build.xml run-ch07-aactagreader: [java] Found meta [java] Full Name: Toto Dies [java] Artist: Nellie McKay [java] Album: Get Away from Me [java] Created: 2004-02-10T08:00:00Z
The "album" and "created" data didn't appear in the earlier hexdump because in the file they occur after the cover art data, which is several kilobytes long.
What just happened?
The program gets the UserData, gets its "meta" atom as a byte array, and looks for the "ilst" pseudo-atom. If it finds one, it skips ahead 8 bytes (over "ilst" and its size) and goes into a loop of discovering and parsing potential pseudo-atoms.
To parse, you look at the first 4 bytes and consider whether it's a plausible size—in other words, whether it's big enough to contain data, but small enough to not run past the end of the byte array. If so, interpret the next 4 bytes as a FOUR_CHAR_CODE type and check against the list of known metadata types. If it matches one of the known types, you've got a valid piece of metadata, which this program simply writes to standard out.
What about...
...combining this with the MP3 approach of the previous lab so that there's just one codebase? A good strategy for that would be to get the UserData and look for a "meta" atom. If you get one, assume you have iTunes AAC and do the previous parsing. If not, assume you have an MP3, and start asking for the various metadata types with UserData.getTextAsString( ), as in the previous lab.
Providing Basic Audio Controls
Most audio applications provide some basic audio controls to allow the user to customize the sound output to suit his environment. The MovieController provides a volume control, but you can do better than that: you can control balance, bass, and treble with simple method calls.
How do I do that?
The AudioMediaHandler class provides the methods setBalance( ) and setSoundBassAndTreble( ), so it's just a matter of getting the handler object. The key is to remember that:
- Movies have tracks.
- Tracks have exactly one Media each.
- Each Media has a MediaHandler.
Iterate over the movie's tracks to get each track's media and handler. To figure out whether a given track is audio, you can use a simple instanceof to see if the handler is an AudioMediaHandler.
setBalance( ) takes a float, which ranges from -1.0 (all the way to the left) to 1.0 (all the way to the right), with 0 representing equal balance.
setSoundBassAndTreble( ) is interesting because it's officially undocumented. As it turns out, you pass in ints for bass and treble, where 0 is normal, -256 is minimum bass or treble, and 256 is maximum.
Well, the native version is undocumented. For once, the Javadocs have the useful info.
Example 7-3 provides a simple GUI to exercise these methods.
Run this example with ant run-ch07-basicaudiocontrolsplayer.
Example 7-3. Providing balance, bass, and treble controls
package com.oreilly.qtjnotebook.ch07; import quicktime.*; import quicktime.std.*; import quicktime.std.movies.*; import quicktime.std.movies.media.*; import quicktime.app.view.*; import quicktime.io.*; import java.awt.*; import javax.swing.*; import javax.swing.event.*; import com.oreilly.qtjnotebook.ch01.QTSessionCheck; public class BasicAudioControlsPlayer extends Frame implements ChangeListener { JSlider balanceSlider, trebleSlider, bassSlider; AudioMediaHandler audioMediaHandler; public static void main (String[ ] args) { try { QTSessionCheck.check( ); Frame f= new BasicAudioControlsPlayer( ); f.pack( ); f.setVisible(true); } catch (QTException qte) { qte.printStackTrace( ); } } public BasicAudioControlsPlayer ( ) throws QTException { super ("Basic Audio Controls"); // prompt for audio file QTFile file = QTFile.standardGetFilePreview(null); OpenMovieFile omf = OpenMovieFile.asRead (file); Movie movie = Movie.fromFile (omf); MovieController controller = new MovieController (movie); // get AudioMediaHandler for first audio track for (int i=1; i<=movie.getTrackCount( ); i++) { Track t = movie.getTrack(i); Media m = t.getMedia( ); MediaHandler mh = m.getHandler( ); if (mh instanceof AudioMediaHandler) { audioMediaHandler = (AudioMediaHandler) mh; break; } } if (audioMediaHandler = = null) { System.out.println ("No audio track"); System.exit(-1); } // add controller to GUI setLayout (new BorderLayout( )); Component comp = QTFactory.makeQTComponent(controller).asComponent( ); add (comp, BorderLayout.NORTH); // build balance, treble, bass controls in a panel Panel controls = new Panel(new GridLayout (3,2)); controls.add (new JLabel ("Balance")); balanceSlider = new JSlider (-1000, 1000, 0); balanceSlider.addChangeListener (this); controls.add (balanceSlider); controls.add (new JLabel ("Treble")); trebleSlider = new JSlider (-256, 256, 0); trebleSlider.addChangeListener (this); controls.add (trebleSlider); controls.add (new JLabel ("Bass")); bassSlider = new JSlider (-256, 256, 0); bassSlider.addChangeListener (this); controls.add (bassSlider); add (controls, BorderLayout.SOUTH); } public void stateChanged (ChangeEvent ev) { Object source = ev.getSource( ); try { if (source = = balanceSlider) { // balance float newBal = (float) (balanceSlider.getValue( ) / 1000f); audioMediaHandler.setBalance (newBal); } else { // bass & treble audioMediaHandler.setSoundBassAndTreble ( bassSlider.getValue( ), trebleSlider.getValue( )); } } catch (QTException qte) { qte.printStackTrace( ); } } }
When run, the program asks the user to select a file to play, and then shows a GUI, as seen in Figure 7-1.
Figure 7-1. Balance, treble, and bass controls
Image:QuickTime for Java: A Developer's Notebook I 7 tt200.png
What just happened?
The key to this example is the use of Swing JSlider s, which can be configured with appropriate bounds for the features they represent. For example, the bass and treble sliders run in a -256 to 256 range, with 0 as a default:
trebleSlider = new JSlider (-256, 256, 0);
The balance slider needs to pass a float between -1 and 1, but JSliders work with ints, so it uses a range of -1000 to 1000, which is scaled to an appropriate float before calling setBalance( ):
balanceSlider = new JSlider (-1000, 1000, 0);
All the sliders share a ChangeListener implementation that reads the new value from the affected JSlider and make a corresponding call to the AudioMediaHandler.
Providing a Level Meter
Many audio applications also provide a graphical " level meter," which is an on-screen display of the loudness or softness of certain frequencies within the audio. In QuickTime Player, this is shown as a set of bars on the right side of the control bar, as seen in Figure 7-2.
Figure 7-2. Audio level meter in QuickTime Player
Image:QuickTime for Java: A Developer's Notebook I 7 tt203.png
The intensity of lower frequencies, like bass, is shown in the leftmost columns, while higher frequencies are to the right.
How do I do that?
AudioMediaHandler provides two key methods: setSoundEqualizerBands() to set up monitoring and getSoundLevelMeterLevels() to actually get the data. setSoundEqualizerBands( ) indicates which frequencies you want to monitor for your graphics display. These are passed in the form of a MediaEqSpectrumBands object, which is built up by constructing it with the number of bands you intend to monitor, then repeatedly calling setFrequency() to indicate which frequency a given band will monitor.
Unfortunately, most of the level-metering methods are officially undocumented.
As the audio plays, you can repeatedly call getSoundLevelMeterLevels( ), which returns an array of ints representing the measured levels.
Example 7-4 creates a basic audio level meter in an AWT Canvas.
Run this example with ant run-ch07-levelmeterplayer.
Example 7-4. Providing an audio level meter
package com.oreilly.qtjnotebook.ch07; import quicktime.*; import quicktime.std.*; import quicktime.std.movies.*; import quicktime.std.movies.media.*; import quicktime.app.view.*; import quicktime.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import com.oreilly.qtjnotebook.ch01.QTSessionCheck; public class LevelMeterPlayer extends Frame { // bands used by apple sndequalizer example; equivalent to qt player's // http://developer.apple.com/samplecode/sndequalizer/sndequalizer.html int[ ] EQ_LEVELS = { 200, 400, 800, 1600, 3200, 6400, 12800, 21000 }; static final Dimension meterMinSize = new Dimension (300, 150); LevelMeter meter; AudioMediaHandler audioMediaHandler; public static void main (String[ ] args) { try { QTSessionCheck.check( ); Frame f= new LevelMeterPlayer( ); f.pack( ); f.setVisible(true); } catch (QTException qte) { qte.printStackTrace( ); } } public LevelMeterPlayer ( ) throws QTException { super ("Basic Audio Controls"); // prompt for audio file QTFile file = QTFile.standardGetFilePreview(null); OpenMovieFile omf = OpenMovieFile.asRead (file); Movie movie = Movie.fromFile (omf); MovieController controller = new MovieController (movie); // get AudioMediaHandler for first audio track for (int i=1; i<=movie.getTrackCount( ); i++) { Track t = movie.getTrack(i); Media m = t.getMedia( ); MediaHandler mh = m.getHandler( ); if (mh instanceof AudioMediaHandler) { audioMediaHandler = (AudioMediaHandler) mh; break; } } if (audioMediaHandler = = null) { System.out.println ("No audio track"); System.exit(-1); } // add controller to GUI setLayout (new BorderLayout( )); Component comp = QTFactory.makeQTComponent(controller).asComponent( ); add (comp, BorderLayout.NORTH); // add level meter to GUI meter = new LevelMeter( ); add (meter, BorderLayout.SOUTH); // set up repainting timer Timer t = new Timer (50, new ActionListener( ) { public void actionPerformed (ActionEvent ae) { meter.repaint( ); } }); t.start( ); } class LevelMeter extends Canvas { public Dimension getPreferredSize( ) { return meterMinSize; } public Dimension getMinimumSize( ) { return meterMinSize; } public LevelMeter( ) throws QTException { MediaEQSpectrumBands bands = new MediaEQSpectrumBands (EQ_LEVELS.length); for (int i=0; i<EQ_LEVELS.length; i++) { bands.setFrequency (i, EQ_LEVELS[i]); audioMediaHandler.setSoundEqualizerBands (bands); audioMediaHandler.setSoundLevelMeteringEnabled (true); } } public void paint (Graphics g) { int gHeight = this.getHeight( ); int gWidth = this.getWidth( ); // draw baseline g.drawLine (0, gHeight, gWidth, gHeight); try { if (audioMediaHandler != null) { int[ ] levels = audioMediaHandler.getSoundEqualizerBandLevels( EQ_LEVELS.length); int maxHeight = gHeight - 1; int barWidth = gWidth / levels.length; int segInterval = gHeight / 20; for (int i=0; i<levels.length; i++) { // calculate height of each set of boxes, // proportional to level float levPct = ((float)levels[i]) / 255.0f; // math is a little weird here; y axis has 0 at top, // but we have 0 at bottom of this graph int barHeight = (int) (levPct * maxHeight); // draw the bar as set of 0-20 rectangles int barCount = 0; for (int j=maxHeight; j > (maxHeight - barHeight); j-=segInterval) { switch (barCount) { case 20: case 19: case 18: g.setColor (Color.red); break; case 17: case 16: case 15: g.setColor (Color.yellow); break; default: g.setColor (Color.green); } g.fillRect (i * barWidth, j - segInterval, barWidth - 1, segInterval - 1); barCount++; } } } } catch (QTException qte) { qte.printStackTrace( ); } } } }
When run, this example provides the graphics-level display as shown in Figure 7-3.
Figure 7-3. Frequency bands displayed as a level meter
Image:QuickTime for Java: A Developer's Notebook I 7 tt204.png
What just happened?
This example sets up levels that, according to a demo in the native API, correspond to the same frequency bands metered by QuickTime Player:
int[ ] EQ_LEVELS = { 200, 400, 800, 1600, 3200, 6400, 12800, 21000 };
When the user opens a movie, the program finds the AudioMediaHandler of the first audio track and calls setSoundEqualizerBands() with these bands. Then it creates an instance of the LevelMeter inner class, along with a Swing Timer to repaint the level meter every 50 milliseconds.
When the repaint calls the meter's paint() method, it divides its width by the number of bands to figure out how wide each bar should be. The height takes a little more work: the returned levels are in the range 0 to 255, so the program calculates a "level percent" float by dividing by 255, then multiplying this by the height of the component. With the height and width of each frequency band, the component can draw a set of boxes, up to that height, to represent the band's level.
What about...
...the values passed in for frequencies and the number that can be passed in? Unfortunately, with no documentation for this feature, there's only trial-and-error to fall back on. One thing I've found is that you can have only 10 bands—you can pass in as many frequencies as you want, and you'll get that many back in the int array returned by getSoundLevelMeterLevels( ), but only the first 10 will have nonzero values.
Building an Audio Track from Raw Samples
As I've said many times before: movies have tracks, tracks have media, media have samples. But what are these samples? In the case of sound, they indicate how much voltage should be applied to a speaker at an instant of time. By itself, a sample is meaningless, but as a speaker is repeatedly excited and relaxed, it creates waves of sound that move through the air and can be picked up by the ear.
So, why would you want to do this? One plausible scenario is that you have code that generates this uncompressed pulse code modulation (PCM) data, like a decoder for some format that QuickTime doesn't support. By writing the raw samples to an empty movie, you can expose it to QuickTime and then play it, export it to QT-supported formats, and use other QuickTime-related functions.
How do I do that?
SoundMedia inherits an addSample( ) method from the Media class. This can be used to pack samples into a Media, which in turn can be added to a Track, which then can be added to a Movie.
But what values do you provide to create an audible sound? The example shown in Example 7-5 creates a square wave at a constant frequency. A square wave is one in which the voltage is either fully on or completely off. To create a 1000-hertz (Hz) tone, you write samples to alternate between full voltage and zero voltage, 1,000 times per second. Figure 7-4 shows a graph of sample values for the square wave.
Run this example with ant run-ch07-audiosamplebuilder.
Figure 7-4. Square wave
Image:QuickTime for Java: A Developer's Notebook I 7 tt206.png
Example 7-5. Building audio media by adding samples
package com.oreilly.qtjnotebook.ch07; import quicktime.*; import quicktime.std.*; import quicktime.std.movies.*; import quicktime.std.movies.media.*; import quicktime.io.*; import quicktime.util.*; import com.oreilly.qtjnotebook.ch01.QTSessionCheck; public class AudioSampleBuilder extends Object { static final int SAMPLING = 44100; static final byte[ ] ONE_SECOND_SAMPLE = new byte [SAMPLING * 2]; static final int FREQUENCY = 262; public static void main (String[ ] args) { try { QTSessionCheck.check( ); QTFile movFile = new QTFile (new java.io.File("buildaudio.mov")); Movie movie = Movie.createMovieFile(movFile, StdQTConstants.kMoviePlayer, StdQTConstants.createMovieFileDeleteCurFile | StdQTConstants.createMovieFileDontCreateResFile); System.out.println ("Created Movie"); // create an empty audio track int timeScale = SAMPLING; // 44100 units per second Track soundTrack = movie.addTrack (0, 0, 1); System.out.println ("Added empty Track"); // create media for this track Media soundMedia = new SoundMedia (soundTrack, timeScale); System.out.println ("Created Media"); // add samples soundMedia.beginEdits( ); // see native docs for other format consts int format = QTUtils.toOSType ("NONE"); SoundDescription soundDesc = new SoundDescription(format); System.out.println ("Created SoundDescription"); soundDesc.setNumberOfChannels(1); soundDesc.setSampleSize(16); soundDesc.setSampleRate(SAMPLING); for (int i=0; i<5; i++) { // build the one-second sample QTHandle mediaHandle = buildOneSecondSample (i); soundMedia.addSample(mediaHandle, // QTHandleRef data, 0, // int dataOffset, mediaHandle.getSize( ), // int dataSize, 1, // int durationPerSample, soundDesc, // SampleDescription sampleDesc, SAMPLING, // int numberOfSamples, 0 // int sampleFlags) ); } // finish editing and insert media into track soundMedia.endEdits( ); System.out.println ("Ended edits"); soundTrack.insertMedia (0, // trackStart 0, // mediaTime soundMedia.getDuration( ), // mediaDuration 1); // mediaRate System.out.println ("inserted media"); // save up System.out.println ("Saving..."); OpenMovieFile omf = OpenMovieFile.asWrite (movFile); movie.addResource (omf, StdQTConstants.movieInDataForkResID, movFile.getName( )); System.out.println ("Done"); System.exit(0); } catch (QTException qte) { qte.printStackTrace( ); } } // main /** Fill ONE_SECOND_SAMPLE with two-byte samples, according to some scheme (like square wave, sine wave, etc.) then wrap with QTHandle */ public static QTHandle buildOneSecondSample (int inTime) throws QTException { // convert inTime to sample count (i.e., how many samples // past 0 we are) int wavelengthInSamples = SAMPLING / FREQUENCY; int halfWavelength = wavelengthInSamples / 2; int sample = inTime * SAMPLING; for (int i=0; i<SAMPLING*2; i+=2) { int offset = sample % wavelengthInSamples; // square wave - bytes are either 7fff or 0000 if (offset < halfWavelength) { ONE_SECOND_SAMPLE[i] = (byte) 0x7f; ONE_SECOND_SAMPLE[i+1] = (byte) 0xff; } else { ONE_SECOND_SAMPLE[i] = (byte) 0x00; ONE_SECOND_SAMPLE[i+1] = (byte) 0x00; } sample ++; } return new QTHandle (ONE_SECOND_SAMPLE); } }
Run this example with ant-ch07-audiosamplebuilder.
When run, this creates a five-second, audio-only movie file called buildaudio.mov. Open it in QuickTime Player or an equivalent (like the level meter player from the previous lab) to listen to the file.
Square waves are not easy on the ears. Turn down your speakers or headphones before you play this file.
What just happened?
Two constants at the beginning define important values. SAMPLING is the number of samples to be played every second. This example uses 44,100, which is the same as on a compact disc.
An important consideration for choosing a sampling frequency is the Nyquist-Shannon Sampling Theorem , which states that you need to sample at a rate double the highest frequency you want to capture. So, a sampling rate of 44,100 will properly reproduce frequencies less than 22,050 Hz. Given that human hearing typically ranges from 20 to 20,000 Hz, this effectively covers any humanly audible sound.
The FREQUENCY constant is the frequency of the sound wave to be produced. This example uses 262, which is approximately middle C on a piano.
To be more precise, middle C is approximately 261.625565 Hz.
To start writing samples, you need a SoundMedia object and a place to put your data. The example does this by:
- Creating a new Movie with createMovieFile( ) . Using this approach—instead of the no-arg Movie constructor—has the benefit of indicating where the samples are to be stored.
- Adding a new track to the movie, with no size, and a volume of 1 (full volume).
- Creating a new SoundMedia object. This constructor takes the track the media is associated with and a time scale for the media. In this case, 44,100 is a good choice because then each sample will correspond to one unit of the media's time scale. You could use higher values, but not lower ones, because a sample can't be expressed as less than one unit of the time scale.
- Calling beginEdits() on the media to indicate that the program will be making changes to the media.
Most of the rest of the code in the example has to do with setting up the call to addSample() , which is somewhat tricky. The method takes seven arguments:
- A QTHandleRef that points to the data to be added
- An offset into the handle
- The size of the data to be inserted
- The durationPerSample—how much time the sample represents, in the media's time scale
- A SampleDescription to describe the data in the handle
- The number of samples being added with this call
- Behavior flags
See Chapter 2 for more on time scales.
The first thing to do is to create a SampleDescription that can be reused on every call to addSample( ). To do this, create a SoundDescription object. The constructor takes a "format" FOUR_CHAR_CODE, which for uncompressed data is "NONE".
Other valid formats are defined in "QuickTime API Reference: S0und Formats" on Apple's developer site.
Next, you customize the SampleDescription object with some setter methods to indicate the number of channels, the size of each sample in bits, and the sampling frequency. For this example, I used one channel and 16 bits per sample. This means that when the byte array with the data is parsed, QuickTime will take the data 2 bytes at a time and assume it to be a 16-bit value. If there were two channels, there would be 4 bytes per sample: two 2-byte samples, one for each speaker.
You might expect that you'd then simply loop through, adding one sample at a time to the Media and creating one second of audio every 44,100 times through the loop. Although this is legal, the resulting file won't actually play. The problem is that QuickTime wants you to put audio data in larger and more manageable chunks. To quote from the native AddMediaSample docs:
You should set the value of this parameter so that the resulting sample size represents a reasonable compromise between total data retrieval time and the overhead associated with input and output. [ . . . ] For a sound media, choose a number of samples that corresponds to between 0.5 and 1.0 seconds of sound. In general, you should not create groups of sound samples that are less than 2 KB in size or greater than 15 KB.
So, in this example, I've created a byte array to represent one second of samples, which is filled in a method called buildOneSecondSample( ). This method figures out where the waveform is at each sample time and writes either 0x7fff or 0x0000 to each 2-byte pair. Because the "NONE" format assumes signed shorts, 0x7fff is the maximum, not 0xffff.
With the byte array filled, you can wrap it with a QTHandle, and you're ready to call addSample( ) . The call looks like this:
soundMedia.addSample(mediaHandle, // QTHandleRef data, 0, // int dataOffset, mediaHandle.getSize( ), // int dataSize, 1, // int durationPerSample, soundDesc, // SampleDescription sampleDesc, SAMPLING, // int numberOfSamples, 0 // int sampleFlags) );
Once you're done adding samples, it's cleanup time. You use endEdits() to tell the Media you're done editing, then actually put the media into the track with Track.insertMedia() , which tells the track what parts of the media object to use and where it goes relative to the track's time scale. Finally, the movie is written to disk with the curiously named Movie.addResource( ) .
What about...
...some other kind of wave because hearing that square wave is really unpleasant? A sine wave offers a nicer alternative, because it is much more like a naturally occurring sound. Figure 7-5 shows what its waveform looks like.
Figure 7-5. Sine wave
Image:QuickTime for Java: A Developer's Notebook I 7 tt208.png
The following alternate implementation of buildOneSecondSample( ) produces a sine wave—I didn't want to put it in the preceding example, which is already complicated enough without having to use trigonometry, like this does:
public static QTHandle buildOneSecondSample (int inTime) throws QTException { // convert inTime to sample count (i.e., how many samples // past 0 we are) int wavelengthInSamples = SAMPLING / FREQUENCY; int sample = inTime * SAMPLING; double twoPi = 2 * Math.PI; double radiansPerSample = twoPi / wavelengthInSamples; // each sample should be one n/th of twoPi for (int i=0; i<SAMPLING*2; i+=2) { int offset = sample % wavelengthInSamples; // sine wave double angle = offset * radiansPerSample; double sine = Math.sin (angle); // sines are -1<x<1. we want from 0 to 0x7fff double heightD = (sine + 1) * (0x7fff / 2); // cast to int and fix endianness if on little (x86, etc.) short height = (short) heightD; // pack this into array as two bytes ONE_SECOND_SAMPLE [i] = (byte) ((height & 0xff00) >> 8); ONE_SECOND_SAMPLE [i+1] = (byte) (height & 0xff); sample ++; } return new QTHandle (ONE_SECOND_SAMPLE); }
This implementation calculates the width of a wavelength in samples, then divides that into equal segments of a 2 radius for its calls to Math.sin( ) . The returned values are then translated so that instead of running from -1.0 to 1.0, they run from 0 to 0x7fff.
It's also worth noting that the middle C sine wave is pretty hard to hear over basic computer speakers. You might have better results with a frequency of 440, which is the A above middle C.


text:
Click here if you are unable to view this video.
3 Tips on Being a Better Parent
Each of your children is a match made in Heaven.
Click here if you are unable to view this video.
Featured at Aish.com:
Give Tzedakah! Help Aish.com create inspiring
articles, videos and blogs featuring timeless Jewish wisdom.
Visitor Comments: 16
(14) Baruch Kastner, May 5, 2013 8:51 PM
The soul itself does the choosing
(13) Anonymous, May 2, 2013 3:08 PM
Loved this - words to remember when tempers rise
This really touched me - it will be a real mind-changer to remember the main messsage, that my children were chosen specifically for me, and me for them, when we are frustrated with each other. I am an eldest child myself, and I take the comment about the eldest being the experiment semi-humorously, as I am sure it was intended. My mother always said "you should have your first child second". The truth is we don't know how to parent until we do it the first time and each new stage is like a new first time, so we need to do our best, with the best intentions, and hope for the best.
(12) Esther G. SpielmanPollak, May 1, 2013 3:25 AM
Lori, my favorite line, you keep getting better at it.
(11) Anonymous, April 30, 2013 7:51 PM
What do you mean?
(10) Mirna, April 30, 2013 7:13 PM
I have allways enjoyed your videos, they all have been such a blessing to me. But, this one, I have to say, has been the most impactful one! I couldnt stop crying! I am raising a grandson,and I have ask The Lord so many times, if it is His Will that I am raising this child(he has so many behavior problems.Your words"God gave you this child"send shivers all threw my body,and I couldnt stop crying. Thank you, so much. God bless you.


text:
The Outlaws opened up the team's home schedule beating rival Long
Island 13-10 at INVESCO FIELD.
DENVER — The Denver Outlaws hosted the Long Island Lizards tonight in
their 2010 home opener, beating them 13-10 despite having Head Coach
Brian Reese suspended for his ejection in the Outlaws season opener
versus the Boston Cannons May 15, 2010. Denver took advantage of
under-experienced Lizards Goalie Andrew Adams, as Outlaws Midfielder
Max Seibald stole the show with a hat trick and three assists to win
the Bud Light Game MVP. Denver Attacker Matt Brown added three goals
of his own, while Lizards Midfielder Stephen Berger chipped in his own
hat trick.
"Obviously playing in front of a big crowd, our home opener, it's
important to get a win, especially since we dropped to the Boston
Cannons last week," Acting Head Coach Tom Slate said. "We wanted to
go 1-1. You always start out wanting to play four quarters and we
probably played two or three, still not there. We got the 'W' and it's
time to celebrate a little bit."
Berger scored the opening goal of the Outlaws home opener 59 seconds
in the first quarter but the lead was eliminated as Seibald scored an
unassisted goal approximately three-and-a-half minutes later. Lizards
Attackers Tim Goettelman and Matt Danowski netted two quick goals,
which were followed shortly after by an unassisted goal from Lizards
Midfielder John Glynn to pull Long Island ahead 4-1.
The two teams renewed their rivalry with unsportsmanlike conduct
penalties on both sides at the 7:20 mark of the first, before Outlaws
Midfielder Casey Cittadino put a goal past the inexperienced Adams to
cut the Long Island lead in half, ending the first quarter with Denver
down 4-2.
"I'm kind of new to this rivalry because I wasn't here last year,"
Slate said. "Whenever you play Long Island they're tough guys. You
just don't want to get caught in their game. Play our game and if they
get some penalties then you just bury them on man up and score."
Attacker Drew Westervelt drew the 'Laws within one with a power play
goal, scoring 42 seconds into the second quarter and Attacker Joey
Murray knotted the game up three minutes later off a goal assisted by
Westervelt. Seibald dished out his second assist of the half, as
Midfielder Brian Langtry nailed a two-point goal. An eight-and-a-half
minute possession battle ensued, before Berger scored back-to-back
goals to tie the game at six going into halftime.
Seibald secured a home-opening hat trick, starting the third quarter
with an unassisted goal almost three minutes into the quarter which
was followed by a goal from Attacker Brendan Mundorf. Lizards
Midfielder Anthony Muscarella stalled the Outlaws scoring run but
couldn't stop it, as Denver rattled off four straight goals thanks to
Brown, Mundorf and Seibald.
The Lizards temporarily stopped the bleeding with a goal from
Midfielder Chris Fiore, just over nine minutes into the quarter, prior
to a rivalry-fueled scrum in front of the Long Island goal. Brown
scored his third goal of the game, his first hat trick of the season,
to put the Lizards in a 13-8 hole after three quarters.
Long Island kicked off the scoring five seconds into the fourth
quarter, with unassisted goals from Midfielder Greg Gurenlian and
Attacker Zach Greer to bring the Lizards within three. The Outlaws
defense held off the Lizards attack for the remaining duration of the
game, ending the game with a final score of 13-10.
With 11 saves, Schwartzman has started off the season with
back-to-back double digit save performances and matched Adams save
total of 11 in tonight's game.
The Outlaws home-stand continues May 29 as Denver will host Canada's
own Toronto Nationals at INVESCO Field. For more stats from the
Outlaws-Lizards game click here:


text:
Using The Encyclopedia ProtocolsAugust 4th, 2009 , by admin
QUESTION: My question concerns the wonderful encyclopedia. I looked up hayfever for my husband and there are 2 protocols:allergy and immune boosting I believe. I cannot find anywhere whether he should complete one protocol after the other or if he can take the supplements for both protocols at the same time. Many thanks. I would also like to day that I love the Cook Right 4 Your Type book- the recipes are fabulous and both my husband and I, different blood groups (I'm O, he's A) can find wonderful recipes to suit us both. Many thanks for this change in our diet!
ANSWER: The Encyclopedia was designed to offer guidance to a variety of possible health conditions, by 'mixing and matching' combinations of protocols to specific health problems. In general the first protocol listed under your type is premiere and the first substance listed under that protocol is the preferred starting point. Thus, it may be possible that the first compound listed in the Allergy Protocol would do the job and anything else would be overkill. However, if the problem is deep-seated or intractable, it may be necessary to use several protocols and quite a few substances.


text:
Linked by David Adams on Thu 29th Sep 2011 23:47 UTC, submitted by lucas_maximus
Linux is struggling on the desktop because it only has a small number of "great" apps, according to the Gnome co-creator. Miguel de Icaza, co-creator of the Gnome desktop, told tech journalist Tim Anderson at the recent Windows 8 Build conference "When you count how many great desktop apps there are on Linux, you can probably name 10," de Icaza said, according to a post on Anderson's IT Writing blog. "You work really hard, you can probably name 20. We've managed to p*** off developers every step of the way, breaking APIs all the time."
Permalink for comment 491364
To read all comments associated with this story, please click here.
To read all comments associated with this story, please click here.
RE[4]: He's right
by lemur2 on Fri 30th Sep 2011 10:51 UTC in reply to "RE[3]: He's right"
I'm asking, because I'm not a Blender user. I've never ever even seen it.
Blender is a pretty powerful 3D graphics app.
"Blender is the free open source 3D content creation suite, available for all major operating systems under the GNU General Public License."
Here are some a relatively recent samples of its output:
Edited 2011-09-30 10:56 UTC


text:
Contact Us
Why not try and find your answer in our easy to use Frequently Asked Questions section.
If you can't find the answer to your question you can contact us by clicking on the links below:
Want to be informed when future map updates are available? Contact Customer Support.


text:
– Bob Costas talked about his 2001 HBO interview with Vince McMahon in a new interview with Piers Morgan on CNN. In the video below, Costas reads a statement from McMahon 12 years later:
– Former WWE star Derrick Bateman, who was cut on Friday, can be reached for bookings at firstname.lastname@example.com.
– Everything regarding CM Punk's return to action is being kept quiet within WWE. A lot depends on how well his knee heals up but it will be interesting to see if he returns on Monday's RAW from Canada because that was the most recent date officials wanted him back. Punk would need to return soon if he's going to have a match on the June 16th Payback pay-per-view, as planned before.
Partial source: Wrestling Observer Newsletter


text:
Kutztown University and other state universities will see a 3 percent increase in tuition this fall.
The Board of Governors of the Pennsylvania State System of Higher Education approved on Tuesday, July 9, a 3 percent tuition increase for the 2013-14 academic year.
PASSHE reports in a release that the increase �virtually ensures PASSHE will remain the lowest-cost option among all four-year colleges and universities in the Commonwealth.�
The increase breaks down to an additional $97 per semester, or $197 per year.
PASSHE also reports that the 3 percent increase means the total cost of attendance at a PASSHE university � including tuition, fees, room and board � likely will remain below the national average among all public colleges and universities in the United States, and significantly below the average in the middle states region of Delaware, Maryland, New Jersey, New York, Pennsylvania and Washington, D.C.
What is the reason for the increase?
Karen Ball of PASSHE Relations told The Patriot that PASSHE receives approximately 25 percent of its funding for the universities through the state budget. The remaining revenues are provided by students and their families through tuition and fees.
�For the past three years, the amount of funding from the state has remained flat while the system and its universities have experienced increases in several areas, the highest of which are in two areas over which we have little or no control � pension and health care costs,� said Ball. �While state funding has remained flat, the board is very aware of the need to limit tuition increases as much as possible to keep our institutions the most affordable in the Commonwealth. While there have been modest increases in tuition, the revenues have not fully covered the increases in our operating costs.�
Board of Governors Chairman Guido M. Pichini said in a release, �It is very important to our students and their families that we keep our tuition affordable. With this action today, PASSHE universities will continue to provide outstanding value, combining high-quality educational opportunities with the most affordable cost available.�
Ball said the leadership at PASSHE, including the Board of Governors and the university presidents, �aggressively have been managing the difficult financial pressures which we have experienced in the past few years.�
�PASSHE is not different from most of the other public higher education systems throughout the country in this challenge,� she said.
When asked about the response from campus communities, Ball said each of their campuses is different and is responding to their particular needs.
Any concerns about the increase affecting enrollment?
�Because almost 90 percent of the students at our universities are Pennsylvania residents, the continuing decrease in the number of high school graduates in most regions of the Commonwealth is the single biggest factor impacting our enrollments,� said Ball.
Her advice for students who find the increase too much is to meet with their student financial aid office and the leadership on campus to make sure they are getting all the help available.
�We want our students to stay with us and to graduate with a degree that will help them establish their careers and adult lives,� said Ball.
�The PASSHE universities continue to be the best value in the Commonwealth for an affordable, quality education. The leadership of the System is committed to retaining these priorities,� said Ball.
The new annual tuition rate for full-time, resident undergraduate students attending any of the 14 PASSHE universities, including Kutztown University, beginning this fall will be $3,311 per semester, or $6,622 for the full academic year. Nearly 90 percent of PASSHE students are Pennsylvania residents and about 85 percent attend full time, according to a release.
PASSHE will receive $412.8 million in state funding this year, the same amount received in 2012-13, which will cover about one-fourth of the operating costs of the 14 universities. Operating costs are expected to increase because of salaries, pension contributions, healthcare and utilities. Some of those increases PASSHE anticipates to be offset by a voluntary retirement incentive program offered to PASSHE faculty and coaches earlier this year, according to a release.
Other cost-reduction efforts implemented over the last 10 years have resulted in overall budget reductions of approximately $285 million, according to PASSHE who writes in a release that those reductions have helped keep annual tuition increases at or below the rate of inflation in most years since the cost-cutting efforts began.
Even with the tuition increase, KU still faces a budget deficit.
�With a 3 percent tuition increase, KU faces a $9.9 million deficit. We will not have to cut any programs and there will be no layoffs,� said David Johnson of Kutztown University Relations.
To cover the deficit, �$3.9 million will come from project cancellations such as Keystone Field upgrades and Poplar House renovations, $6 million will come from cutbacks on operational expenses,� Johnson said.
The PASSHE Board also approved new tuition rates for resident graduate students and all nonresident students. The resident graduate tuition rate in 2013-14 will be $442 per credit, an increase of $13. Nonresident graduate tuition will increase by $19 per credit to $663. Full-time, undergraduate tuition for nonresident students will range from $9,934 to $16,556, depending on a variety of factors, including the university and program in which a student enrolls. All of the increases average approximately 3 percent.
The tuition technology fee will increase by $5 to $184 per semester � $368 for the full academic year � for full-time resident undergraduate students and by $8 to $279 a semester � or $558 a year � for full-time nonresident undergraduate students. All funds raised by the technology fee are used to directly benefit student learning. Universities have used the funds to install new computer labs and to design multimedia classrooms, among other projects.
The state-owned universities are Bloomsburg, California, Cheyney, Clarion, East Stroudsburg, Edinboro, Indiana, Kutztown, Lock Haven, Mansfield, Millersville, Shippensburg, Slippery Rock and West Chester Universities of Pennsylvania. PASSHE also operates branch campuses in Clearfield, Freeport, Oil City and Punxsutawney and several regional centers, including the Dixon University Center in Harrisburg and the Philadelphia Multi University Center in Philadelphia.
Information from the Kutztown Area Patriot News, www.berksmontnews.com


text:
Angie Steadman is a former meth addict who has turned her life around.
"Once I tried it, and got into it then it was very addictive. I was addicted immediately," Steadman said.
Users said the drug is easy to get and easy to make. They make meth by using pseudoephedrine, which is a decongestant found in cold medicine.
"I got caught up in a pretty heavy, heavy duty situation as a result of some of those things. As a result, I was involved with people that were involved with meth manufacture," Steadman said.
"I was doing things I would have never done in my right mind," Steadman said. "Then it got to the point where you could only buy two at a time."
And now to try and crack down on meth makers, Upstate Sen. Mike Fair, R-Greenville, introduced a bill that would make all medicine with pseudoephedrine prescription only.
"It isn't the product, it's the chemicals the products combined with that can be extrapolated and used," Fair said.
Back in 2010, lawmakers passed a bill that put limits on how much pseudoephedrine can be bought by one person. Customers must show ID and their information is put into a database.
"According to leadership and law enforcement in South Carolina, it isn't working and we still have the problem," Fair said.
Fair said meth causes crime rates to go up.
"Anything that's illegal is right there with the drug addiction or the drug usage. The cleanup is very expensive. It costs the state approximately a million dollars a year," Fair said.
He said most importantly the drug ruins communities.
"The expense for the lives of families is the greatest expense," Fair said.
Right now, many pharmacists use the National Precursors Log Exchange System, or NPLEX.
"The thing that you cannot legislate is morality," Ken Rogers said.
Rogers owns Stone Plaza Pharmacy in Greenville and uses NPLEX at his store.
"It goes over all the different products that contain pseudoephedrine," Rogers said. "It just lets us know whether it's safe to sell or OK to sell that particular product to that particular patient."
Rogers said not all pharmacists have access to the Internet and don't use the system.
"So, they don't actually do that or maybe they track their sales at the end of the week," Rogers said.
Statistics show meth users get around the system by shop hopping and using fake IDs. The report shows meth lab incidents increased by 65 percent last year in the state. However, Carlos Gutierrez, senior director of State Government Affairs with the Consumer Health Care Products Association, said the NPLEX system blocks illegal sales each month.
"We are adamantly opposed to any attempt at changing the status of over the counter medicine," Gutierrez.
He also said customers don't want the added expense of a prescription.
"To the consumer, the costs are taking time off from work, going to the doctor, paying a co-pay for that doctor, then going to the pharmacy and paying a co-pay for that," Gutierrez.
Copyright 2013 FOX Carolina (Meredith Corporation). All rights reserved.
Online Public Inspection File
All content © 2018, WFSB; Hartford, CT. (A Meredith Corporation Station) . All Rights Reserved.
For more information on this site, please read our Privacy Policy, and Terms of Service, and Ad Choices.