Over the past months, Platoniq has hamonised the inputs emerged from the CultureLabs meeting in Barcelona, where the team identified ethics and principles that will be leading the CultureLabs project.
Elena Silvestrini (methodology developer at Platoniq) describes the project methodology, that has been set and inspired on Platoniq expertise but also on "Design Justice" principles, by adopting a community centered design approach. What does it mean for CultureLabs?
The role of the facilitation is to manage the relations and to create a safer space where the different communities can work together and shape directions that would be taken, an encounter based on storytelling and participation.
CultureLabs was back in Athens!
On 5th and 6th of March 2019, after the kick-off meeting, CultureLabs went back in Athens. The meeting was held at the National Technical University of Athens (NTUA) by the project coordinator with representatives from all project partners.
During the meeting in Athens, the partners had a constructive discussion, covering all the aspects of project implementation and presenting the first results of the sharing knowledge, experiences, expertises and analysed the next steps. Partners focused on the first results of needs analysis of stakeholders in relation to the first structure of ingredients and recipes which will be the structural data of the digital platform.
The upcoming four pilots (and other planned activities) had a leading role: pilot organisers explained the methodology that will be followed in order to identify the target groups and their needs and the requirements of digital tools. The needs and input of participants should be taken into account from an early stage on; the pilots activities are expected to "fit" under the collaborative/co-creation/hosted approaches.
The partners continued discussing about the first reporting period to European Commission (EC) and furthermore they discussed about the first main dissemination event of CultureLabs project which will take place during the Internet Festival in Italy (October 10-13th).
A very fruitful discussion due to the active participation of the partners in an open discussion where each one could give their impressions on each particular activity, offer solutions and collaboration and work together on common implementation issues.
For further information about CultureLabs project progresses keep following our Magazine section!
SURPRISE is an art festival, a physical and digital art exhibition, and a participatory project at the same time that employs the power of contemporary art for social innovation purposes. SURPRISE is an international campaign that counts on the participatory and collaborative efforts of the artistic community, the private as well as non-profit organisations, and engages the public and art as a way of solving serious social problems. In this case, the social innovation efforts target the support of the homeless of Greece and KLIMAKA NGO's relevant programs for the homeless.
Every year, around 300 small format artworks are collected by the organisers of SURPRISE and then made available to the public for the amount of 50 € per piece. The price is deliberately set at an affordable range to allow everyone to support the effort. Participant-artists cover the entire spectrum of artistic practice: from discovery artists to globally established, as well as a significant number of international artists. There is, however, a catch: the artist's identity remains secret. The artworks are signed on the back, thus encouraging the audience to decide solely upon instinct and personal taste. While contributing to the cause, online and on site visitors of the SURPRISE exhibition of art have the opportunity to acquire an already valuable artwork or one that will increase in value over time. Either way, they will walk away with an artwork of their choice.
The SURPRISE project takes place every year and the earnings from the artworks' sales are donated to the Homeless Support Program of KLIMAKA NGO. The participatory project was first realized in 2009, and since then, more than 2,000 artists from around the world have joined the campaign, contributing their artworks to support our fellow humans.
The citizen interested in supporting this effort can visit www.artaz.gr/surprise which hosts the online exhibition every year to study the artworks online and note down the code numbers of their choice. New artworks are added on a daily basis up to the physical exhibition's opening.
For instance, in 2018, the physical exhibition of SURPRISE IX took place between 23-25 November at the «EARTH K44» space in Athens, Greece for the live viewing and sale of the artworks. The artworks are sold on a first come – first served basis. Several parallel events also take place during the physical exhibition, such as a silent auction of larger scale artworks that feature in the exhibition list, art games making available artworks, book sales and more.
Surprise X, 2019 – How can I participate?
SURPRISE X physical exhibition will take place in Athens, Greece, on Friday 18 October 2019.
There is currently an open call to artists interested in using their talent to bring positive change for donations of artwork to support the cause (help the homeless of Greece). Prior to the exhibition at the physical space, the artworks will be exhibited online. The online version of the exhibition starts the 15th September 2019.
Samples of artwork can be sent at info@artaz.gr, while more information about this can be found at http://www.artaz.gr/surprise/item/463-surprise-x-call-for-artists.
Each edition of SURPRISE features around 300 artists but the 10th (2019) anniversary edition is going to be even bigger by establishing artwork collection stations internationally and inviting artists from across the world to join the cause.
What can CultureLabs learn from Surprise?
just like CultureLabs, it is using a digital cross-cultural platform and digital tools (i.e., the online exhibition of the project) to enable participation of all involved artists and make their artwork widely available to a broader audience, while creating bridges between art scenes around the world.
In CultureLabs, we are exploring approaches, methodologies and we are implementing digital tools to facilitate the organization and implementation of projects like SURPRISE and enable new similar participatory projects to be carried out even by non-experienced but willing organisations. We welcome all your feedback, ideas and involvement in any aspect of our project.
You can contact us at info@culture-labs.eu!
What is "Our Migration Story"?
"Our Migration Story" is an online teaching resource, launched in 2016, to provide teachers with resources and tools to engage students with lessons on migration in Britain. It uses unique open source technology to widen access to original academic research and be used by anyone interested in learning about Britain's migration history.
1900 – 2000s: 20th & 21st Century Migrations.
Each category is introduced through a short video and an overview text that covers the general characteristics and the major movements of that period. This is followed by a collection of untold stories of specific communities and individuals arranged in the form of a timeline. Each story is written by one of the collaborating historians and is supported by images and personal stories and provide links to additional references.
One of the most interesting aspect is the Questions and Student Activities section at the end of each story which provides provocative questions and classroom activities that are, in most instances, related to contemporary issues that students can relate to. Additionally, the Teaching Resources area provides teachers with lesson plans and classroom activities.
The "Our Migration Story" project is a collaboration between the Runnymede Trust which is an independent race equality think tank, the University of Cambridge and the University of Manchester. It is funded by the Arts and Humanities Research Council and builds on previous research and two other projects – Making Histories and Bangla stories.
These projects involved engaging with young people to explore, collect and document stories around migration. "Our Migration Story" was created as a response to the questions that arose around race and inequality in education in contemporary Britain and more specifically with the content of the current national curriculum. Despite its straightforward approach, the project uses innovative methods to tackle the exclusion of minor ethnicities and communities from migrant backgrounds.
What can CultureLabs learn from "Our Migration Story"?
Throughout the different project stages, the team worked collaboratively with both individuals and stakeholders; teachers, academics, local historians, policymakers, exam boards, teachers' unions, and teachers' training boards. The topics included in the website were chosen through round table discussions. In addition, the team worked directly with schools to engage students to build the content and test the developed resources. This was critical in building a sense of ownership and will make the project sustainable beyond its expected timeframe.
The long term aim is to change the national curriculum to include mainstream race and diversity however the organisers acknowledged both the complexity and time required to achieve this. Their initial aim was to encourage teachers to work within the existing boundaries, while continuing to advocate for a systematic change. As a result, the needs of the end users were identified in order to be met in the best possible way. Surveys and focus group discussions with teachers revealed that many teachers had the motivation to be part of the change but did not have the time or the capacity to do all the research required to develop teaching resources. As a direct result, the project provided ready-made resources for teachers to use.
The website uses digitised museum and archive collections as resources and links those objects with personal stories in an interesting way that brings those collections to life and in context.
The addition of additional content to the website is something that the organisers are considering, however, their priority is to focus on the dissemination and promotion of the current resources.
"Our Migration Story" project constitutes an excellent example of innovation in its use of technology for social inclusion. At CultureLabs we are looking forward to launching our platform, where we will be able to add the "Our Migration Story" project as one of our ingredients; it is a great example and a useful resource!
Over the past few months, Sheffield Hallam University led an investigation to identify the functional requirements that the CultureLabs platform should have. The perspectives of both the members of the consortium and of relevant external stakeholders were gathered. The study comprised of a survey and interviews.
Even though internal and external stakeholders have different needs, motivations, and previous knowledge, the investigation revealed a common vision on four distinctive features.
First, searching for and accessing useful data were mentioned as one of the most important characteristics for a digital platform, especially one that allows users to find methodologies, tools and possible collaborators. Moreover, both groups emphasised the need for a highly interactive way of sharing, editing, and presenting data and content. This should be underpinned by a principle of reciprocity: taking and giving back.
A second important feature is fostering better communication between collaborators. In the context of managing participatory activities, this stood out as a means of building a network of collaborators and partners more efficiently.
Thirdly, gathering feedback is confirmed a crucial part of managing and conducting participatory projects, and CultureLabs has the opportunity to propose digital solutions that can overcome the limitations of existing established methods of getting feedback, such as online surveys.
Finally, both internal and external stakeholders noted that support for decision-making would be appreciated. This could include the use of voting and scheduling features in the platform. This was seen as a means of facilitating collaboration and gathering participants' opinions as well as a way of having a centralised platform to keep track of a project and not relying on a variety of external tools (e.g. Doodle, Skype, etc.).
Whilst the two groups of participants represented different perspectives, their answers and elaborations highlighted key features to facilitate interaction, collaborative processes, and the management of participatory projects that CultureLabs will attend to.
If we say Black Friday the mind goes to the hectic, and sometimes compulsive, shopping day of the fourth Friday of November.
But this year we collected an alternative, that took place the third Friday of December. A way to escape from the Christmas hustle and bustle, a peaceful moment to listen someone else stories: that's our favourite "Black Friday", organised by MALTE – Musica Arte Letteratura Teatro Eccetera, Hexperimenta and Casa delle Culture in Ancona.
The last Friday 21st December, in the main pedestrian and crowded shopping street of Ancona, a group of migrants decided to give as presents to the interested citizens their Christmas stories. 7 locations were positioned at 100mt distance each other, with two facing tools, one for the migrant and the other for visitor. Who sat there could listen a short recorded story through cuffs, without interacting with the silent teller.
"Black Friday in the United States is the day that starts Christmas shopping. We have also decided to invent a Black Friday, made of gifts, packages and reciprocity. The difference is that our Black Friday is really black. And that for us the gifts are not objects, but people, real people, of flesh and blood, who tell us their Christmas, their Christmas, and they do it without asking anything in return, as a gift" said the organisers.
What does CultureLabs can take from this experience?
… so it is a perfect recipe for our CultureLabs platform!
If you would know more about it, just following our upcoming pilots activities.
What can the visit of a Maasai delegation to the Pitt Rivers Museum teach CultureLabs?
The Pitt Rivers Museum hosts the archaeological and anthropological collections of the University of Oxford, United Kingdom. Amongst these are displayed more than 500,000 items arranged by object type rather than by time or geographical region. Many of the collections are populated by objects "acquired" by colonial functionaries, missionaries, and anthropologists during the British Empire.
In what Koshy's defines as part of a "process of cultural decolonisation", the Maasai delegation has been invited to Oxford to help the museum rectify errors in the cataloging of the Maasai collection and providing more accurate information about the object hosted by the Pitt Rivers Museum.
As it can be read more thoroughly in the article, the visit allowed to identify a number of problematic issues within the collection and within the broader museum acquisition procedures. To the great astonishment of the Maasai delegation, within the items in the collection were included fundamental elements of the Maasai culture (for example the orkatar bracelet or the isurutia neckless) which are regularly transmitted within families and never given up to external parties. This suggests that the acquisition process of the elements is likely to have happened through forceful measures, if not violent. Of the 60 objects examined, the Maasai came across five that are sacred, which "they would not expect to find elsewhere apart from within their community".
This episode left us asking ourselves questions that we consider very important for the CultureLabs project we are part of and for the participation methodology that Platoniq brings forward in this context. CultureLabs intends on developing participatory projects across different European countries (Italy, Finland, and UK) which promote social cohesion through the means of Cultural Heritage.
How to account for and try to equilibrate power imbalances between the different parties involved in the co-creation process?
Who gets to frame what counts as "Cultural Heritage" and how will the sense-making work? How to be self- aware of the power in this sense-making process?
Who will ask questions framing the development of the participatory projects? How and how often are the protagonist of the projects involved?
How to move away from tokenism and neo-colonising and move towards decolonising memory and archiving processes? How to transform Cultural Heritage institutions?
How to avoid harm and how to create conditions for safe(r) spaces whilst involving different communities in storytelling and sharing dynamics?
How to ensure that the participatory projects are centered on self-representation as much as possible and how to create the conditions for a safe(r) process in telling one's own story?
How can the participatory processes avoid exoticising Cultural Heritage from different countries and fixing them into time?
Who is accountable for the responsibility of the project design and how does this accountability process work?
We are exploring approaches and methodologies to answer these questions as we proceed with CultureLabs and more participatory projects. If you have any ideas on how this can be done or would like to chat to us about it, please get in touch with us at info@culture-labs.eu! The Platoniq team, that is part of the project, will take care of your feedback!
Born as a national short film competition it has become, over the course of 15 editions, one of the most awaited events by authors and lovers of auteur cinema in general and, in particular, of civic engagement. For a week, Ancona hosts directors from all over Italy and the world with projections, meetings and master classes.
How does it concern #CultureLabs?
Every year, COOSS (one of CultureLabs partners) devolves a cash prize and a plaque for the best short for social engagement.
In the XV edition COOSS devolved the prize to "The View From Up Here" by Marco Calvani (please find here the trailer: https://www.youtube.com/watch?v=GtjdC-DCBgE), touching the theme of integration and acceptance of social diversity, described in the story of a Syrian girl and her Italian neighbor.
Citizens, Youth and Prison Inmates of the penitentiary institutes of Marche Region.
Social Engagement has a key-role for CortoDorico since it involves and actively engages the community, as well as disadvantaged subjects in the shorts assessment and in the winners' selection.
Corto Dorico is designed and managed by the cultural association NieWiem, supported by local authorities (Municipality of Ancona, Marche region), national bodies (Mibact – General Directorate for Cinema) and other stakeholders (Cooss Marche, Università Politecnica delle Marche, Amnesty International Italy).
Professor Luigina Ciolfi of Sheffield Hallam University presented CultureLabs at the symposium "Feeling the Past – Empathy, Heritage and the Museum" that took place at MShed in Bristol (UK) on December 4th, 2018.
The symposium was organised by Professor Steve Poole and his team in the Digital Cultures Research Centre at the University of the West of England (UWE). The event was part of the "Heritage Empath" project, funded by the UK Arts and Humanities Research Council. The project explores the importance of empathy and emotional involvement in experiencing heritage, and how digital technologies can convey and support such experiences. The project's final installation, "Of Home and Each Other", is an interactive storytelling experience on the theme of migration and empathy in the streets of Bristol, written by Zodwa Nyoni and realised by Splash and Ripple.
What was the thematic focus of the Symposium?
"Visitors to museums and sites of heritage are frequently invited to immerse themselves in the lives of past generations. With a fresh emphasis on emotion, feeling and personal perspective, heritage professionals have sought new ways to engage audiences with affective stories about objects, people and places, bringing the past to life, making it more familiar, and making it matter to audiences. But empathy is much easier to talk about than it is to curate. Is it possible to step into the shoes of long dead historical actors and see or feel the world as they did? How have heritage sites and museums built emotional content into the visitor experience, and how have visitors reacted?" (from the Symposium programme).
Several invited speakers presented their work on the day, linking research in several heritage contexts in the UK and overseas that examines emotionally resonant visitor experiences.
Professor Ciolfi spoke of the vision of CultureLabs and of the challenges in understanding and supporting the process of engagement of migrant communities into the work of museums and other cultural institutions. While the importance and value of culture and heritage for social inclusion, empathy, and emotional wellbeing are broadly recognised, CultureLabs is developing knowledge and tools to make sure that such engagement can be realised and benefit both migrant and refugee communities and the general public so to engender dialogue and empathy.
In November the Plenary Meeting of the CultureLabs consortium gathered representatives of all the partners together in Helsinki to go over the progress and polish the details of the future plans of the project. The topics of the meeting held at the premises of the Finnish Heritage Agency ranged from the structure and suggested wireframes of the recipe creator and search functions of the CultureLabs platform to possible ways of promoting and establishing new collaborations with other projects and stakeholders.
During the meeting, the consortium members reached a general agreement on some of the main wireframes related to important functionalities of the CultureLabs platform, the metadata describing the published resources, and the types of search filters to be used for searching for past and ongoing participatory activities (recipes), cultural resources (ingredients), etc. The outcomes of the meeting will inform the implementation of an initial architecture and prototype of the CultureLabs platform that is currently under development.
The partners also explored the social and historical contexts of migration in Europe and their socio-cultural implications in today's societies. Ideas were shared on how to communicate about these issues by integrating them with the activities and objectives of the CultureLabs project. One of the central topics were the surveys that will be started soon covering institutions of various sectors as well as communities with migrant background in order to find out about their experiences of participatory projects and their needs.
The Plenary Meeting was concluded with a guided tour in the inspiring exhibition Story of Finland at the National Museum of Finland (https://www.kansallismuseo.fi/en/exhibitions/suomen-tarina), which represents a new innovative way to build and curate a museum exhibition and provided great example of how digital technology can be used to add layers to the stories of an exhibition.
The meeting provided the consortium with useful feedback from each other and fresh, collaboratively cooked ideas to continue the work with.


Trip cancellation insurance is designed to protect you from unexpected emergencies which make it impossible for you to go on vacation, and from problems which might occur on your trip. We strongly recommend our clients to take out travel cancellation expenses insurance which in the event of illness or death before departure, covers up to 80% of the cancellation costs. You can take out insurance easily and conveniently over the Internet.


I now have a field recording podcast over on Anchor.FM. I've already put up quite a few field recordings there and that's where I'll be publishing more recordings as time goes on.
I've been field recording for quite a few years, and if I'm honest it's an on and off sort of thing, but of late I've been committing more time to it. It is one of those things I often forget to do, or I'm never quite prepared for it. Sometimes I don't have the right equipment with me, or in fact any equipment, but when I do I really like to capture interesting sounds and textures, environments as well.
I did use RJDJ to make recordings of a more augmented nature, but since they withdrew their service I've started to do more 'conventional' field recording if that term makes any sense at all.
I used to use FreeSound quite a lot some years ago and put some of my field recordings up there, but I haven't been back to the site in ages now. I really should check it out again as it was a great place for field recordings and sounds.
They're all good apps for recording on the go, and I especially used to like FIRe Studio.
In addition to Anchor there are still some over at SoundCloud. I hope you enjoy them.


We are here to share with you some of the coolest 3d wallpapers Free Download. 3d wallpapers are generally computer generated and are used as desktop wallpapers.
You can use these 3d wallpapers for desktop in Windows 7, Windows Vista, Windows XP, Linux and even MAC OS.
The 3d Wallpapers are a part of Free Download series of Posts on NPXP.com So come back for more 3d wallpapers in the coming days. I will be posting some of the best 3d Wallpapers in different categories like fruits, birds animal, abstract and more.
The 3d Wallpapers are taken from different websites and the download link will be mentioned just below the free 3d wallpapers. So here are some cool 3d wallpapers for you to download for free and use it on your Desktop!


We own four alpacas. Not llamas, alpacas. Inevitably someone will come to the house that's never been there, a delivery person or door knocker, and they'll say, "cool llamas!" And then we have to correct them. You really can't blame them; llamas are more well-known than their smaller cousin, but it's always amused me how often we have to correct people. Cut to a couple of weeks ago. I wanted a new design side project to work on and for some reason I'd latched onto the idea of an infographic -- I'd never done one, and I thought it would be a good stretch of pure graphic design muscles. I thought about a topic I was passionate enough about to research facts on, and it wasn't about alpacas (despite the fact that I'm passionate about them enough to own four of them). When I mentioned my desire to do an infographic to my husband, he immediately said, "oh! The differences between alpacas and llamas! Since everyone thinks we have llamas." What a perfect topic, I thought, and shelved my other idea for another rainy day design project.
I had our friends and mentor farm Jo's Fleece Fields check my facts on this one. Everything we know about alpacas and llamas we've learned from them. If you'd like to see a much bigger version of the picture than what you get when you click, you can see the full size image on my Springpad notebook, "Finished Design Projects."


At Quality Home Services, our expert staff understands the multiple benefits of soft water. However, it is estimated that around 85% of US homes have hard water. Specific underground minerals such as calcium, magnesium, limestone and chalk are absorbed into water prior to being pumped to your home. Aside from testing, how can you tell if you actually have hard water?
Whether it's washing your dishes, clothes or even yourself, hard water leaves behind minerals. The buildup can make it difficult to clean and appliances such as washers, dryers and faucets to work harder. Along with the damage it causes, your hot water heat can work overtime, resulting in a higher bill. With 30 years of experience, we are dedicated to being the best provider of Fresno water softener systems that will improve the overall quality of your home.
Contact us and schedule your free estimate today!


text:
The A- and B-class destroyers were a group of 18 destroyers built for the Royal Navy during the late 1920s, with two additional ships built for the Royal Canadian Navy. The British ships were divided into two flotillas of eight destroyers, each with a flotilla leader.

Design and description
The A-class design was derived from the 1926 prototypes  and  for the 1927–28 Naval Construction Programme. The initial staff requirements were unrealistic and would have resulted in a much larger, unaffordable ship; they were scaled back, both to reduce the size of the ship and to save money. Nonetheless, the design had an improved gun armament, heavier torpedo armament, and greater range, at the cost of  of speed, in comparison with the prototypes. The As were fitted with the Two-Speed Destroyer Sweep (TSDS) minesweeping gear and only had a residual anti-submarine ability while the Bs were equipped with Type 119 ASDIC (sonar) and had a full complement of depth charges, but could not use the TSDS. This was the beginning of the Admiralty's policy of alternating TSDS and anti-submarine capabilities between destroyer flotillas. The ships displaced  at standard load and  at deep load. They had an overall length of , a beam of  and a draught of . The A class had a metacentric height of  at deep load. The ships' complement was 138 officers and ratings as built, but increased in size up to 162 during the war.

The destroyers were powered by two Parsons geared steam turbines, each driving one propeller shaft, using steam provided by three water-tube boilers equipped with superheaters. Five of the As and all of the Bs had Admiralty three-drum boilers that operated at a pressure of  and a temperature of  while Ardent and Anthony were fitted with Yarrow boilers of  pressure at the same temperature. Acheron was given experimental Thornycroft boilers that had a working pressure of  and a temperature of  to examine the weight and economy savings. Her specific fuel consumption was reduced from /hp/hour in her sisters to /hp/hour, although she was plagued by mechanical problems for her whole life. In the event the trials were inconclusive, and the Admiralty continued to use the lower-temperature and pressure Admiralty three-drum boiler until the  of 1942, nearly ten years after other major navies began to use higher-pressure and temperature boilers. The turbines developed a total of  for a designed speed of  and the ship exceeded that during their sea trials. The destroyers carried a maximum of  of fuel oil that gave them a range of  at .

All of the ships had the same main armament, four quick-firing (QF)  Mark IX guns in single mounts with enlarged gun shields, designated 'A', 'B', 'X', and 'Y' from front to rear. Although the A class were intended to be equipped with gun mounts that could elevate up to 40°, and 'B' gun on a high-angle mount capable of 60°, all four guns ultimately had a maximum elevation of 30°. They fired a  shell at a muzzle velocity of  to a range of . Each gun was provided with 190 rounds. For anti-aircraft (AA) defence, the A- and B-class ships carried two  QF two-pounder Mark II AA guns mounted on platforms between the funnels, each with 500 rounds. They were fitted with two quadruple mounts for 21-inch (533 mm) torpedo tubes. The A-class ships were initially going to be fitted with two throwers and four chutes for eight depth charges, but they interfered with the TSDS equipment so the throwers, one chute and two depth charges were removed. The Bs were equipped with two throwers and one rack for twenty depth charges. While not initially fitted with ASDIC, space was reserved for it, and at least some of the As received it beginning in the late 1930s.

The fire-control system for these ships was little advanced over their First World War-era predecessors. A pedestal-mounted, manually operated Destroyer Director Sight and a separate  rangefinder positioned to its rear were situated above the bridge; the director transmitted training angles and firing impulses to the main guns, which fired at fixed elevations. They had no capability for anti-aircraft fire and the anti-aircraft guns were aimed solely by eye. No fire-control computer was initially installed, but an Admiralty Fire Control Clock Mark II was retrofitted after it had been proven in the subsequent C-class destroyers.

Canadian ships
The two Canadian ships (Saguenay and Skeena) were designed to be of a similar performance to the A-class ships to allow them to tactically combine. More flare was given to the bow to keep it drier and the forward part of the hull was strengthened to withstand ice. Their metacentric height was increased to allow for the build-up of ice and snow on the upperworks and they were  shorter than their British counterparts. Although the ships had an additional  of fuel,  fewer horsepower and lacked superheaters for their boilers, they had the same range and speed as their brethren of the A and B classes. They displaced  at standard load and  at deep load. The ships were built by John I. Thornycroft & Company in Woolston, Hampshire and had the broad, slab-sided funnels characteristic of that builder.

Flotilla leaders
 was built to an enlarged design to accommodate the commander of the destroyer flotilla (Captain (D)) and his staff, some 47 additional officers and ratings. The ship displaced roughly  more than the private ships ( at standard load and  at deep load); she was  longer overall and had a beam  wider. She shipped a fifth 4.7-inch gun between the funnels, which forced the two-pounders to be repositioned abaft the rear funnel, and was not fitted with TSDS. To compensate for her greater size, Codringtons oil tanks were increased by  and her turbines were rated at  to give her the same range and speed as the private ships, but she proved to be significantly faster as she made  during her sea trials. However, the increased length made her somewhat unhandy, having a turning circle much greater than the standard A class, which complicated manoeuvres with her flotilla.

Unlike Codrington, Keith was built upon the same hull as her sisters to save money and to make her tactically identical to her flotilla-mates. The initial proposal was to enlarge the aft deckhouse to make room for the Captain (D) and his staff at the expense of 'Y' gun and the TSDS gear, but the gun was reinstated while she was under construction. The ship was too small to accommodate the entirety of the staff, and Blanche was fitted as a divisional leader to carry the surplus. Keith was  heavier than the private ships at standard load and nearly  heavier at full load ( and , respectively) and carried 19 additional officers and ratings.

Wartime modifications
The initial wartime modifications were limited and mostly related to the survivability of the crew, aside from the addition of 50 rounds per gun of 4.7-inch ammunition and the increase of depth charge stowage to 42 (the Canadian ships carried 33). Beginning in May 1940, the after bank of torpedo tubes was removed in most ships and replaced with a QF  20-cwt anti-aircraft gun, the after mast and funnel being cut down to improve the gun's field of fire. Of the early war losses, only Codrington and Acheron received this modification before they were sunk. By October, all of the surviving A-class ships plus Beagle, Boadicea, Boreas and Brilliant had been modified and the rest of the Bs had received theirs by April 1941.

Beginning in 1941, most ships had 'Y' gun and the TSDS gear replaced by racks and throwers for a pattern of 10 depth charges, with stowage increased to 70 charges. Their light AA armament was augmented by a pair of QF Oerlikon  guns, one each abreast the bridge, and a Type 286 short-range, surface-search radar, adapted from the Royal Air Force's ASV radar, was also added. The early models, however, could only scan directly forward and had to be aimed by turning the entire ship. The Canadian ships replaced their two-pounders with a pair of quadruple  machine guns and were not fitted with Oerlikons by 1942.

Late that year, some of the surviving ships were further modified into what became known as escort destroyers. These ships had either 'A' or 'B' gun replaced by a Hedgehog anti-submarine spigot mortar. Achates, Beagle, Boreas, and Bulldog were among the first ships to be so converted. Around this same time many ships had their Destroyer Director Sight and rangefinder exchanged for a Type 271 target-indication radar. Beagle and Bulldog were later fitted with a two-pounder bow chaser to engage German E-boats in the English Channel while Boadicea received two elderly six-pounder (57 mm) Hotchkiss guns to deal with U-boats on the surface at close range.

Beginning in 1943, the three-inch gun was removed to allow for the installation of a Huff-Duff radio direction finder on a short mainmast; the aft torpedo tubes were sometimes reinstalled. The single 20 mm guns abreast the bridge were replaced by Mark V powered mountings for twin weapons later in the war, the singles replacing the two-pounder or .50 caliber guns amidships, with a further pair of Oerlikons that replaced the searchlight between the torpedo tubes.

Ships

A-class ships

B-class ships

Service
The class saw much service in the Second World War, being involved in convoy protection and anti-submarine warfare in home waters and the North Atlantic. Seven of the eleven ships of the class were sunk in World War II.  and  were sunk on 8 June 1940 while escorting the aircraft carrier HMS Glorious by the German battleships  and  west of Narvik at the end of the Norwegian campaign. Codrington was sunk by German air attack at Dover on 27 July 1940.  was sunk by a mine off the Isle of Wight on 17 December 1940.  was sunk by two large German heavy cruisers,  and Lützow while defending an Arctic convoy in the Battle of the Barents Sea.  was so badly damaged when the ammunition ship  blew up on 4 August 1943 at Algiers that she could not be repaired and was towed to Taranto and paid off. Skeena was wrecked in a storm off Iceland on 25 October 1944. Saguenay was heavily damaged in a collision with the merchant ship Azara and was consigned to the role of a training ship after being repaired.

The surviving ships were worn out from war duties and were scrapped soon after the war.

Notes

Footnotes

References

Destroyer classes
Ship classes of the Royal Navy

redpajama_set_name: RedPajamaWikipedia


The farm kitchen chef works forty (40) hours a week making fresh prepared food for the farmers markets and managing the all aspects of the farm kitchen. Other tasks include: lacto fermenting, inventory recording, communicating with farm crew, maintaining a clean and functional kitchen, and managing other kitchen workers.
Previous culinary experience is required. We are looking for a motivated, individual who has experience with seasonal vegetarian cooking and wants to be part of our farm team. We have a wonderful crew on our farm and we all enjoy cooking and sharing meals throughout the season.
This job starts in mid May and runs through mid November. Work is from Monday through Friday, 8-4, with some Saturdays during the busy farm season.


text:
Vinni Bay, alumna, MSc International Marketing
Film producer and actress Vinni Bay uses her marketing background to give her film production company Bay Universal Entertainment, a competitive edge
Film producer and actress Vinni Bay followed her mum's advice to get an education first and now uses her marketing background to give her film production company, Bay Universal Entertainment, a competitive edge.
I know it sounds odd, but I've dreamed of being a film producer since I was four years old.
People always assumed I wanted to be an actor, but although I do enjoy being in front of the camera I really love the hard work that goes into producing a film, and being the one to make it happen. I'm a natural organiser and co-ordinator.
Film career
My passion is action films that are driven by a strong story, particularly if there are powerful female roles. I'm currently working on a film I wrote that's set in Iceland and is partly about climate change. I'm also working with a few Chinese stunt artists on a short film called Fight of Honour that came about after I had contact with some of Jackie Chan's own stunt team members. There is always something great happening when I'm talking to people about my film ideas – if I can enthuse someone and get them to believe in me and the film project it's the best feeling. It amazes me how you can make these connections with people and start working towards a shared vision, even if you come from totally different cultures. This is the future, I believe.
Marketing background
When I set up my film company I wanted to make it different from the rest and my marketing background has been crucial in achieving this. Not only can I make films, but I can also market them and bring in partners to help me distribute them across different territories. You need a lot of investors on board to make a film – especially a feature film – and that's much easier to achieve if they can see you have a strong and secure way to sell your products. At the moment, I'm working really hard to build up a strong network of film partnerships and to reach as many potential investors as possible.
I write, act, produce, direct, do my own stunts and market my films. I am Bay Universal Entertainment, basically.
Before I started the company, I worked as an animation producer at The Animation Workshop in Viborg to get more insight into how to work with animation and master both this and live action films. I knew I'd be a one-woman band, so I wanted to have a good strategy and understand fully what was involved. I am not a fan of unpaid jobs in the film industry and even though I don't pay myself a wage yet and work as a marketing co-ordinator I have a mission. Film is well-known as a risky business and projects can take a long time to come to fruition. It's frustrating sometimes – I always want things to happen faster! – but I just have to tell myself to chill out.
Base in London
Everyone thinks you have to go to Hollywood to make it.
When I did my BA in Marketing at the International Business Academy in Kolding, Denmark I met Ian Charles, who's a visiting professor at LSBU. He said I should go to LSBU because not only was the marketing course excellent, but I'd have fantastic access to the film and theatre world from a base in London. And it's true: you really don't need to go to LA, you can take the route that fits you the best like I did.
Studying at LSBU
Studying at LSBU was a very important experience for me as it was the first time I was able to bring the film angle into my studies and business life. Almost all of my lecturers had some kind of connection with film or theatre and my teachers helped me find film company examples for some of my case studies. For my dissertation [on how to make the Danish film industry more commercially successful] I interviewed people at 40 different companies around Europe and that was also a great way to start getting my name known in the industry. In fact, I was recently talking to a friend of mine at Lucas Film in the US and he was aware of me from those original contacts I'd made in Europe.
First film
I started to write my first film on Post-it notes on the wall of my dorm room at LSBU.
I have since made a short version of it called Cortex of Perception, which is almost finished – we are just waiting for the visual effects team to do their work. It should be released in 2019 and I plan to work with distribution partners to get it screened at film festivals around the world. A short film like this can act as a calling card to help people in the industry understand our brand and our vision of making films. If it were to do well and win an award it could bring in some serious investors for future projects.
Big dream
My advice to anyone with a big dream is to go for it. Don't be held back by fear of making mistakes. Mistakes are how we learn and how we become better and tougher. Never, never, listen to negative thoughts; just keep going!

redpajama_set_name: RedPajamaCommonCrawl


Credit union officials believe the NCUA is better equipped to regulate credit unions than the CFPB.
Debate continues over who should enforce consumer protection laws for the largest CUs.
The NCUA—and not the CFPB—should enforce consumer protection laws at credit unions, trade groups told the bureau.


text:
los angeles airport photography (1)
1 postcard : color ; 14 x 9 cm. (1)
1 postcard : color ; 9 x 14 cm (1)
1 sheet (1)
lowe, mount (los angeles county, calif.); (2)
mount lowe railway (2)
del rey players loyola university of los angeles (1)
los angeles (calif.) (1)
los angeles chamber of commerce (1)
merchandise displays -- california -- los angeles public buildings -- california -- los angeles chambers of commerce -- california -- los angeles commerce -- california -- los angele (1)
pacific electric railway company mount lowe railway (1)
railroads -- california -- los angeles county railroad bridges -- california -- lowe, mount (los angeles county); scenic railways -- california -- lowe, mount (los angeles county); mountains -- california -- los angeles county (1)
circa 1960s (1)
All fields: dramatic
Frank Sullivan and students at poetry reading program
Universities and colleges--Faculty; Students; Summer schools
Sederias playbill, 1916
"Sederias": A scriptural play by The Dramatic Society of St. Vincent's College in St. Joseph's Hall, Friday Evening, May 12, 1916.
Theatrical productions; College students; Student activities; Chapels; College campuses--California--Los Angeles
"Everyman" theater production in the Sacred Heart Chapel.
Scene on Mt. Lowe Division Pacific Electric Railway, Los Angeles, Cal.
Scenic railways--California--Lowe, Mount (Los Angeles County); Railroad bridges--California--Lowe, Mount (Los Angeles County); Mountains--California--Los Angeles County;
A view of visitors on a railcar descending along the Scenic Railway on Mt. Lowe in Los Angeles, California. The tracks wind around a steep rock face and over a wooden bridge across a small ravine.
On the Road to Alpine Tavern, Mt. Lowe Division, Pacific Electric Ry., Los Angeles, Cal.
Railroads--California--Los Angeles County; Scenic railways--California--Lowe, Mount (Los Angeles County); Mountains--California--Los Angeles County;
A view of the tracks of the Mt. Lowe Railway as seen from a viewpoint above the horseshoe curve.
Circular bridge from track below, Mt. Lowe, California
Railroads--California--Los Angeles County; Railroad bridges--California--Lowe, Mount (Los Angeles County); Scenic railways--California--Lowe, Mount (Los Angeles County); Mountains--California--Los Angeles County
View of a railcar and a circular bridge along the scenic railway on Mount Lowe in Los Angeles, California.
The Chamber of Commerce, Los Angeles, Cal.
Merchandise displays--California--Los Angeles; Public buildings--California--Los Angeles; Chambers of commerce--California--Los Angeles; Commerce--California--Los Angele
Interior view of exhibition room at the Los Angeles Chamber of Commerce, displaying arts and crafts, plants, fruits, and an elephant.


Brown Coat Tactical's 2 shot Velcro attachment is perfect for slug changeover or quick loading 2 shots during a competition. Used in conjunction with our 6 shell holder, you can easily distinguish between shot and slug. Also this shell holder is ideal for shooting competitions, allowing you to quickly load 2 extra shots while transitioning between targets or stations. Placement right next to the ejection port makes loading lightning fast. Whether it's hunting, shooting, or home defense; Brown Coat Tactical has your six.
Our shot shell changeover holders are made with one layer of heavy weight scuba webbing, poly-elastic webbing for a more durable hold, heavy nylon thread, and hook velcro. Measures approximately 2.25"x2".
Our new shot shell changeover holders are made with one layers of heavy weight scuba webbing, poly-elastic webbing for a more durable hold, heavy nylon thread, and hook Velcro. Measures approximately 2.25" x 2".
These are nice and small to fit extra shells where you might not have room otherwise to fit a fullsized 4 or 6 shotshell holder.
Same great quality feel as the bigger shell holders with nice and tight elastic. Shells are not going to slip off while your firing your firearm.
Absolutely the best quality, I did a lot of research on shotgun shell cards and I truly made the best choice from Browncoat Tactical. Thanks from a fellow Vet. Hope to meet You one day.
The quality & workmanship is nothing short of outstanding! Used the 2 shell carrier to mount on the right side of the receiver on my Mossberg Shockwave. It fits perfectly and goes with the matching 5 shell carrier that's mounted on the left side of the receiver. Buy this product with confidence.
Great way to have 2 shells ready at hand.


Anyone ever see or hear of non members who do attend ward functions?
Lots. Generally relatives, but sometimes friends, especially kids.
My daughter even just told me about her friend who was even asked to be on institute council this semester though he is the first non member to be on the council at this university.
I say "any activity to get them inside the building." Many of us noticed something special-- a unique feeling about the dedicated building, and especially the people, the first time we walked into the Church building. My wife and I later joined the Church of Jesus Christ of Latter-day Saints and never looked back.
Yes, in just about every ward I have ever lived in.
We let them in but make them wear a scarlet "N" to designate their nonmember status.
What did you do before joining the religion, did you have kids before you joined?
Ohh, would someone like me get his in rainbow colors? Fuscia? I want mine to be cute!
No children at the time. We were just a couple newlyweds. We were pretty young, so maybe we were the kids. That was 45 years ago.
In a way I don't blame you, esp. if you clicked with the ward. Two newlyweds who probably liked kids? Yeah, big suprise you meshed with the religion. Read this ones somewhere, 3 classes of people join most flavors of the Christian religion, the hatched, matched and dispatched, the likes of me? Not so much.
Actually, it was a somewhat noisy ward. The children seemed a little unruly. I had grown up in a Lutheran church, where children were kept in a windowed room at the back of the chapel. We thought "When we have kids, they will sit reverently." Yep. That's what we thought. But, as you say, we did click with the ward, and every ward thereafter.
Yeah, that i just will not tolorate, i cannot stand unruly children. Then again, i like men as well as women so i get to opt out of that extensive hassle. The irony, was baptised lutheran as a child, wish they still taught german culture and language like they used to. At least the Germanic beliefs are coming back, thats slowly filling the void left by Protestantisms decline.
Have to ask, the Lutheran heritage, German or Nordic?
Deutcher volker uber alles, Gott ehre und Vaterland! Wotan mitt uns!
Lavina Fielding Anderson, who was one the September 6 who was excommunicated in 1993, has continued to be active in her original ward going on twenty five years.
My LDS ward, by accepting me, allowing me to serve where I can, and respecting what I can offer has, in significant ways, canceled the exclusion that usually accompanies excommunication. They've helped me stay Mormon."
I'm with you. I love Germany and the German people. I lived there about a year and a half back in the late '60s. I realize that was a long time ago, but it doesn't seem so long ago as I think about it. Good memories.
* Credit to Wikipedia for information on Odin and his posterity.
Ah, someone who knows our gods, hail friend. Vidar, one of Odins sons was always my patron. Not quite as strong as Thor, but a lot smarter, about as smart as the Allfather. He's the god of silent retribution, he hangs on the outskirts of society, the boarders between civilization and the wild. His rune is the Hooksangle, the wolfhook. At the end of time after Fenrir devours Odin Vidar will jam his foot right in his jaw and kill him, avenging his father. He also survives Ragnarok and as far as I can tell, takes over leadership of the Aesir and overseas the rebuilding. Good book for you to read sometime, Der Warwulf, it's about a bunch of protestant farmers who survive the 30 years war by resorting to gurilla warfare. They call themselves the Warwulves, carve wolfhook runes in threes as boundaries and just hang enemies from trees.
Reason why I asked about your Lutheran background, that's one thing I held onto as part of my heritage. The Germans I descended from supposedly came over here after WWI, but we've been here since the beginning, we fought in the revolutionary war. We fled the 30 years war, some of us stuck around as Swiss Pikemen and I'm pretty sure a few landsknechts. People here have it so good, they have no idea what people fled from and considering the way we're going we may well have something of it over here soon. White flight isn't much of an option, we hate each other, we think nothing of just screwing each other over and never consider the consequences to the children and society as a whole. Somethings going to break soon and I think in the long run it will be a good thing. IF it takes a bit of violence to shake people out of their entitled minds so be it, as bad as the 30 years war was, it sure fixed a lot of the corruption as well as put the pope in his place. I'm careful who I say this too, it bothers me the airs some of the Catholics I've known over the years have about some aspects of US culture, esp. our individualism and how Protestantism is so prevalent as well as her ideas about individual liberty, no need for some priest to tell you whats up and how this led the way to the freedom we have now. Since i've had family that goes that far back it's a big thing for me, not everyone has that in their family tree.
Freedom isn't free, no religion has a right to impose it's viewpoint on me esp. when you look at the tyrrany religion and state brought on people and at times, it does take violent action to ensure our God given rights are maintained. That's something I really like about the Mormons, you can talk about these things. Bring this type of thing up with other people and wow they get mad and uppity, like bringing up history and documented truth is a sin.
Those Landsknechtes were a pretty aggressive bunch of mercenaries. I read where "the devil refused to let landsknechts into hell because he was so afraid of them."
My Grandfather Odin left Norway for the gold rush in Alaska. He and his brother Peter weren't successful mining and panning for gold. He finally left it and made his living as a fisherman, and a carpenter in the off season in Ketchikan. He was self reliant, and died with his fishing boots on. I am grateful for his example of dogged determination and faith.
Regarding the Catholics, they were prolific in preaching the Gospel of Christ throughout the world, probably more than any other organized Christian religion. Were there abuses and mistakes? Of course. There have been with probably all religions, including the Church of Jesus Christ of Latter-day Saints due to the human beings involved.
Another thing I admire about the Catholics is their ministry to the poor and afflicted. I think of the example of Mother Teresa in Calcutta. I think of the Franciscan hospitals and other Catholic hospitals in our area. Our Church has worked closely with Catholic Community Services in our area to jelp minister to the poor, and the Catholics have carried the banner of Pro Life for generations. They also allow for the encouragement of good works in Christian living, which is a view we share with the Catholics. The Evangelicals tend to focus on "faith alone," which in my thinking, works against the importance of self reliance and charity.
Even so, I told my disappointed parents when I left the Lutherans and joined the Church of Jesus Christ that it was their teachings and influence that prepared me to recognize the truth when I found it. I have absolutely nothing bad to say about my Lutheran upbringing, nor my angel parents.
I heartily agree with you that most members of the Church of Jesus Christ of Latter-day Saints believe in self-reliance and minimal government support. When the government provides everything, we don't need God. So yes, I believe the current move toward socialism is not a good thing.
Freedom isn't free. We need to be vigilant to preserve it.
My money would still be on the swiss pikemen, they were just so well trained and did such a good job of scaring even the best knights. Can thank them for helping end chivalry, that and their evolution into Terciero units.
Thing is, when you've been harmed as a child, opressed and backstabbed enough by a religion you get to the point where you cannot stand them as a rule and think nothing when their kind gets assaulted by those they've harmed. The Catholics have done an incredible amount of harm esp to the free folk of northern Europe. I will give pope francis, he's the first pope i've ever seen who apologized to the Lutherans for the slaughter their kind made happen.
Also, that's a cardinal value I have, accountability. I do judge Christians for the harm they do as well as their entitlement. I'd need to see 4 generations of Christian behavior, the likes we used to see back in the day. So many of us have been harmed by them and will never forget how we suffered and to a great extent would like revenge of some kind. Seeing their numbers decline and islam move in is a bit satisfying TBH. My hope is if Germany survives the migrant hordes that were imposed on them they take a huge swing to the right and return to worshiping our own gods, not those things from the desert.
Lived in Alaska, besides Hawaii i may well buy a home in my old neiborhood, much cheaper than down here, also a better class of people. One thing that my Alaska buddies tell me is they watch what's happening down here and are making plans. They've seen people move into CO and now UT and change the demographic. Our gun rights are being taken away and now violent crime is going up as well as taxes and everything else. I don't feel like paying for the mistakes of degenerate garbage people, I say let them and their children be torn apart by the garbage elements they bring with them. I remember when we had the recession there were states that spoke of splitting from the union, if we get that poor we may see that be a posibility again, can't put boots on the ground if you don;t have the funds.
My wife and I have been active in our ward for over a year now. So far the only thing we haven't been able to do that we wanted to do is to tithe. It seems to be against the rules for the bishop to accept tithing from non-members. I have sung solos and sung in the ward, stake, and community choirs. I have spoken as a scheduled speaker in a Sacrament service. My wife and I have both testified in Sacrament services. I have spoken at Firesides on the Latter-day Saint history of our area. My wife and I have each individually taught Gospel Doctrine classes. We have vacuumed and cleaned the chapel, attend all the social events, and have hosted the same in our home. This week my wife is hosting the women's book club. We do donate to special projects and give fast offerings. We drive missionaries back and forth from our village to where they live. We attend all three (well, now two) services each Sunday. My wife is very active in the Women's Relief Society. I am also active in MHA and have spoken at several conferences and have prayed before the group as well. The bishop and I have often toured visitors to the mountain colonies to find the graves of their ancestors and I help answer questions for those who come to learn more about their family's history. I also help host the Church History staff who come here to do work with colony history. So, I guess you could say we are very active. We don't just attend.
To be fair, I think some of the folks may not know what to do with non-members (us) being so active. My sense is that it is not common in a ward for non-members who are not technically "investigators" to attend and be so active on a more or less permanent basis. Some greet us with a cheery "Now when are you going to be baptized?" greeting! We smile and remind them we already were when we were 7 and 8 years of age. It all is in good fun, but sometimes we feel "less than" - maybe like foster kids in a home who every once in a while may be reminded that they aren't really family. To be fair, some in the family may be asking, why are you here if you don't want to join? Why is the leadership allowing you to be so active? We don't fit a paradigm. Maybe others will comment better - but I get the sense our situation is a bit unique. Even Elder Snow, the Church historian greets me as "the Mennonite from the Mormon Mexican colonies!"
I like that. I have a goatee and wear blue shirts! Those are my attempts to not be part of the pack! My wife has more trouble understanding the dress code. She says she is always wearing a dress when other women come in slacks and always wears slacks when other women come in skirts or dresses! Sunday is easy in that regard, but other events? She usually calls ahead to a friend and says "now what should I wear?"


text:
You are at:Blog»News»Rumours»Nokia 3310 (2017) Listed for Rs 3,899 on Indian Retailer's Site
Nokia 3310 (2017) Listed for Rs 3,899 on Indian Retailer's Site
on 26th April, 2017 IN Rumours, Upcoming , 0
HMD Global has released the revamped version of its iconic Nokia 3310 feature phone at the MWC 2017 event. The feature phone is likely to be made available for purchase in Germany and Austria on April 28. However, an Indian retailer website has surprised the folks with its Nokia 3310 (2017) listing which is now available at a price of Rs 3,899.
A Nokia 3310 (2017) model has been spotted online on OnlyMobiles, which is an Indian retailer. The phone is priced at Rs3,899 and the listing mentioned 'Coming Soon' on top which suggests that the upcoming mobile will arrive India sooner than the expectations. Besides this, the site has listed the specifications and available colour options of the device. The phone will be offered in Warm Red, Grey, Yellow, and Dark Blue colour options.
Nokia 3310 (2017): Details
Citing the sources, Gadgets360 has reported that HMD Global has not officially in a discussion with OnlyMobile and the listing on retailer's site is unofficial. So, the users are advised to take the OnlyMobile retailer listing with a pinch of salt. On the other hand, HMD Global has not revealed the price and availability of the Nokia 3310 (2017) feature phone. The handset is expected to be launched in Q2 of this year.
This is Trending: Feature Phones to Buy in India
The new Nokia 3310 (2017) features round edges and refreshed design. It comes with a sturdy build which is iconic to the original device. The reason for the new curved screen window is to get better readability in sunlight. The handset has push buttons and a new user interface.
For photography, the Nokia mobile has a 2MP primary rear camera. There is a 3.5mm audio jack present on the device. Moreover, the other specifications include a 2.4-inch QVGA display, Nokia Series 30+ OS, and 2G connectivity. Also, it has internal storage of 16MB and has support for memory expansion via microSD card up to 32GB. The device receives its juice from a 1200mAh battery which is claimed to deliver a talk time of 22 hours and up to 31 days of standby time.
Nokia 3310 (2017) is a feature phone and it is expected to be priced around Rs 3,500. Spending that much for a feature phone seems to be stupidity, but there are some people who still prefer feature phones over the smartphones. It is a personal choice and preference.
In that price bracket, you can get Micromax Bharat 2 smartphone which features a 4-inch display, Spreadtrum quad-core processor, 512MB of RAM, 4GB of storage, 2MP rear camera, VGA front camera, 4G LTE connectivity, Android 6.0 Marshmallow OS, a 1300mAh battery and much more. You can buy Micromax Bharat 2 for Rs 3,499.
Pricekart Score
User Ratings (0 Votes)
Previous ArticleHow to Choose the Best Washing Machine in India
Next Article Flipkart Continues to Dominate Indian E-commerce Space


text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using Adxstudio.Xrm.Globalization;
using Adxstudio.Xrm.Web.Handlers.ElFinder;
using Adxstudio.Xrm.Web.Security;
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Client.Metadata;
using Microsoft.Xrm.Client.Runtime.Serialization;
using Microsoft.Xrm.Portal.Configuration;
using Microsoft.Xrm.Portal.Web;
using Microsoft.Xrm.Portal.Web.Providers;
using Microsoft.Xrm.Portal.Web.UI;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using Encoder = System.Web.Security.AntiXss.AntiXssEncoder;

namespace Adxstudio.Xrm.Web.UI
{
	public class AdxCmsDataServiceCrmEntityEditingMetadataProvider : ICrmEntityEditingMetadataProvider
	{
		private static readonly Dictionary<string, IEnumerable<Relationship>> _childAssociationsByEntityName = new Dictionary<string, IEnumerable<Relationship>>
		{
			{ "adx_event",
				new[]
				{
					"adx_event_eventschedule".ToRelationship()
				}
			},
			{ "adx_webpage",
				new[]
				{
					"adx_webpage_webfile".ToRelationship(),
					"adx_webpage_webpage".ToRelationship(EntityRole.Referenced),
					"adx_webpage_communityforum".ToRelationship(),
					"adx_webpage_event".ToRelationship(),
					"adx_parentwebpage_shortcut".ToRelationship(),
				}
			},
		};

		private static readonly Dictionary<string, IEnumerable<string>> _siteMapChildEntitiesByEntityName = new Dictionary<string, IEnumerable<string>>
		{
			{ "adx_webpage",
				new[]
				{
					"adx_communityforum",
					"adx_event",
					"adx_webfile",
					"adx_webpage",
					"adx_shortcut",
				}
			},
		};

		private static readonly List<string> _deletableEntityNames = new List<string>
		{
			"adx_communityforum",
			"adx_event",
			"adx_webfile",
			"adx_weblink",
			"adx_webpage",
			"adx_shortcut",
		};

		private static readonly List<string> _dependencyEntityNames = new List<string>
		{
			"adx_pagetemplate",
			"adx_publishingstate",
		};

		private static readonly List<string> _fileAttachmentEntityNames = new List<string>
		{
			"adx_webfile"
		};

		private static readonly List<string> _urlEntityNames = new List<string>
		{
			"adx_communityforum",
			"adx_event",
			"adx_webfile",
			"adx_webpage",
		};

		private static readonly IDictionary<string, Relationship> _parentalRelationshipsByEntityName = new Dictionary<string, Relationship>
		{
			{ "adx_communityforum", "adx_webpage_communityforum".ToRelationship() },
			{ "adx_event", "adx_webpage_event".ToRelationship() },
			{ "adx_webfile", "adx_webpage_webfile".ToRelationship() },
			{ "adx_webpage", "adx_webpage_webpage".ToRelationship(EntityRole.Referencing) },
			{ "adx_shortcut", "adx_webpage_shortcut".ToRelationship() },
		};

		public virtual void AddAttributeMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity, string propertyName, string propertyDisplayName)
		{
			GetOverrideProvider(portalName).AddAttributeMetadata(portalName, control, container, entity, propertyName, propertyDisplayName);
		}

		public virtual void AddEntityMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity)
		{
			GetOverrideProvider(portalName).AddEntityMetadata(portalName, control, container, entity);

			AddSiteMapNodeMetadataForEntity(portalName, control, container, entity);
		}

		public virtual void AddSiteMapNodeMetadata(string portalName, IEditableCrmEntityControl control, Control container, SiteMapNode node)
		{
			AddSiteMapNodeMetadata(portalName, control, container, node, true);
		}

		protected virtual void AddSiteMapNodeMetadata(string portalName, IEditableCrmEntityControl control, Control container, SiteMapNode node, bool includeEntityMetadata)
		{
			var overrideProvider = GetOverrideProvider(portalName);

			overrideProvider.AddSiteMapNodeMetadata(portalName, control, container, node);

			var entityNode = node as CrmSiteMapNode;

			if (entityNode == null || entityNode.Entity == null)
			{
				return;
			}

			if (includeEntityMetadata)
			{
				AddEntityMetadata(portalName, control, container, entityNode.Entity);
			}

			IEnumerable<string> siteMapChildEntityNames;

			if (_siteMapChildEntitiesByEntityName.TryGetValue(entityNode.Entity.LogicalName, out siteMapChildEntityNames))
			{
				foreach (var entityName in siteMapChildEntityNames)
				{
					overrideProvider.AddEntityUriTemplateReference(control, container, entityName);

					if (_deletableEntityNames.Contains(entityName))
					{
						overrideProvider.AddEntityDeleteUriTemplateReference(control, container, entityName);
					}
				}
			}
		}

		protected void AddSiteMapNodeMetadataForEntity(string portalName, IEditableCrmEntityControl control, Control container, Entity entity)
		{
			var serviceContext = PortalCrmConfigurationManager.CreateServiceContext(portalName);

			var metadata = ((RetrieveEntityResponse)serviceContext.Execute(new RetrieveEntityRequest
			{
				EntityFilters = EntityFilters.Entity, LogicalName = entity.LogicalName
			})).EntityMetadata;

			var refetchedEntity = serviceContext.CreateQuery(entity.LogicalName).FirstOrDefault(e => e.GetAttributeValue<Guid>(metadata.PrimaryIdAttribute) == entity.Id);

			var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency<IEntityUrlProvider>();

			if (refetchedEntity != null)
			{
				var entityPath = urlProvider.GetApplicationPath(serviceContext, refetchedEntity);

				if (entityPath != null && entityPath.AbsolutePath != null)
				{
					var node = SiteMap.Provider.FindSiteMapNode(entityPath.AbsolutePath);

					if (node != null)
					{
						AddCssClass(container, "xrm-editable-sitemapchildren");

						AddSiteMapNodeMetadata(portalName, control, container, node, false);
					}
				}
			}
		}

		private static void AddCssClass(Control control, string cssClass)
		{
			var htmlControl = control as HtmlControl;

			if (htmlControl != null)
			{
				var existingClasses = htmlControl.Attributes["class"];

				htmlControl.Attributes["class"] = string.IsNullOrEmpty(existingClasses)
					? cssClass
					: "{0} {1}".FormatWith(existingClasses, cssClass);

				return;
			}

			var webControl = control as WebControl;

			if (webControl != null)
			{
				webControl.CssClass = string.IsNullOrEmpty(webControl.CssClass)
					? cssClass
					: "{0} {1}".FormatWith(webControl.CssClass, cssClass);

				return;
			}
		}

		private static OverrideProvider GetOverrideProvider(string portalName)
		{
			return new OverrideProvider(_dependencyEntityNames, _deletableEntityNames, _urlEntityNames, _childAssociationsByEntityName, _fileAttachmentEntityNames, portalName);
		}

		internal class OverrideProvider : CmsDataServiceCrmEntityEditingMetadataProvider
		{
			public OverrideProvider(
				IEnumerable<string> dependencyEntityNames,
				IEnumerable<string> deletableEntityNames,
				IEnumerable<string> urlEntityNames,
				IDictionary<string, IEnumerable<Relationship>> childAssociationsByEntityName,
				IEnumerable<string> fileAttachmentEntityNames,
				string portalName)
					: base(dependencyEntityNames, deletableEntityNames, urlEntityNames, childAssociationsByEntityName, fileAttachmentEntityNames, portalName) { }

			public override void AddAttributeMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity, string propertyName, string propertyDisplayName)
			{
				base.AddAttributeMetadata(portalName, control, container, entity, propertyName, propertyDisplayName);

				var portal = PortalContext.Current;

				var elFinderConnectorPath = VirtualPathUtility.ToAbsolute(ElFinderRouteHandler.GetAppRelativePath(portal.Website.Id));

				var elFinderConnectorUrl = new UrlBuilder(elFinderConnectorPath);

				if (portal.Entity != null)
				{
					elFinderConnectorUrl.QueryString.Set("working", new DirectoryContentHash(portal.Entity.ToLanguageContainerEntityReference()).ToString());
				}

				AddServiceReference(control, elFinderConnectorUrl.PathWithQueryString, "xrm-filebrowser-ref", container);
				AddServiceReference(control, ElFinderRouteHandler.DialogPath, "xrm-filebrowser-dialog-ref", container);
			}

			public override void AddEntityMetadata(string portalName, IEditableCrmEntityControl control, Control container, Entity entity)
			{
				if (control == null || container == null || entity == null)
				{
					return;
				}

				var serviceContext = PortalCrmConfigurationManager.CreateServiceContext(portalName);
				var portalContext = PortalCrmConfigurationManager.CreatePortalContext(portalName);

				var metadata = ((RetrieveEntityResponse)serviceContext.Execute(new RetrieveEntityRequest
				{
					EntityFilters = EntityFilters.Entity,
					LogicalName = entity.LogicalName
				})).EntityMetadata;

				var refetchedEntity = serviceContext.CreateQuery(entity.LogicalName).FirstOrDefault(e => e.GetAttributeValue<Guid>(metadata.PrimaryIdAttribute) == entity.Id);

				if (entity.LogicalName == "adx_weblinkset")
				{
					// Output the service reference for the web link set itself.
					AddEntityServiceReference(control, entity, entity.GetAttributeValue<string>("adx_name"), container);

					// Output the service reference for the child web links of the set.
					AddEntityAssocationSetServiceReferenceForWebLinkSet(control, entity, "adx_weblinkset_weblink".ToRelationship(), container);
					AddEntityAssocationSetServiceReference(portalName, control, entity, "adx_weblinkset_weblink".ToRelationship(), container, "xrm-entity-{0}-update-ref");
					AddEntitySetSchemaMap(control, "adx_weblink", container);

					// Output the service reference and schema map for site web pages (required to create new web links).
					AddEntitySetServiceReference(control, "adx_webpage", container);
					AddEntitySetSchemaMap(control, "adx_webpage", container);

					string weblinkDeleteUriTemplate;

					if (TryGetCrmEntityDeleteDataServiceUriTemplate(control, "adx_weblink", out weblinkDeleteUriTemplate))
					{
						AddServiceReference(control, weblinkDeleteUriTemplate, "xrm-uri-template xrm-entity-adx_weblink-delete-ref", container);
					}

					// Output the service reference and schema map for site publishing states (required to create new web links).
					AddEntitySetServiceReference(control, "adx_publishingstate", container);
					AddEntitySetSchemaMap(control, "adx_publishingstate", container);
				}
				else
				{
					string serviceUri;

					if (!TryGetDataServiceEntityUri(control, entity, out serviceUri))
					{
						return;
					}

					// Add the service reference to the bound entity.
					container.Controls.Add(new HyperLink { CssClass = "xrm-entity-ref", NavigateUrl = VirtualPathUtility.ToAbsolute(serviceUri), Text = string.Empty });

					string entityUrlServiceUri;

					// Add the service reference for getting the URL of the bound entity.
					if (TryGetCrmEntityUrlDataServiceUri(control, entity, out entityUrlServiceUri))
					{
						AddServiceReference(control, entityUrlServiceUri, "xrm-entity-url-ref", container, "GetEntityUrl");
					}

					var crmEntityName = entity.LogicalName;

					AddEntitySetSchemaMap(control, crmEntityName, container);

					// If the entity is "deletable", add a service reference for soft-delete of the entity.
					if (DeletableEntityNames.Contains(crmEntityName))
					{
						string deleteServiceUri;

						if (TryGetCrmEntityDeleteDataServiceUri(control, entity, out deleteServiceUri))
						{
							AddServiceReference(control, deleteServiceUri, "xrm-entity-delete-ref", container);
						}
					}

					if (FileAttachmentEntityNames.Contains(crmEntityName))
					{
						string fileAttachmentServiceUri;

						if (TryGetCrmEntityFileAttachmentDataServiceUri(control, entity, out fileAttachmentServiceUri))
						{
							AddServiceReference(control, fileAttachmentServiceUri, "xrm-entity-attachment-ref", container);
						}
					}

					// Add the service references on which the creation of various entities are dependent.
					foreach (var dependencyEntityName in DependencyEntityNames)
					{
						AddEntitySetServiceReference(control, dependencyEntityName, container);
						AddEntitySetSchemaMap(control, dependencyEntityName, container);
					}

					// Add the service reference URI Templates for the notes associated with given entity types.
					foreach (var fileAttachmentEntity in FileAttachmentEntityNames)
					{
						string uriTemplate;

						if (TryGetCrmEntityFileAttachmentDataServiceUriTemplate(control, fileAttachmentEntity, out uriTemplate))
						{
							AddServiceReference(control, uriTemplate, "xrm-uri-template xrm-entity-{0}-attachment-ref".FormatWith(fileAttachmentEntity), container);
						}
					}

					// Add the service reference URI Templates for getting URLs for specific entity types.
					foreach (var urlEntityName in UrlEntityNames)
					{
						string uriTemplate;

						if (TryGetCrmEntityUrlDataServiceUriTemplate(control, urlEntityName, out uriTemplate))
						{
							AddServiceReference(control, uriTemplate, "xrm-uri-template xrm-entity-{0}-url-ref".FormatWith(urlEntityName), container, "GetEntityUrl");
						}
					}

					IEnumerable<Relationship> childAssociations;

					if (ChildAssociationsByEntityName.TryGetValue(crmEntityName, out childAssociations))
					{
						foreach (var childAssociation in childAssociations)
						{
							AddEntityAssocationSetServiceReference(portalName, control, entity, childAssociation, container);
						}
					}

					Relationship parentalRelationship2;

					// Output the URL path of parent entity to the DOM (mostly to be read if the entity is deleted--the user
					// will then be redirected to the parent).
					if (_parentalRelationshipsByEntityName.TryGetValue(crmEntityName, out parentalRelationship2))
					{
						var parent = refetchedEntity.GetRelatedEntity(serviceContext, parentalRelationship2);

						var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency<IEntityUrlProvider>();

						var parentPath = urlProvider.GetApplicationPath(serviceContext, parent ?? refetchedEntity);

						if (parentPath != null)
						{
							AddServiceReference(control, parentPath.AbsolutePath, "xrm-entity-parent-url-ref", container);
						}
					}

					// Output the sitemarkers of the current web page into the DOM.
					if (crmEntityName == "adx_webpage")
					{
						foreach (var siteMarker in refetchedEntity.GetRelatedEntities(serviceContext, "adx_webpage_sitemarker"))
						{
							var siteMarkerRef = new HtmlGenericControl("span");

							siteMarkerRef.Attributes["class"] = "xrm-entity-adx_webpage_sitemarker";
							siteMarkerRef.Attributes["title"] = siteMarker.GetAttributeValue<string>("adx_name");

							container.Controls.Add(siteMarkerRef);
						}

						AddEntitySetSchemaMap(control, "adx_webfile", container);

						EntitySetInfo entitySetInfo;

						if (OrganizationServiceContextInfo.TryGet(GetCrmDataContextType(), "adx_communityforum", out entitySetInfo))
						{
							AddEntitySetSchemaMap(control, "adx_communityforum", container);
							AddEntitySetServiceReference(control, "adx_communityforum", container);
						}

						if (OrganizationServiceContextInfo.TryGet(GetCrmDataContextType(), "adx_event", out entitySetInfo))
						{
							AddEntitySetSchemaMap(control, "adx_event", container);
							AddEntitySetServiceReference(control, "adx_event", container);
						}

						AddEntitySetSchemaMap(control, "adx_shortcut", container);

						AddEntitySetServiceReference(control, "adx_webpage", container);
						AddEntitySetServiceReference(control, "adx_webfile", container);

						AddPublishingTransitionSetServiceReference(control, container);
					}

					if (entity.LogicalName == "adx_event")
					{
						AddEntitySetSchemaMap(control, "adx_eventschedule", container);
						AddPicklistMetadata(serviceContext, control, "adx_eventschedule", "adx_recurrence", container);
					}
				}

				var previewPermission = new PreviewPermission(portalContext.ServiceContext, portalContext.Website);

				if (previewPermission.IsPermitted)
				{
					var previewPermittedMetadata = new HtmlGenericControl("span");

					previewPermittedMetadata.Attributes["class"] = "xrm-preview-permitted";
					previewPermittedMetadata.Attributes["style"] = "display:none;";

					container.Controls.Add(previewPermittedMetadata);
				}

				Relationship parentalRelationship;

				// Output the URL path of parent entity to the DOM (mostly to be read if the entity is deleted--the user
				// will then be redirected to the parent).
				if (_parentalRelationshipsByEntityName.TryGetValue(entity.LogicalName, out parentalRelationship))
				{
					var parent = refetchedEntity.GetRelatedEntity(serviceContext, parentalRelationship);

					var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency<IEntityUrlProvider>();

					var parentPath = urlProvider.GetApplicationPath(serviceContext, parent ?? refetchedEntity);

					if (parentPath != null)
					{
						AddServiceReference(control, parentPath.AbsolutePath, "xrm-adx-entity-parent-url-ref", container);
					}
				}
			}

			public void AddEntityUriTemplateReference(IEditableCrmEntityControl control, Control container, string entityName)
			{
				string uriTemplate;

				if (TryGetCrmEntityDataServiceUriTemplate(control, entityName, out uriTemplate))
				{
					AddServiceReference(control, uriTemplate, string.Format("xrm-uri-template xrm-entity-{0}-ref", entityName), container);
				}
			}

			public void AddEntityDeleteUriTemplateReference(IEditableCrmEntityControl control, Control container, string entityName)
			{
				string uriTemplate;

				if (TryGetCrmEntityDeleteDataServiceUriTemplate(control, entityName, out uriTemplate))
				{
					AddServiceReference(control, uriTemplate, string.Format("xrm-uri-template xrm-entity-{0}-delete-ref", entityName), container);
				}
			}

			protected virtual void AddPicklistMetadata(OrganizationServiceContext serviceContext, IEditableCrmEntityControl control, string entityName, string propertyName, Control container)
			{
				Dictionary<int, string> options;

				if (!TryGetPicklistOptions(serviceContext, entityName, propertyName, out options))
				{
					return;
				}

				var json = options.SerializeByJson(new Type[] { });

				var schemaMap = new HtmlGenericControl("span") { InnerText = json };

				schemaMap.Attributes["class"] = "xrm-entity-picklist";
				schemaMap.Attributes["title"] = "{0}.{1}".FormatWith(entityName, propertyName);
				schemaMap.Attributes["style"] = "display:none;";

				container.Controls.Add(schemaMap);
			}

			protected static bool TryGetPicklistOptions(OrganizationServiceContext serviceContext, string entityName, string propertyName, out Dictionary<int, string> options)
			{
				options = null;

				try
				{
					var response  = (RetrieveEntityResponse)serviceContext.Execute(new RetrieveEntityRequest
					{
						LogicalName = entityName, EntityFilters = EntityFilters.Attributes
					});

					var attribute = response.EntityMetadata.Attributes.FirstOrDefault(a => a.LogicalName == propertyName) as PicklistAttributeMetadata;

					if (attribute == null)
					{
						return false;
					}

					options = attribute.OptionSet.Options
						.Where(o => o.Value.HasValue)
						.ToDictionary(o => o.Value.Value, o => o.Label.GetLocalizedLabelString());

					return true;
				}
				catch
				{
					return false;
				}
			}

			protected override bool TryGetCrmEntityDeleteDataServiceUri(IEditableCrmEntityControl control, Entity entity, out string serviceUri)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetCrmEntityDeleteDataServiceUri(control, entity, out uri), uri, out serviceUri);
			}

			protected override bool TryGetCrmEntityDeleteDataServiceUriTemplate(IEditableCrmEntityControl control, string crmEntityName, out string uriTemplate)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetCrmEntityDeleteDataServiceUriTemplate(control, crmEntityName, out uri), uri, out uriTemplate);
			}

			protected override bool TryGetCrmEntityFileAttachmentDataServiceUri(IEditableCrmEntityControl control, Entity entity, out string serviceUri)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetCrmEntityFileAttachmentDataServiceUri(control, entity, out uri), uri, out serviceUri);
			}

			protected override bool TryGetCrmEntityFileAttachmentDataServiceUriTemplate(IEditableCrmEntityControl control, string crmEntityName, out string uriTemplate)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetCrmEntityFileAttachmentDataServiceUriTemplate(control, crmEntityName, out uri), uri, out uriTemplate);
			}

			protected override bool TryGetCrmEntityUrlDataServiceUri(IEditableCrmEntityControl control, Entity entity, out string serviceUri)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetCrmEntityUrlDataServiceUri(control, entity, out uri), uri, out serviceUri);
			}

			protected override bool TryGetCrmEntityUrlDataServiceUriTemplate(IEditableCrmEntityControl control, string crmEntityName, out string uriTemplate)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetCrmEntityUrlDataServiceUriTemplate(control, crmEntityName, out uri), uri, out uriTemplate);
			}

			protected override bool TryGetDataServiceCrmAssocationSetUri(string portalName, IEditableCrmEntityControl control, Entity entity, Relationship relationship, out string serviceUri)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetDataServiceCrmAssocationSetUri(portalName, control, entity, relationship, out uri), uri, out serviceUri);
			}

			protected override bool TryGetDataServiceCrmEntitySetUri(IEditableCrmEntityControl control, string crmEntityName, out string serviceUri)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetDataServiceCrmEntitySetUri(control, crmEntityName, out uri), uri, out serviceUri);
			}

			protected override bool TryGetDataServiceEntityUri(IEditableCrmEntityControl control, Entity entity, out string serviceUri)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetDataServiceEntityUri(control, entity, out uri), uri, out serviceUri);
			}

			protected override bool TryGetDataServicePropertyUri(IEditableCrmEntityControl control, Entity entity, string propertyName, out string serviceUri)
			{
				string uri;
				return TryGetServiceUriWithWebsitePath(base.TryGetDataServicePropertyUri(control, entity, propertyName, out uri), uri, out serviceUri);
			}

			protected virtual bool TryGetCrmEntityWebLinkSetDataServiceUri(IEditableCrmEntityControl control, Entity entity, Relationship relationship, out string serviceUri)
			{
				var serviceBaseUri = string.IsNullOrEmpty(control.CmsServiceBaseUri) ? GetCmsServiceBaseUri(PortalName) : control.CmsServiceBaseUri;
				var context = GetServiceContext(PortalName);

				var uri = GetCrmEntitySetDataServiceUri(context.GetType(), "adx_weblink", serviceBaseUri, "adx_weblinksetid", entity.Id);
				serviceUri = AddWebsitePathToQuerystring(uri);

				return !string.IsNullOrEmpty(serviceUri);
			}

			protected virtual bool TryGetCrmEntityDataServiceUriTemplate(IEditableCrmEntityControl control, string entityName, out string uriTemplate)
			{
				var serviceBaseUri = string.IsNullOrEmpty(control.CmsServiceBaseUri) ? GetCmsServiceBaseUri(PortalName) : control.CmsServiceBaseUri;
				var context = GetServiceContext(PortalName);

				var uri = GetCrmEntityDataServiceUriTemplate(context.GetType(), entityName, serviceBaseUri);
				uriTemplate = AddWebsitePathToQuerystring(uri);

				return !string.IsNullOrEmpty(uriTemplate);
			}

			protected override void AddEntityAssocationSetServiceReferenceForWebLinkSet(IEditableCrmEntityControl control, Entity entity, Relationship relationship, Control container)
			{
				string serviceUri;

				if (TryGetCrmEntityWebLinkSetDataServiceUri(control, entity, relationship, out serviceUri))
				{
					AddServiceReference(control, serviceUri, "xrm-entity-{0}-ref".FormatWith(relationship.ToSchemaName("_")), container);
				}
			}

			private bool TryGetServiceUriWithWebsitePath(bool result, string serviceUri, out string extendedServiceUri)
			{
				extendedServiceUri = result ? AddWebsitePathToQuerystring(serviceUri) : null;

				return result;
			}

			private string AddWebsitePathToQuerystring(string uri)
			{
				var portalContext = PortalCrmConfigurationManager.CreatePortalContext(PortalName);
				var website = portalContext.Website;

				if (website != null)
				{
					var partialUrl = website.GetAttributeValue<string>("adx_partialurl");

					if (!string.IsNullOrWhiteSpace(partialUrl))
					{
						return "{0}{1}websitepath={2}".FormatWith(uri, uri.Contains("?") ? "&" : "?", Encoder.UrlEncode(partialUrl));
					}
				}

				return uri;
			}

			private static string GetCrmEntityDataServiceUriTemplate(Type crmDataContextType, string crmEntityName, string serviceBaseUri)
			{
				if (string.IsNullOrEmpty(serviceBaseUri))
				{
					return null;
				}

				var entitySetInfo = GetEntitySetInfo(crmDataContextType, crmEntityName);

				if (entitySetInfo == null)
				{
					return null;
				}

				return "{0}/{1}(guid'{{Id}}')".FormatWith(serviceBaseUri.TrimEnd('/'), UrlEncode(entitySetInfo.Property.Name));
			}

			protected void AddPublishingTransitionSetServiceReference(IEditableCrmEntityControl control, Control container)
			{
				string serviceUri;

				if (TryGetDataServiceCrmEntitySetUri(control, "adx_publishingstate", out serviceUri))
				{
					serviceUri = serviceUri + "&FromStateID={adx_publishingstateid.Id}";
					AddServiceReference(control, serviceUri, "xrm-entity-edit{0}-ref".FormatWith("adx_publishingstate"), container);
				}

			}

			private static string GetCrmEntitySetDataServiceUri(
				Type crmDataContextType,
				string crmEntityName,
				string serviceBaseUri,
				string foreignKeyAttributeName,
				Guid foreignKeyValue)
			{
				if (string.IsNullOrEmpty(serviceBaseUri))
				{
					return null;
				}

				var entitySetInfo = GetEntitySetInfo(crmDataContextType, crmEntityName);

				if (entitySetInfo == null)
				{
					return null;
				}

				var filter = string.Empty;
				AttributeInfo propertyInfo;

				if (entitySetInfo.Entity.AttributesByLogicalName.TryGetValue(foreignKeyAttributeName, out propertyInfo))
				{
					filter = "?$filter={0}/Id eq guid'{1}'".FormatWith(UrlEncode(propertyInfo.Property.Name), UrlEncode(foreignKeyValue.ToString()));
				}

				return "{0}/{1}{2}".FormatWith(serviceBaseUri.TrimEnd('/'), UrlEncode(entitySetInfo.Property.Name), filter);
			}

			private static EntitySetInfo GetEntitySetInfo(Type crmDataContextType, string crmEntityName)
			{
				EntitySetInfo entitySetInfo;

				OrganizationServiceContextInfo.TryGet(crmDataContextType, crmEntityName, out entitySetInfo);

				return entitySetInfo;
			}

			private static string UrlEncode(string s)
			{
				return Encoder.UrlEncode(s);
			}

			private static string GetCmsServiceBaseUri(string portalName = null)
			{
				var element = PortalCrmConfigurationManager.GetPortalContextElement(portalName);
				return element.CmsServiceBaseUri;
			}

			private static OrganizationServiceContext GetServiceContext(string portalName = null, RequestContext request = null)
			{
				var portal = PortalCrmConfigurationManager.CreatePortalContext(portalName, request);
				return portal.ServiceContext;
			}

			protected override string GetSiteMapChildrenDataServiceUri(IEditableCrmEntityControl control, SiteMapNode startingNode)
			{
				var serviceBaseUri = string.IsNullOrEmpty(control.CmsServiceBaseUri)
					? PortalCrmConfigurationManager.GetPortalContextElement(PortalName).CmsServiceBaseUri
					: control.CmsServiceBaseUri;

				var serviceUri = "{0}/GetSiteMapChildren?siteMapProvider='{1}'&startingNodeUrl='{2}'".FormatWith(
					serviceBaseUri.TrimEnd('/'),
					UrlEncode(startingNode.Provider.Name),
					UrlEncode(startingNode.Url));

				return AddWebsitePathToQuerystring(serviceUri);
			}
		}
	}
}

redpajama_set_name: RedPajamaGithub


Recent biographies concur that John Abernathy was probably born in Bligh (near Cookstown), Co. Tyrone on 19th October 1680. His father, also John, was a Presbyterian minister there. In 1698 John Abernathy senior went to London with Patrick Adair to communicate Irish Presbyterian support for William III. His mother took refuge in Derry/Londonderry: John's siblings were among the 10,000 who died in the famous siege. John had been sent instead to relatives in Ballymena who then brought him to Scotland where he was educated. In 1692 he returned to his parents in Coleraine. He went to Glasgow University aged 13, graduated MA in 1696, studied divinity in Edinburgh and returned to Ireland in 1701/2.
He was ordained in 1703 and became minister in Antrim. He married Susannah Jordan (d. 1712), with whom he had one son and three daughters.
Abernathy had a leading role in the Irish Presbyterian debate over whether ministers should be obliged to sign up to the Westminister Profession of Faith, an obligation only introduced in the Irish Presbyterian Church in 1705. The debate raged from 1719 until 1726, when the non-subscribing ministers, including John Abernathy, were sequestered in the Presbytery of Antrim.


text:
Q: Grails call application.config value in javascript How can I call a value set in application config in javascript? I tried using jquery and put below in my javascript but it doesn't work. Is it even do able without jquery? Help please
console.log("${grailsApplication.config.getProperty('wipTransportUI.rtdService.url', String)}");

A: Your example works for me using Grails 3, I added the following to application.yml:
wipTransportUI:
    rtdService:
        url: 'aUrl'

Then used in javascript in gsp:
<script type="text/javascript">
    console.log( "${grailsApplication.config.getProperty( 'wipTransportUI.rtdService.url', String )}" );
</script>

Console:

If you're using Grails 2 you'd access the property differently:
console.log( "${grailsApplication.config.wipTransportUI.rtdService.url}" );

redpajama_set_name: RedPajamaStackExchange