text:
Updates to legacy gene names
SGD has long been the keeper of the official Saccharomyces cerevisiae gene nomenclature. Robert Mortimer handed over this responsibility to SGD in 1993 after maintaining the yeast genetic map and gene nomenclature for 30 years.
The accepted format for gene names in S. cerevisiae comprises three uppercase letters followed by a number. The letters typically signify a phrase (referred to as the "Name Description" in SGD) that provides information about a function, mutant phenotype, or process related to that gene, for example "ADE" for "ADEnine biosynthesis" or "CDC" for "Cell Division Cycle". Gene names for many types of chromosomal features follow this basic format regardless of the type of feature named, whether an ORF, a tRNA, another type of non-coding RNA, an ARS, or a genetic locus. Some S. cerevisiae gene names that pre-date the current nomenclature standards do not conform to this format, such as MRLP38, RPL1A, and OM45.
A few historical gene names predate both the nomenclature standards and the database, and were less computer-friendly than more recent gene names, due to the presence of punctuation. SGD recently updated these gene names to be consistent with current standards and to be more software-friendly by removing punctuation. The old names for these four genes have been retained as aliases.
Old gene name
New gene name
YGL234W ADE5,7 ADE57
YER069W ARG5,6 ARG56
YBR208C DUR1,2 DUR12
YIL154C IMP2′ IMP21
Categories: Data updates Announcements
Tags: gene nomenclature


Individual therapy offers you one-on-one support during difficult times and an effective way to move forward. My practice is one that acknowledges your strengths while providing a safe, nonjudgmental space to work toward your goals. I utilize a variety of therapeutic approaches drawn from psychodynamic theory, mindfulness-based cognitive therapy, and Eye Movement Desensitization and Reprocessing (EMDR). There's no one-size-fits-all approach to this kind of work, and we will collaborate to tailor therapy to your particular needs. My goal is to provide you with a greater sense of empowerment to build the kind of life you want for yourself.
Most clients choose to meet on a weekly basis for 50 minutes, but longer appointments and more frequent sessions are options we can discuss. I offer both short- and long-term therapy, depending on your needs.
In addition to therapy, I provide supervision for graduate-level social workers looking to gain clinical licensure in the District of Columbia. I also provide consultation to other therapists who want additional information and supervision around issues of trauma-informed care and mind-body psychotherapy approaches.


text:
package org.apache.spark.sql.execution.datasources.jdbc

import java.sql.{Connection, Driver, DriverManager, JDBCType, PreparedStatement, ResultSet, ResultSetMetaData, SQLException}
import java.util.Locale

import scala.collection.JavaConverters._
import scala.util.Try
import scala.util.control.NonFatal

import org.apache.spark.TaskContext
import org.apache.spark.executor.InputMetrics
import org.apache.spark.internal.Logging
import org.apache.spark.sql.{AnalysisException, DataFrame, Row}
import org.apache.spark.sql.catalyst.InternalRow
import org.apache.spark.sql.catalyst.analysis.Resolver
import org.apache.spark.sql.catalyst.encoders.RowEncoder
import org.apache.spark.sql.catalyst.expressions.SpecificInternalRow
import org.apache.spark.sql.catalyst.parser.CatalystSqlParser
import org.apache.spark.sql.catalyst.util.{CaseInsensitiveMap, DateTimeUtils, GenericArrayData}
import org.apache.spark.sql.execution.datasources.jdbc.connection.ConnectionProvider
import org.apache.spark.sql.jdbc.{JdbcDialect, JdbcDialects, JdbcType}
import org.apache.spark.sql.types._
import org.apache.spark.sql.util.SchemaUtils
import org.apache.spark.unsafe.types.UTF8String
import org.apache.spark.util.NextIterator

/**
 * Util functions for JDBC tables.
 */
object JdbcUtils extends Logging {
  /**
   * Returns a factory for creating connections to the given JDBC URL.
   *
   * @param options - JDBC options that contains url, table and other information.
   * @throws IllegalArgumentException if the driver could not open a JDBC connection.
   */
  def createConnectionFactory(options: JDBCOptions): () => Connection = {
    val driverClass: String = options.driverClass
    () => {
      DriverRegistry.register(driverClass)
      val driver: Driver = DriverManager.getDrivers.asScala.collectFirst {
        case d: DriverWrapper if d.wrapped.getClass.getCanonicalName == driverClass => d
        case d if d.getClass.getCanonicalName == driverClass => d
      }.getOrElse {
        throw new IllegalStateException(
          s"Did not find registered driver with class $driverClass")
      }
      val connection = ConnectionProvider.create(driver, options).getConnection()
      require(connection != null,
        s"The driver could not open a JDBC connection. Check the URL: ${options.url}")

      connection
    }
  }

  /**
   * Returns true if the table already exists in the JDBC database.
   */
  def tableExists(conn: Connection, options: JdbcOptionsInWrite): Boolean = {
    val dialect = JdbcDialects.get(options.url)

    // Somewhat hacky, but there isn't a good way to identify whether a table exists for all
    // SQL database systems using JDBC meta data calls, considering "table" could also include
    // the database name. Query used to find table exists can be overridden by the dialects.
    Try {
      val statement = conn.prepareStatement(dialect.getTableExistsQuery(options.table))
      try {
        statement.setQueryTimeout(options.queryTimeout)
        statement.executeQuery()
      } finally {
        statement.close()
      }
    }.isSuccess
  }

  /**
   * Drops a table from the JDBC database.
   */
  def dropTable(conn: Connection, table: String, options: JDBCOptions): Unit = {
    val statement = conn.createStatement
    try {
      statement.setQueryTimeout(options.queryTimeout)
      statement.executeUpdate(s"DROP TABLE $table")
    } finally {
      statement.close()
    }
  }

  /**
   * Truncates a table from the JDBC database without side effects.
   */
  def truncateTable(conn: Connection, options: JdbcOptionsInWrite): Unit = {
    val dialect = JdbcDialects.get(options.url)
    val statement = conn.createStatement
    try {
      statement.setQueryTimeout(options.queryTimeout)
      val truncateQuery = if (options.isCascadeTruncate.isDefined) {
        dialect.getTruncateQuery(options.table, options.isCascadeTruncate)
      } else {
        dialect.getTruncateQuery(options.table)
      }
      statement.executeUpdate(truncateQuery)
    } finally {
      statement.close()
    }
  }

  def isCascadingTruncateTable(url: String): Option[Boolean] = {
    JdbcDialects.get(url).isCascadingTruncateTable()
  }

  /**
   * Returns an Insert SQL statement for inserting a row into the target table via JDBC conn.
   */
  def getInsertStatement(
      table: String,
      rddSchema: StructType,
      tableSchema: Option[StructType],
      isCaseSensitive: Boolean,
      dialect: JdbcDialect): String = {
    val columns = if (tableSchema.isEmpty) {
      rddSchema.fields.map(x => dialect.quoteIdentifier(x.name)).mkString(",")
    } else {
      val columnNameEquality = if (isCaseSensitive) {
        org.apache.spark.sql.catalyst.analysis.caseSensitiveResolution
      } else {
        org.apache.spark.sql.catalyst.analysis.caseInsensitiveResolution
      }
      // The generated insert statement needs to follow rddSchema's column sequence and
      // tableSchema's column names. When appending data into some case-sensitive DBMSs like
      // PostgreSQL/Oracle, we need to respect the existing case-sensitive column names instead of
      // RDD column names for user convenience.
      val tableColumnNames = tableSchema.get.fieldNames
      rddSchema.fields.map { col =>
        val normalizedName = tableColumnNames.find(f => columnNameEquality(f, col.name)).getOrElse {
          throw new AnalysisException(s"""Column "${col.name}" not found in schema $tableSchema""")
        }
        dialect.quoteIdentifier(normalizedName)
      }.mkString(",")
    }
    val placeholders = rddSchema.fields.map(_ => "?").mkString(",")
    s"INSERT INTO $table ($columns) VALUES ($placeholders)"
  }

  /**
   * Retrieve standard jdbc types.
   *
   * @param dt The datatype (e.g. [[org.apache.spark.sql.types.StringType]])
   * @return The default JdbcType for this DataType
   */
  def getCommonJDBCType(dt: DataType): Option[JdbcType] = {
    dt match {
      case IntegerType => Option(JdbcType("INTEGER", java.sql.Types.INTEGER))
      case LongType => Option(JdbcType("BIGINT", java.sql.Types.BIGINT))
      case DoubleType => Option(JdbcType("DOUBLE PRECISION", java.sql.Types.DOUBLE))
      case FloatType => Option(JdbcType("REAL", java.sql.Types.FLOAT))
      case ShortType => Option(JdbcType("INTEGER", java.sql.Types.SMALLINT))
      case ByteType => Option(JdbcType("BYTE", java.sql.Types.TINYINT))
      case BooleanType => Option(JdbcType("BIT(1)", java.sql.Types.BIT))
      case StringType => Option(JdbcType("TEXT", java.sql.Types.CLOB))
      case BinaryType => Option(JdbcType("BLOB", java.sql.Types.BLOB))
      case TimestampType => Option(JdbcType("TIMESTAMP", java.sql.Types.TIMESTAMP))
      case DateType => Option(JdbcType("DATE", java.sql.Types.DATE))
      case t: DecimalType => Option(
        JdbcType(s"DECIMAL(${t.precision},${t.scale})", java.sql.Types.DECIMAL))
      case _ => None
    }
  }

  private def getJdbcType(dt: DataType, dialect: JdbcDialect): JdbcType = {
    dialect.getJDBCType(dt).orElse(getCommonJDBCType(dt)).getOrElse(
      throw new IllegalArgumentException(s"Can't get JDBC type for ${dt.catalogString}"))
  }

  /**
   * Maps a JDBC type to a Catalyst type.  This function is called only when
   * the JdbcDialect class corresponding to your database driver returns null.
   *
   * @param sqlType - A field of java.sql.Types
   * @return The Catalyst type corresponding to sqlType.
   */
  private def getCatalystType(
      sqlType: Int,
      precision: Int,
      scale: Int,
      signed: Boolean): DataType = {
    val answer = sqlType match {
      // scalastyle:off
      case java.sql.Types.ARRAY         => null
      case java.sql.Types.BIGINT        => if (signed) { LongType } else { DecimalType(20,0) }
      case java.sql.Types.BINARY        => BinaryType
      case java.sql.Types.BIT           => BooleanType // @see JdbcDialect for quirks
      case java.sql.Types.BLOB          => BinaryType
      case java.sql.Types.BOOLEAN       => BooleanType
      case java.sql.Types.CHAR          => StringType
      case java.sql.Types.CLOB          => StringType
      case java.sql.Types.DATALINK      => null
      case java.sql.Types.DATE          => DateType
      case java.sql.Types.DECIMAL
        if precision != 0 || scale != 0 => DecimalType.bounded(precision, scale)
      case java.sql.Types.DECIMAL       => DecimalType.SYSTEM_DEFAULT
      case java.sql.Types.DISTINCT      => null
      case java.sql.Types.DOUBLE        => DoubleType
      case java.sql.Types.FLOAT         => FloatType
      case java.sql.Types.INTEGER       => if (signed) { IntegerType } else { LongType }
      case java.sql.Types.JAVA_OBJECT   => null
      case java.sql.Types.LONGNVARCHAR  => StringType
      case java.sql.Types.LONGVARBINARY => BinaryType
      case java.sql.Types.LONGVARCHAR   => StringType
      case java.sql.Types.NCHAR         => StringType
      case java.sql.Types.NCLOB         => StringType
      case java.sql.Types.NULL          => null
      case java.sql.Types.NUMERIC
        if precision != 0 || scale != 0 => DecimalType.bounded(precision, scale)
      case java.sql.Types.NUMERIC       => DecimalType.SYSTEM_DEFAULT
      case java.sql.Types.NVARCHAR      => StringType
      case java.sql.Types.OTHER         => null
      case java.sql.Types.REAL          => DoubleType
      case java.sql.Types.REF           => StringType
      case java.sql.Types.REF_CURSOR    => null
      case java.sql.Types.ROWID         => LongType
      case java.sql.Types.SMALLINT      => IntegerType
      case java.sql.Types.SQLXML        => StringType
      case java.sql.Types.STRUCT        => StringType
      case java.sql.Types.TIME          => TimestampType
      case java.sql.Types.TIME_WITH_TIMEZONE
                                        => null
      case java.sql.Types.TIMESTAMP     => TimestampType
      case java.sql.Types.TIMESTAMP_WITH_TIMEZONE
                                        => null
      case java.sql.Types.TINYINT       => IntegerType
      case java.sql.Types.VARBINARY     => BinaryType
      case java.sql.Types.VARCHAR       => StringType
      case _                            =>
        throw new SQLException("Unrecognized SQL type " + sqlType)
      // scalastyle:on
    }

    if (answer == null) {
      throw new SQLException("Unsupported type " + JDBCType.valueOf(sqlType).getName)
    }
    answer
  }

  /**
   * Returns the schema if the table already exists in the JDBC database.
   */
  def getSchemaOption(conn: Connection, options: JDBCOptions): Option[StructType] = {
    val dialect = JdbcDialects.get(options.url)

    try {
      val statement = conn.prepareStatement(dialect.getSchemaQuery(options.tableOrQuery))
      try {
        statement.setQueryTimeout(options.queryTimeout)
        Some(getSchema(statement.executeQuery(), dialect))
      } catch {
        case _: SQLException => None
      } finally {
        statement.close()
      }
    } catch {
      case _: SQLException => None
    }
  }

  /**
   * Takes a [[ResultSet]] and returns its Catalyst schema.
   *
   * @param alwaysNullable If true, all the columns are nullable.
   * @return A [[StructType]] giving the Catalyst schema.
   * @throws SQLException if the schema contains an unsupported type.
   */
  def getSchema(
      resultSet: ResultSet,
      dialect: JdbcDialect,
      alwaysNullable: Boolean = false): StructType = {
    val rsmd = resultSet.getMetaData
    val ncols = rsmd.getColumnCount
    val fields = new Array[StructField](ncols)
    var i = 0
    while (i < ncols) {
      val columnName = rsmd.getColumnLabel(i + 1)
      val dataType = rsmd.getColumnType(i + 1)
      val typeName = rsmd.getColumnTypeName(i + 1)
      val fieldSize = rsmd.getPrecision(i + 1)
      val fieldScale = rsmd.getScale(i + 1)
      val isSigned = {
        try {
          rsmd.isSigned(i + 1)
        } catch {
          // Workaround for HIVE-14684:
          case e: SQLException if
          e.getMessage == "Method not supported" &&
            rsmd.getClass.getName == "org.apache.hive.jdbc.HiveResultSetMetaData" => true
        }
      }
      val nullable = if (alwaysNullable) {
        true
      } else {
        rsmd.isNullable(i + 1) != ResultSetMetaData.columnNoNulls
      }
      val metadata = new MetadataBuilder().putLong("scale", fieldScale)
      val columnType =
        dialect.getCatalystType(dataType, typeName, fieldSize, metadata).getOrElse(
          getCatalystType(dataType, fieldSize, fieldScale, isSigned))
      fields(i) = StructField(columnName, columnType, nullable)
      i = i + 1
    }
    new StructType(fields)
  }

  /**
   * Convert a [[ResultSet]] into an iterator of Catalyst Rows.
   */
  def resultSetToRows(resultSet: ResultSet, schema: StructType): Iterator[Row] = {
    val inputMetrics =
      Option(TaskContext.get()).map(_.taskMetrics().inputMetrics).getOrElse(new InputMetrics)
    val fromRow = RowEncoder(schema).resolveAndBind().createDeserializer()
    val internalRows = resultSetToSparkInternalRows(resultSet, schema, inputMetrics)
    internalRows.map(fromRow)
  }

  private[spark] def resultSetToSparkInternalRows(
      resultSet: ResultSet,
      schema: StructType,
      inputMetrics: InputMetrics): Iterator[InternalRow] = {
    new NextIterator[InternalRow] {
      private[this] val rs = resultSet
      private[this] val getters: Array[JDBCValueGetter] = makeGetters(schema)
      private[this] val mutableRow = new SpecificInternalRow(schema.fields.map(x => x.dataType))

      override protected def close(): Unit = {
        try {
          rs.close()
        } catch {
          case e: Exception => logWarning("Exception closing resultset", e)
        }
      }

      override protected def getNext(): InternalRow = {
        if (rs.next()) {
          inputMetrics.incRecordsRead(1)
          var i = 0
          while (i < getters.length) {
            getters(i).apply(rs, mutableRow, i)
            if (rs.wasNull) mutableRow.setNullAt(i)
            i = i + 1
          }
          mutableRow
        } else {
          finished = true
          null.asInstanceOf[InternalRow]
        }
      }
    }
  }

  // A `JDBCValueGetter` is responsible for getting a value from `ResultSet` into a field
  // for `MutableRow`. The last argument `Int` means the index for the value to be set in
  // the row and also used for the value in `ResultSet`.
  private type JDBCValueGetter = (ResultSet, InternalRow, Int) => Unit

  /**
   * Creates `JDBCValueGetter`s according to [[StructType]], which can set
   * each value from `ResultSet` to each field of [[InternalRow]] correctly.
   */
  private def makeGetters(schema: StructType): Array[JDBCValueGetter] =
    schema.fields.map(sf => makeGetter(sf.dataType, sf.metadata))

  private def makeGetter(dt: DataType, metadata: Metadata): JDBCValueGetter = dt match {
    case BooleanType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        row.setBoolean(pos, rs.getBoolean(pos + 1))

    case DateType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        // DateTimeUtils.fromJavaDate does not handle null value, so we need to check it.
        val dateVal = rs.getDate(pos + 1)
        if (dateVal != null) {
          row.setInt(pos, DateTimeUtils.fromJavaDate(dateVal))
        } else {
          row.update(pos, null)
        }

    // When connecting with Oracle DB through JDBC, the precision and scale of BigDecimal
    // object returned by ResultSet.getBigDecimal is not correctly matched to the table
    // schema reported by ResultSetMetaData.getPrecision and ResultSetMetaData.getScale.
    // If inserting values like 19999 into a column with NUMBER(12, 2) type, you get through
    // a BigDecimal object with scale as 0. But the dataframe schema has correct type as
    // DecimalType(12, 2). Thus, after saving the dataframe into parquet file and then
    // retrieve it, you will get wrong result 199.99.
    // So it is needed to set precision and scale for Decimal based on JDBC metadata.
    case DecimalType.Fixed(p, s) =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        val decimal =
          nullSafeConvert[java.math.BigDecimal](rs.getBigDecimal(pos + 1), d => Decimal(d, p, s))
        row.update(pos, decimal)

    case DoubleType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        row.setDouble(pos, rs.getDouble(pos + 1))

    case FloatType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        row.setFloat(pos, rs.getFloat(pos + 1))

    case IntegerType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        row.setInt(pos, rs.getInt(pos + 1))

    case LongType if metadata.contains("binarylong") =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        val bytes = rs.getBytes(pos + 1)
        var ans = 0L
        var j = 0
        while (j < bytes.length) {
          ans = 256 * ans + (255 & bytes(j))
          j = j + 1
        }
        row.setLong(pos, ans)

    case LongType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        row.setLong(pos, rs.getLong(pos + 1))

    case ShortType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        row.setShort(pos, rs.getShort(pos + 1))

    case ByteType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        row.setByte(pos, rs.getByte(pos + 1))

    case StringType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        // TODO(davies): use getBytes for better performance, if the encoding is UTF-8
        row.update(pos, UTF8String.fromString(rs.getString(pos + 1)))

    case TimestampType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        val t = rs.getTimestamp(pos + 1)
        if (t != null) {
          row.setLong(pos, DateTimeUtils.fromJavaTimestamp(t))
        } else {
          row.update(pos, null)
        }

    case BinaryType =>
      (rs: ResultSet, row: InternalRow, pos: Int) =>
        row.update(pos, rs.getBytes(pos + 1))

    case ArrayType(et, _) =>
      val elementConversion = et match {
        case TimestampType =>
          (array: Object) =>
            array.asInstanceOf[Array[java.sql.Timestamp]].map { timestamp =>
              nullSafeConvert(timestamp, DateTimeUtils.fromJavaTimestamp)
            }

        case StringType =>
          (array: Object) =>
            // some underling types are not String such as uuid, inet, cidr, etc.
            array.asInstanceOf[Array[java.lang.Object]]
              .map(obj => if (obj == null) null else UTF8String.fromString(obj.toString))

        case DateType =>
          (array: Object) =>
            array.asInstanceOf[Array[java.sql.Date]].map { date =>
              nullSafeConvert(date, DateTimeUtils.fromJavaDate)
            }

        case dt: DecimalType =>
          (array: Object) =>
            array.asInstanceOf[Array[java.math.BigDecimal]].map { decimal =>
              nullSafeConvert[java.math.BigDecimal](
                decimal, d => Decimal(d, dt.precision, dt.scale))
            }

        case LongType if metadata.contains("binarylong") =>
          throw new IllegalArgumentException(s"Unsupported array element " +
            s"type ${dt.catalogString} based on binary")

        case ArrayType(_, _) =>
          throw new IllegalArgumentException("Nested arrays unsupported")

        case _ => (array: Object) => array.asInstanceOf[Array[Any]]
      }

      (rs: ResultSet, row: InternalRow, pos: Int) =>
        val array = nullSafeConvert[java.sql.Array](
          input = rs.getArray(pos + 1),
          array => new GenericArrayData(elementConversion.apply(array.getArray)))
        row.update(pos, array)

    case _ => throw new IllegalArgumentException(s"Unsupported type ${dt.catalogString}")
  }

  private def nullSafeConvert[T](input: T, f: T => Any): Any = {
    if (input == null) {
      null
    } else {
      f(input)
    }
  }

  // A `JDBCValueSetter` is responsible for setting a value from `Row` into a field for
  // `PreparedStatement`. The last argument `Int` means the index for the value to be set
  // in the SQL statement and also used for the value in `Row`.
  private type JDBCValueSetter = (PreparedStatement, Row, Int) => Unit

  private def makeSetter(
      conn: Connection,
      dialect: JdbcDialect,
      dataType: DataType): JDBCValueSetter = dataType match {
    case IntegerType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setInt(pos + 1, row.getInt(pos))

    case LongType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setLong(pos + 1, row.getLong(pos))

    case DoubleType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setDouble(pos + 1, row.getDouble(pos))

    case FloatType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setFloat(pos + 1, row.getFloat(pos))

    case ShortType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setInt(pos + 1, row.getShort(pos))

    case ByteType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setInt(pos + 1, row.getByte(pos))

    case BooleanType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setBoolean(pos + 1, row.getBoolean(pos))

    case StringType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setString(pos + 1, row.getString(pos))

    case BinaryType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setBytes(pos + 1, row.getAs[Array[Byte]](pos))

    case TimestampType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setTimestamp(pos + 1, row.getAs[java.sql.Timestamp](pos))

    case DateType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setDate(pos + 1, row.getAs[java.sql.Date](pos))

    case t: DecimalType =>
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        stmt.setBigDecimal(pos + 1, row.getDecimal(pos))

    case ArrayType(et, _) =>
      // remove type length parameters from end of type name
      val typeName = getJdbcType(et, dialect).databaseTypeDefinition
        .toLowerCase(Locale.ROOT).split("\\(")(0)
      (stmt: PreparedStatement, row: Row, pos: Int) =>
        val array = conn.createArrayOf(
          typeName,
          row.getSeq[AnyRef](pos).toArray)
        stmt.setArray(pos + 1, array)

    case _ =>
      (_: PreparedStatement, _: Row, pos: Int) =>
        throw new IllegalArgumentException(
          s"Can't translate non-null value for field $pos")
  }

  /**
   * Saves a partition of a DataFrame to the JDBC database.  This is done in
   * a single database transaction (unless isolation level is "NONE")
   * in order to avoid repeatedly inserting data as much as possible.
   *
   * It is still theoretically possible for rows in a DataFrame to be
   * inserted into the database more than once if a stage somehow fails after
   * the commit occurs but before the stage can return successfully.
   *
   * This is not a closure inside saveTable() because apparently cosmetic
   * implementation changes elsewhere might easily render such a closure
   * non-Serializable.  Instead, we explicitly close over all variables that
   * are used.
   *
   * Note that this method records task output metrics. It assumes the method is
   * running in a task. For now, we only records the number of rows being written
   * because there's no good way to measure the total bytes being written. Only
   * effective outputs are taken into account: for example, metric will not be updated
   * if it supports transaction and transaction is rolled back, but metric will be
   * updated even with error if it doesn't support transaction, as there're dirty outputs.
   */
  def savePartition(
      getConnection: () => Connection,
      table: String,
      iterator: Iterator[Row],
      rddSchema: StructType,
      insertStmt: String,
      batchSize: Int,
      dialect: JdbcDialect,
      isolationLevel: Int,
      options: JDBCOptions): Unit = {
    val outMetrics = TaskContext.get().taskMetrics().outputMetrics

    val conn = getConnection()
    var committed = false

    var finalIsolationLevel = Connection.TRANSACTION_NONE
    if (isolationLevel != Connection.TRANSACTION_NONE) {
      try {
        val metadata = conn.getMetaData
        if (metadata.supportsTransactions()) {
          // Update to at least use the default isolation, if any transaction level
          // has been chosen and transactions are supported
          val defaultIsolation = metadata.getDefaultTransactionIsolation
          finalIsolationLevel = defaultIsolation
          if (metadata.supportsTransactionIsolationLevel(isolationLevel))  {
            // Finally update to actually requested level if possible
            finalIsolationLevel = isolationLevel
          } else {
            logWarning(s"Requested isolation level $isolationLevel is not supported; " +
                s"falling back to default isolation level $defaultIsolation")
          }
        } else {
          logWarning(s"Requested isolation level $isolationLevel, but transactions are unsupported")
        }
      } catch {
        case NonFatal(e) => logWarning("Exception while detecting transaction support", e)
      }
    }
    val supportsTransactions = finalIsolationLevel != Connection.TRANSACTION_NONE
    var totalRowCount = 0L
    try {
      if (supportsTransactions) {
        conn.setAutoCommit(false) // Everything in the same db transaction.
        conn.setTransactionIsolation(finalIsolationLevel)
      }
      val stmt = conn.prepareStatement(insertStmt)
      val setters = rddSchema.fields.map(f => makeSetter(conn, dialect, f.dataType))
      val nullTypes = rddSchema.fields.map(f => getJdbcType(f.dataType, dialect).jdbcNullType)
      val numFields = rddSchema.fields.length

      try {
        var rowCount = 0

        stmt.setQueryTimeout(options.queryTimeout)

        while (iterator.hasNext) {
          val row = iterator.next()
          var i = 0
          while (i < numFields) {
            if (row.isNullAt(i)) {
              stmt.setNull(i + 1, nullTypes(i))
            } else {
              setters(i).apply(stmt, row, i)
            }
            i = i + 1
          }
          stmt.addBatch()
          rowCount += 1
          totalRowCount += 1
          if (rowCount % batchSize == 0) {
            stmt.executeBatch()
            rowCount = 0
          }
        }
        if (rowCount > 0) {
          stmt.executeBatch()
        }
      } finally {
        stmt.close()
      }
      if (supportsTransactions) {
        conn.commit()
      }
      committed = true
    } catch {
      case e: SQLException =>
        val cause = e.getNextException
        if (cause != null && e.getCause != cause) {
          // If there is no cause already, set 'next exception' as cause. If cause is null,
          // it *may* be because no cause was set yet
          if (e.getCause == null) {
            try {
              e.initCause(cause)
            } catch {
              // Or it may be null because the cause *was* explicitly initialized, to *null*,
              // in which case this fails. There is no other way to detect it.
              // addSuppressed in this case as well.
              case _: IllegalStateException => e.addSuppressed(cause)
            }
          } else {
            e.addSuppressed(cause)
          }
        }
        throw e
    } finally {
      if (!committed) {
        // The stage must fail.  We got here through an exception path, so
        // let the exception through unless rollback() or close() want to
        // tell the user about another problem.
        if (supportsTransactions) {
          conn.rollback()
        } else {
          outMetrics.setRecordsWritten(totalRowCount)
        }
        conn.close()
      } else {
        outMetrics.setRecordsWritten(totalRowCount)

        // The stage must succeed.  We cannot propagate any exception close() might throw.
        try {
          conn.close()
        } catch {
          case e: Exception => logWarning("Transaction succeeded, but closing failed", e)
        }
      }
    }
  }

  /**
   * Compute the schema string for this RDD.
   */
  def schemaString(
      schema: StructType,
      caseSensitive: Boolean,
      url: String,
      createTableColumnTypes: Option[String] = None): String = {
    val sb = new StringBuilder()
    val dialect = JdbcDialects.get(url)
    val userSpecifiedColTypesMap = createTableColumnTypes
      .map(parseUserSpecifiedCreateTableColumnTypes(schema, caseSensitive, _))
      .getOrElse(Map.empty[String, String])
    schema.fields.foreach { field =>
      val name = dialect.quoteIdentifier(field.name)
      val typ = userSpecifiedColTypesMap
        .getOrElse(field.name, getJdbcType(field.dataType, dialect).databaseTypeDefinition)
      val nullable = if (field.nullable) "" else "NOT NULL"
      sb.append(s", $name $typ $nullable")
    }
    if (sb.length < 2) "" else sb.substring(2)
  }

  /**
   * Parses the user specified createTableColumnTypes option value string specified in the same
   * format as create table ddl column types, and returns Map of field name and the data type to
   * use in-place of the default data type.
   */
  private def parseUserSpecifiedCreateTableColumnTypes(
      schema: StructType,
      caseSensitive: Boolean,
      createTableColumnTypes: String): Map[String, String] = {
    def typeName(f: StructField): String = {
      // char/varchar gets translated to string type. Real data type specified by the user
      // is available in the field metadata as HIVE_TYPE_STRING
      if (f.metadata.contains(HIVE_TYPE_STRING)) {
        f.metadata.getString(HIVE_TYPE_STRING)
      } else {
        f.dataType.catalogString
      }
    }

    val userSchema = CatalystSqlParser.parseTableSchema(createTableColumnTypes)
    val nameEquality = if (caseSensitive) {
      org.apache.spark.sql.catalyst.analysis.caseSensitiveResolution
    } else {
      org.apache.spark.sql.catalyst.analysis.caseInsensitiveResolution
    }

    // checks duplicate columns in the user specified column types.
    SchemaUtils.checkColumnNameDuplication(
      userSchema.map(_.name), "in the createTableColumnTypes option value", nameEquality)

    // checks if user specified column names exist in the DataFrame schema
    userSchema.fieldNames.foreach { col =>
      schema.find(f => nameEquality(f.name, col)).getOrElse {
        throw new AnalysisException(
          s"createTableColumnTypes option column $col not found in schema " +
            schema.catalogString)
      }
    }

    val userSchemaMap = userSchema.fields.map(f => f.name -> typeName(f)).toMap
    if (caseSensitive) userSchemaMap else CaseInsensitiveMap(userSchemaMap)
  }

  /**
   * Parses the user specified customSchema option value to DataFrame schema, and
   * returns a schema that is replaced by the custom schema's dataType if column name is matched.
   */
  def getCustomSchema(
      tableSchema: StructType,
      customSchema: String,
      nameEquality: Resolver): StructType = {
    if (null != customSchema && customSchema.nonEmpty) {
      val userSchema = CatalystSqlParser.parseTableSchema(customSchema)

      SchemaUtils.checkColumnNameDuplication(
        userSchema.map(_.name), "in the customSchema option value", nameEquality)

      // This is resolved by names, use the custom filed dataType to replace the default dataType.
      val newSchema = tableSchema.map { col =>
        userSchema.find(f => nameEquality(f.name, col.name)) match {
          case Some(c) => col.copy(dataType = c.dataType)
          case None => col
        }
      }
      StructType(newSchema)
    } else {
      tableSchema
    }
  }

  /**
   * Saves the RDD to the database in a single transaction.
   */
  def saveTable(
      df: DataFrame,
      tableSchema: Option[StructType],
      isCaseSensitive: Boolean,
      options: JdbcOptionsInWrite): Unit = {
    val url = options.url
    val table = options.table
    val dialect = JdbcDialects.get(url)
    val rddSchema = df.schema
    val getConnection: () => Connection = createConnectionFactory(options)
    val batchSize = options.batchSize
    val isolationLevel = options.isolationLevel

    val insertStmt = getInsertStatement(table, rddSchema, tableSchema, isCaseSensitive, dialect)
    val repartitionedDF = options.numPartitions match {
      case Some(n) if n <= 0 => throw new IllegalArgumentException(
        s"Invalid value `$n` for parameter `${JDBCOptions.JDBC_NUM_PARTITIONS}` in table writing " +
          "via JDBC. The minimum value is 1.")
      case Some(n) if n < df.rdd.getNumPartitions => df.coalesce(n)
      case _ => df
    }
    repartitionedDF.rdd.foreachPartition { iterator => savePartition(
      getConnection, table, iterator, rddSchema, insertStmt, batchSize, dialect, isolationLevel,
      options)
    }
  }

  /**
   * Creates a table with a given schema.
   */
  def createTable(
      conn: Connection,
      tableName: String,
      schema: StructType,
      caseSensitive: Boolean,
      options: JdbcOptionsInWrite): Unit = {
    val strSchema = schemaString(
      schema, caseSensitive, options.url, options.createTableColumnTypes)
    val createTableOptions = options.createTableOptions
    // Create the table if the table does not exist.
    // To allow certain options to append when create a new table, which can be
    // table_options or partition_options.
    // E.g., "CREATE TABLE t (name string) ENGINE=InnoDB DEFAULT CHARSET=utf8"
    val sql = s"CREATE TABLE $tableName ($strSchema) $createTableOptions"
    val statement = conn.createStatement
    try {
      statement.setQueryTimeout(options.queryTimeout)
      statement.executeUpdate(sql)
    } finally {
      statement.close()
    }
  }

  /**
   * Rename a table from the JDBC database.
   */
  def renameTable(
      conn: Connection,
      oldTable: String,
      newTable: String,
      options: JDBCOptions): Unit = {
    val dialect = JdbcDialects.get(options.url)
    val statement = conn.createStatement
    try {
      statement.setQueryTimeout(options.queryTimeout)
      statement.executeUpdate(dialect.renameTable(oldTable, newTable))
    } finally {
      statement.close()
    }
  }
}

redpajama_set_name: RedPajamaGithub


text:
Off the Press
Planet Red
Translation Magic
Myths of Mariel
The Role of Intellectuals
EDITORIAL TEAM & BOARD
YOUTH, INDISCIPLINE, AND THE POLITICAL. By Jennifer Lambe
In January, I had stepped off the airplane in Havana fresh with the anticipation of change. It was hard not to be excited about traveling to a Cuba on the verge of normalization, whatever that might mean. More encouraging still had been the reaction of ordinary, and especially young, Cubans to the news, as merriment overtook the streets of our island neighbor. "People were pretty much throwing themselves in the streets and celebrating," one young man told me. Or, as another Cuban friend had put it in the briefest of New Year's messages: "Long live Obama!"
Six months later, July 20 marked the official resumption of diplomatic relations with the reopening of embassies in Havana and Washington. Amidst the photo ops and musical interludes in the U.S. press, it was easy to miss another story that Cuban media circulated with an intensity suggestive of significance. This was the meeting of the Tenth Congress of the UJC, or Cuba's Young Communist League, and, if one is to judge from Cuban coverage, the war is far from over. "President Obama has said that even if the strategy has changed, the objective remains the same," reported a delegate from Holguín. In the words of a Granma representative, "the number of students with low grades in Cuban history, is the number of students vulnerable to ideological subversion."
Between these two impressions—euphoria over political opening and concern about imperialist aggression—lies the open wound of a generational divide
Between these two impressions—euphoria over political opening and concern about imperialist aggression—lies the open wound of a generational divide: on one hand, the young people who have long "dreamed of airplanes," imagining that their only possibilities lay on the other side of the Florida straits, and, on the other, state officials and their youthful partisans painting that alienation as a political liability.
Generational struggle is as old as the Cuban Revolution itself, and it would be easy to exaggerate the novelty of this round. Already in the 1960s, young people learned to regard their parents—sometimes literally—as the obstacles to revolutionary advance. Unlike their children, middle-aged Cubans were tainted with the sin of having grown up "before." And so, in ways great and small, the state began to adopt a parental role, albeit never on the level hyperbolically imagined in the "Pedro Pan" exodus. In literacy campaigns and special schools, officials worked to forge a corps of loyal foot soldiers, and many young people undoubtedly experienced this as liberating and galvanizing. But, by the mid-1960s, young Cubans would also end up targets of that state-cum-parent, disparaged for imbibing foreign music (the Beatles), fashion (tight pants), and sexual expression (read: homosexuality). Prodigal sons and daughters, even when they were not: state repression of cultural manifestations politicized phenomena that were rarely dissident in principle.
Young people may be Oedipally destined to battle their parents, but I have been surprised by the virulence of cultural conflicts during my own travels to Cuba. The past few years have witnessed reggaetón's dizzying rise to popularity and, along with it, denunciations of what officials have come to call "social indiscipline." Euphemisms often hide as much as they reveal, and social indiscipline is no exception: EcuRed, Cuba's Wikipedia, defines it as the "complete absence of a behavior considered normal and expected within the context in which it is produced." In practice, social indiscipline has come to condense multiple sins of generations past—from catcalling to trash dumping, loud music and workplace theft. As Nora Gámez Torres argued in her 2012 article "Hearing the Change: Reggaetón and Emergent Values in Cuba," the consumerist desires of reggaetoneros and their young fans have thereby been depicted as paradigmatic violations of socialist decency.
The tone of the battle has ramped up in response to imminent political change, even if it remains largely discursive for now. Popular culture has again been subject to damning assessments, with the cultural consumption of young people painted as a political threat. This was one of the pressing missions identified at last month's UJC Congress, where delegates pledged to "defend the revolution, be it from a direct military intervention or from an avalanche of pseudo-culture, customs and values promoted by capitalism."
So just how estranged are young Cubans? Is the state right to present their cultural tastes as the key to socialist survival? Recent events may offer some tentative answers.
In an instance of uncanny doubling, December 17 saw the announcement of a quite different set of "new laws" at the hands of popular reggaetón artists. In a video released on that day and shot on the island by Los Desiguales with El Yonky, Eddy K, and Gilbert Man—several of whom now live in Miami—the singers act out what amounts to a Scarface-esque fantasy of mafiapocalypse. In its depiction of a turf war between gangs, "No hay break" relies on violent imagery little seen in any Cuban cultural medium. Indeed, much about it feels strangely un-Cuban. A rejection of perceived foreignness in turn characterized the reactions of many Cubans to the video, at least as we can judge from comment threads on Facebook and YouTube. As one viewer put it, in a firmly worded response: "No to violence. We might not have much food, or much money either, but we also don't have much violence. Don't promote this s***."
Soon thereafter, that rejection was reinforced on an official level by the spectacular arrest of Gilbert Man, who had managed to build a small fiefdom in his Guanabacoa neighborhood with profits from Miami credit card fraud. (Indeed, reggaetoneros seem to forecast a legal cooperation between Cuba and the U.S., with megastars Chacal y Yakarta facing fraud charges in Miami at the hands of their former promoters). In an unparalleled state use of informal distribution networks, the Ministry of the Interior leaked a video of the arrest, which proceeded through an excruciating display of the reggaetonero's clothes, cars, and electronics. The message should have been clear: in a neat inversion of 1960s campaigns against "ill-gotten gains" of the bourgeois past, Cubans were being asked to denounce a renegade from revolutionary morality (not to mention U.S. legal codes). "Under capitalism, thuggery is a prestigious profession," proclaimed one Cuban editorialist, "do we want it in Cuba?"
Thuggery, no—but capitalism…perhaps? Young Cubans manifest little reverence for the Socialist state that once inspired their elders' allegiance. Meanwhile, the partisanship of some young people for unfettered capitalism, at least on the microeconomic level, can seem dangerous to their parents, who retain memories of what U.S. economic penetration once looked like in Cuba. In a culture in which price and productivity are estranged from clear referents, older generations view their children's affection for designer clothes and U.S. lifestyles as a sign of naiveté.
Ultimately, of course, the dimensions and pace of capitalization lie beyond the control of young people and their parents alike. Those who worry about its implications are undoubtedly justified, especially in a Havana that now regularly sees beggars sleeping on the streets. Even the new leisure geography of the capital, with its trendy restaurants and clubs, is priced far beyond the reach of ordinary Cubans. When the embargo is finally lifted, U.S. business owners and cultural promoters will lose little sleep over the threat of cultural imperialism or wealth stratification, for that matter.
In Cuba, the problem is not that young people have decided to take charge of their own cultural consumption. It is rather that they have been given so little opportunity to do so.
But official admonitions about social indiscipline and cultural mesmerism effectively miss the point. Cultural democratization is inherent neither to capitalism nor socialism; both systems, in their way, work to inhibit it. Cuban voices are right to critique the mechanisms of cultural distribution in the U.S., but what if they were to turn that lens back on themselves? In Cuba, the problem is not that young people have decided to take charge of their own cultural consumption. It is rather that they have been given so little opportunity to do so.
I have said that the terms of this debate are hardly new. It is worth pointing out just how old they are. In 1913, Cuban intellectual Enrique José Varona took to the pages of Cuba Contemporánea to denounce the country's "disastrous descent into social indiscipline," thereby launching an ongoing public debate (1). Varona was voicing a widely felt pessimism among Cuban intellectuals about the disappointing state that had succeeded independence in 1898, along with the "immaturity" of popular political engagement. In the words of Manuel Márquez Sterling, "indiscipline" was a "consequence of the lack of preparation for certain exercises of freedom; the absence of a clear horizon in the possession of our destinies; the nonexistence of principles to organize everything that is, in our country, still to be organized" (2). Varona, too, pointed to the missing weight of a formerly authoritarian state: a salutary development, but a potentially anarchic one, too.
It is not hard to see a direct line between the political pretensions of elites past and present. In moments of uncertainty, Cuban officials and intellectuals have often cast blame at the social habits of those located outside of state power. If revolutionary leaders once again see anomie before them, though, is that not also a symptom of the state? Cuban history tells us that culture wars are always and inevitably political.
(1) Enrique José Varona, "Nuestra indisciplina," Cuba Contemporánea 2, no. 1 (May 1913): 12.
(2) Manuel Márquez Sterling, Alrededor de nuestra psicología (Havana: Imprenta Avisador Comercial, 1906), 66.
Photo: "Our project's fundamental clay is young people." Havana billboard. By Valentos SG.
PDF/PRINT/EMAIL
Jennifer Lambe
Jennifer Lambe is an Assistant Professor of Latin American and Caribbean history at Brown University. Her current book project, Madhouse: Cuban History from the Margins , traces the history of mental illness and mental healing in Cuba from the colonial period through 1980.
This author does not have any more posts.
When Women Leave, Who Cares for the Elderly? By ELAINE ACOSTA
If Betsy DeVos met Ena Elsa Velázquez. By RU DAWLEY-CARR and DENNI BLUM
Cuban Travelogues into the Futures Past. By PALOMA DUONG
When We, Cubans, Were Refugees. By LISA GARCÍA BEDOLLA
#HASHTAGFIDEL. By Anna Cristina Pertierra
Jossianna Arroyo (U. Texas-Austin)
Albert Sergio Laguna (Yale U.)
Ana López (Tulane U.)
Jacqueline Loss (U. Conn)
Lillian Manzor (U. Miami)
José Pineda (Anthro Journeys)
Eliana Rivero (U. Az)
Alan West-Durán (Northeastern U.)
Esther Whitfield (Brown U.)
RUTH BEHAR (U Michigan, U.S.)
JOAQUIN BORGES-TRIANA (Juventud Rebelde, Cuba)
LARRY CATÁ BACKER (Pennsylvania State U., U.S.)
KAREN DUBINKSY (Queens U, Canada)
ALEX GIL (Columbia U., U.S.)
TED HENKEN (Baruch Col, US)
HENRY ERIC HERNANDEZ (U de las Artes, Cuba)
ANNA CRISTINA PERTIERRA (UWestern Sydney, Australia)
Afro Cuba book review Camagüey cinema connectivity Cuban America diplomacy economy education Europe event review Fidel Castro food government Havana history ideology inequality intellectuals interview language law literature Marti mass media medicine memory Miami migration museums music poetry politics race relations religion Santiago science sports technology travel Trump U.S. Cuban relations visual arts women youth
Cuba Counterpoints © 2015-2018 All Rights Reserved -- ISSN 2380-0917

redpajama_set_name: RedPajamaCommonCrawl


text:
Exercise Can Save Your Brain!
Alzheimer's disease makes just about everyone's short list of aging fears. The disorder robs individuals of their memories…their sense of self…their connection to friends and family. It's hard on everyone who has to watch their loved one disappear before their eyes.
Now, scientific research published in The Archives of Neurology offers a small—but statistically significant—ray of hope for anyone hoping to prevent Alzheimer's disease. The answer: Walking!
The scientists studied 201 healthy adults (ages 45 to 88). The participants were tested for genetic predisposition to Alzheimer's disease, and were given a brain scan to look for signs of amyloid plaques, the abnormal protein deposits that are a characteristic of the brains of Alzheimer's patients. Fifty-six participants tested positive for the APOE-e4 gene, a marker that increases the risk of developing Alzheimer's disease by a factor of 15. None of the participants had signs of Alzheimer's disease at the beginning of the study. Finally, everyone completed detailed questionnaires about their exercise habits.
According to an article in The New York Times:
The volunteers who reported walking or jogging often — meeting (or, in rare instances, exceeding) the American Heart Association's exercise recommendation of 30 minutes of moderate or vigorous activity five times a week — had fewer amyloid plaques than the volunteers who reported almost never exercising….
The carriers of the gene who reported walking or jogging for at least 30 minutes five times a week had plaque accumulation similar to that of volunteers who were e4-negative. In essence, the APOE-e4 gene carriers mitigated their inherited risk for developing Alzheimer's by working out.
So moderate exercise was protective against Alzheimer's disease…even for people who have an extremely high genetic risk of developing the disease. The scientists have a lot more work to do to figure out why exercise is protective, but for the average person, the take-home lesson is that exercise should become a part of daily health habits for everyone—but especially for those with a family history of Alzheimer's disease.
"There are so many benefits to exercise," [Denise Head, an associate professor of psychology at Washington University who led the study] says, "and one may be that it helps the brain" to defend itself against the slow leaking away of memory.
Now that's science we can get behind!


* Legacy Product: Replaced the highly succesful C6713Compact, with extended availability for our long-term commercial customers, but not recommended for new designs. Please visit our home page for the latest active products.
The micro-line C6713Compact-2 replaces the highly successful C6713Compact, providing the same capabiltiies, but with a more current and capable Spartan-6 FPGA.
The C6713Compact-2 offers a flexible DSP/FPGA single board solution for developers requiring integrated DSP, FPGA, and FireWire resources. It can be used as a stand-alone system, or as a mezzanine daughtercard embedded within a larger system or board design.
The design incorporates a high performance TMS320C6713 floating-point DSP Processor, a Spartan-6 FPGA, IEEE 1394 FireWire communications interface, up to 64MBytes of SDRAM, and 8MBytes of FLASH ROM.
In situations where additional functionality is required, developers can extend the capabilities of the C6713Compact-2 with their own application-specific hardware. External hardware is easily interfaced with the TMS320C6713 processor or connected directly to the Spartan-6 FPGA.
The micro-line power supply functions as a base for a micro-line stack of DSP, data acquisition and I/O boards. It delivers power to the micro-line stack and provides additional services such as RS-232 communications connector, a reset button and a power-on indicator. OEM developers may wish to mount the micro-line stack on their own hardware.
A rich suite of peripheral & I/O options are provided for interfacing with micro-line DSP boards. These include serial and parallel digital I/O, 400MBit/sec IEEE 1394 FireWire communications, and direct access to the micro-line bus for memory mapped peripheral hardware design and integration.
The on-board FireWire interface facilitates C6713Compact-2 integration with other embedded DSP resources, cameras, sensors, and host computers. FireWire provides guaranteed bandwidth for mission critical applications, live connect/disconnect, and many other impressing features.


text:
Westinghouse Rail Systems Gets Employee Productivity On the Right Track With Imprivata
OneSign Appliance Boosts User Satisfaction and Productivity, Drives Down Helpdesk Costs
LEXINGTON, MA - 17 August 2009 - Imprivata®, Inc the employee access management company, today announced that Westinghouse Rail Systems, a world leader in advanced signaling and integrated control systems for railways, has implemented Imprivata OneSign® to provide employees across five major UK sites and 11 global satellite sites with improved access to a range of business-critical applications via strong authentication management, finger biometrics and single sign-on.
Through Imprivata partner Somerford Associates, the roll-out of OneSign to more than 1,500 Westinghouse employees has enabled the organisation to reduce IT help desk costs by cutting down password reset calls significantly. Westinghouse has also improved employee productivity and user satisfaction by replacing complex multiple password requirements for more than 15 disparate applications including the HR intranet, expenses, web-driven and legacy applications with single sign-on delivered through the OneSign appliance.
This was achieved by Westinghouse providing a small and dedicated project implementation team headed up by Dave Skinner in the role of Project Manager and John Woodriff as the Application Architect. The project was fully implemented across all UK sites within six weeks from start to finish. Plans are in motion for the application to be implemented across other part of the Rail Group of companies to build on the success at Westinghouse.
To test the suitability of the OneSign solution, Westinghouse's IT team ran a successful pilot with selected key trial users from across the organisation, and decided to rollout the solution across the business following positive feedback from employees involved in the scheme.
Additionally, via OneSign, Westinghouse has enabled fingerprint biometrics as a secondary factor of secure authentication for IT staff, providing an extra layer of security for mobile workers and IT staff using critical applications. With OneSign now delivering streamlined access to users at the organisation's main site in Chippenham, the IT project team has also installed a secondary appliance at a disaster recovery site in Euston, to ensure employees can continue to access applications via single sign-on even in the event of an IT outage.
"An IT satisfaction survey showed that our users' major frustration was having to remember multiple passwords for applications; on top of those passwords that were being reset at regular intervals, leading to locked out unproductive staff," said John Woodriff, Application Architect, Westinghouse Rail Systems. "With OneSign, we are able to simplify user access through single sign-on which helps boost employee productivity by streamlining the log-on process, reducing the number of locked out users whilst delivering the right levels of security for our organisation."
"Organisations globally face similar pain points around employee access management, whereby securing applications and ensuring employee productivity are often conflicting business objectives," said Omar Hussain, CEO, Imprivata. "By implementing Imprivata OneSign, hundreds of organisations from various sectors are addressing these challenges head on, and at the same time helping to significantly reduce helpdesk related costs by streamlining access to business applications and data."
Imprivata secures employee access to desktops, networks, applications and transactions. Its appliance-based, employee access management platform, OneSign, enables organizations to protect enterprise information assets while improving user productivity. By strengthening user authentication, streamlining application access and simplifying compliance reporting across multiple computing environments, customers realize substantial IT Help Desk and administration cost savings, while achieving the security standards they demand.
Imprivata is a recognised leader in Authentication and Access Management, receiving numerous product awards and top review ratings from leading industry publications and analysts. Headquartered in Lexington, Mass., Imprivata partners with over 200 resellers, and serves the access security needs of more than 800 customers around the world. For more information, please visit www.imprivata.com
Imprivata is a registered trademark of Imprivata, Inc. in the USA and other countries. All other product or company names mentioned are the property of their respective owners.
About Westinghouse
Westinghouse Rail Systems Limited, part of the global Invensys Rail Group, is a world leader in advanced signalling and integrated control systems for mainline and mass transit railways.
The organisation has been signalling railways for over 150 years,and the company's products and systems are at the heart of many of the world's major transport networks - from simple, single lines to heavy haul freight, inter-city, suburban and urban mass transit railways.
About Somerford Associates
Somerford provides innovative security solutions for the challenging area of Identity and Access Management. In its simplest form, Somerford ensures that the right person has access to the right information at the right time. This not only protects corporate assets, but it also ensures that staff, customers and suppliers can all be productive as they have timely access to relevant information.


text:
Q: Altering the Coloring of Arbitrary Cells in DataTables I have a DataTables table. Here's a simplified version of what I have as a result:
$('#dt_list').html( '

' );

$('#test').dataTable( {
    "bAutoWidth": true
    "aaData": [ 'val1', 'val2', 'val3' ],
    "aoColumns": [ 'col1', 'col2', 'col3' ],

});

...stuff here..

The JavaScript arrays are generated by a Python script based on values extracted from a MySQL database (it would be otherwise irrelevant, but I just want to make sure people reading this know that I'm dynamically generating the content arrays outside of JavaScript).
As I've said, the data being displayed on this table is the result of a MySQL query that is then processed by Python and output into the JavaScript in the page generated by Python.
I have logic in my Python code to determine not only what value goes into a cell, but also whether the cell requires any highlighting (via the cell's background color). My question here is, how can I arbitrarily change the color on certain DataTable cells?
Since most of my logic is in Python, I don't really need anything very fancy or elegant evaluations in the JavaScript, I just need some sort of way in JavaScript to manipulate a cell's CSS property or in some other way indicate a different coloring.
I've looked into fnRender and it seems my best hope. However, my two issues at this point are (a) I can't find a way to manipulate the color from within an fnRender function (it seems to be more targeted to manipulating the content itself) and (b) I'm unsure how I'd be able to have fnRender know the result of the Python operation to determine whether special coloring is needed.
Is there something I'm missing? Or maybe I just need to re-think how I am approaching this? Ideally I'd like a solution to this that doesn't involve reworking the way I'm doing this, but I'll change the way I generate the data or pass it if I must.  I'm modifying some existing code and would rather not mess with the existing design, but take the shortest, easiest path to converting its table listing output to DataTables, and part of that is generating certain cells as having a modified color.

A: Your "fnRender" callback can return cell contents wrapped in a marker  or
 (or whatever). You can then use the fnDrawCallback function to find those and tag the parent  element with a class.

redpajama_set_name: RedPajamaStackExchange


A few days ago, Nathanael hit his 18 month birthday.
Eating: still breastfeeding. When he thinks it's time to nurse, he uses The Word - "Ba!" He also lays down on my arm and makes a fake laugh/haha/anticipation sound. I don't often take the hint during the day. Doesn't like the things E loves - PBJ sandwiches, oatmeal, turkey and cheese, bread. Totally loves the things she doesn't - vegetables, soups, non-plain meats, pico de gallo (raw unions, tomatos, jalepenos, lime, cilantro). He is very good at feeding himself with spoons and forks. Sometimes he gets tired of chasing his food with utensils and uses his hands. He is very good at drinking from a cup. He does not like food on his hands. Or dirt, or anything else.
Sleeping: Co-sleeping - when we get a bit more space he'll be moved into his own bed. We might be trying to find space before then, though - the boy is bed hog! He takes one or two naps each day.
Traveling: He likes to "go" for a ride in the car, as long as it is short. And as long as Mom is in the back seat with him on longer trips. He likes to ride around in baby carriers, and has been known to bring one to me when he wants a ride. Like the 4 wheeler, and climbs on any time we are in the garage.
Language: He says more than 30 words. He is quiet around new people, but flirts with them from the safety mom or dad.
Knows how to fuss. When he doesn't want to do something, he plants his feet, bends a little at the waist, and screws up his face in a fuss. I hope to get the fussy face on camera at some point.
Knows how to open doors. He likes to escape to the back yard and eat the strawberries and parsley from the planter.
Has figured out how to hit is sister. They both love the spaceship grocery cart with two kid steering wheels. They both are constantly getting in each others face when riding in it, and there's much hand-flapping/girl fighting.
He also understands "no" and the 1-2-3 count.
He enjoys driving cars on things and people. He likes phones -"lo" and putting a phone to someones ear.
He likes to slide down the steps on his belly, feet first. He dances, he tries to jump.
Personality: a funny guy. Usually he does something during meal time that causes everyone to laugh.


text:
Highland's War
Highland Events
Next of Kin: Scottish Families and the Great War exhibition
Highlands News
Highland Highlights
Highlands Highlight
Highland Regiments
Murdo MacRae
Benjamin Steven
The Letters of Colonel Sir Donald Cameron of Lochiel
Notice printed in the Inverness Courier during the first week of the war.
It didn't take long for lines of communication to become established.
Letters were the principal form of communication between soldiers and their families during World War I. Hundreds of thousands of letters were sent by British soldiers back home every day. They were written in the trenches near the front line, in hospital beds far from the fighting and almost everywhere in between. Receiving letters from loved ones boosted morale immeasurably and postal deliveries were awaited with eager anticipation. Receiving a letter reassured soldiers that they were in the thoughts and hearts of their loved ones back home. Similarly, a letter in the soldier's own hand offered his parents, siblings, wife and children the reassurance that he was still alive.
Parcels also provided comfort - home-made food, warm clothing and keepsakes from home were welcomed and cherished. Mass parcel-sending schemes were set-up and co-ordinated by philanthropic women's groups and school children. These contained things like tobacco, socks, newspapers and books.
It didn't take long for lines of communication to become established and the movement and delivery of letters, particularly between Beitain and the Western Front, was remarkably rapid. A letter or parcel posted in the Highlands could reach its recipient at the Western Front in 3 - 4 days. The content of letters was prescribed by the military authorities who were concerned about the effects that knowing the true horror of the war would have on the civilian population. Censorship was necessary to guarantee that sensitive information did not fall into the wrong hands, to identify subversion, and to assess the morale and well-being of troops.
This censorship meant that letters home took a little longer to arrive.
The shear volume of mail was partly a result of the popularity of postcards. Soldiers at the front were given military-issue cards with pre-printed messages ("I am quite well", "I am wounded", "I am in receipt of your letter", etc.). These were free, convenient, and easily mass produced but were generally disliked by soldiers so commercial postcards were highly sought after. Back at home, there was a huge choice of comical, romantic and patriotic postcards for the civilian population to buy and send to the troops.
Newspapers, both national and local, were constrained by censorship imposed by the government, the military and often their own proprietors and they effectively became propaganda tools. The Defence of the Realm Act (DORA), enacted within a week of the commencement of hostilities, contained regulations which prevented newspapers from publishing stories which could damage the morale of either serving personnel or the civilian population. Similarly, stories of German atrocities and barbarism were embellished or simply made up.
Reporters were initially banned from the Front with all news coming from official army sources. However, the ban was soon relaxed, on the understanding that bad news was not to be published.
To see how the war was reported in Highland newspapers, please visit this website - http://goo.gl/x53Wkq
[Text © High Life Highland; image by Highland Libraries]


text:
Q: Start windows 64bit driver from 32bit app on 64bit windows Is there a work around for StartService in a 32bit program to start a 64bit driver on windows 64bit?
The reason i need to do it from 32bit program is that i compile the program under 32bit and 64bit depending on the type of process I'm working with.


join the NMRA To ioin the National Model Railroad Association, send $3 to NMRA, Box 1328-A, Station C, Canton 8, Ohio. You will get the monthly bulletin, data sheets, yearbook and other advantages of membership. Beautiful, sharp color slides of Steam Locomotives, all live and plenty of ACTION. No dead or storel engines. Also Display Locomotives and colorful Diesels, both CAB and HOOD types of many roads. TROLLEYS of many Cities. Wr'ite for FREE List. Send no money. R R COLOR SLIDES 35MM MOUNTED. 15 CENTS EACH. Box 1595-R STANLEY COLOR SLIDES Beverly Hills, Calif. NOW YOU CAN GET ATHEARN Parts See Your Dealer... If he cannot supply your needs, promptly, send stamped envelope for price lists to: G. F. HARBIN Official Athearn PARTS DEPOT 209 W. Bonita Ave. San Dimas, Calif. 4•./ 1 /f :.1, . th, -ri• v- »» 9 ...., ·Ii ./Se- ..., >9KfnEL: . i.-,1 ...:.'.'..,>3•,1 \..96:», .r-, \",• 5. 1 Lightweight access hole covers Large blocks of styrofoam from old refrigerators can be used as lightweight covers for access holes in the model railroad. You can carve the foam to the desired hilly contours, then spread a thin layer of texture paint over the surface.G. William Miles. Breaking in locos Add a small amount of "STP" (obtain- able at service stations) to the grease you use in breaking in a locomotive. It will work something like a molybdenum coating and produce a fine running engine.-Cy Stuppy and Aruid Anderson. Tool holder An old automobile distributor cap (available free at most garages) makes an excellent holder for small tools. Clean up the part and paint it and you'll have a seven-or nine-hole holder for knives, tweezers, screwdrivers, etc.-Edward Meserue. \/ T-501 RECTI- PACK Only formation. $3·95 •0 tractive molded case has hold down lugs at each end in case screwing to table top is desired. Reversing wide, the at- Used with any toy train transformer, the RECTIPACK will operate an IIO layout with two average HO locomotives. Only 6' long x 196042 I. Switch controls directions of trains. Nickel plated knurled brass thumb screr· terminals for easy connections. A heavy duty "Thermo-Cooled" rectifer converts the AC of transformer to DC for train operation. Packed with instructions containing extra useful in- position of switch. When lamp is pushed, switch changes and the other lamp will light. I"se singly or in gangs. Supplies with mounting screws, terminals. number strips and instructions. C ...9'=6-=g .:te. 1- :i:r rt•LAT, 1 •C»:.... - 1 lillI'l .0 \11'.BLACK #2•.... COVER \•'1••7-->*--BRONZE••-X SPR•NG -/BER - MOLDED .1.3 4$5;..:;VJJ_ 1 PNOSPHOR :76:'.*3219'1 ...'." ONLY 49c Push Button Switch Controller. Only 1,6- x 1,4" x 11,6- long. Feather touch phosphor bronze contacts. Use singly or gang up. Number strips, solderless terminali, jumper for electro-mechanical mating of two or more together, screirs & instructions included. Sold only in pairs. T-520 MINI-TROLS, pr. 980 THE AMAZING LITTLE T-600'S .--036. S...:==3' 19= ..,==- .. .. - le"5 -.•0*A-4 •i.,111:.5.; C *F·2». I ...-.....-I-/.-I-... ..I#...-i. . f'% **« I t•'-,5 ' . = 1 .r, .0 :,9 -I.- -:M I W .11 \ .... I ..,»-'. , '...M.. -91 E i. 5-- -- ..: ;Se£41#'*ls. '/F-. + ..r=*7.t ...,k I i Fits all Atlas switches ( 1959-60-61 1 . Color changes as switch is operated. Tells switch position at a glance. Shows Red for turn, Green when straight. Built in contacts control insulated Sldings, Operate Block Signals and Panel Board Lltes Automatically. Easily and quickly installed. Full instructions showing many uses including automatic operation for two trains. ./. i • •*•O'-2, T-602 SWITCH LITE INDICATOR _______$1.50 T-601 SWITCH CONTACTS ( not illuminated ) $1 ·00 00#V Contacts • any track and provides Pair, 9Sc *-15:- T-512 BLVD. ge LAMPS 1 --1'4,TZ' -• Wt,-lrIK' or•6.8• -JL item. Maximum • I•n•t,2.d 11- M A real quality 11 1• 1 ••,.1•1'iCH•••'•:<•pi•'•,•3Qf ;• ••••••t••••-••••••••' •, Authentic Replicas , -- -: r- .,1.IF-t'Z'-:;=4• 41 •,-1•_-2-- 5'LI[ii.[122.'r01,12•,I -P*-1 -76"·' 1 i All items available in rich gold or silver finish accented with black. to bring out the minutest details. All handsomely gift-boxed. Shop or Write Dept. MR-0 At Your Local Hobby / 0-6-0 SWITCHER OR GEEP DEISEL REPLICAS EXCEPT WHERE INDICATED in Gift Jewelry ALL ITEMS AVAILABLE IN D-Money Clip ..................................... 2.95 E-Key Chain 2.50 *"DROVER'S CABOOSE" Add 10% Fed. Tax to Ail Items (Mail Check or M.0.-No C.O.D.'s) November 1961 RAILROAD MEN'S SPECIALTIES · P.O. BOX 328. DOBBS FERRY. N. Y. A-Pinch Clip* for narrow ties ..............$1.95 B-Lariat Sport Tie.............................. 2.95 C-Tie Bar & "Caboose" Cuff Links Set 6.00 Tie Bar alone .................................. 2.50 j rf----- j Exclusive "AIR-SPACED" lugs are I color-coded and supplied with screws *199 •;'B •im in TYI•ERSand PER.Aa;Ma46-, FORMANCE036 NO SOLDERING 1 lilill'• I for easy connections.T-503, 1 amp ____-_----$1.95 Uf| -L-•J T-504,2 amp __________ 2.95 Au·:=•,7/,se&1v.@ controller made. Operates FOUR L Cff<U-Alll switches! only 2042 »i:•P'215.,04'12'68 touch" lifetime phosphor bronze spring contacts. NO SOLDERING! connections easily made with patented "PRESTLOCK" terminals. Use singly or Join two or more together, jumper for electrical and mechanical joining of two or more, included. Packed in gift type clear plastic box with mounting screws, terminals, number. strips and instructions. Send stamped, self-addressed envelope for literature. TOWER ENGINEERING Valley Stream, N. Y. P. 0. Box 32 AT BETTER DEALERS OR DIRECT 83 GREEN buttons, "feather i LVA' The most attractive, compact, r•61'•L T-505, 4 amp __________ 5.95 T-502 "JIFFY" SWITCH51.50 practical and economical switch long x lA" Lamps are griar. anteed for lif pair $1.95 ttaudgee•creb•rlr•• • Three tools in • one- SCREWDRIVER n $1.25 "TEST-LITE" T-506 3Ilt a *-96 Track Clip • ••i•ascrea,•i••,t•t:11•; , T-514 A Passing trains throw electrical connection. T-600 SWITCH SIGNAL LITE ___________$2.75 ( specify right or left ) SWITCH CONTROLLER $1.95 The push buttons are actually RED and GREEN lamps made especially for this controller. Connect to any sir:itch having movable contacts and the push lites will show RED or GREEN to indicate T-510 "PUSH-LITE"


text:
Dendrophthora nodosa är en sandelträdsväxtart som beskrevs av Patschovsky. Dendrophthora nodosa ingår i släktet Dendrophthora och familjen sandelträdsväxter. Inga underarter finns listade i Catalogue of Life.

Källor

Sandelträdsväxter
nodosa

redpajama_set_name: RedPajamaWikipedia


text:
Will's Culture Corner: December 2022 Edition
For many in our Explore & More community, December means it's time for the holiday season. However, no matter which holiday is being celebrated, everyone not only in our community but across the globe has their own unique traditions that bring a sense of joy and nostalgia. This month, the 'Culture Corner' write-up sheds some light on some fun international holiday customs, to showcase the variety of cultural practices, and perhaps lead your family to start a new holiday tradition!
One of the most lighthearted international holiday traditions comes from Spain, and more specifically the Catalan region. Here locals celebrate with the "Tió de Nadal," or Christmas log, "Tio" as it is referred too as, is a log that has a face drawn on it, and wears a blanket, that pops out gifts. 'Tio' is fed snacks throughout the month of December in anticipation of Christmas Eve when children hope it will pop out gifts.
Contrasting the lovable Spanish 'Tio' celebration is the Eastern and Central European (Austria, Bavaria, Northern Italy, Czechia) celebration of the Feast of St. Nicholas. On December 6th Santa Claus is accompanied by the Krampus, while Santa delivers the familiar presents, the Krampus comes to reprimand children who have misbehaved.
Traveling to Japan one can observe Ōmisoka where on December 31st the Japanese people prepare for the upcoming New Year by cleaning, and tidying their homes and themselves, in hopes to start the year with a clean slate. This New Year's Eve tradition is often accompanied with a meal of udon or soba noodles, as the eating of the long noodles symbolize the action of crossing into the new year.
These are just 3 examples of interesting and fun holiday traditions from around the world. Highlighting these holiday customs was intended to be a lighthearted showcase of global cultural traditions while encouraging reflection on the oddities that our families may partake in during the holiday season.
Filed under: Education Newsletters
Annie's STEM Lab: Snowy STEM
Every "Body" Can Play: Teaching Children about Friendship
Will's Culture Corner: February 2023 Edition
Did You Know? Celebrating African American History Month
Explore Even More: Sensory Bins
News & Special Events
Au-Some Activities
Our Au-Some Social Story


text:
<?php

use yii\helpers\Html;
use kartik\grid\GridView;

/* @var $this yii\web\View */
/* @var $searchModel app\models\CttStaticdataCountrysSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = Yii::t('app/ctt_staticdata_country', 'Ctt Staticdata Countrys(Language List)');
$this->params['breadcrumbs'][] = ['label' => Yii::t('app/ctt_staticdata_country', 'Ctt Staticdata Countrys'), 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>

    <?= GridView::widget([
        'bordered' => true,
        'striped' => false,
        'condensed' => false,
        'responsive' => true,
        'hover' => true,
        'dataProvider' => $dataProvider,
        'columns' => [
            [
                'class' => 'yii\grid\SerialColumn',
                'headerOptions' => ['class' => 'center-content'],
                'contentOptions' => ['class' => 'center-content'],
            ],

            [
                // See more options In http://www.yiiframework.com/doc-2.0/yii-grid-datacolumn.html
                'attribute' => 'lang',
                'headerOptions' => ['class' => 'center-content'],
                'value' => 'lang',
                'enableSorting' => true,
            ],
            [
                // See more options In http://www.yiiframework.com/doc-2.0/yii-grid-datacolumn.html
                'attribute' => 'name',
                'headerOptions' => ['class' => 'center-content'],
                'value' => 'name',
                'enableSorting' => true,
            ],

            [
                'class' => 'kartik\grid\ActionColumn',
                'header' => 'Actions',
                'headerOptions' => ['class' => 'center-content'],
                'contentOptions' => ['class' => 'center-content'],
            ],
        ],
        'panel'=>[
        'type' => GridView::TYPE_PRIMARY.' no-margin no-border-radius',
        'heading' => '
 '.Html::encode($this->title).'
',
        'headingOptions' => ['class' => 'no-border-radius'],
        'before' => '

'
                    .Html::a(' '
                            .Yii::t('app/ctt_staticdata_country', 'Add new language'),
                            ['create', 'id' => Yii::$app->request->getQueryParam('id')],
                            ['class' => 'btn btn-success']),
        ],
    ]); ?>


text:
Fire DVD
Reference EDVD-F-101
Director: Deepa Mehta. Cast: Shabana Azmi, Nandita Das.
The film is set in contemporary Delhi, India, in the household of a joint family which runs a fast-food and video business in the ground floor of their two-story home. The protagonists are the two daughters-in-law, both of whom have joined the family by marriage...
The film is set in contemporary Delhi, India, in the household of a joint family which runs a fast-food and video business in the ground floor of their two-story home. The protagonists are the two daughters-in-law, both of whom have joined the family by marriage: Sita (Nandita Das), who is newly wed to the younger son Jatin (Javed Jaffrey); and Radha (Shabana Azmi), who has been married to the elder son Ashok (Kulbhushan Kharbanda) for 15 years. Both couples are unhappy. Jatin, who feels he has been pressured into marriage by the family, neglects Sita and continues to see his Chinese girlfriend. Ashok has chosen to become a tapasvin (an ascetic) after discovering that Radha is infertile, and has been using her to test his resolve in celibacy for 13 years. The two women turn to each other for solace and become lovers. Tipped off by a servant, Ashok discovers them in bed together. Sita leaves, while Radha, who wishes to explain matters to Ashok, promises to meet her outside to start a new life together. In the confrontation that follows, Radha's sari catches fire from the kitchen stove and Ashok abandons her in flames. In the final scene, the two women are reunited.
7 wins & 1 nomination. More Info
Shabana Azmi, Nandita Das, Javed Jaffrey, Karishma Jhalani, Ramanjeet Kaur, Dilip Mehta, Vinay Pathak, Ranjit Chowdhry, Kulbhushan Kharbanda, Alice Poon, Ram Gopal Bajaj, Avijit Dutt
Deepa Mehta
Parched DVD
Director: Leena Yadav. Cast: Tannishtha Chatterjee, Radhika Apte, Lehar Khan. It's a story about women set in the heart of parched rural landscape of Rajasthan, India. It traces the bittersweet tale of four ordinary women Rani, Lajjo, Bijli and Janaki. We see...
Dil Dosti Etc DVD
BZ0085
Lingaa DVD (FR)
VOSTFR, BOLLYWOOD
Jagga Jasoos DVD
Director: Anurag Basu. Cast: Ranbir Kapoor, Katrina Kaif. Join Jagga, a gifted teenage detective, who along with a female companion, is on a quest to find his missing father.
Chak De India DVD
Director: Shimit Amin. Cast: Shah Rukh Khan, Shilpa Shukla. A captain misunderstood as a Traitor is forced to give up on his game and honor, finds opportunity to train the women's hockey team...
Namastey London DVD
Director: Vipul Amrutlal Shah. Cast: Akshay Kumar, Katrina Kaif. A man takes his thoroughly-British daughter to his home country, India. There, he arranges her marriage to someone she considers a fool. The daughter attempts to outwit them, but the groom quietly and patiently hatches his own plan.
TE3N DVD
Director: Ribhu Dasgupta. Cast: Amitabh Bachchan, Nawazuddin Siddiqui, Vidya Balan. A grandfather, police officer and a priest join hands to investigate and find a missing child.
Kaisay Kahein DVD
Munna Michael DVD
Director: Sabbir Khan. Cast: Tiger Shroff, Nawazuddin Siddiqui. A young man, tries to follow the footsteps of his idol, The King of Pop, Michael Jackson.
Black Friday - Collector 2 DVD
EDVDBF-2198
Director: Anurag Kashyap. Cast: Kay Kay Menon, Pavan Malhotra. Black Friday is a film about the investigations following the 1993 serial Bombay bomb blasts, told through the different stories of the people involved --police, conspirators, victims, middlemen.


After closing a major case, many times that is the end of the line for law enforcement. Sometimes, however, there is a major payoff, as is the case recently for the Sparta Police Department.
According to Police Chief Jeff Guth, the department received $11,552.11 from the Drug Enforcement Agency on April 7 from a case Investigator Allen Selby worked several years ago.
According to Guth, when law enforcement agencies work cases with the federal government, any recovered drug funds are distributed to the contributing law enforcement agencies in equitable shares.
This means that the distribution of the seized monies is determined by the percentage, of contribution made by each involved agency.
Guth says the funds will be deposited directly into the department's drug fund. Money in the drug fund can only be used for education, undercover drug investigations and equipment.
No taxpayer dollars, he says, are put into the drug fund; it is completely comprised of seized drug monies.
"We're making bad money good," Guth states.


text:
How Technology May Soon "Read" Your Mind
Incredible Research Lets Scientists Get A Glimpse At Your Thoughts
[via cbs]
How often have you wondered what your spouse is really thinking? Or your boss? Or the guy sitting across from you on the bus? We all take as a given that we'll never really know for sure. The content of our thoughts is our own - private, secret, and unknowable by anyone else. Until now, that is.
As correspondent Lesley Stahl reports, neuroscience research into how we think and what we're thinking is advancing at a stunning rate, making it possible for the first time in human history to peer directly into the brain to read out the physical make-up of our thoughts, some would say to read our minds.
The technology that is transforming what once was science fiction into just plain science is a specialized use of MRI scanning called "functional MRI," fMRI for short. It makes it possible to see what's going on inside the brain while people are thinking.
"You know, every time I walk into that scanner room and I see the person's brain appear on the screen, when I see those patterns, it is just incredible, unthinkable," neuroscientist Marcel Just told Stahl.
He calls it "thought identification."
Whatever you want to call it, what Just and his colleague Tom Mitchell at Carnegie Mellon University have done is combine fMRI's ability to look at the brain in action with computer science's new power to sort through massive amounts of data. The goal: to see if they could identify exactly what happens in the brain when people think specific thoughts.
They did an experiment where they asked subjects to think about ten objects - five of them tools like screwdriver and hammer, and five of them dwellings, like igloo and castle. They then recorded and analyzed the activity in the subjects' brains for each.
"The computer found the place in the brain where that person was thinking 'screwdriver'?" Stahl asked.
"Screwdriver isn't one place in the brain. It's many places in the brain. When you think of a screwdriver, you think about how you hold it, how you twist it, what it looks like, what you use it for," Just explained.
He told Stahl each of those functions are in different places.
When we think "screwdriver" or "igloo" for example, Just says neurons start firing at varying levels of intensity in different areas throughout the brain. "And we found that we could identify which object they were thinking about from their brain activation patterns," he said.
"We're identifying the thought that's occurring. It's…incredible, just incredible," he added.
"Are you saying that if you think of a hammer, that your brain is identical to my brain when I think of a hammer?" Stahl asked.
"Not identical. We have idiosyncrasies. Maybe I've had a bad experience with a hammer and you haven't, but it's close enough to identify each other's thoughts. So, you know, that was never known before," Just explained.
60 Minutes asked if his team was up for a challenge: would they take associate producer Meghan Frank, whose brain had never been scanned before, and see if the computer could identify her thoughts? Just and Mitchell agreed to give it a try and see if they could do it in almost real time.
Just said nobody had ever done an instant analysis like this.
Inside the scanner, Meghan was shown a series of ten items and asked to think for a few seconds about each one.
"If it all comes out right, when she's thinking 'hammer,' the computer will know she's thinking 'hammer'?" Stahl asked.
"Right," Mitchell replied.
Within minutes, the computer, unaware of what pictures Meghan had been shown and working only from her brain activity patterns as read out by the scanner, was ready to tell us, in its own voice, what it believed was the first object Meghan had been thinking about.
The computer correctly analyzed the first three words - knife, hammer, and window, and aced the rest as well.
According to Just, this is just the beginning.
"Who knows what you're gonna be able to read," Stahl commented. "A little scary, actually."
"Well, that's our research program for the next five years," Just said. "To see what, you know - we're not satisfied with "hammer."
And neither are neuroscientists 4,000 miles away in Berlin at the Bernstein Center. John Dylan-Haynes is hard at work there using the scanner not just to identify objects people are thinking about, but to read their intentions.
Subjects were asked to make a simple decision - whether to add or subtract two numbers they would be shown later on. Haynes found he could read directly from the activity in a small part of the brain that controls intentions what they had decided to do.
"This is a kind of blown up version of the brain activity happening here. And you can see that if a person is planning to add or to subtract, the pattern of brain activity is different in these two cases," Haynes explained.
"I always tell my students that there is no science fiction anymore. All the science fiction I read in high school, we're doing," Paul Root Wolpe, director of the Center for Ethics at Emory University in Atlanta, told Stahl.
To Wolpe, the ability to read our thoughts and intentions this way is revolutionary. "Throughout history, we could never actually coerce someone to reveal information. Torture doesn't work that well, persuasion doesn't work that well. The right to keep one's thoughts locked up in their brain is amongst the most fundamental rights of being human."
"You're saying that if someone can read my intentions, we have to talk about who might in the future be able to do that?" Stahl asked.
"Absolutely," he replied. "Whether we're going to let the state do it or whether we're going to let me do it. I have two teenage daughters. I come home one day and my car is dented and both of them say they didn't do it. Am I going to be allowed to drag them off to the local brain imaging lie detection company and get them put in a scanner? We don't know."
But before we've even started the debate, there are two companies already offering lie detection services using brain scans, one with the catchy name "No Lie MRI." But our experts cautioned that the technique is still unproven.
In the meantime, Haynes is working on something he thinks may be even more effective: reading out from your brain exactly where you've been. Haynes showed Stahl an experiment he created out of a video game.
He had Stahl navigate through a series of rooms in different virtual reality houses.
"Now I would put you in a scanner and I would show you some of these scenes that you've seen and some scenes that you haven't seen," he told her.
Stahl recognized the bar. "And right at this moment, we would be able to tell from your brain activity that you've already seen this environment before," Haynes explained.
"And so, this is a potential tool…for the police…in the case of break-ins?" Stahl asked.
"You might be able to tell if someone's been in an al Qaeda training camp before," Haynes replied.
Haynes said while U.S. national security agencies had not been in touch with him, the Germans had.
"So there are people who are considering these kinds of possibilities," Stahl commented.
And some are using them. In India last summer, a woman was convicted of murder after an EEG of her brain allegedly revealed that she was familiar with the circumstances surrounding the poisoning of her ex-fiancé.
"Can you through our legal system be forced to take one of these tests?" Stahl asked Paul Root Wolpe.
"It's a great question. And the legal system hasn't decided on this yet," he said.
"But we do have a Fifth Amendment. We don't have to incriminate ourselves," Stahl pointed out.
"Well here's where it gets very interesting, because the Fifth Amendment only prevents the courts from forcing us to testify against ourselves. But you can force me to give DNA or a hair sample or blood even if that would incriminate me. So here's the million dollar question: if you can brain image me and get information directly from my brain, is that testimony? Or is that like DNA, blood, semen and other things that you could take from me?" Wolpe asked.
"There will be a Supreme Court case about this," he predicted.
For now, it's impossible to force someone to have his or her brain scanned, because the subject has to lie still and cooperate, but that could change.
"There are some other technologies that are being developed that may be able to be used covertly and even remotely. So, for example, they're trying to develop now a beam of light that would be projected onto your forehead. It would go a couple of millimeters into your frontal cortex, and then receptors would get the reflection of that light. And there's some studies that suggest that we could use that as a lie detection device," Wolpe said.
He said we wouldn't know if our brains were being scanned. "If you were sitting there in the airport and being questioned, they could beam that on your forehead without your knowledge. We can't do that yet, but they're working on it."
Scary as that is, imagine a world where companies could read our minds too.
Light beams may be a bit far off, but fMRI scanning is already being used to try to figure out what we want to buy and how to sell it to us. It's a new field called "neuromarketing." One of its pioneers is neuroscientist Gemma Calvert, co-founder of a London company called Neurosense.
Asked if she has a lot of clients, Calvert told Stahl, "Yes, such as Unilever, Intel, McDonald's, Proctor & Gamble, MTV or Viacom."
And she says it's a growing field. "What we've seen is a sort of snowballing effect over the last few years. I think there are about 92 neuromarketing agencies worldwide."
But some experts question whether it's ethical to scan the brain for commercial purposes, and say neuromarketers may be promising more than they can really deliver.
"If you image my brain, and you say, 'Ah-ha! Paul craves chocolate chip cookies,' and I say, 'No, I don't,' now are you going to believe the brain over me? You can only do that if you have proven that that part of the brain lighting up means in all cases that that person desires chocolate chip cookies. And what a lot of people are doing is they're just imaging the brain, and then they're declaring what that means, and they're never proving that it actually translates into behavior," Wolpe said.
"You know it's very interesting. When you show someone a brain scan, people just believe it. It just reeks of credibility," Stahl commented.
"Absolutely. Absolutely," John Dylan-Haynes agreed.
"And you telling me, 'That's the area where people add and subtract,' I thought, 'Well, of course. He knows,'" Stahl said.
"But I could have told you anything," he pointed out.
So as brain imaging continues to advance and find its way into the courts, the market, and who knows what other aspects of our lives, one message is: be cautious. Another is to get ready. Back at Carnegie Mellon, Just and Mitchell have already uncovered the signatures in our brains for kindness, hypocrisy, and love.
"It's breathtaking," Stahl said. "And kind of eerie."
"Well, you know, I think the reason people have that reaction is because it reveals the essence of what it means to be a person. All of those kinds of things that define us as human beings are brain patterns," Just replied.
"We don't wanna know that… it all boils down to, I don't know, molecules and things like that," Stahl said.
"But we are, you know, we are biological creatures. You know, our limbs we accept are, you know, muscles and bone. And our brain is a biological thinking machine," he replied.
"Do you think one day, who knows how far into the future, there'll be a machine that'll be able to read very complex thought like 'I hate so-and-so'? Or you know, 'I love the ballet because…'?" Stahl asked.
"Definitely. Definitely," Just said. "And not in 20 years. I think in three, five years."
"In three years?" Stahl asked.
"Well, five," Just replied with a smile.
health science technology


text:
Im Amt Rhinow [] sind sechs Gemeinden des Landkreises Havelland in Brandenburg in einem Verwaltungsverbund zusammengefasst. Amtssitz ist die Stadt Rhinow.

Geographische Lage
Das Amt liegt im Nordwesten des Landkreises Havelland und grenzt im Westen an das Bundesland Sachsen-Anhalt, im Norden an den Landkreis Ostprignitz-Ruppin, im Osten an das Amt Friesack und an die Stadt Rathenow sowie im Süden an das Amt Nennhausen.

Gemeinden und Ortsteile
 Gollenberg mit den Ortsteilen Schönholz-Neuwerder und Stölln
 Großderschau mit den Ortsteilen Rübehorst und Altgarz
 Havelaue mit den Ortsteilen Gülpe, Spaatz, Parey, Strodehne und Wolsier
 Kleßen-Görne mit den Ortsteilen Kleßen und Görne
 Rhinow (Stadt)
 Seeblick mit den Ortsteilen Hohennauen, Wassersuppe und Witzke

Geschichte
Das Amt Rhinow wurde 1992 gebildet und kam mit der Zustimmung durch den Minister des Innern vom 4. März 1992 mit Wirkung zum 1. April 1992 zustande. Zum Amtssitz wurde die Stadt Rhinow bestimmt. Zum Zeitpunkt der Bildung gehörten 14 Gemeinden zum Amt:

Zum 31. Dezember 2001 schlossen sich Gülpe, Parey, Spaatz, Strodehne und Wolsier zur neuen Gemeinde Havelaue und die Gemeinden Hohennauen, Wassersuppe und Witzke zur Gemeinde Seeblick zusammen. Damit gehörten dem Amt folgende Gemeinden an: Görne, Großderschau, Havelaue, Kleßen, Schönholz-Neuwerder, Seeblick, Stölln und die Stadt Rhinow.

Zum 31. Dezember 2002 fusionierten die Gemeinden Görne und Kleßen zur neuen Gemeinde Kleßen-Görne. Ebenfalls zum 31. Dezember 2002 bilden die Gemeinden Schönholz-Neuwerder und Stölln die neue Gemeinde Gollenberg. Damit reduzierte sich die Zahl der amtsangehörigen Gemeinden auf sechs.

Bevölkerungsentwicklung

Gebietsstand des jeweiligen Jahres, Einwohnerzahl: Stand 31. Dezember, ab 2011 auf Basis des Zensus 2011

Amtsdirektoren
 1992–2010: Gerd Jendretzky
 seit 2010: Jens Aasmann

Am 30. Oktober 2009 wählte der Amtsausschuss Jendretzky ab. Aasmann wurde mit der Verwaltung des Amtes beauftragt und am 27. Mai 2010 vom Amtsausschuss zum neuen Amtsdirektor gewählt. Er wurde am 15. März 2018 für weitere acht Jahre in seinem Amt bestätigt.

Weblinks

 Amt Rhinow
 Eintrag im Kommunalverzeichnis des Landes Brandenburg

Einzelnachweise

Rhinow
Gegründet 1992


15A BREWERY LANE, BUNBURY (OVERLOOKING VICTORIA STREET) - City centre luxury 3 bedroom apartment with views over harbour and Victoria Street.
15A BREWERY LANE, BUNBURY (OVERLOOKING VICTORIA STREET) - City centre luxury 3 bedroom apartment with views over harbour and Victoria Street. Stunning contemporary design, master bedroom suite on second floor with en-suite, spa and office/study. First floor living with an open plan European style kitchen.


The Athlon II X4 645 isn't quite as cheap as we'd like, but it's still extremely affordable and delivers excellent threading performance for the money.
That's especially true if gaming performance is a high priority.
Likewise, 17 frames per second compared to 20 frames per second when video encoding is surely close enough.
The 2.6GHz 620 model can be had for around £65.
Admittedly, the 645's 50fps average looks okay, but the occasional choppiness in our World of Conflict benchmark is unmistakable.
A four-core chip for chump change is an attractive idea.
The Athlon II models must survive with 512KB L2 per core.
In other words, we're talking four 45nm cores complimented by AMD's on-die memory controller and speedy HyperTransport interconnect.
The cut-down cache hurts the 645's framerates.
Where the performance gap is more critical is gaming.
The AMD Athlon II X4 645 is a quad-core chip based on the finest processor cores AMD can currently muster, despite being a budget CPU.
We reckon few people will really notice that their CPU completes a 3D rendering job in one minute and 16 seconds rather than the minute flat of the more powerful quads from AMD and Intel.


This traditional Mexican avocado dip, now an international favourite, combines tomato, onion, and fresh coriander for zesty flavour. Served with tortilla crisps, it makes a quick and easy starter for guests.
When doubling recipe, increase avocados to 4 and increase onion to 80 g (1/2 c).