text:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/list.h>
#include <linux/device.h>
#include <linux/delay.h>
#include <linux/completion.h>

#include <asm/ccwdev.h>
#include <asm/idals.h>
#include <asm/chpid.h>
#include <asm/fcx.h>

#include "cio.h"
#include "cio_debug.h"
#include "css.h"
#include "chsc.h"
#include "device.h"
#include "chp.h"

/**
 * ccw_device_set_options_mask() - set some options and unset the rest
 * @cdev: device for which the options are to be set
 * @flags: options to be set
 *
 * All flags specified in @flags are set, all flags not specified in @flags
 * are cleared.
 * Returns:
 *   %0 on success, -%EINVAL on an invalid flag combination.
 */
int ccw_device_set_options_mask(struct ccw_device *cdev, unsigned long flags)
{
       /*
	* The flag usage is mutal exclusive ...
	*/
	if ((flags & CCWDEV_EARLY_NOTIFICATION) &&
	    (flags & CCWDEV_REPORT_ALL))
		return -EINVAL;
	cdev->private->options.fast = (flags & CCWDEV_EARLY_NOTIFICATION) != 0;
	cdev->private->options.repall = (flags & CCWDEV_REPORT_ALL) != 0;
	cdev->private->options.pgroup = (flags & CCWDEV_DO_PATHGROUP) != 0;
	cdev->private->options.force = (flags & CCWDEV_ALLOW_FORCE) != 0;
	cdev->private->options.mpath = (flags & CCWDEV_DO_MULTIPATH) != 0;
	return 0;
}

/**
 * ccw_device_set_options() - set some options
 * @cdev: device for which the options are to be set
 * @flags: options to be set
 *
 * All flags specified in @flags are set, the remainder is left untouched.
 * Returns:
 *   %0 on success, -%EINVAL if an invalid flag combination would ensue.
 */
int ccw_device_set_options(struct ccw_device *cdev, unsigned long flags)
{
       /*
	* The flag usage is mutal exclusive ...
	*/
	if (((flags & CCWDEV_EARLY_NOTIFICATION) &&
	    (flags & CCWDEV_REPORT_ALL)) ||
	    ((flags & CCWDEV_EARLY_NOTIFICATION) &&
	     cdev->private->options.repall) ||
	    ((flags & CCWDEV_REPORT_ALL) &&
	     cdev->private->options.fast))
		return -EINVAL;
	cdev->private->options.fast |= (flags & CCWDEV_EARLY_NOTIFICATION) != 0;
	cdev->private->options.repall |= (flags & CCWDEV_REPORT_ALL) != 0;
	cdev->private->options.pgroup |= (flags & CCWDEV_DO_PATHGROUP) != 0;
	cdev->private->options.force |= (flags & CCWDEV_ALLOW_FORCE) != 0;
	cdev->private->options.mpath |= (flags & CCWDEV_DO_MULTIPATH) != 0;
	return 0;
}

/**
 * ccw_device_clear_options() - clear some options
 * @cdev: device for which the options are to be cleared
 * @flags: options to be cleared
 *
 * All flags specified in @flags are cleared, the remainder is left untouched.
 */
void ccw_device_clear_options(struct ccw_device *cdev, unsigned long flags)
{
	cdev->private->options.fast &= (flags & CCWDEV_EARLY_NOTIFICATION) == 0;
	cdev->private->options.repall &= (flags & CCWDEV_REPORT_ALL) == 0;
	cdev->private->options.pgroup &= (flags & CCWDEV_DO_PATHGROUP) == 0;
	cdev->private->options.force &= (flags & CCWDEV_ALLOW_FORCE) == 0;
	cdev->private->options.mpath &= (flags & CCWDEV_DO_MULTIPATH) == 0;
}

/**
 * ccw_device_is_pathgroup - determine if paths to this device are grouped
 * @cdev: ccw device
 *
 * Return non-zero if there is a path group, zero otherwise.
 */
int ccw_device_is_pathgroup(struct ccw_device *cdev)
{
	return cdev->private->flags.pgroup;
}
EXPORT_SYMBOL(ccw_device_is_pathgroup);

/**
 * ccw_device_is_multipath - determine if device is operating in multipath mode
 * @cdev: ccw device
 *
 * Return non-zero if device is operating in multipath mode, zero otherwise.
 */
int ccw_device_is_multipath(struct ccw_device *cdev)
{
	return cdev->private->flags.mpath;
}
EXPORT_SYMBOL(ccw_device_is_multipath);

/**
 * ccw_device_clear() - terminate I/O request processing
 * @cdev: target ccw device
 * @intparm: interruption parameter; value is only used if no I/O is
 *	     outstanding, otherwise the intparm associated with the I/O request
 *	     is returned
 *
 * ccw_device_clear() calls csch on @cdev's subchannel.
 * Returns:
 *  %0 on success,
 *  -%ENODEV on device not operational,
 *  -%EINVAL on invalid device state.
 * Context:
 *  Interrupts disabled, ccw device lock held
 */
int ccw_device_clear(struct ccw_device *cdev, unsigned long intparm)
{
	struct subchannel *sch;
	int ret;

	if (!cdev || !cdev->dev.parent)
		return -ENODEV;
	sch = to_subchannel(cdev->dev.parent);
	if (!sch->schib.pmcw.ena)
		return -EINVAL;
	if (cdev->private->state == DEV_STATE_NOT_OPER)
		return -ENODEV;
	if (cdev->private->state != DEV_STATE_ONLINE &&
	    cdev->private->state != DEV_STATE_W4SENSE)
		return -EINVAL;

	ret = cio_clear(sch);
	if (ret == 0)
		cdev->private->intparm = intparm;
	return ret;
}

/**
 * ccw_device_start_key() - start a s390 channel program with key
 * @cdev: target ccw device
 * @cpa: logical start address of channel program
 * @intparm: user specific interruption parameter; will be presented back to
 *	     @cdev's interrupt handler. Allows a device driver to associate
 *	     the interrupt with a particular I/O request.
 * @lpm: defines the channel path to be used for a specific I/O request. A
 *	 value of 0 will make cio use the opm.
 * @key: storage key to be used for the I/O
 * @flags: additional flags; defines the action to be performed for I/O
 *	   processing.
 *
 * Start a S/390 channel program. When the interrupt arrives, the
 * IRQ handler is called, either immediately, delayed (dev-end missing,
 * or sense required) or never (no IRQ handler registered).
 * Returns:
 *  %0, if the operation was successful;
 *  -%EBUSY, if the device is busy, or status pending;
 *  -%EACCES, if no path specified in @lpm is operational;
 *  -%ENODEV, if the device is not operational.
 * Context:
 *  Interrupts disabled, ccw device lock held
 */
int ccw_device_start_key(struct ccw_device *cdev, struct ccw1 *cpa,
			 unsigned long intparm, __u8 lpm, __u8 key,
			 unsigned long flags)
{
	struct subchannel *sch;
	int ret;

	if (!cdev || !cdev->dev.parent)
		return -ENODEV;
	sch = to_subchannel(cdev->dev.parent);
	if (!sch->schib.pmcw.ena)
		return -EINVAL;
	if (cdev->private->state == DEV_STATE_NOT_OPER)
		return -ENODEV;
	if (cdev->private->state == DEV_STATE_VERIFY) {
		/* Remember to fake irb when finished. */
		if (!cdev->private->flags.fake_irb) {
			cdev->private->flags.fake_irb = FAKE_CMD_IRB;
			cdev->private->intparm = intparm;
			return 0;
		} else
			/* There's already a fake I/O around. */
			return -EBUSY;
	}
	if (cdev->private->state != DEV_STATE_ONLINE ||
	    ((sch->schib.scsw.cmd.stctl & SCSW_STCTL_PRIM_STATUS) &&
	     !(sch->schib.scsw.cmd.stctl & SCSW_STCTL_SEC_STATUS)) ||
	    cdev->private->flags.doverify)
		return -EBUSY;
	ret = cio_set_options (sch, flags);
	if (ret)
		return ret;
	/* Adjust requested path mask to exclude unusable paths. */
	if (lpm) {
		lpm &= sch->lpm;
		if (lpm == 0)
			return -EACCES;
	}
	ret = cio_start_key (sch, cpa, lpm, key);
	switch (ret) {
	case 0:
		cdev->private->intparm = intparm;
		break;
	case -EACCES:
	case -ENODEV:
		dev_fsm_event(cdev, DEV_EVENT_VERIFY);
		break;
	}
	return ret;
}

/**
 * ccw_device_start_timeout_key() - start a s390 channel program with timeout and key
 * @cdev: target ccw device
 * @cpa: logical start address of channel program
 * @intparm: user specific interruption parameter; will be presented back to
 *	     @cdev's interrupt handler. Allows a device driver to associate
 *	     the interrupt with a particular I/O request.
 * @lpm: defines the channel path to be used for a specific I/O request. A
 *	 value of 0 will make cio use the opm.
 * @key: storage key to be used for the I/O
 * @flags: additional flags; defines the action to be performed for I/O
 *	   processing.
 * @expires: timeout value in jiffies
 *
 * Start a S/390 channel program. When the interrupt arrives, the
 * IRQ handler is called, either immediately, delayed (dev-end missing,
 * or sense required) or never (no IRQ handler registered).
 * This function notifies the device driver if the channel program has not
 * completed during the time specified by @expires. If a timeout occurs, the
 * channel program is terminated via xsch, hsch or csch, and the device's
 * interrupt handler will be called with an irb containing ERR_PTR(-%ETIMEDOUT).
 * Returns:
 *  %0, if the operation was successful;
 *  -%EBUSY, if the device is busy, or status pending;
 *  -%EACCES, if no path specified in @lpm is operational;
 *  -%ENODEV, if the device is not operational.
 * Context:
 *  Interrupts disabled, ccw device lock held
 */
int ccw_device_start_timeout_key(struct ccw_device *cdev, struct ccw1 *cpa,
				 unsigned long intparm, __u8 lpm, __u8 key,
				 unsigned long flags, int expires)
{
	int ret;

	if (!cdev)
		return -ENODEV;
	ccw_device_set_timeout(cdev, expires);
	ret = ccw_device_start_key(cdev, cpa, intparm, lpm, key, flags);
	if (ret != 0)
		ccw_device_set_timeout(cdev, 0);
	return ret;
}

/**
 * ccw_device_start() - start a s390 channel program
 * @cdev: target ccw device
 * @cpa: logical start address of channel program
 * @intparm: user specific interruption parameter; will be presented back to
 *	     @cdev's interrupt handler. Allows a device driver to associate
 *	     the interrupt with a particular I/O request.
 * @lpm: defines the channel path to be used for a specific I/O request. A
 *	 value of 0 will make cio use the opm.
 * @flags: additional flags; defines the action to be performed for I/O
 *	   processing.
 *
 * Start a S/390 channel program. When the interrupt arrives, the
 * IRQ handler is called, either immediately, delayed (dev-end missing,
 * or sense required) or never (no IRQ handler registered).
 * Returns:
 *  %0, if the operation was successful;
 *  -%EBUSY, if the device is busy, or status pending;
 *  -%EACCES, if no path specified in @lpm is operational;
 *  -%ENODEV, if the device is not operational.
 * Context:
 *  Interrupts disabled, ccw device lock held
 */
int ccw_device_start(struct ccw_device *cdev, struct ccw1 *cpa,
		     unsigned long intparm, __u8 lpm, unsigned long flags)
{
	return ccw_device_start_key(cdev, cpa, intparm, lpm,
				    PAGE_DEFAULT_KEY, flags);
}

/**
 * ccw_device_start_timeout() - start a s390 channel program with timeout
 * @cdev: target ccw device
 * @cpa: logical start address of channel program
 * @intparm: user specific interruption parameter; will be presented back to
 *	     @cdev's interrupt handler. Allows a device driver to associate
 *	     the interrupt with a particular I/O request.
 * @lpm: defines the channel path to be used for a specific I/O request. A
 *	 value of 0 will make cio use the opm.
 * @flags: additional flags; defines the action to be performed for I/O
 *	   processing.
 * @expires: timeout value in jiffies
 *
 * Start a S/390 channel program. When the interrupt arrives, the
 * IRQ handler is called, either immediately, delayed (dev-end missing,
 * or sense required) or never (no IRQ handler registered).
 * This function notifies the device driver if the channel program has not
 * completed during the time specified by @expires. If a timeout occurs, the
 * channel program is terminated via xsch, hsch or csch, and the device's
 * interrupt handler will be called with an irb containing ERR_PTR(-%ETIMEDOUT).
 * Returns:
 *  %0, if the operation was successful;
 *  -%EBUSY, if the device is busy, or status pending;
 *  -%EACCES, if no path specified in @lpm is operational;
 *  -%ENODEV, if the device is not operational.
 * Context:
 *  Interrupts disabled, ccw device lock held
 */
int ccw_device_start_timeout(struct ccw_device *cdev, struct ccw1 *cpa,
			     unsigned long intparm, __u8 lpm,
			     unsigned long flags, int expires)
{
	return ccw_device_start_timeout_key(cdev, cpa, intparm, lpm,
					    PAGE_DEFAULT_KEY, flags,
					    expires);
}

/**
 * ccw_device_halt() - halt I/O request processing
 * @cdev: target ccw device
 * @intparm: interruption parameter; value is only used if no I/O is
 *	     outstanding, otherwise the intparm associated with the I/O request
 *	     is returned
 *
 * ccw_device_halt() calls hsch on @cdev's subchannel.
 * Returns:
 *  %0 on success,
 *  -%ENODEV on device not operational,
 *  -%EINVAL on invalid device state,
 *  -%EBUSY on device busy or interrupt pending.
 * Context:
 *  Interrupts disabled, ccw device lock held
 */
int ccw_device_halt(struct ccw_device *cdev, unsigned long intparm)
{
	struct subchannel *sch;
	int ret;

	if (!cdev || !cdev->dev.parent)
		return -ENODEV;
	sch = to_subchannel(cdev->dev.parent);
	if (!sch->schib.pmcw.ena)
		return -EINVAL;
	if (cdev->private->state == DEV_STATE_NOT_OPER)
		return -ENODEV;
	if (cdev->private->state != DEV_STATE_ONLINE &&
	    cdev->private->state != DEV_STATE_W4SENSE)
		return -EINVAL;

	ret = cio_halt(sch);
	if (ret == 0)
		cdev->private->intparm = intparm;
	return ret;
}

/**
 * ccw_device_resume() - resume channel program execution
 * @cdev: target ccw device
 *
 * ccw_device_resume() calls rsch on @cdev's subchannel.
 * Returns:
 *  %0 on success,
 *  -%ENODEV on device not operational,
 *  -%EINVAL on invalid device state,
 *  -%EBUSY on device busy or interrupt pending.
 * Context:
 *  Interrupts disabled, ccw device lock held
 */
int ccw_device_resume(struct ccw_device *cdev)
{
	struct subchannel *sch;

	if (!cdev || !cdev->dev.parent)
		return -ENODEV;
	sch = to_subchannel(cdev->dev.parent);
	if (!sch->schib.pmcw.ena)
		return -EINVAL;
	if (cdev->private->state == DEV_STATE_NOT_OPER)
		return -ENODEV;
	if (cdev->private->state != DEV_STATE_ONLINE ||
	    !(sch->schib.scsw.cmd.actl & SCSW_ACTL_SUSPENDED))
		return -EINVAL;
	return cio_resume(sch);
}

/*
 * Pass interrupt to device driver.
 */
int
ccw_device_call_handler(struct ccw_device *cdev)
{
	unsigned int stctl;
	int ending_status;

	/*
	 * we allow for the device action handler if .
	 *  - we received ending status
	 *  - the action handler requested to see all interrupts
	 *  - we received an intermediate status
	 *  - fast notification was requested (primary status)
	 *  - unsolicited interrupts
	 */
	stctl = scsw_stctl(&cdev->private->irb.scsw);
	ending_status = (stctl & SCSW_STCTL_SEC_STATUS) ||
		(stctl == (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND)) ||
		(stctl == SCSW_STCTL_STATUS_PEND);
	if (!ending_status &&
	    !cdev->private->options.repall &&
	    !(stctl & SCSW_STCTL_INTER_STATUS) &&
	    !(cdev->private->options.fast &&
	      (stctl & SCSW_STCTL_PRIM_STATUS)))
		return 0;

	/* Clear pending timers for device driver initiated I/O. */
	if (ending_status)
		ccw_device_set_timeout(cdev, 0);
	/*
	 * Now we are ready to call the device driver interrupt handler.
	 */
	if (cdev->handler)
		cdev->handler(cdev, cdev->private->intparm,
			      &cdev->private->irb);

	/*
	 * Clear the old and now useless interrupt response block.
	 */
	memset(&cdev->private->irb, 0, sizeof(struct irb));

	return 1;
}

/**
 * ccw_device_get_ciw() - Search for CIW command in extended sense data.
 * @cdev: ccw device to inspect
 * @ct: command type to look for
 *
 * During SenseID, command information words (CIWs) describing special
 * commands available to the device may have been stored in the extended
 * sense data. This function searches for CIWs of a specified command
 * type in the extended sense data.
 * Returns:
 *  %NULL if no extended sense data has been stored or if no CIW of the
 *  specified command type could be found,
 *  else a pointer to the CIW of the specified command type.
 */
struct ciw *ccw_device_get_ciw(struct ccw_device *cdev, __u32 ct)
{
	int ciw_cnt;

	if (cdev->private->flags.esid == 0)
		return NULL;
	for (ciw_cnt = 0; ciw_cnt < MAX_CIWS; ciw_cnt++)
		if (cdev->private->senseid.ciw[ciw_cnt].ct == ct)
			return cdev->private->senseid.ciw + ciw_cnt;
	return NULL;
}

/**
 * ccw_device_get_path_mask() - get currently available paths
 * @cdev: ccw device to be queried
 * Returns:
 *  %0 if no subchannel for the device is available,
 *  else the mask of currently available paths for the ccw device's subchannel.
 */
__u8 ccw_device_get_path_mask(struct ccw_device *cdev)
{
	struct subchannel *sch;

	if (!cdev->dev.parent)
		return 0;

	sch = to_subchannel(cdev->dev.parent);
	return sch->lpm;
}

struct stlck_data {
	struct completion done;
	int rc;
};

void ccw_device_stlck_done(struct ccw_device *cdev, void *data, int rc)
{
	struct stlck_data *sdata = data;

	sdata->rc = rc;
	complete(&sdata->done);
}

/*
 * Perform unconditional reserve + release.
 */
int ccw_device_stlck(struct ccw_device *cdev)
{
	struct subchannel *sch = to_subchannel(cdev->dev.parent);
	struct stlck_data data;
	u8 *buffer;
	int rc;

	/* Check if steal lock operation is valid for this device. */
	if (cdev->drv) {
		if (!cdev->private->options.force)
			return -EINVAL;
	}
	buffer = kzalloc(64, GFP_DMA | GFP_KERNEL);
	if (!buffer)
		return -ENOMEM;
	init_completion(&data.done);
	data.rc = -EIO;
	spin_lock_irq(sch->lock);
	rc = cio_enable_subchannel(sch, (u32) (addr_t) sch);
	if (rc)
		goto out_unlock;
	/* Perform operation. */
	cdev->private->state = DEV_STATE_STEAL_LOCK,
	ccw_device_stlck_start(cdev, &data, &buffer[0], &buffer[32]);
	spin_unlock_irq(sch->lock);
	/* Wait for operation to finish. */
	if (wait_for_completion_interruptible(&data.done)) {
		/* Got a signal. */
		spin_lock_irq(sch->lock);
		ccw_request_cancel(cdev);
		spin_unlock_irq(sch->lock);
		wait_for_completion(&data.done);
	}
	rc = data.rc;
	/* Check results. */
	spin_lock_irq(sch->lock);
	cio_disable_subchannel(sch);
	cdev->private->state = DEV_STATE_BOXED;
out_unlock:
	spin_unlock_irq(sch->lock);
	kfree(buffer);

	return rc;
}

void *ccw_device_get_chp_desc(struct ccw_device *cdev, int chp_no)
{
	struct subchannel *sch;
	struct chp_id chpid;

	sch = to_subchannel(cdev->dev.parent);
	chp_id_init(&chpid);
	chpid.id = sch->schib.pmcw.chpid[chp_no];
	return chp_get_chp_desc(chpid);
}

/**
 * ccw_device_get_id - obtain a ccw device id
 * @cdev: device to obtain the id for
 * @dev_id: where to fill in the values
 */
void ccw_device_get_id(struct ccw_device *cdev, struct ccw_dev_id *dev_id)
{
	*dev_id = cdev->private->dev_id;
}
EXPORT_SYMBOL(ccw_device_get_id);

/**
 * ccw_device_tm_start_key - perform start function
 * @cdev: ccw device on which to perform the start function
 * @tcw: transport-command word to be started
 * @intparm: user defined parameter to be passed to the interrupt handler
 * @lpm: mask of paths to use
 * @key: storage key to use for storage access
 *
 * Start the tcw on the given ccw device. Return zero on success, non-zero
 * otherwise.
 */
int ccw_device_tm_start_key(struct ccw_device *cdev, struct tcw *tcw,
			    unsigned long intparm, u8 lpm, u8 key)
{
	struct subchannel *sch;
	int rc;

	sch = to_subchannel(cdev->dev.parent);
	if (!sch->schib.pmcw.ena)
		return -EINVAL;
	if (cdev->private->state == DEV_STATE_VERIFY) {
		/* Remember to fake irb when finished. */
		if (!cdev->private->flags.fake_irb) {
			cdev->private->flags.fake_irb = FAKE_TM_IRB;
			cdev->private->intparm = intparm;
			return 0;
		} else
			/* There's already a fake I/O around. */
			return -EBUSY;
	}
	if (cdev->private->state != DEV_STATE_ONLINE)
		return -EIO;
	/* Adjust requested path mask to exclude unusable paths. */
	if (lpm) {
		lpm &= sch->lpm;
		if (lpm == 0)
			return -EACCES;
	}
	rc = cio_tm_start_key(sch, tcw, lpm, key);
	if (rc == 0)
		cdev->private->intparm = intparm;
	return rc;
}
EXPORT_SYMBOL(ccw_device_tm_start_key);

/**
 * ccw_device_tm_start_timeout_key - perform start function
 * @cdev: ccw device on which to perform the start function
 * @tcw: transport-command word to be started
 * @intparm: user defined parameter to be passed to the interrupt handler
 * @lpm: mask of paths to use
 * @key: storage key to use for storage access
 * @expires: time span in jiffies after which to abort request
 *
 * Start the tcw on the given ccw device. Return zero on success, non-zero
 * otherwise.
 */
int ccw_device_tm_start_timeout_key(struct ccw_device *cdev, struct tcw *tcw,
				    unsigned long intparm, u8 lpm, u8 key,
				    int expires)
{
	int ret;

	ccw_device_set_timeout(cdev, expires);
	ret = ccw_device_tm_start_key(cdev, tcw, intparm, lpm, key);
	if (ret != 0)
		ccw_device_set_timeout(cdev, 0);
	return ret;
}
EXPORT_SYMBOL(ccw_device_tm_start_timeout_key);

/**
 * ccw_device_tm_start - perform start function
 * @cdev: ccw device on which to perform the start function
 * @tcw: transport-command word to be started
 * @intparm: user defined parameter to be passed to the interrupt handler
 * @lpm: mask of paths to use
 *
 * Start the tcw on the given ccw device. Return zero on success, non-zero
 * otherwise.
 */
int ccw_device_tm_start(struct ccw_device *cdev, struct tcw *tcw,
			unsigned long intparm, u8 lpm)
{
	return ccw_device_tm_start_key(cdev, tcw, intparm, lpm,
				       PAGE_DEFAULT_KEY);
}
EXPORT_SYMBOL(ccw_device_tm_start);

/**
 * ccw_device_tm_start_timeout - perform start function
 * @cdev: ccw device on which to perform the start function
 * @tcw: transport-command word to be started
 * @intparm: user defined parameter to be passed to the interrupt handler
 * @lpm: mask of paths to use
 * @expires: time span in jiffies after which to abort request
 *
 * Start the tcw on the given ccw device. Return zero on success, non-zero
 * otherwise.
 */
int ccw_device_tm_start_timeout(struct ccw_device *cdev, struct tcw *tcw,
			       unsigned long intparm, u8 lpm, int expires)
{
	return ccw_device_tm_start_timeout_key(cdev, tcw, intparm, lpm,
					       PAGE_DEFAULT_KEY, expires);
}
EXPORT_SYMBOL(ccw_device_tm_start_timeout);

/**
 * ccw_device_get_mdc - accumulate max data count
 * @cdev: ccw device for which the max data count is accumulated
 * @mask: mask of paths to use
 *
 * Return the number of 64K-bytes blocks all paths at least support
 * for a transport command. Return values <= 0 indicate failures.
 */
int ccw_device_get_mdc(struct ccw_device *cdev, u8 mask)
{
	struct subchannel *sch = to_subchannel(cdev->dev.parent);
	struct channel_path *chp;
	struct chp_id chpid;
	int mdc = 0, i;

	/* Adjust requested path mask to excluded varied off paths. */
	if (mask)
		mask &= sch->lpm;
	else
		mask = sch->lpm;

	chp_id_init(&chpid);
	for (i = 0; i < 8; i++) {
		if (!(mask & (0x80 >> i)))
			continue;
		chpid.id = sch->schib.pmcw.chpid[i];
		chp = chpid_to_chp(chpid);
		if (!chp)
			continue;

		mutex_lock(&chp->lock);
		if (!chp->desc_fmt1.f) {
			mutex_unlock(&chp->lock);
			return 0;
		}
		if (!chp->desc_fmt1.r)
			mdc = 1;
		mdc = mdc ? min_t(int, mdc, chp->desc_fmt1.mdc) :
			    chp->desc_fmt1.mdc;
		mutex_unlock(&chp->lock);
	}

	return mdc;
}
EXPORT_SYMBOL(ccw_device_get_mdc);

/**
 * ccw_device_tm_intrg - perform interrogate function
 * @cdev: ccw device on which to perform the interrogate function
 *
 * Perform an interrogate function on the given ccw device. Return zero on
 * success, non-zero otherwise.
 */
int ccw_device_tm_intrg(struct ccw_device *cdev)
{
	struct subchannel *sch = to_subchannel(cdev->dev.parent);

	if (!sch->schib.pmcw.ena)
		return -EINVAL;
	if (cdev->private->state != DEV_STATE_ONLINE)
		return -EIO;
	if (!scsw_is_tm(&sch->schib.scsw) ||
	    !(scsw_actl(&sch->schib.scsw) & SCSW_ACTL_START_PEND))
		return -EINVAL;
	return cio_tm_intrg(sch);
}
EXPORT_SYMBOL(ccw_device_tm_intrg);

/**
 * ccw_device_get_schid - obtain a subchannel id
 * @cdev: device to obtain the id for
 * @schid: where to fill in the values
 */
void ccw_device_get_schid(struct ccw_device *cdev, struct subchannel_id *schid)
{
	struct subchannel *sch = to_subchannel(cdev->dev.parent);

	*schid = sch->schid;
}
EXPORT_SYMBOL_GPL(ccw_device_get_schid);

MODULE_LICENSE("GPL");
EXPORT_SYMBOL(ccw_device_set_options_mask);
EXPORT_SYMBOL(ccw_device_set_options);
EXPORT_SYMBOL(ccw_device_clear_options);
EXPORT_SYMBOL(ccw_device_clear);
EXPORT_SYMBOL(ccw_device_halt);
EXPORT_SYMBOL(ccw_device_resume);
EXPORT_SYMBOL(ccw_device_start_timeout);
EXPORT_SYMBOL(ccw_device_start);
EXPORT_SYMBOL(ccw_device_start_timeout_key);
EXPORT_SYMBOL(ccw_device_start_key);
EXPORT_SYMBOL(ccw_device_get_ciw);
EXPORT_SYMBOL(ccw_device_get_path_mask);
EXPORT_SYMBOL_GPL(ccw_device_get_chp_desc);

redpajama_set_name: RedPajamaGithub


MEX is well aware that not all our customers have the capacity or desire to host their system internally and shoulder the IT costs and security burden. To help out our customers we offer a Data Hosting service that utilises the worlds most trusted hosting provider, Microsoft Azure.
If you don't want the hassle and added costs of hosting and maintaining your MEX system, then MEX Data Hosting is the perfect option for you.
In this article we discuss the option of integrating Active Directory onto a hosted version of MEX.
This year has seen a vast migration of customers from their own servers up to the MEX Data Hosting Service. So much so that 1 in 5 of our customers now relies on this service to help them keep their data safe, accessible and available anywhere and at any time.
Introducing the MEX Data Hosting Service Status page to provide real-time updates on the service to customers.
When looking at Data Hosting options there are a few things you need to consider to ensure that the option you have chosen is safe, accessible and lives up to your expectations.


Dog training is a visual thing and sometimes reading the book is harder than. There are a lot of methods on how to train your Wonderful Small Dog House Picture Inspirations Some methods are very effective but can be abused if the wrong person uses them. Now, a more positive approach in training methods has become popular. A lot of people use these methods not only because are they supported by scientific research and data, but they apply them because they work. The methods of using older style or traditional force based training methods are best to avoid. Use choke chains or jerk and pull methods are not recommended. There should no need for YOU to resort to outdated and violent training methods. Also make a point of reading up on dog behavior training methods. Try to use positive reinforcement training methods, including the use of balls, toys, treats and any other inducements that may motivate the dog.
Gorgeous Pictures Of Caucasian Dogs Picture Gallery is inspiring picture labelled Dog, upload on July 4, 2016 and has size 549 x 502 px.
Shih Tzu Picture Collection1 is pretty image inside Dog, upload on February 6, 2017 and has size 816 x 616 px.
Beautiful Bluetick Coonhound Image Gallery is pretty photo under Dog, posted on August 21, 2016 and has size 1200 x 801 px.
Breathtaking Australian Shepherd Red Merle Picture Collection is lovely picture labelled Dog, posted on July 4, 2016 and has size 736 x 981 px.


text:
Aase Hansen (13. januar 1935 i Vigerslev ved Søndersø – 25. februar 1993) var en dansk skuespillerinde.

Hun var elev af Paula Illemann Feder og blev uddannet fra skuespillerskolen ved Odense Teater i 1956. Efterfølgende havde hun roller på Andelsteatret, Aalborg Teater og Fiolteatret.

Filmografi
 Støv for alle pengene (1963)
 Ta' det som en mand, frue (1975)
 Tro, håb og kærlighed (1984)
 Isolde (1989)
 Sirup (1990)
 Det forsømte forår (1993)

Eksterne henvisninger

Skuespillere fra Danmark
Robertprisen for årets kvindelige birolle

redpajama_set_name: RedPajamaWikipedia


An impressive 4 bedroom detached split level property enjoying an enviable position with attractive, extensive gardens leading onto The Reabrook. Accommodation over four levels offers: Living Room, Dining Room, Spacious Conservatory, Study, Kitchen, Cloakroom/WC, 4 Large Bedrooms, Master Bedroom with Shower Unit and Wash basin, 4 Piece Bathroom, Garage And Ample Driveway Parking. GCH, DG, Convenient For Excellent Village Amenities. No Upward Chain - Early Viewing Is Highly Recommended.
Recessed porch, double glazed entrance door with matching side screen.
Double radiator, staircase leads down to Lower Ground Floor Inner Hall, staircase leads to First Floor Landing.
Fitted with contemporary white suite including wash basin, WC, vanity surface with tiled surround, cupboard and drawers beneath, ceramic tile floor, radiator, double glazed window.
Radiator, double glazed window enjoying open front outlet, plate rack.
Attractively fitted with cream gloss fronted units, wood effect laminated work surface, ample space for appliances, windows to the rear and side, door to rear garden.
A delightful room with large double glazed patio doors providing view over and access glorious extensive gardens, automatic sun awning over, stone fireplace with fuel effect gas fire inset, double radiator, useful walk-in store with radiator.
Victorian style of uPVC double glazed construction with pitched polycarbonate roof, electric fan, ceramic tile flooring, radiator, double glazed french doors lead onto patio and rear garden, door to Living Room.
Staircase leads to Second Floor Landing.
Large radiator, double glazed window overlooking impressive gardens with brook and open countryside beyond, corner tiled shower cubicle with wall mounted shower, wash basin with cupboards beneath.
Radiator, double glazed window overlooking rear garden, built in double wardrobe, built in airing cupboard housing gas fired central heating boiler.
Fitted white 4 piece suite including corner bath with mixer tap and electric shower unit over, wash basin, bidet, WC, fully tiled walls, double glazed side window, towel rail/radiator.
Radiator, double glazed window with open front aspect, access to roof space.
The property is approached over a wide brick paved driveway providing ample parking, feature gravel garden with boulders providing a landscaped feature, wide gate to the side provides access through to the rear garden.
A most impressive feature of the property, approached onto paved and gravel patios, raised timber sun deck, ornamental pool, the garden beyond is laid to lawn with good variety of well stocked shrub and flower beds, selection of trees with the brook to the rear boundary.
A selection of useful out buildings. Summer Studio of wood and glazed construction with ceramic tile floor and power supply. Timber Summer House with double glazed french doors. Timber Workshop. Potting Shed. Storage Shed. Large Metal Frame Green House. Variety of lighting points and cold water tap.


Very recently, I read an article where a famous celebrity was nominated for an achievement award, which I personally didn't think was deserving of her due to past political views she expressed.
As I related these views to my husband, he lovingly pointed out that was not how I professed to live my life.
There were strong, negative feelings surfacing toward this person and I soon recognized I was reacting.
For some time now, I have realized that reaction does not support my life. Also, I was holding her to something that had happened years ago. At once, I knew there were traits I had outgrown and definitely wouldn't want someone to think of me in that light.
This morning as I was working with Proverbs 19:21, "Many are the plans in a man's heart, but it is the Lord's purpose that prevails.", I began to see how many times while I am struggling and outlining human planning, I fail to see and appreciate the obvious beauty surrounding me.
Last month one of my nieces was married and asked me to write and read something about Love at the service. The following is what I wrote and read.
Love is from God and Love exists forever, for everyone. It knows nothing of the mortal separation. There are no walls of material beliefs that Love does not dissolve, no obstructions Love cannot remove.
We do not own Love. We share it and we live it, but it is not possessive. We learn to Love without limits and as we learn to Love without limits, we learn to accept Love.
From 1st Corinthians, Chapter 13, we read, "Love suffers long, Love does not envy, Love does not parade itself, is not puffed up, does not behave rudely, does not seek its own, is not provoked, thinks no evil.
So often when we are plagued by a persistent problem, we fail to see it as a rich opportunity. The learning possibilities are limited only by our willingness to be teachable. When we ask God to open our eyes and our hearts to all that is being accomplished during this difficulty and are grateful for this opportunity, error loses its power to drag us down.
Our grateful attitude will lift us up and from this perspective, the difficulty can be seen as only a slight, temporary distress that is producing for us such a glory never to cease.
My name is Becky and I live in the Texas Hill Country and am a Christian Science Practitioner which means, I take everything to God in prayer. This blog will contain thoughts and pictures of God's wonder everywhere and this is my first.
Last night a friend posted a prayer request for her son who was in another state and stranded in a blizzard with a malfunctioning car and a quarter of a tank of gas. Immediately, I began praying with the 91st Psalms and knew man could never be separated from God for even an instant. Peace flowed through me as I knew no one would ever be outside of God's care. Within fifteen minutes, the mother had posted her son had made it to a "Love Truck Stop" connected to a Denny's Restaurant.
Of course, it was "Love".


text:
Ali - January 29, 2023, 1:00 pm
Gareth Bale announced his immediate retirement from the club and international football in January this year. The 33-year-old retired as one of the most...
FIFA World Cup 2022: As a Result of the Wales Rainbow Hats Being Seized, FIFA And Qatar Are in Urgent Talks
Wales fans were stopped from taking rainbow-coloured hats into the Stadium during their FIFA World Cup 2022 game against the USA at Ahmed Bin...
USA-Wales' FIFA World Cup 2022 Match Ends in a 1-1 Draw
USA and Wales played a 1-1 draw in their opening World Cup match at Al Rayyan Stadium.Both teams are in Group B, alongside England...
Tottenham Hotspur's Best Transfer in the English Premier League History is Revealed
Sayantan - October 1, 2022, 12:00 pm
Tottenham Hotspur signed hundreds of players from across the different leagues, after the beginning of the English Premier League in 1992. Some of them...
Football News: Gareth Bale Feels Loved at MLS
Sayantan - September 23, 2022, 1:00 pm
Football News: Welsh superstar Gareth Bale has recently moved to the MLS side LAFC and is enjoying the moment at the club.The forward was...
Gareth Bale News: The Welshman's Los Angeles FC salary disclosed as he takes £27m pay cut to secure move
Anshumaan Singh - June 27, 2022, 3:20 pm
Gareth Bale News: Gareth Bale chose to move to Los Angeles FC and will accept a pay reduction of £27 million to do so.This...
Real Madrid News: Gareth Bale finally earns recognition from Los Blancos despite falling out with fans
Real Madrid News: Gareth Bale has finally received some well-deserved recognition from Real Madrid. The Welshman made significant contributions to the club over the...
Football News: Seven Top Players who are saying farewell to their clubs
Uday Partap Singh - May 23, 2022, 2:30 pm
Football News: The 2021-22 European football season has concluded with some stunning scenes.Nevertheless, a number of top players will say goodbye to their respective...
Gareth Bale Transfer News: The Welshman's agent confirms he is leaving Real Madrid and drops retirement hint
Anshumaan Singh - May 17, 2022, 3:00 pm
Gareth Bale Transfer News: Jonathan Barnett, the Welshman's agent, stated that his client will leave Real Madrid, but did not rule out the possibility...
Real Madrid News: Five positions where Los Blancos need to improve in the summer!
Aasif Ali - April 26, 2022, 10:00 am
Real Madrid News: Los Blancos are set to be crowned LaLiga Champions for the 35th time. To add to this, Real Madrid have also...
Max Verstappen Exposes All of the Behind-The-Scenes Efforts That F1 Drivers Do

redpajama_set_name: RedPajamaCommonCrawl


text:
author: Elliot Forbes
date: 2017-04-15T08:38:40+01:00
desc:
  This tutorial gives you a few different methods of keeping your nodejs
  applications alive and running forever, definitely a handy guide if you use
  Node in production environments.
series: nodejs
image: node.png
aliases:
 - "/javascript/nodejs/keeping-node-apps-running-forever-pm2/"
tags:
  - pm2
  - nodejs
  - javascript
title: Keeping NodeJS Applications Running Forever Using PM2
twitter: https://twitter.com/Elliot_F
authorImage: https://images.tutorialedge.net/authors/profile.jpeg
---

If you write an application that you need to keep running forever on your servers then this is the tutorial for you.

If you're a software developer working on business critical applications and have to adhere to strict Service Level Agreements (SLAs for short) then you know just how vital it is to have your applications back up and running the second they fall over, every second counts when trying to achieve the 5 9's or 99.999% availability throughout the year. In this tutorial I'll be demonstrating the effectiveness of PM2 which is a production process manager for Node.js applications which also features a built-in load balancer for those high-performance applications.

PM2 is an opensource bit of tech that's currently available here: https://github.com/Unitech/pm2 and is currently owned and maintained by an Alexandre Strzelewicz from http://keymetrics.io for those of you who want to check out his other work.

Installing PM2

PM2 doesn't require much configuration, if any, and if you've got NPM installed on your machine then installing PM2 is just a case of running the following command:

```bash
npm install pm2 -g
```

Once that's installed on your machine then you are then ready to go.

Starting an Application

Starting a node application that you want to keep running forever is as simple as this:

```bash
pm2 start app.js
```

More Info

PM2's official can be found here: http://pm2.keymetrics.io/ should you wish to read up a bit more on this pretty amazing opensource tool and potentially thank the developers for their efforts.


Matt Novak, left, and Gavin O'Connor hop ahead of Sam Marino and Nic Novak during a three-legged race.
Malaya Pascual, left, and her sister, Tala, eat lunch under a blanket.
Terrell Herron enjoys his time atop a pony.
Elementary school students, including first-grader Ian Askham, center, enjoys a magic show.
A magician puts a smile on the face of Milo Gittings.


Montreal is an alluring city. It's hip. It has a reputation for excellent food. And it's always been a hot bed for great music. Indeed, Montreal has been called home by artists like Leonard Cohen, Arcade Fire, Wolf Parade, The Besnard Lakes, TOPS, Chromeo, Islands, Grimes, Stars, The Dears, and so forth. All of that in what is arguably the most European city in North America. Whatever you're looking for, Montreal will not disappoint.
Music fans in particular will find a lot to love. There is not one, but two, giant murals dedicated to Leonard Cohen. If, like us, you're a fan of food and music pairings, you'll want to hit up the Haitian restaurant, Agrikol, owned by Win and Regina from Arcade Fire. And, like any city oozing with culture, it's littered with countless music venues large and small for catching a gig.
Aux 33 Tours is arguably Montreal's largest record shop which offers an impressive selection of records including an impressively large number of imports and special editions. It's a good bet for scoring rare Record Store Day releases or the latest offerings from any of your favorite bands.
The quirky À Paul Boutique, as the name might suggest, is a great spot for scoring classic hip hop LPs and vinyl. When we visited, it was slightly disorganized, but it's a great spot for scoring some rare gems and it certainly has a ton of charm. The store's owner, Paul, is a character in the best possible way.
In addition to offering great prices on the latest releases from contemporary bands like The National and Kacy Hill, Beatnik Records offers a solid selection of old Blues and Jazz LPs. The shop itself is warm and well maintained. It's a real gem.
The large and well stocked La Fin du Vinyle offers an absolutely incredible selection of used wax with an emphasis on electronic, dance, jazz, and classical music. It's not a place to score new releases but it's definitely my top choice for crate digging bliss. What's more, they have a number of cozy listening spaces with turntables equipped with headphones for sampling those hidden gems you discover.
Not far from St. Viateur Bagels in the Mile End, you'll find the excellent Phonopolis. With an emphasis on local music and stuff that falls outside of the mainstream, it's an easy spot to recommend. Fresh bagels and vinyl shopping: is there a better way to spend a Sunday morning? I think not.
Planning a trip to Montreal? Be sure to check out our guide to spending three perfect days there, including recommendations for accommodations, restaurants, and sites.


Hi guys, just need a quick point in the right direction from someone who knows.
I've brought a replacement for the rear ford emblem as the old one is looking tatty already (cheap badges by ford) I just need some help on how to remove it.
I have done it on another car with a hair dryer and a screwdriver to prise it off but I don't want to go scratching paintwork or anything on my lovely foci, so I just wondered if there are any tips someone could give me to removing it properly.
Not sure if its the same as thr 2.5 but if it is Pop off the full trim holding the badge on to save body work then heat and hack, fish line didn't work as the badge is ( on the 2.5) hollow and getting the wire in under the badge but over the plastic was impossible, you'll have to bend off the badge to get to it anyway so you may as well just hack it all off then mess with the wire, the sticky pads ford used are unbelievably strong!!
Wasnt there a deal with ford that they replace them for free?
I destroyed my rear badge getting it off but the plan was to fit another which I had painted in any case - had to snip the edges of it so I could peel it up and get something in there to prise it off the finisher.


There's an interesting discussion over at the Fursuit Lounge LiveJournal about whether you can make a realistic living as a fursuit builder.
To sum it up: You can make it work, but you'd better love the job, as it takes over your life.
so i am very happy where i am...granted i do work at least 3 hours a day, and that is when i am having an off day or otherwise feel like crap. typically i work more like 9 hours, with 12+ hour days not being uncommon.
fursuit building has LITERALLY taken over my life and house, i have a 10X10 "fur room" crammed with yards of fake fur and i took hands and tails with me when visiting family on christmas so i could sit and handsew while chatting.
but damn do i love doing this and i used to do it for fun and got yelled at for not doing chores, so now that i get paid for it i get left alone for hours on end to create stuff and my sister does the chores muahaha!
Comments to the original post have lots of tips on taxes, deductions, health insurance, and saving for retirement.
Help save Radio Comix from the IRS!


It's no secret. Given the popularity of the iPhone camera, people love camera apps on iOS and developers love building them.
You may be itching to learn how to build a custom camera due to a fancy idea you've thought of. The default camera controller provided by Apple can only take you so far and that's really designed to be a simple capture method. If you plan to implement custom camera controls you'll need to put together your own controller.
This example walks through building a simple controller that'll let you preview the camera feed and snap a picture. I've purposely kept it in focus for this post, but the doors are wide open to continue adding onto the project in future posts—so stay connected to learn more!
A custom camera is built off of AVFoundation, which gives us direct access to the camera and microphone. This process is managed through a capture session that opens the flow of data from input devices (such as the back-facing camera) to outputs (such as an image or movie file).
Let's see how this looks at a higher level with our example in mind.
In our example you'll see that we establish a connection with the back facing camera. Once we have that we create an object that'll allow us to capture a frame from our input. In order to preview what our input is monitoring we need to establish a preview layer with our session object. Behind the scenes the preview layer is connected to existing inputs if one is available.
The preview layer is a CALayer that we add add a sublayer to a UIView within our storyboard.
When we create our capture session we initialize it with a preset AVCaptureSessionPresetPhoto. It's important to know that this is not suitable for video and it can take a big chunk of memory (and time) when you capture a still frame. For example, snapping a photo with the Photo preset consumed 2.23 MB, and had a noticeable delay, in my test. When I switched that to High it was noticeably quicker and rang up to 0.85 MB.
You can jump into instruments to test this yourself by using the Allocations instrument. I highly recommend experimenting with presets just to get an idea of the memory usage in your app. You want to make sure that graph goes down, indicating that the memory has been released, when you're done.
If you're not careful you can let these objects linger around which will almost certainly crash your app due to a memory warning.
It's also worthwhile to know that you can adjust the preset on the fly while your session is running.
Head on over to the Apple Documentation if you're curious to know about other things you can control. I'll revisit our custom camera here in later articles, but until then grab my example and experiment.
Let's add a button that'll allow you to control the flash.
I've provided an idea for the design so you don't have to think about that. You'll simply re-position the capture button and add a new button that'll toggle the flash mode. In order to add flash you'll need to grab the AVCaptureDevice input. Within that object you'll see that you can set flashMode to AVCaptureFlashModeOff, AVCaptureFlashModeOn, AVCaptureFlashModeAuto. When you toggle the flash mode mirror how the default camera on your device works (when it's on, turn it off… etc).
One key thing to remember. Before you make any adjustments to an input you need to lock it for configuration. When you're done don't forget to unlock it.
And while it's not important in this example, it will be in the future when you deal with the input on the front of the device. Not all inputs provide flash. You can call device.hasFlash to verify that it does before setting it.
Have fun! Jump over and grab the sample project to see everything in action.
From what I've experienced, no. It doesn't appear to consume a dramatic amount of memory. It keeps things running smoothly, in fact. Stopping and starting the camera is a pretty intense operation that will reveal some noticeable lag time. You also have apps like Snapchat, Tiiny, and Tappy that all keep their session active.
This appears to be some sort of funky internal error when you try to manage a custom view that treats itself as a AVCaptureViewPreviewLayer. When I set that object to a UIView in my storyboard this error would show up when I attempted to modify it's session. Instead of worrying about a custom AVCaptureViewPreviewLayer I just dropped back, created the layer when the app starts, and then apply it to my storyboard UIView.
Working with a custom camera can be a bit of a pain, but it'll pay dividends given that you'll really be able to customize your app experience. You can literally create a camera input and feed that into preview layer however it might be displayed.
Have you built a custom camera? How did that go? Let me know below! Feel free to send any questions my way.
Finally, stay connected by signing up for that newsletter on the right side of your screen. It'll help me immensely to know how many of you are out there who enjoy this content.
Ryan Asks, "Should I Learn Swift or Objective-C?"


TiO2 is produced from either ilmenite, rutile or titanium slag Titanium pigment is extracted by using either sulphuric acid (sulphate process) or chlorine (chloride .
, today formally inaugurated its new titanium dioxide (TiO 2 ) production , production capacity of our plant, , inaugurates-new-altamira-tio2-production .
Reports that Huntsman Tioxide will select a site for a titanium-dioxide plant by the end of 2001 Countries considered for the sites; Opportunities in China for a .
DTT Manufacturing Sit , Titanium dioxide production has increased by 800% since , the 28-hectare plant started up in 1994 and has nearly doubled its capacity .
ARGEX Titanium Inc is an innovative chemical process for the production of Titanium Dioxide (TiO2) With a primary goal of advancing rapidly towards production .
Honghui Titanium Dioxide Chemical Plant Co,Ltd which was officially, established in 2009, located in Jiangsu province By virtue of the wide application of titanium .
TITANIUM DIOXIDE LISTING BACKGROUND , Titanium Dioxide Production Capacity , Plant II 2426 Middle Road PO Box 160 Ashtabula, .
Chemours Titanium Technologi News November 18, 2015 low-cost titanium dioxide (TiO 2) facility in Altamira, Mexico, in 2015, and begin production at the plant in .
What You Should Know about Titanium Dioxide , What is titanium dioxide and why is it used in food production? , i work at a titanium plant and have bern there .


Northern Property are pleased to offer onto the rental market this unit suitable for various uses subject to planning consents. Located in West Belfast on the Springfield Road; benefiting from high volumes of vehicular and pedestrian footfall. The unit comprises a large open plan shop front and display window, separate WC. The unit is circa 563 Sqft, which is bright and spacious benefiting from glazed frontage and roller shutter access. The rent is priced at £6,600 Per Annum (£550 Per Month) excluding rates. Please note a service charge may be applicable to include the insurance of the premises. For further information please contact our Commercial Rental Team on 90 324 555 to arrange a viewing.
I am interested in arranging a viewing of 242 Springfield Road after seeing it on Propertynews.com. Please contact me about this property.


From our home on the Isle of Man, Aston International helps individuals, families, and companies across the globe manage and protect their wealth.
A fully-licensed corporate and trust service provider, we couple exceptional fiduciary care with integrity and confidentiality.
Flexible and reliable, our clients know they can count on us.
Aston International is a fully-licensed, independent corporate and trust service provider based on the Isle of Man. We are one of the longest-established firms in our industry, and serve a diverse range of global clients.
Aston International was founded on the principles of security, transparency, and efficiency. These values remain central to the service that we provide today.
Aston International benefits from the Isle of Man's exclusive constitutional relationship with the United Kingdom.
The Isle of Man is recognised by the IMF as a well-regulated offshore finance centre of excellence and is considered tax compliant by the OECD.
With over 35 years' experience and a highly-qualified team, Aston International offers a comprehensive selection of corporate and trust services.
Among our clients are international business people and entrepreneurs, family offices and professional intermediaries, including global accounting and law firms.
It is with great sorrow we announce that our colleague and good friend Jonathan "Jonno" Gollow has passed away.
Aston International are pleased to support the Isle of Man GuitarFest for the third consecutive year, in 2016. Jonno Gollow, an Aston International employee, is the creator and organiser of GuitarFest and the firm have been happy to be associated with the event since he joined them in 2014.
How do you adapt a heraldic griffin to the new information age? That was one of the challenges facing us and the creative team at Ashgrove Marketing when we sat down recently to discuss reviewing our image, redesigning our logo and developing our new website.
It seems hard to believe but it is now almost three years since the Aston International team moved into our purpose-built headquarters in Hope Street, Douglas, in the Isle of Man.


This semester, I am teaching Web Programming I (CIS375), Electronic Commerce Technologies (CIS427), and Object Oriented Development (Java) (CIS425). In past semesters I've taught Computer Fundamentals (CIS101), Exploring Computer Science - Web Unit (CIS189), Database Systems (CIS 411) and Web Programming II (CIS475) here at Buffalo State. I look forward to learning from and with you all this semester.
I have been teaching at UB for over 25 years. I have taught for the former Informatics Program, the Department of Information Science (Graduate School of Education), the Department of Computer Science and Engineering and Computational Data-Enabled Science and Engineering and Millard Fillmore College. I have also taught at Niagara County Community College Digital Media Department and Trocaire College Business Information Department.
In past semesters, I have taught Introduction to Computing (CSE101), Introduction to Programming with Java (CSE115), Introduction to Computer Literacy (LIS506), Introduction to Microcomputer Applications (MFC118), Web Programming II (MFC 211), Web Programming I (INF/MFC/CDA215), Systems Analysis and Design (MFC310), Database Management Concepts (LIS569), and a few other courses at UB and Introduction to Web Design (DIG111) and Advanced Web Design (DIG112) at NCCC and Information Literacy (BU099) and Information Technology (BU132) at Trocaire.
I also do consulting and contract training in Microsoft Office (Word, Excel, PowerPoint, Access, Project, Visio, etc.), database design (Oracle, MySQL, and SQL), and web design.


text:
Contact UsEspanol
Sea Spray News »
The ResultsThe FactsFaqs
All Seasons Park Moody Gardens Update Moody Gardens Corpus Christi Lykia Links Bahia de los Suenos
The Results :: Success Stories :: Bahia de los Suenos
Grounds Superintendent: Chris Tivy
Bahia De Los Suenos: La Pas, Baha California Sur, Mexico
Golf Course Architect: Tom Doak
Distributor: West Coast Turf
Sea Spray Offers Grow-in Ease, Resiliency
Completed in 2009, the Bahia de los Suenos golf course is the first part of a planned exclusive beach resort located off the eastern coast of Baja California in Mexico. Literally translated as "Bay of Dreams," Bahia de los Suenos is an ocean-side golf course that offers stunning views and a "bump and run" type of golf game that is fun for every golfer who plays the course.
When it came to choosing turf, the golf course design team wanted a bulletproof option that could withstand high saline and windy conditions from the neighboring ocean while offering a beautiful, firm playing surface. For these reasons, seashore paspalum was used throughout the course on greens, tees and fairways.
While sprigs were used for the greens, Sea Spray seeded seashore paspalum was used for both fairways and tees. "Sprigs take up a lot of space to store and keeping them cool is not a cheap endeavor," explained Tivy.
"Choosing seed over sod was an ease of application as well as a cost decision; there are importation fees with stolons if you are not getting them local, so that's one aspect of it. And weather being what it is here, seeding is very much an option, so we've done zero sodding because we haven't needed to. Plus, I would rather have seed any day over sod even if it's in small areas just because of soil interface issues, that kind of thing."
At Bahia, much of the soil consisted of a decomposed granite-type material. These poor soil conditions necessitated quite a bit of capping, but luckily for Tivy, he had some leeway when it came to selecting capping material. "We would use materials that wouldn't be our first choice, but knowing it's paspalum and bulletproof, we knew it would be fine."
Once the soil was prepared, the course was hydro-seeded with a combination of Sea Spray, mulch and fertilizer. At two and four weeks after the hydro-seed application, Tivy followed up with additional fertilizer, including calcium nitrate. "I don't want to make my job sound easy because obviously there are times when it's not, but it's extremely simple to grow in the paspalum from seed; it's wonderful."
Once the course was hydro-seeded, germination was quick to follow. "The first little hairs started coming up after about six or seven days, just in a couple of areas. Then you start to see it coming up everywhere to that same height, then after about three weeks KABOOM, it starts exploding and coming up like gangbusters."
While the preparation and grow-in process was near flawless, the true success of Sea Spray comes in the form of resiliency. At Bahia, wind speed and temperature fluctuate tremendously and through it all, Sea Spray has remained steadfast. In addition, the turf has experienced little to no disease pressure from either weather or insects.
Most importantly, Sea Spray needs minimal irrigation, tolerates high levels of salt and requires very little nitrogen. "During the growing season, I'm watering 20 minutes every other night and I'd like to get it to 30 minutes every third night. We're pretty minimal which is kind of the beauty. I have put minimal fertilizer down, using only about 0.5 of a pound, at most … paspalum takes up nitrogen very efficiently."
"It's unbelievable, the architects seem to be extremely happy. They are all avid golfers and a lot of them can go bump and run with it. I've been happy too. Extremely happy with it!"
© 2014 J.R. Simplot Company Copyright | Privacy Policy | Terms & Conditions


text:
King Charles III, Almeida Theatre
Posted on April 22, 2014 May 4, 2014 by Catherine Love
It is apt that King Charles III, Mike Bartlett's brilliantly ambitious "future history play", is opening in a week that has seen newspapers plastered with photographs of the Royal Family. As William, Kate and baby George embark on a tour of New Zealand, the media fascination would suggest that the monarchy is far from unwanted. If anything, their stock is up. But does the ceremonial head of state really have any role to play in how we define ourselves as a nation in the twenty first century? Or is monarchy today nothing more than a brand, with Wills and Kate as its glossy poster boy and girl?
It is these questions, and a wide assortment of others, that King Charles III thoughtfully and entertainingly poses. The play opens in the near future, at the funeral of the long-reigning Queen. After a lifetime of waiting in the wings, Charles is finally out of his mother's shadow and thrust into the glare of the spotlight. But while, as he puts it, "potential holds appeal", the long-awaited throne is a formidable prospect. Barely hours into the job, Bartlett has the tragic figure of Tim Piggot-Smith's stubborn Charles take issue with a privacy bill that lands on his desk for royal assent, refusing to sign as a matter of conscience. With the wavering of a pen, a whole nation is suspended in uncertainty, poised between the collapse of Parliament and the overthrow of the monarchy.
Bartlett's deliciously smart invention is as much about our theatrical heritage as it is about the threatened traditions of monarchy. Taking Shakespeare's histories as its model, the play's form is wrapped up in the same contradiction as our Janus-like nation: both new and old, looking backwards and forwards at the same time. His script is a witty amalgam of Shakespearean rhythms and sharp modern colloquialisms, threaded with light allusions to some of the Bard's greatest hits. We get unyielding royal ambition, a free-spirited, Hal-esque Prince Harry in the form of Richard Goulding (who just wants to live like common people), and a Kate (Lydia Wilson) whose backroom manoeuvring has more than a hint of Lady Macbeth – even if her weapon of choice is more Dolce and Gabbana than sharpened dagger.
Rupert Goold's assured production is cast in the same mould, delicately attuned to its Shakespearean echoes. History is subtly inscribed on Tom Scutt's simple set, which marries candles, a wide dais decked in plush maroon carpet, and a fading mural of faces that hugs the exposed brickwork of the Almeida's curving back wall. The figures who anxiously pace under the glare of these painted eyes have all the poise of Shakespearean heroes and the polish of modern politicians, flitting with ease between elegant blank verse and slick press conference spin. And there's a glorious bit of Bard spoofing (and Daily Express baiting) with the ghostly appearance of a black-shrouded Diana, a contrivance that is both utterly ridiculous and absolutely faithful to the logic of Bartlett and Goold's chosen form.
It's often said that retellings of history reveal more about the time they emerge from than the era in which they are set; the same can be claimed for visions of the future, which have a habit of reflecting contemporary anxieties. Perhaps, then, Bartlett has found the perfect form for grappling with some of the doubts clouding our immediate national horizon. With the referendum for Scottish independence looming, British identity is suddenly up for grabs, and with it the whole hodgepodge of tradition that makes up our national character. King Charles III might not offer any answers, but it's a compelling start to a fresh national conversation about monarchy, democracy and that most elusive and problematic of qualities – Britishness.
Photo: Johan Persson.
Posted in Exeunt, ReviewsTagged King Charles III, Mike Bartlett, Rupert Goold, Tim Piggot-Smith, Tom ScuttLeave a comment
← Matilda the Musical
Noises Off →


Fairwinds by Polygon, seaside-inspired townhonws in Ladner's master-planned community of Hampton Cove. This spacious 3 bedrooms unit, facing North to beautiful courtyard, seller spent $45,000 stylish renovation for deluxe living. Double garage plus two more parking spots on your own driveway. Enjoy over 12,000 square feet of residents-only resort-style amenities at The Hampton Club. Don't miss it out!


The platform to easily create and share beautiful 3D visualisations embedded in real places.
Emb3d is the platform for architects and designers designed by Pixel Legend which enables the visualisation of their projects in real places. It reduces the cost to produce the scenes for mobile and VR devices dramatically. It works on iOS, Android, desktops and VR googles.
It works with smartphones, phablets, tablets and VR headsets and positions the viewer accurately in the real geographic space indoors and outdoors. It may visualise any place and 3D scene uploaded by the designer.
The most spectacular result is the 3D reconstruction of the historical appearance in the popular tourist locations like Pastguide in Kraków.


As such a crucial part of every component of a business, data needs to be organized, accurate, and accessible for maximum efficiency. One approach is platform concept Master Data Management (MDM), that provides a tech-enabled system to better manage the large quantities of data within a business. A consistent and reliable database plays a huge role in analyzing how the different functions inside a business compare, and supports a complete understanding of the entire supply chain from beginning to end.
With a seamless database, procurement can have access to the necessary details for deciding which supply chain operations have the opportunity for cost reduction or other potential efficiencies. There are many challenges now that supply chain and procurement professionals can discover solutions for with the data uniformity offered by MDM. Standardized data systems can establish supplier names and vendor numbers that are repetitive throughout the business, maybe across locations, to leverage quantities for purchasing and improve these supplier relationships in the process. In the most recent episode of Source One's Countdown to ISM2017 series, Senior Project Analyst Jennifer Engel addresses the common challenges in supply chain operations that MDM can provide solutions for.
This is just one of the many procurement and supply chain hot topics discussed during the Countdown to ISM2017 series, as the Source One team gears up for the international conference in just a few weeks. The ISM2017 agenda includes a variety of highly anticipated sessions, including the private sub-conference for executives, ExecIn. Exclusively sponsored by Source One, ExecIn offers specific keynote speakers and sessions directed towards the procurement and supply chain leaders attending the conference with their team. These decision makers have the opportunity to network with other high-level professionals while considering how to prepare their groups for the future of procurement.


Who would have thought that a sheet of leather, a couple feet of natural cotton rope, and a frame fashioned out of poplar and metal could transform an average sling chair into this hanging one that looks straight out of a bougie jungle? With an aesthetic fit for a luxury Tarzan, the Ovis Hanging Chair is made with an understated, soft leather base that molds comfortably to your back. Just think how nice it would be to plop into this after a long day of work.


text:
Patterns of Synchrony: From Animal Gaits to Binocular Rivalry
Martin Golubitsky é uma referência internacional na área de sistemas dinâmicos. A sua palestra versará sobre aplicações de conceitos matemáticos em diversas áreas, com especial ênfase na engenharia. Explicará a importância da abordagem matemática na modelação e compreensão de fenómenos reais.
ISEP| H202
12 JUN 2015 | 15:00
This talk will review previous work on quadrupedal gaits and recent work on a generalized model for binocular rivalry proposed by Hugh Wilson. Both applications show how rigid phase-shift synchrony in periodic solutions of coupled systems of differential equations can help understand high level collective behavior in the nervous system.
Martin Golubitsky
Distinguished Professor of Natural and Mathematical Sciences at the Ohio State University, where he serves as Director of the Mathematical Biosciences Institute. He received his PhD in Mathematics from M.I.T. in 1970 and has been Professor of Mathematics at Arizona State University (1979-83) and Cullen Distinguished Professor of Mathematics at the University of Houston (1983-2008).
Dr. Golubitsky works in the fields of nonlinear dynamics and bifurcation theory studying the role of symmetry in the formation of patterns in physical systems and the role of network architecture in the dynamics of coupled systems. His recent research focuses on some mathematical aspects of biological applications: animal gaits, the visual cortex, the auditory system, and coupled systems. He has co-authored four graduate texts, one undergraduate text, and two nontechnical trade books, (Fearful Symmetry: Is God a Geometer with Ian Stewart and Symmetry in Chaos with Michael Field) and over 100 research papers.
Dr. Golubitsky is a Fellow of the American Academy of Arts and Sciences, the American Association for the Advancement of Science (AAAS), the American Mathematical Society (AMS), and the Society for Industrial and Applied Mathematics (SIAM). He is also the 1997 recipient of the University of Houston Esther Farfel Award, the 2001 corecipient of the Ferran Sunyer i Balaguer Prize (for The Symmetry Perspective) and the recipient of the 2009 Moser Lecture Prize of the SIAM Dynamical Systems Activity Group. He has been elected to the Councils of SIAM, AAAS, and AMS. Dr. Golubitsky was the founding Editor-in-Chief of the SIAM Journal on Applied Dynamical Systems and has served as President of SIAM (2005-06).
ISEP – Departamento de Matemática


text:
Body of Lies Blu-ray Review
by Casimir Harlow Feb 25, 2009
Body of Lies Blu-ray (2013)
Body of Lies comes to the next-generation Blu-ray format with a superior, High Definition 1080p rendition in the movie's original theatrically broad aspect ratio of widescreen 2.4:1. With the Director Ridley Scott's visual attention to detail it seems only apt that his imagery be given a flawless presentation here, an almost benchmark-quality offering to catch your eye. Detail is phenomenal, particularly over the sun-drenched desert landscapes, but also during the purportedly European locations, as well as for the close-up headshots and conversational (or interrogation) moments. The varied scenery also allows for some decent colour rendition and authentic locales. The fires burning across the Jordan backstreets, the smoke (or dust)-strewn, atmospheric settings, they all come across superbly, completely devoid of unintentional grain or softness. Solid shadowing and superior blacks make for excellent night sequences and round out a near-perfect visual presentation.
To accompany an outstanding visual rendition we get an almost equally noteworthy aural offering, with the movie's soundtrack presented to us in potent Dolby TrueHD 5.1. Dialogue comes across consistently clearly and coherently, dominating the frontal array wherever appropriate. The effects are myriad, and allow for excellent dynamics, bringing the rich environment to life, whether the dust clouds blowing, the fires crackling or the market streets bustling with people. The surrounds create the perfect atmosphere to convincingly depict this Middle Eastern setting, and the mix is further augmented by a suitably Middle Eastern-style score (kind of a variation on the Bourne scores) which keeps the movie going at a good pace. Although populated with a few explosive set-pieces, complete with suicide bombings, helicopters firing rockets and shooting aplenty - which also allows for superb dynamics and all-encompassing atmospherics - but is lacking slightly in the ooomf department, failing to truly shake things up with any noteworthy bass. Still it is a superior track, a hair's breadth away from being benchmark quality.
First up we get a full length Audio Commentary by the Director Ridley Scott, the Screenwriter William Monahan and the Author of the novel that it was based upon, David Ignatius. Unfortunately they all recorded their contributions separately so you don't get any nice discussions between the three, but on the plus-side they each individually offer up some keen insight into the production - from very different perspectives. Scott always gives interesting, contemplative commentaries that err more on the technical side of things, but seldom feel overly dry. Monahan gives us some nice input about his take on the story, and ex-reporter Ignatius has the most to say about the current situation in the Middle East, and therefore is arguably the most interesting contributor. Overall it is not quite as good as perhaps a double-team offering from Scott and Ignatius, but the trio of intercut snippets works better than a Commentary by Scott alone.
Actionable Intelligence: Deconstructing Body of Lies - key sequences are explored in depth via on-set footage and cast/crew interviews. The "Focus Points" feature can be activated so that you can access each of the nine Featurettes as they become relevant during the movie, or you can watch the near hour-and-a-half's worth of making-of footage from the main menu, including dissection of the characters and casting, the costume and production design, the director himself, the location, the stunts and special effects, and the writer's work. Some of it is interesting material, although it is slightly annoying that you cannot just 'play all'.
The Interactive Debriefing feature allows you to see the Director Scott and his actors, DiCaprio and Crowe, comment on three different areas surrounding the production (story, collaboration and intelligence). Although the presentation is slightly gimmicky (in trying to be even more interactive it actually feels a little irritating) the end result does give us some nice discussions, at once both informative and interesting - boarding on insightful in some of the more politically-orientated talks - although it feels a little like those involved thought this was a more 'significant' movie that it is in reality.
We also get about fifteen minutes of Additional Scenes with Introduction and Optional Director Commentary (and this is the very first Deleted Scenes Introduction I have watched which is even vaguely informative, with Ridley Scott showing us his pin-board of scenes and explaining how things get chopped and changed around, resulting in some decent scenes not fitting into the grand scheme of things). Almost the gem of the disc, the five presented here are all worth watching, with more interaction between Ferris and Hani, a suicide-pill discussion between Ferris and his boss Hoffman and a slightly more substantial alternate ending. But the real highlight is the extra scene with Ferris' Muslim girlfriend, who takes him to the wrong part of town where he receives a rather nasty welcome - it's tense and has some action in it and really should have made the final cut.
Body of Lies is a solid Hollywood spy thriller, with topical political undertones, let down only slightly by the fact that you would have perhaps expected more from the trio of veteran filmmakers who collaborated to bring this to our screens. Director Ridley Scott has been off his game for a few years now, and both superior leading men are capable of much better than this. Still, even on an off-day, all three are better than most of their compatriots and have given us a decent, extremely entertaining Big Screen thriller. On Blu-ray the video presentation is benchmark-quality, the sound almost as good and the extras will keep fans thoroughly entertained for hours after the credits have rolled. Worth seeing if you're a fan of any of those involved, it comes recommended, similarly so if you liked movies like The Kingdom, Syriana and Spy Game, even if it's not quite as good as the best of those.


text:
Hubert Petschnigg (31 October 1913 – 15 September 1997) was an Austrian architect.

Life

Petschnigg was born in Klagenfurt, and went to school in Villach. In 1934 he began to study architecture at the Vienna University of Technology, where he entered the Hansea Vienna branch of the Kösener Corps student society.  Before he could graduate, however, he was called up for military service.  After the Second World War he resumed his studies at the Graz University of Technology (TU Graz), under Karl Raimund Lorenz and Friedrich Zotter, and graduated with an engineering degree in 1947.

In 1948 he began working at the architectural firm of Helmut Hentrich and Hans Heuser.  After Heuser's death in 1953, Petschnigg became his replacement and founded the HP firm together with Hentrich.  The firm was expanded to six partners in 1959 and renamed HPP Hentrich, Petschnigg & Partners. Over the following decades it became one of the most prolific and best-known architectural firms in Germany.

In 1962 Petschnigg was granted entry to the Corps Marchia Brünn branch of the Kösener Corps in Trier.  He was named "Honorary Senator" of TU Graz in 1977, and in 1982 the government of West Germany awarded him the Federal Cross of Merit – a particular honour for Petschnigg, as he was Austrian. In 1988 he became an honorary member of the Engineers' and Architects' Association of North Rhine-Westphalia.

Petschnigg's particular passion was the maintenance of memorials.  He also restored old buildings, including Pyrmont Castle in the Eifel, in which he spent his final years, living with his wife as the castle's keeper.  He died in 1997.

Works

Petschnigg produced his most important works as a partner of the HPP firm that he had founded with Helmut Hentrich.  These included the headquarters of VEBA (now E.ON) in Düsseldorf, the Ministry of the Interior for North Rhine-Westphalia, the RWI Essen research centre, the TÜV Rheinland building in Cologne, the Ruhr University Bochum, and the Europa-Center in Berlin.

References

Further reading
 Joachim Lübcke, in memoriam Hubert Petschnigg, Trier, 1998, in Märkerbrief no. 83.
 Hermann Kruse, Kösener Corpslisten 1996, Gesamtverzeichnis 1919–1996, Nuremberg-Fürth, 1998.

1997 deaths
1913 births
Officers Crosses of the Order of Merit of the Federal Republic of Germany
Architects from Klagenfurt
20th-century Austrian architects


Automated data flow with the Klöckner API.
With the Klöckner API, you exchange information from your system environment directly with us. Different data sources are linked with each other, thus enabling automation of your processes. Klöckner product data and price information, among other things, are provided via the API connection. You can place orders with Klöckner directly from your system.
Duplicate entries into your ERP system or other manual work are avoided with API use. Sources of error are eliminated, costs are saved and data processing and administration are simplified.
Create your API on demand, entirely according to your wishes and needs and connect your websites, applications, programs as well as those of your suppliers and customers with each other. Benefit from increased efficiency. Let us advise you today. We help you to find the optimal solution.


text:
Q: How to link to Jupyter notebook from a local HTML page I am learning Jupyter Notebooks at the moment. Is it possible to link a Jupyter Notebook to an HTML page.
For example, say I have an HTML page which is on my computer. Can I use this to link to a Jupyter Notebook, so when the link is clicked it loads the notebook in a viewer to be run?
Thanks,
BJR

A: I am not using Jupyter notebook this way (actually I use Jupyter Lab). However, if I understood correctly you want to click on link on HTML page in your local machine and run notebook.
If trying access Jupyter notebook via HTML link in your machine while notebook (server) is not running or you are using non-default browser while notebook is running you will reach page with following information which should be sufficient to plan you next steps:

Token authentication is enabled
If no password has been configured,
  you need to open the notebook server with its login token in the URL,
  or paste it above. This requirement will be lifted if you enable a
  password.
The command:
jupyter notebook list
will show you the URLs of running servers with
  their tokens, which you can copy and paste into your browser. For
  example:
Currently running servers:
  http://localhost:8888/?token=*****... :: /Users/you/notebooks
or you can paste just the token value into the password field on this
  page.
See the documentation on how to enable a password in place of token
  authentication, if you would like to avoid dealing with random tokens.
Cookies are required for authenticated access to notebooks.
Setup a Password You can also setup a password by entering your token
  and a new password on the fields below:
Token
New password

Basically it means that: link to Jupyter notebook will work if you have started server with token autorhization and use default browser. You can set password which means that you can use whatever browser in your machine but must log in (you can save login credentials in your browser of course). In any case notebook (server) must have been started and running before using link.
Link will not run your notebook, it just opens notebook page.

redpajama_set_name: RedPajamaStackExchange


text:
The Gazette Editorial Board advises: House GOP Tax Plan Must Be Shelved
Reposted from 4.13.5018 www.thegazette.com
Ill-timed tax cut plan should be shelved
Republicans who run the Iowa House have given Iowans the weekend to consider a $1.3 billion package of tax cuts they unveiled this week. This is what passes for public input in a Statehouse where the GOP always seems to be in a hurry to approve major legislation.
It's a weekend when more than a few Iowans will be scrambling to pay their federal and probably state taxes. We doubt that's a coincidence. On average, under the bill, Iowans will get an 8.9 percent income tax cut.
Otherwise, the timing of these tax cuts couldn't be worse.
Lawmakers and Gov. Kim Reynolds just polished off yet another round of midyear budget cuts spawned by sluggish state revenue collections. The cuts hit universities, community colleges, human services and the court system. Republicans have borrowed $144 million from reserve funds to patch budget holes, and are unable to pay the money back.
Iowa's farm economy, already challenged, now faces the prospect of a trade war with China, which could slap devastating tariffs on vital soybean and pork exports. The effect on state tax collections is sure to be anything but positive.
So in the face of budget problems, unreliable revenues and economic storm clouds, House Republicans want to cut taxes. Beyond bad timing, the details raise red flags.
The pretense of tax "reform," or making Iowa's system less complicated, has fallen away.
The House bill keeps federal deductibility, allowing Iowans to deduct federal tax payments from their state liability. It's a mechanism that tightly ties Iowa's tax structure to the erratic whims of Congress and makes our income tax rates look artificially high. Many Iowans, including a number of Republicans, say the provision should be scrapped.
The House plan also fails to seriously dent the mountain of tax credits, exemptions and giveaways sapping state revenues to the tune of billions.
A tax plan floated by Reynolds smartly included "triggers" that would halt the pace of tax reductions if state revenues stalled or fell. The House GOP plan contains no triggers, meaning the full $298 million annual price tag will be paid regardless of fiscal realities, and in a state already underfunding education, water quality and other priorities.
The bill raises sales taxes by $106 million, taxing digital streaming services such as Netflix and ride-sharing services such as Uber. And yet, Republicans still refuse to enact the sales tax increase Iowans say they want, a three-eighths-cent boost to fill the Natural Resources and Outdoor Recreation Trust fund approved by voters in 2010.
So you've got the weekend, Iowans. We suggest you find a GOP state representative and let them know a state that can't repay its borrowing, can't cover the cost of its top priorities and that's facing economic trouble ahead has no business cutting taxes by $1.2 billion. But you'd better hurry.
• Comments: (319) 398-8262; editorial@thegazette.com