A great storyline that improves the gameplay.
Lots to do, and plenty of freedom of choice.
Controls can be a bit much on occasion.
Precision aiming is hard to achieve.
Even though we're several years deep in the smartphone world, some games can still surprise me by looking like someone's shoehorned an Xbox 360 into pocket calculator. Exiles: Far Colony, for example, is almost too good looking. It verges on being distracting how detailed and rich and smooth the visuals and animation is. This can't be a smartphone game, surely?
It's no surprise that Crescent Moon Games has cobbled together another dazzling display of touchscreen polygons and pixels, but there's a lot more to Exiles: Far Colony than just a 3D fireworks show. The game boasts a decent RPG sci-fi storyline that keeps things moving from beginning to end, and gives entertaining purpose to the third-person shooter action.
It smacks, very lightly, of Firefly (which is a huge compliment from this sci-fi and Wheadon-addled gamer), with the game taking place on a far distant planet as humans spread into the galaxy, looking for resources and a new home. But it doesn't anchor you down with an epic tale that's long in the telling. You're thrust into the game quickly and effortlessly as you're sent to re-establish contact with a mining outpost.
This ushers you into the game very neatly, and it soon expands into something of a sandbox exploration experience around – and through – the planet. It's not a completely open game, but Exiles: Far Colony offers a lot more freedom than its fantasy-based siblings. Something that lands between Dead Space and Mass Effect, with quests that reveal themselves the more you delve into the nooks and crannies of the lavish landscape.
Gradually the plot unfolds as you become more and more a participating member of this planet, and while I don't want to spoil anything here, it's got a good share of twists that will likely keep you on track with the plot rather than spending your time picking up random quests. And that's not something that a lot of smartphone RPG games can boast.
Neither is every job a particularly benevolent one, and that adds some real grit to the game, lending it more of the Wild West, frontier lawlessness that made Firefly such a triumph. It makes Exiles: Far Colony more tangible and, strangely, more real, because you're not just another hard-bitten angel out to be righteous and just. The missions simply are what they are, and you choose whether to do them or not because it progresses the game and furthers your personal agenda; not because it's "the right thing to do" (yawn).
The controls are busy, with a floating d-pad on the left taking care of movement and a variety of other buttons, such as firing, jump and a special button. This latter option varies, depending on the character type you chose at the beginning, as the three options each offer different abilities. Above these buttons is another unmarked, floating analog control that allows you to move the camera. Admittedly there's a lot, and it can tie your fingers in knots when the action heats up, but there's a limit to what Crescent Moon could have done to alleviate this.
It works, with a small amount of practice, and although a lot of shots will go wide when the fighting hits its peak, the game remains just within your control and, mostly, avoids frustration.
Exiles: Far Colony is a triumph of both design and value, with many aspects that'd make a complete game all in their own right (speeding around on the awesome airbikes, for example). No, it might not be the cheapest game you've bought this year, but it earns every penny within the first hour of play. Once again, Crescent Moon has reminded us that there's definitely still a place for premium gaming on the smartphone platform.


text:
Campaigns: Tracking external marketing campaigns with URL parameters
Content: Distinguish good bounces from bad bounces by looking at Engagement
Content: Examine how users reach a specific page
Admin - Tag Integration: First Steps - Integrating Webtrekk Analytics
Admin - Tag Integration: Updating the Webtrekk Plugin
Admin - User Centric Tracking (1): An introduction
Admin - User Centric Tracking (2): The next level
Admin - User Management: Basic Use Case
Admin - User Management: Extended Use Case
Admin: Analysis of errors in pixelation and assignment
Admin: Smart Alerts - All you need to know on automated notifications
This Best Practice gives you information on Use Cases and Smart Alerts.
What are Smart Alerts?
How can smart alerts be created?
How can Smart Alerts be analyzed?
1. What are Smart Alerts?
Smart Alerts allow for receiving notifications when data values change significantly. With the help of Machine Learning, Webtrekk derives a corridor from values that were tracked in the past. Here, also seasonalities, e.g., weekdays, are taken into consideration. All data that lies outside of this corridor is considered a significant change. If such data is recognized, an alert is triggered, i.e., an automatically generated e-mail is sent. You can define the sensitivity to adjust how far data can lie outside of the corridor to trigger an alert.
Smart Alerts can be configured on daily or hourly basis:
Monitoring of days
Data that was collected within the last eight weeks is used to derive the corridor.
Webtrekk always checks for an alert when all data for a complete day is available in the system.
Monitoring of hours
Data that was collected within the last eight days is used to derive the corridor.
Note that data is always checked for the hour before the last hour as it must be assured that all data is completely available. E.g., an alert recognized at 11 am shows an anomaly for the hour between 9 am and 10 am.
2. How can Smart Alerts be created?
First, click on the bell symbol (1). Afterwards, click on "Alerts" (2), and finally on "Create New Alert".
Example 1: Checking Visits hourly
This Alert checks the visits each hour. Therefore, it is useful to examine the traffic in general.
Use the following settings.
What do I do when the alert is triggered?
The simplest explanation is seasonal effects, for example, holidays. Please note that for hourly alerts, only data of the last eight days is considered.
If a seasonal effect does not apply, you should check your campaign channels ((Marketing > Campaign Categories > [Name of the Campaign Channel]). Often the reason is a new or discontinued campaign. If there are similar shifts for all campaign channels, there may be technical reasons (for example, that the website was not available for a certain amount of time).
Example 2: Checking Campaign Channels Daily
This alerts checks the usage of single campaign channels. Therefore it is useful to check for changes in the usage of your campaign channels.
You can monitor up to 10 campaign channels. To this end, choose "Top 10".
Use the following settings:
Alternatively, you can choose specific campaign channels to be monitored. To this end, use the option "In list".
When is the Alert triggered?
The alert is triggered if in the hour before the last hour, the visits for one or more channels are above or below the corridor (i.e., not within the expected values).
Example scenario:
The visits for "SEA" have risen significantly; for "Newsletter", they remained on a constant level; for "Display", they dropped significantly.
You will receive two notifications:
Visits via SEA haven risen, and
Visits via SEA have dropped.
What do I do is the alert triggered?
If you observe the same phenomenon for all campaign channels, seasonal effects may be the cause. Alternatively, there may be technical reasons (for example, that the website was not available for a certain amount of time).
If there are differences between the single campaign channels, changes at the campaign setup might be the cause. It also could be that an expiration date has been set for campaigns in Webtrekk and that they are therefore not tracked anymore. Another reason may be that the media codes that were actually used do not correspond anymore to the media codes specified in the marketing configuration.
Example 3: Checking Campaign Channels for Tablet and Smartphone daily
This alert checks the usage of different campaign channels solely for accesses via Tablet and Smartphone. Therefore, this alert suits if you want to analyze mobile traffic specifically.
The alert is triggered when the visits are above the expected values for tablets and smartphones within the hour before the last hour.
The mobile visits via the channel "SEA" have risen significantly. Via "Newsletter" they remained on a constant level, via "Display" they dropped.
The mobile visits via the campaign channel "SEA" have risen, and
The mobile visits via the campaign channel "Display" have dropped.
What to do if an alert is triggered?
If the same phenomenon can be observed for all campaign channels, then seasonal effects may be the reason. Alternatively, there may be technical reasons (for example, that the website was not available for a certain amount of time).
If there are differences between the single campaign channels, one cause may be that the campaign setup has been changed. It also could be that an expiration date has been set for campaigns in Webtrekk and that they are therefore not tracked anymore. Another reason may be that the media codes that were actually used do not correspond anymore to the media codes specified in the marketing configuration.
3. How can Smart Alerts be analyzed?
Besides the e-mail notification, within the user interface, more information on alerts is provided.
The number of triggered alerts is shown at the top of the bell symbol.
A complete list of alerts that have been triggered can be found at "Alerts > Feed".
The mouse-over gives you more information on the development over time.
Alerts > Configure Alert
Analysis Variant Path
Analysis Variant Cross Table

redpajama_set_name: RedPajamaCommonCrawl


Kim Simmons was gracious enough to design this years exclusive JediconWV VII poster!
I have to say he did an AWESOME job. The photography and artwork is just stunning with the vintage toys and the ESB theme!
Just letting everyone know that we are just a little over 3 weeks away from this years show.We have very few tables left so if you plan on setting up,please register soon.Thanks to all who have e-mailed and sent PM's.
I would like to invite any "local" collectors ( WV, OH, PA ) to attend JEDICON WV,a Star Wars convention located in a small rural town here in the Mountain state.
We are pleased to announce that this years show will be on October 13Th, 2012 and will be held at the Sistersville Fire Hall in Sistersville WV !
If anyone has any questions please send me a PM or post here and I'll answer as soon as I can. To see pictures from past shows go to www.jediconwv.net.
Local members of THE REBEL LEGION ( http://www.rebellegion.com ) and GARRISON CARIDA ( http://501stgarrisoncarida.org/enlist/ ) will also be in attendance.
All proceeds from the silent auction,food sales and a portion of the admission costs will benefit CMN,Children's Miracle Network.Vendors keep all monies made!
Kim Simmons has decided to return to this years show!
For those of you not familiar with his work, Kim was the photographer in charge of virtually all vintage Star Wars photography work at the outside design firm used by KENNER and who was responsible for images that would be used for packaging,comps/mock-ups,and some publicity images and slide presentations.
Please join us in the fun and help raise some money for Children's Miracle Network!
Giving this a friendly 'bump' as we are a little more than a month away from this years show.Would also like to thank some folks here for the generous donations towards our silent auction for Children's Miracle Network!
We will have tables filled with VINTAGE and Modern collectables,a video game both, special guest Scott Simmons ,a Lucasfilm approved artist will be on hand with plenty of sketches of your favorite characters for sale,and he can do sketches of you as well.Plus a silent auction with along with food & table sales all benefit Children's Miracle Network at the WVU Hospital in Morgantown .So please come out ,have some fun and help support a great cause.You can find us at our website http://www.redbirdsolutions.com/jedicon/ or our Facebook page at https://www.facebook.com/jedicon.wv.9.If you have any questions,please feel free to send a PM or send one via Facebook.Thanks!
JediCon WV is West Virginia's original Star Wars show. And in 2014 we'll be celebrating Episode XI – fanboy speak for our 11th convention.
But we also discovered it's a great vehicle to raise money for our charity of choice: Children's Miracle Network ( CMN ).ALL money made from ticket,food and silent auction sales go to CMN .
So, while this is a marketing ploy it's we're also gonna bring you some entertainment and introduce you to some phenomenal people we've met over the years. And we're gonna invite you to participate.
JediCon WV – Episode XI – will be held at the Matthew Barker Memorial Complex in Paden City, WV, June 21, 2014. This is our first time at the venue but we needed a larger location.
Brian Stillman, producer of Plastic Galaxy: The Story of Star Wars Toys. Stillman is making a documentary on the Kenner line of licensed likenesses we first gen fans grew up with. See what he's been up to at www.plasticgalaxymovie.com/.
Bill McBride has agreed to be a part of our show. McBride is the curator of The Darth Vader Toy Museum. His Web site is www.sithtoys.com. Go check him out.
Finally we've signed on Blind Wave Productions ( https://www.facebook.com/BlindWaveProduction ). These guys are two-time winners of the Lightsaber Choreography Competition and makers of fan films. For a sample of their work slip over to YouTube. They really are amazing.
That said we'll also have our vendors with SW collectibles for sale including - modern,vintage and everything in between – video game booth, local 501st and more.
As time goes on I'll be posting updates on the show.
For more info check us out at www.jediconwv.net and like us on FaceBook ( https://www.facebook.com/jedicon.wv.9 ) or if you have any questions please feel free to send me a PM and I'll answer as soon as I can.
Tables for this years show are a wallet busting $5.00 each and can be paid for at set-up or the day of the show,over 100 tables are available at this time ,more if needed.If you are interested in setting up please post below or send us a PM with how many tables you want / need ,also please mention if you need anything at your table such as electricity,etc. We will keep a list of who & how many tables each of you want and will be in touch with you a few weeks out from the show to confirm everything.Tables are sold on a first come first serve basis.
Food will be catered through Christy's Cakes and Catering (https://www.facebook.com/pages/Christys-Cakes-and-Catering/103037116512597) Please also let us know if you or any family members need sugar free or gluten free foods.All proceeds from the sale of food,silent auction and tickets go to Children's Miracle Network!


text:
Q: Phaser My game Freezes after switching scenes I'm working on a proof of concept that involves the game switching between 2 scenes. The scenes switch when the player character moves in front of a door sprite and presses a button.
Update: Here is the code from the first scene, including that lets allows for switching from the first scene, called play, to the other scene, called secondScene.
    class Play extends Phaser.Scene {
    constructor() {
        super('play');
    }

preload(){

    this.load.image('testBackground', "assets/testBackground.png");
    this.load.image('testGround', "assets/testGround.png");
    this.load.image('TestCharacter', "assets/TestCharacter.png");
    this.load.image('testNPC', "assets/testNPC.png");
    this.load.image('testPlatform', "assets/testPlatform.png");
    this.load.image('testDoor', "assets/testDoor.png");
    this.load.image('testItem', "assets/testItem.png");

}

create(){

    let width = config.width;
    let height = config.height;
    this.physics.world.gravity.y = 1000;

    keyA = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.A);
    keyD = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D);
    keyW = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.W);
    keyT = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.T);
    keyG = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.G);

    this.bg = this.add.tileSprite(0,0, game.config.width, game.config.height, 'testBackground').setOrigin(0,0);
    //this.cameras.main.setBackgroundColor('#CCC');

    this.items = [null, null, null, null, null, null, null, null, null];

    this.ground = this.physics.add.sprite(800, 900, 'testGround');
    this.ground.body.immovable = true;
    this.ground.body.allowGravity = false;

    this.door = this.physics.add.sprite(14.5, 770, 'testDoor');
    this.door.body.immovable = true;
    this.door.body.allowGravity = false;

    this.hammer = this.physics.add.sprite(200 ,700, 'testItem');

    //this.menuConfig = {
    //    fontFamily: 'Courier',
    //   fontSize: '28px',
    //    backgroundColor: '#F3B141',
    //    color: '#843605',
    //    align: 'right',
    //    padding: {
    //        top: 5,
    //        bottom: 5,
    //     },
    //    fixedWidth: 0
    //}

    this.p1 = this.physics.add.sprite(500, 500, 'TestCharacter');
    this.p1.setCollideWorldBounds(true);

    this.talker = this.physics.add.sprite(600, 770, 'testNPC');

    this.platforms = this.add.group();

    this.low = this.physics.add.sprite(600, 720, 'testPlatform');
    this.low.body.immovable = true;
    this.low.body.allowGravity = false;
    this.platforms.add(this.low);

    this.high = this.physics.add.sprite(450, 700, 'testPlatform');
    this.high.body.immovable = true;
    this.high.body.allowGravity = false;
    this.platforms.add(this.high);

    this.physics.add.collider(this.p1, this.ground);
    this.physics.add.collider(this.talker, this.ground);
    this.physics.add.collider(this.p1, this.ground);
    this.physics.add.collider(this.hammer, this.ground);

}

update(){

    if(keyA.isDown) {
        this.p1.setVelocityX(-200);
    }
    else if(keyD.isDown) {
        this.p1.setVelocityX(200);
    }
    else {
        this.p1.setVelocityX(0);
    }

    if(this.p1.body.touching.down && Phaser.Input.Keyboard.JustDown(keyW)) {
        this.p1.body.setVelocityY(-500);
    }

    if (this.checkCollision(this.p1, this.hammer) && Phaser.Input.Keyboard.JustDown(keyT)){
        this.space = 0;
        if (this.items[this.space] == null){
            this.items[this.space] == this.hammer;
            this.hammer.destroy();
        }
    }

    if (this.checkCollision(this.p1, this.talker)) {
        this.add.text(game.config.width/2, 30, 'blah blah blah)', { font: '14px Futura', fill: '#FFFFFF' }).setOrigin(0.5);
    }

    if (this.checkCollision(this.p1, this.door) && Phaser.Input.Keyboard.JustDown(keyT)){
        this.p1.x = 55;
        console.log(Phaser.Input.Keyboard.JustDown(keyT));
        this.scene.switch('secondScene');
    }

}

checkCollision(a, b) {
    // simple AABB checking
    if ((a.x < b.x + b.width &&
        a.x + a.width > b.x &&
        a.y < b.y + b.height &&
        a.height + a.y > b.y) ) {
            return true;
    }
    else {
        return false;
    }
}

}

And here is the code from secondScene, including that which is supposed to allow for switching back to play.
    class SecondScene extends Phaser.Scene {
    constructor() {
        super('secondScene');
    }

preload(){

    this.load.image('testBackground', "assets/testBackground.png");
    this.load.image('testGround', "assets/testGround.png");
    this.load.image('TestCharacter', "assets/TestCharacter.png");
    this.load.image('testNPC', "assets/testNPC.png");
    this.load.image('testPlatform', "assets/testPlatform.png");
    this.load.image('testDoor', "assets/testDoor.png");

}

create(){

    let width = config.width;
    let height = config.height;
    this.physics.world.gravity.y = 1000;

    keyA = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.A);
    keyD = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D);
    keyW = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.W);
    keyT = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.T);
    keyG = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.G);

    this.bg = this.add.tileSprite(0,0, game.config.width, game.config.height, 'testBackground').setOrigin(0,0);
    //this.cameras.main.setBackgroundColor('#CCC');

    this.ground = this.physics.add.sprite(800, 900, 'testGround');
    this.ground.body.immovable = true;
    this.ground.body.allowGravity = false;

    this.door = this.physics.add.sprite(14.5, 770, 'testDoor');
    this.door.body.immovable = true;
    this.door.body.allowGravity = false;

    //this.menuConfig = {
    //    fontFamily: 'Courier',
    //   fontSize: '28px',
    //    backgroundColor: '#F3B141',
    //    color: '#843605',
    //    align: 'right',
    //    padding: {
    //        top: 5,
    //        bottom: 5,
    //     },
    //    fixedWidth: 0
    //}

    this.p1 = this.physics.add.sprite(500, 500, 'TestCharacter');
    this.p1.setCollideWorldBounds(true);

    this.talker = this.physics.add.sprite(600, 774.5, 'testNPC');

    this.low = this.physics.add.sprite(600, 720, 'testPlatform');
    this.low.body.immovable = true;
    this.low.body.allowGravity = false;

    this.physics.add.collider(this.p1, this.ground);
    this.physics.add.collider(this.talker, this.ground);
    this.physics.add.collider(this.p1, this.low);

}

update(){

    if (Math.round(this.low.x) == 600){
         this.low.setVelocityX(100);
    }

    if (Math.round(this.low.x) == 1500){
        this.low.setVelocityX(-100);
    }

    if(keyA.isDown) {
        this.p1.setVelocityX(-200);
    }
    else if(keyD.isDown) {
        this.p1.setVelocityX(200);
    }
    else {
        this.p1.setVelocityX(0);
    }

    if(this.p1.body.touching.down && Phaser.Input.Keyboard.JustDown(keyW)) {
        this.p1.body.setVelocityY(-500);
    }

    if (this.checkCollision(this.p1, this.talker)) {
        this.add.text(game.config.width/2, 30, 'blah blah blah)', { font: '14px Futura', fill: '#FFFFFF' }).setOrigin(0.5);
    }

    if (this.checkCollision(this.p1, this.door) && Phaser.Input.Keyboard.JustDown(keyT)){
        this.p1.x = 55;
        console.log(Phaser.Input.Keyboard.JustDown(keyT));
        this.scene.switch('play');
    }

}

checkCollision(a, b) {
    // simple AABB checking
    if ((a.x < b.x + b.width &&
        a.x + a.width > b.x &&
        a.y < b.y + b.height &&
        a.height + a.y > b.y) ) {
            return true;
    }
    else {
        return false;
    }
}

}

When switching from play to secondScene, everything works fine, but when switching from secondScene to play, the game freezes once it shows the scene's visuals.
When the game freezes, the player character is still over the door sprite and the movement buttons don't do anything. When I open the inspect screen, it doesn't show that an error occurred, so I'm wondering if it's somehow soft-locked.
I'm not sure how to get past this, given my inexperience with Phaser. Can someone please help?
If it helps lead to a solution, I'm using Phaser 3 in VSCode, employing arcade physics.

A: You would have to share more code, because the main premise of switching Scene, with a key-press event, works without freezing loop.
I assume you are setting the keyboard key's in a global variable (like the keyT in the shown code example), and therefore it works, only from Scene 1 to Scene 2 and than "breaks" on return. Since the global variable is probably overridden in the create function, and the create function is only called once on the first start/switch of each Scene.
I updated the example to show this. Now there is an extra key X, that is defined globally. This key will only work on the first Scene until the first switch, because the global variable globalTestKey will stay referenced to the X-key of the Second Scene.
Seen here in small this example:

document.body.style = 'margin:0;';

var globalTestKey;

class FirstScene extends Phaser.Scene {
  constructor(){
    super('first');
  }

  create(){
    this.statusLabel = this.add.text(10, 10, 'STATUS');
    this.add.text(50, 40, 'FIRST -> press Key A to switch\nOr global   -> press Key X');
    this.key = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.A);

    globalTestKey = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.X);
  }

  update(){
    this.statusLabel.setText(`SceneName of global X-Key: ${globalTestKey.plugin.scene.constructor.name}`);
    if(globalTestKey.isDown){
        let info = this.add.text(50, 80, 'X was pressed');
        setTimeout(_ => info.destroy(), 1000);
    }
    if(this.key.isDown){
        this.scene.switch('second');
    }
  }
}

class SecondScene extends Phaser.Scene {
  constructor(){
    super('second');
  }

  create(){
    this.statusLabel = this.add.text(10, 10, 'STATUS');
    this.add.text(50, 40, 'SECOND -> press Key D to switch\nOr global   -> press Key X');
    this.key = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D);
     globalTestKey = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.X);
  }

  update(){
    this.statusLabel.setText(`SceneName of global X-Key: ${globalTestKey.plugin.scene.constructor.name}`);
    if(globalTestKey.isDown){
        let info = this.add.text(50, 80, 'X was pressed');
        setTimeout(_ => info.destroy(), 1000);
    }
    if(this.key.isDown){
        this.scene.switch('first');
    }
  }
}

var config = {
    type: Phaser.AUTO,
    width: 536,
    height: 183,
    scene: [FirstScene, SecondScene],
    banner: false
};

new Phaser.Game(config);
<script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>

Update:
The easy/fast solution would be, to make all global variables to Scene Properties.
Replace in both Scenes all:
 ...
 keyA = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.A);
 keyD = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D);
 keyW = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.W);
 keyT = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.T);
 keyG = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.G);
 ...

With this:
 ...
 this.keyA = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.A);
 this.keyD = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D);
 this.keyW = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.W);
 this.keyT = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.T);
 this.keyG = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.G);
 ...

And also all other references, similar to this one:
...
if(keyA.isDown) {
...

With:
...
if(this.keyA.isDown) {
...

With other words, change any usage of keyW, keyA, keyD, keyG and keyT to this.keyW, this.keyA, this.keyD, this.keyG and this.keyT

redpajama_set_name: RedPajamaStackExchange


Get proactive, eart a sticker!
Great Bear Foundation is a non-profit organization dedicated to the conservation of the eight species of bears and their habitat around the world. They have offices in Haines, Alaska, and Missoula, Montana.
Since our founding in 1919, the National Parks Conservation Association has been the independent, nonpartisan voice working to strengthen and protect America's favorite places.
At the Trust for Public Land, we don't just save land—we save land for people to enjoy, from neighborhood parks to national parks. Our mission is to create parks and protect land for people, ensuring healthy, livable communities for generations to come. Every park, playground, and public space we create is an open invitation to explore, wonder, discover, and play. We're proud to say that we've been connecting communities to the outdoors—and to each other—since 1972. Today, millions of Americans live within a 10-minute walk of a park or natural area we helped create, and countless more visit every year.
Protecting Alaska's birds and wildlife with science-driven conservation since 1977.
Audubon Alaska works in the Tongass and the Arctic, where their work has helped protect millions of acres of Alaska. As their name implies, they focus on bird conservation statewide. Many of the conservation campaigns and wins in this state depend on Audubon's scientific analysis and policy advocacy. The Audubon Alaska office raises all of their own funds independently of the National Audubon Society; donations stay local.
We've been leading on public lands conservation and advocacy for a while nationally—we do it through scientific research, working closely with land management agencies, litigation, dozens of local-level campaigns, and a strong hill presence. We have an office in Anchorage with six regional staff focused on the Arctic Refuge and the NPR-A, and these days a huge portion of our staff nationwide is all hands on deck for the Arctic. Our Alaska State Director, Nicole Whittington-Evans, just got the Olaus Murie award from ACF this year for outstanding contributions to conservation in Alaska.
"Winter Wildlands Alliance is a national nonprofit organization dedicated to promoting and preserving winter wildlands and a quality human-powered snowsports experience on public lands through education, outreach and advocacy." In Alaska, WWA is working with Alaska Quiet Rights Coalition on: Chugach Forest Planning and the Wrangell – St. Elias Backcountry and Wilderness Management Plan.
Great Bear Foundation is a non-profit organization dedicated to the conservation of the eight species of bears and their habitat around the world. They have offices in Haines and Missoula.
The International Association for Bear Research and Management (IBA) is a non-profit tax-exempt organization open to professional biologists, wildlife managers and others dedicated to the conservation of all bear species.
Friends of McNeil River's primary purpose is the preservation of the sanctuary's bears and their habitat and to have a voice in its future.
Working to protect the Inside Passage waters and Tongass National Forest wild lands for nearly fifty years.
We are a non-profit organization which is dedicated to protecting and preserving the wildlife, natural and cultural resources of the Walrus Islands Sanctuary in Alaska. We aim to become a voice to raise awareness, educate and also provide assistance to the sanctuary through maintenance, enhancement, and scientific projects as we are able to raise funds.
How do I get the sweet stickers?
Sign up for the updates/suggestions list (top of this page), then I'll collect addresses and mail stickers!
Great to see this! Suggestion: I feel TU AK belongs in the big players category. They're a huge behind-the-scenes leader with Pebble, Susitna dam, transboundary mining, and Tongass logging, and they do a great job at letting others–the better messengers–do the public facing things. I never realized this until I did an internship with them last year. The Nature Conservancy and Audubon also have good size (for AK) staff and do meaningful science support (research, analytics, maps, etc.).
Thanks Max, an insider's perspective is a big help. I'll add NC and A too.
Thank you! NRDC was a major oversight! I added Union of Concerned Scientists too.
Hey Luc, this is awesome! It would be great to see The Wilderness Society on the national list. We've been leading on public lands conservation and advocacy for a while nationally—we do it through scientific research, working closely with land management agencies, litigation, dozens of local-level campaigns, and a strong hill presence. We have an office in Anchorage with six regional staff focused on the Arctic Refuge and the NPR-A, and these days a huge portion of our staff nationwide is all hands on deck for the Arctic. Our Alaska State Director, Nicole Whittington-Evans, just got the Olaus Murie award from ACF this year for outstanding contributions to conservation in Alaska. Totally happy to answer any questions you have. Keep up the great work.
Added! Sorry for the oversight, thanks for the note.


The Sennheiser MKE 440 operates with two short shotgun mics, mounted in a unique "V-stereo" confi..
The MKE 600 is a camcorder microphone that can master even the toughest video sound challenges. I..
Rugged, compact and versatile for great video sound: the MKE 400 is a small shotgun microphone fo..


When it comes to water huts, the sights imagined in people's minds are beautiful. But there is still a lot of doubt as to whether a house can be built safely on the water. Then let the professional water wooden house manufacturer - Zhejiang ZhongYa Industrial Co. Ltd answer one by one.
The first is the wooden house part of the floating houses. Compared to the ground, the water huts are more likely to encounter more natural disasters - like the wind and the light on the water are stronger than the land. To this end, our wooden house construction requires better materials, like our European and American Australian wooden houses to build water wooden houses, all of which are treated with Russian scotch pine, so don't worry about the moisture of the sea.
Its solid wood house itself is earthquake-resistant, insect-proof, durable, and fire-resistant (now the new wooden houses have this, unlike ancient wood, which is afraid of fire.) Maintenance is carried out every two years. Maintenance mainly refers to wall paint painting (paint is water-based) Wood lacquer, environmental protection and no smell), maintenance is to be afraid of the wall because of the long-term at sea, the intensity of ultraviolet light, the wall cracking phenomenon. Guaranteed longer life.
A suitable buoy is the basis for the construction of a good water house. First of all, the material of the floating wooden house float is resistant to ultraviolet rays, sea water, antifreeze, chemicals, oil stains and the like. And he can tolerate the temperature difference from high temperature to 190 ° C and low temperature to -50 ° C.
As the foundation of the wooden house, of course, the material itself is an environmentally friendly material, and it does not produce other toxic chemicals. In the absence of external damage, he can withstand more than 15 years, and the maintenance cost in the later period is also small. It is worth more than 15 years as a water lodge.


Gender served as an important structural and organizing principle for the mobilization of peoples for war and nation in Europe and the United States during the nineteenth century. This chapter explores from a gender perspective how military and civilian cultures became more intimately conjoined and societies were militarized. Men experienced induction in mass conscription armies as a rite of passage to manhood and citizenship and prolonged their military identities in veteran's organizations. Women participated in voluntary and nursing organizations that supported military and combat activities throughout the century and figured as national symbols and in the commemoration of civilian and military suffering. Popular culture, art, music, and military display made use of deeply gendered images linking military culture to nationalist themes.
Civilization; Commemoration; Heroism; Media; Militarization; Military Culture; Popular Culture; Race; War Memories; Gender; Men; Women; Nineteenth-century Warfare; Europe; United States.


The best time to do wise holiday shopping in Manila is during Christmas. And, when we talk about shopping, who doesn't want to get the best bargains? Filipinos are fond of shopping. And, when we say shopping, we actually mean getting more out of what we pay for.
"Where are the best value places in Manila?" , you say.
The ultimate shopping destination in Manila, Philippines. Whatever it is that you need or want, name it, it's there. However, walking around Divisoria the whole day can get your feet sore. A lot of street stalls or bazaars are located both outside and inside of the local malls. A lot of merchandise can be seen lying around on rice sacks, with street peddlers yelling "Bargain, bargain!". The street stalls are usually the ones with the best buys, as they don't have to pay a lot for store space rentals.
If you are looking for smartphones that are on sale, Greenhills Shopping Center is the place where you should be. Greenhills Shopping Center is located along Ortigas Ave. San Juan City. The shopping center comes with air conditioned buildings that houses neatly designed stalls, restaurants, cinemas, and a chapel.
The prices are a bit higher compared to Divisoria's but still affordable. Quite a number of stalls sell branded and imitation bags, dresses and shoes. A lot of named brands are available in the shopping complex. Again, haggle is the name of the game.
Located in the heart of Manila, near Plaza Miranda and Quiapo church. A mix of Divisoria and Greenhills products are available in Quiapo Market, not so pricey and nor so cheap either. The legendary potions and concoction sellers can be seen on the sidewalks, selling oils with ginseng, scorpions and snakes, that have been described as cure all even for women who don't have their monthly period yet.
You can also get the chance to purchase electronic products in nearby Raon street, depending on what you are looking for.
The Redemptorist church is located in Baclaran, Parañaque city. The place is known for this iconic church. Behind and beside this majestic church are, stalls and stalls of apparel, textile and most of all its flea markets. A shopping paradise for the local traveler. This is the next best thing compared to Divisoria when looking for the best places to shop in Metro Manila.
Most of the products that can be bought here comes from China and are usually imitations of designer brands. The place is overly crowded any day of the week for buyers and sellers alike.
Mostly known for branded shoes is the area of Cartimar located along Recto Street in the city of Manila. You can find handyman tools, exercise equipment, and pets here. Mostly foreign breeds of dogs, cats, brids, rabbits and tropical fish.
Prices are affordable here. A lot of imitation shoes can be bought for as low as 800 pesos and up to 4000 pesos. Most merchants will claim that these are Class 'A' which means factory overruns, as there are not much difference to the real thing that you can buy in department and branded shoe stores.
Second hand books, from college text books, novels, short stories and other types can be bought here.
This shopping complex is located inside Ortigas Center, Pasig and sits behind SM Megamall near EDSA. St. Francis Square is one of Metro Manila's cheap places to shop in. The shopping complex is the go to shoppers place for good quality and affordable products that includes bags, apparel, shoes, gadgets and jewelry. It became popular among buyers because it offers the cheapest products compared to its giant department store neighbor.
A flea market and a mall in one. This shopping complex has retail stores, a fruit and flowers market plus an outdoor food court. The complex has over 50 stalls selling mostly flowers, plants, fruits, veggies and others. Products are a bit pricey compared to the usual flea markets in Baclaran and Divisoria. It also has the usual stalls that sell bags, shoes, apparels and electronic appliances.
This is one of Pasig City's shopping and family entertainment destinations. Foreign and local shoppers flock to this place to look for Philippine products, A lot of Filipino-made products, like apparels, native food, antiques and handicrafts are available in this place. A PWD (people with disability) and elderly friendly shopping complex, Tiendesitas boasts of pavilions, that were made from indigineous materials. Acoustic and live band performances are one of the mainattractions in this uniqe Filipino inspired shopping complex.
World Executives Digest accepts guest postings and contributions. Feel free to inquire.


Chelsea Court - 788 East 8th Avenue, Vancouver V5T 1T3, LMS2444 - Conveniently located in the Mount Pleasant sub-area of Vancouver East, walking distance from several food markets, coffee shops, banks and numerous Broadway shopping opportunities and amenities. Some excellent restaurants in the area include Salt & Pepper Grill, Hennessey Dining Lounge, Athens Pizza, Dallas Pizza and several Japanese, Chinese and Greek restaurants. Across the street is Sahalli Park - perfect for picnics. St. Francis Xavier Elementary school is among the 6 schools located within a kilometre. Busses and Skytrain VCC station on Great Northern Highway provide direct access to Downtown Vancouver and neighbouring cities.
Chelsea Court was built in 1997 and consists of only 13 units featuring functional layouts, bright and spacious rooms, in-suite laundries, balconies, storage and parking stalls. Maintenance fees include caretaker, garbage pickup, gardening and management.
Convenient location, close to amenities and transit - move to Chelsea Court today!


As I sink deeper Into Being, so does the music. Mantras have been a part of my life since the 1990's, when I first toured with Deva Premal — for her albums I started composing melodies like Om Tare, Om Namo Bhagavate and many more, which became very popular chants. The songs for this new album I wrote to feature my own voice and selected guest singers — Mantras for Hanuman, Mahalakshmi, the Guru, Feminine Confidence, Karma Transformation and Water Healing — ancient words that have the power to change our lives. Some are older and I've already sung them in my concerts and healing events, some are brand new and were especially written to complete this project.
I am honoured to be supported by such amazing guests: Lucinda Drayton (Bliss, UK), Manish Vyas (India), Sudha (DK/UK), Jonathan Hugh (Bliss, UK), Afra Mussawisade (Iran/DE), Marcus Cliffe (UK), Maneesh de Moor (NL) and many more.
This album was co-produced by my partner and lover Vimal Gabrielsen with the intention of opening the listener's heart — it carries the sweetness and challenges of love, the play of masculine and feminine energies.
I dedicate this music to healing and the raising of planetary and human consciousness.


text:
import paddle.fluid as fluid
import paddle
from paddle.fluid.wrapped_decorator import wrap_decorator
import unittest
from unittest import TestCase
import numpy as np
from paddle.fluid.framework import _test_eager_guard

def _dygraph_guard_(func):
    def __impl__(*args, **kwargs):
        if fluid._non_static_mode():
            return func(*args, **kwargs)
        else:
            with fluid.dygraph.guard():
                return func(*args, **kwargs)

    return __impl__

dygraph_guard = wrap_decorator(_dygraph_guard_)

def random_var(size, low=-1, high=1, dtype='float32'):
    np.random.seed(2021)
    x_np = np.random.uniform(low=low, high=high, size=size).astype(dtype)
    return fluid.dygraph.to_variable(x_np)

class TestDygraphTripleGradMatmul(TestCase):
    def test_matmul_triple_grad(self):
        input_numpy = np.ones([3, 3]) * 2
        with _test_eager_guard():
            x = paddle.to_tensor(
                input_numpy, stop_gradient=False, dtype='float32'
            )
            y = paddle.to_tensor(
                input_numpy, stop_gradient=False, dtype='float32'
            )
            out = paddle.matmul(x, y, False, False)

            new_out_g = paddle.to_tensor(
                np.ones([3, 3]), stop_gradient=False, dtype='float32'
            )
            new_x_g, new_y_g = paddle.grad(
                [out], [x, y], [new_out_g], retain_graph=True, create_graph=True
            )

            new_x_g_g = paddle.to_tensor(
                np.ones([3, 3]), stop_gradient=False, dtype='float32'
            )
            new_y_g_g = paddle.to_tensor(
                np.ones([3, 3]), stop_gradient=False, dtype='float32'
            )
            new_a, new_b, new_c = paddle.grad(
                [new_x_g, new_y_g],
                [x, y, new_out_g],
                [new_x_g_g, new_y_g_g],
                retain_graph=True,
                create_graph=True,
            )

            new_a.backward()

            out_ref = np.ones([3, 3]) * 12.0
            np.testing.assert_array_equal(out.numpy(), out_ref)

            new_x_g_ref = np.ones([3, 3]) * 6.0
            new_y_g_ref = np.ones([3, 3]) * 6.0
            np.testing.assert_array_equal(new_x_g.numpy(), new_x_g_ref)
            np.testing.assert_array_equal(new_y_g.numpy(), new_y_g_ref)

            new_a_ref = np.ones([3, 3]) * 3.0
            new_b_ref = np.ones([3, 3]) * 3.0
            new_c_ref = np.ones([3, 3]) * 12.0

            np.testing.assert_array_equal(new_a.numpy(), new_a_ref)
            np.testing.assert_array_equal(new_b.numpy(), new_b_ref)
            np.testing.assert_array_equal(new_c.numpy(), new_c_ref)

            x_grad_ref = np.ones([3, 3]) * 0.0
            np.testing.assert_array_equal(x.grad.numpy(), x_grad_ref)

            y_grad_ref = np.ones([3, 3]) * 0.0
            np.testing.assert_array_equal(y.grad.numpy(), y_grad_ref)

            new_out_g_ref = np.ones([3, 3]) * 3.0
            np.testing.assert_array_equal(new_out_g.grad.numpy(), new_out_g_ref)

            new_x_g_g_ref = np.ones([3, 3]) * 0.0
            new_y_g_g_ref = np.ones([3, 3]) * 3.0
            np.testing.assert_array_equal(new_x_g_g.grad.numpy(), new_x_g_g_ref)
            np.testing.assert_array_equal(new_y_g_g.grad.numpy(), new_y_g_g_ref)

class TestDygraphTripleGrad(TestCase):
    def setUp(self):
        self.sort_sum_gradient = False
        self.shape = [5, 5]

    def grad(
        self,
        outputs,
        inputs,
        grad_outputs=None,
        no_grad_vars=None,
        retain_graph=None,
        create_graph=False,
        allow_unused=False,
    ):
        fluid.set_flags({'FLAGS_sort_sum_gradient': self.sort_sum_gradient})
        return fluid.dygraph.grad(
            outputs=outputs,
            inputs=inputs,
            grad_outputs=grad_outputs,
            no_grad_vars=no_grad_vars,
            retain_graph=retain_graph,
            create_graph=create_graph,
            allow_unused=allow_unused,
        )

    @dygraph_guard
    def func_exception(self):
        with self.assertRaises(AssertionError):
            self.grad(None, None)

        shape = self.shape

        with self.assertRaises(AssertionError):
            self.grad(1, random_var(shape))

        with self.assertRaises(AssertionError):
            self.grad(random_var(shape), 1)

        with self.assertRaises(AssertionError):
            self.grad([1], [random_var(shape)])

        with self.assertRaises(AssertionError):
            self.grad([random_var(shape)], [1])

        with self.assertRaises(AssertionError):
            self.grad(
                [random_var(shape), random_var(shape)],
                [random_var(shape)],
                [random_var(shape)],
            )

        with self.assertRaises(AssertionError):
            self.grad(
                [random_var(shape)], [random_var(shape)], no_grad_vars=[1]
            )

        with self.assertRaises(AssertionError):
            self.grad([random_var(shape)], [random_var(shape)], no_grad_vars=1)

    @dygraph_guard
    def func_example_with_gradient_and_create_graph(self):
        x = random_var(self.shape)
        x_np = x.numpy()
        x.stop_gradient = False

        y = random_var(self.shape)
        y_np = y.numpy()
        y.stop_gradient = False

        z = random_var(self.shape)
        z_np = z.numpy()
        numel = z_np.size
        z.stop_gradient = False

        out = paddle.nn.functional.sigmoid(paddle.matmul(x, y) + z)
        out_np = out.numpy()

        (dx_actual,) = self.grad([out], [x], create_graph=True)
        # Theoritical result based on math calculation
        dout = np.ones(self.shape).astype('float32')
        dx_expected = np.matmul(
            dout * out_np * (1 - out_np), np.transpose(y_np)
        )
        np.testing.assert_allclose(dx_actual.numpy(), dx_expected, rtol=1e-05)

        (ddx_actual,) = self.grad([dx_actual], [x], create_graph=True)
        # Theoritical result based on math calculation
        DDY = np.zeros(self.shape).astype('float32')
        DDX = np.ones(self.shape).astype('float32')
        double_grad_tmp1 = np.matmul(
            dout * out_np * (1 - out_np), np.transpose(DDY)
        )
        double_grad_tmp2 = np.matmul(DDX, y_np) + np.matmul(x_np, DDY)
        double_grad_tmp3 = (
            (1 - 2 * out_np) * dout * double_grad_tmp2 * out_np * (1 - out_np)
        )
        ddx_expected = double_grad_tmp1 + np.matmul(
            double_grad_tmp3, np.transpose(y_np)
        )
        np.testing.assert_allclose(ddx_actual.numpy(), ddx_expected, rtol=1e-05)

        # Theoritical result based on math calculation
        d_ddout = np.zeros(self.shape).astype('float32')
        tmp0 = np.matmul(DDX, y_np) + np.matmul(x_np, DDY)
        tmp1 = (1 - 2 * out_np) * ((1 - 2 * out_np) * dout * tmp0 * tmp0)
        tmp2 = (
            tmp0 * (1 - 2 * out_np) * d_ddout
            - 2 * dout * (1 - out_np) * out_np * tmp0 * tmp0
        )
        dddx_expected = np.matmul(
            ((tmp1 + tmp2) * out_np * (1 - out_np)), np.transpose(y_np)
        )

        ddx_actual.backward()
        dddx_grad_actual = x.gradient()
        np.testing.assert_allclose(dddx_grad_actual, dddx_expected, rtol=1e-05)

    def test_all_cases(self):
        fluid.set_flags({"FLAGS_retain_grad_for_all_tensor": True})
        self.func_exception()
        self.func_example_with_gradient_and_create_graph()
        with _test_eager_guard():
            self.func_exception()
            self.func_example_with_gradient_and_create_graph()
        fluid.set_flags({"FLAGS_retain_grad_for_all_tensor": False})

class TestDygraphTripleGradBradcastCase(TestCase):
    def setUp(self):
        self.sort_sum_gradient = False
        self.x_shape = [3, 2, 2]
        self.y_shape = [1, 2, 2]
        self.z_shape = [2, 2]

    def grad(
        self,
        outputs,
        inputs,
        grad_outputs=None,
        no_grad_vars=None,
        retain_graph=None,
        create_graph=False,
        allow_unused=False,
    ):
        fluid.set_flags({'FLAGS_sort_sum_gradient': self.sort_sum_gradient})
        return fluid.dygraph.grad(
            outputs=outputs,
            inputs=inputs,
            grad_outputs=grad_outputs,
            no_grad_vars=no_grad_vars,
            retain_graph=retain_graph,
            create_graph=create_graph,
            allow_unused=allow_unused,
        )

    @dygraph_guard
    def func_example_with_gradient_and_create_graph(self):
        x = random_var(self.x_shape)
        x_np = x.numpy()
        x.stop_gradient = False

        y = random_var(self.y_shape)
        y_np = y.numpy()
        y.stop_gradient = False

        z = random_var(self.z_shape)
        z_np = z.numpy()
        numel = z_np.size
        z.stop_gradient = False

        out = paddle.nn.functional.sigmoid(paddle.matmul(x, y) + z)
        out_np = out.numpy()

        (dx_actual,) = self.grad([out], [x], create_graph=True)
        # Theoritical result based on math calculation
        dout = np.ones(self.x_shape).astype('float32')
        dx_expected = np.matmul(
            dout * out_np * (1 - out_np), np.transpose(y_np, axes=(0, 2, 1))
        )
        np.testing.assert_allclose(dx_actual.numpy(), dx_expected, rtol=1e-05)

        (ddx_actual,) = self.grad([dx_actual], [x], create_graph=True)
        # Theoritical result based on math calculation
        DDY = np.zeros(self.y_shape).astype('float32')
        DDX = np.ones(self.x_shape).astype('float32')
        double_grad_tmp1 = np.matmul(
            dout * out_np * (1 - out_np), np.transpose(DDY, axes=(0, 2, 1))
        )
        double_grad_tmp2 = np.matmul(DDX, y_np) + np.matmul(x_np, DDY)
        double_grad_tmp3 = (
            (1 - 2 * out_np) * dout * double_grad_tmp2 * out_np * (1 - out_np)
        )
        ddx_expected = double_grad_tmp1 + np.matmul(
            double_grad_tmp3, np.transpose(y_np, axes=(0, 2, 1))
        )
        np.testing.assert_allclose(ddx_actual.numpy(), ddx_expected, rtol=1e-05)

        # Theoritical result based on math calculation
        d_ddout = np.zeros(self.x_shape).astype('float32')
        tmp0 = np.matmul(DDX, y_np) + np.matmul(x_np, DDY)
        tmp1 = (1 - 2 * out_np) * ((1 - 2 * out_np) * dout * tmp0 * tmp0)
        tmp2 = (
            tmp0 * (1 - 2 * out_np) * d_ddout
            - 2 * dout * (1 - out_np) * out_np * tmp0 * tmp0
        )
        dddx_expected = np.matmul(
            ((tmp1 + tmp2) * out_np * (1 - out_np)),
            np.transpose(y_np, axes=(0, 2, 1)),
        )

        ddx_actual.backward()
        dddx_grad_actual = x.gradient()
        np.testing.assert_allclose(dddx_grad_actual, dddx_expected, rtol=1e-05)

    def test_all_cases(self):
        fluid.set_flags({"FLAGS_retain_grad_for_all_tensor": True})
        self.func_example_with_gradient_and_create_graph()
        with _test_eager_guard():
            self.func_example_with_gradient_and_create_graph()
        fluid.set_flags({"FLAGS_retain_grad_for_all_tensor": False})

if __name__ == '__main__':
    unittest.main()

redpajama_set_name: RedPajamaGithub


text:
Why The Good Hotel Guide Remains One Of Our Trusted Travel Companions
Angelina Villa-Clarke Contributor
Chasing the dream: I write about travel and the world around me
Forty years ago, the UK hotel industry was unrecognisable to the one we know today. Boutique was a term that had not yet been invented, hotel restaurants were merely a by-product of the bedrooms (and not destinations in their own rights) and décor was very often chintzier than your grandmother's parlour. Nonetheless competition was fierce.
One of the hotels that has been included in the Guide since the start: Ballymaloe House
Credit: Joleen Cronin
To this backdrop, in 1977, The Good Hotel Guide was launched to try and make sense of an industry that was growing year on year. The founder - literary agent Hilary Rubenstein – wanted to curate an 'informed companion' for the discriminating traveller. Free-spoken and impartial, it was valued from the start for its personality and independence.
Over the years, the hotel industry has been radically reinvented with hotels becoming more stylish, savvy and gastronomical. A stalwart in the face of these changes, the Guide has firmly held on to its initial ethos and, this year, with its 2018 edition just released, it celebrates its 40th anniversary.
Rothay Manor is another hotel which has been included in the Guide from the first edition
(Credit: The Good Hotel Guide)
"Personal recommendations, unbiased inspections and plain, old-fashioned research frame each entry in the book," say co-editors M. Astrella Saw and Adam Raphael. "Candid comments from our dedicated correspondents make a place stand out; frank observations temper over-enthusiastic reports. The Guide has never accepted payment or free hospitality from a hotel that wishes to be included, giving us the freedom to make an impartial judgement. What's more, just four hotels have been in the Guide since the first edition, endorsed by readers who laud continued high standards."
The four properties in question are Ballymaloe House in County Cork; Currarevagh House in County Galway; Lastingham Grange in Yorkshire and Rothay Manor in Cumbria. 'These four hotels are to be highly commended for maintaining their excellent standards for so many years," says Adam Raphael.
Luxury Hotel of The Year: Hambleton Hall, one of the Guide's top ten winners
With 424 main entries – selected purely on merit - and based on visits by a team of experienced inspectors and reports from trusted readers, the 2018 Guide is a veritable, and, most importantly, impartial bible of where to stay in the UK and Ireland. Each year, it also gives ten César awards presented to a selection of hotels which have demonstrated excellence in their field. Named after César Ritz, these are known as the Oscars of the hotel industry.
"Our 2018 César winners must be celebrated for their individuality, warm hospitality and meticulous service, which set them apart from their competitors," say Saw and Raphael. "This year's 40th anniversary is a milestone for the Good Hotel Guide and we are proud of the fact that there is still a place for a published hotel guide, even though the Guide's online presence is growing. [Hotels are asked to make a modest payment for a website listing.] The Guide provides the chance to recognise the UK and Ireland's most revered and wholly independent properties, from refined gastropubs to plush country house hotels."
For a top ten list of hotels to have in your little-black-book, look no further than the Good Hotel Guide's César winners for 2018:
The Mash Inn: dining is a main draw
The Mash Inn, Radnage, Buckinghamshire
Nick Mash's restaurant-with-rooms, is found in a Chiltern Hills village. Once a 18th-century inn, rooms are now simple and modern - with the seasonal and locally-sourced cuisine being the main draw here.
Subscribe: ForbesLife's Passport Newsletter
Your guide to luxury travel—and life's other indulgences.
The idyllic setting of Soar Mill Cove
Seaside hotel of the year
Soar Mill Cove Hotel, Soar Mill Cove, Devon
The bedrooms come with binoculars at Keith Makepeace's family-friendly hotel on a Devon hillside – all the better to spot the dolphins in the sea below. Lunch on chowder and fishcakes before walking to the beach, under the gaze of neighbouring cows.
The gardens at Hambleton Hall
Luxury hotel of the year
Hambleton Hall, Hambleton, Rutland
This is an idyllic country house hotel overlooking Rutland Water. Charming bedrooms, delightful gardens and Michelin-starred dinners make this a standout property.
The Seahouses Bedroom at St Cuthberts
B&B of the year
St Cuthbert's House, Seahouses, Northumberland
A jug of monastery mead accompanies the morning porridge at this former church in a coastal Northumberland village. This is one of those gems that you dream about discovering. Dedicated owners Jeff and Jill Sutheran serve the taste of the place: village-bakery bread, local-smokehouse kippers and Northumbrian Bubble & Squeak.
Forest Side: one of the UK's most romantic hotels
Romantic hotel of the year
Forest Side, Grasmere, Cumbria
Tucked away in the Lake District, this magical retreat offers a modern-rustic setting carved out of an elegant Victorian Gothic mansion. Romantic walks in acres of landscaped gardens and dappled woodland are a must.
Judges Hotel: country house chic
Country house hotel of the year
Judges, Yarm, North Yorkshire
The Downs family's traditional hotel on the edge of the North Yorkshire moors wins fans for its professional yet friendly approach to hotelkeeping. Among the little touches guests love: sherry in the lavishly decorated bedrooms.
The Red Lion: a traditional inn with standout dining
Inn of the year
Red Lion Freehouse, East Chisenbury, Wiltshire
This thatched-roof inn in a village bordering the River Avon offers a traditional pub atmosphere with chic rooms and Michelin-starred dining.
Burrastow House: with swoon-worthy scenery
Scottish hotel of the year
Burrastow House, Walls, Shetland
This laid-back 18th-century property, on the remote west side of Shetland, looks out over a stunning bay. Settle in from of the peat fire, with one of the books from the library and soak up the atmosphere.
The garden at Llys Meddyg
Welsh restaurant-with-rooms of the year
Llys Meddyg, Newport, Pembrokeshire
In a coastal Pembrokeshire village, you'll find this charming restaurant-with-rooms offering authentic, local cuisine and cosy bedrooms.
Viewmount House: full of Irish charm
Irish hotel of the year
Viewmount House, Longford, Co. Longford
Open fires, fresh flowers and Irish literature fill the rooms of this Georgian mansion. Most appealing are the congenial hosts, who encourage a relaxed, easy air throughout the house.
The Guide is now owned by Adam and Caroline Raphael, both award-winning journalists, with the British Guide edited by M. Astella Saw and, they say, they have their own check-list when looking for a hotel: "We want to see a personal welcome and a sense of place," says Adam Raphael. "Owners and staff who are truly knowledgeable about the surroundings and nearby places of interest make a huge difference. While thoughtful home-away-from-home amenities in the room, such as fresh milk and free-range eggs, really do make a place stand-out, as does a great breakfast - with plenty of fresh, locally-sourced produce (and a good selection of newspapers and magazines to go with it). Practical considerations would include excellent bedside lighting to read by and public spaces that aren't marred by intrusive background music. However, the icing on the cake for me is a bathtub with a view..."
www.goodhotelguide.com
Follow me on Twitter or LinkedIn. Check out my website.
Angelina Villa-Clarke
Writing and discovering the world is second nature to me. I have been a journalist for over 18 years, based in London, UK and started off on Marie Claire Magazine writin...


text:
Software Development Magazine - Project Management, Programming, Software Testing
Lean UX in Public Sector? - Part 1: Deciding Our Way of Working
Anna Forss, Erik Nilsson, Sebastian Lejnehed, Jenny Wilander,Försäkringskassan
I guess Agile is not what you think about when you hear "public sector" or "government agency" and if you think that it�s not possible to go there, you are definitely wrong.
Försäkringskassan is a Swedish government agency, responsible for the Swedish Social Insurance. In practice, we handle 1/4 of the Swedish incomes! Our customers come from every corner of the Swedish society as even the crown princess of Sweden receives a monthly income for her daughter.
For the past four years, Försäkringskassan has gone through a major transformation program with Lean as a business strategy. In parallel, Agile has started to grow as a way of thinking within the development of IT solutions. The customer-facing e-services have been driving the Agile implementation, as we thought that we could try to take the Agile journey to the next level. With a project management method focused on long extensive pre-studies, we wanted to challenge it by testing Lean UX and conducting a pre-study that would produce user tested prototypes rather than text documents.
Lean UX is a concept developed by Jeff Gothelf, using the Lean Startup Concept as the basic principle for developing UX. Working in a consistent way with rapid experiments and real tests, Lean UX enables development teams not only to develop wonderful user experience, they also develop a way of thinking where the experience is based on actual customer insights.
The pre-study
The goal of the pre-study was to prepare Försäkringskassan for the next generation of the web site. The main purpose was to make the web site and its services available to mobile users, but we wanted at the same time take the next steps towards quicker time to market and life cycle management of both content and design components.
The team was composed of about 10 people with varying competencies. All Försäkringskassan projects are sponsored by a project owner who is responsible for outside communication and for the overall project vision. The product owner, who works more directly with the team, makes this vision concrete. The project manager plays also the role of Scrum master the design team as well as the development team. The design team consisted of three interaction designers and two art directors. The team also got a lot of input from the head of UX and visual design, a web communicator and a representative from the Communications department. This group focused on ensuring that the team followed the overall visual and communicative profile and tonality.
I'm happy to say that all team members agreed on a scientific Agile method for developing the new navigation. Since Lean is the business strategy for Försäkringskassan, we can always go back to the basic PDCA thinking. The work was conducted in three iterations. The final objective was to have a hypothesis for the navigation that was crisp enough for us to go into the implementation phase of the project. Step 1 was about identifying what was needed but even more important: what could we leave out for the implementation phase.
User input is king
The user input was crucial. We needed to work with real customers from the very start and we wanted to see them using real devices during their tests. Hand in hand with this requirement, we did not want to design anything that was not possible with responsive design so the team started designing directly with a tool that created clickable prototypes that can run on a real responsive web site.
The team decided that we needed to identify a target scenario and target group for the basic navigation of the whole site. It was not necessary to specify the navigation within services in these early stages, but if we didn't have an idea on how you move around on the site in a general way, we were sure to go in the wrong direction in the project. Since the information we have on the web site is complicated, we needed also to understand how individuals could find specific information about a specific area on the site.
One of the major challenges is that everyone in Sweden can be a customer of Försäkringskassan. This means that basically everyone is within the target group but you can't test for everyone so early in the project. We decided that since a large portion of the customers are parents or parents to be, this was a very important target group and if we could meet their needs, chances are that we could also meet the needs of the rest of the customer segments. The team therefore decided to focus on parents in these early tests.
Read up on your web statistics and use it to formulate questions, not to get arguments for your assumptions
The web statistics also became a foundation in these early stages. As we tried to answer questions directly not with guesses but actual values so that we could all see that some of the assumptions we made were right. Some assumptions could also be verified and could therefore be excluded from the actual tests.
Iterate iterate iterate
If you can hasten the user input - do it. If you can validate your assumptions quicker - do it. By shortening the feedback loop, you would ensure that you did not walk in the wrong direction too long and you would not fall too much in love with your ideas before testing them with real users.
Iteration 1 - the first hypothesis
For the first sprint, the hypothesis was that at least one of the four navigation concepts we found from evaluating large sites that are often used by our customer groups (people living in Sweden) would also work for navigating the Försäkringskassan content.
Four concepts were defined:
Search based navigation
Menu based navigation with one level
Menu based navigation with two levels
Menu based navigation with full depth
Below is the first concept: search based navigation. The upper section of the page shows branding but the often-found menu option is lacking. On the left side: start page. The search bar is very prominent. On the right side: A top level page.
Below you can see the second concept: menu based with one level. In this case, the search icon and the menu option can be found next to the branding on the very top of the page. The search option is not prominent on the start page. On the right, the menu can be seen as it would look like when clicked. The hierarchy of the content is very deep but the menu just shows the top level. The other two concepts included lower levels of the hierarchy in the menu but the principle was the same.
In order to test the menu bar, the team also realized that there are two conventions for how to show multiple levels. One option is to expand the menu down:
Another option is to expand the menu sideways:
The most significant conclusion for this iteration was that these very early tests were really useful for the upcoming work. A lot of facts turned out to be assumptions and now the team could focus on these assumptions early in the process. The team decided to work with both the menu and the search/content concepts but narrowed the work to one concept with the menu bar.
Iteration 2 - Understanding the real questions
The second sprint was based on the findings from the first iteration. I was happy to see that the team did not just accept the findings from the first iteration. Instead, they sought issues with their own methodology. They found for instance that the test subjects who did not have the menu option in the top bar looked for it, but when the menu was there and identified as a menu, it was used a lot by the users. Was the menu useful or not? To answer this question, the team decided to not abandon the menu option and instead to fine tune the test case. It is easy to just jump to a conclusion from a usability study but often you need to validate the results first.
Below: The top menu in one of the prototypes from sprint 2:
Since the team had not found that the testing of the number of levels gave that much at this point, they decided to work with just one version: a two level hierarchy.
Below: A two level hierarchy menu. The structure of the information means a deep hierarchy, but during the tests only the upper two levels were displayed in the prototype.
The team also decided to include a restructuring of the content of one of the pages for the test. A challenge within the project is that the content is derived from the laws governing public social insurance in Sweden. This means that the actual wording cannot be changed that easily and that there can be many consequences when doing so. Since the content has been rewritten not so long ago, the project had therefore decided not to change the actual wording on the pages but the structure of the content.
Below: the upper part of the current page on benefits for parents the days after the birth not yet adapted for mobile users.
Below: the upper part of the wireframes for page on benefits for parents the days after the birth.
Some interesting questions also surfaced during the first test iteration. Here are the highest prioritized:
Why were the breadcrumbs not used for navigation?
Did the information structure affect the lacking use of the menu option?
What is the ideal size of top bar and content?
What should be found in top bar, content area and footer?
How do we ensure that the user knows where he is in the structure?
How should a page be organized in order for the users to find the information?
How should information be presented
In order to test these questions, we needed a richer prototype. A digital tool for interactive prototyping was introduced and the team created the two concept prototypes to prepare for the new usability studies. We would now be able to see with an external usability study if our assumptions seemed more likely or if we would have to go start all over again. It is however better to know that after 5 weeks than a week before launch (or even worse: after launch).
Before the second set of usability tests, the team made some changes to the prototypes.
Concept without menu in top bar
The concept now included the following pages:
Below: Start Page with entry points to different life situation. If the customer is in the life situation of parenthood, there are multiple options, which can be seen on the right side of the page.
Below: Third level in hierarchy on the left side. As you can see, the information just for the future parents is large. This is one of the challenges to be tested in the pre-study: can we make the customers understand where they are and what to select among all the possible options. On the right side the upper part of the page for benefits for parents around childbirth. The links are anchor links to sections on the lower part of the page.
Below: If an anchor link is clicked on the page about benefits around childbirth, the customer can read the rules that apply to this benefit. As you can apply for this in many ways, the two major forms are highlighted as calls to action, while there is a link to the less common options. The reason for highlighting two options is that one requires a e-id, which not all customers have but which is recommended for a complete digital service.
Concept with menu in top bar
The following changes were done:
Clearer entry points on the start page
Fewer entry points on the start page
The breadcrumb only showing the level above the actual page
Accordions used to hide details
Below: Start page and page about benefits for parents.
Below: Page about benefits for future parents and page about benefits for parents around birth. The process steps are shown with accordion.
Below: Page with accordion expanded so the calls to action are displayed
Below: Top bar menu option tapped (on left side) and expanded when a top-level option is expanded (on the right side)
The purpose of the second round of tests was to understand how users preferred to navigate on the web site. A challenge for Försäkringskassan is that there is a lot of information and most of it is about a specific form of benefit. As the rules are complicated and very specific to different groups, there is a challenge how much of the variation should be displayed to all customers, how much is to be found in detailed sections and which customer groups have such a complicated unique situation that they should contact the service centers? Additionally, since a substantial part of the customer group is eligible for multiple benefits, they need to be able to navigate between sections easily. The team focused the tests around the following questions:
Is a menu option in the top bar useful for the customers?
Are breadcrumbs used and how?
Is the logo for Försäkringskassan used and how?
What is necessary for a customer to understand what is displayed when a link is clicked? This might seem like an odd question, but since the customers are often unsure about the benefits and which group they belong to, the team needed to verify how much information is needed for a link to make sense. They also needed to understand how to present the information about a linked page so that it makes sense for the customers.
The tests also included some specific areas of the site. The project had identified the benefits for parents around the birth to be a good area for tests. It is not obvious if this is a benefit for parents before or after birth and for many customers, this is the first benefit they apply for.
Web statistics had shown that many of the mobile users sought information about how to contact Försäkringskassan. This is not uncommon for all customer groups, but mobile users are more likely to seek contact details than others. The test did not focus on the actual contact page but the team wanted to make sure that this crucial area was easily found for the mobile customer segment.
As these were the first tests we did with an external test agency, we were happy that our assumptions so far had not been far from the mark. The tests confirmed a lot of what the team had seen during the first guerrilla tests. Both our first simple tests and the external tests were crucial. During the first simple tests, the team could see obvious flaws and better fine tune the prototypes. During the external tests, the tests became blinded and more validated. An important conclusion was that both methods will be used during the whole project and are crucial for its success.
The team decided that both concepts should be included in the work for the third sprint. Both concepts had flaws and positive aspects and more tuning was needed before deciding on one concept. Also, the tests had only been conducted on a small test group and they needed to be done with a larger customer group.
We now had one iteration left before moving into implementation�
This third iteration will be described in an article published in the Fall 2015 of Methods & Tools.
Read the part 2 of this article Lean UX in Public Sector? - Part 2: Getting our Facts Straight Before Implementation
Agile and UX Articles
The Psychology of UX
The Psychology of UX - Part 2
The UX Runway - Integrating UX, Lean and Scrum Cohesively
Agile and UX Resources
Scrum Expert
Agile Videos and Tutorials
Click here to view the complete list of archived articles
This article was originally published in the Summer 2015 issue of Methods & Tools
The Scrum Expert
Explore a list of Free and Open Source Scrum Tools for Agile Software Project Management
Browse a selected list of upcoming Software Development Conferences
Discover the best available Open Source Project Management Tools
Copyright © by 1995-2020 Martinig & Associates | Network | Advertise | Contact | Privacy
Follow Methods & Tools on
Methods & Tools uses Google Analytics for statistics and Google Adsense for advertising.
You can consult Google Privacy Policy here.


text:
OngoingWorlds blog
News & articles about play-by-post games, for roleplayers & writers
-- Main Menu --
By Charles Star
The 2015 Squiddie Award Winners
Category: Awards, Competition, Events, Roleplaying community Tags: history of roleplaying, James D. West, Jouko, Kenny Gillis, Mike Bremer, Squiddies, Star Trek Borderlands, Stargate Ancient Legacy 4 Comments
It's time! That's right, it's time to present our top award for the entire simming and online role playing community: the Ongoing Worlds Medal for Superior Online Roleplaying… better known as the Squiddie. For anyone who isn't familiar with the award, we present three respective citations annually for Excellence in Role Playing, Facilitating the Community Experience, and Originality & Innovation.
We received 30 outstanding nominations this year. However, we are only able to present Squiddies to three: one club, one game, and one person. And believe me when I say that picking the winners was extremely difficult as there were many absolutely fantastic nominees! Without any further ado, here are the winners of the 2015 Ongoing Worlds Medal for Superior Online Roleplaying:
2015 Laureates
Excellence in Roleplaying: Stargate Ancient Legacy (game)
Stargate Ancient Legacy has maintained role play excellence for more than a decade since its 2004 founding. Its approximately 20 member writers each bring their own unique talents and perspectives together to create an outstanding singular melody of a narrative. The posts, often joint posts, build beautifully upon one another to take the story in new and exciting directions while still staying true to the original Stargate universe. In this game you'll never see the plot twist coming, but then after it happens it couldn't have been any other way–a sign of true excellence. Politics, power, and position all take a backseat to writing with this role play–the focus is purely on telling a fantastic story. And it shows!
Originality & Innovation: Jouko of Before the Mast (person)
Jouko is frequently described as the most devoted member of the Before the Mast game, which is pretty amazing considering that English is not his native tongue! While his role playing is top-notch, he is also quite the innovator, though not in the traditional sense. He creates avatars and signatures for many others in the game. But instead of just building them as many artists do, he tries to get inside the head of the other players to bring out the many different elements of their respective characters. He truly breathes life into them in the visual sense! He also made it a point to learn the ins and outs of the age of sail to serve as a community expert to others in the game. And finally, he skillfully uses NPCs not just to advance a plot, but to actually integrate them into the story. In short, Jouko found uncommon opportunities to add value to his sim in non-traditional ways, and that makes him a great innovator.
Facilitating the Community Experience: Star Trek: Borderlands (club)
Star Trek: Borderlands has been running continuously since 1995, making it one of the longest-running Star Trek roleplaying clubs on the net. Its unique Duty Station organizational structure allows members to seamlessly move between different environments and role playing opportunities, leading to a robust exchange of ideas and information among its member players. Its linked, yet free storylines allow for highly creative stories across the entire club. All of this plus its volunteer leadership structure combine to create a robust community experience quite different from most other Internet-based role playing clubs. This resulting open and collaborative community is no doubt one of several elements responsible for Borderland's extraordinary longevity and high quality.
Bad Boys Winners
from the 1995 film "Bad Boys"
What is this, you might ask? Yes, we're adding something a little different this year. Periodically, we're going to include themed historical awards in addition to our regular three annual winners. The idea is honor those who haven't otherwise received their due. This year, we're calling it the Bad Boys edition: controversial individuals who nonetheless made significant positive contributions to the simming and online roleplaying community. So here they are:
Mike Bremer of Bravo Fleet
The co-founder and long-time leader of Bravo Fleet was controversial for his leadership and use of the JAG within the club. However, people still liked simming in Bravo Fleet–a lot of people! Indeed, Mike Bremer built Bravo Fleet into the first true mega-club of the Internet era. You would be hard pressed to find anyone in the Star Trek role playing community who hasn't heard of Bravo Fleet and Mike Bremer. In fact, a good portion of the remaining Star Trek clubs today can trace their lineage back to Bravo Fleet in some fashion. Boasting dozens of games, and hundreds of players, Bravo Fleet has had something for just about every flavor of Star Trek fan from its beginnings under Bremer to now. In addition to his superior leadership of Bravo Fleet, Mike Bremer has also hosted one of the longest continually running sims on the net, Starbase 400 (previously known as the USS Pegasus), since 1996. Starbase 400 has been in existence since 1995 and has won numerous awards for its high-quality and longevity under Bremer. His pioneering models for club and sim development live on throughout the community. Mike Bremer is unarguably one of the most influential figures in simming history.
Kenny Gillis
A name synonymous with controversy, Kenny Gillis was well known for his gruff demeanor during the heyday of the Simming League. In spite of this rough exterior, or maybe because of it, Gillis eventually rose in 2002 to become the Simming League's 11th President. Although his tenure lasted less than two months, he was able to root out corruption at the highest levels of the League and set in motion several significant reforms that would later be enacted to make the League more fair and equitable. Gillis also gained fame for infiltrating and stopping one of the period's biggest trolls & troublemakers. Perhaps even more importantly, he was a key player behind the success of RolePlayerUSA, which provided news, information, and IT support to much of the simming community during the early 2000s. Through it all, Kenny Gillis was a superbly capable administrator who got things done–no matter what stood in the way.
James D. West of Independence Fleet
The USS Sunfire's first Executive Officer and second Captain was controversial for his early posts. He was also criticized for his leadership during the beginning days of Independence Fleet, which he co-founded in 2001. Undeterred by his rocky start, James West went on to become one of the great role players of his generation. Indeed, he has created and developed scores of characters of different races, behaviors, and aspirations. Feeling at home in every Star Trek setting from the classic to the transformative to the comedy and in every style from the traditional to the open to everything in-between, he always finds a way to make exceptional contributions to the story while also providing unique opportunities for others to get involved. In addition, his mentorship to dozens of Captains over the years has been invaluable to Independence Fleet's long-term success. If one were to make a list of top role players ever, James West would be on it.
Congratulations to all six of our new Squiddie Laureates! And thank you to everyone for all of the wonderful nominations! Be on the look out for 2016 Squiddie nomination requests in early 2016. And have a happy new year!
This winners of this award were decided by David Ball, Leon Archer, Mister Xanadu, Tiberius Creations, and Charles Star. Be sure to also check out the 2013 and 2014 winners.
OngoingWorlds is a website where you can work together to create interesting stories, and roleplay as any interesting characters. Either join a game or create your own.
2018 Simming Prize Winners Announced!
Create your own Star Wars saga
Best articles of 2019!
Simming Get Together IRL 2021
Game Summaries from May 2015
Help needed to test the OngoingWorlds website
From TV to RPG – How Our Favourite Shows Can Enhance Our Roleplaying Experience – Part 1: Plot
Story summaries for games with over 100 posts
Don't keep your game a secret
Like this? Become a Patreon!
Write an article for this blog
We want this blog to be filled with great articles, tips and news for roleplayers/writers. Maybe you can help by writing something for us?
If you're a member of a play-by-post roleplaying game you might have tips and advice for other roleplayers. Write an article for us and we'll publish it!
Does your character have to be likeable?
Make sure your character acts their age
12 tips for dealing with a God Modder
Give your characters flaws
Disown & adopt characters
How roleplaying can help your career
A big long list of personality traits
4 rather good planet name generators
Positive & negative trait tables
12 villain archetypes to choose from
Keep OngoingWorlds funded
This blog and the OngoingWorlds website cost money to host, which means we need your donations to help towards the ongoing costs. If you enjoy reading articles like these for roleplayers, it'd be awesome if you could donate to our costs.
© 2020 OngoingWorlds blog
Powered by WordPress and the Designfolio Theme.