text:
Q: fxml objects cannot be static I am going to run a function in main class from another class. so its methods must be static so consequently all the variables inside it should be static too. it this method i am modifying chart objected that is imported from FXML created by scenebuilder. when i add chart objects as static objects, the program crashes with the following trace error.
what is the problem: this is what i am done for this:
@FXML
private Menu comPortsMenu;
@FXML
private   LineChart<Number,Number> chart1;
@FXML
private  LineChart<Number,Number> chart2;
@FXML
private  LineChart<Number,Number> chart3;
@FXML
private  LineChart<Number,Number> chart4;
public static    ArrayList<XYChart.Series<Number, Number>> series;

This is the secound class that runs a methode from firt one
 private void applyConfig(ActionEvent actionEvent) throws IOException {
   int x1=fullNameTotelemID.get(boxMap.get(chartOption1.getSelectionModel().getSelectedIndex()));
   int x2=fullNameTotelemID.get(boxMap.get(chartOption2.getSelectionModel().getSelectedIndex()));
   int x3=fullNameTotelemID.get(boxMap.get(chartOption3.getSelectionModel().getSelectedIndex()));
   int x4=fullNameTotelemID.get(boxMap.get(chartOption4.getSelectionModel().getSelectedIndex()));
   FXMLDocumentController.desiredCharts.set(0, x1);
   FXMLDocumentController.desiredCharts.set(0, x2);
   FXMLDocumentController.desiredCharts.set(0, x3);
   FXMLDocumentController.desiredCharts.set(0, x4);
   FXMLDocumentController.loadCharts();
    closeButtonAction(actionEvent);
}

and this is the static methode in the main class
 public static void loadCharts(){
     chart1.getData().removeAll();
            chart2.getData().removeAll();
            chart3.getData().removeAll();
            chart4.getData().removeAll();
            chart1.getData().add(series.get(desiredCharts.get(0)));
            chart2.getData().add(series.get(desiredCharts.get(1)));
            chart3.getData().add(series.get(desiredCharts.get(2)));
            chart4.getData().add(series.get(desiredCharts.get(3)));
            chart1.setTitle(chartOptions.get(desiredCharts.get(0)));
    chart2.setTitle(chartOptions.get(desiredCharts.get(1)));
    chart3.setTitle(chartOptions.get(desiredCharts.get(2)));
    chart4.setTitle(chartOptions.get(desiredCharts.get(3)));
}

this is the trace error:
 Executing /Users/apple/NetBeansProjects/JavaFXApplication6/dist/run1812641360/JavaFXApplication6.jar using platform /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException:
     file:/Users/apple/NetBeansProjects/JavaFXApplication6/dist/run1812641360/JavaFXApplication6.jar!/javafxapplication6/FXMLDocument.fxml

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at javafxapplication6.JavaFXApplication6.start(JavaFXApplication6.java:22)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Caused by: java.lang.NullPointerException
at javafxapplication6.FXMLDocumentController.initialize(FXMLDocumentController.java:441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
... 14 more
Exception running application javafxapplication6.JavaFXApplication6
Java Result: 1

redpajama_set_name: RedPajamaStackExchange


One of the most tedious aspects of migrating a website is ensuring that the internal hyperlinks are all amended so that they point to the correct internal content, rather than remaining linked to the old source website.
If you have a significant number of pages to work through, it can take a very long time to ensure you've tracked down every last link.
Visitors to your website will quickly become frustrated by broken links. Search engines also take a dim view of them.
Fortunately, the WP Site Importer plugin has a feature which will automatically correct your hyperlinks, which means that you save time and don't have to deal with the frustration of correcting them by hand.
There are no configuration options necessary for this feature.
Simply select the Update Links menu option. A summary of all hyperlinks updated and any that are skipped will be displayed.
You can re-run this feature at any time. Where links have already been updated, this will be highlighted on the summary results.


Facebook has suddenly become awash with the sepia-tinted, excessively-HD photos that more and more users are taking on their iPhones and Androids with Instagram.
Google had to do something.
Now it's snapped up a secret weapon in the social media battle to host photos: Nik Software, a Germany and San Diego-based software company that specializes in photo editing and is the parent of popular iOS photo editing app Snapseed.
Snapseed is a handy photo editor which offers similar filters to Instagram, and a lot more, including the ability to crop, sharpen, blur and play around with the specifics of lighting in a photo. The acquisition suggests that Google+ might be pitching itself as a home for more serious photo enthusiasts. While Facebook and Instagram typically compress photo sizes to save on server space, Google+ already offers high-resolution image uploads as well as photo editing features (such as sharpening or adding text) from within the social network.
News of the acquisition was first reported by The Verge, which points out that while Nik has created quite a few apps for photographers, it struck gold with Snapseed. The $4.99 app gained more than 9 million users during its first year on sale, and was named Apple's iPad App of the Year in 2011.
One reason we can presume Google wants to integrate Nik's technology into its social network: the acquisition was announced by the man behind Google+ himself, Vic Gundotra, on a Google+ post. "We want to help our users create photos they absolutely love, and in our experience Nik does this better than anyone," he wrote.
The same post also talked about the growth of Google+ users, saying the network now had more than 400 million signups, with 100 million of them "monthly active users."
Financial terms of the deal are undisclosed, though it's unlikely to be anywhere near the $1 billion Facebook paid for Instagram, which according to Mark Zuckerberg now has upwards of 100 million users. Nik released a short statement on its site, though, saying, "We've always aspired to share our passion for photography with everyone, and with Google's support we hope to be able to help many millions more people create awesome pictures."
It's unclear if Snapseed will retain its name as a standalone application, or if its editing technology will be folded into that other famous photo editor: Google's Picasa.


text:
<?php
namespace ApplicationTest\Service\Upload;

use Application\Application\Command\Options\CreateMemberCmdOptions;
use Application\Application\Service\AccountChart\Upload\DefaultAccountChartUpload;
use Application\Infrastructure\Persistence\Domain\Doctrine\ChartQueryRepositoryImpl;
use Doctrine\ORM\EntityManager;
use InventoryTest\Bootstrap;
use PHPUnit_Framework_TestCase;

class AccountChartUploadTest extends PHPUnit_Framework_TestCase
{

    protected $serviceManager;

    /**
     *
     * @var EntityManager $em;
     */
    protected $em;

    public function setUp()
    {}

    public function testOther()
    {
        try {

            $root = realpath(dirname(dirname(dirname(dirname(__FILE__)))));

            $doctrineEM = Bootstrap::getServiceManager()->get('doctrine.entitymanager.orm_default');

            $rep = new \Application\Infrastructure\Persistence\Domain\Doctrine\CompanyQueryRepositoryImpl($doctrineEM);
            $company = $rep->getById(1);
            $companyVO = $company->createValueObject();

            $rep = new ChartQueryRepositoryImpl($doctrineEM);
            $chart = $rep->getById(15);

            $rootEntity = $chart;
            $rootEntityId = 15;
            $rootEntityToken = null;
            $version = null;
            $userId = 39;

            $options = new CreateMemberCmdOptions($companyVO, $rootEntity, $rootEntityId, $rootEntityToken, $version, $userId, __METHOD__);

            $uploader = new DefaultAccountChartUpload();
            $uploader->setDoctrineEM($doctrineEM);

            $logger = Bootstrap::getServiceManager()->get('Applogger');
            $uploader->setLogger($logger);

            $file = $root . "/ApplicationTest/Data/coa.xlsx";
            echo $file;
            $uploader->doUploading($companyVO, $rootEntity, $file, $options);
        } catch (\Exception $e) {
            var_dump($e->getMessage());
        }
    }
}

redpajama_set_name: RedPajamaGithub


The deputy head of the CPRF Yury Afonin has arrived for "Night of elections" in Moscow. The correspondent of Politika segodnya news Agency has talked to Afonin about party, results of elections and Navalny. — [The leader of the Communists of Russia Maxim] Suraykin has told that his party is more left, than yours. And how you consider? — No, it not so. We — the only really opposition party. It is obvious as the authorities in power see competitors only in us and in every possible way resists. It is the real fight. — Whether successfully the party estimates results of elections? — Yes, we are happy, results of regions testify to it. All have got used that only United Russia can be in the lead. Now it not so. — How will your only successful opposition party resist to pension reform? — We don't take meetings [blogger Alexey] of Navalny into account, and here our electorate it is valid people of pre-retirement category who understand about what the speech and are ready to fight. — I will continue a subject of meetings. How estimate today's action of Navalny? — He causes on streets of children, they don't understand why the authorities leave to resist. It is more leisure, than a protest. Navalny doesn't offer concrete steps on change of the country and the legislation. The CPRF possesses capital asset which the working people from 35 to 55 years enter. They the engine of production of the country, they care for the future and think of welfare of the families. Therefore to compare there is no sense. The action has failed. Children, but not pensioners have gone outside. Navalny uses technical means of manipulation, he has got into social networks where it is easier to manipulate teenagers and speaks their language, pursuing own to nobody clear aims. — What will you tell about a situation with meetings of the CPRF in a red belt of the country? — The indicator was lower because all were at work, and it is less pensioners, than people of pre-retirement category whom reform will really affect in the nearest future. — Well, and to pensioners as are ready to help to fight against pension reform? They don't trust Navalny, there are as an alternative only you. — This delusion that our asset only pensioners, we have a large increase of youth and persons from 30 to 50 years. We also organize actions, only legal.


text:
Gerald Leong
Gerald specialises in cross-border disputes and international arbitration.
gerald.leong@hsf.com
Gerald obtained his bachelor's degree in law from the National University of Singapore and his master's degree in law from Boston University. He is admitted to practice in Singapore and New York. He speaks English and Mandarin Chinese. He serves on the committee of the Young Members Group of the Chartered Institute of Arbitrators for the Singapore branch.
Gerald specialises in mitigating, managing and resolving complex cross-border commercial disputes. He acts for clients in international arbitration proceedings, helps manage related proceedings and advises them on dispute resolution strategies.
His experience spans a broad range of sectors including projects, construction, telecommunications, commodities and regions including North and Southeast Asia, Australia, and the Middle East.
Gerald's experience includes:
acting for the subsidiary of a multinational construction company in a US$300 million Singapore-seated SIAC arbitration concerning a power plant project in India.
acting for an Asian telecommunications company in a Singapore-seated SIAC arbitration against a Middle East company in a joint-venture-type dispute which resulted in dismissal of the opponent's approximate US$32 million claim.
acting for a major Korean construction company against a Thai bank in an ICC arbitration concerning performance bonds.
advising a leading Asian trading house against a commodities trading company in insolvency proceedings before the High Court of Singapore.
serving as tribunal secretary in a Singapore-seated SIAC arbitration involving an dispute between Japanese and Filipino parties.

redpajama_set_name: RedPajamaCommonCrawl


text:
Home Accessibility Inclusion, sustainability and decolonization: Ben Barry's fashion legacy
AccessibilityArts & LifeBeautyCareerCommunity NewsEducationFashionFeaturesNewsOn CampusStudentsTop stories
Inclusion, sustainability and decolonization: Ben Barry's fashion legacy
by Lauren Knowles January 29, 2021
written by Lauren Knowles January 29, 2021
After years of teaching, Barry says he feels that he's the one who's learned a lot
After nearly nine years, Ben Barry will leave behind a legacy of fostering inclusivity at the core of fashion education at Ryerson University. (Courtesy Ben Barry/Photo by Jaclyn Locke)
The man responsible for spearheading inclusivity at Ryerson's fashion school will soon be New York City-bound. Ben Barry has been appointed fashion school dean at Parsons School of Design, according to an announcement from The New School. Here is a look at the legacy he leaves behind.
When Barry began his role as an assistant professor of equity, diversity and inclusion at Ryerson University in August 2012, he said the conversations around inclusivity in the fashion industry were just beginning.
At the time, discussions were heavily focused on the inclusion of diverse models, he said, and Ryerson was one of the first fashion schools to pick up on that debate. In fact, the university had recently hosted a panel discussion about fashion diversity which Barry moderated and was covered in Global News.
"Looking specifically at models on the runway, in magazines, seeing who was included and who wasn't, we were really beginning to challenge those representations," Barry said.
Barry, now the chair of Ryerson fashion until July and associate professor of equity, diversity and inclusion, said understandings of the inclusion margin in fashion were narrow. However, Ryerson's role in fostering inclusivity was evident in the fact that a position such as the one he took on had even existed.
Though expanding the need for diversity in modelling was a good starting point, the conversation of systemic change in the fashion industry became central to Barry's teaching.
"We were having conversations around equity and inclusion that were focused on specific leverage points in the fashion system, but were not looking at how all of these points were integrated and entangled to produce a system that was inherently unjust," Barry said.
As Barry began teaching fashion concepts and theory (now fashion theory) in 2013, a paradigm shift in Ryerson's foundation of fashion education occurred.
The course disrupted the way in which fashion was taught by recentring the perspectives of western theorists and designers who had cultivated thin, ableist ideals of what was considered the "fashionable" body, continuously upholding these standards rather than critiquing and redefining them, said Barry.
Barry was able to reimagine the curriculum and exceed the limits of what fashion could be.
"Every year it got deeper in terms of the ways in which justice was being integrated," he said. "I thought we should have sections on fat fashion, focus on Indigenous world views and fashion, but also integrate queer fashion and have deeper explorations around gender."
Covering a multitude of important aspects that were once missing from fashion studies, the fashion theory class was, and still is, mandatory for first-year fashion students.
"I thought because it was a mandatory class that it would hopefully begin to develop a framework that could then be further explored both in theory and studio classes," said Barry.
Reflecting on nearly nine years at Ryerson, many of Barry's highlights were teaching and working with students who wanted to use class projects to disrupt existing fashion systems, he said.
Barry fondly recalls DARE Magazine, a 2013 senior capstone project on plus-sized fashion founded by former student Diana Di Poce. He also warmly reminisced about working with students to create fashion shows that weren't about selling clothes, but communicating messages around equity and social justice instead.
Barry was also able to take on his own project, Refashioning Masculinity, to challenge dominant notions of masculinity in fashion, and continued breaking the mould with his research program.
However, the crowning glory among many golden moments during Barry's time at Ryerson was his appointment as chair of the school of fashion in 2018, he said.
One of the first things Barry did with his new position was to work with students, alumni, faculty and staff to develop three guiding principles of inclusion, sustainability and decolonization — the core ethos of the school of fashion.
These principles have since been deliberately integrated into everything the fashion faculty has done, said Barry, with a space in every course outline at the school of fashion explaining how the course will address them.
"Institutions like Ryerson are where you learn how to think and how to make fashion. It's where you learn how to develop your network. You take that knowledge and those skills to then make what fashion looks like and what fashion will become. Fashion education becomes truly essential," Barry said.
As chair, Barry has also been intentional about hiring and working to diversify who is in the front of fashion classrooms at Ryerson.
Kimberly Jenkins, assistant professor of fashion studies and creator of The Fashion and Race Database, was recently hired at Ryerson, having previously taught at both Parsons School of Design and Pratt Institute in New York City. Riley Kucheran, assistant professor of design leadership and Indigenous fashion researcher, was also brought on board.
"When we talk about inclusion it's not performative. It's not just a tagline on our website to say that we're inclusive, but it's an ethos we deeply want to integrate into everything we do," said Barry.
During Barry's time as chair, he was also proud to oversee the establishment of a Black Fashion Students Association at Ryerson by Caron Phinney and The Beading Circle by Ryerson alumna Justine Woods.
In Barry's final term at Ryerson, he has approved the introduction of several new courses to come, even after his departure from the school. From Indigenous craft practices to compassionate couture, these classes will explore concepts necessary to further enrich inclusive fashion education.
"I've learned through listening to people's experiences and honouring their experiences, making sure that is centred in my decision making."
He's spent years teaching, but in the end he says he feels like the person who has learned so much.
Barry will leave Ryerson with a sense of pride and optimism, knowing that change can happen right here in Toronto at the university, despite the fact that the city is not often considered a global leader in fashion, he said.
"The fact that I was considered at Parsons is a testament to the incredible leadership that the school of fashion at Ryerson is doing around equity and inclusion," Barry said.
"The fact that one of the biggest fashion schools in the world, in New York, looked at Ryerson and wanted much of the same transformation, energy and change that was happening because of what the community was doing is in many ways not just the legacy of me, but what the legacy of the school of fashion will be."
Lauren Knowles
https://ontherecordnews.ca/author/lauren-knowlesryerson-ca/
Beauty behind the mask
Black in Motion: highlighting Black women in film
Five Black Canadian fashion icons you should know about
Ben BarrydecolonizationdiversityequityfashioninclusivitymagazinesNew YorkRyerson fashionryerson school of fashionSchool of FashionStudentssustainabilityteachingToronto Metropolitan University
RyersonianTV: Weekly News Update for January 28, 2021
Students Struggle to Prepare for Classes Without Advance...
Canada's New Alcohol Guidelines — What Do They...


text:
The Center of the American West takes as its mission the creation of forums for the respectful exchange of ideas and perspectives in the pursuit of solutions to the region's difficulties. We at the Center believe that an understanding of the historical origins of the West's problems, an emphasis on the common interests of all parties, and a dose of good humor are essential to constructive public discussion.
Tim Oakes
Tim Oakes is Professor of Geography and Director of the Center for Asian Studies. He holds a PhD in Geography from the University of Washington, and a BA in East Asian Studies from Colby College. He has held visiting faculty appointments at the University of Iowa, the University of Technology Sydney, Guizhou Minzu University, Wageningen University, the National University of Singapore, and the University of Hong Kong. He is also a research affiliate with the Cornell University Contemporary China Initiative, and the Media Studies Department at the College of Media, Communication, and Information at CU Boulder. He is Associate Editor for Eurasian Geography and Economics, and serves on the Advisory Board for the Institute for Humanities and Social Sciences at the University of Hong Kong, and the Center for International Business Education Research at the University of Colorado Denver. His research focuses on social and cultural transformation in contemporary China and, in particular, the uses and reinventions of local culture as a resource for economic development and governance objectives. He has explored this theme in the contexts of ethnic tourism and craft commodity production, cultural heritage development, and urban redevelopment and planning. His recent research explores the development and use of leisure and consumption spaces in China's urban areas, as well as in urbanizing areas of rural China. Currently, he is working on urban planning and infrastructural urbanism in China's 'New Area' urban zones. Having grown up in Idaho, Tim has also maintained an interest in comparing the Western American experience with development and change in China's western regions.


text:
A San Simpliciano-bazilika (Piazza Crociate) egy milánói templom. Itt temették el Szent Simpliciust, aki Szent Ambrust váltotta a város püspökeinek sorában.

Története
A hagyományok szerint a bazilikát Szent Ambrus alapította a 4. században egy római temető területén. Névadóját, aki Szent Ambrust Milánó püspökeinek sorában felváltotta, és aki kibővítette a bazilikát, itt is temették el. A 12. században átépítették román stílusban, akkor épült fel harangtornya is, amelyet később aztán visszabontottak, mert zavarta a Castello Sforzesco ágyúinak lőtávolságát. A bazilikát 1789-ig a bencések birtokolták.

A legenda szerint a II. Frigyes német-római császár vezette csapatok felett 1176-ban Legnanóban aratott győzelem napján három galamb felröppent a templom egyik helyiségében, ahol három vértanú ereklyéit őrizték és a zászlórúdra szállt le. Ennek emlékére minden év május 29-én, a csata napján, a templom előtti téren galambokat engednek szabadon.

A háromhajós templom legértékesebb kincse egy 1515-ben készült Bergognone-freskó az apszisban. A márványoltár valószínűleg az 5-6. században készült. Színes ablakai 1927-ben készültek.

Az oldalkápolnák díszítése változó: reneszánsztól barokkig, rokokótól neoklasszikusig. A templom értékes freskóit Alessandro Varotari, Aurelio Luini, Ambrogio da Fossano valamint Camilo Procaccini festették.

Források

 Blanchard Paul: Northern Italy (Blue Guide sorozat), W. Norton Company, London, 2005,
 Fajth Tibor: Itália Panoráma útikönyvek, Athenaeum Nyomda, Budapest, 1980
 Lindner László: Milánó és az északolasz tóvidék, Panoráma útikönyvek, Franklin Nyomda, Budapest, 1984,

Milánó vallási építményei
A Milánói főegyházmegye templomai, kolostorai

redpajama_set_name: RedPajamaWikipedia


text:
Home › • Pre-Order : Piper "Sunshine Kiz" Cassette
• Pre-Order : Piper "Sunshine Kiz" Cassette
Ship To Shore Records
Sunshine Kiz by Piper
Pre-Order before 12th December 2021
Riding hih on the success of Gentle Breeze, PIPER was eager to put out more new material. Keeping the same members and guest musicians, the band used its excitement and forward momentum – aided no doubt by its ever-growing experience and taste for experimentation – to produce its next album, Sunshine Kiz, within the tiny span of six months. And despite seeing no change in personnel for these latest efforts, PIPER's musicality was constantly evolving.
Perhaps most obviously, Sunshine Kiz showed the band beginning to break away from its signature style. Instrumentals were no longer the focus as more vocal-centric tracks made their way to the fore. Sunshine Kiz turned out to be a "song album," and its lyric sheet saw a substantial increase in the number of words. A Drumulator replaced the LinnDrums, and the programmed percussion suddenly sounded more natural. Some songs actually featured live drumming, abandoning programmed beats altogether.
It could be said that this all amounted to, at least partially, a return to PIPER's roots. Or, maybe more accurately, it was something like PIPER circa 1981 filtered through the signature sound the band had forged with their two Breeze albums of 1983. The title track on Sunshine Kiz was released as their second-ever single – their first since "Far Away" from their debut album. And with this new single there even came a music video.


A transcription of the heated exchange between BBC Director of Strategy and Education James Purnell and Channel 4 Controller Jay Hunt, at the RTS London Conference. Click here for the report of the whole session they were speaking at - PSB and Beyond.
James Purnell: 'From a PSB perspective, we now see a real chasm between the way we are going to be regulated.
'The Charter agreement is a set of incredibly detailed guidance to Ofcom – children's programmes, history, religion, current affairs, 100-plus quotas.
'We wouldn't wish that on Channel 4, but, looking at what has happened with Bake Off, there is a huge difference between the way we are regulated, and… now there is a question about whether that is right.
Jay Hunt: 'I have a slight advantage here, having run BBC One, controlling £1bn. At Channel 4, we are measured by 42 metrics.
James Purnell: 'The audience are really sad [that they are] not going to have something they really love. You are going to have your take on it. But something really precious will be lost. You are a public service broadcaster.
'Of course, you should be regulated. What I am saying is [that] you are not sufficiently regulated.… This debate is about: can Channel 4 do what it wants?
James Purnell interrupts to say that he was Secretary of State for Culture in the last Labour Government and helped to set up Ofcom.
James Purnell: 'That's totally different. ITV has some lesser public service duties, different to Channel 4. You have a remit which you describe yourselves as "Be risky".
Jay Hunt: 'Let me just put this in a slightly different way. We don't take a penny of public money. Channel 4 operated from the beginning a very effective cross-subsidy model. Bake Off will be, and is, part of that strategy.
Jay Hunt: 'I understand how painful it is to lose a franchise, but let us be utterly clear. This is an independent producer, who, after three years of an increasingly dysfunctional relationship, decided they would no longer make this show for you. This was widely leaked. At that point, that franchise was in the market.
The panellists were: Jay Hunt, Chief Creative Officer, Channel 4; Monica Maggioni, President, RAI; James Purnell, Director of Radio and Education, BBC; and Peter Rosberg, Head of Planning and Scheduling, DR. The session was chaired by Patrick Younge, Co-founder and Managing Director, Sugar Films, and produced by Laura Gosling and Andrew Scadding.
The segment used in this transcription begins at 18.50 in the video below.


Refer to the instructions supplied in the Aloe Body Toning Kit.
Aloe Barbadensis Leaf Juice (Stabilized Aloe Vera Gel), Water (Aqua), C10-18 Triglycerides, Glyceryl Stearate, Propylene Glycol Dicaprylate/ Dicaprate, Butylene Glycol, Cetyl Alcohol, Triethanolamine, Propylene Glycol, Hedera Helix (Ivy) Extract, Spiraea Ulmaria Flower Extract, Clematis Vitalba Leaf Extract, Fucus Vesiculosis Extract, Equisetum Arvense Extract, Soluble Collagen, Hydrolyzed Elastin, Cinnamomum Cassia Leaf Oil, PEG-100 Stearate, Polysorbate 20, Sorbitan Laurate, Carbomer, Capsicum Frutescens Resin, Ascorbic Acid, Methylparaben, Propylparaben.
Forever Aloe Body Toner is a magnificent, warming and rejuvenating cream, which is enriched with the power of aloe vera gel that shapes and tones your body. It is formulated with natural ingredients that contain skin emulsifiers which moisturise your body deeply. It contains Cinnamon Oil that has medicinal properties and provides protection against skin diseases. It is specially designed to enhance and firm the body. It is enriched with aloe vera that smoothens your body.
This body toner improves the skin's condition and gives a natural glow to the body. It is safe and does not cause any rashes as well as irritation. It deeply cleanses the impurities, dirt and oil from the body. Before applying this toner on the body, try a small pinch on a small area of the skin.
Get a superb feel of herbs and warming ingredients by the use of Forever Aloe Body Toner.


Katie Moore and I have collaborated again to pick out some of our favorite Christmas party dresses. I'm conscious that party dresses can sometimes be a bit of a one hit wonder so this year I personally tried to choose a piece that I could see myself (and my sisters and friends;)) wearing lots #30wears. Unfortunately my Zara Metallic Blazer Dress sold out, which is mad because I literally bought last week online. Fingers crossed it will come back in. Next week we are going to share our favorite black tie gowns as Katie's brother is getting married at Christmas. All the dresses are linked below. Enjoy.


Before I even start, I want to thank you all so much for supporting me, not only with the book, but with both pages as well. Without all of you, nothing that I do could possibly be as successful or as meaningful.
Humans In Melbourne began in late 2014 and has grown to become 162,000 Humans strong. @Melbourneiloveyou started in early 2015 and now has over 68,500 amazing Humans following along. The #Melbourneiloveyou hashtag has been used over 378,000 times since the page started!
The Humans In Melbourne book will be a gorgeous hardcover, 200 page coffee table book full of gorgeous photos and stories from both the "Humans In Melbourne" Facebook page as well as the @melbourneiloveyou Instagram page! The presale will be very limited and I will only be doing a limited run of the book to be purchased after the presale.
Please note that when selecting your book option below you can select to pick it up from me in the CBD at my stall, this option is $49.99.
You can come to my stall on the corner of Bourke and Swanston any day between 12.30 and 4. Please note that bad weather stops me from opening so if the weather doesn't look great please feel free to msg me first.
If you would like to have it delivered then select that option and it will be $59.99 to have the book delivered to your door! I will post the book the day after you order!
I have also added an option of a limited edition print! Limited to 100 per photo, each print will be signed and numbered! The print will be an 8"x10" (20x25cm) photo. The additional cost for this is $30. The print comes in an art-slip and will be delivered with your book or picked up in the CBD at time of collection. If you would like the limited edition option just select it from the drop-down menu. There is an option there for pick up as well as delivery.
I was 12 years old when I first heard that every book written in Australia goes into the National Library... forever. Something to leave behind after you're gone. I knew then that one day I would have a book. I just didn't know what it would be about. This indeed has been the biggest dream of my life.
Thank you all so much for helping me turn my dreams into a reality.


Why Study at EU Business School Munich?
With a high caliber, experiential approach to learning, EU Business School Munich is the perfect place to pursue your world-class, international business education.
As an economic capital of Germany and flourishing metropolis, the city offers students the ideal balance between culture, innovation and education alongside the strongest growth and employment rates in the country.
There is an endless list of reasons to study at EU Business School Munich. The school offers a comprehensive business education, our pragmatic approach to learning employs a dynamic case-study method. In addition, we ensure students regularly interact with entrepreneurs through visits to companies where they see how business theory is put into practice.
Students at EU Munich will also have the opportunity to meet dignitaries, travel to incredible countries, attend prestigious events and completely immerse themselves into a different culture.
Every academic year, we ensure our students have a good balance between classroom theory and hands-on learning. Our ethos at EU Business School Munich emphasizes the importance of educational activities outside the classroom that bring business to life. During all programs, students connect with actual businesses, entrepreneurs, real businesspeople and world leaders, who also come to address students, sharing their experience and insights.
As well as learning from our EU Munich academics, we regularly invite experts as guest lecturers to interact with our students and discuss current business issues and trends.
We welcome important worldwide leaders to our Munich business school to share their expertise.
Students at our business school in Munich can enjoy regular visits to international companies where they can apply the theory learned in lectures to real business scenarios.


I want you to know I really trust my blog readers. Showing artwork that is not expertly done is a big risk. But I'm just learning how to paint with watercolor and want to share my journey with you.
I'm pretty well-known as an accomplished fiber artist but when you leave that media and try to expand your knowledge in another media, it can be scary, frustrating, and at times, discouraging.
This begins the third year of my quest to become a watercolor artist. I have taken lessons from 4 different watercolor artists and have learned something different from all of them. I'm still struggling to develop my "perfect" palette but am getting closer to my "must have" colors. So far, my list is Hansa Yellow, New Gamboge, Yellow Ochre, Burnt Sienna, Quinacridone Sienna, Permanent Rose, French Ultramarine Blue, Phalo Blue, Cobolt Blue, Green Gold, Sap Green, Windsor Violet and Neutral.
My new teacher is Kathleen Lanzoni. I've only had one class with her but I like her teaching style. This class is all about landscapes so the first lesson we had was developing a field of grasses and flowers. My take-away was how to paint trees! She demonstrated such an easy way to attack this image that I was confident in doing it myself.
I was happy with how this painting turned out. It's not always easy to create in a class situation but this time, it worked.


There's a disturbing trend in America and it's causing soon to be high school graduates to question whether college truly is the key to finding success in a difficult job market.... "The most important thing out-of-work job-seekers can do is to find something useful to do with the time�volunteer, take classes, get active in your professional society." Practice interviewing.
As a job gap, �eight years� is a long time. People assume that your skills have eroded and that your understanding of technology, work life and other areas are dated.... It�s a competitive job market, and KPMG jobs are some of the most sought-after in the financial industry. But if you follow the advice above, you�ll have a much better chance of getting hired by KPMG.
As time has passed, your job search may have gone from a targeted pursuit of relevant positions to an anything-goes, resume free-for-all, as you apply for pretty much anything within your how to grow cilantro from seed 2. Update your CV with your career break. It�s quite common for a candidate to believe that a gap on their CV will ruin their career. However, instead of seeing it as a handicap, see it as something positive that can differentiate you from other candidates.
1. Try to get a reference. Depending on why you were fired and who gave you the axe, you may want to see if you can still get a reference from your former employer. how to get rid of hip dips before and after As a job gap, �eight years� is a long time. People assume that your skills have eroded and that your understanding of technology, work life and other areas are dated.
There's a disturbing trend in America and it's causing soon to be high school graduates to question whether college truly is the key to finding success in a difficult job market.
You applied to the job. You passed all three rounds of interviews with flying colors. Your references were off-the-charts amazing. But still, you got rejected from your dream company.


text:
Q: Block matrix with Lower triangular matrices as blocks Consider a block matrix A
$$
A
=
\begin{pmatrix}
A_{11} & A_{12}\\
A_{21} & A_{22}
\end{pmatrix}_{2 \times 2}
$$
such that its entries $A_{ij}$ are lower triangular matrices. What is the inverse of A? How and which norm can be used to show that the norm of matrix A is less than or equal one? And is there any relation between the eigenvalues of  $A$ and the eigenvalues of lower triangular matrices $A_{ij}$?

A: if $A = \left [ \matrix{X & Y \\ W & Z} \right ]$, and we use the norm $\|M\| = \sqrt{\text{tr}(M^*M)}$, for all of them, then it is easy to see that $$\|A\|^2 = \|X\|^2 + \|Y\|^2 +\|W\|^2 +\|Z\|^2$$


The 1st SEAMEO Youth Leadership Forum held on 1-4 October 2014 at Holiday Inn Sukhumvit in Bangkok, Thailand was attended by 33 Southeast Asian youths who were selected from an application pool of over 500 hopefuls. These selected individuals were chosen as they had proven to show great potential in leading their respective Southeast Asian nation's in the near future.
On the first day of the forum, the participants were welcomed by SEAMEO Secretariat's Deputy Director for Admnistration and Communication, Dr. Tinsiri Siribodhi; SEAMEO SPAFA's Centre Director, Dr. MR Rujaya Abhakorn; and keynote speaker, Dr. Sumet Tantivejakul, who is the Secretary-General of the Chaipatana Foundation. They were then given talks on 'concepts and facets of leadership', 'team leadership and learning dynamics' and 'leadership of 21st century global citizens'. They also participated in two workshops (Workshop 1: Leadership in Action, and Workshop 2: Imagining an 'ideal' leader) which was led by officers from the Right to Play Thailand Foundation. From the first day, it was evident that this group of 33 selected youth leaders were knowledgable about world issues, current events, and most importantly, enthusiastic and passionate about the issues and in bringing about change for the better.
With views expressed and discussions complete from Day One on 'Developing Future Leaders of Southeast Asia', the SEAMEO Youth Leaders were ready for Day Two's theme which was on 'Effective Professional Values and Ethics' were they were spoken to with regards to 'core values in ethics and professional responsibility' and what was required for professional ethics in a) education; b) media and communication; c) business; d) information technology; and e) arts, culture and entertainment. After each of the sessions, the participants were always asked for their reactions where they expressed their opinions (i.e. agreements or disagreements) and posed questions to the session's speaker.
But the four-day forum was not confined to the conference room of the Holiday Inn, Sukhumvit, Bangkok as the SEAMEO Youth Leaders were taken to two site visits on Day Three. The first site visit was The Royal Chitralada Projects, and the second was the Kudi Chin community. At The Royal Chitralada Projects, the participants were able to see first-hand, projects related to sustainable development and economic sufficiency as initiated by His Majesty, The King of Thailand. At Kudi Chin, the SEAMEO Youth Leaders were able to see how different races and religions were able to live harmoniously within a small community.
On the fourth and final day of the forum, the SEAMEO Youth Leaders were first shown an environmental film, "The 11th Hour" (2007), which tied in with the overall theme of Day Four: Managing the Development of a Changing World. They were then given talks on 'sustainable development', 'sustainable environmental management', 'multi-lingual communication', 'cultural appreciation and intercultural understanding', and 'the role of young leaders in the ASEAN socio-cultural community'.
For more, please click here for the post-forum article by SEAMEO College Project Management Office on the SEAMEO Secretariat website.
*Visit SEAMEO SPAFA's YouTube Channel to view the plenary sessions and workshop activities from Day 1.
Day 1 Sessions: (1) Concepts and Facets of Leadership by Mr. J. Peñol; (2) Team Leadership and Learning Dynamics by Ms. N. Wadman; and (3) Leadership of 21st Cent. Global Citizens by Dr. Chung Utak.
Day 1 Workshops: (1) Leadership in Action – Marshmallow activity; (2) Leadership in Action – Natural Orchestra; (3) Imagining an "ideal" leader.
** Day 2 and 4 to come.
The World Bank estimates that globally there are 1.5 billion young people (defined as persons aged between 15 and 24), the highest number ever in history. As of 2010, more than 60 percent of the world's youth live in Asia Pacific, about 15 percent (or nearly 110 million) of which is in Southeast Asia. The so-called "youth bulge" presents opportunities for countries to maximize their human capital in pursuing their social and economic development goals. On the other hand, failing to prepare the future generation of citizens – as workers, businessmen, parents, and community leaders – have serious costs on governments. Not meeting the youth's expectations to have gainful employment or to be able to participate in political decision-making have the danger of fostering social discontent.
The "SEAMEO Youth Leadership Forum" aims at providing a regional platform for youth representatives from Southeast Asia to build their leadership skills and strengthen their capacity to contribute to the ASEAN community now and in the future.
Alternatively, all the above can be accessed at the official 1st SEAMEO Youth Leadership Forum website here.


The Whitesnake 2018 Album Specially Remastered For iTunes & YOU!!!
New In Our Store, And A Sale!
By very popular demand, we bring you the… DONINGTON SNAKE STAGE SHIRT! CATCH THE HOLIDAY SPIRIT! ON SALE! Please address all questions about these items on the Store's contact form. Thanks!
Back With A Vengeance In 2019!!!
The Flesh & Blood World Tour July 5th, 2019 Amphitheatre – Sered, Slovakia! TICKETS ON SALE NOW!


text:
Africa Liberal Network, förkortat ALN, är en sammanslutning av liberala partier på den afrikanska kontinenten. Organisationens etablerades i juli 2001 vid en konferens i Mombasa, och grundades formellt i juni 2003 i Johannesburg, då Johannesburgfördraget antogs. ALN har sitt högkvarter hos Liberaldemokraterna i London och baserar mycket av sin verksamhet på stöd från Westminster Foundation for Democracy.

Sedan organisationens konferens i Daar es Salaam år 2010 är Dr. Mamadou Lamine Bâ dess president.

Syfte
ALN formulerar sitt syfte som att
 Sprida liberala värderingar i Afrika
 Att underlätta utvecklingen av liberala partier, organisationer och individer i alla Afrikas länder.
 Att uppmuntra solidaritet bland medlemmarna i deras mål att nå makt med demokratiska medel.
 Att etablera en allians av likasinnade liberaler i Afrika, som kan dela information, erfarenheter, förmågor och idéer.
Detta skall uppnås genom bland annat utbildningar, lobbying och informationsutbyte.

Medlemspartier

Referenser

Externa länkar
 Officiell hemsida
 Johannesburgfördraget
 ALN:s konstitution

Liberalism i Afrika


Wow, what a pain. I have some BluRay disks that I want to rip and encode in a format that my Samsung TV can play. I have encoded multiple formats and have yet to find a format that works. The closest I can get is an XVID video encoding with 23.97 fps. Yet, somehow the video is still choppy in the motion scenes. Its so annoying because I'm so close to getting it to work but just can't get all the way there. If I can just figure out the correct combination of encoding with Xilisoft Ultimate video encoder I will be able to convert all my movies and put them on my 2TB seagate external hard drive. That would be great.
RTP Scanner Radio is ONLINE!


b) the processing of personal information concerning him/her for the purposes of sending advertising material or on direct sales or for market research or commercial notification.
Group Doratex constantly seeks new resources to include in their work forces.
If you are interested in getting in touch with our company and would like to submit your application, please send us your CV using the form below and you will be contacted if there are any positions in line with your profile.


text:
Green-Ellis nominated for FedEx Ground Player of the Week
Making the right plays on the field takes talent, perseverance, focus and a whole lot of hard work. At FedEx, we know the same skills that make the FedEx Air & Ground nominees and winners successful on the football field are what delivers success in every field. That's why we're proud to recognize three small businesses each week that have what it takes and play to win. Just like the FedEx Air & Ground NFL Players of the Week, each of these businesses delivers when the pressure is on. Take a minute to deliver your vote for the players and the business you think had the best plays this week.
FEDEX AIR -- QUARTERBACK NOMINEES
Matt Cassel, Kansas City Chiefs
Chiefs QB Matt Cassel completed 21 of 29 passes for 257 yards and four touchdowns in the Chiefs' 28-24 win over the Indianapolis Colts. His 138.9 passer rating was the highest of the weekend.
Aaron Rodgers, Green Bay Packers
Packers QB Aaron Rodgers threw for 396 yards and two scores in the Packers' 25-14 victory over the Atlanta Falcons.
Ben Roethlisberger, Pittsburgh Steelers
Steelers QB Ben Roethlisberger tossed five touchdowns and one interception, and tallied 228 yards through the air in the Steelers' 38-17 win over the Tennessee Titans.
FEDEX GROUND -- RUNNING BACK NOMINEES
BenJarvus Green-Ellis, New England Patriots
Patriots RB BenJarvus Green-Ellis ran for 136 yards and two touchdowns in the Patriots' 30-21 victory over the New York Jets.
Frank Gore, San Francisco 49ers
49ers RB Frank Gore averaged 6.2 yards per carry en route to 125 yards and one touchdown on the ground in the 49ers' 48-3 win over the Tampa Bay Buccaneers.
Adrian Peterson, Minnesota Vikings
Vikings RB Adrian Peterson rushed for three scores and 122 yards in the Vikings' 34-10 victory over the Arizona Cardinals.
Statement from Robert Kraft on Bill Parcells' election into the Pro Football Hall of Fame
The following is a statement from New England Patriots Chairman and CEO Robert Kraft on Bill Parcells' election into the Pro Football Hall of Fame.
The Patriots.com News Blitz gets you up to date with the latest news from local and national media.
Samsonite Make Your Case: Super Bowl Sunday
Even though the Patriots aren't involved, Super Bowl Sunday is the biggest day of the sports year with virtually everyone interested in some way. Let us know who you'll be rooting for with a vote in this week's Samsonite Make Your Case poll.
Inside the Numbers: 2012 Season
Go inside the numbers for a look at the achievements of the 2012 New England Patriots team.
Patriots Sign DL Armond Armstead
Armstead, 22, played last season for the Toronto Argonauts of the Canadian Football League.
NFL Calendar
The following is an updated NFL calendar with important dates throughout the offseason and the 2013 NFL regular season.
Patriots.com News Blitz - 1/31/2013
Penn State Head Coach Bill O'Brien To Deliver Keynote at 2013 New England Football Coaches Clinic
Clinic scheduled for March 8-9 at Gillette Stadium
Inside the Helmet... Ryan Wendell
Get to know Patriots center Ryan Wendell in this week's edition of Inside the Helmet.
Ask PFW: Early offseason grumblings
Though the Super Bowl isn't even in the books yet, Patriots fans have already turned the page to the many issues New England faces this offseason. A variety of those topics fill out this winter freeze edition of Ask PFW!


text:
Jatan Mehta • Mar 14, 2022
The two-faced Moon
Why is our Moon's farside so different from its nearside?
It wasn't until 1959 that we saw our Moon's farside for the first time. Because the Moon is tidally locked to Earth, humanity had only seen the nearside lunar hemisphere until that point. When Luna 3 and later spacecraft transmitted the first farside images, they revealed a far more cratered hemisphere which looked more akin to Mercury and Jupiter's moon Callisto than the world we know.
The Moon's nearside and farside Image: NASA LRO / Jatan Mehta
The farside also lacked the Moon's familiar dark splotches. Formed as a result of active volcanism over 3 billion years ago, it was anyone's guess why dark lava plains cover about 31% of the nearside but only 1% of the farside.
Later observations deepened the dichotomy. Several lunar orbiters showed that farside rocks have a noticeably different chemical composition from nearside ones, meaning they formed differently. The twin NASA GRAIL orbiters launched in 2011 revealed that the farside's crust is about 20 kilometers thicker on average than the nearside.
Map of the Moon's nearside and farside crustal thickness As inferred from NASA's GRAIL mission dataImage: NASA / JPL / GSFC / MIT / IPGP
Scientists are especially interested in this lunar dichotomy because it's tied to the Moon's formation and evolution. Scientists think Earth and the Moon have a shared origin, formed when a Mars-sized object collided with the proto-Earth about 4.5 billion years ago. While active geological processes have erased hints of our planet's makeup in those early years, the material from early Earth that formed the Moon remains largely preserved on our airless cosmic neighbor. This is especially true for the lunar farside where large regions haven't been volcanically altered. Studying rocks here can give us insight into the early Earth while teaching us about the Moon's history. Understanding what caused our Moon's dichotomy will also allow us to better gauge why Mars and other solar system bodies are also asymmetric.
The molten Moon
Earth may be responsible for lending the Moon's nearside a thinner crust than its farside. When the Moon coalesced as a molten body from leftover debris of the collision between Earth and the Mars-sized object, it was about 15 times closer to us than it is today. It became tidally locked very soon after, when the Earth was still extremely hot from the force of the collision. The Moon's nearside constantly faced early Earth's fuming temperatures of 2,500 degrees Celsius (4,500 Fahrenheit), and thus remained molten for longer than the farside. Catalyzed by other factors such as tidal heating, it meant that farside magma was the first to crystallize into crust. Some crustal elements like aluminum and calcium continued vaporizing on the still molten nearside and condensing on the farside, making its crust thicker.
The early Moon An artist's concept of the Moon shortly after its formation, with a magma ocean and a newly forming rocky crust.Image: NASA Goddard
Scientists first thought that having a thinner nearside crust allowed magma in the Moon's mantle to ascend and volcanically erupt on the surface more easily than the farside, explaining the nearside's abundant volcanic plains. However, the farside South Pole-Aitken Basin (SPA)—the largest, deepest confirmed impact structure on the Moon—refutes that argument. The asteroid/cometary impact that created the 2,600-kilometer (1,600-mile) wide SPA carved deep into the lunar crust and even excavated some of the mantle. Later impacts on top of the basin carved further into the crust, making it very thin compared to the rest of the farside. And yet only 3 to 4% of the basin floor is covered in typical lava plains. Crustal thickness alone can't explain the contrast in volcanic activity between the Moon's hemispheres.
Scientists then thought that since the nearside crystallized slower than the farside, its crust and mantle may have accumulated more heat-producing and radioactive elements such as potassium and thorium. High-temperature experiments suggest that their presence would have lowered the melting temperatures of rocks in the nearside mantle, producing 4 to 13 times more magma under the nearside crust than the farside.
Simulations support this by showing that 4 billion years ago Oceanus Procellarum, the largest volcanic plain on the nearside, was hundreds of degrees hotter than the farside crust. Because of the temperature difference, nearside impacts produced deeper and larger basins than the farside, making the nearside crust even thinner and spilling more magma onto the surface.
Future missions
A sample return mission to the South Pole-Aitken Basin has been assessed as the highest priority for lunar exploration in the last two Planetary Decadal Surveys, a report produced every 10 years by the U.S. scientific community to guide future NASA missions. Sampling key areas within SPA to determine the ages and nature of farside crust and mantle, and comparing it to the nearside, will help us unravel the exact conditions in which the Moon formed and evolved. While China's Chang'e 4 mission landed in a crater within SPA in 2019, the crater's lava plains cover much of the ancient crust, and the mission's instruments weren't designed to probe the origin of the lunar dichotomy.
Another key target is Moscoviense, a major lava plain on the farside. Studying how its volcanic rocks differ from the nearside plains will not only inform scientists about the nearside-farside volcanic contrast but also lend insights into how the farside mantle formed differently than the nearside.
All of this future exploration will help us know how terrestrial planets like Earth and Mars form. Since scientists use the Moon as an age reference to determine how old or young features on planets and other solar system worlds are, establishing ages of farside features will also give us a firmer timeline of events across the solar system.
Distribution of thorium-containing mantle material across the vast South Pole–Aitken Basin on the Moon's farside Such materials exposed on the surface can be collected and brought to Earth by future missions to better understand the evolution of our Moon as well as planets in our solar system and beyond.Image: NASA / LRO / Lunar Prospector / Dan Moriarty, et al.
Several sample return and in-situ landing missions have been proposed over the decades to key places on the Moon's farside. China's Chang'e 6 spacecraft will collect samples from the Moon's south pole in 2024 or later, possibly from a region within SPA. NASA is sending a commercial lander as part of its CLPS program to the geologically pristine Schrödinger crater on the farside in 2024 to study the region's internal structure and heat flow.
NASA's Artemis program aims to regularly send humans to the Moon's south pole starting in 2025. While the landings won't be in SPA, scientists have identified some sites for the first few Artemis missions which host mantle and crustal material ejected by impacts on SPA. Much like Apollo, the pristine samples that Artemis missions will bring back to Earth could change how we look at our Moon.
Thanks to Daniel P. Moriarty for reviewing this article.
The Moon, preserving Earth's origin story
The Moon is the only world besides Earth ever visited by humans. By studying it, scientists can piece together Earth's origin story.
Read more: Explaining science, The Earth-Moon system, The Moon, Worlds
Jatan Mehta
Contributing Editor for The Planetary Society
Read more articles by Jatan Mehta


text:
Los colonos judíos gobiernan el gallinero en Israel, pero ¿a qué precio?
Con los colonos judíos dictando la agenda política en Israel y provocando constantemente a los palestinos en los Territorios Ocupados, es probable que la violencia crezca exponencialmente en los próximos meses.
Por Ramzy Baroud @RamzyBaroud
Israeli Jewish settlers are on a rampage in the occupied Palestinian West Bank. While settler violence is part of everyday routine in Palestine, the violence of recent weeks is directly linked to the general elections in Israel,
Dr. Ramzy Baroud is a widely published and translated author, an internationally syndicated columnist and editor of PalestineChronicle.com. His latest book is The Last Earth: A Palestinian Story (Pluto Press, 2018). He earned a Ph.D. in Palestine Studies from the University of Exeter (2015), and was a Non-Resident Scholar at Orfalea Center for Global and International Studies, UCSB. Visit his website at www.ramzybaroud.net.
Airbnb Set to Remove Listings from Occupied West Bank that Serve Jewish Settlers
The BDS movement has served as one of the most effective methods for drawing attention to Israel's occupation of Palestine and apartheid policies — similar to the boycott movements that successfully targeted apartheid South Africa.
Por Randi Nord @randinord
SAN FRANCISCO -- In a major win for Palestinian human rights and the Boycott, Divestment, and Sanctions movement (BDS), the popular apartment-rental website Airbnb has announced plans to remove all listings in the Israeli-occupied West Bank that serve illegal Jewish settlers. According to the company's
Randi Nord
Randi Nord is a MintPress News staff writer. She is also co-founder of Geopolitics Alert where she covers U.S. foreign policy in the Middle East with a special focus on Yemen.
10-Year-Old Israeli Settler Children Subjected To 'Weapons Training'
A group of Israeli primary school boys received firearms training during a summer camp in an illegal settlement in the occupied West Bank, Israel's Ynet News reports on Saturday.
Por The New Arab
Children of Israeli settlers of primary school age were subject to weapons training at a summer camp inside an illegal settlement in the occupied West Bank, an Israeli daily reported on Saturday. Boys from the fourth and fifth grades were taught to handle M16 rifles as part of an "army day" weapons training session at the summer camp in the
Yale College Republicans Hold BBQ Near Hunger Strike To Taunt Protesters
The tactic has drawn comparisons to another recent barbecue halfway across the world where Israeli youth held a barbecue outside a prison in which Palestinians were engaging in a hunger strike.
mayo 01st, 2017
Por Amanda Froelich
Last week, campus union organizers at Yale University gathered in a tent outside University President Peter Salovey's home. The eight-member group was participating in a hunger strike in response to Yale's unwillingness to
Extremist Israeli Settlers Raid Muslim Holy Site
Extremists, protected by Israeli police, routinely raid the Mosque, the second holiest site for Muslims.
Por Middle East Monitor
With severe restrictions imposed on Muslims trying to pray in Al-Aqsa Mosque, extremist Jewish settlers yesterday raided the Noble Sanctuary protected by a heavy Israeli police presence, Safa news agency has reported.
Former Deputy Knesset Speaker Moshe Feiglin was among almost 300
In Late Night Vote, Israeli Knesset Agrees To Seize Palestinian Land
Israel's Knesset has agreed on a bill that allows the Israeli government to unilaterally seize land privately owned by Palestinians.
Por Jason Ditz
(REPORT) --- In a 60-52 vote late in the evening, Israel's Knesset has agreed on a bill that allows the Israeli government to unilaterally seize land privately owned by Palestinians, make it state property, and then transfer it to settlers for the


Sci-fi-tinged nostalgia runs rampant in the illustrations of Paul Paetzel. The Berlin-based artist has a knack for both narrative and humor, whether it's his comics, illustrations, or stray personal work. Paetzel has been part of the Berlin collective known as Biografiktion, also featuring artists Till Hafenbrak and Ana Albero.


A charming and nostalgic Christmas story about a much loved Little Dog who finds his way home for Christmas.
Little Dog and Jonathan are best friends. They do everything together. But on Christmas Eve Little Dog finds himself lost and alone in a busy city. How will he find his way home? Can Christmas wishes come true?
Buy Little Dog and the Christmas Wish by Robin Cowcher from Australia's Online Independent Bookstore, Boomerang Books.
Corinne Fenton is the author of 25 books for children, including Queenie: One Elephant's Story (illustrated by Peter Gouldthorpe), The Dog on the Tuckerbox (also illustrated by Gouldthorpe) and Flame Stands Waiting. Robin Cowcher is a freelance illustrator and worked for many years at The Age as an art director, illustrator and designer.


Security begins with good locks whether it is for your home or business that needs to be made safe from burglars and other intruders.
But choosing the best window and door locks for your security needs is not a simple matter as it may first appear.
When selecting a lock for the home or business, you need to take a number of factors into account such as what type of door or window you wish to secure and what level of security you need.
Other factors to consider are the type and quality of the frame into which the door is fixed; what kind of key system you need or whether your security needs are better met by an electronic door entry system.
Door locking systems vary in price and generally, the more you pay, the higher the level of security you get but changing the locks on your property is not always as expensive as many customers think.
Independent, professional advice can be a real bonus here, not only regarding getting the best level of security but in saving money by getting the correct hardware for the job.
A standard mortice lock, for example, will be little use on a UPVC door while a poor quality frame may never be secure no matter what type of locking system you use.
Professionals will have first-hand experience of the door entry and locking systems that work best and those that have a poor record.
Insecure doors are the burglar's favourite point of entry and exit so it pays to make sure that your doors are fitted with quality locks.
Door locks come in many different shapes, sizes and style to suit a similarly varied range of doors materials and security needs, but they fall into two main groups — deadbolts and latches.
Deadbolt locks, also called deadlocks, effectively bolt the door into the surrounding frame. The most common type is the Mortice lock which is fitted in the edge of the door so that only the plate and the bolt are visible.
The best type of mortice is the five-lever deadlock which requires a key to both open and close it. Many insurers will insist that the deadlock complies with British Standard BS3621.
Most mortice locks have a combination of deadlock and sash or latch lock. The latch is opened by turning a handle while the deadlock requires a key. All deadbolt locks should be constructed from steel, bronze, or brass.
Variations on deadbolts include multi-point locks where a single key operates several deadlocks that are spaced apart. They are often found on uPVC doors, typically on patio or conservatory doors and typically have three deadbolts that lock simultaneously.
These are locks that are fitted to the face of the door and come in a variety of names such as latch locks, Yale locks and spring locks.
Spring latch locks, or Yale-type locks, are cheaper, but the basic latch lock offers minimal security. The latch automatically locks when the door is closed and is opened by turning a small handle on the inside our using a key from outside.
Some spring latches can have deadbolts fitted to make the lock a little more secure. Other variations on the latch are roller bolt latches, often found on doors to flats so that residents don't accidentally lock themselves out.
Electronic door operating systems are becoming increasingly popular. The locking mechanism is basically the deadbolt system, the difference being that the mechanism is operated using an electric current instead of a key.
Electronic access also allows other security features such as transaction logs, recorded use of cards and fobs and remote activation and monitoring.
Whatever the type of security lock you use it is important to note that no door locking or door entry system can be 100% guaranteed to keep out all intruders. Nevertheless, quality locks and efficient door entry systems can significantly decrease the risk of burglary or other unauthorised entry.


text:
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe Surveyor::Parser do
  let(:parser){ Surveyor::Parser.new }
  it "should return a survey object" do
    Surveyor::Parser.new.parse("survey 'hi' do\n end").is_a?(Survey).should be_truthy
  end
  context "basic questions" do
    include_context "favorites"
    it "parses" do
      expect(Survey.count).to eq(1)
      expect(SurveySection.count).to eq(2)
      expect(Question.count).to eq(4)
      expect(Answer.count).to eq(9)
      surveys =   [{title: "Favorites", display_order: 0}]
      sections =  [{title: "Colors", reference_identifier: "colors", display_order: 0},
                   {title: "Numbers", reference_identifier: "numbers", display_order: 1}]
      questions = [{reference_identifier: nil, text: "These questions are examples of the basic supported input types", pick: "none", display_type: "label", display_order: 0},
                   {reference_identifier: "1", text: "What is your favorite color?", pick: "one", display_type: "default", display_order: 1},
                   {reference_identifier: "2b", text: "Choose the colors you don't like", pick: "any", display_type: "default", display_order: 2},
                   {reference_identifier: "fire_engine", text: "What is the best color for a fire engine?",display_type: "default", display_order: 3}]
      answers_1 = [{reference_identifier: "r", data_export_identifier: "1", text: "red", response_class: "answer", display_order: 0},
                   {reference_identifier: "b", data_export_identifier: "2", text: "blue", response_class: "answer", display_order: 1},
                   {reference_identifier: "g", data_export_identifier: "3", text: "green", response_class: "answer", display_order: 2},
                   {reference_identifier: nil, text: "Other", response_class: "answer", display_order: 3}]
      answers_2 = [{reference_identifier: "1", text: "orange", response_class: "answer", display_order: 1},
                   {reference_identifier: "2", text: "purple", response_class: "answer", display_order: 2},
                   {reference_identifier: "3", text: "brown", response_class: "answer", display_order: 0},
                   {reference_identifier: nil, text: "Omit", response_class: "answer", display_order: 3}]
      surveys.each{|attrs| attrs.each{|k,v| expect(Survey.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      sections.each{|attrs| attrs.each{|k,v| expect(SurveySection.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      questions.each{|attrs| attrs.each{|k,v| expect(Question.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      answers_1.each{|attrs| attrs.each{|k,v| expect(Question.where(display_order: 1).first.answers.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      answers_2.each{|attrs| attrs.each{|k,v| expect(Question.where(display_order: 2).first.answers.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
    end
  end
  context "complex questions" do
    include_context "feelings"
    it "parses" do
      expect(Survey.count).to eq(1)
      expect(QuestionGroup.count).to eq(3)
      expect(Question.count).to eq(10)
      expect(Answer.count).to eq(34)
      surveys = [{title: "Feelings", display_order: 0}]
      question_groups = [{text: "Tell us how you feel today", display_type: "grid", reference_identifier: "today"},
                         {text: "How interested are you in the following?", display_type: "grid", reference_identifier: "events"},
                         {text: "Tell us about your family", display_type: "repeater", reference_identifier: "family"}]
      dropdown_question_attributes = {text: "Relation", pick: "one"}
      grid_questions = QuestionGroup.where(reference_identifier: "today").first.questions
      grid_answers_1 = [{text: "-2", display_order: 0},
                        {text: "-1", display_order: 1},
                        {text: "0", display_order: 2},
                        {text: "1", display_order: 3},
                        {text: "2", display_order: 4}]
      surveys.each{|attrs| attrs.each{|k,v| expect(Survey.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      question_groups.each{|attrs| attrs.each{|k,v| expect(QuestionGroup.where(reference_identifier: attrs[:reference_identifier]).first[k]).to eq(v)} }
      grid_questions.each{|question| grid_answers_1.each{|attrs| attrs.each{|k,v| expect(question.answers.where(display_order: attrs[:display_order]).first[k]).to eq(v)} } }
      dropdown_question_attributes.each{|k,v| expect(Question.where(display_type: "dropdown").first[k]).to eq(v)}
    end
    it "clears grid answers" do
      grid_answers_1 = [{text: "-2", display_order: 0},
                        {text: "-1", display_order: 1},
                        {text: "0", display_order: 2},
                        {text: "1", display_order: 3},
                        {text: "2", display_order: 4}]
      grid_answers_2 = [{text: "indifferent", display_order: 0},
                        {text: "neutral", display_order: 1},
                        {text: "interested", display_order: 2}]
    end
  end
  context "depdencies and validations" do
    include_context "lifestyle"
    it "parses" do
      expect(Survey.count).to eq(1)
      expect(SurveySection.count).to eq(2)
      expect(QuestionGroup.count).to eq(1)
      expect(Question.count).to eq(10)
      expect(Answer.count).to eq(12)
      expect(Dependency.count).to eq(6)
      expect(DependencyCondition.count).to eq(6)
      expect(Validation.count).to eq(2)
      expect(ValidationCondition.count).to eq(2)
      depdendencies = [{rule: "B", question_reference_identifier: "copd_sh_1b"},
                       {rule: "C", question_reference_identifier: "copd_sh_1ba"},
                       {rule: "D", question_reference_identifier: "copd_sh_1bb"},
                       {rule: "Q", question_group_reference_identifier: "one_pet"},
                       {rule: "R", question_reference_identifier: "very_creative"},
                       {rule: "S", question_reference_identifier: "oh_my"}]
      depdendencies.each{|attrs| (expect(Dependency.where(rule: attrs[:rule]).first.question.reference_identifier).to eq(attrs[:question_reference_identifier])) if attrs[:question_reference_identifier] }
      depdendencies.each{|attrs| (expect(Dependency.where(rule: attrs[:rule]).first.question_group.reference_identifier).to eq(attrs[:question_group_reference_identifier])) if attrs[:question_group_reference_identifier] }
      dependency_conditions = [{rule_key: "B", question_reference_identifier: "copd_sh_1", answer_reference_identifier: "1"},
                               {rule_key: "C", question_reference_identifier: "copd_sh_1b", answer_reference_identifier: "quit"},
                               {rule_key: "D", question_reference_identifier: "copd_sh_1b", answer_reference_identifier: "current_as_of_one_month"},
                               {rule_key: "Q", question_reference_identifier: "pets", answer_reference_identifier: "number"},
                               {rule_key: "R", question_reference_identifier: "favorite_pet", answer_reference_identifier: "name"},
                               {rule_key: "S", question_reference_identifier: "dream_pet"}]
      dependency_conditions.each{|attrs| expect(DependencyCondition.where(rule_key: attrs[:rule_key]).first.question.reference_identifier).to eq(attrs[:question_reference_identifier]) }
      dependency_conditions.each{|attrs| (expect(DependencyCondition.where(rule_key: attrs[:rule_key]).first.answer.reference_identifier).to eq(attrs[:answer_reference_identifier])) if attrs[:answer_reference_identifier] }
    end
  end
  context "translations" do
    it 'should produce the survey text for :default locale' do
      survey_text = %{
        survey "One language is never enough" do
         translations :en => :default, :es =>{'questions' => {'name' =>{ 'text' => '¡Hola!'}}}
          section_one "One" do
            label_name "Hello!"
          end
        end
      }
      survey = Surveyor::Parser.new.parse(survey_text)
      survey.is_a?(Survey).should == true
      survey.translations.size.should == 2
      question = survey.sections.first.questions.first
      question.translation(:en)[:text].should == "Hello!"
      question.translation(:es)[:text].should == "¡Hola!"
    end
    it 'should raise an error w/o :default locale' do
      survey_text = %{
        survey "One language is never enough" do
         translations :es =>{'questions' => {'name' =>{ 'text' => '¡Hola!'}}}
          section_one "One" do
            label_name "Hello!"
          end
        end
      }
      s = Survey.all.size
      expect {survey = Surveyor::Parser.new.parse(survey_text)}.to raise_error
      Survey.all.size.should == s
    end
    it 'should allow multiple default locales' do
      survey_text = %{
        survey "Just don't talk about tyres" do
         translations :'en-US' => :default, :'en-GB' => :default, :es =>{'questions' => {'name' =>{'text' => '¡Hola!'}}}
         section_one "One" do
           label_name "Hello!"
         end
        end
      }
      survey = Surveyor::Parser.new.parse(survey_text)
      survey.is_a?(Survey).should == true
      survey.translations.size.should == 3
      question = survey.sections.first.questions.first
      question.translation(:'en-US')[:text].should == "Hello!"
      question.translation(:'en-GB')[:text].should == "Hello!"
      question.translation(:es)[:text].should == "¡Hola!"
    end
    context 'when a translation is specified as a Hash' do
      it 'should should treat the hash as an inline translation' do
        survey_text = %{
          survey "One language is never enough" do
            translations :en => :default, :es => {"title"=>"Un idioma nunca es suficiente", "survey_sections"=>{"one"=>{"title"=>"Uno"}}, "question_groups"=>{"hello"=>{"text"=>"¡Hola!"}}, "questions"=>{"name"=>{"text"=>"¿Cómo se llama Usted?", "answers"=>{"name"=>{"help_text"=>"Mi nombre es..."}}}}}
            section_one "One" do
              g_hello "Hello" do
                q_name "What is your name?"
                a_name :string, :help_text => "My name is..."
              end
            end
          end
        }
        survey = Surveyor::Parser.new.parse(survey_text)
        survey.is_a?(Survey).should == true
        survey.translations.size.should == 2
        survey.translation(:es)['title'].should == "Un idioma nunca es suficiente"
      end
    end
    context 'when a translation is specified as a String' do
      context 'when the survey filename is not given' do
        it 'should look for the translation file relative to pwd' do
          Dir.mktmpdir do |dir|
            FileUtils.cd(dir) do
              translation_yaml = YAML::dump({'title' => 'Un idioma nunca es suficiente'})
              translation_temp_file = Tempfile.new('parser_spec_translation.yml',dir)
              translation_temp_file.write(translation_yaml)
              translation_temp_file.flush
              survey_text = %{
                survey "One language is never enough" do
                  translations :es =>'#{File.basename(translation_temp_file.path)}', :en => :default
                  section_one "One" do
                    g_hello "Hello" do
                      q_name "What is your name?"
                      a_name :string, :help_text => "My name is..."
                    end
                  end
                end
              }
              survey_temp_file = Tempfile.new('parser_spec_survey.rb',dir)
              survey_temp_file.write(survey_text)
              survey_temp_file.flush
              Surveyor::Parser.parse(File.read(survey_temp_file.path))
              survey = Survey.where(:title=>'One language is never enough').first
              survey.nil?.should == false
              survey.translation(:es)['title'].should == "Un idioma nunca es suficiente"
            end
          end
        end
      end
      context 'when the survey filename is given' do
        it 'should look for the translation file relative to the survey directory' do
          Dir.mktmpdir do |dir|
            translation_yaml = YAML::dump({'title' => 'Un idioma nunca es suficiente'})
            translation_temp_file = Tempfile.new('surveyor:parser_spec.rb',dir)
            translation_temp_file.write(translation_yaml)
            translation_temp_file.flush
            survey_text = %{
              survey "One language is never enough" do
                translations :es =>'#{File.basename(translation_temp_file.path)}', :en => :default
                section_one "One" do
                  g_hello "Hello" do
                    q_name "What is your name?"
                    a_name :string, :help_text => "My name is..."
                  end
                end
              end
            }
            survey_temp_file = Tempfile.new('surveyor:parser_spec.rb',dir)
            survey_temp_file.write(survey_text)
            survey_temp_file.flush
            Surveyor::Parser.parse_file(survey_temp_file.path)
            survey = Survey.where(:title=>'One language is never enough').first
            survey.nil?.should == false
            survey.translation(:es)['title'].should == "Un idioma nunca es suficiente"
          end
        end
      end
    end
  end
  context "quizzes" do
    include_context "numbers"
    it "parses" do
      expect(Survey.count).to eq(1)
      expect(SurveySection.count).to eq(2)
      expect(Question.count).to eq(3)
      expect(Answer.count).to eq(11)
      surveys =   [{title: "Numbers", display_order: 0}]
      sections =  [{title: "Addition", reference_identifier: nil, display_order: 0},
                   {title: "Literature", reference_identifier: nil, display_order: 1}]
      questions = [{reference_identifier: "1", text: "What is one plus one?", pick: "one", display_type: "default", display_order: 0},
                   {reference_identifier: "2", text: "What is five plus one?", pick: "one", display_type: "default", display_order: 1},
                   {reference_identifier: "the_answer", text: "What is the 'Answer to the Ultimate Question of Life, The Universe, and Everything'", pick: "one", display_type: "default", display_order: 0}]
      answers_1 = [{reference_identifier: "1", text: "1", response_class: "answer", display_order: 0},
                   {reference_identifier: "2", text: "2", response_class: "answer", display_order: 1},
                   {reference_identifier: "3", text: "3", response_class: "answer", display_order: 2},
                   {reference_identifier: "4", text: "4", response_class: "answer", display_order: 3}]
      answers_2 = [{reference_identifier: "5", text: "five", response_class: "answer", display_order: 0},
                   {reference_identifier: "6", text: "six", response_class: "answer", display_order: 1},
                   {reference_identifier: "7", text: "seven", response_class: "answer", display_order: 2},
                   {reference_identifier: "8", text: "eight", response_class: "answer", display_order: 3}]
      correct_answers = [{question_reference_identifier: "1", correct_answer_text: "2"},
                         {question_reference_identifier: "2", correct_answer_text: "six"},
                         {question_reference_identifier: "the_answer", correct_answer_text: "42"}]
      surveys.each{|attrs| attrs.each{|k,v| expect(Survey.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      sections.each{|attrs| attrs.each{|k,v| expect(SurveySection.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      questions.each{|attrs| attrs.each{|k,v| expect(Question.where(reference_identifier: attrs[:reference_identifier]).first[k]).to eq(v)} }
      answers_1.each{|attrs| attrs.each{|k,v| expect(Question.where(reference_identifier: "1").first.answers.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      answers_2.each{|attrs| attrs.each{|k,v| expect(Question.where(reference_identifier: "2").first.answers.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
      correct_answers.each{|attrs| expect(Question.where(reference_identifier: attrs[:question_reference_identifier]).first.correct_answer.text).to eq(attrs[:correct_answer_text]) }
    end
  end
  context "mandatory" do
    it "parses" do
      survey_text = %{
        survey "Chores", default_mandatory: true do
          section "Morning" do
            q "Did you take out the trash", pick: :one
            a "Yes"
            a "No"

            q "Did you do the laundry", pick: :one
            a "Yes"
            a "No"

            q "Optional comments", is_mandatory: false
            a :string
          end
        end
      }
      survey = Surveyor::Parser.new.parse(survey_text)
      expect(Survey.count).to eq(1)
      expect(SurveySection.count).to eq(1)
      expect(Question.count).to eq(3)
      questions = [{display_order: 0, text: "Did you take out the trash", is_mandatory: true},
                   {display_order: 1, text: "Did you do the laundry", is_mandatory: true},
                   {display_order: 2, text: "Optional comments", is_mandatory: false}]
      questions.each{|attrs| attrs.each{|k,v| expect(Question.where(display_order: attrs[:display_order]).first[k]).to eq(v)} }
    end
  end
  context "failures" do
    it "typos in blocks" do
      survey_text = %q{
        survey "Basics" do
          sectionals "Typo" do
          end
        end
      }
      expect { Surveyor::Parser.parse(survey_text) }.to raise_error(Surveyor::ParserError, /\"sectionals\" is not a surveyor method./)
    end
    it "bad references" do
      survey_text = %q{
        survey "Refs" do
          section "Bad" do
            q_watch "Do you watch football?", :pick => :one
            a_1 "Yes"
            a_2 "No"

            q "Do you like the replacement refs?", :pick => :one
            dependency :rule => "A or B"
            condition_A :q_1, "==", :a_1
            condition_B :q_watch, "==", :b_1
            a "Yes"
            a "No"
          end
        end
      }
      expect { Surveyor::Parser.parse(survey_text) }.to raise_error(Surveyor::ParserError, /Bad references: q_1; q_1, a_1; q_watch, a_b_1/)
    end
    it "repeated references" do
      survey_text = %q{
        survey "Refs" do
          section "Bad" do
            q_watch "Do you watch football?", :pick => :one
            a_1 "Yes"
            a_1 "No"

            q_watch "Do you watch baseball?", :pick => :one
            a_yes "Yes"
            a_no  "No"

            q "Do you like the replacement refs?", :pick => :one
            dependency :rule => "A or B"
            condition_A :q_watch, "==", :a_1
            a "Yes"
            a "No"
          end
        end
      }
      expect { Surveyor::Parser.parse(survey_text) }.to raise_error(Surveyor::ParserError, /Duplicate references: q_watch, a_1; q_watch/)
    end
    it "with Rails validation errors" do
      survey_text = %q{
        survey do
          section "Usage" do
            q_PLACED_BAG_1 "Is the bag placed?", :pick => :one
            a_1 "Yes"
            a_2 "No"
            a_3 "Refused"
          end
        end
      }
      expect { Surveyor::Parser.parse(survey_text) }.to raise_error(Surveyor::ParserError, /Survey not saved: Title can't be blank/)
    end
    it "bad shortcuts" do
      survey_text = %q{
        survey "shortcuts" do
          section "Bad" do
            quack "Do you like ducks?", :pick => :one
            a_1 "Yes"
            a_1 "No"
          end
        end
      }
      expect { Surveyor::Parser.parse(survey_text) }.to raise_error(Surveyor::ParserError, /\"quack\" is not a surveyor method./)
    end
  end
  context "helper methods" do
    it "should translate shortcuts into full model names" do
      parser.send(:full, "section").should == "survey_section"
      parser.send(:full, "g").should == "question_group"
      parser.send(:full, "repeater").should == "question_group"
      parser.send(:full, "label").should == "question"
      parser.send(:full, "vc").should == "validation_condition"
      parser.send(:full, "vcondition").should == "validation_condition"
    end
    it "should translate 'condition' based on context" do
      parser.send(:full, "condition").should == "dependency_condition"
      parser.send(:full, "c").should == "dependency_condition"
      parser.context[:validation] = Validation.new
      parser.send(:full, "condition").should == "validation_condition"
      parser.send(:full, "c").should == "validation_condition"
      parser.context[:validation] = nil
      parser.send(:full, "condition").should == "dependency_condition"
      parser.send(:full, "c").should == "dependency_condition"
    end
    it "should not translate bad shortcuts" do
      parser.send(:full, "quack").should == "quack"
      parser.send(:full, "grizzly").should == "grizzly"
    end
    it "should identify models that take blocks" do
      parser.send(:block_models).should == %w(survey survey_section question_group)
    end
  end
end