text:
Archive | lookback reviews RSS feed for this section
LOOKBACKS – album reviews – Cindytalk's 'Wappinschaw', 1994 ("one of 1994's most intense, perverse and unusual lost albums")
Cindytalk: 'Wappinschaw'
For almost fourteen years now, Cindytalk have been forging a lonely path through the ever-changing styles of modern music. Despite the soft pink flush of their name, Cindytalk's music has always been so out-there, so much a music of violent extremes, that they have (more or less by default – how much could you change when you touch both ends of the spectrum?) stayed the same – no bad thing – while refining their sound on each album.
Gordon Sharp, the mainstay of Cindytalk's many line-ups, is perhaps best known as the voice of three haunting tracks on the first album by 4AD art-collective This Mortal Coil, which also spawned Elizabeth Fraser's honey-drenched version of Tim Buckley's Song To The Siren in 1983. Yet 4AD-ethereal was never really Sharp's bag. Cindytalk operate in the same dark areas that Michael Gira and Swans did before they transformed into doom-laden acoustic hippies (no more titles like Raping A Slave, then, Michael? cheers, love!), or The Birthday Party before Nick Cave mellowed out into Satan's crooner.
They've wilfully, awkwardly, pursued music of extremes. Their first album, 'Camouflage Heart', must rank somewhere alongside Lou Reed's 'Metal Machine Music' for sheer unlistenable music for (dis)pleasure, that has to be owned simply to piss people off. And the mammoth 'In This World' was a double album of contradictions – one record of near-industrial rock with razor-sharp guitar sounds (varying between tooth- extraction by electric power drill or sheet-metal white noise), and one record of near-ambient instrumentals and songs, mostly played on very soft piano like Erik Satie on Mogadon.
But it's been a long time since any new Cindytalk material; perhaps because of artistic reclusiveness, perhaps through being a true cult act. Having already had a protracted recording between 1990 and 1992, this album took a further two years to emerge on a record label in 1994. A lone concert aside, we've heard nothing from them since (that's what y-o-u think.. – ED.). Hence this five-years-after-the-event review: cults can always do with getting bigger while they wait for the resurrection.
So, 'Wappinschaw'; one of 1994's most intense, perverse and unusual lost albums…
It opens deceptively simply, with an a-capella reworking of Ewan MacColl's The First Time Ever I Saw Your Face, reflecting Gordon Sharp's interest in folk idioms (especially his own native Scots). He's singing solo, without echo or reverb, up close, right there in your darkened room. His voice – one of the most expressive at conveying rage, pain, fear – displays power here yet, somehow, also insecurity. A Song Of Changes is leaden-paced at first, but David Ros' guitars are more blurry and hazed than previous industrial strength Cindytalk noise. Suddenly the guitars hit an almost bright riff around which Sharp fluctuates and soars. A song of changes, indeed – light is breaking into Cindytalk's dark world: "Within the heart of everything, there is you…"
It doesn't last, though. Return To Pain (hah!) lurches in on a mix of barely-scrubbed electric and slide guitars, creating an empty and menacing atmosphere as Sharp emotes through wordless high vocals. It's nightmare swamp music, midnight in the Mississippi plains accompanied by the scariest of companions, before the tension explodes into a barrage of noise. Drums, shotgun guitars, and Sharp wailing that "everybody is Christ." Y-e-e-es; whatever you say, Gordon.
Whichever expectations are set for them, Cindytalk trump them on this record. Wheesht is introduced by a tape of Alisdair Gray reading an extract from his mammoth Scottish psycho-epic 'Lanark': a story of a young boy dreaming about what lies beyond the clouds. Recorded over the sound of a ticking clock and a ghostly musical box, this exercise in unsettling atmospherics chills the spine and sets us up for Wheesht itself: a brutally short, non- musical violent collage of bass drones, sonic interferences, sampled voices, blood-curdling screams and other genuinely unnerving sounds.
To the looping, echoed scrapings of a low-tuned violin, Snowkiss restores some sense of calm with more of Cindytalk's music for winter nights – Gordon's vocals imploding out of their rage into delicate lines and wordless harmonies sung over the gentlest of chiming, raindrop pianos. The lyrics of Disappear evoke a painfully trapped life: "You're in heaven now, / Inside your head. / No thoughts of flight, / Your wings are clipped…", while a strongly martial beat provides the tracks only propulsion as guitars and sampled interference compete with each other in a swirling eddy of sound. The lively, echoing trumpet on Traumlose Nacht, mingled with delicate piano and evocative waves of rolling drums, provide some relief and a different sonic vocabulary – it sounds like incidental music for the dark magic and oppressive heat of 'Angel Heart'.
The final track, Hush, starts as an guitar-and-solo-vocal acoustic lament (back to the folk singing of the opening track) but then gives way to influential voices from the heavens (including samples of Orson Welles and Joseph Beuys) before everything fades to leave a long passage of bagpipe music that is, after the tumult of Cindytalk in action, strangely beguiling and soothing… but wait. After a long pause, a final hidden track, Muster. An incendiary, veritably Napalm-Death's- worth battery of hideous thrash-noise, over which Sharp's passionate ragged voice issues forth evocations to notable spirits: "The Wappinschaw is an invocation of the spirits of Shiva: Rise, William Wallace, rise! Rise, Arthur Rimbaud, rise!" He goes on to summon the spirits of Pasolini, Sitting Bull, Che Guevara and Ho Chi Minh, amongst others. So unearthly does Sharp sound, so compelling, that I have no doubt that the spirits responded. Quite the most disturbing sound heard on CD for some time.
I wouldn't like to hazard too close a guess at what kind of emotional traumas Gordon Sharp purges from himself to make this music; all razor blades, blizzards and crow feathers. It's enough to say that, after fourteen years on the extremes, Cindytalk demand your rapt attention, your horrified fascination…
(review by Col Ainsley)
Touched Recordings, TOUCH 1 (5 021958 432021)
CD-only album
Get it from:
(2018 update) best obtained second-hand
Cindytalk online:
Tags: Alisdair Gray, Cindytalk, Col Ainsley, David Ros, Ewan MacColl, Gordon Sharp, Vaughan Simons
Categories 1994, 1999, album reviews, alternative rock, ambient music, art rock, cross-cultural music, DIY music, drone music, electro-acoustic folk, electro-acoustic music, experimental music, experimental/avant-garde rock, field recordings, freak-folk, instrumental music, lookback reviews, musique concrete, noise, poetry, post-rock, reviews, rock, Scottish folk music, sound collage, spoken word, storytelling

redpajama_set_name: RedPajamaCommonCrawl


What Group Captain Samrath Dhankar, the demo pilot of India's indigenously-developed Tejas Mk 1, thought can be a contact and go on the fighter's distinctive strengths, with the Malaysian PM, turned out to be longish and stimulating one. Dr Mahathir was specifically drawn to the neatness of the cockpit and the intuitive format. The dialogue lasted for 10 minutes, with Dhankar even including a private taste by telling the PM he had been to Malaysia earlier than, underneath a defence alternate programme.
These little private tales, cultural affinities, historic connects, and high-profile, elevated army workouts between the 2 nations, nevertheless, don't weigh in greater than the one reality which most geo political and defence consultants talk about, anonymously: and that's; Malaysia's tilt in the direction of Pakistan.
So, the place does India's locally-made fighter which acquired broadly applauded for its agility and maneuverability on the LIMA present held final week of March, stand vis-à-vis Pakistan's JF-17 and Korea's FA-50 Golden Eagle?
Malaysia has deliberate a two-stage procurement and on this two-stage course of, RMAF desires to replenish your complete hole from the lead in fighter coach, as much as the medium vary fight plane (MRCA). India is previous the RFI stage, which is Request for Data, adopted by RFP (Request for Proposal) which will probably be carried out solely after Pakistan and South Korea additionally clear the RFI.
It's attention-grabbing to notice that HAL, contemplating Malaysian curiosity in Tejas, gave out somewhat extra elaborate info than required, for RFI stage, however decrease than RFP spherical.
Speaking about each India and Pakistan's aggressive bidding, Mahadzir mentioned whereas India is reportedly dealing on a strict authorities to authorities foundation, lobbyists for Pakistan are at work to get the nod for JF-17.


text:
Posts Tagged: youtube live stream
Capture It All: 2016 Republican & Democratic National Conventions
Posted July 19th, 2016 | Category: Stream & Save, Video.
With so much happening in the Presidential space this year, it's impossible to stay out of the political fray. Now with the Republican National Convention about to wrap up and the Democratic National Convention set to begin, it's pretty well understood that things won't be slowing down anytime soon.
Media everywhere are turning to live streaming efforts during the 2016 Presidential Election more than they ever have before; YouTube will reprise its role as the official live-stream provider for both conventions taking place this month, with Twitter and Facebook also delivering live feeds. It's the most complete, round-the-clock coverage ever.
(Image: GREG E. MATHIESON SR./REX/SHUTTERSTOCK) For the first time ever, YouTube will be live streaming the convention in 360-degree video so you can access a full, wrap-around perspective of the events with a simple control of your finger or computer mouse.
Viewers can access the Republican & Democratic National Conventions live stream directly from YouTube and record every thought-provoking moment using Replay Media Catcher. It's the best (and only) way to legally track and record any streaming content online, and save it in a high quality format.
What are you waiting for? Get the software today to remember this moment in political history forever.
Get Replay Media Catcher Today!
How to Stream & Save the CrossFit Games
Posted July 13th, 2016 | Category: Replay Media Catcher, Stream & Save, Video.
This is truly a landmark year for the CrossFit Games, and it's been a demanding journey from the Open, to the Regionals, to the Games — top athletes from each of the included 17 regions worldwide have been narrowed down from hundreds to the fittest 40 men, 40 women, 40 teams, 40 teenagers and 200 masters.
A key element to a fair test of fitness is the unknown and unknowable. Athletes cannot train for what they do not know. At each CrossFit Games, the athletes engage in a series of challenges unknown to them until right before the competition. The combination of highly trained athletes and unknown events makes for an explosive mix. – CrossFit Games Online
(Image via games.crossfit.com)
Check out the full, global leaderboard of every competing athlete HERE and see the Games schedule below:
Teenage & Masters Competition | 7/19 –7/21 | 9 a.m. – 6 p.m. PT
Team Competition | 7/22 – 7/24 | 9 a.m. – 3 p.m. PT
Individual Competition | 7/22 – 7/24 | 9 a.m. – 9 p.m. PT
Fans of the 2016 CrossFit Games can capture every Masters, Teens and Teams events — streaming live from YouTube & the official CrossFit Games website — and store them in a high quality format with Replay Media Catcher. The Individual events will stream from ESPN3 and can be captured with Replay Video Capture.
With Replay Media Catcher's live stream monitor feature, you can actively track and record the CrossFit Games live stream directly from YouTube! Plus, our best-selling software makes it simple to create incredible quality videos of every single event, so you can watch on your own schedule.
Try Replay Capture Suite Today


text:
8x8 Expands International Presence With Launch of Cloud Communications Service Platform at New UK Data Center
SAN JOSE, Calif.--(BUSINESS WIRE)-- 8x8, Inc. (NASDAQ:EGHT), a leading provider of cloud communications and collaboration solutions, today announced it has signed an agreement with Interxion, (NYSE:INXN), Europe's leading provider of cloud and carrier-neutral colocation data center services, for interconnection and localization services at Interxion's London data center, home to customers such as NASDAQ and Thomson Reuters.
Interxion operates 34 data centers in 13 cities across 11 countries and houses more than 450 carriers and Internet service providers and 19 European Internet exchanges. With its expansion to the UK, 8x8's European Union customers will gain the strategic advantage of having their communications needs served through the shortest/best media path based upon their geographic location, ensuring optimal reliability and call quality. In conjunction with the launch of the UK platform, 8x8 is implementing new Geo Routing technology across its network that dynamically routes calls to the nearest data center using location information such as the public IP address of the users.
"The Interxion data center not only enhances 8x8's geographic diversity with increased availability and redundancy, it also provides a local presence for our multinational customers that require a footprint in Europe," said 8x8 Vice President of Network Operations Mehdi Salour. "As our mid-market customer base continues to grow and businesses continue to adopt cloud based services, Interxion's cost-efficient connectivity, outstanding uptime performance and flexibility to quickly scale will be of critical importance to 8x8."
8x8 is seeing growing interest from mid-market customers who are not only increasing their deployment of cloud communications and collaboration solutions in larger, distributed environments within the United States, but are also requiring a local presence internationally, a catalyst for the Company's strategic Global Reach initiative.
"We are very pleased that 8x8 has chosen Interxion as its European data center partner," said Douglas Loewe, UK Managing Director, Interxion. "Interxion continues to enable cloud service providers such as 8x8 to deliver enterprise grade solutions to European markets by providing reliable, scalable and well-connected data center services. This expansion by 8x8 reinforces our position as a best-in-class supplier of data center services to the rapidly expanding Enterprise Cloud service provider segment."
8x8, Inc. (NASDAQ:EGHT) offers a complete portfolio of cloud communications and collaboration solutions that include hosted PBX telephony, unified communications, call center software, video conferencing and virtual desktop services. The company has been delivering business services since 2004 and has garnered a reputation for technical excellence and outstanding reliability. In 2012, 8x8 was named a market "leader" in Gartner's Magic Quadrant for Unified Communications as a Service (UCaaS) in North America and was recognized as the No. 1 Provider of Hosted IP Telephony by Frost & Sullivan and Synergy Research Group. For additional information, visit www.8x8.com, or connect with 8x8 on Google+, Facebook, LinkedIn and Twitter.
About Interxion:
Interxion (NYSE:INXN) is a leading provider of cloud and carrier-neutral colocation data centre services in Europe, serving a wide range of customers through 34 data centres in 11 European countries. Interxion's uniformly designed, energy-efficient data centres offer customers extensive security and uptime for their mission-critical applications. With connectivity provided by over 450 fixed and mobile carriers and ISPs and 19 European Internet exchanges, Interxion has created cloud, content, finance and connectivity hubs that foster growing customer communities of interest. For more information, please visit www.interxion.com.
Richard Dorgan, +44 (0)20 7375 7000
richardd@interxion.com


Ideal Property is a boutique residential developer focused on delivering owner-occupied projects of distinction in Australia.
Latest projects from Ideal Property.
Latest news from Ideal Property.
There are currently no recent News from Ideal Property.


text:
module ConsoleLog
  class Railtie < Rails::Railtie
    initializer "console.log.add_middleware" do |app|
      app.middleware.use Middleware
    end
  end
end

redpajama_set_name: RedPajamaGithub


text:
package org.apache.catalina.users;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;

import org.apache.catalina.Globals;
import org.apache.catalina.Group;
import org.apache.catalina.Role;
import org.apache.catalina.User;
import org.apache.catalina.UserDatabase;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.digester.AbstractObjectCreationFactory;
import org.apache.tomcat.util.digester.Digester;
import org.apache.tomcat.util.res.StringManager;
import org.xml.sax.Attributes;

/**
 *
Concrete implementation of {@link UserDatabase} that loads all
 * defined users, groups, and roles into an in-memory data structure,
 * and uses a specified XML file for its persistent storage.

 *
 * @author Craig R. McClanahan
 * @since 4.1
 */
public class MemoryUserDatabase implements UserDatabase {

    private static final Log log = LogFactory.getLog(MemoryUserDatabase.class);

    // ----------------------------------------------------------- Constructors

    /**
     * Create a new instance with default values.
     */
    public MemoryUserDatabase() {
        this(null);
    }

    /**
     * Create a new instance with the specified values.
     *
     * @param id Unique global identifier of this user database
     */
    public MemoryUserDatabase(String id) {
        this.id = id;
    }

    // ----------------------------------------------------- Instance Variables

    /**
     * The set of {@link Group}s defined in this database, keyed by
     * group name.
     */
    protected final HashMap<String,Group> groups = new HashMap<>();

    /**
     * The unique global identifier of this user database.
     */
    protected final String id;

    /**
     * The relative (to catalina.base) or absolute pathname to
     * the XML file in which we will save our persistent information.
     */
    protected String pathname = "conf/tomcat-users.xml";

    /**
     * The relative or absolute pathname to the file in which our old
     * information is stored while renaming is in progress.
     */
    protected String pathnameOld = pathname + ".old";

    /**
     * The relative or absolute pathname of the file in which we write
     * our new information prior to renaming.
     */
    protected String pathnameNew = pathname + ".new";

    /**
     * A flag, indicating if the user database is read only.
     */
    protected boolean readonly = true;

    /**
     * The set of {@link Role}s defined in this database, keyed by
     * role name.
     */
    protected final HashMap<String,Role> roles = new HashMap<>();

    /**
     * The string manager for this package.
     */
    private static final StringManager sm =
        StringManager.getManager(Constants.Package);

    /**
     * The set of {@link User}s defined in this database, keyed by
     * user name.
     */
    protected final HashMap<String,User> users = new HashMap<>();

    // ------------------------------------------------------------- Properties

    /**
     * Return the set of {@link Group}s defined in this user database.
     */
    @Override
    public Iterator<Group> getGroups() {

        synchronized (groups) {
            return (groups.values().iterator());
        }

    }

    /**
     * Return the unique global identifier of this user database.
     */
    @Override
    public String getId() {

        return (this.id);

    }

    /**
     * Return the relative or absolute pathname to the persistent storage file.
     */
    public String getPathname() {

        return (this.pathname);

    }

    /**
     * Set the relative or absolute pathname to the persistent storage file.
     *
     * @param pathname The new pathname
     */
    public void setPathname(String pathname) {

        this.pathname = pathname;
        this.pathnameOld = pathname + ".old";
        this.pathnameNew = pathname + ".new";

    }

    /**
     * Returning the readonly status of the user database
     */
    public boolean getReadonly() {

        return (this.readonly);

    }

    /**
     * Setting the readonly status of the user database
     *
     * @param readonly the new status
     */
    public void setReadonly(boolean readonly) {

        this.readonly = readonly;

    }

    /**
     * Return the set of {@link Role}s defined in this user database.
     */
    @Override
    public Iterator<Role> getRoles() {

        synchronized (roles) {
            return (roles.values().iterator());
        }

    }

    /**
     * Return the set of {@link User}s defined in this user database.
     */
    @Override
    public Iterator<User> getUsers() {

        synchronized (users) {
            return (users.values().iterator());
        }

    }

    // --------------------------------------------------------- Public Methods

    /**
     * Finalize access to this user database.
     *
     * @exception Exception if any exception is thrown during closing
     */
    @Override
    public void close() throws Exception {

        save();

        synchronized (groups) {
            synchronized (users) {
                users.clear();
                groups.clear();
            }
        }

    }

    /**
     * Create and return a new {@link Group} defined in this user database.
     *
     * @param groupname The group name of the new group (must be unique)
     * @param description The description of this group
     */
    @Override
    public Group createGroup(String groupname, String description) {

        if (groupname == null || groupname.length() == 0) {
            String msg = sm.getString("memoryUserDatabase.nullGroup");
            log.warn(msg);
            throw new IllegalArgumentException(msg);
        }

        MemoryGroup group = new MemoryGroup(this, groupname, description);
        synchronized (groups) {
            groups.put(group.getGroupname(), group);
        }
        return (group);

    }

    /**
     * Create and return a new {@link Role} defined in this user database.
     *
     * @param rolename The role name of the new group (must be unique)
     * @param description The description of this group
     */
    @Override
    public Role createRole(String rolename, String description) {

        if (rolename == null || rolename.length() == 0) {
            String msg = sm.getString("memoryUserDatabase.nullRole");
            log.warn(msg);
            throw new IllegalArgumentException(msg);
        }

        MemoryRole role = new MemoryRole(this, rolename, description);
        synchronized (roles) {
            roles.put(role.getRolename(), role);
        }
        return (role);

    }

    /**
     * Create and return a new {@link User} defined in this user database.
     *
     * @param username The logon username of the new user (must be unique)
     * @param password The logon password of the new user
     * @param fullName The full name of the new user
     */
    @Override
    public User createUser(String username, String password,
                           String fullName) {

        if (username == null || username.length() == 0) {
            String msg = sm.getString("memoryUserDatabase.nullUser");
            log.warn(msg);
            throw new IllegalArgumentException(msg);
        }

        MemoryUser user = new MemoryUser(this, username, password, fullName);
        synchronized (users) {
            users.put(user.getUsername(), user);
        }
        return (user);
    }

    /**
     * Return the {@link Group} with the specified group name, if any;
     * otherwise return null.
     *
     * @param groupname Name of the group to return
     */
    @Override
    public Group findGroup(String groupname) {

        synchronized (groups) {
            return groups.get(groupname);
        }

    }

    /**
     * Return the {@link Role} with the specified role name, if any;
     * otherwise return null.
     *
     * @param rolename Name of the role to return
     */
    @Override
    public Role findRole(String rolename) {

        synchronized (roles) {
            return roles.get(rolename);
        }

    }

    /**
     * Return the {@link User} with the specified user name, if any;
     * otherwise return null.
     *
     * @param username Name of the user to return
     */
    @Override
    public User findUser(String username) {

        synchronized (users) {
            return users.get(username);
        }

    }

    /**
     * Initialize access to this user database.
     *
     * @exception Exception if any exception is thrown during opening
     */
    @Override
    public void open() throws Exception {

        synchronized (groups) {
            synchronized (users) {

                // Erase any previous groups and users
                users.clear();
                groups.clear();
                roles.clear();

                // Construct a reader for the XML input file (if it exists)
                File file = new File(pathname);
                if (!file.isAbsolute()) {
                    file = new File(System.getProperty(Globals.CATALINA_BASE_PROP),
                                    pathname);
                }
                if (!file.exists()) {
                    log.error(sm.getString("memoryUserDatabase.fileNotFound",
                            file.getAbsolutePath()));
                    return;
                }

                // Construct a digester to read the XML input file
                Digester digester = new Digester();
                try {
                    digester.setFeature(
                            "http://apache.org/xml/features/allow-java-encodings",
                            true);
                } catch (Exception e) {
                    log.warn(sm.getString("memoryUserDatabase.xmlFeatureEncoding"), e);
                }
                digester.addFactoryCreate
                    ("tomcat-users/group",
                     new MemoryGroupCreationFactory(this), true);
                digester.addFactoryCreate
                    ("tomcat-users/role",
                     new MemoryRoleCreationFactory(this), true);
                digester.addFactoryCreate
                    ("tomcat-users/user",
                     new MemoryUserCreationFactory(this), true);

                // Parse the XML input file to load this database
                try (FileInputStream fis =  new FileInputStream(file)) {
                    digester.parse(fis);
                }
            }
        }
    }

    /**
     * Remove the specified {@link Group} from this user database.
     *
     * @param group The group to be removed
     */
    @Override
    public void removeGroup(Group group) {

        synchronized (groups) {
            Iterator<User> users = getUsers();
            while (users.hasNext()) {
                User user = users.next();
                user.removeGroup(group);
            }
            groups.remove(group.getGroupname());
        }
    }

    /**
     * Remove the specified {@link Role} from this user database.
     *
     * @param role The role to be removed
     */
    @Override
    public void removeRole(Role role) {

        synchronized (roles) {
            Iterator<Group> groups = getGroups();
            while (groups.hasNext()) {
                Group group = groups.next();
                group.removeRole(role);
            }
            Iterator<User> users = getUsers();
            while (users.hasNext()) {
                User user = users.next();
                user.removeRole(role);
            }
            roles.remove(role.getRolename());
        }

    }

    /**
     * Remove the specified {@link User} from this user database.
     *
     * @param user The user to be removed
     */
    @Override
    public void removeUser(User user) {

        synchronized (users) {
            users.remove(user.getUsername());
        }

    }

    /**
     * Check for permissions to save this user database to persistent storage
     * location.
     */
    public boolean isWriteable() {

        File file = new File(pathname);
        if (!file.isAbsolute()) {
            file = new File(System.getProperty(Globals.CATALINA_BASE_PROP),
                            pathname);
        }
        File dir = file.getParentFile();
        return dir.exists() && dir.isDirectory() && dir.canWrite();
    }

    /**
     * Save any updated information to the persistent storage location for
     * this user database.
     *
     * @exception Exception if any exception is thrown during saving
     */
    @Override
    public void save() throws Exception {

        if (getReadonly()) {
            log.error(sm.getString("memoryUserDatabase.readOnly"));
            return;
        }

        if (!isWriteable()) {
            log.warn(sm.getString("memoryUserDatabase.notPersistable"));
            return;
        }

        // Write out contents to a temporary file
        File fileNew = new File(pathnameNew);
        if (!fileNew.isAbsolute()) {
            fileNew =
                new File(System.getProperty(Globals.CATALINA_BASE_PROP), pathnameNew);
        }
        PrintWriter writer = null;
        try {

            // Configure our PrintWriter
            FileOutputStream fos = new FileOutputStream(fileNew);
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8");
            writer = new PrintWriter(osw);

            // Print the file prolog
            writer.println("<?xml version='1.0' encoding='utf-8'?>");
            writer.println("<tomcat-users>");

            // Print entries for each defined role, group, and user
            Iterator<?> values = null;
            values = getRoles();
            while (values.hasNext()) {
                writer.print("  ");
                writer.println(values.next());
            }
            values = getGroups();
            while (values.hasNext()) {
                writer.print("  ");
                writer.println(values.next());
            }
            values = getUsers();
            while (values.hasNext()) {
                writer.print("  ");
                writer.println(((MemoryUser) values.next()).toXml());
            }

            // Print the file epilog
            writer.println("</tomcat-users>");

            // Check for errors that occurred while printing
            if (writer.checkError()) {
                writer.close();
                fileNew.delete();
                throw new IOException
                    (sm.getString("memoryUserDatabase.writeException",
                                  fileNew.getAbsolutePath()));
            }
            writer.close();
        } catch (IOException e) {
            if (writer != null) {
                writer.close();
            }
            fileNew.delete();
            throw e;
        }

        // Perform the required renames to permanently save this file
        File fileOld = new File(pathnameOld);
        if (!fileOld.isAbsolute()) {
            fileOld =
                new File(System.getProperty(Globals.CATALINA_BASE_PROP), pathnameOld);
        }
        fileOld.delete();
        File fileOrig = new File(pathname);
        if (!fileOrig.isAbsolute()) {
            fileOrig =
                new File(System.getProperty(Globals.CATALINA_BASE_PROP), pathname);
        }
        if (fileOrig.exists()) {
            fileOld.delete();
            if (!fileOrig.renameTo(fileOld)) {
                throw new IOException
                    (sm.getString("memoryUserDatabase.renameOld",
                                  fileOld.getAbsolutePath()));
            }
        }
        if (!fileNew.renameTo(fileOrig)) {
            if (fileOld.exists()) {
                fileOld.renameTo(fileOrig);
            }
            throw new IOException
                (sm.getString("memoryUserDatabase.renameNew",
                              fileOrig.getAbsolutePath()));
        }
        fileOld.delete();

    }

    /**
     * Return a String representation of this UserDatabase.
     */
    @Override
    public String toString() {

        StringBuilder sb = new StringBuilder("MemoryUserDatabase[id=");
        sb.append(this.id);
        sb.append(",pathname=");
        sb.append(pathname);
        sb.append(",groupCount=");
        sb.append(this.groups.size());
        sb.append(",roleCount=");
        sb.append(this.roles.size());
        sb.append(",userCount=");
        sb.append(this.users.size());
        sb.append("]");
        return (sb.toString());
    }
}

/**
 * Digester object creation factory for group instances.
 */
class MemoryGroupCreationFactory extends AbstractObjectCreationFactory {

    public MemoryGroupCreationFactory(MemoryUserDatabase database) {
        this.database = database;
    }

    @Override
    public Object createObject(Attributes attributes) {
        String groupname = attributes.getValue("groupname");
        if (groupname == null) {
            groupname = attributes.getValue("name");
        }
        String description = attributes.getValue("description");
        String roles = attributes.getValue("roles");
        Group group = database.createGroup(groupname, description);
        if (roles != null) {
            while (roles.length() > 0) {
                String rolename = null;
                int comma = roles.indexOf(',');
                if (comma >= 0) {
                    rolename = roles.substring(0, comma).trim();
                    roles = roles.substring(comma + 1);
                } else {
                    rolename = roles.trim();
                    roles = "";
                }
                if (rolename.length() > 0) {
                    Role role = database.findRole(rolename);
                    if (role == null) {
                        role = database.createRole(rolename, null);
                    }
                    group.addRole(role);
                }
            }
        }
        return (group);
    }

    private final MemoryUserDatabase database;
}

/**
 * Digester object creation factory for role instances.
 */
class MemoryRoleCreationFactory extends AbstractObjectCreationFactory {

    public MemoryRoleCreationFactory(MemoryUserDatabase database) {
        this.database = database;
    }

    @Override
    public Object createObject(Attributes attributes) {
        String rolename = attributes.getValue("rolename");
        if (rolename == null) {
            rolename = attributes.getValue("name");
        }
        String description = attributes.getValue("description");
        Role role = database.createRole(rolename, description);
        return (role);
    }

    private final MemoryUserDatabase database;
}

/**
 * Digester object creation factory for user instances.
 */
class MemoryUserCreationFactory extends AbstractObjectCreationFactory {

    public MemoryUserCreationFactory(MemoryUserDatabase database) {
        this.database = database;
    }

    @Override
    public Object createObject(Attributes attributes) {
        String username = attributes.getValue("username");
        if (username == null) {
            username = attributes.getValue("name");
        }
        String password = attributes.getValue("password");
        String fullName = attributes.getValue("fullName");
        if (fullName == null) {
            fullName = attributes.getValue("fullname");
        }
        String groups = attributes.getValue("groups");
        String roles = attributes.getValue("roles");
        User user = database.createUser(username, password, fullName);
        if (groups != null) {
            while (groups.length() > 0) {
                String groupname = null;
                int comma = groups.indexOf(',');
                if (comma >= 0) {
                    groupname = groups.substring(0, comma).trim();
                    groups = groups.substring(comma + 1);
                } else {
                    groupname = groups.trim();
                    groups = "";
                }
                if (groupname.length() > 0) {
                    Group group = database.findGroup(groupname);
                    if (group == null) {
                        group = database.createGroup(groupname, null);
                    }
                    user.addGroup(group);
                }
            }
        }
        if (roles != null) {
            while (roles.length() > 0) {
                String rolename = null;
                int comma = roles.indexOf(',');
                if (comma >= 0) {
                    rolename = roles.substring(0, comma).trim();
                    roles = roles.substring(comma + 1);
                } else {
                    rolename = roles.trim();
                    roles = "";
                }
                if (rolename.length() > 0) {
                    Role role = database.findRole(rolename);
                    if (role == null) {
                        role = database.createRole(rolename, null);
                    }
                    user.addRole(role);
                }
            }
        }
        return (user);
    }

    private final MemoryUserDatabase database;
}


text:
module ActsAsFavorite
  module Favoriter

    def self.included(base)
      base.extend ClassMethods
    end

    module ClassMethods
      def acts_as_favoriter
        has_many :favorites, as: :favoriter, dependent: :destroy
        include ActsAsFavorite::Favoriter::InstanceMethods
      end

      def favorable?
        true
      end
    end

    module InstanceMethods
      #instance methods
      def favorite?(favorable)
        favorites.find_by(favorable_id: favorable.id, favorable_type: favorable.class.base_class.name).present?
      end

      def favorite(favorable)
        unless self.favorite?(favorable)
          favorites.create(favorable_id: favorable.id, favorable_type: favorable.class.base_class.name)
        end
      end

      def unfavorite(favorable)
        records = favorites.find_by(favorable_id: favorable.id, favorable_type: favorable.class.base_class.name)
        records.try(:destroy)
      end

      def update_favorite(favorable)
        records = favorites.find(favorable.id)
        records.update_attributes(favorable_id: favorable.id, favorable_type: favorable.class.base_class.name)
      end
    end
  end
end


Redlands, California—Esri, the global leader in spatial analytics, was honored by the City of San Diego, California, which declared Monday, July 10 as "Esri User Conference Day." The declaration celebrates the city's gratitude for the software company's 20th year of User Conferences in San Diego.
The annual Esri User Conference is one of the few conferences to ever receive such an honor from the City of San Diego. It is the destination for international technology experts, educators, and geographic information system (GIS) users from every discipline—including commercial businesses, governments, and nonprofits—seeking to unlock the hidden potential of their data.
The San Diego Convention Center is a premier destination for large-scale events like the Esri User Conference, which will bring an estimated 17,000 people to the area. Users with backgrounds ranging from tech startups to government intelligence gather to learn the latest GIS trends and technology, as well as network with each other.
"We are incredibly honored to be recognized in this way," said Jack Dangermond, Esri founder and president. "We look forward to coming back to San Diego for future User Conferences in the years ahead to see all the inspirational ways our customers are improving their organizations and making the world a better place."
San Diego Mayor Kevin Falconer presented Esri with a proclamation and plaque formally recognizing "Esri User Conference Day" in the city. This year's conference will be held July 10–14 at the San Diego Convention Center.
For more information on the Esri User Conference, visit go.esri.com/uc17.


text:
John Ruskin's Continental Tour 1835
The Written Records and Drawings
Edited by Keith Hanley and Caroline S. Hull
Click cover to enlarge
Buy hardback at:
Buy paperback at:
Booksellers & libraries:
ipage® at Ingram
John Ruskin (1819-1900), English critic
3 other titles
Legenda (General Series)
19 December 2016 • 308pp
ISBN: 978-1-906540-85-2 (hardback) • RRP £75, $99, €85
ISBN: 978-1-781883-00-6 (paperback, 30 September 2018) • RRP £12.49, $14.99, €14.99
ISBN: 978-1-781883-01-3 (JSTOR ebook)
Access online: Books@JSTOR
ModernEnglishArtstudent-priced
In addition to its original library hardback edition, this title is now on sale in the new student-priced Legenda paperback range.
John Ruskin's training as an interdisciplinary polymath started in childhood. He learned to memorise the Bible at his mother's knee and published his first poem aged ten. His lifelong fascination with geology found its earliest expression in journal articles from the age of fifteen, while his considerable talents as a draughtsman were developed by leading drawing masters before he was sixteen. Rather than being a prodigy in one particular field, it was his precocious mix of religion, science and art that laid the foundations for the fulfilment of his career as a critic of art, architecture and society. The cultural tours that he made with his family as he grew up provided the crucial focus for these developing interests, and the second extended tour of the Continent in 1835 at the age of sixteen in particular established the paradigm for his orchestrated representation and analysis of cultural experience along 'the old road', through France to Chamonix, and through the Swiss Alps to northern Italy as far as Venice.
His diary of the journey and associated writings, together with numerous drawings he made in relation to it, are annotated and fully catalogued for the first time in this edition that includes maps and an introductory essay.
Keith Hanley is Professor of English Literature at Lancaster University, where he directed the Ruskin Centre, 2000-08. His books include John Ruskin's Romantic Tours, 1837-1838: Travelling North (Edwin Mellen Press, 2007) and, with J. K. Walton, Constructing Cultural Tourism: John Ruskin and the Tourist Gaze (Channel View, 2010). Co-edited collections include: with R. Dickinson, Ruskin's Struggle for Coherence: Self-Representation through Art, Place and Society (Cambridge Scholars Press, 2008); with E. Sdegno, Ruskin, Venice and Nineteenth-Century Cultural Travel (Le Bricole, 2010); and with Brian Maidment, Persistent Ruskin: Studies in Influence, Assimilation and Effect (Ashgate, 2013).
Caroline Hull studied the History of Art at Princeton and Yale Universities and has taught undergraduate and postgraduate students in the United States and the UK. With her husband, Andrew Jotischky, Professor of Medieval History at Lancaster University, she has co-written The Penguin Historical Atlas of the Medieval World (2005) and The Penguin Historical Atlas of the Bible Lands (2009). She has contributed to a number of academic publications and co-curated several exhibitions primarily focusing on ecclesiastical art and architecture. Currently Caroline is a regional manager for an international Catholic charity.
John Ruskin's Continental Tour 1835 is the winner of the 2017 Ruskin Society Prize.
See news item: The Ruskin Society Book Prize (12 February 2018)
and: To the Alps with Ruskin: An Interview with Keith Hanley (12 February 2018)
'At a time when scholars often find it difficult to find support for editions of archival and biographical materials relating to significant cultural figures, it is pleasing that this important volume has found its way into print through the endeavours of the editors and the MHRA, whose Legenda imprint makes high-quality editions of such materials available... The edition is perfectly conceived and delivers something approaching perfection. It should be of interest beyond Ruskin Studies, particularly to scholars of Romantic art, poetry, and landscape tourism, nineteenth-century travel, and Victorian science.' — Mark Frost, Modern Language Review 113.4, October 2018, 863-64 (full text online)
'The interest of the texts collected in this volume is on the whole remarkable. They represent a variety of literary genres ranging from the prose diary, the letter in verse, the dramatic sketch, the short story narrative, genres through which the same travel matter is shaped and reshaped, demonstrating the precociousness and versatility of Ruskin's genius, his witty ironic vein, but also his brilliant mastery of prose... The recent interest in emotional labour involved in diary and travel writing will certainly profit from the fresh material unearthed by this critical edition.' — Emma Sdegno, Review of English Studies 69, September 2018, 803-05 (full text online)
Keith Hanley
Cite this article in standard MHRA style:
Bibliography entry:
Hanley, Keith, introduction to , in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 1–35
First footnote reference: 35 Keith Hanley, introduction to , in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 1–35, p. 21.
Subsequent footnote reference: 37 Hanley, p. 47.
(To see how these citations were worked out, follow this link.)
Cite this article in author-date MHRA style:
Hanley, Keith. 2016. Introduction to , in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 1–35
Example citation: 'A quotation occurring on page 21 of this work' (Hanley 2016: 21).
Example footnote reference: 35 Hanley 2016: 21.
This article has a Digital Object Identifier (DOI):
The DOI is <doi:10.2307/j.ctvfc564k.4> and can be linked to as http://dx.doi.org/10.2307/j.ctvfc564k.4
The 1835 Itinerary
Hanley, Keith, 'The 1835 Itinerary', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 36–37
First footnote reference: 35 Keith Hanley, 'The 1835 Itinerary', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 36–37, p. 21.
Hanley, Keith. 2016. 'The 1835 Itinerary', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 36–37
Textual Note
Hanley, Keith, 'Textual Note', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 38–40
First footnote reference: 35 Keith Hanley, 'Textual Note', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 38–40, p. 21.
Hanley, Keith. 2016. 'Textual Note', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 38–40
The 1835 Diary
Hanley, Keith, 'The 1835 Diary', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 41–116
First footnote reference: 35 Keith Hanley, 'The 1835 Diary', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 41–116, p. 21.
Hanley, Keith. 2016. 'The 1835 Diary', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 41–116
Verse Journal: A Tour through France to Chamouni
Hanley, Keith, 'Verse Journal: A Tour through France to Chamouni', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 117–50
First footnote reference: 35 Keith Hanley, 'Verse Journal: A Tour through France to Chamouni', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 117–50, p. 21.
Hanley, Keith. 2016. 'Verse Journal: A Tour through France to Chamouni', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 117–50
A Letter from France
Hanley, Keith, 'A Letter from France', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 151–59
First footnote reference: 35 Keith Hanley, 'A Letter from France', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 151–59, p. 21.
Hanley, Keith. 2016. 'A Letter from France', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 151–59
Letter to Willoughby Jones
Hanley, Keith, 'Letter to Willoughby Jones', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 160–66
First footnote reference: 35 Keith Hanley, 'Letter to Willoughby Jones', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 160–66, p. 21.
Hanley, Keith. 2016. 'Letter to Willoughby Jones', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 160–66
The DOI is <doi:10.2307/j.ctvfc564k.10> and can be linked to as http://dx.doi.org/10.2307/j.ctvfc564k.10
The Drawings
Caroline S. Hull
Hull, Caroline S., 'The Drawings', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 167–212
First footnote reference: 35 Caroline S. Hull, 'The Drawings', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 167–212, p. 21.
Subsequent footnote reference: 37 Hull, p. 47.
Hull, Caroline S.. 2016. 'The Drawings', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 167–212
Example citation: 'A quotation occurring on page 21 of this work' (Hull 2016: 21).
Example footnote reference: 35 Hull 2016: 21.
The Drawings: Catalogue
Hull, Caroline S., 'The Drawings: Catalogue', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 213–32
First footnote reference: 35 Caroline S. Hull, 'The Drawings: Catalogue', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 213–32, p. 21.
Hull, Caroline S.. 2016. 'The Drawings: Catalogue', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 213–32
Appendix I Poems
Hanley, Keith, 'Appendix I Poems', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 233–36
First footnote reference: 35 Keith Hanley, 'Appendix I Poems', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 233–36, p. 21.
Hanley, Keith. 2016. 'Appendix I Poems', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 233–36
Appendix II Other Literary Outcomes
Hanley, Keith, 'Appendix II Other Literary Outcomes', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 237–85
First footnote reference: 35 Keith Hanley, 'Appendix II Other Literary Outcomes', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 237–85, p. 21.
Hanley, Keith. 2016. 'Appendix II Other Literary Outcomes', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 237–85
Appendix III John James Ruskin's Diary, 1835
Hanley, Keith, 'Appendix III John James Ruskin's Diary, 1835', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 286–98
First footnote reference: 35 Keith Hanley, 'Appendix III John James Ruskin's Diary, 1835', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), pp. 286–98, p. 21.
Hanley, Keith. 2016. 'Appendix III John James Ruskin's Diary, 1835', in John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda), pp. 286–98
Cite this volume in standard MHRA style
Hanley, Keith, and Caroline S. Hull (eds), John Ruskin's Continental Tour 1835: The Written Records and Drawings (Cambridge: Legenda, 2016)
First footnote reference: 35 John Ruskin's Continental Tour 1835: The Written Records and Drawings, ed. by Keith Hanley and Caroline S. Hull (Cambridge: Legenda, 2016), p. 21.
Subsequent footnote reference: 37 Hanley and Hull, p. 47.
Cite this volume in MHRA author-date style
Hanley, Keith, and Caroline S. Hull (eds). 2016. John Ruskin's Continental Tour 1835: The Written Records and Drawings (Cambridge: Legenda)
Example citation: 'A quotation occurring on page 21 of this work' (Hanley and Hull 2016: 21).
Example footnote reference: 35 Hanley and Hull 2016: 21.
This title is distributed on behalf of MHRA by Ingram's. Booksellers and libraries can order direct from Ingram by setting up a free ipage® Account: click here for more.
Permanent link to this title:
www.mhra.org.uk/publications/John-Ruskins-Continental-Tour-1835


The ACC suddenly has become the "center" of the college football universe.
The ACC's football programs may not be a big deal when it comes to national rankings, bowl games and signing hot-shot high school prospects.
But with the addition of Duke redshirt senior Brian Moore to the Dave Remington Award watch list, the ACC now has five of the contenders for the award presented annually to the nation's best center.
Moore joins Jay Finch (Georgia Tech), Dalton Freeman (Clemson, 1st team all-ACC in 2011), Andrew Miller (Virginia Tech) and Camden Wentz (N.C. State) among the ACC hopefuls.
The ACC has never produced a Remington Award winner, but obviously this could be the breakthrough year.
Miami's Brett Romberg was the recipient in 2002 and Virginia Tech's Jake Grove the following season, but that was when those schools were in the Big East.
Last year's winner was Michigan's Dave Molk.
Oh sure, this explosion of talent in the middle of the interior offensive line may not turn as many heads as national titles and Heisman Trophy winners.
But hey, most successful plays begin with a successful snap.
RALEIGH - North Carolina State head football coach Tom O'Brien says safeties Donald Coleman and Dean Haynes are transferring.
Wolfpack officials, who announced the players' decisions Friday, said Coleman has graduated and will be eligible to play for his new school immediately.
Haynes will be a redshirt junior this fall. He arrived at N.C. State in 2009 as a defensive back and began the 2010 season as the starter at running back. Last year he was moved back to the secondary but played only 12 snaps for the Wolfpack.
O'Brien said backup quarterback Brian Taylor is no longer playing football but will remain enrolled at N.C. State.
O'Brien announced that the Wolfpack awarded scholarships to two walk-ons, linebacker Zach Gentry and fullback Tyler Purvis. Purvis caught two touchdown passes last season in the Pack's loss to Georgia Tech.


text:
Ghana didn't violate the sovereign right of Ivory Coast - ITLOS rules on border dispute
Saturday, September 23, 2017 at 7:45 PM by Jeffrey Mensah
-ITLOS rejected Ghana's claim of tacit agreement with Ivory Coast but upheld its argument for the use of equidistance for the delimitation of the boundaries
The International Tribunal for the Law of the Sea (ITLOS) has delivered its ruling on the four-year-old maritime dispute between Ghana and its Western neighbour, Ivory Coast.
The Special Chamber in session
In a seven point unanimous decision, the tribunal chaired by President of the Special Chamber, Judge Boualem Bouguetaia declared that Ghana did not violate Ivory Coast's maritime boundary or any articles of the ITLOS.
Though the special chamber dismissed Ghana's claim that there has been a tacit agreement between it and Ivory Coast concerning their borders, it upheld its argument for the use of equidistance for the delimitation of the boundaries.
Th ruling, according to Dr Theo Acheampong, a Petroleum Economist at the University of Aberdeen, effectively means Ghana has won the case.
READ ALSO: Akufo-Addo, wife chill in New York while on duty
"We don't lose much since there is no compensation to be paid to Cote d'Ivoire", he explained
There had been concerns over the effect of the ruling on Ghana's oil production but for him the ruling was not going to affect Ghana's oil production.
"The map produced by the court doesn't show that our oil fields are going to be affected", he pointed out.
YEN is building a platform where Ghanaians can share local news and own experiences with each other.
Witnessing an incident? Want to tell about a local problem? Know someone who is extremely talented and needs recognition?
Your stories and photos are always welcome. Send us a message via YEN's official Facebook page.
Fameye Sista afia Petra trust Web series download website Franklin akpotha
Talented young man builds fully functional 'pragya' from scratch; video wows many
Married for 11 years; together for 20: Couple who fell in love in 2002 share 'then' & 'now' photos
Brains and beauty: Smart twin sisters to earn PhD at same university after bagging master's
Captain Smart faces possible long term jail over bribery; police drop evidence against outspoken presenter
Who is Thue Rasmussen? Age, net worth, movies and TV shows
9 stunning photos of Northern women which prove they are the most beautiful in Ghana


text:
Make Like A Leaf: Researchers Developing Method To Convert Carbon Dioxide
Professor Jun Huang from the University of Sydney's School of Chemical and Biomolecular Engineering is developing a carbon capture method…
that aims to go one step beyond storage, instead converting and recycling carbon dioxide (CO2) into raw materials that can be used to create fuels and chemicals.
"Drawing inspiration from leaves and plants, we have developed an artificial photosynthesis method," said Professor Huang.
"To simulate photosynthesis, we have built microplates of carbon layered with carbon quantum dots with tiny pores that absorb CO2 and water.
"Once carbon dioxide and water are absorbed, a chemical process occurs that combines both compounds and turns them into hydrocarbon, an organic compound that can be used for fuels, pharmaceuticals, agrichemicals, clothing, and construction.
"Following our most recent findings, the next phase of our research will focus on large-scale catalyst synthesis and the design of a reactor for large scale conversion," he said.
While the research has been conducted on a nanoscale, Professor Huang hopes the technology will be used by power stations to capture emissions from burning fossil fuels.
"Our CO2 absorbent plates may be small, but our goal is to now create large panels, similar to solar panels, that would be used by industry to absorb and convert large volumes of CO2 ," said Professor Huang.
CO2 emissions from the burning of fossil fuels and transport are the main cause of global warming, contributing up to 65 percent of the total global greenhouse gas emissions.
While plants breathe in CO2 , a process called photosynthesis, deforestation and development has decreased their overall capacity to restore oxygen levels.
As nations attempt to curb emissions and divest from fossil fuels, Dr. Huang feels there should also be an increased focus on carbon capture and re-use to minimize the harmful impact of increased atmospheric CO2.
"The current global commitment to cut carbon emissions by 30 percent by 2030 is an enormous challenge, and one that will be difficult to achieve given that energy needs are accelerating," said Professor Huang.
Carbon capture technologies have been around for over 10 years. However, they require carbon to being held in deep underground chambers.
"Carbon conversion could be a financially viable alternative as it would allow for the generation of industrial quantities of materials, such as methanol, which is a useful material for production of fuels and other chemicals," he concluded.


text:
Q: Glossary page list spacing I am compiling a document with a glossary using \RequirePackage[xindy]{glossaries-extra} as well as a personalised glossary style.
%% Glossary
\newglossarystyle{myGlossStyle}{
    \setglossarystyle{long3colheader}
    \renewcommand*{\glossaryheader}{
    \bf{Abbreviation} & \bf{Description} & \bf{Page}
    \vspace{5pt}
    \endhead}}
\setglossarystyle{myGlossStyle}
\preto\chapter{\glsresetall}
\makeglossary

Some of my entries are for example:
\setabbreviationstyle[acronym]{long-short}
\newacronym{ilp}{ILP}{Integer Linear Programming}
\newacronym[longplural={Linear Matrix Inequalities}]{lmi}{LMI}{Linear Matrix Inequality}
\newacronym{lp}{LP}{Linear Programming}

Although, pdfTeX is complaining that the spacing in the page list column has under-full boxes, and when I look at it, the spacing is indeed not consistent.

I had a look around but I didn't see any way to fix this issue so far.
Any ideas?

A: I have found a fix that might hopefully be useful to other people,
%% Glossary
\newglossarystyle{myGlossStyle}{
    \setglossarystyle{long3colheader}
    \renewcommand*{\glossaryheader}{
    \bf{Abbreviation} & \bf{Description} & \bf{Page}
    \vspace{7.5pt}
    \endhead}}
\setglossarystyle{myGlossStyle}
\setlength{\glsdescwidth}{0.6\linewidth} % change description width
\setlength{\glspagelistwidth}{0.2\linewidth} % change page list width
\preto\chapter{\glsresetall}
\makeglossary

Changing the width of the description and page list, modifies the spacing between the page numbers and solve the problem.
Hope it will be helpful to others as well.
Romain

redpajama_set_name: RedPajamaStackExchange


text:
FOAF provides a framework for creating and publishing personal information in a machine-readable fashion. As you learn FOAF, you will also get acquainted in a practical way with RDF.
The Friend of a Friend or FOAF project (http://www.foaf-project.org/) is a community-driven effort to define an RDF vocabulary for expressing metadata about people and their interests, relationships, and activities. Founded by Dan Brickley and Libby Miller, the FOAF project is an open, community-led initiative that is tackling head-on a small and relatively manageable piece of the W3C's wider Semantic Web goal of creating a machine-processable web of data. Achieving this goal quickly requires a network effect that will rapidly yield a mass of data. Network effects mean people. It seems a fairly safe bet that any early Semantic Web successes are going to be riding on the back of people-centric applications. Indeed, everything interesting that we might want to describe on the Semantic Web was arguably created by or involves people in some form or another. And FOAF is all about people.
FOAF facilitates the creation of the Semantic Web equivalent of the archetypal personal homepage: my name is Leigh, this is a picture of me, I'm interested in XML, and here are some links to my friends. And just like the HTML version, FOAF documents can be linked together to form a web of data, with well-defined semantics.
Being a W3C Resource Description Framework (RDF) application (http://www.w3.org/RDF/) means that FOAF can claim the usual benefits of being easily harvested and aggregated. And like all RDF vocabularies, it can be easily combined with other vocabularies, allowing the capture of a very rich set of metadata. This hack introduces the basic terms of the FOAF vocabulary, illustrating them with a number of examples. The hack concludes with a brief review of the more interesting FOAF applications and considers some other uses for the data.
4.7.1 The FOAF Vocabulary
Like any well-behaved vocabulary, FOAF publishes both its schema and specification at its namespace URI: http://xmlns.com/foaf/0.1. The documentation is thorough and includes definitions of all classes and properties defined in the associated RDF schema. The schema, described using RDF Schema (http://www.w3.org/TR/rdf-schema/) and the Web Ontology Language, or OWL (http://www.w3.org/TR/owl-features/), is embedded in the specification (near the end), which is written in XHTML 1.0 (http://www.w3.org/TR/xhtml1/). However, it can also be accessed directly (http://xmlns.com/foaf/0.1/index.rdf).
Rather than cover the whole vocabulary, this hack focuses on two of the most commonly used classes it defines: Person and Image. The remaining definitions cover the description of documents, projects, groups, and organizations; consult the specification for more information. The community also has a lively mailing list (http://rdfweb.org/mailman/listinfo/rdfweb-dev), IRC channel (http://www.ilrt.bris.ac.uk/discovery/chatlogs/foaf/), and project Wiki (http://rdfweb.org/topic/), which serve as invaluable sources of additional information and discussion.
4.7.2 Personal Metadata
The Person class is the core of the FOAF vocabulary. A simple example (Example 4-7) will illustrate its basic usage.
Example 4-7. Person.rdf
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<foaf:Person>
<foaf:name>Peter Parker</foaf:name>
<foaf:mbox rdf:resource="mailto:peter.parker@dailybugle.com"/>
</foaf:Person>
In other words, Person.rdf says there is a person with the name "Peter Parker" who has an email address of "peter.parker@dailybugle.com".
Publishing data containing plain-text email addresses is just asking for spam; to avoid this, FOAF defines another property, foaf:mbox_sha1sum, whose value is a SHA1 encoded email address complete with the mailto: URI scheme prefix. The FOAF project Wiki has a handy reference page (http://rdfweb.org/topic/HashPrograms) pointing to a number of different ways of generating a SHA1 sum. The end result of applying this algorithm is a string unique to a given email address (or mailbox). The next fragment (Example 4-8) demonstrates the use of this and several other new properties that further describe Peter Parker.
Example 4-8. Augmented Person class
<foaf:gender>Male</foaf:gender>
<foaf:title>Mr</foaf:title>
<foaf:givenname>Peter</foaf:givenname>
<foaf:family_name>Parker</foaf:family_name>
<foaf:mbox_sha1sum>cf2f4bd069302febd8d7c26d803f63fa7f20bd82
</foaf:mbox_sha1sum>
<foaf:homepage rdf:resource="http://www.example.com/spidey"/>
<foaf:weblog rdf:resource="http://www.example.com/spidey/blog/"/>
This is a slightly richer description of Peter Parker, including some granularity in the markup of his name through the use of foaf:title, foaf:givenname, and foaf:family_name. We also now know that Peter Parker is male (foaf:gender) and has both a homepage (foaf:homepage) and a weblog (foaf:weblog).
4.7.3 Identifying Marks
Keen-eyed RDF enthusiasts will already have noticed that neither of these examples assigns a URI to the resource called Peter Parker; that is, there is no rdf:about attribute on the foaf:Person resource, as in:
<foaf:Person rdf:about="...uri to identify peter..."/>
That's because there is still some debate around both the social and technical implications of assigning URIs to people. Which URI identifies you? Who assigns these URIs? What problems are associated with having multiple URIs (assigned by different people) for the same person? Side-stepping this potential minefield, FOAF borrows the concept of an inverse functional property (IFP) from OWL. An inverse functional property is simply a property whose value uniquely identifies a resource.
The FOAF schema defines several inverse functional properties, including foaf:mbox, foaf:mbox_sha1sum, and foaf:homepage; consult the schema documentation for the complete list. An application harvesting FOAF data can, on encountering two resources that have the same values for an inverse functional property, safely merge the description of each and the relations of which they are part. This process, often referred to as smushing, must be carried out when aggregating FOAF data to ensure that data about different resources is correctly merged. As an example, consider the following RDF fragment:
<foaf:name>Spider-Man</foaf:name>
Applying our knowledge that foaf:mbox:sha1sum is an inverse functional property, we can merge the descriptions together to discover that these statements actually describe a single person. Spider-Man is unmasked! While perfectly valid, this may not be desirable in all circumstances, and flags the importance of FOAF aggregators recording the source (provenance) of their data. This allows incorrect and potentially malicious data to be identified and isolated.
Before moving on, it's worth noting that while FOAF defines the email address properties (foaf:mbox_sha1sum and foaf:mbox) as uniquely identifying a person, this is not the same thing as saying that all email addresses are owned by a unique person. What the FOAF schema claims is that any email address used in a foaf:mbox (or encoded as a foaf:mbox_sha1sum) property uniquely identifies a person. If it doesn't, then it's not a suitable value for that property.
4.7.4 It's Who You Know
Having captured some basic metadata about Peter Parker, it's time to go a step further and begin describing his relationships with others. The foaf:knows property is used to assert that there is some relationship between two people. Precisely what this relationship is and whether it's reciprocal (if you know me, do I automatically know you?), is deliberately left undefined.
For obvious reasons, modeling interpersonal relationships can be a tricky business. The FOAF project has therefore taken the prudent step of simply allowing a relationship to be defined without additional qualification. It is up to other communities (and vocabularies) to further define different types of relationships.
Using foaf:knows is simple: one foaf:Person foaf:knows another. The following example (knows.rdf in Example 4-9) shows two alternative ways of writing this using the RDF/XML syntax. The first uses a cross reference to a person defined in the same document (using the rdf:nodeID attribute), while the second describes the foaf:Person in situ within the foaf:knows property. The end result is the same: Peter Parker knows both Aunt May and Harry Osborn.
Example 4-9. knows.rdf
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<foaf:Person rdf:nodeID="harry">
<foaf:name>Harry Osborn</foaf:name>
<rdfs:seeAlso rdf:resource="http://www.osborn.com/harry.rdf"/>
<foaf:knows rdf:nodeID="harry"/>
<foaf:knows>
<foaf:name>Aunt May</foaf:name>
</foaf:knows>
The other thing to notice is that, in addition to the foaf:knows relationship between Peter and Harry, a link has also been introduced to Harry's own FOAF document, using the rdfs:seeAlso property. Defined by the RDF Schema specification, the rdfs:seeAlso property indicates a resource that may contain additional information about its associated resource. In this case, it's being used to point to Harry Osborn's own FOAF description.
It is through the use of the rdfs:seeAlso property that FOAF can be used to build a web of machine-processable metadata; rdfs:seeAlso is to RDF what the anchor element is to HTML. Applications can be written to spider (or scutter, using the FOAF community's terminology; see http://rdfweb.org/topic/Scutter] these RDF hyperlinks to build a database of FOAF data.
4.7.5 Finer-Grained Relationships
The loose definition of foaf:knows won't fit all applications, particularly those geared to capture information about complex social and business networks. However, this doesn't mean that FOAF is unsuitable for such purposes; indeed, FOAF has the potential to be an open interchange format used by many different social networking applications.
The expectation is that additional vocabularies will be created to refine the general foaf:knows relationship to create something more specific. The correct way to achieve this is to declare new subproperties of foaf:knows. Stepping outside of FOAF for a moment, we can briefly demonstrate one example of this using the relationship schema created by Eric Vitiello and Ian Davis (http://purl.org/vocab/relationship).
The relationship schema defines a number of subproperties of foaf:knows, including parentOf, siblingOf, friendOf, and so on, from the namespace http://www.perceive.net/schemas/relationship/. Example 4-10 uses these properties to make some clearer statements about the relationships between Peter Parker and some of his contemporaries (relationship.rdf).
Example 4-10. relationship.rdf
xmlns:rel="http://www.perceive.net/schemas/relationship/">
<foaf:Person rdf:ID="spiderman">
<rel:enemyOf rdf:resource="#green-goblin"/>
<foaf:Person rdf:ID="green-goblin">
<foaf:name>Green Goblin</foaf:name>
<rel:enemyOf rdf:resource="#spiderman"/>
<foaf:Person rdf:ID="peter">
<rel:friendOf rdf:resource="#harry"/>
<foaf:Person rdf:ID="harry">
<rel:friendOf rdf:resource="#peter"/>
<rel:childOf rdf:resource="#norman"/>
<foaf:Person rdf:ID="norman">
<foaf:name>Norman Osborn</foaf:name>
<rel:parentOf rdf:resource="#harry"/>
While it is possible to model quite fine-grained relationships using this method, the most interesting applications will be those that can infer relationships between people based on other metadata. For example, have they collaborated on the same project, worked for the same company, or been pictured together in the same image? This brings us to Image, the other commonly used FOAF class.
4.7.6 Image Is Everything
Digital cameras being all the rage these days, it's not surprising that many people are interested in capturing metadata about their pictures. FOAF provides for this use case in several ways. First, using the foaf:depiction property we can make a statement that says "this person (resource) is shown in this image." FOAF also supports an inverse of this property (foaf:depicts) that allows us to make statements of the form "this image is a picture of this resource." Example 4-11 (Image.rdf) illustrates both of these properties.
Example 4-11. Image.rdf
xmlns:dc="http://purl.org/dc/elements/1.1/">
<foaf:depicts
rdf:resource="http://www.example.com/spidey/photos/peter.jpg"/>
<!-- codepiction -->
<foaf:Image rdf:about="http://www.example.com/spidey/photos/
spiderman/statue.jpg">
<dc:title>Battle on the Statue Of Liberty</dc:title>
<foaf:depicts rdf:resource="#spiderman"/>
<foaf:depicts rdf:resource="#green-goblin"/>
<foaf:maker rdf:resource="#peter"/>
</foaf:Image>
This RDF instance says that the image at http://www.example.com/spidey/photos/peter.jpg is a picture of Peter Parker. It also defines a foaf:Image resource (i.e., an image that can be found at a specific URI), which depicts both Spider-Man and the Green Goblin. Elements from the Dublin Core Metadata Initiative (http://dublincore.org/), such as dc:title, are often added to FOAF documents to title images, documents, and so forth.
Notice also that Peter Parker is defined as the author of the image using the foaf:maker property, which is used to relate a resource to its creator. The dc:creator term from Dublin Core isn't used here due to some issues with its loose definition.
4.7.7 Publishing FOAF Data
Having created an RDF document containing FOAF terms and copied it to the Web, the next step is to link the new information into the existing web of FOAF data. There are a few ways to do this:
Through foaf:knows. Ensuring that people who know you link to your FOAF data via an rdfs:seeAlso link will make the data discoverable.
Through the FOAF Bulletin Board, which is a Wiki page that links to dozens of FOAF files. FOAF harvesters generally include the RDF view of this page as one of their starting locations.
Through auto-discovery. The FOAF project has defined a means to link to a FOAF document from an HTML page using the link element; several tools now support this mechanism.
Beyond its initial developments, FOAF has potential in many areas. For example, painful web site registrations can become a thing of the past?instead you can just indicate the location of your FOAF description, where a script can grab your personal information. Throw in the relationships, and FOAF can be used as an interchange format between social networking sites, building an open infrastructure that allows end users to retain control over their own data. Also consider e-commerce sites such as Amazon, which have become successful because of their high levels of personalization. Getting the most from these sites involves a learning process in which the sites can discover your interests either through explicit preference setting or adapting product suggestions based on a purchase history. With FOAF, there's the potential to capture this information once, in a form that can be used not by just one site, but many. The user could then move freely between systems.
The FOAF application most immediately useful to the owner of a freshly published FOAF description is Morten Frederikson's FOAF Explorer (http://xml.mfd-consult.dk/foaf/explorer/), which can generate an HTML view of FOAF data, complete with referenced images and links to other data. For example look at my FOAF description at http://xml.mfd-consult.dk/foaf/explorer/?foaf=http://www.ldodds.com/ldodds.rdf.
FOAF Explorer provides an effective way to browse the network of FOAF data. With the addition of a Javascript bookmarklet (see http://www.ldodds.com/blog/archives/000026.html) to perform auto-discovery, it's easy to jump from a blog posting to a description of that person and their interests.
The most elegant way to browse the relationships in the network of FOAF data is by using Jim Ley's foafnaut (http://www.foafnaut.org/), an SVG application that provides a neat visualization of foaf:knows relationships. Here's the foafnaut view starting from my description: http://blub.foafnaut.org/?sha1=1bca73e5c6916c738d6ec7cc0597ad0e395e7ace
plink is a social networking site: http://www.plink.org/
foafbot (http://usefulinc.com/foaf/foafbot) and whwhwhwh (http://swordfish.rdfweb.org/discovery/2003/10/whwhwhwh/) are IRC bots that provide conversational interfaces onto FOAF data.
Libby Miller's codepiction experiments demonstrate a novel way to explore FOAF image metadata: http://swordfish.rdfweb.org/discovery/2001/08/codepict/
FOAF-a-matic tool for FOAF generation: http://www.ldodds.com/foaf/foaf-a-matic
?Leigh Dodds


f show an appreciation of the limitations of the study and suggest how it could be improved or taken further.
Makes statements describing the data. If relevant, there is some awareness of the different attitudes of some of the individuals and groups involved. There are some general concluding comments which have a link with the original aim(s).
range there is some genuinely analytical comment. If relevant, some links/relationships between data sets, and/or the different attitudes of many of the individuals or groups involved, are identified. Concluding comments derive from the data collected, and there may be some awareness of the inherent limitations of the study and/or suggestions for taking the study further.
Data is analysed in detail, making links, where relevant, to appropriate geographical theory. If quantitative analysis is attempted, it is used accurately and appropriately. Identifies and shows relevance of any links/relationships between data sets and/or the attitudes and values of most of the parties involved. Draws sound conclusions, explicitly supported by evidence, clearly related to the objectives of the study. Shows an awareness that explanations may be incomplete, and suggests how the study could be improved/taken further.


text:
Q: How to match vector values with colours from a colour ramp in R? This is probably a trivial thing to do in R, but I can't find any built-in function that does that:
How to transform a vector of values (let's say numeric values) to a vector of colours, given a colour ramp.

A: The idea in my comment above could be implemented via seq() and cut(). The first step is to create equal interval bins over the range of the data
brks <- with(mtcars, seq(min(mpg), max(mpg), length.out = 65))

We now assign each of the observations to one of the bins formed by the breaks brks
grps <- with(mtcars, cut(mpg, breaks = brks, include.lowest = TRUE))

grps is a factor indicating to which bin each observation in the data is assigned
> head(grps)
[1] (20.7,21]   (20.7,21]   (22.5,22.9] (21,21.4]   (18.5,18.8]
[6] (17.7,18.1]
64 Levels: [10.4,10.8] (10.8,11.1] (11.1,11.5] ... (33.5,33.9]

As grps is stored internally as an integer 1:nlevels(grps)) we can use this integer to index the colour ramp:
> terrain.colors(64)[grps]
 [1] "#CADF00FF" "#CADF00FF" "#E6D90EFF" "#D3E100FF" "#96D300FF"
 [6] "#85CF00FF" "#3CBA00FF" "#E8C133FF" "#E6D90EFF" "#9ED500FF"
[11] "#85CF00FF" "#67C700FF" "#76CB00FF" "#51C000FF" "#00A600FF"
[16] "#00A600FF" "#43BC00FF" "#F1D6D3FF" "#EFBEACFF" "#F2F2F2FF"
[21] "#DCE300FF" "#51C000FF" "#51C000FF" "#29B400FF" "#9ED500FF"
[26] "#EBB16EFF" "#EAB550FF" "#EFBEACFF" "#58C300FF" "#AFD900FF"
[31] "#4ABE00FF" "#D3E100FF"

An alternative might be to use colourRamp(), which returns a function that interpolates a set of provided colours. The produced function takes values in the range [0,1) that cover the range of the colour ramp. First we produce a colour ramp function that interpolates between the colours red and blue:
FUN <- colorRamp(c("red","blue"))

We then take our input data and get it on to a [0,1) interval:
MPG <- with(mtcars, (mpg - min(mpg)) / diff(range(mpg)))

We then use FUN() to generate the colours:
> cols <- FUN(MPG)
> head(cols)
         [,1]      [,2] [,3]
[1,] 139.9787 115.02128    0
[2,] 139.9787 115.02128    0
[3,] 120.4468 134.55319    0
[4,] 135.6383 119.36170    0
[5,] 164.9362  90.06383    0
[6,] 171.4468  83.55319    0

The object returned by FUN() is a matrix of values for the Red, Green, and Blue channels. To convert these to hex codes that R can use, we employ the rgb() function:
> rgb(cols, maxColorValue=256)
 [1] "#8B7300" "#8B7300" "#788600" "#877700" "#A45A00" "#AB5300"
 [7] "#D42A00" "#679700" "#788600" "#9F5F00" "#AE5000" "#BD4100"
[13] "#B34B00" "#CA3400" "#FE0000" "#FE0000" "#D02E00" "#10EE00"
[19] "#26D800" "#00FE00" "#867800" "#C73700" "#CA3400" "#DF1F00"
[25] "#9F5F00" "#47B700" "#55A900" "#26D800" "#C43A00" "#996500"
[31] "#CC3200" "#877700"


If you have been following Solar Impulse 2 since the exciting news broke of the visionary attempt to fly around the world powered only by the sun, you will be disappointed to hear that the plane has been forced back by a cold front on its leg from China to Hawaii.
The good news is that pilot André Borschberg landed safely in Nagoya, Japan, where he has offered thanks to the Japanese government for accepting his emergency landing request and is looking forward to another attempt to press on in the round the world journey of the solar-powered airplane. The plane turned back while on the most dangerous leg, a 6-day and 6-night flight of 5077 miles (8170 km) -- a similar path to the one from which Amelia Earhart disappeared.
Borschberg has to solo that distance, taking short naps to make it so far alone. After mentally preparing himself, Borschberg departed from Nanjing, China, on Saturday 30 at 18:39 UTC, towards Hawaii.
The Solar Impulse 2 was 36 hours into the trip, at the outside of the envelop for a go-nogo decision which the team reported must be made within the first day and a half of the flight plan if the light airplane were to succeed at returning to land in the face of strong headwinds.
Borschberg and a second pilot Bertrand Piccard trade off at the helm for various legs of the round the world journey, which they hope will promote clean energy. A new window for repeating the attempt has not yet been identified. Keep watch for more at the team's website Solar Impulse.
The go-nogo decision had to be made timely if the plane was to make it back to land in the face of contrary winds.


There are several reasons why a pine tree can become sick. It could become infested with insects, such as southern pine beetle, European pine sawfly, spruce spider mite, white pine weevil, western pine beetle or mountain pine beetle. It may also develop pine needle scale, which causes white scales to cover pine needles, leading to their death. Depending on the type of illness, it can take up to one year for a pine tree to die. In many cases, people don't notice their tree is sick until it's too late.
Look over the pine tree for disease or insect infestation. Take note of green needles that have turned brown, which points to the likelihood that they will die soon. Also notice white scales, which indicate pine needle scale.
Examine the base of the pine tree for sawdust. This indicates that the tree might be infested with pine borer or other insects.
Climb up the tree and saw off branches and limbs that appear to be sick. Cut the diseased wood off where it meets healthy branches.
Apply a crawler spray and/or insecticides to cure sick pine trees that have pine needle scale. Apply a series of two to three crawler sprays every seven days between May and July. Insecticides can be applied after the crawlers settle in June and August. Follow manufacturer's instructions.
Cut down on the risk of western and mountain pine beetle attacks by keeping pine trees from getting bruised. The wounds open the bark up to infestation.
Remove all vegetation, including weeds and grasses, from the base of pine trees. Keeping their root zones clear will help keep insects away.
Use an insecticide that targets borers. Most are applied as sprays to branches and pine tree trunks. They will not kill larvae that are already living in the tree but will target those that are tunneling through the bark. Follow the manufacturer's application instructions.
Unhealthy trees that have suffered from pest attacks will need several applications of insecticide.
Clean the saw blade between cuts, especially when cutting off diseased limbs. It's highly likely that you will spread the disease if you don't clean the blade.
Avoid cutting down a sick pine tree yourself; hire a professional.
Do not put diseased wood in a compost pile or burn it. Seal it in a plastic bag and discard it.