Every event needs somebody to run the show and they need to be located somewhere. For small events this would be the event manager, a phone and or radio and perhaps a table. As your event gets bigger in size and complexity then a designated space – gazebo, tent, portable cabin or room is required: to which people can be directed to. When you have large numbers attending your event or a lot of logically challenges (things or people) then the effective running of event control is critical to the ultimate success of your event. Event control can take many forms, but there are some important considerations that need to be thought about when setting up and operating them. Here are a few pointers.
How do you run event control effectively?
This is a fine balance between pleasing everyone, and getting the job done. There are some people who definitely need to be in event control and there are those who want to event control. Although in my experience working in event control is not usually something that is oversubscribed! Important decisions need to be made in event control, and this is best done in a quiet, controlled environment. Make a list of who needs to be in event control, versus who wants to be there. Overcrowding can become a problem if there is not a strict, controlled list of who has access to event control, and who can visit the event control room under supervision.
For large events then you would expect people like the following to be there, and these can include your Security, Medical and Fire leads, Police reps, Public Relations, CCTV, and Event Director / Manager and Safety Officer.
Everybody who needs to be part of making 'important event decisions' should be in Event Control or be able to easily and quickly get to it.
What are the backup room plans?
Event control needs to be located in an appropriate room or structure. However do consider what your back up plan would be if it became unusably or an evacuation is ordered (it happens). What is your back up plan – where could you move to, set up and make ready?
If you are using technology and communications systems at your event, ensure everyone is familiar with their use and knows their limitations? Do you have a backup plan for communications and radio systems – should they fail? This is worth working out before event day to prevent problems on the day.
Event control can only make decisions based on the information it receives and processes. So it has its limitations. The quality of the information received is paramount.
Event control needs good people to operate it but crucially event managers must deploy the best people they can at the event. Choose and train your 'on the ground teams' carefully and with the nature of your event in mind. Good event teams will ensure those in event control receive the most accurate information available and so enable them to make the most appropriate decisions.
With large events it is always sensible to carry out pre-event table top exercises. Set them up so they are at different times of day, cover different types of situations and with multiple stakeholders to ensure common understanding of requirements and to help build your event control team. It is also wise to ensure you carry out proper shift handover / briefing / debriefings to maintain situational awareness within the control room.
I suggest everybody in event control room and all key personal and stewards should 'walk the site'. This will help site orientation and at this point you can note and agree what are significant landmarks (everyone knows) on common view maps.
'Suspicious' is anything that does not 'fit' or produces a level of discomfort or interest. Event control staff / stewards and security officers on the ground will see things differently (both visually and cognitively) and this needs to be considered when giving and receiving information. Help staff to gain a familiarity of the event environment in order to understand what is 'normal' for the environment.
Logging has to be a constant, continuous process as human recall in such a pressured environment is flawed.
Can I confirm….checking and verifying information?
We all see things differently so don't be afraid to check and verify any information received. In may be inaccurate and can be influenced by biases of interpretation and personal perception. It is wise therefore to foster an environment where is it acceptable and necessary to check information received. Clearly not all information needs double checking!
It is important to establish open communications and good relationships within the control room, and between the control room and those on the ground to reduce any perceived barriers to reporting.
All those in event control should as a matter of routine introduce themselves to key staff on the ground to improve reporting and to break down any barriers.
Do not use any acronyms or abbreviations. This will reduce misunderstandings.
Running an event is tough: I know, as do many of you, but there are a few things you can do to help make event day a little less stressful. The above will help ensure your event day is memorable for all the right reason.
Of course event control should also contain a box of chocolates and access to coffee!
What do you think makes a good event controller?


text:
'Callous' rogue trader charged couple for repairs after labourer fell through roof during unsafe WaH
Open-access content Thursday 31st January 2019
John Thompson, trading as Thompson Roofing and Guttering, told the couple that the structure of their roof was to blame for the labourer's fall. He claimed the battens and timbers were rotten and spaced too far apart and charged them £7,200 to carry out repair work.
Neighbours alerted Buckinghamshire and Surrey Trading Standards, whose officers notified the Health and Safety Executive (HSE) and this led to a joint prosecution.
Last year, Thompson admitted breaching reg 6(3) of the Work at Height Regulations and pleaded guilty to fraud and engaging in a misleading commercial practice. He was jailed for two and a half years earlier this month.
Guildford Crown Court was told that Thompson cold-called the couple, who are in poor health, with one suffering from dementia, at their home near Leatherhead in March 2017 after doing some work on a property nearby and offered to repair a section of guttering for £40, which was agreed.
He then told them he needed to survey the roof but failed to put up scaffolding. One of his labourers fell into the loft below, causing significant damage.
When Thompson billed the couple for the work, he included scaffolding in the cost despite failing to provide it.
The HSE's investigation found that several people were at risk from the work being carried out because no measures were in place to prevent labourers from falling.
An independent expert who examined the roof on behalf of trading standards found the hole was solely Thompson's fault and not down to any structural defects. The expert was also critical of the standard of repair work carried out.
Denise Turner-Stewart, Surrey County Council's cabinet member for community safety, fire and resilience, said: "Rogue traders callously prey on the most vulnerable in our society and our trading standards officers work hard to bring them to justice and keep our communities safe. I would like to thank the neighbours of this couple for their vigilance and for alerting us to their concerns."

redpajama_set_name: RedPajamaCommonCrawl


We reiterate our Underperform rating as our expectation for increasing losses and lower spend continues to develop. At first glance, May's monthly trust data reported yesterday exhibited promising credit trends; however the improvement was attributable to a $10B addition to the trust. Excluding the impact of the addition, underlying trends continue to show marked stress for the consumer even in the prime segment. We continue to believe credit deterioration will be worse than most investors expect in 2H08, leaving further downside for AXP shares.
Friedman Billings reiterates UNDERPERFORM, target price $38.


This entry was posted in Philosophical Ramblings, Stupid Net Stuff by Joe. Bookmark the permalink.
I completely agree. The one exception I have made on my own blog has been a few comments on an Obama post back in 2008 I think, where two people went off on rants that basically advocated for killing him if he became President. I chose to delete those two comments rather than approving them. I felt bad about it, though. So conflicted, in fact, that I posted an AskMe about it. (http://ask.metafilter.com/91016/Best-way-to-deal-fairly-with-nonspam-malicious-comments-on-a-personal-blog).
It's a difficult thing, though. I saw the comment you mentioned, and I was also very angered by it. I typed up a response and then deleted it, deciding that a) I didn't know the person myself, and b) I was too angry to be coherent, and there isn't anything to say about it that his real friends weren't probably saying already. I never in a million years would have thought to delete the original picture, though. Particularly when people are using their real names to make truly insensitive and stupid comments, perhaps allowing them to be called out on it is the best thing for everyone.


Brand New 3 Bedroom Detached Villa located on the outskirts of Pafos in Tala Village.
It is just a few minutes drive to the village center where restaurants, taverns, bars, post office and shops can be found.
Tala is the traditional Cypriot village 300m above sea level. Due to its elevated position it benefits from stunning views to the sea and across to Paphos. It is famous for its cool breezes and spectacular views of the Mediterranean. Golfers can find themselves at the well catered 18-hole championship Tsada Golf Course, with just a 10 -15-minute drive from the development. It is also a short drive to Pafos Town and the Pafos International Airport.
Entering the property you get to the open plan living-dining-kitchen area that offers easy access to the private terrace and the swimming pool area. As well, on the ground level, there is also a double bedroom with en-suite shower. Moving upstairs you get to the bedroom area that you can find two spacious bedrooms (1 has an en-suite shower) with access by sliding windows to a balcony with beautiful sea views. On the 1st floor there is a family bathroom as well.
The plot size is 270 sq.meters and it has Private Swimming Pool.
At the side of the property, there is a Private Driveway and a Car Port.


You've spent a few nights climbing in the gym, and now you're ready to jump in the car for a marathon drive to Yosemite to climb its hallowed walls, but first you have to pony up sifting through an endless jumble of clown colored, tight-fitting shoes with fast car names seems light years away from scaling huge walls in remote and beautiful areas. They tell you that you have to work hard to achieve your dreams, but they never said anything about shoe shopping. Fortunately, we're here to help. Our buying advice article will help you narrow down the selection so you can spend less time browsing the internet and mailing ill-fitting shoes back to online vendors and more time outside in a screenless, vertical paradise.
Are you trapped in the flatlands, limited only to gym climbing? Do you crave endless sandstone splitter cracks or steep limestone caves? How about vertical techy granite faces and holdless slabs? A few shoes can do it all pretty well, but there are definitely a few specialists out there. Remember that shoes designed for the steepest most difficult types of climbing aren't as comfortable as shoes made with long multi-pitch routes in mind.
Traditional climbing can involve some techniques, and the duration of the climbs are equally variable. Typically, for crack climbs, you will want a shoe that allows the toes to lay slightly flatter to fit into the crack, like the FiveTen Quantum, Five Ten Moccasym or Scarpa Vapor V. For long multi-pitch routes, you'll want a flatter, looser fitting shoe like the La Sportiva TC Pro. Shoes with a stiffer sole will allow you to stand on edges even when sized larger for comfort. They will also help prevent foot fatigue on longer days. Know that many shoes stretch significantly once worn-in. Unlined uppers are comfortable, but stretch more, and may leave you with a shoe that doesn't perform as well as you would like. We recommend the versatile La Sportiva Kataki for difficult climbs where you need to be able to use your feet in thin cracks and still need edging performance.
As a good rule of thumb, the steeper the climbing gets, the more important it is to have a downturned, performance fit shoe like the La Sportiva Solution, La Sportiva Genius, Scarpa Instinct VS or Evolv Shaman. The models feature a design which directs more power through the toe.
Appropriate sizing for steep, hard climbing varies from shoe to shoe. To perform at a very high level, a shoe will be uncomfortable to wear for more than a pitch or two. Our recommendation is to size your shoes appropriately to stay psyched. If all you're focused on is pushing your grade, a tight-fitting, aggressively shaped shoe will work for you. If your comfort is critical to enjoying your experience while on the rock, we'd recommend you size your shoes accordingly, and look for a shoe with a flat shape. Shoes for the steepest styles of climbing are often on the soft side, allowing you to pull yourself into the wall using larger featured holds. For vertical or less than vertical climbing, it's better to go with stiffer, more supportive shoe as you balance all of your weight on your big toe. Specialized shoes in this category tend to be on the upper end of the price range.
There are probably several schools of thought regarding how to choose your first pair of climbing shoes. Our recommendation is to do your homework — and this buyer's guide is a great place to start! Know what your local crags offer, or if you'll primarily be climbing in a gym. This will help you look for a shoe that is appropriate for what you're planning to do. Often, new climbers get put off by uncomfortable shoes; this is unnecessary.
Look for a solid all-arounder; something like the Scarpa Vapor V or Evolv Defy are versatile enough to let you explore various types of climbing (check out the climbing shoe reviews for ideas). Often, it is wise for a new climber to purchase inexpensive shoes because bad footwork will wear them out quickly. The La Sportiva Tarantula or Evolv Defy Black are great options. By the time you need a replacement, you may have learned something and will be ready to upgrade to a pricier, higher performance shoe.
Typically, inexpensive, entry-level shoes won't climb as well — but this is not a hard and fast rule. If you find the right shoe, forking out a little extra cash is worth it to have something that you can grow with, and that won't hold you back. Irrespective of the price, the shoe needs to be comfortable. Not grandma's slippers comfortable, but something you can easily tolerate wearing for a while.
For gym climbing, get whatever suits your climbing ambitions. We often size tight and aggressive for steep routes and bouldering and maintain a flatter, looser fit if you're new to climbing, cruising, or just getting some exercise.
Our feet took a real beating testing climbing shoes on hundreds of feet of crack.
Downturned toes like the La Sportiva Genius or Evovl Shaman are everywhere these days. The more downturned a shoe, the more your toes bunch up in the front. Sizing downturned shoes loosely will mean that you have extra material on top of your foot where your arched toes should be. When you climb in an oversized shoe, that excess material can bunch up, both getting in the way and making the shoe less comfortable. If you're in the market for down-turned shoes, remember to keep them snug. That doesn't mean they have to hurt, but they should be tight enough to perform for you.
There is a lot of subjective information out there regarding how you should size your shoes. For sport climbing and bouldering, there is a pretty strong correlation between the difficulty of the climb and your shoe size: as the number grade of the climb increases, the number of your shoe size decreases correspondingly. Shoes like the Scarpa Instinct, Butora Acro and La Sportiva Genius have a particularly tight feel and perform better because of that snug fit. However, there is a limit to an increase in tightness increasing performance. If your feet hurt so much that you don't want to, or can't climb, you've gone too far. Tight shoes also work for sport climbs and bouldering because you tend not to be on the rock for very long.
On multi-pitch climbs, whether sport or trad, you'll want to size your shoes more loosely. Especially for trad climbing, having a flatter-toed shoe will benefit you when climbing cracks. You can compensate for a slightly larger size by choosing a shoe with a stiffer sole. Even on longer multi-pitch sport climbs, a less aggressive shape (less downturned, lower asymmetry) will keep your feet from getting thrashed, with a relatively minimal diminishment in performance.
Again, doing some research will go a long way for you. Before you buy, decide what type of climbing you'll mostly be doing with the shoe, try on several and size them accordingly. A few things to consider: unlined shoes stretch more over the lifetime of the shoe, and can lose performance. Half sizes matter, particularly in climbing shoes. A slightly larger shoe won't impact your climbing very much at all and can make a world of difference regarding comfort.
A low volume shoe like the Vapor V on the left generally performs better in cracks. I f crack climbing isn't your thing and your foot is on the narrow side, the Tarifa (right) provides a glove-like fit.
The shoe that you take out of the box the first day you climb with it will not be the same after wearing it for a while. All shoes stretch, some more than others, so it is important to size your shoes to account for how they will feel after they wear in.
Leather shoes, like the La Sportiva Skwama or La Sportiva TC Pro, stretch more than synthetic shoes, so take that into account when making a purchase. However, leather shoes that are lined stretch very little but will mold themselves to your feet to some extent. How much do you size leather shoes down to accommodate for stretch? That depends a lot on the brand and model, and there will be a little trial and error here. In general, to get the right fit from your unlined leather shoe, size them a little tighter, and expect them to be mildly uncomfortable, with the discomfort decreasing as they wear in. The result should produce a comfortable shoe. Unlined slippers like the Five Ten Moccasyms and Evolv Addicts can stretch up to a size and a half. Synthetic shoes don't stretch out much at all, so make sure they are fairly true to size when you buy.
Gathering a little information on the shoe you are going to buy will help you make this decision. What does the manufacturer say about the shoe? What materials were used to construct the shoe? What is the design of the shoe? For example, a lot of shoes feature rubber on top of the toe for hooking, which prevents the shoe from stretching as much. These are all proper questions to ask and will help guarantee you stay stoked with your decision.
The author "working" late into the evening. Stiffer shoes like the Butora Acro shown here are fantastic for vertical edging.
Sizing is the biggest crux when purchasing climbing shoes, especially if shopping online. Go out and try on various brands and sizes before you buy, if you can. Evolv, FiveTen, and Butora run small, now making it possible to size your rock shoes the same as your street shoes. La Sportiva and Scarpa are very consistent but require a little testing to learn what their sizing means. For us, it means we buy these European brands one size to one and a half size down from our street shoe size. We had to size the long, narrow Tenaya shoes two full sizes down from our streets shoe size before our toes were snug against the front of the shoe.
The difference in rubber preference stratifies opinion more than any other aspect of climbing. As a rule, rubber that is stickier is usually softer and less durable, and less sticky rubber is typically harder and more durable. Really soft rubber that is ultra-sticky will wear out fast. It also gets pocked or fish-scaled quickly and tends to slide off edges. Harder rubber holds an edge longer but doesn't function as well when you paste your foot on the rock. Consequently, we tend to use different rubber types for various applications. Softer rubber for high-performance sport and bouldering shoes will typically work better for everything other than steep edges. When just starting out as a climber, or if you're looking for an all-day shoe, harder, more durable rubber will work better.
There are three main types of tightening system: Velcro strap(s), lace-ups, and slippers (usually elastic). Lace-up shoes are the most adjustable, and typically provide the most uniform, customizable fit for your rock shoes. All those strings make them a little slower to put on and take off. Because of this, we tend to choose lace-ups as all-around/multi-pitch shoes, where we put them on at the start of the climb and take them off at the end. Velcro shoes go on and off easier, and some tighten almost as well as lace-ups. For sport, bouldering, or gym climbing, Velcro shoes are exceptional because of the number of transitions between street shoes and rock shoes that you make in a day. They work well on multi-pitch days too, if you want to pop the velcro for a little relief at the belay. Slippers are usually the most sensitive and comfortable shoes out there; they are normally unlined, which means they stretch out more. This makes them more comfortable but also decreases their performance. They are very easy to take off and make great gym or bouldering shoes.
Laces wear out, get torn up by cracks, and get turned into rappel anchors (don't do that). Just be ready to replace them when they start to look worked. Velcro will get mucked up if you leave it open when you're storing the shoes. Keeping the velcro closed when you're not using your shoes will also help maintain the shape of the shoe longer. Tip: your friend's toothbrush (or the one you use to clean holds) can be used to brush out the velcro if it's starting to look gummy.


text:
namespace http = process::http;
namespace io = process::io;
namespace mime = process::mime;

using http::BadRequest;
using http::Forbidden;
using http::InternalServerError;
using http::NotFound;
using http::OK;

using mesos::Authorizer;

using process::AUTHENTICATION;
using process::AUTHORIZATION;
using process::defer;
using process::DESCRIPTION;
using process::Failure;
using process::Future;
using process::HELP;
using process::Process;
using process::TLDR;
using process::wait; // Necessary on some OS's to disambiguate.

using process::http::authentication::Principal;

using std::list;
using std::map;
using std::string;
using std::tuple;
using std::vector;

namespace mesos {
namespace internal {

class FilesProcess : public Process<FilesProcess>
{
public:
  FilesProcess(const Option<string>& _authenticationRealm,
               const Option<Authorizer*>& _authorizer);

  // Files implementation.
  Future<Nothing> attach(
      const string& path,
      const string& name,
      const Option<lambda::function<Future<bool>(
          const Option<Principal>&)>>& authorized);

  void detach(const string& name);

  Future<Try<list<FileInfo>, FilesError>> browse(
      const string& path,
      const Option<Principal>& principal);

  Future<Try<tuple<size_t, string>, FilesError>> read(
      const size_t offset,
      const Option<size_t>& length,
      const string& path,
      const Option<Principal>& principal);

protected:
  virtual void initialize();

private:
  // Resolves the virtual path to an actual path.
  // Returns the actual path if found.
  // Returns None if the file is not found.
  // Returns Error if we find the file but it cannot be resolved or it breaks
  // out of the chroot.
  Result<string> resolve(const string& path);

  Future<bool> authorize(
      string requestedPath,
      const Option<Principal>& principal);

  // HTTP endpoints.

  // Returns a file listing for a directory.
  // Requests have the following parameters:
  //   path: The directory to browse. Required.
  // The response will contain a list of JSON files and directories contained
  // in the path (see `FileInfo` model override for the format).
  Future<http::Response> _browse(
      const http::Request& request,
      const Option<Principal>& principal);

  // Continuation of `read()`.
  Future<Try<tuple<size_t, string>, FilesError>> _read(
      size_t offset,
      Option<size_t> length,
      const string& path);

  // Reads data from a file at a given offset and for a given length.
  // See the jquery pailer for the expected behavior.
  Future<http::Response> __read(
      const http::Request& request,
      const Option<Principal>& principal);

  // Returns the raw file contents for a given path.
  // Requests have the following parameters:
  //   path: The directory to browse. Required.
  Future<http::Response> download(
      const http::Request& request,
      const Option<Principal>& principal);

  Future<http::Response> _download(const string& path);

  // Returns the internal virtual path mapping.
  Future<http::Response> debug(
      const http::Request& request,
      const Option<Principal>& principal);

  const static string BROWSE_HELP;
  const static string READ_HELP;
  const static string DOWNLOAD_HELP;
  const static string DEBUG_HELP;

  hashmap<string, string> paths;

  // Set of authorization functions. They will be called whenever
  // access to the path used as key is requested, and will pass
  // as parameter the principal returned by the HTTP authenticator.
  hashmap<string, lambda::function<Future<bool>(const Option<Principal>&)>>
      authorizations;

  // The authentication realm, if any, into which this process'
  // endpoints will be installed.
  Option<string> authenticationRealm;

  // FilesProcess needs an authorizer object to add authorization in
  // `/files/debug` endpoint.
  Option<Authorizer*> authorizer;
};

FilesProcess::FilesProcess(
    const Option<string>& _authenticationRealm,
    const Option<Authorizer*>& _authorizer)
  : ProcessBase("files"),
    authenticationRealm(_authenticationRealm),
    authorizer(_authorizer) {}

void FilesProcess::initialize()
{
  if (authenticationRealm.isSome()) {
    // TODO(ijimenez): Remove these endpoints at the end of the
    // deprecation cycle on 0.26.
    route("/browse.json",
          authenticationRealm.get(),
          FilesProcess::BROWSE_HELP,
          &FilesProcess::_browse);
    route("/read.json",
          authenticationRealm.get(),
          FilesProcess::READ_HELP,
          &FilesProcess::__read);
    route("/download.json",
          authenticationRealm.get(),
          FilesProcess::DOWNLOAD_HELP,
          &FilesProcess::download);
    route("/debug.json",
          authenticationRealm.get(),
          FilesProcess::DEBUG_HELP,
          &FilesProcess::debug);

    route("/browse",
          authenticationRealm.get(),
          FilesProcess::BROWSE_HELP,
          &FilesProcess::_browse);
    route("/read",
          authenticationRealm.get(),
          FilesProcess::READ_HELP,
          &FilesProcess::__read);
    route("/download",
          authenticationRealm.get(),
          FilesProcess::DOWNLOAD_HELP,
          &FilesProcess::download);
    route("/debug",
          authenticationRealm.get(),
          FilesProcess::DEBUG_HELP,
          &FilesProcess::debug);
  } else {
    // TODO(ijimenez): Remove these endpoints at the end of the
    // deprecation cycle on 0.26.
    route("/browse.json",
          FilesProcess::BROWSE_HELP,
          lambda::bind(&FilesProcess::_browse, this, lambda::_1, None()));
    route("/read.json",
          FilesProcess::READ_HELP,
          lambda::bind(&FilesProcess::__read, this, lambda::_1, None()));
    route("/download.json",
          FilesProcess::DOWNLOAD_HELP,
          lambda::bind(&FilesProcess::download, this, lambda::_1, None()));
    route("/debug.json",
          FilesProcess::DEBUG_HELP,
          lambda::bind(&FilesProcess::debug, this, lambda::_1, None()));

    route("/browse",
          FilesProcess::BROWSE_HELP,
          lambda::bind(&FilesProcess::_browse, this, lambda::_1, None()));
    route("/read",
          FilesProcess::READ_HELP,
          lambda::bind(&FilesProcess::__read, this, lambda::_1, None()));
    route("/download",
          FilesProcess::DOWNLOAD_HELP,
          lambda::bind(&FilesProcess::download, this, lambda::_1, None()));
    route("/debug",
          FilesProcess::DEBUG_HELP,
          lambda::bind(&FilesProcess::debug, this, lambda::_1, None()));
  }
}

Future<Nothing> FilesProcess::attach(
    const string& path,
    const string& name,
    const Option<lambda::function<Future<bool>(const Option<Principal>&)>>&
        authorized)
{
  Result<string> result = os::realpath(path);

  if (!result.isSome()) {
    return Failure(
        "Failed to get realpath of '" + path + "': " +
        (result.isError()
         ? result.error()
         : "No such file or directory"));
  }

  // Make sure we have permissions to read the file/dir.
  Try<bool> access = os::access(result.get(), R_OK);

  if (access.isError() || !access.get()) {
    return Failure("Failed to access '" + path + "': " +
                   (access.isError() ? access.error() : "Access denied"));
  }

  // To simplify the read/browse logic, strip any trailing / from the name.
  string cleanedName = strings::remove(name, "/", strings::SUFFIX);

  // TODO(bmahler): Do we want to always wipe out the previous path?
  paths[cleanedName] = result.get();

  if (authorized.isSome()) {
    authorizations[cleanedName] = authorized.get();
  }

  return Nothing();
}

void FilesProcess::detach(const string& name)
{
  paths.erase(name);
  authorizations.erase(name);
}

const string FilesProcess::BROWSE_HELP = HELP(
    TLDR(
        "Returns a file listing for a directory."),
    DESCRIPTION(
        "Lists files and directories contained in the path as",
        "a JSON object.",
        "",
        "Query parameters:",
        "",
        ">        path=VALUE          The path of directory to browse."),
    AUTHENTICATION(true),
    AUTHORIZATION(
        "Browsing files requires that the request principal is",
        "authorized to do so for the target virtual file path.",
        "",
        "Authorizers may categorize different virtual paths into",
        "different ACLs, e.g. logs in one and task sandboxes in",
        "another.",
        "",
        "See authorization documentation for details."));

Future<bool> FilesProcess::authorize(
    string requestedPath,
    const Option<Principal>& principal)
{
  // The path may contain a trailing forward slash. Since we store the
  // authorization callbacks without the trailing slash, we must remove it here,
  // if present.
  string trimmedPath = strings::remove(requestedPath, "/", strings::SUFFIX);

  if (authorizations.count(trimmedPath) > 0) {
    return authorizations[trimmedPath](principal);
  }

  do {
    requestedPath = Path(requestedPath).dirname();

    if (authorizations.count(requestedPath) > 0) {
      return authorizations[requestedPath](principal);
    }
  } while (Path(requestedPath).dirname() != requestedPath);

  // requestedPath does not require authorization.
  return true;
}

Future<http::Response> FilesProcess::_browse(
    const http::Request& request,
    const Option<Principal>& principal)
{
  Option<string> path = request.url.query.get("path");

  if (!path.isSome() || path.get().empty()) {
    return BadRequest("Expecting 'path=value' in query.\n");
  }

  string requestedPath = path.get();
  Option<string> jsonp = request.url.query.get("jsonp");

  return browse(requestedPath, principal)
    .then([jsonp](const Try<list<FileInfo>, FilesError>& result)
      -> Future<http::Response> {
      if (result.isError()) {
        const FilesError& error = result.error();

        switch (error.type) {
          case FilesError::Type::INVALID:
            return BadRequest(error.message);

          case FilesError::Type::NOT_FOUND:
            return NotFound(error.message);

          case FilesError::Type::UNAUTHORIZED:
            return Forbidden(error.message);

          case FilesError::Type::UNKNOWN:
            return InternalServerError(error.message);
        }

        UNREACHABLE();
      }

      JSON::Array listing;
      foreach (const FileInfo& fileInfo, result.get()) {
        listing.values.push_back(model(fileInfo));
      }

      return OK(listing, jsonp);
    });
}

Future<Try<list<FileInfo>, FilesError>> FilesProcess::browse(
    const string& path,
    const Option<Principal>& principal)
{
  return authorize(path, principal)
    .then(defer(self(),
        [this, path](bool authorized)
          -> Future<Try<list<FileInfo>, FilesError>> {
      if (!authorized) {
        return FilesError(FilesError::Type::UNAUTHORIZED);
      }

      Result<string> resolvedPath = resolve(path);

      if (resolvedPath.isError()) {
        return FilesError(
            FilesError::Type::INVALID,
            resolvedPath.error() + ".\n");
      } else if (resolvedPath.isNone()) {
        return FilesError(FilesError::Type::NOT_FOUND);
      }

      // The result will be a sorted (on path) list of files and dirs.
      map<string, FileInfo> files;
      Try<list<string>> entries = os::ls(resolvedPath.get());
      if (entries.isSome()) {
        foreach (const string& entry, entries.get()) {
          struct stat s;
          string fullPath = path::join(resolvedPath.get(), entry);

          if (stat(fullPath.c_str(), &s) < 0) {
            PLOG(WARNING) << "Found " << fullPath << " in ls but stat failed";
            continue;
          }

          files[fullPath] =
            protobuf::createFileInfo(path::join(path, entry), s);
        }
      }

      list<FileInfo> listing;
      foreachvalue (const FileInfo& fileInfo, files) {
        listing.push_back(fileInfo);
      }

      return listing;
    }));
}

const string FilesProcess::READ_HELP = HELP(
    TLDR(
        "Reads data from a file."),
    DESCRIPTION(
        "This endpoint reads data from a file at a given offset and for",
        "a given length."
        "",
        "Query parameters:",
        "",
        ">        path=VALUE          The path of directory to browse.",
        ">        offset=VALUE        Value added to base address to obtain "
        "a second address",
        ">        length=VALUE        Length of file to read."),
    AUTHENTICATION(true),
    AUTHORIZATION(
        "Reading files requires that the request principal is",
        "authorized to do so for the target virtual file path.",
        "",
        "Authorizers may categorize different virtual paths into",
        "different ACLs, e.g. logs in one and task sandboxes in",
        "another.",
        "",
        "See authorization documentation for details."));

Future<http::Response> FilesProcess::__read(
    const http::Request& request,
    const Option<Principal>& principal)
{
  Option<string> path = request.url.query.get("path");

  if (!path.isSome() || path.get().empty()) {
    return BadRequest("Expecting 'path=value' in query.\n");
  }

  off_t offset = -1;

  if (request.url.query.get("offset").isSome()) {
    Try<off_t> result = numify<off_t>(request.url.query.get("offset").get());

    if (result.isError()) {
      return BadRequest("Failed to parse offset: " + result.error() + ".\n");
    }

    if (result.get() < -1) {
      return BadRequest(strings::format(
          "Negative offset provided: %d.\n", result.get()).get());
    }

    offset = result.get();
  }

  Option<size_t> length;

  if (request.url.query.get("length").isSome()) {
    Try<ssize_t> result = numify<ssize_t>(
        request.url.query.get("length").get());

    if (result.isError()) {
      return BadRequest("Failed to parse length: " + result.error() + ".\n");
    }

    // TODO(tomxing): The pailer in the webui sends `length=-1` at first to
    // determine the length of the file, so we allow a length of -1.
    // Setting `length=-1` has the same effect as not providing a length: we
    // read to the end of the file, up to the maximum read length.
    // Will change this logic in MESOS-5334.
    if (result.get() < -1) {
      return BadRequest(strings::format(
          "Negative length provided: %d.\n", result.get()).get());
    }

    if (result.get() > -1){
      length = result.get();
    }
  }

  size_t offset_ = offset;

  // The pailer in the webui sends `offset=-1` initially to determine the length
  // of the file. This is equivalent to making a call to `read()` with an
  // `offset`/`length` of 0.
  if (offset == -1) {
    offset_ = 0;
    length = 0;
  }

  Option<string> jsonp = request.url.query.get("jsonp");

  return read(offset_, length, path.get(), principal)
    .then([offset, jsonp](const Try<tuple<size_t, string>, FilesError>& result)
        -> Future<http::Response> {
      if (result.isError()) {
        const FilesError& error = result.error();

        switch (error.type) {
          case FilesError::Type::INVALID:
            return BadRequest(error.message);

          case FilesError::Type::NOT_FOUND:
            return NotFound(error.message);

          case FilesError::Type::UNAUTHORIZED:
            return Forbidden(error.message);

          case FilesError::Type::UNKNOWN:
            return InternalServerError(error.message);
        }

        UNREACHABLE();
      }

      const tuple<size_t, string>& contents = result.get();

      JSON::Object object;
      object.values["offset"] = (offset == -1) ? std::get<0>(contents) : offset;
      object.values["data"] = std::get<1>(contents);

      return OK(object, jsonp);
    });
}

Future<Try<tuple<size_t, string>, FilesError>> FilesProcess::read(
    const size_t offset,
    const Option<size_t>& length,
    const string& path,
    const Option<Principal>& principal)
{
  return authorize(path, principal)
    .then(defer(self(),
        [this, offset, length, path](bool authorized)
          -> Future<Try<tuple<size_t, string>, FilesError>> {
      if (!authorized) {
        return FilesError(FilesError::Type::UNAUTHORIZED);
      }

      return _read(offset, length, path);
    }));
}

Future<Try<tuple<size_t, string>, FilesError>> FilesProcess::_read(
    size_t offset,
    Option<size_t> length,
    const string& path)
{
  Result<string> resolvedPath = resolve(path);

  if (resolvedPath.isError()) {
    return FilesError(FilesError::Type::INVALID, resolvedPath.error() + ".\n");
  } else if (!resolvedPath.isSome()) {
    return FilesError(FilesError::Type::NOT_FOUND);
  }

  // Don't read directories.
  if (os::stat::isdir(resolvedPath.get())) {
    return FilesError(FilesError::Type::INVALID, "Cannot read a directory.\n");
  }

  // TODO(benh): Cache file descriptors so we aren't constantly
  // opening them and paging the data in from disk.
  Try<int_fd> fd = os::open(resolvedPath.get(), O_RDONLY | O_CLOEXEC);
  if (fd.isError()) {
    string error = strings::format(
        "Failed to open file at '%s': %s",
        resolvedPath.get(),
        fd.error()).get();
    LOG(WARNING) << error;
    return FilesError(FilesError::Type::UNKNOWN, error + ".\n");
  }

  Try<off_t> lseek = os::lseek(fd.get(), 0, SEEK_END);
  if (lseek.isError()) {
    string error = strings::format(
        "Failed to open file at '%s': %s",
        resolvedPath.get(),
        os::strerror(errno)).get();

    LOG(WARNING) << error;
    os::close(fd.get());
    return FilesError(FilesError::Type::UNKNOWN, error + ".\n");
  }

  const off_t size = lseek.get();

  if (offset >= static_cast<size_t>(size)) {
    os::close(fd.get());
    return std::make_tuple(size, "");
  }

  if (length.isNone()) {
    length = size - offset;
  }

  // Return the size of file if length is 0.
  if (length == 0) {
    os::close(fd.get());
    return std::make_tuple(size, "");
  }

  // Cap the read length at 16 pages.
  length = std::min(length.get(), os::pagesize() * 16);

  // Seek to the offset we want to read from.
  lseek = os::lseek(fd.get(), offset, SEEK_SET);
  if (lseek.isError()) {
    string error = strings::format(
        "Failed to seek file at '%s': %s",
        resolvedPath.get(),
        os::strerror(errno)).get();

    LOG(WARNING) << error;
    os::close(fd.get());
    return FilesError(FilesError::Type::UNKNOWN, error);
  }

  Try<Nothing> nonblock = os::nonblock(fd.get());
  if (nonblock.isError()) {
    string error =
        "Failed to set file descriptor nonblocking: " + nonblock.error();
    LOG(WARNING) << error;
    os::close(fd.get());
    return FilesError(FilesError::Type::UNKNOWN, error);
  }

  // Read 'length' bytes (or to EOF).
  boost::shared_array<char> data(new char[length.get()]);

  return io::read(fd.get(), data.get(), length.get())
    .then([size, data](const size_t dataLength)
        -> Try<tuple<size_t, string>, FilesError> {
      return std::make_tuple(size, string(data.get(), dataLength));
    })
    .onAny([fd]() { os::close(fd.get()); });
}

const string FilesProcess::DOWNLOAD_HELP = HELP(
    TLDR(
        "Returns the raw file contents for a given path."),
    DESCRIPTION(
        "This endpoint will return the raw file contents for the",
        "given path.",
        "",
        "Query parameters:",
        "",
        ">        path=VALUE          The path of directory to browse."),
    AUTHENTICATION(true),
    AUTHORIZATION(
        "Downloading files requires that the request principal is",
        "authorized to do so for the target virtual file path.",
        "",
        "Authorizers may categorize different virtual paths into",
        "different ACLs, e.g. logs in one and task sandboxes in",
        "another.",
        "",
        "See authorization documentation for details."));

Future<http::Response> FilesProcess::download(
    const http::Request& request,
    const Option<Principal>& principal)
{
  Option<string> path = request.url.query.get("path");

  if (!path.isSome() || path.get().empty()) {
    return BadRequest("Expecting 'path=value' in query.\n");
  }

  string requestedPath = path.get();

  return authorize(requestedPath, principal)
    .then(defer(self(),
        [this, path](bool authorized) -> Future<http::Response> {
      if (authorized) {
        return _download(path.get());
      }

      return Forbidden();
    }));
}

Future<http::Response> FilesProcess::_download(const string& path)
{
  Result<string> resolvedPath = resolve(path);

  if (resolvedPath.isError()) {
    return BadRequest(resolvedPath.error() + ".\n");
  } else if (!resolvedPath.isSome()) {
    return NotFound();
  }

  // Don't download directories.
  if (os::stat::isdir(resolvedPath.get())) {
    return BadRequest("Cannot download a directory.\n");
  }

  string basename = Path(resolvedPath.get()).basename();

  OK response;
  response.type = response.PATH;
  response.path = resolvedPath.get();
  response.headers["Content-Type"] = "application/octet-stream";
  response.headers["Content-Disposition"] =
    strings::format("attachment; filename=%s", basename).get();

  // Attempt to detect the mime type.
  Option<string> extension = Path(resolvedPath.get()).extension();

  if (extension.isSome() && mime::types.count(extension.get()) > 0) {
    response.headers["Content-Type"] = mime::types[extension.get()];
  }

  return response;
}

const string FilesProcess::DEBUG_HELP = HELP(
    TLDR(
        "Returns the internal virtual path mapping."),
    DESCRIPTION(
        "This endpoint shows the internal virtual path map as a",
        "JSON object."),
    AUTHENTICATION(true),
    AUTHORIZATION(
        "The request principal should be authorized to query this endpoint.",
        "See the authorization documentation for details."));

Future<http::Response> FilesProcess::debug(
    const http::Request& request,
    const Option<Principal>& principal)
{
  JSON::Object object;
  foreachpair (const string& name, const string& path, paths) {
    object.values[name] = path;
  }

  const Option<string>& jsonp = request.url.query.get("jsonp");

  return authorizeEndpoint(
      request.url.path,
      request.method,
      authorizer,
      principal)
    .then(defer(
        [object, jsonp](bool authorized) -> Future<http::Response> {
          if (!authorized) {
            return Forbidden();
          }

          return OK(object, jsonp);
        }));
}

Result<string> FilesProcess::resolve(const string& path)
{
  // Suppose we have: /1/2/hello_world.txt
  // And we attach: /1/2 as /sandbox
  // Then this function would resolve the following virtual path
  // into the actual path:
  // input: /sandbox/hello_world.txt
  // output: /1/2/hello_world.txt
  //
  // Try and see if this path has been attached. We check for the
  // longest possible prefix match and if found append any suffix to
  // the attached path (provided the path is to a directory).
  vector<string> tokens = strings::split(
      strings::remove(path, stringify(os::PATH_SEPARATOR), strings::SUFFIX),
      stringify(os::PATH_SEPARATOR));

  string suffix;
  while (!tokens.empty()) {
    string prefix = path::join(tokens);

    if (!paths.contains(prefix)) {
      if (suffix.empty()) {
        suffix = tokens.back();
      } else {
        suffix = path::join(tokens.back(), suffix);
      }

      tokens.pop_back();
      continue;
    }

    // Determine the final path: if it's a directory, append the
    // suffix, if it's not a directory and there is a suffix, return
    // 'Not Found'.
    string path = paths[prefix];
    if (os::stat::isdir(path)) {
      path = path::join(path, suffix, os::PATH_SEPARATOR);

      // Canonicalize the absolute path.
      Result<string> realpath = os::realpath(path);
      if (realpath.isError()) {
        return Error(
            "Failed to determine canonical path of '" + path +
            "': " + realpath.error());
      } else if (realpath.isNone()) {
        return None();
      }

      // Make sure the canonicalized absolute path is accessible
      // (i.e., not outside the "chroot").
      if (!strings::startsWith(realpath.get(), paths[prefix])) {
        return Error("'" + path + "' is inaccessible");
      }

      path = realpath.get();
    } else if (suffix != "") {
      // Request is assuming attached path is a directory, but it is
      // not! Rather than 'Bad Request', treat this as 'Not Found'.
      return None();
    }

    return path;
  }

  return None();
}

Files::Files(const Option<string>& authenticationRealm,
             const Option<Authorizer*>& authorizer)
{
  process = new FilesProcess(authenticationRealm, authorizer);
  spawn(process);
}

Files::~Files()
{
  terminate(process);
  wait(process);
  delete process;
}

Future<Nothing> Files::attach(
    const string& path,
    const string& name,
    const Option<lambda::function<Future<bool>(const Option<Principal>&)>>&
        authorized)
{
  return dispatch(process, &FilesProcess::attach, path, name, authorized);
}

void Files::detach(const string& name)
{
  dispatch(process, &FilesProcess::detach, name);
}

Future<Try<list<FileInfo>, FilesError>> Files::browse(
    const string& path,
    const Option<Principal>& principal)
{
  return dispatch(process, &FilesProcess::browse, path, principal);
}

Future<Try<tuple<size_t, string>, FilesError>> Files::read(
    const size_t offset,
    const Option<size_t>& length,
    const string& path,
    const Option<Principal>& principal)
{
  return dispatch(process,
                  &FilesProcess::read,
                  offset,
                  length,
                  path,
                  principal);
}

} // namespace internal {
} // namespace mesos {

redpajama_set_name: RedPajamaGithub


The Varázsecset Art Workshop and MIÉRT organized the Magic Paintbrush camp between 2-5 November. At the camp organized in Praid, 20 young people got acquainted with various artistic styles and had fun together.
During the four-day event the main aim was to get the participants closer tothe arts in the large sense more particularly to painting and drawing. During the cap the participants first received theoretical information then they used what they learnt: they painted and drew together. The joint learning was characterized by laughter and joy, and many new creations were born as a result.
The main partner of the camp was the Communitas Fundation and the partner was the Bethlen Gábor Fund.


text:
Q: Should sector-unaligned HDD writes be slower than sector-aligned writes? Background: I'm planning to use ZFS and I need to find the correct ashift parameter for my harddrive, which should be log2(sector_size), e.g. 9 for 512 byte sectors.
My harddrive reports a physical and logical sector size of 512 bytes. I read that some harddrives report wrong information to prevent compatibility problems with operating systems that assume 512 byte sectors. I'm not sure whether that's the case with my harddrive.
So I wrote a small program to help me determine the true physical sector size. The program opens an empty partition on my harddrive and writes blocks of 4096 bytes at 1000 randomly selected locations spread within 1 GiB. The random locations are first aligned to 4096 bytes, then an offset is added. The program performs these 1000 random writes using different offsets and measures how long the writes took for each offset. The first offset is zero, then it is increased in steps of 256 bytes.
When opening the partition for writing, I use the O_WRONLY | O_SYNC | O_DIRECT flags to get as close to the hardware as I can, i.e. circument as many caches as I can. I also make sure that my buffer is properly aligned in memory.
Here's what I would expect:

*

*For non-zero offsets, the addresses I'm writing to are not aligned to the harddrive's physical sectors (regardless of whether it has 512 or 4096 byte physical sectors). There is at least one sector that has to be modified only partially, so the harddrive has to read that sector, update parts of it and then write it back. That should be the slower case because a read is involved (read-modify-write).

*For zero offset, regardless of whether the harddrive has physical 512 or 4096 byte sectors, the write operations should not require reading any sectors. All sectors affected by the writes should simply be overwritten. This should be the faster case.

But in fact, I cannot notice any difference. The 1000 writes always take around 8.5 seconds. The offset doesn't seem to have any influence:
Offset  Time (ms) for 1000 random writes
------  --------------------------------
0       8459.11
256     8450.69
512     8633.82
768     8533.94
1024    8467.36
1280    8450.63
1536    8525.72
1792    8533.96
2048    8450.64
2304    8450.79
2560    8442.37
2816    8442.38
3072    8442.28
3328    8450.82
3584    8442.27
3840    8450.81

Additional observations/remarks:

*

*Writing units of 512 bytes results in similar numbers (i.e. no noticeable influence of the offset).

*Just for the case that my partition itself is not aligned to a physical sector boundary, I also tried increasing the offset in 1 byte steps. That way, the "ideal" offset would be found eventually - but still, I couldn't identify any difference.

Can anyone explain this?
For sake of completion, here's my program (in case anyone wants to run it, insert the path to an empty block device into the open call):
#include <chrono>
#include <fcntl.h>
#include <iostream>
#include <random>
#include <unistd.h>

int main()
{
        const int bufferSize = 4096;
        char buffer[bufferSize] __attribute__((aligned(4096)));
        for (int offset = -256; offset < 4096; offset += 256)
        {
                std::mt19937 generator;
                std::uniform_int_distribution<int> distribution(0, 1024 * 1024 * 1024 / 4096);
                if (offset >= 0) std::cout << offset << "\t";
                else std::cout << "Warming up ..." << std::endl;
                int f = open("PATH_TO_EMPTY_BLOCK_DEVICE", O_WRONLY | O_SYNC | O_DIRECT);
                auto t0 = std::chrono::high_resolution_clock::now();
                for (int i = 0; i < 1000; ++i)
                {
                        lseek(f, SEEK_SET, 4096 * distribution(generator) + offset);
                        if (write(f, buffer, bufferSize) != bufferSize) exit(1);
                }
                auto t1 = std::chrono::high_resolution_clock::now();
                close(f);
                if (offset >= 0) std::cout << (1000 * std::chrono::duration_cast<std::chrono::duration<double>>(t1 - t0).count()) << std::endl;
        }

        return 0;
}

A: 4096 bytes x 1000 times = 4 MBytes data. Chances are that your hard drive has 64 MB of cache, if not more, 256 MB is not uncommon on modern drives.
Your methodology will work better if you increase the write size significantly, maybe 64 times, in order to actually see the physical drives characteristics.

A:
For non-zero offsets, the addresses I'm writing to are not aligned to the harddrive's physical sectors (regardless of whether it has 512 or 4096 byte physical sectors).
[...]
Just for the case that my partition itself is not aligned to a physical sector boundary, I also tried increasing the offset in 1 byte steps.

Which OS are you using? If it's Linux, how were you able to do write at a starting offset which wasn't a multiple of 512 bytes when you were using O_DIRECT against an underlying block device?

Should sector-unaligned HDD writes be slower than sector-aligned writes?

Aligning to the "true" sector size should be less of a hit but just how much better is highly device, data and pattern dependent (Toshiba claim the performance decrease due to misalignment could be as high as 20%). SSDs (which are not what you're asking about but may have to do large erases before laying down the data) are an excellent example because bad write alignment can lead to unnecessary write amplification. Having said that I'm told that modern devices internally have sectors much larger than 4kbytes but almost never expose this to higher levels.

Can anyone explain this [the results I see]?

Well you're most likely to see the impact of a read-modify-write (RMW) when you are going in the fastest possible situation that hits it (as the difference will be largest). Because you're doing random writes that force the OS to wait for true completion it is likely you are in a slower situation and the performance hit is just lost in the noise. As others have stated you also have to defeat any cache that may mask problems - if you have somehow populated the cache with the sectors that are going to be used by the RMW process then again the hit could be entirely masked. It could be your example program is flawed. Have you considered using fio?

My harddrive reports a physical and logical sector size of 512 bytes

If the disk wants to lie to that extent (not indicating a better physical size) trying to second guess it's behaviour beyond aligning partitions to 4kbytes is going to be challenging. OpenZFS does contain a list of drives whose fake block size it will try to compensate for though.
The main reason I've read for people using a non-default ashift with ZFS is to be able to add disks which have a 4kbyte native block size into the mix at a later stage.

redpajama_set_name: RedPajamaStackExchange


text:
Lucila Marina Mariscal Lara (born July 18, 1942 in Mexico City, Mexico) is a Mexican actress, comedian, director, singer and song composer. Mariscal has had an extensive show business career spanning more than 50 years; she may be better remembered by Mexican audiences for her character of "Lencha", which she played in films, theater, television, and in song, but to international audiences, specially those in other Spanish-speaking countries, she may be best remembered for her participation in the film Secuestro En Acapulco-Canta Chamo, a 1983 movie where she played the role of the local tour manager of Venezuelan boy band, Los Chamos.

Early life
Mariscal's life was filled with challenges even before she was born; her biological father abandoned her mother as her mother was pregnant with Mariscal because, according to newspaper El Heraldo de México, he was obliged to marry someone else, a Monterrey woman, instead.

As a baby, Mariscal and her family moved to Culiacan, Sinaloa, but she and her family returned to Mexico City six years later.

Mariscal's talents enabled her to study at the Instituto Nacional de Bellas Artes y Literatura.

Career
Mariscal began her acting and directing film and theater career in 1969.

1976 saw Mariscal's debut in front of television screens in Mexico, as she was cast for a show named "Los Polivoces". In 1979, Mariscal made her film debut in the Mexican comedy "4 Hembras y un Macho Menos" ("4 Women and one Man Less"). She followed that with her participation in two 1980 films, named "Reventon en Acapulco" ("Party in Acapulco") and "Cuentos Colorados" ("Red Colored Tales" but which translates better to "Off-Color-or Double entendre-Tales").

During 1983, Mariscal acted in the movie that brought her international fame, "Secuestro En Acapulco-Canta Chamo" ("Kidnapping In Acapulco-Please Sing, Chamo!), a Mexico-Venezuela film production that also starred Venezuelan boy band Los Chamos as well as Yuri, Cesar Bono and Maria Antonieta de las Nieves in supporting roles; Mariscal played the band's Mexican tour manager. This film was seen in movie theaters in Mexico, Venezuela and various other Spanish-speaking countries. By that era, Mariscal was also acting in the Mexican television show, "La Carabina de Ambrosio" ("Ambrosio's Rifle"), which was a hit show that lasted on the air from 1982 to 1984.

From that moment on, Mariscal was able to build a substantial resume on her career, as she participated in 22 more films and 15 television series, including telenovelas such as "Valentina", where she acted alongside Veronica Castro, among others, playing the character of "Amada Paniagua".

Many of those films were comedies where she played the main character on them, an Indian woman named "Lencha". "Lencha" became Mariscal's best known character. She is sometimes called that by fans and media outlets.

Musical career
Mariscal launched a singing career in the 1980s and released a number of musical albums. One of her best known albums is 1987's "El Moñoñongo", ("The Vagina") which included ten songs.

Personal and health problems
Mariscal has faced several personal and health challenges in her life, beginning, as aforementioned, with the abandonment of her and her mother by her father before Mariscal was born.

Mariscal's 34 year old son, Andrey Alexis Hernández Mariscal, was kidnapped during 2009. A policeman, he was the sub-director or second-in-command of the police department of Linares, Nuevo Leon, in Northeastern Mexico. After this, her daughter-in-law developed breast cancer and Mariscal became a diabetic, both situations which she blames on her son's kidnapping. Mariscal lost a large amount of money searching for her son. She had another son, Gabriel Arturo, who is a computers repairman and occasional actor.

There have also been reports of problems between her and her grandson Andrei. Those reports indicate he has been abusive to her without specifying any type of abuse.

She also declared that, at age 16, she was drugged and raped by a boyfriend. She promptly broke up with the alleged perpetrator.

Mariscal was once married to a man named Julián Gallegos; he left her and she alleged that he was a drug and wife abuser while with her. In addition, she says he left her completely broke.

She suffered a fall late in 2021, requiring hospitalization. She wears a prosthesis on her hip. She also had hernia surgery in 2022.

Mariscal has also suffered from depression at various times. She has thought about, but never attempted, suicide.

See also

 List of Mexicans
María Elena Velasco - actress who played the well known character, La India María

References

1942 births
Living people
People from Mexico City
Mexican women singers
Mexican actresses

redpajama_set_name: RedPajamaWikipedia


text:
Jailolo is a town and former sultanate on Halmahera in Indonesia's Maluku Islands. It is located on the island's west coast approximately 20 km north of Ternate. Jailolo is a small port that serves Halmahera's northwestern coastal villages.

Before the arrival of Europeans it was the most important political power on Halmahera. It is thought that the sultanate had a measure of influence and autonomy as a combined Portuguese and Ternatean force overran in it 1551. It was then under the control of the Dutch and Ternateans for two centuries.

The Sultanate was re-established in 1798, by the Sultan of Tidore who had expelled the Dutch from his island and proclaimed a noble from Makian as Sultan of Jailolo. The Dutch forced the aristocracy into exile in 1832. Baba Hassan attempted a revolt in 1876, but his rebellion was easily put down by steam-powered Dutch warships. In 1914, a revolt over taxation saw Jailoloans kill the colonial district officer, and there was a revolt on the island of Waigeo off western New Guinea. The sultan's palace was located on a flat-topped hill above the junction of the Sahu-Sidangoli road, however, all remnants have now disappeared.

The local people are the Sahu. They perform traditional dances in August and September to celebrate the rice harvest. They recently converted to Christianity.

See also
Jailolo volcanic complex
Sultanate of Jailolo
list of rulers of Maluku

References

Halmahera
Populated places in Maluku (province)
Regency seats of North Maluku


Statutory Privileges and Immunites for Voluntarily Performed Environmental Audits: Should New York State Join the Race?
Joan M. Fildes, Statutory Privileges and Immunites for Voluntarily Performed Environmental Audits: Should New York State Join the Race?, 5 Buff. Envtl. L.J. 257 (1998).


Burnsini Vineyards is hosting a free Zinfandel barrel tasting Saturday, July 21 from 6pm to 9pm. The event will offer Zinfandel futures at a discounted rate (day of event only) along with the chance to purchase wine by the glass or bottle. The futures will be available to pickup in August, and current wine club members will receive their club discount on top of the futures purchase price. Expect live music by the Pine Dogs, as well as Taco Loco's food truck for those wishing to purchase some savory food.
The event is opened to anyone, and those who wish to attend are encouraged to bring a blanket, camping or lawn chair to relax, refresh and enjoy the wine, great music, and good food on the vineyard lawn. Invite your friends, come with a group or go as a date night—in the words of Burnsini Vineyard's, "this event will be a rockin' good time before the hard work of harvest begins!"
Live music and food options available!


2007 La Baume Winemaker's Selection Merlot, Waitrose, £4.49 until Aug 26.
ripe, plummy merlot hitting the spot.
2007 Pauletts Polish Hill River, Clare Valley Riesling, Majestic 2 @ £7.49 each.
2007 Auzells, El Vilosell, Tomàs Cusiné, Spain, Wine Society £10.95.
2006 Seresin Leah Pinot Noir, Marlborough, Wine Society, £14.95.
toasty, elegant, citrus fresh example; more restrained Burgundian style.
rich, characterful, almost exotic wine.
profound, almost magical wine with intense, minerally flavours.
herbal, complex, sensitively oaked blend is a stunner.
tremendous elegance and balance. This old wine is bracingly dry.


text:
Les Chevaliers d'Émeraude est une saga littéraire d'heroic fantasy. Pièce maîtresse de l'écrivaine québécoise Anne Robillard, elle compte un total de douze tomes. Cette série populaire est publiée par la maison d'édition québécoise Éditions de Mortagne. Depuis sa création, cette saga rencontre un grand succès au Québec, où il s'en est vendu un million d'exemplaires. En France, Les Chevaliers d'Émeraude sont publiés par les éditions Michel Lafon et France Loisirs. Les deux premiers tomes sont parus en  et ont dépassé le cap de  chacun. La saga se poursuit avec Les Héritiers d'Enkidiev puis avec Les Chevaliers d'Antarès qui comportent également douze tomes chacune.

Description
Depuis cinq cents ans, Enkidiev – continent peuplé d'hommes, d'elfes, de fées et de magiciens – est en paix après une guerre contre l'Empereur Noir Amecareth, souverain d'Irianeth, l'empire des hommes-insectes, situé sur le continent éponyme, et les différents peuples qu'il a asservis. Celui-ci décide de tenter une nouvelle fois de conquérir Enkidiev sur les conseils de son sorcier, Asbeth, afin de récupérer sa fille.

Le seul espoir de survie d'Enkidiev réside dans la résurrection de l'Ordre des Chevaliers d'Émeraude par le roi Émeraude . Ces guerriers magiciens seront chargés de protéger le continent jusqu'à l'accomplissement de la prophétie voulant que le porteur de lumière, sur le point de naître, détruise à jamais la menace que fait peser l'Empereur Noir sur Enkidiev. Pour que la prophétie se réalise, les Chevaliers devront protéger la fille de l'Empereur, Kira, l'enfant mauve ayant pour rôle de protéger le porteur de lumière. Leur tâche sera ardue, Amecareth envoyant ses propres armées, celles de ses vassaux et ses sorciers pour les détruire et utilise des ruses de plus en plus ingénieuses afin de récupérer son héritière…

Univers
L'histoire des Chevaliers d'Émeraude se déroule principalement sur Enkidiev, vaste continent bordé au nord, au sud et à l'ouest par l'océan et à l'est par une chaîne de volcans le séparant des Territoires Inconnus. Les principaux territoires sont :

 Alombria qui est recouverte de neige. Royaume voisin d'Espérita, il fut très longtemps considéré comme inhabité à cause de son climat jusqu'à ce que Wellan s'y rende. Ce royaume abritait en fait les hybrides insectes recueillis par Nomar. Il fut détruit par Asbeth ;

 l'île des Araignées qui est peuplée d'énormes araignées de la taille d'une maison aussi appelées Tégénaires. Elle est située au nord d'Enlilkisar dans une grande baie ;
 Argent qui a été créé pour un des princes de Cristal. Il fut entre autres gouverné par le Roi Kogal, que les Elfes appelaient Driance. Il eut deux fils : Hadrian, qui lui succéda, en plus de devenir le premier chef des Chevaliers d'Émeraude, et un autre avec la déesse Cinn, l'Immortel Abnar. Plus tard, Argent fut gouverné par le Roi Draka, qui entoura son pays d'une muraille puis s'attaqua au Royaume d'Émeraude. Après sa défaite, il s'exila au Royaume de Shola et c'est son plus jeune fils, Cull, qui le remplaça sur le trône. Ce dernier et la Reine Olivi eurent un seul fils, le Prince Rhee. Les habitants de ce royaume sont les Argentais ;
 Béryl qui est niché sur les hauts plateaux, dans les montagnes surplombant la Forêt Interdite. En raison de l'altitude, l'air y est plus rare et les pluies moins abondantes. Ses terres sont rocailleuses et accidentées, mais d'innombrables variétés de fleurs poussent entre les pierres. D'étroits sentiers grimpent jusqu'aux différents plateaux où les paysans entretiennent les canaux d'irrigation. La forteresse est très petite, n'abritant que la famille royale. Elle a la forme d'un cube et est faite de pierres brutes. On y bâtit surtout des maisons en pierre. Dans le premier tome, le Roi est Wyler et la Reine s'appelle Stella. Ses habitants sont les Bérylois ;
 Cristal qui est une grande étendue de vallons où peu d'arbres poussent et où de nombreux moutons et chèvres paissent en toute liberté. Ses rivières sont étroites, mais profondes. Le paysage est aussi ponctué de grands lacs poissoneux. Les nombreuses colonies sont éloignées les unes des autres. Le Royaume de Cristal n'est pas protégé par une falaise, très peu d'arbres poussent sur ses côtes continuellement balayées par des vents marins. Les forêts sont à l'intérieur des terres. On ne retrouve des buissons que près des cours d'eau. Le pic le plus élevé d'Enkidiev est la montagne de Cristal, vestige d'une autre chaîne de volcans qui descendaient vers le sud-est. Le palais est une immense chaumière située près du moulin à vent de village principal. C'est un bâtiment rustique non fortifié. Le roi et la reine s'appellent Cal et Félicité. Ses habitants sont les Cristallois ;
 Désert qui est l'endroit le moins élevé de tout Enkidiev. Il est presque entièrement recouvert de sable et ponctué de nombreux oasis. Même s'il est presque aussi grand qu'Enkidiev, il est à peine peuplé. C'est un pays dangereux à cause des animaux et des insectes qui rôdent dans le sable ;
 le royaume des Elfes qui est un royaume côtier. Les immenses forêts sont denses et les branches des arbres forment des dômes étanches à certains endroits. Certains étangs ont des propriétés magiques. La plupart des elfes ne savent pas nager car ils craignent de déplaire aux esprits qui veillent sur les créatures des rivières en entrant dans l'eau. À la hauteur du Royaume des Elfes, la plage est déchiquetée par récifs pointus ressemblant à des crocs jaillissant du sol. Les forêts recèlent toute la magie des elfes. Dans une clairière s'élèvent un curieux monument de granit dont certains ressemblent à des stèles funéraires et d'autres à d'énormes tables basses. De grandes cérémonies eurent lieu jadis à cet endroit, mais elles ne furent pas menées par les Elfes. Le roi habite une hutte toute simple. Le Royaume des Elfes est divisé en clans ;
 Émeraude qui a des forêts s'étendant à l'ouest de la montagne de Cristal, tandis qu'il y a des champs à l'est. Le sommet de la Montagne de Cristal est continuellement coiffé de nuages et sur son flanc sud escarpé nichent des aigles et des faucons. Le climat d'Émeraude est tempéré. Le château est une grande forteresse entourée de douves. Ses murs fortifiés sont surmontés de créneaux, et ses grandes portes et son pont-levis sont toujours ouverts au peuple. Une passerelle court le long des remparts, surplombant la grande cour. Sur l'un des côtés intérieurs de la muraille sont gravées les règles du code des chevaliers d'émeraude. Les habitants de ce royaume sont les Émériens ;
 Espérita qui est surtout recouvert de glace. La cité d'Espérita reposait au fond d'une gigantesque cavité creusée dans le glacier du royaume. Entourée de falaises immaculées, hautes de plusieurs kilomètres, Espérita n'entretenait aucun contact avec le monde extérieur ;
 le royaume des Fées qui est un royaume côtier, voisin du Royaume des Elfes et du Royaume d'Argent. La végétation y est abondante et bien différente du reste du royaume. Sa côte est protégée par d'immenses rochers que le Roi peut mouvoir à sa guise afin de former un mur infranchissable. Le Roi Tilly et la Reine Calva gouvernent ce royaume. ;
 Irianeth qui est un énorme continent situé de l'autre côté de l'océan à l'ouest d'Enkidiev. Le terrain est pierreux et la plage est composée de gros cailloux. Des montagnes probablement d'origine volcanique s'étendent à perte de vue à l'est et au nord de la forteresse d'Amecareth. Il n'y aucune végétation, aucun arbre. Il y a plusieurs ruches dont Bombieth qui abrite des pouponnières. Cet empire est protégé par une magie. La forteresse est creusée dans une énorme montagne sur le continent rocailleux. Il s'agit d'un labyrinthe aux couloirs sombres dans lesquels sont percées des petites pièces rondes comme des alvéoles sans fenêtres. Les couloirs sont éclairés par des pierres rouges mystérieuses émettant une lumière diffuse. La forteresse fait plutôt office de fourmilière ;
 l'île des Lézards qui est à l'ouest dans l'océan séparant Enkidiev et Irianeth, à la hauteur de Zénor. Certaines de ses côtes sont rocheuses et difficiles d'accès, surtout du côté est, tandis que d'autres sont des plages sablonneuses. La végétation est tropicale et les fruits, abondants. Les pierres rouges utilisées sur Irianeth son extraites des mines se trouvant sur cette île ;
 Shola, qui est un royaume du nord complètement enneigé. Ce royaume fut le premier victime des insectes lors de la seconde invasion. Il n'y avait qu'un château de glace, qui fondit sous l'assaut des dragons. Ce royaume est désormais désert.
Zénor qui est situé sur la côte. Quasiment anéanti lors de la première invasion des hommes-insectes, le royaume essaie de se reconstruire. Il est gouverné par le Roi Vail, la Reine et leurs fils Zach. Les habitants de ce royaume sont les Zénorois ;
 Zircon qui a été créé sous le Désert par Akuretari et est désormais inhabité. Il s'agissait d'une immense caverne aux murs polis comme des diamants, au centre de laquelle, une source lumineuse bleutée se reflétait sur tous les murs. Cette lumière provenait d'un démon de Jérianeth qui s'y était installé des centaines d'années auparavant. La caverne fut créée par la terrible chaleur des anciens volcans et elle comptait de nombreuses galeries. Son sol vitreux était parsemé de cailloux transparents. Le cristal de la caverne possédait une charge magique.

Personnages

Membres des chevaliers d'Émeraude

Première génération
 Wellan : chef des Chevaliers d'Émeraude. Fils du roi Burge de Rubis, il est décrit comme grand et fort, mais également cultivé et un brin colérique. Wellan a suivi un enseignement auprès de l'Immortel Nomar à Alombria ce qui fait de lui l'un des plus puissants magiciens de l'Ordre. Wellan affectionne particulièrement la Déesse Théandras. Il a un fils Immortel dont la mère est la défunte reine Fan de Shola. Écuyers : Bridgess, Cameron (tué par Asbeth alors qu'il était encore écuyer), Bailey, Volpel

 Santo : fils du Roi Levon de Fal, Santo est le meilleur guérisseur de la première génération des Chevaliers. Santo est de nature calme et pacifique. Il est le meilleur ami de Wellan, qui apprécie son caractère complémentaire au sien. Écuyers : Kerns, Hettrick, Chesley, Herrior,
 Jasson : originaire de Perle, Jasson a un caractère assez facétieux, mais est également doué en magie, particulièrement la lévitation. Il est le meilleur ami de Bergeau. Écuyers : Nogait, Morgan, Lornan, Zerrouck,
 Chloé : fille du Roi Pally de Diamant, Chloé est la seule femme de la première génération de Chevaliers. Elle est l'épouse de Dempsey. Écuyers : Wanda, Ariane, Jana
 Falcon : originaire du Royaume de Turquoise, Falcon est le Chevalier le plus superstitieux du Premier Ordre. Écuyers : Wimme, Murray, Offman, Yann
 Dempsey : fils du Roi Wyler de Béryl. Il est l'époux de Chloé. Écuyers : Kevin, Colville, Atall, Kowal
 Bergeau: fils d'un bandit du Désert, Bergeau est le Chevalier le plus fort physiquement de la première génération des Chevaliers. Il est aussi le meilleur ami de Jasson. Écuyers : Buchanan, Curtis, Arca, Kumitz

Deuxième génération
 Bridgess : fille du roi Giller de Perle, Bridgess est la première Écuyère de Wellan, dont elle tombera bien vite amoureuse. Écuyers : Swan, Gabrelle, Kira, Yamina
Kevin : originaire du royaume de Zénor. Écuyers : Milos, Curri, Romald
 Nogait : originaire du royaume de Turquoise, Nogait a hérité de la malice de son maître, Jasson. Écuyers : Corbin, Botti, Fossel
 Wanda : originaire du royaume de Diamant. Écuyers : Kagan, Joslove, Ursa
 Wimme : originaire du royaume de Diamant. Écuyers : Brennan, Amax, Callaan
 Kerns : originaire du Royaume de Jade. Écuyers : Pencer, Madier, Sherman
 Buchanan : originaire du royaume de Cristal. Écuyers : Derek, Bianchi, Hiall

Troisième génération
 Kira : fille de Fan de Shola, Kira sera recueillie par le roi d'Émeraude peu avant le décès de sa mère. Issue d'un viol commis par Amecareth, l'Empereur Noir, elle est décrite comme ayant la peau mauve, des yeux de chats, quatre doigts par main pourvus de griffes et des dents pointues. Kira possède une magie très puissante et rêvera très jeune de devenir elle-même Chevalier.
Sage : originaire du Royaume des Esprits, Sage décide par amour pour Kira de quitter sa contrée natale pour se rendre à Émeraude. Il est possédé par l'esprit du renégat Onyx lorsqu'il quitte Espérita. Il a pu devenir Chevalier sans suivre d'entraînement préalable.
Ariane: originaire du royaume des fées. Écuyers : Winks, Kisilin
 Brennan : écuyers : Drewry, Salmo
 Colville : écuyers : Silvess, Prorock
 Corbyn : écuyers : Brannock, Randan
 Curtis : originaire du Royaume de Zénor et ami d'enfance du prince Zach. Écuyers : Davis, Dienelt
 Derek : écuyers : Daiklan, Kruse
 Hettrick : écuyers : Candiell, Izzly
 Kagan : écuyers : Fallon, Sheehy
 Milos : écuyers : Carlo, Fabrice
 Morgan : écuyers : Heilder, Zane
 Murray : écuyers : Dyksta, Rieser
 Pencer : écuyers : Akers, Alisen
 Swan : fille du roi Nathan et de la reine Ardère d'Opale. Durant sa petite enfance, elle rencontre Wellan qui, décelant en elle des pouvoirs magiques, lui conseille de tenter sa chance pour devenir chevalier. Elle est la femme du roi Onyx. Écuyers : Dillawn, Robyn

Quatrième génération
Akers, Alisen, Amax, Arca, Atall, Bailey, Bianchi, Botti, Brannock, Callan, Candiell, Carlo, Chesley, Curri, Daiklan, Davis, Dienelt, Dillawn, Drewry, Dyksta, Fabrice, Fallon, Fossell, Gabrelle, Heilder, Herrior, Hiall, Izzly, Jana, Joslove, Kisilin, Kowal, Kruse, Kumitz, Lornan, Madier, Maiwen, Offman, Prorock, Randan, Rieser, Robyn, Romald, Salmo, Sheehy, Sherman, Silvess, Ursa, Volpel, Winks, Yamina, Yann, Zane, Zerrouck

Cinquième génération
Ada , Aidan, Alwin, Bankston, Benson, Camilla, Dansen, Dean, Drew, Dunkel, Ellie, Francis, Gibbs, Harrison, Ivy, Jonas, Kelly, Koshoff, Lavann, Linney, Mann, Mara, Moher, Nelson, Nurik, Phelan, Pierce, Polass, Quill, Radama, Rainbow, Rupert, Sagwee, Stone, Terri et Yancy.

Sixième génération
 Jenifael : fille adoptive des chevaliers Wellan et Bridgess d'Émeraude, créée par la déesse du feu Théandras à partir de la chair de Wellan.
 Lassa : fils du Roi Vail de Zénor. Il est le porteur de lumière, destiné à tuer l'empereur Amecareth.
 Liam : fils de Jasson et Sanya, il est le meilleur ami de Lassa et également son âme sœur.

Akarinac, Aldian, Alex, Ali, Allado, Ambre, Analia, Andaraniel, Anton, Atalée, Aurelle, Bansal, Bathide, Bélonn, Bianna, Brit, Célan, Chariff, Cidia, Cilian, Coralie, Christelle, Cyril, Dalvi, Daviel, Deleska, Dianjin, Dollyn, Domenec, Donatey, Edessa, Émelianne, Esko, Falide, Fanelle, Fideka, Filip, Goran, Haspel, Héliante, Horacio, Indya, Ivanko, Jaake, Jakobe, Jaromir, Jinann, Jolain, Julia, Kaled, Keiko, Kilimiris,  Léode, Lianan, Loreli, Madul, Malède, Marika, Maryne, Maxense, Mercass, Mérine, Michal, Myung, Néda,   Nikelai, Noah, NoémieNorikoff, Nova, Odélie,  Onill, Orlando, Osan, Otylo, Parise, Périn, Philin, Qilliang, Ranayelle, Romy, Ryun, Sahill, Saphora, Sédanie, Shandini, Shangwi, Shizuo, Shuhei, Sladek, Sora, Symilde, Syrian, Tara, Tazyel, Tédéenne, Thalie, Théa, Tidian et Tivador.

Premiers chevaliers d'Émeraude
 Hadrian : ancien roi d'Argent, ami de Onyx et chef des tout premiers Chevaliers.
 Onyx : ancien chevalier d'Émeraude issu de la campagne d'Émeraude, Onyx est un homme très intelligent et puissant, mais également ambitieux. Ennemi juré d'Abnar, Onyx tentera de le détruire par tous les moyens et de monter sur le trône d'Émeraude. Il prend possession du corps de Sage lorsque celui-ci quitte Espérita.
Ravenne
Viggho
Gregory
Leeman
Sauni

Autres personnages
 Abnar : aussi appelé Magicien de Cristal, Abnar est un immortel âgé d'environ 500 ans qui a reçu des dieux la mission de protéger (de manière limitée) le continent Enkidiev. Déçu du comportement des chevaliers d'Émeraude lors de la première invasion, il est bien plus méfiant envers la nouvelle incarnation de l'Ordre et distribue informations et pouvoirs magiques avec parcimonie. Cela fera l'objet de tensions avec Wellan.
 Fan : reine de Shola et mère de Kira, Fan est assassinée par Asbeth au début du premier tome. Maître magicien, Fan parvient même après sa mort à communiquer avec le monde des vivants, quand les dieux le lui permettent.
 Theandras : déesse du feu, particulièrement adorée dans le Royaume de Rubis.
 Armène : servante et mère adoptive de Kira et Lassa.
 Elund : magicien attitré du Château d'Émeraude et professeur des futurs apprentis Chevaliers. Elund est très puissant mais aussi très fier, et ne sera au début pas très heureux de la venue du Magicien de Cristal.
 Émeraude Ier : roi d'Émeraude et père adoptif de Kira.
 Farrell : magicien et descendant d'Onyx, qui mélangera leurs deux esprits, amoureux de Swan.
 Kardey : mari d'Ariane, transformé en Fée à la suite de graves blessures au combat.
 Nomar : de son vrai nom Akuretari, dieu déchu.
 Parandar : chef des dieux reptiliens.
Hawke : magicien elfe, il aurait pu être un chevalier d'Émeraude de la deuxième génération mais a préféré rester aux côtés d'Elund pour apprendre la magie.
Jahonne : amie de Wellan et mère de Sage, elle est une enfant hybride de l'empereur Amecareth et d'une humaine. Elle résidait à Alombria avant que la ville ne soit détruite.

Ennemis
 Amecareth : empereur des hommes-insectes, Amecareth souhaite, depuis plusieurs siècles déjà, envahir le territoire d'Enkidiev.
 Asbeth : fils hybride d'Amecareth, Asbeth est un puissant sorcier au service de son père, à qui il espère un jour succéder.
 Akuretari : dieu déchu, ennemi des humains et de Parandar (son frère). Il veut détruire l'humanité par vengeance.
 Sélace : sorcier requin à la solde d'Amercareth, qui ne peut pas mourir, car grâce à sa magie il peut se reformer à partir de son corps réduit en cendre ou tranché en deux, il fut trahi par Asbeth qui sépara son corps en deux et éloigna les deux morceaux loin de l'autre, après qu'Amecareth l'ai réduit en cendres.

Publication

Résumé par livre

1. Le Feu dans le ciel
Sous les conseils de son magicien, Maître Elund, le roi Émeraude  décide de refonder une armée de chevaliers-magiciens éteinte  auparavant : l'Ordre des Chevaliers d'Émeraude. Ceux-ci ont pour mission de protéger le continent d'Enkidiev. Il dépêche alors des messagers dans chaque Royaume afin que les enfants présentant des aptitudes magiques soient amenés au château d'Émeraude où Elund leur apprend à utiliser leurs pouvoirs dans le but de faire d'eux des membres de l'Ordre.

Peu après l'adoubement des sept premiers chevaliers de l'Ordre, la reine Fan de Shola se rend au Royaume d'Émeraude prétextant vouloir rétablir les relations entre le Royaume d'Émeraude et celui de Shola. Les deux royaumes étaient en froid à la suite de la trahison du Roi Draka d'Argent, qui avait voulu conquérir le Royaume d'Émeraude, puis à l'exil de son fils, le Roi Shill, qui s'était alors réfugié à Shola et avait épousé Fan. C'est en voyant la Reine pour la première fois que Wellan, le chef de l'Ordre, en tombe amoureux. En gage de son amitié, Fan abandonne sa fille Kira, alors âgée de deux ans, au Roi d'Émeraude. Celle-ci est immédiatement prise en charge par la plus âgée des servantes, Armène, qui est également la seule à ne pas être horrifiée par son apparence presque inhumaine. Très vite, Kira fait tourner le château en bourrique, grimpant aux murs à l'aide de ses griffes et échappant sans cesse à la surveillance des servantes. Persuadé qu'elle est un démon, Elund, le vieux magicien, la prend en grippe.

Quelques jours plus tard, une comète enflammée traverse le ciel d'Enkidiev, prévenant les magiciens d'une tragédie imminente. Le lendemain, Émeraude  confie aux chevaliers une missive à remettre à la Reine de Shola. Ceux-ci se mettent en route sur le champ, profitant du voyage pour montrer aux habitants d'Enkidiev que l'Ordre des Chevaliers d'Émeraude est à nouveau en fonction. En traversant le Royaume des Elfes, les Chevaliers apprennent que des monstres venus de la mer se sont abattus sur Shola. Les chevaliers s'y hâtent donc. Ils y découvrent avec horreur que tous les habitants se sont fait dévorer le cœur par des dragons. Craignant pour la vie de la Reine, Wellan se précipite dans la forteresse royale. Il y trouve Fan, un poignard enfoncé dans le cœur. Elle lui révèle que Kira est la fille de l'empereur des hommes-insectes, Amecareth, et que celui-ci cherche à la récupérer pour étendre son emprise sur Enkidiev.  La Reine fait ensuite promettre à Wellan de protéger Kira, pour qu'elle puisse accomplir son destin et tuer son père, avant de mourir dans les bras du chevalier. Persuadé que les hommes-insectes attaqueront à nouveau le continent sous peu, Wellan dépêche ses troupes auprès des royaumes côtiers afin de les prévenir du danger et d'établir avec eux un plan de défense du continent. Il se rend lui-même au Royaume des Elfes où il attaque le Roi Hamil, jugeant que les Sholiens et la Reine ont péri à cause de son inaction. Bergeau, en mission au Royaume de Zénor, rencontre une jeune femme nommée Catania avec qui il échangera une correspondance régulière.

De retour au Royaume d'Émeraude, Wellan rend visite à Elund et lui apprend les origines de Kira. Le soir même, le chef des chevaliers tente de tuer la petite, pensant pouvoir ainsi sauver Enkidiev, mais y renonce au dernier moment. Le fantôme de la Reine Fan lui apparaît alors pour la première fois. Celle-ci lui révèle qu'elle est un maître-magicien, ce qui lui permet de voyager à sa guise entre le monde des morts et celui des vivants, et lui promet de l'aider à battre les hommes-insectes. Wellan lui déclare ses sentiments et une relation amoureuse débute entre eux.

Les chevaliers se voient attribuer un écuyer chacun, dans le but de les former au combat et de leur inculquer la discipline requise pour devenir membre de l'Ordre. Ils retournent ensuite dans les royaumes côtiers afin d'y creuser des pièges servant à tuer les dragons. Jasson insiste pour se rendre au royaume des Elfes. Il y apprend que le Roi Hamil a ressenti la terreur et la douleur de chacun des habitants de Shola le soir du massacre et qu'il s'était senti impuissant. Au Royaume d'Opale, Wellan fait la connaissance de la princesse Swan, chez qui il décèle des facultés magiques et qu'il convie au château d'Emeraude afin de recevoir les enseignements d'Elund.

Pendant que les chevaliers accomplissent leur mission, un magicien nommé Abnar se présente auprès d'Emeraude Ier. Il s'agit du célèbre Magicien de Cristal, l'Immortel qui,  plus tôt, donna à une armée de soldats des pouvoirs magiques, créant ainsi les premiers chevaliers d'Emeraude, et dut ensuite les leur reprendre lorsqu'une fois la guerre terminée les soldats tentèrent d'usurper les trônes des souverains d'Enkidiev. Abnar rencontre Kira et la prend sous son aile, soulageant Elund qui est terrifié par les pouvoirs de l'enfant.

Sur la côté du Royaume de Zénor, les chevaliers sont confrontés pour la première fois aux dragons de l'empereur noir et aux hommes-insectes. Grâce aux pièges creusés plus tôt, ils sortent victorieux de ce combat.

2. Les Dragons de l'Empereur noir

3. Piège au Royaume des Ombres

4. La Princesse rebelle

5. L'île des lézards

6. Le Journal d'Onyx

7. L'Enlèvement

8. Les Dieux déchus

9. L'Héritage de Danalieth

10. Représailles

11. La Justice céleste

12. Irianeth

Héritage
Les Héritiers d'Enkidiev est la série littéraire faisant suite aux aventures des Chevaliers d'Émeraude. Anne Robillard a également choisi d'adapter Les Chevaliers d'Émeraude en une série de bande dessinée de cinq tomes depuis 2011.

Notes et références

Annexes

Bibliographie
 .
 .

Liens externes

 Site officiel de l'auteure

Cycle de fantasy canadien
Série d'Anne Robillard
Univers des Chevaliers d'Émeraude


Years in the making, Ark: Survival Evolved has finally emerged from Early Access. Have the console versions improved that much? How well do they run now and have the low, low resolutions of the work-in-progress versions improved?


text:
India takes up recurring 'Attack on Hindus' issue with Bangladesh.
Status of minority Hindus in Bangladesh & brutal attack on them, has now been considered as an important concern in Indian Parliament too.
Confirming that Hindu minorities have been targeted in neighbouring Bangladesh, the Centre on Wednesday (Feb 8) clarified that it has taken up the issue with the Government of Bangladesh.
Minister of State for External Affairs Gen (retd) Dr VK Singh in a Lok Sabha reply said that sporadic incidents of violence against members of the minority community and on their properties and places of worship have been reported in Bangladesh.
Two BJP MPs had put up the question to the External Affairs Minister regarding the 'Status of Hindus in Bangladesh' on Wednesday, Feb 8.
Through unstarred Question No. 987, Shri Om Birla (BJP MP from Kota-Bundi constituency of Rajasthan) and Shri Chandu Lala Sahu (BJP MP from Mahasamund constituency of Chhattisgarh) wanted to know:
(a) whether Hindus in Bangladesh are allegedly undergoing harassment;
(b) if so, the details thereof including the response of the Government in this regard;
(c) whether the Government has initiated any talks with Bangladesh Government for safety and security of minority Hindus there; and (d) if so, the details thereof and if not, the reasons therefor?
Minister of State for External Affairs Gen (retd) Dr VK Singh in a Lok Sabha reply said:
"The Government of India closely monitors incidents targeting the religious, socioeconomic and political freedom and general well being of minorities, including Hindus, in Bangladesh. India's concerns and sensitivities with regard to such incidents have been conveyed to the Bangladesh Government.
"The primary responsibility for the protection of life, liberty and property of all citizens of Bangladesh, including minorities, rests with the Government of Bangladesh. The Government of Bangladesh has made it clear that it takes these attacks very seriously and that stern action would be taken against the perpetrators".
Interestingly, when Two non-Bengali MPs from Rajasthan and Chhattisgarh has paid a concern on the tortured Hindus in Bangladesh, no Bengali MPs from West Bengal (including two BJP MPs from Bengal) showed any little responsibility to raise such issue in Parliament!
Upananda Brahmachari, Editor, Hindu Existence and prominent Hindu Rights Interlocutor congratulated the BJP MPs from Kota-Bundi and Mahasamund to raise the important issue of "Hindu Persecution in Islamic Bangladesh" in Indian Parliament in a very right manner.
Categories: Crimes Against Hinduism


Renee is a New Zealand author who is published only under her first name but her full name is Renee Taylor. She was born in Napier in 1929. She has written quite a number of plays and novels.
Why not try Kissing Shadows to start with? And then if you like her books, you could try The Skeleton Woman or Finding Ruth (must be good with that name in the title).


text:
$( function(){

  'use strict';

  Ember.Handlebars.registerBoundHelper('currentDate', function(format){
    return moment().format(format || 'LL');
  });

  Ember.Handlebars.registerBoundHelper('timeAgo', function( date ){
    var parsedDate = moment(date);
    return new Handlebars.SafeString('<time datetime="'+parsedDate.format()+'">'+parsedDate.fromNow()+'</time>');
  });

  Ember.Handlebars.registerBoundHelper('formatDate', function( date, options ){
    var formatter     = options.hash.format ? options.hash.format : 'LLL';
    var parsedDate    = date ? moment(date) : moment();
    var formattedDate = parsedDate.format(formatter);

    return new Handlebars.SafeString("<time datetime=" + date +">" + formattedDate + "</time>");
  });

  Ember.Handlebars.registerBoundHelper('smartDate', function( date ){
    var parsedDate    = date ? moment(date) : moment();
    var str;

    if( parsedDate.clone().subtract('d',7) >= moment().startOf('day').subtract('d',8) ){
      if( parsedDate.format('YYYY-MM-DD') === moment().format('YYYY-MM-DD') )
        str = Em.I18n.t('today') + ', ' + parsedDate.format('HH:mm') + ' ' + Em.I18n.t('o_clock');
      else if( parsedDate.format('YYYY-MM-DD') === moment().subtract('d',1).format('YYYY-MM-DD') )
        str = Em.I18n.t('yesterday') + ', ' + parsedDate.format('HH:mm') + ' ' + Em.I18n.t('o_clock');
      else
        str = parsedDate.format('dddd HH:mm') + ' ' + Em.I18n.t('o_clock');
    } else {
      str = parsedDate.format('DD. ');
      if( parsedDate.format('MM.YYYY') === moment().format('MM.YYYY') )
        str += parsedDate.format('MMMM');
      else
        str += parsedDate.format('MMMM');
      if( parsedDate.format('YYYY') !== moment().format('YYYY') )
        str += parsedDate.format('YYYY');
    }
    return new Handlebars.SafeString("<time title='" + parsedDate.format('LLLL') + "' datetime='" + parsedDate.format('LLLL') +"'>" + str + "</time>");
  });

  Ember.Handlebars.registerHelper('thisYear', function( date, options ){
    if( moment(this.get(date)).format('YYYY') === moment().format('YYYY') )
      return options.fn(this);
    return options.inverse(this);
  });

});


A bit of a backstory: As you all know, family bought a 2017 Subaru Impreza Sport (wagon) back in November '17. All was well until the radio (the one with the bigger screen) started to act up and at times, disconnect both my old iPhone 6 and now S9 even though I didn't touch it.
For that, I kept going to the dealership with that problem twice during the 2-year warranty period (which is set to expire around November of this year), and now its bluetooth system started to crash "Handsfree system is loading" and would stay like that until I have to completely shut off the car (either wait a few minutes for the radio to shut off or open the door for it to). I know they're about to replace the radio unit with one from a newer MY, but at this point, I just don't want it anymore.
So my question is, is anyone familiar with the lemon law? I can't keep using a car with a radio that is borderline useless and at worst, dead.


Surely Samuel L. Jackson, Tom Hanks, Mahershala Ali, Justin Timberlake, Cate Blanchett and a bevy of other celebrities (see list below) have nothing but laudable intentions by appearing on Friday night's live televised high school reform spectacular on four — count them, four — major networks (NBC, ABC, CBS and Fox).
But when an hour of prime time on four networks is purchased, it's fair to ask whether that is a public service or propaganda.
The alphabet-soup-titled show — "EIF Presents: XQ Super School Live" — is a joint project of the Entertainment Industry Foundation, which for decades has used the power of celebrity to help various charities (such as last year's live televised fundraising "Stand Up to Cancer" production) and the XQ Institute, co-founded by Laurene Powell Jobs, the billionaire widow of Apple co-founder Steve Jobs.
XQ Super School Live uses music, comedy and documentary to promote an effort to "disrupt" the American high school and redesign it for the 21st century. That, of course, presumes that the American high school needs to be redesigned for the 21st century, a contention with which some in the education world disagree. And it uses the power of celebrity to push its faulty narrative.
Do new technologies require us to rethink the purpose of American education?
If the primary goal of school is to teach students to build products, the answer might be yes. But interviews my research team has conducted with educators and parents show that Americans maintain broad and complex aims for education. They want students to develop interpersonal skills and citizenship traits. They want schools to teach critical thinking and an array of academic skills. They want young people to be exposed to arts and music, to have opportunities for play and creativity, and to be supported socially and emotionally.
The thinking that if "only we can find the right school design model then all kids will have a great education" disregards the fundamental problems that do harm public education: devastating funding inequities that disadvantage the poorest of the country's schools; curriculum deficits; issues facing teachers, including training, retention, lack of diversity, low pay and lack of authority in their own classrooms; and issues facing students, including poverty, trauma, poor health, unstable family life and learning disabilities.
Such thinking is also part of a myth that all public schools look alike, and that they have looked the same for 100 years. You've heard about it before, surely, as the "industrial model." Actually, public schools have changed enormously in the last century, and they are not all the same. And there are brilliant high schools educating students in the United States.
So, did seeing stars including Jennifer Garner, Gwyneth Paltrow and Matthew McConaughey make you think about issues in education in America for much longer than the length of the show? It was an attempt to show that America's entertainment industry cares about helping young people and improving education — and no doubt many in the industry do.
But there is another message that these shows send, to which it is safe to presume that the participants haven't given much thought: that America's public education system is a charity that needs a live television show with celebrities singing and dancing and interacting with students and teachers to get ordinary people interested and to be transformed.
The U.S. public education system is not a charity. It is a civic institution, the most important, many argue, in the country, and it educates the vast majority of America's children — the well-off ones and middle-class ones and those who are so poor that they turn up in class with flea collars around their ankles (as one superintendent told me). It is in some areas of the country a brilliant success and in other places a crushing failure, differences that reflect embedded inequality in the U.S. society and economy.
It needs serious reform, but certainly not the kind that has been pursued by state and federal lawmakers for more than 15 years with thinking that includes the notion that there are silver bullets in education: The right teacher can make all the difference for every kid; the right teacher can be determined by standardized test scores; charter schools are inherently better than traditional public schools. It's just not so.
Now we have a large group of celebrities who have apparently bought into the notion that America's high schools are failing wholesale and need to be reimagined — and that this is such a big issue that it is worth paying for an hour of prime time on four different networks.
In America, celebrities can sell just about anything, and they do. Unfortunately, that's because it works.


text:
Q: Using had twice
Possible Duplicate:
What does "had had" mean? How does this differ from "had"?

Is this correct usage?
I had had enough food?

A: Yes, it's correct; it uses the past perfect tense.
Edit: you can find a better answer here (and this question is actually a duplicate of that one).