text:
#pragma once

#include <mrpt/kinematics/CVehicleSimulVirtualBase.h>
#include <mrpt/kinematics/CVehicleVelCmd_DiffDriven.h>

namespace mrpt::kinematics
{
/** Simulates the kinematics of a differential-driven planar mobile
 * robot/vehicle, including odometry errors and dynamics limitations.
 *
 * \ingroup mrpt_kinematics_grp
 */
class CVehicleSimul_DiffDriven : public CVehicleSimulVirtualBase
{
   public:
	using kinematic_cmd_t = CVehicleVelCmd_DiffDriven;

	CVehicleSimul_DiffDriven();
	~CVehicleSimul_DiffDriven() override;

	/** Change the model of delays used for the orders sent to the robot \sa
	 * movementCommand */
	void setDelayModelParams(
		double TAU_delay_sec = 1.8, double CMD_delay_sec = 0.)
	{
		cTAU = TAU_delay_sec;
		cDELAY = CMD_delay_sec;
	}

	void setV(double v) { m_v = v; }
	void setW(double w) { m_w = w; }
	double getV() { return m_v; }
	double getW() { return m_w; }
	/** Used to command the robot a desired movement:
	 * \param lin_vel Linar velocity (m/s)
	 * \param ang_vel Angular velocity (rad/s)
	 */
	void movementCommand(double lin_vel, double ang_vel);

	void sendVelCmd(const CVehicleVelCmd& cmd_vel) override
	{
		const auto* cmd = dynamic_cast<const kinematic_cmd_t*>(&cmd_vel);
		ASSERTMSG_(
			cmd,
			"Wrong vehicle kinematic class, expected "
			"`CVehicleVelCmd_DiffDriven`");
		movementCommand(cmd->lin_vel, cmd->ang_vel);
	}
	CVehicleVelCmd::Ptr getVelCmdType() const override
	{
		return CVehicleVelCmd::Ptr(new kinematic_cmd_t());
	}

   private:
	/** lin & angular velocity in the robot local frame. */
	double m_v{0}, m_w{0};

	/** Dynamic limitations of the robot.
	 * Approximation to non-infinity motor forces: A first order low-pass
	 * filter, using:
	 *   Command_Time: Time "t" when the last order was received.
	 *   Command_v, Command_w: The user-desired velocities.
	 *   Command_v0, Command_w0: Actual robot velocities at the moment of
	 * user request.
	 */
	double Command_Time{0}, Command_v{0}, Command_w{0}, Command_v0{0},
		Command_w0{0};

	/** The time-constants for the first order low-pass filter for the
	 * velocities changes. */
	double cTAU{.0};
	/** The delay constant for the velocities changes */
	double cDELAY{.0};

	void internal_simulControlStep(const double dt) override;
	void internal_clear() override;
};

}  // namespace mrpt::kinematics


text:
var debug = require('debug')('blog:channels:render'),
    _ = require('lodash'),
    safeString = require('../../utils/index').safeString,
    fetchData = require('./fetch-data');

function renderChannel(req,res,next) {
    debug('renderChannel called');

    var channelOpts = req.channelConfig,
        pageParam = req.params.page !== undefined ? req.params.page : 1,
        slugParam = req.params.param.slug? safeString(req.params.slug) : undefined;

    channelOpts.postOptions = channelOpts.postOptions || {};

    channelOpts.postOptions.page = pageParam;
    channelOpts.slugParam = slugParam;

    return fetchData(channelOpts).then(function handleResult(result) {
        if(pageParam > result.meta.pagination.pages){

        }

        res.render(view,result);
    })
}

module.exports = renderChannel;

redpajama_set_name: RedPajamaGithub


text:
var debug = require('debug')('routes:auth:enter');

var Visitor = require('../models/Visitor.js');

var authEnter = function (req, res, next) {
  // debug(req.get('Content-Type'));
  // debug(req.body);
  Visitor.checkAuth({ email: req.body.login, password: req.body.passw }, function (err, visitor) {
    if (err) {
      debug(String(err));
      if (err.visitorErr === 'Validation') {
        return res.render('pages/blank.ejs', Object.assign({}, res.locals, {
          msgText: req.t('auth:IncorrectEmailOrPassword'),
          msgStyle: 'danger'
        }));
      } else if ((err.visitorErr === 'WrongEmail') || (err.visitorErr === 'WrongPassw')) {
        return res.render('pages/blank.ejs', Object.assign({}, res.locals, {
          msgText: req.t('auth:WrongEmailOrPassword'),
          msgStyle: 'danger'
        }));
      } else {
        return next(new Error('Can not check user'));
      }
    } else {
      debug('Entered visitor: ' + visitor._id + ' ' + visitor.email);
      req.session.visitor_id = visitor._id;
      res.locals.visitor = visitor;
      return res.render('pages/blank.ejs', Object.assign({}, res.locals, {
        msgText: req.t('auth:EnteringDone'),
        msgStyle: 'success'
      })); // Can use res.redirect
    }
  });
};

module.exports = authEnter;


text:
package net.teamio.taam;

import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import net.teamio.taam.Taam.BLOCK_ORE_META;

public class TaamRecipes {

	public static void registerSmeltingRecipes() {
		BLOCK_ORE_META[] values = Taam.BLOCK_ORE_META.values();
		// Ores -> Ingots
		for (int meta = 0; meta < values.length; meta++) {
			if (!values[meta].ingot || !values[meta].ore) {
				continue;
			}
			GameRegistry.addSmelting(new ItemStack(TaamMain.blockOre, 1, meta), new ItemStack(TaamMain.itemIngot, 1, meta), 1);
		}
		// Dusts -> Ingots
		for (int meta = 0; meta < values.length; meta++) {
			if (!values[meta].ingot || !values[meta].dust) {
				continue;
			}
			GameRegistry.addSmelting(new ItemStack(TaamMain.itemDust, 1, meta), new ItemStack(TaamMain.itemIngot, 1, meta), 1);
		}
		// Bauxite (+Dust) -> Aluminum Ingot
		GameRegistry.addSmelting(new ItemStack(TaamMain.blockOre, 1, Taam.BLOCK_ORE_META.bauxite.ordinal()), new ItemStack(TaamMain.itemMaterial, 1, Taam.ITEM_MATERIAL_META.aluminum_nugget.ordinal()), 1);
		GameRegistry.addSmelting(new ItemStack(TaamMain.itemDust, 1, Taam.BLOCK_ORE_META.bauxite.ordinal()), new ItemStack(TaamMain.itemMaterial, 1, Taam.ITEM_MATERIAL_META.aluminum_nugget.ordinal()), 1);
		// Resin -> Rubber Bar
		GameRegistry.addSmelting(new ItemStack(TaamMain.itemMaterial, 1, Taam.ITEM_MATERIAL_META.resin.ordinal()), new ItemStack(TaamMain.itemMaterial, 1, Taam.ITEM_MATERIAL_META.rubber_bar.ordinal()), 1);
		//Iron Dust -> Iron Ingot
		GameRegistry.addSmelting(new ItemStack(TaamMain.itemDust, 1, Taam.BLOCK_ORE_META.iron.ordinal()), new ItemStack(Items.IRON_INGOT), 1);
		//Gold Dust -> Gold Ingot
		GameRegistry.addSmelting(new ItemStack(TaamMain.itemDust, 1, Taam.BLOCK_ORE_META.gold.ordinal()), new ItemStack(Items.GOLD_INGOT), 1);
		//Rubber Bar -> Plastic sheets
		GameRegistry.addSmelting(new ItemStack(TaamMain.itemMaterial, 1, Taam.ITEM_MATERIAL_META.rubber_bar.ordinal()), new ItemStack(TaamMain.itemMaterial, 1, Taam.ITEM_MATERIAL_META.plastic_sheet.ordinal()), 1);
	}

	public static void registerCraftingRecipes() {
		/*
		 * Input Values for better overview
		 */
		ItemStack materialWoodenBoard = new ItemStack(TaamMain.itemMaterial, 1, Taam.ITEM_MATERIAL_META.wooden_board.ordinal());
		ItemStack materialAluminumPlate = new ItemStack(TaamMain.itemMaterial, 1, Taam.ITEM_MATERIAL_META.aluminum_plate.ordinal());

		ItemStack partSieve = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.sieve.ordinal());
		ItemStack partRubberBand = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.rubber_band.ordinal());
		ItemStack partWoodenBand = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.wooden_band.ordinal());
		ItemStack partWoodenSupportFrame = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.support_frame_wood.ordinal());
		ItemStack partMetalBearing = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.metal_bearing.ordinal());
		ItemStack partSupportFrame = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.support_frame.ordinal());
		ItemStack partIronFrame = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.iron_frame.ordinal());
		ItemStack partPump = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.pump.ordinal());
		ItemStack partTank = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.tank.ordinal());
		ItemStack partNozzle = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.nozzle.ordinal());
		ItemStack partCopperWire = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.copper_wire.ordinal());
		ItemStack partMagneticCoil = new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.magnetic_coil.ordinal());

		ItemStack blockConveyor2 = new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.conveyor2.ordinal());
		ItemStack blockTrashcan = new ItemStack(TaamMain.blockProductionLineAttachable, 1, Taam.BLOCK_PRODUCTIONLINE_ATTACHABLE_META.trashcan.ordinal());
		ItemStack blockChute = new ItemStack(TaamMain.blockMachines, 1, Taam.BLOCK_MACHINES_META.chute.ordinal());
		ItemStack blockPipe = new ItemStack(TaamMain.itemMachine, 1, Taam.MACHINE_META.pipe.ordinal());
		ItemStack blockMotionSensor = new ItemStack(TaamMain.blockSensor, 1, 0);

		ItemStack blockConcreteCoatedChiseled = new ItemStack(TaamMain.blockConcrete, 1, Taam.BLOCK_CONCRETE_META.coated_chiseled.ordinal());
		ItemStack blockConcreteFine = new ItemStack(TaamMain.blockConcrete, 1, Taam.BLOCK_CONCRETE_META.fine.ordinal());
		ItemStack blockConcreteRough = new ItemStack(TaamMain.blockConcrete, 1, Taam.BLOCK_CONCRETE_META.rough.ordinal());
		ItemStack blockConcreteCoated = new ItemStack(TaamMain.blockConcrete, 4, Taam.BLOCK_CONCRETE_META.coated.ordinal());
		ItemStack blockConcreteBlack = new ItemStack(TaamMain.blockConcrete, 4, Taam.BLOCK_CONCRETE_META.black.ordinal());

		ItemStack toolSawAnyDamage = new ItemStack(TaamMain.itemSaw, 1, OreDictionary.WILDCARD_VALUE);

		/*
		 * Conveyor Stuff (Production Line)
		 */

		//		conveyor1 (Wood)
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 8, Taam.BLOCK_PRODUCTIONLINE_META.conveyor1.ordinal()),
				"rBP", "wSw", "WsW",
				'P', Blocks.PISTON,
				'B', partWoodenBand,
				'w', materialWoodenBoard,
				'S', partWoodenSupportFrame,
				'W', "plankWood",
				's', "stickWood",
				'r', "dustRedstone"
		).setRegistryName(Taam.MOD_ID, "conveyor_wood"));
		//		conveyor2 (Aluminum)
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 8, Taam.BLOCK_PRODUCTIONLINE_META.conveyor2.ordinal()),
				"MRM", "CSC", "ABA",
				'M', "partMotor",
				'R', partRubberBand,
				'C', partMetalBearing,
				'S', partSupportFrame,
				'A', "ingotAluminum",
				'B', "materialPlastic"
		).setRegistryName(Taam.MOD_ID, "conveyor_alu"));
		//		conveyor3 (High Throughput)
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.conveyor3.ordinal()),
				"YBY", "F F", "MCM",
				'M', "partMotor",
				'C', blockConveyor2,
				'F', partIronFrame,
				'Y', "dyeYellow",
				'B', "dyeBlack"
		).setRegistryName(Taam.MOD_ID, "conveyor_hs"));

		//		conveyor hopper
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.hopper.ordinal()),
				Blocks.HOPPER,
				partSupportFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_hopper"));
		//		conveyor chute
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.chute.ordinal()),
				blockChute,
				partSupportFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_chute"));

		//		High Speed Conveyor Hopper
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.hopper_hs.ordinal()),
				"C C", " H ", " I ",
				'C', blockConveyor2,
				'H', Blocks.HOPPER,
				'I', partSupportFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_hopper_hs"));
		//		Shredder
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.shredder.ordinal()),
				"P P", "MTB", "bSb",
				'P', materialAluminumPlate,
				'M', "partMotor",
				'T', blockTrashcan,
				'B', partMetalBearing,
				'b', "partBasicCircuit",
				'S', partSupportFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_shredder"));
		//		Grinder
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.grinder.ordinal()),
				"PsP", "MCB", "bSb",
				'P', materialAluminumPlate,
				's', partSieve,
				'M', "partMotor",
				'C', blockChute,
				'B', partMetalBearing,
				'b', "partBasicCircuit",
				'S', partSupportFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_grinder"));
		//		Crusher
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.crusher.ordinal()),
				"P P", "MCB", "bSb",
				'P', materialAluminumPlate,
				'M', "partMotor",
				'C', blockChute,
				'B', partMetalBearing,
				'b', "partBasicCircuit",
				'S', partSupportFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_crusher"));
		//		Sieve
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.sieve.ordinal()),
				"AsA", "ACA", "MSM",
				'A', "ingotAluminum",
				'C', blockChute,
				'M', "partMotor",
				'S', partSupportFrame,
				's', partSieve
		).setRegistryName(Taam.MOD_ID, "conveyor_sieve"));
		//		Elevator
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLine, 1, Taam.BLOCK_PRODUCTIONLINE_META.elevator.ordinal()),
				"MFM", "PFP", "MSM",
				'P', materialAluminumPlate,
				'M', "partMotor",
				'F', partIronFrame,
				'S', partSupportFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_elevator"));

		/*
		 * Conveyor Stuff (Production Line Attachables)
		 */

		//		Conveyor Item Bag
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLineAttachable, 1, Taam.BLOCK_PRODUCTIONLINE_ATTACHABLE_META.itembag.ordinal()),
				"PLP", "PIP", "PPP",
				'P', "materialPlastic",
				'L', "dyeBlue",
				'I', partIronFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_item_bag"));
		//		Conveyor Trash Bag
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLineAttachable, 1, Taam.BLOCK_PRODUCTIONLINE_ATTACHABLE_META.trashcan.ordinal()),
				"PLP", "PIP", "PPP",
				'P', "materialPlastic",
				'L', "dyeGreen",
				'I', partIronFrame
		).setRegistryName(Taam.MOD_ID, "conveyor_trash_bag"));

		/*
		 * Conveyor Stuff (Appliances)
		 */

		//		sprayer
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "sprayer"), new ItemStack(TaamMain.blockProductionLineAppliance, 1, Taam.BLOCK_PRODUCTIONLINE_APPLIANCE_META.sprayer.ordinal()),
				"RNN", "TCP", "aaa",
				'N', partNozzle,
				'C', "partBasicCircuit",
				'a', materialAluminumPlate,
				'P', partPump,
				'R', blockPipe,
				'T', partTank
		).setRegistryName(Taam.MOD_ID, "sprayer_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "sprayer"), new ItemStack(TaamMain.blockProductionLineAppliance, 1, Taam.BLOCK_PRODUCTIONLINE_APPLIANCE_META.sprayer.ordinal()),
				"NNR", "PCT", "aaa",
				'N', partNozzle,
				'C', "partBasicCircuit",
				'a', materialAluminumPlate,
				'P', partPump,
				'R', blockPipe,
				'T', partTank
		).setRegistryName(Taam.MOD_ID, "sprayer_2"));

		//      aligner
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockProductionLineAppliance, 1, Taam.BLOCK_PRODUCTIONLINE_APPLIANCE_META.aligner.ordinal()),
				"PSP", "AMM", "PP ",
				'S', blockMotionSensor,
				'A', "partAdvancedCircuit",
				'P', materialAluminumPlate,
				'M', "partMotor"
		).setRegistryName(Taam.MOD_ID, "aligner"));

		/*
		 * Fluid Machines
		 */
		//      pipe
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "pipe"), new ItemStack(TaamMain.itemMachine, 4, Taam.MACHINE_META.pipe.ordinal()),
				"III", "nnn", "III",
				'I', "ingotIron",
				'n', "nuggetIron"
		).setRegistryName(Taam.MOD_ID, "pipe_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "pipe"), new ItemStack(TaamMain.itemMachine, 4, Taam.MACHINE_META.pipe.ordinal()),
				"InI", "InI", "InI",
				'I', "ingotIron",
				'n', "nuggetIron"
		).setRegistryName(Taam.MOD_ID, "pipe_2"));
		//      tank
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemMachine, 1, Taam.MACHINE_META.tank.ordinal()),
				"GGG", "G G", "SSS",
				'G', "paneGlass",
				'S', blockConcreteCoatedChiseled
		).setRegistryName(Taam.MOD_ID, "tank"));
		//      pump
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "pump"), new ItemStack(TaamMain.itemMachine, 1, Taam.MACHINE_META.pump.ordinal()),
				"AAA", "PTR", "SSS",
				'A', "ingotAluminum",
				'P', partPump,
				'T', partTank,
				'R', blockPipe,
				'S', blockConcreteCoatedChiseled
		).setRegistryName(Taam.MOD_ID, "pump_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "pump"), new ItemStack(TaamMain.itemMachine, 1, Taam.MACHINE_META.pump.ordinal()),
				"AAA", "RTP", "SSS",
				'A', "ingotAluminum",
				'P', partPump,
				'T', partTank,
				'R', blockPipe,
				'S', blockConcreteCoatedChiseled
		).setRegistryName(Taam.MOD_ID, "pump_2"));
		//      mixer
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemMachine, 1, Taam.MACHINE_META.mixer.ordinal()),
				" M ", "RCR", "SSS",
				'C', blockChute,
				'M', "partMotor",
				'R', blockPipe,
				'S', blockConcreteCoatedChiseled
		).setRegistryName(Taam.MOD_ID, "mixer"));
		//      fluid drier
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemMachine, 1, Taam.MACHINE_META.fluid_drier.ordinal()),
				" R ", "sMs", " C ",
				'C', blockChute,
				'M', "partMotor",
				's', partSieve,
				'R', blockPipe
		).setRegistryName(Taam.MOD_ID, "fluid_drier"));

		/*
		 * Other Machines
		 */

		//		chute
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockMachines, 1, Taam.BLOCK_MACHINES_META.chute.ordinal()),
				"I I", "I I", " I ",
				'I', "ingotIron"
		).setRegistryName(Taam.MOD_ID, "chute"));

		//		motion sensor
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockSensor, 1, 0),
				"PGP", "PpP", "IRI",
				'P', "materialPlastic",
				'G', "blockGlass",
				'p', "partPhotocell",
				'I', "ingotIron",
				'R', "dustRedstone"
		).setRegistryName(Taam.MOD_ID, "motion_sensor"));

		//      industial lamp
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockLamp, 2, 0),
				"GPG", "grg",
				'P', "materialPlastic",
				'G', "paneGlass",
				'g', "dustGlowstone",
				'r', "dustRedstone"
		).setRegistryName(Taam.MOD_ID, "lamp"));
		// Inverted
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.blockLampInverted, 1, 0),
				TaamMain.blockLamp, Blocks.REDSTONE_TORCH
		).setRegistryName(Taam.MOD_ID, "lamp_inverted"));

		/*
		 * Blocks
		 */
		//      support bream
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockSupportBeam, 16, 0),
				"FFF", "F F", "FFF",
				'F', partIronFrame
		).setRegistryName(Taam.MOD_ID, "support_beam"));

		/*
		 * Tools
		 */

		//		wrench
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "wrench"), new ItemStack(TaamMain.itemWrench, 1, 0),
				" I ", "II ", "  I",
				'I', "ingotIron"
		).setRegistryName(Taam.MOD_ID, "wrench"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "wrench"), new ItemStack(TaamMain.itemWrench, 1, 0),
				" I ", " II", "I  ",
				'I', "ingotIron"
		).setRegistryName(Taam.MOD_ID, "wrench"));
		//		saw
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "saw"), new ItemStack(TaamMain.itemSaw, 1, 0),
				"IIS",
				'I', "ingotIron",
				'S', "stickWood"
		).setRegistryName(Taam.MOD_ID, "saw"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "saw"), new ItemStack(TaamMain.itemSaw, 1, 0),
				"SII",
				'I', "ingotIron",
				'S', "stickWood"
		).setRegistryName(Taam.MOD_ID, "saw"));

		/*
		 * Parts
		 */
		//		photo cell
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemPart, 9, Taam.ITEM_PART_META.photocell.ordinal()),
				Blocks.DAYLIGHT_DETECTOR,
				toolSawAnyDamage
		).setRegistryName(Taam.MOD_ID, "photo_cell"));
		//		magnetic coil
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 4, Taam.ITEM_PART_META.magnetic_coil.ordinal()),
				"CCC", "CIC", "CCC",
				'C', partCopperWire,
				'I', "ingotIron"
		).setRegistryName(Taam.MOD_ID, "magnetic_coil"));
		//		metal bearing
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "metal_bearing"), new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.metal_bearing.ordinal()),
				"INI", "N N", "INI",
				'I', "ingotIron",
				'N', "nuggetIron"
		).setRegistryName(Taam.MOD_ID, "metal_bearing_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "metal_bearing"), new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.metal_bearing.ordinal()),
				"NIN", "I I", "NIN",
				'I', "ingotIron",
				'N', "nuggetIron"
		).setRegistryName(Taam.MOD_ID, "metal_bearing_2"));
		//		support frame
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 6, Taam.ITEM_PART_META.support_frame.ordinal()),
				" A ", "A A", "AAA",
				'A', "ingotAluminum"
		).setRegistryName(Taam.MOD_ID, "support_frame"));
		//		support frame wood
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.support_frame_wood.ordinal()),
				" S ", "S S", "WWW",
				'W', "plankWood",
				'S', "stickWood"
		).setRegistryName(Taam.MOD_ID, "support_frame_wood"));
		//		copper wire
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 12, Taam.ITEM_PART_META.copper_wire.ordinal()),
				"CCC",
				'C', "ingotCopper"
		).setRegistryName(Taam.MOD_ID, "copper_wire"));

		//		basic circuit
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "circuit_basic"), new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.circuit_basic.ordinal()),
				"CCC", "RGR", "CCC",
				'C', "ingotCopper",
				'G', "ingotGold",
				'R', "dustRedstone"
		).setRegistryName(Taam.MOD_ID, "circuit_basic_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "circuit_basic"), new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.circuit_basic.ordinal()),
				"CRC", "CGC", "CRC",
				'C', "ingotCopper",
				'G', "ingotGold",
				'R', "dustRedstone"
		).setRegistryName(Taam.MOD_ID, "circuit_basic_2"));
		//		advanced circuit
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "circuit_advanced"), new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.circuit_advanced.ordinal()),
				"RGR", "GCG", "RGR",
				'R', "dustRedstone",
				'G', "ingotGold",
				'C', "partBasicCircuit"
		).setRegistryName(Taam.MOD_ID, "circuit_advanced_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "circuit_advanced"), new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.circuit_advanced.ordinal()),
				"GRG", "RCR", "GRG",
				'R', "dustRedstone",
				'G', "ingotGold",
				'C', "partBasicCircuit"
		).setRegistryName(Taam.MOD_ID, "circuit_advanced_2"));
		//		logistics chip
		/*ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null,new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.logistics_chip.ordinal()),
				"PKP", "HCH", "PVP",
				'P', "materialPlastic",
				'K', Blocks.chest,
				'H', Blocks.hopper,
				'V', Items.comparator,
				'C', "partAdvancedCircuit"
		));*/
		//		iron frame
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.iron_frame.ordinal()),
				" I ", "I I", "I I",
				'I', "ingotIron"
		).setRegistryName(Taam.MOD_ID, "iron_frame"));

		//		rubber band
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.rubber_band.ordinal()),
				"RRR", "R R", "RRR",
				'R', "materialRubber"
		).setRegistryName(Taam.MOD_ID, "rubber_band"));
		//		wooden band - with planks
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "wooden_band"), new ItemStack(TaamMain.itemPart, 4, Taam.ITEM_PART_META.wooden_band.ordinal()),
				"WsW", "WSW",
				's', "stickWood",
				'S', "string",
				'W', "plankWood"
		).setRegistryName(Taam.MOD_ID, "wooden_band_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "wooden_band"), new ItemStack(TaamMain.itemPart, 4, Taam.ITEM_PART_META.wooden_band.ordinal()),
				"WSW", "WsW",
				's', "stickWood",
				'S', "string",
				'W', "plankWood"
		).setRegistryName(Taam.MOD_ID, "wooden_band_2"));
		//		wooden band - with slabs
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "wooden_band"), new ItemStack(TaamMain.itemPart, 2, Taam.ITEM_PART_META.wooden_band.ordinal()),
				"WsW", "WSW",
				's', "stickWood",
				'S', "string",
				'W', "slabWood"
		).setRegistryName(Taam.MOD_ID, "wooden_band_3"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "wooden_band"), new ItemStack(TaamMain.itemPart, 2, Taam.ITEM_PART_META.wooden_band.ordinal()),
				"WSW", "WsW",
				's', "stickWood",
				'S', "string",
				'W', "slabWood"
		).setRegistryName(Taam.MOD_ID, "wooden_band_4"));
		//		tank
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.tank.ordinal()),
				" I ", "I I", "III",
				'I', "ingotIron"
		).setRegistryName(Taam.MOD_ID, "tank_part"));
		//		nozzle
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.nozzle.ordinal()),
				" I ", "I I", " I ",
				'I', "nuggetIron"
		).setRegistryName(Taam.MOD_ID, "nozzle"));

		//		Pump
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.pump.ordinal()),
				"AAA", "PMP", "AAA",
				'M', "partMotor",
				'P', Blocks.PISTON,
				'A', "ingotAluminum"
		).setRegistryName(Taam.MOD_ID, "pump_part"));
		//		Motor
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.motor.ordinal()),
				"ACA", "CIC", "ACA",
				'C', partMagneticCoil,
				'I', "ingotIron",
				'A', "ingotAluminum"
		).setRegistryName(Taam.MOD_ID, "motor_part"));
		//		Sieve
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 1, Taam.ITEM_PART_META.sieve.ordinal()),
				"IBI", "BBB", "IBI",
				'B', Blocks.IRON_BARS,
				'I', "ingotIron"
		).setRegistryName(Taam.MOD_ID, "sieve_part"));
		//		Redirector
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.itemPart, 4, Taam.ITEM_PART_META.redirector.ordinal()),
				"P", "I", "I",
				'P', materialAluminumPlate,
				'I', "ingotAluminum"
		).setRegistryName(Taam.MOD_ID, "redirector_part"));

		/*
		 * Materials
		 */

		//		copper nugget
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemMaterial, 9, Taam.ITEM_MATERIAL_META.copper_nugget.ordinal()), "ingotCopper")
				.setRegistryName(Taam.MOD_ID, "copper_ingot_nugget"));
		String nugget = "nuggetCopper";
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemIngot, 1, Taam.BLOCK_ORE_META.copper.ordinal()), nugget, nugget, nugget, nugget, nugget, nugget, nugget, nugget, nugget)
				.setRegistryName(Taam.MOD_ID, "copper_nugget_ingot"));

		//		tin nugget
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemMaterial, 9, Taam.ITEM_MATERIAL_META.tin_nugget.ordinal()), "ingotTin")
				.setRegistryName(Taam.MOD_ID, "tin_ingot_nugget"));
		nugget = "nuggetTin";
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemIngot, 1, Taam.BLOCK_ORE_META.tin.ordinal()), nugget, nugget, nugget, nugget, nugget, nugget, nugget, nugget, nugget)
				.setRegistryName(Taam.MOD_ID, "tin_nugget_ingot"));

		//		aluminum nugget
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemMaterial, 9, Taam.ITEM_MATERIAL_META.aluminum_nugget.ordinal()), "ingotAluminum")
				.setRegistryName(Taam.MOD_ID, "aluminum_ingot_nugget"));
		nugget = "nuggetAluminum";
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemIngot, 1, Taam.BLOCK_ORE_META.aluminum.ordinal()), nugget, nugget, nugget, nugget, nugget, nugget, nugget, nugget, nugget)
				.setRegistryName(Taam.MOD_ID, "aluminum_nugget_ingot"));

		//		wooden board
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "wooden_board"), new ItemStack(TaamMain.itemMaterial, 6, Taam.ITEM_MATERIAL_META.wooden_board.ordinal()),
				"www", "s s",
				'w', "plankWood",
				's', "stickWood"
		).setRegistryName(Taam.MOD_ID, "wooden_board_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "wooden_board"), new ItemStack(TaamMain.itemMaterial, 6, Taam.ITEM_MATERIAL_META.wooden_board.ordinal()),
				"s s", "www",
				'w', "plankWood",
				's', "stickWood"
		).setRegistryName(Taam.MOD_ID, "wooden_board_2"));

		//		aluminum plate
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "aluminum_plate"), new ItemStack(TaamMain.itemMaterial, 6, Taam.ITEM_MATERIAL_META.aluminum_plate.ordinal()),
				" a ", "aaa",
				'a', "ingotAluminum"
		).setRegistryName(Taam.MOD_ID, "aluminum_plate_1"));
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(new ResourceLocation(Taam.MOD_ID, "aluminum_plate"), new ItemStack(TaamMain.itemMaterial, 6, Taam.ITEM_MATERIAL_META.aluminum_plate.ordinal()),
				"aaa", " a ",
				'a', "ingotAluminum"
		).setRegistryName(Taam.MOD_ID, "aluminum_plate_2"));

		//      cement
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemMaterial, 4, Taam.ITEM_MATERIAL_META.cement.ordinal()),
				Items.CLAY_BALL, "dustStone", "dustStone", "dustStone"
		).setRegistryName(Taam.MOD_ID, "cement"));
		//      rough cement
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.itemMaterial, 2, Taam.ITEM_MATERIAL_META.cementRough.ordinal()),
				"materialCement", "gravel"
		).setRegistryName(Taam.MOD_ID, "cement_rough"));

		//      concrete
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.blockConcrete, 1, Taam.BLOCK_CONCRETE_META.fine.ordinal()),
				"materialCement", "materialCement", "materialCement", "materialCement", Items.WATER_BUCKET
		).setRegistryName(Taam.MOD_ID, "concrete"));
		//      rough concrete
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.blockConcrete, 1, Taam.BLOCK_CONCRETE_META.rough.ordinal()),
				"materialRoughCement", "materialRoughCement", "materialRoughCement", "materialRoughCement", Items.WATER_BUCKET
		).setRegistryName(Taam.MOD_ID, "concrete_rough"));
		//      coated concrete
		ForgeRegistries.RECIPES.register(new ShapelessOreRecipe(null, new ItemStack(TaamMain.blockConcrete, 1, Taam.BLOCK_CONCRETE_META.coated.ordinal()),
				blockConcreteFine, "materialResin", "materialResin", "materialResin", "materialResin", "materialResin", Items.WATER_BUCKET
		).setRegistryName(Taam.MOD_ID, "concrete_coated"));

		//      chiseled concrete
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockConcrete, 4, Taam.BLOCK_CONCRETE_META.fine_chiseled.ordinal()),
				"CC", "CC",
				'C', blockConcreteFine
		).setRegistryName(Taam.MOD_ID, "concrete_chiseled"));
		//      rough chiseled concrete
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockConcrete, 4, Taam.BLOCK_CONCRETE_META.rough_chiseled.ordinal()),
				"CC", "CC",
				'C', blockConcreteRough
		).setRegistryName(Taam.MOD_ID, "concrete_chiseled_rough"));
		//      coated chiseled concrete
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockConcrete, 4, Taam.BLOCK_CONCRETE_META.coated_chiseled.ordinal()),
				"CC", "CC",
				'C', blockConcreteCoated
		).setRegistryName(Taam.MOD_ID, "concrete_coated_chiseled"));
		//      black chiseled concrete
		ForgeRegistries.RECIPES.register(new ShapedOreRecipe(null, new ItemStack(TaamMain.blockConcrete, 4, Taam.BLOCK_CONCRETE_META.black_chiseled.ordinal()),
				"CC", "CC",
				'C', blockConcreteBlack
		).setRegistryName(Taam.MOD_ID, "concrete_coated_black"));

		// Fallback materials & error correction stuff
		ItemStack cheatyIronIngot = new ItemStack(TaamMain.itemIngot, 1, Taam.BLOCK_ORE_META.iron.ordinal());
		GameRegistry.addShapelessRecipe(new ResourceLocation(Taam.MOD_ID, "cheaty_iron_ingot"), null, new ItemStack(Items.IRON_INGOT), Ingredient.fromStacks(cheatyIronIngot));

		ItemStack cheatyGoldIngot = new ItemStack(TaamMain.itemIngot, 1, Taam.BLOCK_ORE_META.gold.ordinal());
		GameRegistry.addShapelessRecipe(new ResourceLocation(Taam.MOD_ID, "cheaty_gold_ingot"), null, new ItemStack(Items.GOLD_INGOT), Ingredient.fromStacks(cheatyGoldIngot));
	}

}


text:
package org.apache.shiro.session.mgt;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * SessionValidationScheduler implementation that uses a
 * {@link ScheduledExecutorService} to call {@link ValidatingSessionManager#validateSessions()} every
 * <em>{@link #getInterval interval}</em> milliseconds.
 *
 * @since 0.9
 */
public class ExecutorServiceSessionValidationScheduler implements SessionValidationScheduler, Runnable {

    //TODO - complete JavaDoc

    /** Private internal log instance. */
    private static final Logger log = LoggerFactory.getLogger(ExecutorServiceSessionValidationScheduler.class);

    ValidatingSessionManager sessionManager;
    private ScheduledExecutorService service;
    private long interval = DefaultSessionManager.DEFAULT_SESSION_VALIDATION_INTERVAL;
    private boolean enabled = false;
    private String threadNamePrefix = "SessionValidationThread-";

    public ExecutorServiceSessionValidationScheduler() {
        super();
    }

    public ExecutorServiceSessionValidationScheduler(ValidatingSessionManager sessionManager) {
        this.sessionManager = sessionManager;
    }

    public ValidatingSessionManager getSessionManager() {
        return sessionManager;
    }

    public void setSessionManager(ValidatingSessionManager sessionManager) {
        this.sessionManager = sessionManager;
    }

    public long getInterval() {
        return interval;
    }

    public void setInterval(long interval) {
        this.interval = interval;
    }

    public boolean isEnabled() {
        return this.enabled;
    }

    public void setThreadNamePrefix(String threadNamePrefix) {
        this.threadNamePrefix = threadNamePrefix;
    }

    public String getThreadNamePrefix() {
        return this.threadNamePrefix;
    }

    /**
     * Creates a single thread {@link ScheduledExecutorService} to validate sessions at fixed intervals
     * and enables this scheduler. The executor is created as a daemon thread to allow JVM to shut down
     */
    //TODO Implement an integration test to test for jvm exit as part of the standalone example
    // (so we don't have to change the unit test execution model for the core module)
    public void enableSessionValidation() {
        if (this.interval > 0l) {
            this.service = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
	            private final AtomicInteger count = new AtomicInteger(1);

	            public Thread newThread(Runnable r) {
	                Thread thread = new Thread(r);
	                thread.setDaemon(true);
	                thread.setName(threadNamePrefix + count.getAndIncrement());
	                return thread;
	            }
            });
            this.service.scheduleAtFixedRate(this, interval, interval, TimeUnit.MILLISECONDS);
        }
        this.enabled = true;
    }

    public void run() {
        if (log.isDebugEnabled()) {
            log.debug("Executing session validation...");
        }
        long startTime = System.currentTimeMillis();
        this.sessionManager.validateSessions();
        long stopTime = System.currentTimeMillis();
        if (log.isDebugEnabled()) {
            log.debug("Session validation completed successfully in " + (stopTime - startTime) + " milliseconds.");
        }
    }

    public void disableSessionValidation() {
        if (this.service != null) {
            this.service.shutdownNow();
        }
        this.enabled = false;
    }
}


text:
/**
 * @jsx React.DOM
 */
'use strict';

var assert = require('assert');
var sinon = require('sinon');
var React = require('react');
var HashRouting = require('../HashRouting');
var descriptors = require('../../descriptors');
var Routes = descriptors.Routes;
var Route = descriptors.Route;

function delay(func) {
  setTimeout(func, 10);
}

function makeOnRoute() {
  var onRoute = sinon.spy();
  onRoute.proxy = function(View, match, navigation) {
    var view = <View />;
    onRoute(view, match, navigation);
  };
  return onRoute;
}

describe('HashRouting', function() {

  var Main = React.createClass({
    render: function() {
      return
main
;
    }
  });

  var Page = React.createClass({
    render: function() {
      return
page
;
    }
  });

  var routes = (
    <Routes>
      <Route name="main" path="/" view={Main} />
      <Route name="page" path="/page" view={Page} />
    </Routes>
  );

  beforeEach(function() {
    window.location.hash = '';
  });

  it('starts routing', function(done) {
    var onRoute = makeOnRoute();
    HashRouting.start(routes, onRoute.proxy);
    delay(function() {
      sinon.assert.calledOnce(onRoute);
      assert.equal(onRoute.firstCall.args[0].type.displayName, 'Main');
      assert.deepEqual(onRoute.firstCall.args[2], {initial: true});
      done();
    });
  });

  it('navigates to a different route', function(done) {
    var onRoute = makeOnRoute();
    var routing = HashRouting.start(routes, onRoute.proxy);
    delay(function() {
      routing.navigate('/page');
      delay(function() {
        sinon.assert.calledTwice(onRoute);
        assert.equal(onRoute.firstCall.args[0].type.displayName, 'Main');
        assert.equal(onRoute.secondCall.args[0].type.displayName, 'Page');
        done();
      });
    });
  });

  it('navigates to a different route with custom navigation params', function(done) {
    var onRoute = makeOnRoute();
    var routing = HashRouting.start(routes, onRoute.proxy);
    delay(function() {
      routing.navigate('/page', {foo: 'bar'});
      delay(function() {
        sinon.assert.calledTwice(onRoute);
        assert.equal(onRoute.firstCall.args[0].type.displayName, 'Main');
        assert.equal(onRoute.secondCall.args[0].type.displayName, 'Page');
        assert.deepEqual(onRoute.secondCall.args[2], {foo: 'bar'});
        done();
      });
    });
  });

  it('navigates to a different route when query string changes', function(done) {
    var onRoute = makeOnRoute();
    var routing = HashRouting.start(routes, onRoute.proxy);
    delay(function() {
      routing.navigate('/page');
      routing.navigate('/page?foo=bar');
      delay(function() {
        sinon.assert.calledThrice(onRoute);
        assert.equal(onRoute.firstCall.args[0].type.displayName, 'Main');
        assert.deepEqual(onRoute.firstCall.args[0].props, {query: {}});
        assert.equal(onRoute.secondCall.args[0].type.displayName, 'Page');
        assert.deepEqual(onRoute.secondCall.args[0].props, {query: {}});
        assert.equal(onRoute.thirdCall.args[0].type.displayName, 'Page');
        assert.deepEqual(onRoute.thirdCall.args[0].props, {query: {foo: 'bar'}});
        done();
      });
    });
  });

  it('reacts on hashchange', function(done) {
    var onRoute = makeOnRoute();
    var routing = HashRouting.start(routes, onRoute.proxy);
    delay(function() {
      routing.navigate('/page');
      delay(function() {
        window.history.back();
        delay(function() {
          sinon.assert.callCount(onRoute, 3);
          assert.equal(onRoute.firstCall.args[0].type.displayName, 'Main');
          assert.equal(onRoute.secondCall.args[0].type.displayName, 'Page');
          assert.equal(onRoute.thirdCall.args[0].type.displayName, 'Main');
          assert.deepEqual(onRoute.thirdCall.args[2], {back: true});
          done();
        });
      });
    });
  });

  it('generates href', function() {
    var onRoute = makeOnRoute();
    var routing = HashRouting.start(routes, onRoute.proxy);
    assert.equal(routing.makeHref('main'), '#/');
    assert.equal(routing.makeHref('page'), '#/page');
  });

});


text:
export ListPage from './ListPage'
export FormPage from './FormPage'


text:
package com.baidu.disconf.core.common.zookeeper.inner;

import java.io.IOException;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;

/**
 * @author liaoqiqi
 * @version 2014-6-16
 */
public class ConfigWatcher implements Watcher {

    private ResilientActiveKeyValueStore store;

    public ConfigWatcher(String hosts) throws IOException, InterruptedException {
        store = new ResilientActiveKeyValueStore(true);
        store.connect(hosts);
    }

    public void displayConfig() throws InterruptedException, KeeperException {

        String value = store.read(ConfigUpdater.PATH, this, null);
        System.out.printf("Read %s as %s\n", ConfigUpdater.PATH, value);
    }

    @Override
    public void process(WatchedEvent event) {

        if (event.getType() == EventType.NodeDataChanged) {
            try {
                displayConfig();
            } catch (InterruptedException e) {
                System.err.println("Interrupted. Exiting.");
                Thread.currentThread().interrupt();
            } catch (KeeperException e) {
                System.err.printf("KeeperException: %s. Exiting.\n", e);
            }
        }

    }

    public static void main(String[] args) throws Exception {

        ConfigWatcher configWatcher = new ConfigWatcher(args[0]);
        configWatcher.displayConfig();

        // stay alive until process is killed or thread is interrupted
        Thread.sleep(Long.MAX_VALUE);
    }
}


text:
ACCEPTED

#### According to
Index Fungorum

#### Published in
null

#### Original name
Calothyriopeltis scolopiae Sawada & W. Yamam.

### Remarks
null


text:
<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Authentication\AuthenticationService;
use Zend\Session\Container;
use Zend\Http\PhpEnvironment\RemoteAddress;

class LoginController extends AbstractActionController
{
    protected $em;
    protected $cs;

    public function __construct(\Doctrine\ORM\EntityManager $em,  \Application\Service\Security $cs) {
        $this->em = $em;
        $this->cs = $cs;
    }

    public function onDispatch(\Zend\Mvc\MvcEvent $e) {
        $this->authservice = new AuthenticationService();
        if($this->authservice->hasIdentity()){
            $this->redirect()->toRoute("home",array('action'=>'index'));
        }

        $this->layout()->setVariables(array("activemodule"=>$this->getEvent()->getRouteMatch()->getMatchedRouteName()));
        parent::onDispatch($e);
    }

    public function setpasswordAction(){
        $formpassword = new \Application\Form\Resetpassword($this->em);
        $id = $this->getEvent()->getRouteMatch()->getParam('id');
        //Get student information
        $student = $this->em->getRepository('\Application\Entity\Studentprogram')->findOneBy(array("fkStudentid"=>$id));
        $formpassword->bind($this->request->getPost());
        if($this->request->isPost()){
           $formpassword->setData($this->request->getPost());

            if($formpassword->isValid()){
                $post = $formpassword->getData();

                $userModel = new \Application\Model\Student($this->em);
                $user = $this->em->getRepository('\Application\Entity\User')->find($post['Password']['pkUserid']);
                $user->setPassword($this->cs->_hashing($post['Password']['password']));
                $userModel->saveUserObject($user);

                return $this->redirect()->toRoute("login",array("action"=>"index"));
            }
        }
        return new ViewModel(array("frmpassword"=>$formpassword,"studentinfo"=>$student));
    }

    public function indexAction()
    {
        $formlogin = new \Application\Form\Login();

        $formlogin->bind($this->request->getPost());

        $messages = array();

        if ($this->request->isPost()){
            $formlogin->setData($this->request->getPost());
            if ($formlogin->isValid()) {
                 $loginCredentials = $this->request->getPost('Login');

                 $messages = $this->cs->auth($loginCredentials['username'], $this->cs->_hashing($loginCredentials['password']));
                //$messages = $this->cs->auth($loginCredentials['username'],$loginCredentials['password']);

                if (empty($messages)) {
                    $identity           = $this->authservice->getIdentity();
                    $this->userid       = $identity['pkUserid'];
                    //If valid, check if account password requires resetting, if true direct user to renew password
                    if(!$this->cs->hasPasswordExpired($this->userid, $this->em)){
                        //Log time and ip address
                        $ipaddress = new RemoteAddress();
                        $pr        = new \Application\Model\Preferences($this->em);
                        //Get user entity
                        $userentity = $this->em->getRepository("\Application\Entity\User")->find($this->userid);
                        $userentity->setLastloginip($userentity->getIpaddress());
                        $userentity->setIpaddress($ipaddress->getIpAddress());
                        $userentity->setLastlogindate($userentity->getLogindate());
                        $userentity->setLogindate(new \Datetime());
                        $logintimes = (int)$userentity->getLogintimes() + 1;
                        $userentity->setLogintimes($logintimes);
                        //Update session information
                        $pr->saveUser($userentity);

                        return $this->redirect()->toRoute('home', array('action' => 'index'));
                    }
                    $usersession = new Container('USER');
                    $usersession->userid  = $this->userid;
                    //Clear session
                    $this->authservice->clearIdentity();
                    return $this->redirect()->toRoute('login', array('action' => 'renewpassword'));
                }else{

                   //If it new student then authenticate using email address in enrolment
//                   $enrollmentauth = $this->cs->authNewStudent($loginCredentials['username'], $loginCredentials['password'],$this->em);
//                   if(count($enrollmentauth)){
//                       $registersession = new Container('ENROLLMENT');
//                       $registersession->emailaddress = $loginCredentials['username'];
//                       return $this->redirect()->toRoute('login', array('action' => 'register'));
//                   }
//                   //Not new student and user account does not exist
//                   if(!empty($messages['username']))
//                        $formlogin->get('Login')->get('username')->setMessages(array($messages['username']));
//                   if(!empty($messages['password']))
//                        $formlogin->get('Login')->get('password')->setMessages(array($messages['password']));
                }

            }else{
                $messages = $formlogin->getMessages();
            }

        }

        return new ViewModel(array("frmlogin"=>$formlogin,"errormessage"=>$messages));
    }

    public function renewpasswordAction(){
        $form = new \Application\Form\Resetpassword($this->em);
        $usersession = new Container('USER');
        $userid      =  $usersession->userid;

        $form->bind($this->request->getPost());
        if($this->request->isPost()){
            $form->setData($this->request->getPost());
            if($form->isValid()){

                //Reset password
                $formdata = $form->getData();
                $preferences = new \Application\Model\Preferences($this->em);
                //Get current id object
                $userEntity = $this->em->getRepository('\Application\Entity\User')->find($formdata['Password']['pkUserid']);
                $userEntity->setPassword($this->cs->_hashing($formdata['Password']['password']));
                $userEntity->setPasswordlastchanged(new \DateTime());
                $preferences->saveUser($userEntity);

                $usersession->getManager()->getStorage()->clear('USER');
                return $this->redirect()->toRoute('login', array('action' => 'index'));
            }
        }

        return new ViewModel(array("form"=>$form,"userid"=>$userid));
    }

    function registerAction(){
        $registersession = new Container('ENROLLMENT');
        if(isset($registersession->emailaddress)){

            $form = new \Application\Form\Registration($this->em);
            $form->bind($this->request->getPost());
            $enrolment = $this->em->getRepository('\Application\Entity\Enrollment')->findOneBy(array("emailAddress"=>$registersession->emailaddress));

            if($this->request->isPost()){
                $form->setData($this->request->getPost());
                if($form->isValid()){
                    $student    = new \Application\Model\Student($this->em);
                    $biodata    = $this->request->getPost('Student');
                    $contacts   = $this->request->getPost('Studentcontact');
                    $guardian   = $this->request->getPost('Guardian');
                    $employment = $this->request->getPost('Employment');
                    $studentemployment = array();

                    $date = new \DateTime();
                    $dob  = new \DateTime($biodata['dob']);
                    /*
                     * Get all objects
                     */

                    //Role
                    $role     = $this->em->getRepository('\Application\Entity\Role')->findOneBy(array("roleName"=>"STUD"));
                    //Country
                    $country  = $this->em->getRepository('\Application\Entity\Country')->find($biodata['fkCountryid']);
                    //District
                    $district = $this->em->getRepository('\Application\Entity\District')->find($biodata['fkDistrictid']);

                    $userobject = array("role"=>$role,"username"=>$enrolment->getTempstudentno(),"title"=>"","url"=>"","surname"=>$biodata['basicdetails']['surname'],"firstname"=>$biodata['basicdetails']['firstname'],"gender"=>$biodata['basicdetails']['gender'],"initial"=>$biodata['basicdetails']['initial'],"datecreated"=>$date,"emailaddress"=>$biodata['basicdetails']['emailaddress'],"password"=>"","ipaddress"=>"","logindate"=>$date);
                    $arrayuser  = $student->setUserObject($userobject);

                    //Set student biodata
                    $studentdata=  array("dob"=>$dob,"country"=>$country,"maritalstatus"=>$biodata['maritalStatus'],"district"=>$district);

                    //Set student program data
                    $studentprogramdata     =  array("entrymanner"=>$enrolment->getFkEntrymannerid(),"entryyear"=>$enrolment->getYearjoined(),"program"=>$enrolment->getFkGroupid()->getFkProgramid(),"repeatinglevel"=>null,"registrationnumber"=>$enrolment->getTempstudentno());

                    //Set student class object
                    $studentclassdata       =  array("examnumber"=>null,"campus"=>null,"class"=>$enrolment->getFkGroupid(),"period"=>$enrolment->getFkPeriodid(),"isregistered"=>"1","studymode"=>$enrolment->getFkStudymode(),"registrationdate"=>$date);

                    //Set student contacts
                    $studentcontacts        =  array("postalAddress"=>$contacts['postalAddress'],"mobile"=>$contacts['cell'],"physicalAddress"=>null,"telephone"=>$contacts['telephone']);

                    //Set Guardian
                    $studentguardian        =  array("surname"=>$guardian['surname'],"firstname"=>$guardian['firstname'],"title"=>$guardian['title'],"postalAddress"=>$guardian['postalAddress'],"emailAddress"=>$guardian['emailAddress'],"mobile"=>$guardian['mobile'],"telephoneNumber"=>$guardian['telephoneNumber'],"relationship"=>$guardian['relationship'],"isnextofkin"=>"1");

                    //Set employment
                    if(!empty($employment['organization'])){
                        $studentemployment  =  array("designation"=>$employment['designation'],"organization"=>$employment['organization'],"startYear"=>$employment['startYear'],"endYear"=>$employment['endYear'],"isCurrent"=>$employment['isCurrent']);
                    }

                    $allocateobjects        = array("user"=>$arrayuser,"student"=>$studentdata,"program"=>$studentprogramdata,"class"=>$studentclassdata,"contacts"=>$studentcontacts,"guardian"=>$studentguardian,"employment"=>$studentemployment);

                    $studento = $student->allocate($allocateobjects);

                    //Delete enrollment record
                    $student->deletefromdb('\Application\Entity\Enrollment',array('pkEnrollmentid'=>$enrolment->getPkEnrollmentid()));
                    $registersession->getManager()->getStorage()->clear('ENROLLMENT');
                    //Display password form
                    return $this->redirect()->toRoute("login",array("action"=>"setpassword","id"=>$studento->getPkStudentid()));
                }
            }
            return new ViewModel(array("frmregister"=>$form,"enrollmentinfo"=> $enrolment));
        }else{
            return $this->redirect()->toRoute('login', array('action' => 'index'));
        }
    }

}


text:
package uk.jamierocks.canary.gplugins.hook;

import com.google.common.collect.Lists;
import net.canarymod.Canary;
import net.canarymod.hook.Dispatcher;
import net.canarymod.hook.Hook;
import net.canarymod.hook.HookExecutionException;
import net.canarymod.hook.HookHandler;
import net.canarymod.plugin.Plugin;
import net.canarymod.plugin.PluginListener;
import uk.jamierocks.canary.gplugins.util.ReflectionUtil;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

/**
 * Allows for the searching of hooks in gplugins, and the registration thereof.
 */
public final class HookProcessor {

    public static List<HookReference> scan(Plugin plugin, Object pluginObject) {
        final List<HookReference> references = Lists.newArrayList();

        ReflectionUtil.getMethodsAnnotatedWith(pluginObject.getClass(), HookHandler.class).forEach(m -> {
            final HookHandler handler = m.getDeclaredAnnotation(HookHandler.class);

            // We first need to check the parameter count
            if (m.getParameterCount() != 1) {
                Canary.log.error("Failed to process HookHandler: {}#{}. Expected 1 parameter, found {}!",
                        m.getDeclaringClass().getSimpleName(), m.getName(), m.getParameterCount());
                return;
            }

            final Class<?> hookClass = m.getParameterTypes()[0];

            // Check the hookClass is assignable from Hook
            if (!Hook.class.isAssignableFrom(hookClass)) {
                Canary.log.error("Failed to process HookHandler: {}#{}. Parameter is not assignable from Hook!",
                        m.getDeclaringClass().getSimpleName(), m.getName());
                return;
            }

            // Create Dispatcher
            final Dispatcher dispatcher = new GDispatcher(pluginObject) {
                @Override
                public void execute(Object pluginObject, Hook hook) {
                    try {
                        m.invoke(pluginObject, hook);
                    } catch (IllegalAccessException | InvocationTargetException e) {
                        throw new HookExecutionException(e.getMessage(), e);
                    }
                }
            };
            dispatcher.ignoreCanceled = handler.ignoreCanceled();

            // Create hook reference
            references.add(new HookReference(plugin, hookClass, dispatcher, handler.priority()));
        });

        return references;
    }

    public static void registerListener(Plugin plugin, Object pluginObject) {
        final PluginListener listener = new FakeListener(plugin);
        Canary.hooks().registerListener(listener, plugin);
        scan(plugin, pluginObject).forEach(h -> h.register(listener));
    }

    private HookProcessor() {
    }

}


text:
ACCEPTED

#### According to
Index Fungorum

#### Published in
Beih. Nova Hedwigia 52: 161 (1975)

#### Original name
Cortinarius rhodophyllus M.M. Moser & E. Horak

### Remarks
null


text:
name: Mattias Nilsson Benfatto
pic: mattias-nilsson-benfatto.jpg
position: Founder of Lexplore
social:
  - title: website
    url: https://www.lexplore.com/employees/mattias-nilsson-benfatto/
---


text:
require "test/unit"

require "jms4r"
require "jbm_server"

class TestMessage < Test::Unit::TestCase

  include_class 'javax.jms.Session'

  def setup
    @server = JBossMessaging::Server.new
    @server.start

    @connection = JMS::Connection.new
    @session = @connection.create_session false, Session::AUTO_ACKNOWLEDGE
  end

  def teardown
    @connection.close

    @server.stop
  end

  def test_message_properties
    message = @session.create_message

    # there may be some properties already set
    count = message.properties.size
    message.properties["color"] = "black"
    assert_equal count + 1, message.properties.size
    assert_equal "black", message.properties["color"]
  end

  def test_message_enumeration
    message = @session.create_message
    # there may be some properties already set
    count = message.properties.size

    message.properties["color"] = "black"
    message.properties["speed"] = 88

    values = message.properties.map { |k,v| v }
    assert_equal count + 2, values.size
  end
end


text:
export * from './environment';
export * from './cqrsng2.component';


text:
from unittest import TestCase, main
from mock.mock_adapter_agent import MockAdapterAgent

class TestMibUpload(TestCase):
    """
    Test the MIB Upload Task
    """
    def setUp(self):
        self.adapter_agent = MockAdapterAgent()

    def tearDown(self):
        if self.adapter_agent is not None:
            self.adapter_agent.tearDown()

    # TODO: Add tests

if __name__ == '__main__':
    main()


text:
"""
    component
    ~~~~~~~~~

    A module that implements various helper functions to help consume
    components from popular package managers like bower.

    :copyright: (c) 2013 by Daniel Chatfield
    :license: MIT, see LICENSE for details.
"""

import os
import sys

setup_done = False

def setup(base_dir=None, depth=1, directory='components'):
    """Helper function that fixes python path.

    :param base_dir: Pass __file__ so component knows where your application
                     files are.
    :param depth: The number of times `os.path.dirname()` needs to be
                  called on `base_dir` to get the folder immediately
                  above bower_components Defaults to 1.
    :param directory: The directory where the components are installed to.
                      Defaults to `components`.
    """
    global setup_done
    if setup_done:
        return

    if not base_dir:
        base_dir = __file__

    for i in range(depth):
        base_dir = up_a_level(base_dir)

    bower_path = os.path.join(base_dir, directory)

    sys.path.insert(0, bower_path)

    setup_done = True

def up_a_level(current_pointer):
    """A helper function to traverse up a level of the filesystem"""
    return os.path.dirname(current_pointer)

def require(component_name):
    """A wrapper that allows importing of components as python packages
    """
    setup()
    return __import__(component_name)

def export(object):
    pass


text:
<resources>
    <string name="app_name">Resume Builder</string>

    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="powered_by">Powered by</string>
    <string name="web_droid">WebDroid</string>
    <string name="label_alert">Alert</string>
    <string name="label_error">Error</string>
    <string name="label_warning">Warning</string>
    <string name="label_ok">OK</string>
    <string name="toast_no_activity_found_to_handle_file">No Application found to handle request</string>
</resources>


text:
copyright:

  2014, 2016

lastupdated: "2016-10-19"

---

{:new_window: target="_blank"}
{:shortdesc: .shortdesc}

# Sécurité {{site.data.keyword.Bluemix_notm}}
{: #security}

Conçue selon les pratiques d'ingénierie sécurisée, la plateforme {{site.data.keyword.Bluemix}}
possède des contrôles de sécurité répartis dans des couches sur le réseau et dans l'infrastructure. {{site.data.keyword.Bluemix_notm}} fournit un
groupe de services de sécurité que les développeurs d'applications peuvent utiliser afin de sécuriser leurs applications mobiles et Web. La combinaison de ces éléments permet de faire d'{{site.data.keyword.Bluemix_notm}} une plateforme
proposant des choix clairs pour le développement d'applications sécurisé.
{:shortdesc}

{{site.data.keyword.Bluemix_notm}} assure la sécurité en appliquant des règles de sécurité respectant les meilleurs pratiques d'IBM en matière de systèmes, de réseau et d'ingénierie
sécurisée. Ces règles incluent des pratiques telles que l'analyse du code source, l'analyse dynamique, la modélisation des menaces et des tests de pénétration. {{site.data.keyword.Bluemix_notm}} suit le processus IBM Product Security Incident Response Team (PSIRT) pour la gestion des incidents de sécurité. Pour plus de détails, voir le site [IBM Security Vulnerability Management
(PSIRT)](http://www-03.ibm.com/security/secure-engineering/process.html){: new_window}.

Les environnements {{site.data.keyword.Bluemix_notm}} public et dédié utilisent les services cloud d'infrastructure sous forme de services
(IaaS) {{site.data.keyword.BluSoftlayer}} et profitent pleinement de son architecture sécurisée. L'infrastructure
sous forme de services {{site.data.keyword.BluSoftlayer}} fournit des niveaux de protection
multiples qui se chevauchent pour vos applications et vos données. Pour l'environnement {{site.data.keyword.Bluemix_notm}} local, vous êtes en charge de la sécurité physique et
fournissez l'infrastructure en hébergeant l'environnement {{site.data.keyword.Bluemix_notm}} local dans votre
propre centre de données situé derrière le pare-feu de la société. De plus,
{{site.data.keyword.Bluemix_notm}} ajoute des fonctions de sécurité au niveau de la couche plateforme sous forme de services (PaaS) dans différentes catégories : plateforme, données et application.

## Sécurité de la plateforme {{site.data.keyword.Bluemix_notm}}
{: #platform-security}

{{site.data.keyword.Bluemix_notm}} offre une sécurité fonctionnelle, d'infrastructure, opérationnelle et physique (via {{site.data.keyword.BluSoftlayer}}) pour la
plateforme de base. Toutefois, l'environnement
{{site.data.keyword.Bluemix_notm}} local est unique car le client fournit l'infrastructure et le centre de
données, et est en charge de la sécurité physique.

L'environnement {{site.data.keyword.Bluemix_notm}} sur {{site.data.keyword.BluSoftlayer}} est conforme aux normes IBM de sécurité en
matière de technologie de
l'information, qui satisfont et dépassent les valeurs standard de l'industrie. Ces normes incluent les éléments suivants : Réseau, chiffrement de données et contrôle d'accès
 * Listes de contrôle d'accès, droits et tests de pénétration
 * Identification, authentification et autorisation
 * Protection des informations et des données
 * Intégrité et disponibilité des services
 * Gestion des vulnérabilités et des correctifs
 * Détection d'attaques systématiques et par déni de service
 * Réponse aux incidents de sécurité

![Présentation de la sécurité de la plateforme Bluemix ](images/platform_sec.svg)

Figure 1. Présentation de la sécurité de la plateforme {{site.data.keyword.Bluemix_notm}}

Avec l'environnement {{site.data.keyword.Bluemix_notm}} local, vous hébergez {{site.data.keyword.Bluemix_notm}} derrière le pare-feu
de votre société et dans votre centre de données. Par conséquent, vous êtes responsable de certains aspects de la sécurité. L'image ci-dessous indique quelles sont les parties
de la sécurité qui appartiennent au client et quelles sont celles qui sont gérées et mises à jour par IBM.

![Présentation de la sécurité de la plateforme Bluemix locale](images/security_local_platform.svg)

Figure 2. Présentation de la sécurité de la plateforme {{site.data.keyword.Bluemix_notm}} locale

IBM installe, surveille à distance et gère l'environnement {{site.data.keyword.Bluemix_notm}} local dans votre centre de données par le biais
d'un relais, une fonction de distribution incluse dans l'environnement {{site.data.keyword.Bluemix_notm}} local. Le relais se connecte de façon
sécurisée avec des certificats propres à chaque instance {{site.data.keyword.Bluemix_notm}} locale. Pour plus d'informations sur l'environnement
{{site.data.keyword.Bluemix_notm}} local et le relais, voir [Environnement Bluemix local](/docs/local/index.html).

### Sécurité fonctionnelle

{{site.data.keyword.Bluemix_notm}} dispose de plusieurs fonctions en matière de sécurité fonctionnelle, telles que l'authentification d'utilisateur, l'autorisation d'accès, les opérations critiques et de contrôle, et la protection de données.

Authentification

Les développeurs d'applications sont authentifiés auprès de {{site.data.keyword.Bluemix_notm}} via l'identité Web IBM.

Pour
les environnements {{site.data.keyword.Bluemix_notm}} dédié et local, l'authentification via LDAP est
prise en charge par défaut. A la demande, l'authentification via l'identité Web IBM peut être configurée à la place pour
{{site.data.keyword.Bluemix_notm}}.

Autorisation

{{site.data.keyword.Bluemix_notm}} utilise les mécanismes Cloud Foundry pour s'assurer que chaque développeur a accès uniquement aux applications et aux instances de service qu'il a créées. L'autorisation d'accès aux services {{site.data.keyword.Bluemix_notm}} est basée sur OAuth. L'accès à l'ensemble des noeuds finaux internes de la plateforme {{site.data.keyword.Bluemix_notm}} est restreint pour les utilisateurs externes.

Audit

Des journaux d'audit sont créés pour toutes les tentatives d'authentification, réussies ou non, des développeurs d'application. Des journaux d'audit
sont également créés pour les accès privilégiés aux systèmes Linux qui hébergent les conteneurs où sont exécutées les applications
{{site.data.keyword.Bluemix_notm}}.

Protection des données

 L'ensemble du trafic {{site.data.keyword.Bluemix_notm}} passe par les produits IBM WebSphere® DataPower® SOA Appliances, qui offrent des fonctions de proxy inverse, de terminaison SSL et
d'équilibrage de charge.
Les méthodes HTTP suivantes sont autorisées :

DELETE

GET

HEAD

OPTIONS

POST

PUT

TRACE

 Le délai d'attente d'inactivité HTTP est de 2 minutes.

Les en-têtes suivants sont remplis par DataPower :

$wsis

true si la connexion côté client est sécurisée (HTTPS) ; false dans le cas contraire.

$wssc

Un des schémas de connexion client suivants : https, http, ws ou wss.

$wssn

Nom d'hôte envoyé par le client.

$wssp

Port du serveur sur lequel le client se connecte.

x-client-ip

Adresse IP du client.

x-forwarded-proto

Un des schémas de connexion client suivants : https, http, ws ou wss.

Pratiques de développement sécurisé

 Pour les environnements {{site.data.keyword.Bluemix_notm}} public et dédié, des analyses régulières permettant de détecter les vulnérabilités
en matière de sécurité sont effectuées sur divers composants {{site.data.keyword.Bluemix_notm}} avec IBM Security AppScan® Dynamic
Analyzer. La modélisation des
menaces et des tests de pénétration sont effectués pour détecter et traiter les vulnérabilités potentielles pour tous les types de déploiement
{{site.data.keyword.Bluemix_notm}}. De plus, les développeurs d'applications peuvent utiliser le service AppScan Dynamic Analyzer afin de sécuriser
leurs applications Web qui sont déployées dans {{site.data.keyword.Bluemix_notm}}.

### Sécurité de l'infrastructure

{{site.data.keyword.Bluemix_notm}} s'appuie sur Cloud Foundry et fournit une base robuste pour l'exécution de vos applications. Dans cette architecture, plusieurs composants gèrent la sécurité et l'isolement. De
plus, la gestion des modifications ainsi que des procédures de sauvegarde et de restauration sont implémentées pour assurer l'intégrité et la disponibilité.

Séparation des environnements

 Pour l'environnement {{site.data.keyword.Bluemix_notm}} public, les environnements de développement et de production sont séparés afin d'améliorer la stabilité et la sécurité des applications.

Pare-feux

 Des pare-feux sont en place pour restreindre l'accès au réseau {{site.data.keyword.Bluemix_notm}}. Pour l'environnement
{{site.data.keyword.Bluemix_notm}} local, le pare-feu de votre société sépare le reste de votre réseau de votre
instance {{site.data.keyword.Bluemix_notm}}.

Protection contre les intrusions

Les environnements {{site.data.keyword.Bluemix_notm}} public et dédié assurent la protection contre les intrusions pour détecter les menaces afin
qu'elles
puissent être traitées. Des règles de protection contre les intrusions sont activées dans les pare-feux.

Gestion des conteneurs d'applications sécurisée

Chaque application {{site.data.keyword.Bluemix_notm}} est isolée et s'exécute dans son propre conteneur, qui
possède des limites de ressources spécifiques pour le processeur, la mémoire et le disque.

Renforcement de la sécurité du système d'exploitation

Les administrateurs IBM renforcent le système d'exploitation et le réseau régulièrement à l'aide d'outils tels qu'IBM Endpoint Manager.

### Sécurité opérationnelle

{{site.data.keyword.Bluemix_notm}} offre un environnement de sécurité opérationnelle robuste avec les contrôles suivants.

Analyse de vulnérabilité

{{site.data.keyword.Bluemix_notm}} utilise Nessus, outil d'analyse de vulnérabilité de Tenable Network
Security, pour détecter les anomalies liées au réseau et aux configurations hôte.

Gestion des correctifs automatisés

Les administrateurs {{site.data.keyword.Bluemix_notm}} garantissent que les correctifs des
systèmes d'exploitation sont appliqués à une fréquence appropriée. Les correctifs automatisés sont activés avec IBM Endpoint Manager.

Analyse et consolidation des journaux d'audit

{{site.data.keyword.Bluemix_notm}} utilise les outils IBM Security QRadar® pour consolider les journaux Linux afin de surveiller l'accès privilégié sur les systèmes Linux. {{site.data.keyword.Bluemix_notm}} utilise également les outils SIEM (gestion des événements et des informations de sécurité) d'IBM QRadar pour surveiller les tentatives de connexion, réussies ou non, des développeurs d'applications.

Gestion de l'accès utilisateur

Dans {{site.data.keyword.Bluemix_notm}}, les instructions de répartition des tâches sont suivies pour affecter des privilèges d'accès
granulaire aux utilisateurs et pour assurer que les utilisateurs n'ont accès qu'aux éléments dont ils ont besoin pour accomplir leurs tâches selon le
principe du moindre privilège.

Dans les environnements {{site.data.keyword.Bluemix_notm}} dédié et local, les administrateurs désignés
peuvent
gérer les rôles et les droits pour les utilisateurs {{site.data.keyword.Bluemix_notm}} dans leur organisation dans la console d'administration. Voir
[Gestion de {{site.data.keyword.Bluemix_notm}}](/docs/admin/adminpublic.html#mng) pour des détails.

### Sécurité physique

Les environnements {{site.data.keyword.Bluemix_notm}} public et dédié s'appuient sur la topologie "un réseau dans le réseau" de {{site.data.keyword.BluSoftlayer}} en
matière de sécurité de réseau physique. Cette architecture permet de s'assurer que les systèmes sont accessibles uniquement au personnel autorisé. Pour l'environnement {{site.data.keyword.Bluemix_notm}} local, vous êtes en charge de la sécurité physique de
l'instance locale. Votre centre de données est sécurisé derrière le pare-feu de votre société.

Dans la topologie "un réseau dans le réseau" de {{site.data.keyword.BluSoftlayer}}, la couche réseau public gère le trafic public vers les sites Web hébergés ou les
ressources en
ligne. La
couche réseau privé permet une véritable gestion externe par un opérateur tiers autonome via des passerelles de réseau privé virtuel SSL, PPTP ou IPSec. La
couche réseau centre de données à centre de données offre une connectivité gratuite et sécurisée entre les serveurs hébergés dans des installations
{{site.data.keyword.BluSoftlayer}} distinctes.

Chaque centre de données {{site.data.keyword.BluSoftlayer}} est totalement sécurisé grâce à des contrôles qui répondent aux exigences standard de l'industrie et de la norme
SSAE 16, sans exception.

## Sécurité des données
{: #data-security}

Avec {{site.data.keyword.Bluemix_notm}},
la sécurisation des données contre l'accès non autorisé est le fruit d'une
collaboration entre {{site.data.keyword.Bluemix_notm}} et vous.

Les données qui sont associées à une application en cours d'exécution peuvent être dans l'un des trois états suivants : en transit, au repos et en cours d'utilisation.

Données en transit

Il s'agit des données transférées entre des noeuds sur un réseau.

Données au repos

Il s'agit des données qui sont stockées.

Données en cours d'utilisation

Il s'agit des données qui ne sont pas stockées et qui sont utilisées sur un noeud final.

Vous devez prendre en compte chaque type de données lorsque vous planifiez la sécurité des données.

La plateforme {{site.data.keyword.Bluemix_notm}} sécurise les données transférées en sécurisant l'accès de l'utilisateur final à
l'application via SSL sur le réseau, jusqu'à ce que les données atteignent IBM DataPower Gateway à la frontière du réseau interne de
{{site.data.keyword.Bluemix_notm}}. IBM DataPower Gateway sert de
proxy inverse et fournit la terminaison SSL. IPSEC est utilisé pour sécuriser les données qui transitent entre IBM DataPower Gateway et l'application.

La sécurité des données utilisées et des données au repos vous incombe lorsque vous développez votre application. Vous pouvez tirer profit de
plusieurs services liés aux données qui sont disponibles dans le catalogue {{site.data.keyword.Bluemix_notm}} pour traiter ces questions.

## Sécurité des applications {{site.data.keyword.Bluemix_notm}}
{: #application-security}

En tant que développeur, vous devez activer la configuration des paramètres de sécurité, y compris la protection des données d'application, pour vos applications exécutées sur {{site.data.keyword.Bluemix_notm}}.

Vous pouvez utiliser les fonctions de sécurité fournies par plusieurs services {{site.data.keyword.Bluemix_notm}} pour sécuriser vos applications. Tous les services {{site.data.keyword.Bluemix_notm}} qui sont produits par IBM suivent les pratiques de développement d'ingénierie sécurisée d'IBM.

**Remarque :** il se peut que certains services décrits ici ne soient pas applicables dans les instances
{{site.data.keyword.Bluemix_notm}} dédiées ou locales.

### Service SSO

IBM Single Sign On for {{site.data.keyword.Bluemix_notm}} est un service d'authentification reposant sur des règles qui fournit une fonction de connexion unique facile à intégrer pour les applications Node.js ou
Liberty for Java.. Pour permettre à
un développeur d'applications d'intégrer la fonction de connexion unique à une application, l'administrateur crée des instances de service et ajoute des
sources d'identité.

Le service Single Sign On prend en charge plusieurs sources d'identité dans lesquelles vos données d'identification utilisateur sont stockées :

Entreprise SAML

Il s'agit d'un registre d'utilisateurs qui procède à un échange de jetons pour l'authentification.

Répertoire cloud

Il s'agit d'un registre d'utilisateurs qui est hébergé dans le cloud IBM.

Sources d'identité sociales

 Il s'agit des registres d'utilisateurs qui sont gérés par Google, Facebook et LinkedIn.

Pour plus d'informations, voir [Initiation à Single Sign On](/docs/services/SingleSignOn/index.html).

### Application Security on Cloud

Ce service fournit une analyse de sécurité des applications mobiles et Web et vous permet d'analyser le code source afin d'identifier d'éventuelles
vulnérabilités en matière de sécurité. Pour plus d'informations, voir [Initiation à Application Security on Cloud](/docs/services/ApplicationSecurityonCloud/index.html).

### Plug-in IBM UrbanCode pour le test de la sécurité des applications

Le plug-in IBM Application Security Testing for {{site.data.keyword.Bluemix_notm}} vous permet d'exécuter des analyses de sécurité pour vos
applications Web ou Android qui sont hébergées dans {{site.data.keyword.Bluemix_notm}}. Il est développé par la communauté IBM UrbanCode. Deploy Community, qui assure son support, sur la plateforme IBM Bluemix DevOps Services.

Pour plus d'informations, voir [IBM
Application Security Testing for Bluemix](https://developer.ibm.com/urbancode/plugindoc/ibmucd/ibm-application-security-testing-bluemix/1-0/){: new_window}.

### dashDB

Le service dashDB utilise un serveur LDAP imbriqué pour l'authentification d'utilisateur. La connexion entre les applications et la base de données est protégée par des certificats SSL. Ce service utilise la capacité de chiffrement native de DB2® pour chiffrer automatiquement votre base de données déployée et vos sauvegardes de base de
données. La rotation de clé principale automatique a lieu tous les 90 jours.

Pour plus d'informations, voir [Initiation à dashDB](/docs/services/dashDB/index.html).

### Secure Gateway

Le service Secure Gateway permet de connecter les applications {{site.data.keyword.Bluemix_notm}} de façon sécurisée à des emplacements
distants, sur site ou dans le cloud. Il assure la connectivité et établit un tunnel entre votre organisation {{site.data.keyword.Bluemix_notm}} et
l'emplacement distant auquel vous voulez vous connecter. Vous pouvez configurer et créer une passerelle sécurisée en utilisant l'interface utilisateur
{{site.data.keyword.Bluemix_notm}} ou un package d'API.

Pour plus d'informations, voir [Initiation à Secure Gateway](/docs/services/SecureGateway/secure_gateway.html).

### Gestion des événements et des informations de sécurité

Vous pouvez utiliser les outils SIEM (gestion des événements et informations de sécurité) pour analyser les alertes de sécurité dans les journaux d'application. L'un de ces outils est IBM Security QRadar® SIEM, qui fournit la sécurité intérieure dans les environnements de cloud. Pour des informations, voir [IBM QRadar Security Intelligence Platform](http://www-01.ibm.com/support/knowledgecenter/SS42VS/welcome?lang=en){: new_window}.

## Déploiement de la sécurité {{site.data.keyword.Bluemix_notm}}
{: #security-deployment}

L'architecture de déploiement de la sécurité {{site.data.keyword.Bluemix_notm}} inclut différents
flux d'informations pour les utilisateurs et les développeurs d'applications afin d'assurer un accès sécurisé.

![Architecture de déploiement de la sécurité Bluemix](images/sec_deployment.svg)

Figure 3. Architecture de déploiement de la sécurité Bluemix

Pour les *utilisateurs d'application* {{site.data.keyword.Bluemix_notm}}, le **flux d'un utilisateur
d'application** est le suivant :
 1. Via un pare-feu, avec prévention contre les intrusions et sécurité du réseau.
 2. Via IBM DataPower Gateway avec proxy inverse et proxy de terminaison SSL.
 3. Via le routeur réseau.
 4. Atteint le contexte d'exécution d'application dans l'agent DEA (Droplet Execution Agent).

Le *développeur* {{site.data.keyword.Bluemix_notm}} suit les deux flux principaux : pour la connexion ainsi que pour le
développement
et le déploiement.
 * Le **flux de connexion d'un développeur** est le suivant :
    * Pour les développeurs qui se connectent à l'environnement {{site.data.keyword.Bluemix_notm}} public, le flux
est le suivant :
      1. Via le service IBM Single Sign On.
      2. Via l'identité Web IBM.
    * Pour les développeurs qui se connectent à l'environnement {{site.data.keyword.Bluemix_notm}} dédié ou local, le flux utilise le
protocole LDAP
de l'entreprise.
 * Le **flux de développement et de déploiement** est le suivant :
    1. Via un pare-feu, avec prévention contre les intrusions et sécurité du réseau. Applicable à l'environnement
{{site.data.keyword.Bluemix_notm}} dédié seulement.
    2. Via IBM DataPower Gateway avec proxy inverse et proxy de terminaison SSL.
    3. Via le routeur réseau.
    4. Via l'autorisation avec le contrôleur de cloud Cloud Foundry, pour assurer l'accès uniquement aux applications et aux instances de service qui sont
créées par le développeur.

Pour les *administrateurs* de l'environnement {{site.data.keyword.Bluemix_notm}} dédié et de l'environnement
{{site.data.keyword.Bluemix_notm}} local, le **flux d'un administrateur** est le suivant :
 1. Via un pare-feu, avec prévention contre les intrusions et sécurité du réseau.
 2. Via IBM DataPower Gateway avec proxy inverse et proxy de terminaison SSL.
 3. Via le routeur réseau.
 4. Atteint la page Administration dans l'interface utilisateur {{site.data.keyword.Bluemix_notm}}.

En plus des utilisateurs décrits dans ces scénarios, une équipe autorisée en charge des opérations de sécurité IBM effectue diverses tâches de
sécurité opérationnelles, par exemple :
 * Des analyses de vulnérabilités. Pour l'environnement {{site.data.keyword.Bluemix_notm}} local, vous êtes en charge de la sécurité
physique et des analyses au sein de votre pare-feu.
 * La gestion de l'accès utilisateur.
 * Le renforcement du système d'exploitation en appliquant des correctifs régulièrement avec IBM Endpoint Manager.
 * La gestion des risques avec protection contre les intrusions.
 * La surveillance de la sécurité avec QRadar.
 * La génération de rapports de sécurité disponibles dans la page Administration.

## Conformité en matière de sécurité
{: #compliance}

{{site.data.keyword.Bluemix}} fournit une plateforme cloud sécurisée, digne de confiance. La conformité {{site.data.keyword.Bluemix_notm}} résulte d'une plateforme et de services générés avec les meilleures normes de sécurité de l'industrie, notamment ISO 27001 et ISO 27002.
{:shortdesc}

![Clause contractuelle de protection des données dans l'Union européenne](images/icon_eumc.png)  Une **clause contractuelle de l'Union européenne (UE)** est un accord conçu pour protéger les données personnelles transférées de l'Union européenne ou de l'Espace économique européen (EEE) vers un pays tiers. La clause contractuelle de l'Union européenne (UE) est signée entre le client qui se trouve dans l'UE ou l'EEE (l'exportateur de données) et le
processeur de
données IBM qui se trouve dans le pays tiers (l'importateur de données). La clause [IBM
SaaS EU Model Clause](http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?subtype=ST&infotype=SA&htmlfid=KUJ12408USEN&attachment=KUJ12408USEN.PDF){: new_window} comprend les droits et les obligations de l'exportateur de données et de l'importateur de données, ainsi que les droits des personnes concernées. La clause IBM SaaS EU Model Clause garantit que les données personnelles, lorsqu'elles sont traitées dans un pays tiers, sont protégées de la même manière que dans l'UE ou l'EEE.

Pour les clients qui souhaitent transférer des données provenant de l'Espace économique européen (EEE) vers un pays hors de l'EEE,
{{site.data.keyword.Bluemix}} propose des clauses contractuelles européennes dans le formulaire approuvé par les autorités de protection
des données de la Commission européenne et de l'Union européenne. Les clauses contractuelles européennes garantissent aux clients européens que {{site.data.keyword.Bluemix_notm}} assure la confidentialité des
données requise partout dans le monde.

![Financial Industry Information Systems - FISC](images/FISC.gif) Pour les institutions bancaires et financières au Japon, les systèmes informatiques doivent avoir mis en place des procédures de sécurité, en accord avec les directives de sécurité établies par le FISC (Center for Financial Industry Information Systems). Les directives de sécurité du FISC sont imposées par l'agence japonaise FSA (Financial Services Agency), la banque BOJ (Bank of
Japan) et le FISC.

Vous trouverez un document d'auto-évaluation {{site.data.keyword.Bluemix_notm}} correspondant aux directives en matière de sécurité du
FISC, écrit en langue japonaise, sur le site [IBM Bluemix risk survey
results](https://www.ibm.com/cloud-computing/jp/ja/bluemix_fisc.html){: new_window}.

![ISO 27001/2](images/icon_iso27k1.png)  {{site.data.keyword.Bluemix_notm}} est certifié conformément aux **normes
ISO
(International Organization for Standardization) 27001 et 27002**, qui définissent les meilleures pratiques pour les
processus de gestion de la sécurité des informations. ISO
27001 est une norme de sécurité globale largement adoptée qui énonce les exigences pour les systèmes de gestion de la sécurité des informations. Elle
permet une approche systématique de la gestion des informations des entreprises et des clients en fonction d'évaluations de risque régulières. La norme la
plus récente, ISO/IEC 27001:2013, a été publiée le 25 septembre 2013 par **l'International Organization of Standardization (ISO) et la
commission électrotechnique internationale (CEI)** sous le partenariat ISO et CEI. La norme ISO 27001 spécifie les exigences en matière d'établissement, de mise en oeuvre et de documentation des systèmes de management de la sécurité de l'information (SMSI) et les exigences relatives à la mise en oeuvre des contrôles de sécurité, en fonction des besoins des organisations individuelles. La norme ISO 27002 explique en détail chaque contrôle de sécurité de la norme ISO 27001. La famille de normes ISO 27000 intègre un processus d'évaluation des risques et d'estimation des ressources, dans le but de protéger la confidentialité, l'intégrité et l'accessibilité des informations écrites, orales et électroniques.

Pour obtenir la certification ISO 27001:2013, une entreprise doit démontrer qu'elle suit une approche systématique et continue pour gérer les risques
en matière de sécurité des informations ayant un impact sur la confidentialité, l'intégrité et la disponibilité des informations des entreprises et des
clients. Cette norme met l'accent sur la mesure et l'évaluation des performances du système de gestion de la sécurité informatique d'une organisation et
inclut également des contrôles liés à la sécurité des informations, qui reposent sur des exigences système et d'autres exigences.

{{site.data.keyword.Bluemix_notm}} fait l'objet d'un audit par une firme indépendante et répond à toutes les exigences de la norme ISO 27001 : [Bluemix ISO 27001:2013 Certificate of Registration](ftp://public.dhe.ibm.com/cloud/bluemix/compliance/Bluemix_ISO27K1_WWCert_2016.pdf){: new_window}.

![PCI DSS](images/icon_pci.png) **Payment Card Industry (PCI) Data Security Standards (DSS)** est une norme de
sécurité des informations qui a été conçue pour protéger les données de carte de crédit. Elle s'applique à toutes les entités impliquées dans le traitement
de cartes de paiement, notamment les commerçants, les organismes de traitement, les émetteurs et les fournisseurs de services. Elle s'applique également à
toutes les autres entités qui stockent, traitent ou transmettent des données relatives aux titulaires de carte ou des données d'authentification sensibles.

Si vous stockez ou traitez des données de carte de crédit, la conformité à la norme Payment Card Industry (PCI) et la sécurité du réseau constituent
des préoccupations essentielles pour votre activité. Afin de garantir des normes cohérentes pour les commerçants, le conseil des normes de sécurité PCI
(Payment Card Industry Security Standards Council) a établi des normes de sécurité des données PCI. Celles-ci incorporent les meilleures pratiques de
protection des données sur les titulaires de carte et requièrent souvent la validation d'un évaluateur de sécurité qualifié (QSA) tiers. IBM aide les clients à satisfaire leurs besoins en matière de conformité PCI en fournissant une attestation de conformité émise par un évaluateur de
sécurité qualifié (QSA) indépendant. L'attestation de conformité peut être utilisée avec le rapport SOC 2 et la certification ISO 27001 afin de prouver que
l'infrastructure satisfait les contrôles PCI.

{{site.data.keyword.Bluemix}} procède à une évaluation PCI DSS annuelle à l'aide d'un évaluateur de sécurité qualifié (QSA) approuvé. {{site.data.keyword.Bluemix_notm}}
est compatible conformément à la norme PCI DSS version 3.1 au niveau de fournisseur de services 1, comme énoncé dans [Bluemix PCI DSS AOC](ftp://public.dhe.ibm.com/cloud/bluemix/compliance/IBM_Bluemix_PCI){: new_window}. Pour
des informations et de l'aide relatives à la conformité à la norme PCI DSS pour votre environnement {{site.data.keyword.Bluemix_notm}}, prenez
contact avec le service commercial
depuis la page [Contactez-nous](https://console.ng.bluemix.net/?direct=classic/#/contactUs/cloudOEPaneId=contactUs){: new_window}.

![SSAE16 SOC1/2/3](images/icon_aicpa.png) Les rapports **Service Organization Controls (SOC)** définissent l'évaluation des pratiques de contrôle interne exemplaires liées à la sécurité, l'accessibilité, l'intégrité du traitement, la confidentialité et la protection des données personnelles au sein d'une organisation de services. Ces rapports générés à partir du guide de l'AICPA (American Institute of Certified Public Accountants) comprennent les éléments suivants :
  * Supervision de l'organisation
  * Programme de gestion des fournisseurs
  * Processus internes de gouvernance d'entreprise et de gestion des risques
  * Régime réglementaire de surveillance

{{site.data.keyword.Bluemix_notm}} met à disposition des rapports SOC 1, SOC 2 et SOC 3. Pour plus d'informations, prenez contact avec l'[équipe commerciale {{site.data.keyword.Bluemix_notm}}](mailto:bmxcert1@us.ibm.com){:new_window}.

![HIPAA](images/icon_hipaa.png) La loi Health Insurance Portability and Accountability Act (HIPAA), adoptée par le congrès
américain en 1996, concerne la couverture d'assurance maladie des employés qui ont perdu leur travail. Elle est régie et appliquée par le bureau des droits civiques (Office of Civil Rights) et le département de la santé et des services sociaux (Department of
Health and Human Services) aux
Etats-Unis. Elle englobe la réglementation de la
loi de 1996, ainsi que des exigences de confidentialité de la loi Health Information Technology for Economic and Clinical Health (HITECH) Act de 2009. {{site.data.keyword.Bluemix_notm}}
satisfait toutes les exigences de la loi HIPAA en ce qui concerne les centres de données ou les fournisseurs de services.

Pour plus d'informations ou de l'aide afin d'assurer la conformité à la loi HIPAA pour votre environnement
Bluemix, de la certifier et de la conserver, prenez contact avec le [service
commercial](mailto:cloudplatform_compliance@us.ibm.com){:new_window} de {{site.data.keyword.Bluemix_notm}}.

![ISO 27017](images/icon_ISO27017.png) La norme ISO/IEC 27017:2015 fournit des directives pour les contrôles de sécurité des
informations
applicables à la mise à disposition et à l'utilisation des services de cloud. De plus, elle fournit des conseils d'implémentation pour les fournisseurs de
service de cloud et les clients de service de cloud. La norme ISO 27017 fournit des conseils d'implémentation pour les contrôles pertinents qui sont spécifiés
dans la norme ISO/IEC 27002, ainsi que des contrôles et des conseils supplémentaires concernant spécifiquement les services de cloud.

L'alignement de {{site.data.keyword.Bluemix_notm}} avec la norme ISO 27017:2015 démontre qu'IBM a mis en place un système sophistiqué
de contrôles propres aux clouds. De plus, elle révèle qu'IBM s'est engagée à proposer la meilleure infrastructure sous forme de
services (IaaS), dans le monde entier.

![ISO 27018](images/icon_ISO27018.png) La norme ISO 27018:2014 définit des objectifs de contrôle, des contrôles et des directives
communément acceptés pour l'implémentation des mesures permettant de protéger les informations identifiant la personne. Ces mesures sont conformes aux
principes de confidentialité de la norme ISO 29100 pour l'environnement de cloud computing public.

En particulier, la norme ISO 27018:2014 spécifie des directives reposant sur la norme ISO 27002. Celles-ci prennent en compte les exigences
réglementaires relatives à la protection des informations identifiant la personne, qui peuvent être applicables dans le contexte des environnements de
risque en matière de sécurité des informations d'un fournisseur de services de cloud publics.

![Cloud Security Alliance – STAR Registrant](images/icon_CSA.png) Cloud Security Alliance est un organisme à but non lucratif dont
la mission est de promouvoir l'utilisation des meilleures pratiques afin de garantir la sécurité dans le cloud computing. L'un des mécanismes qu'il
utilise dans le cadre de sa mission est le mécanisme STAR (Security, Trust, and Assurance Registry). Il s'agit d'un registre gratuit, accessible
publiquement, qui document les contrôles de sécurité mis à disposition par diverses offres de cloud computing.

![Normes CJIS](images/icon_CJIS.png) Le département Criminal Justice Information Systems (CJIS) est un département du bureau
fédéral d'investigation (FBI) du ministère de la justice américain. Il a créé et publié des règles de sécurité (CJISD-ITS-DOC-08140-5.4). Celles-ci énoncent les exigences en matière de sécurité des informations, les
directives et les accords minimaux reflétant la volonté des organismes d'application de la loi et de justice pénale de protéger les sources, la
transmission, le stockage et la génération de l'information en matière de justice pénale.

### Conformité de la plateforme et des services
Le tableau ci-dessous indique quels sont les services dans {{site.data.keyword.Bluemix_notm}} qui sont conformes à chaque norme.

|Composants {{site.data.keyword.Bluemix_notm}}		|FISC		|ISO 27001	|PCI |SOC 2 Type 1		|
|:----------------------|:---------:|:---------:|:---------:|:---------:|
|Plateforme {{site.data.keyword.Bluemix_notm}}		|O			|O	|O	|O	|
|{{site.data.keyword.APIM}}			|O	|O |O	|			|
|{{site.data.keyword.autoscaling}}			|O	|O |O	|			|
|{{site.data.keyword.bigicloudst}}			|O |O |	|O |
|{{site.data.keyword.cloudant}}				|O |O |	|O	|
|{{site.data.keyword.dashdbshort}}			|O	|O	|	|O	|
|{{site.data.keyword.datacshort}}			|O	|O	|O	|			|
|{{site.data.keyword.jazzhub_short}}					|O	|O	|	|			|
|{{site.data.keyword.containerlong}}			|O		|O	|	|			|
|{{site.data.keyword.mql}}				|O	|O	|O	|	 		|
|{{site.data.keyword.SecureGateway}}			|O	|O |	|	 		|
|{{site.data.keyword.sescashort}}     |O |O |O	|  |
{: caption="Table 1. Platform and service compliance" caption-side="top"}

# Liens connexes
{: #rellinks}

## Liens connexes
{: #general}

* [Sécurité d'IBM SaaS](http://www.ibm.com/cloud-computing/built-on-cloud/saas-security)
* [Initiation à Single Sign On](/docs/services/SingleSignOn/index.html)


text:
title: Date.prototype.setHours
localeTitle: Date.prototype.setHours
---
## Date.prototype.setHours

هذا هو كعب. [ساعد مجتمعنا على توسيعه](https://github.com/freecodecamp/guides/tree/master/src/pages/javascript/standard-objects/date/date-prototype-sethours/index.md) .

[سيساعدك دليل النمط السريع هذا على ضمان قبول طلب السحب](https://github.com/freecodecamp/guides/blob/master/README.md) .

#### معلومات اكثر: