text:
var crypto = require('crypto'),
    lazy = require('lazy'),
    levelup = require('levelup'),
    memdown = require('memdown'),
    sublevel = require('level-sublevel'),
    Lock = require('lock'),
    Big = require('big.js')

exports.MAX_SIZE = 409600
exports.create = create
exports.lazy = lazyStream
exports.validateKey = validateKey
exports.validateItem = validateItem
exports.toLexiStr = toLexiStr
exports.hashPrefix = hashPrefix
exports.itemCompare = itemCompare
exports.validationError = validationError
exports.checkConditional = checkConditional
exports.itemSize = itemSize
exports.capacityUnits = capacityUnits
exports.matchesFilter = matchesFilter

function create(options) {
  options = options || {}
  if (options.createTableMs == null) options.createTableMs = 500
  if (options.deleteTableMs == null) options.deleteTableMs = 500
  if (options.updateTableMs == null) options.updateTableMs = 500

  var db = levelup(options.path || '/does/not/matter', options.path ? {} : {db: memdown}),
      sublevelDb = sublevel(db),
      tableDb = sublevelDb.sublevel('table', {valueEncoding: 'json'}),
      itemDbs = []

  tableDb.lock = new Lock()

  // XXX: Is there a better way to get this?
  tableDb.awsAccountId = (process.env.AWS_ACCOUNT_ID || '0000-0000-0000').replace(/[^\d]/g, '')
  tableDb.awsRegion = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1'

  function getItemDb(name) {
    if (!itemDbs[name]) {
      itemDbs[name] = sublevelDb.sublevel('item-' + name, {valueEncoding: 'json'})
      itemDbs[name].lock = new Lock()
    }
    return itemDbs[name]
  }

  function deleteItemDb(name, cb) {
    var itemDb = getItemDb(name)
    delete itemDbs[name]
    lazyStream(itemDb.createKeyStream(), cb).join(function(keys) {
      itemDb.batch(keys.map(function(key) { return {type: 'del', key: key} }), cb)
    })
  }

  function getTable(name, checkStatus, cb) {
    if (typeof checkStatus == 'function') cb = checkStatus

    tableDb.get(name, function(err, table) {
      if (!err && checkStatus && (table.TableStatus == 'CREATING' || table.TableStatus == 'DELETING')) {
        err = new Error('NotFoundError')
        err.name = 'NotFoundError'
      }
      if (err) {
        if (err.name == 'NotFoundError') {
          err.statusCode = 400
          err.body = {
            __type: 'com.amazonaws.dynamodb.v20120810#ResourceNotFoundException',
            message: 'Requested resource not found',
          }
          if (!checkStatus) err.body.message += ': Table: ' + name + ' not found'
        }
        return cb(err)
      }

      cb(null, table)
    })
  }

  function recreate() {
    var self = this, newStore = create(options)
    Object.keys(newStore).forEach(function(key) {
      self[key] = newStore[key]
    })
  }

  return {
    createTableMs: options.createTableMs,
    deleteTableMs: options.deleteTableMs,
    updateTableMs: options.updateTableMs,
    db: db,
    tableDb: tableDb,
    getItemDb: getItemDb,
    deleteItemDb: deleteItemDb,
    getTable: getTable,
    recreate: recreate,
  }
}

function lazyStream(stream, errHandler) {
  if (errHandler) stream.on('error', errHandler)
  var streamAsLazy = lazy(stream)
  if (stream.destroy) streamAsLazy.on('pipe', stream.destroy.bind(stream))
  return streamAsLazy
}

function validateKey(dataKey, table) {
  if (table.KeySchema.length != Object.keys(dataKey).length) return validationError()

  var keyStr, i, j, attr, type, sizeError
  for (i = 0; i < table.KeySchema.length; i++) {
    attr = table.KeySchema[i].AttributeName
    if (dataKey[attr] == null) return validationError()
    for (j = 0; j < table.AttributeDefinitions.length; j++) {
      if (table.AttributeDefinitions[j].AttributeName != attr) continue
      type = table.AttributeDefinitions[j].AttributeType
      if (dataKey[attr][type] == null) return validationError()
      sizeError = checkKeySize(dataKey[attr][type], type, !i)
      if (sizeError) return sizeError
      if (!keyStr) keyStr = hashPrefix(dataKey[attr][type], type)
      keyStr += '~' + toLexiStr(dataKey[attr][type], type)
      break
    }
  }
  return keyStr
}

function validateItem(dataItem, table) {
  var keyStr, i, j, k, attr, type, sizeError
  for (i = 0; i < table.KeySchema.length; i++) {
    attr = table.KeySchema[i].AttributeName
    if (dataItem[attr] == null)
      return validationError('One or more parameter values were invalid: ' +
        'Missing the key ' + attr + ' in the item')
    for (j = 0; j < table.AttributeDefinitions.length; j++) {
      if (table.AttributeDefinitions[j].AttributeName != attr) continue
      type = table.AttributeDefinitions[j].AttributeType
      if (dataItem[attr][type] == null)
        return validationError('One or more parameter values were invalid: ' +
          'Type mismatch for key ' + attr + ' expected: ' + table.AttributeDefinitions[j].AttributeType +
          ' actual: ' + Object.keys(dataItem[attr])[0])
      sizeError = checkKeySize(dataItem[attr][type], type, !i)
      if (sizeError) return sizeError
      if (!keyStr) keyStr = hashPrefix(dataItem[attr][type], type)
      keyStr += '~' + toLexiStr(dataItem[attr][type], type)
      break
    }
  }
  if (table.GlobalSecondaryIndexes) {
    for (i = table.GlobalSecondaryIndexes.length - 1; i >= 0; i--) {
      for (k = 0; k < table.GlobalSecondaryIndexes[i].KeySchema.length; k++) {
        attr = table.GlobalSecondaryIndexes[i].KeySchema[k].AttributeName
        for (j = 0; j < table.AttributeDefinitions.length; j++) {
          if (table.AttributeDefinitions[j].AttributeName != attr) continue
          type = table.AttributeDefinitions[j].AttributeType
          if (dataItem[attr] && !dataItem[attr][type])
            return validationError('One or more parameter values were invalid: ' +
              'Type mismatch for Index Key ' + attr + ' Expected: ' + type + ' Actual: ' +
              Object.keys(dataItem[attr])[0] + ' IndexName: ' + table.GlobalSecondaryIndexes[i].IndexName)
        }
      }
    }
  }
  if (table.LocalSecondaryIndexes) {
    for (i = table.LocalSecondaryIndexes.length - 1; i >= 0; i--) {
      attr = table.LocalSecondaryIndexes[i].KeySchema[1].AttributeName
      for (j = 0; j < table.AttributeDefinitions.length; j++) {
        if (table.AttributeDefinitions[j].AttributeName != attr) continue
        type = table.AttributeDefinitions[j].AttributeType
        if (dataItem[attr] && !dataItem[attr][type])
          return validationError('One or more parameter values were invalid: ' +
            'Type mismatch for Index Key ' + attr + ' Expected: ' + type + ' Actual: ' +
            Object.keys(dataItem[attr])[0] + ' IndexName: ' + table.LocalSecondaryIndexes[i].IndexName)
      }
    }
  }
  return keyStr
}

function checkKeySize(keyPiece, type, isHash) {
  // Numbers are always fine
  if (type == 'N') return null
  if (type == 'B') keyPiece = new Buffer(keyPiece, 'base64')
  if (isHash && keyPiece.length > 2048)
    return validationError('One or more parameter values were invalid: ' +
      'Size of hashkey has exceeded the maximum size limit of2048 bytes')
  else if (!isHash && keyPiece.length > 1024)
    return validationError('One or more parameter values were invalid: ' +
      'Aggregated size of all range keys has exceeded the size limit of 1024 bytes')
}

// Creates lexigraphically sortable number strings
//  0     7c    009   = '07c009' = -99.1
// |-|   |--| |-----|
// sign  exp  digits
//
// Sign is 0 for negative, 1 for positive
// Exp is hex for the exponent modified by adding 130 if sign is positive or subtracting from 125 if negative
// Digits are unchanged if sign is positive, or added to 10 if negative
// Hence, in '07c009', the sign is negative, exponent is 125 - 124 = 1, digits are 10 + -0.09 = 9.91 => -9.91e1
//
function toLexiStr(keyPiece, type) {
  if (keyPiece == null) return ''
  if (type == 'B') return new Buffer(keyPiece, 'base64').toString('hex')
  if (type != 'N') return keyPiece
  var bigNum = new Big(keyPiece), digits,
      exp = !bigNum.c[0] ? 0 : bigNum.s == -1 ? 125 - bigNum.e : 130 + bigNum.e
  if (bigNum.s == -1) {
    bigNum.e = 0
    digits = new Big(10).plus(bigNum).toFixed().replace(/\./, '')
  } else {
    digits = bigNum.c.join('')
  }
  return (bigNum.s == -1 ? '0' : '1') + ('0' + exp.toString(16)).slice(-2) + digits
}

function hashPrefix(hashKey, hashType, rangeKey, rangeType) {
  if (hashType == 'S') {
    hashKey = new Buffer(hashKey, 'utf8')
  } else if (hashType == 'N') {
    hashKey = numToBuffer(hashKey)
  } else if (hashType == 'B') {
    hashKey = new Buffer(hashKey, 'base64')
  }
  if (rangeKey) {
    if (rangeType == 'S') {
      rangeKey = new Buffer(rangeKey, 'utf8')
    } else if (rangeType == 'N') {
      rangeKey = numToBuffer(rangeKey)
    } else if (rangeType == 'B') {
      rangeKey = new Buffer(rangeKey, 'base64')
    }
  } else {
    rangeKey = new Buffer(0)
  }
  // TODO: Can use the whole hash if we deem it important - for now just first six chars
  return crypto.createHash('md5').update('Outliers').update(hashKey).update(rangeKey).digest('hex').slice(0, 6)
}

function numToBuffer(num) {
  if (+num === 0) return new Buffer([-128])

  num = new Big(num)

  var scale = num.s, mantissa = num.c, exponent = num.e + 1, appendZero = exponent % 2 ? 1 : 0,
      byteArrayLengthWithoutExponent = Math.floor((mantissa.length + appendZero + 1) / 2),
      byteArray, appendedZero = false, mantissaIndex, byteArrayIndex

  if (byteArrayLengthWithoutExponent < 20 && scale == -1) {
    byteArray = new Array(byteArrayLengthWithoutExponent + 2)
    byteArray[byteArrayLengthWithoutExponent + 1] = 102
  } else {
    byteArray = new Array(byteArrayLengthWithoutExponent + 1)
  }

  byteArray[0] = Math.floor((exponent + appendZero) / 2) - 64
  if (scale == -1)
    byteArray[0] ^= 0xffffffff

  for (mantissaIndex = 0; mantissaIndex < mantissa.length; mantissaIndex++) {
    byteArrayIndex = Math.floor((mantissaIndex + appendZero) / 2) + 1
    if (appendZero && !mantissaIndex && !appendedZero) {
      byteArray[byteArrayIndex] = 0
      appendedZero = true
      mantissaIndex--
    } else if ((mantissaIndex + appendZero) % 2 === 0) {
      byteArray[byteArrayIndex] = mantissa[mantissaIndex] * 10
    } else {
      byteArray[byteArrayIndex] += mantissa[mantissaIndex]
    }
    if (((mantissaIndex + appendZero) % 2) || (mantissaIndex == mantissa.length - 1)) {
      if (scale == -1)
        byteArray[byteArrayIndex] = 101 - byteArray[byteArrayIndex]
      else
        byteArray[byteArrayIndex]++
    }
  }

  return new Buffer(byteArray)
}

function itemCompare(rangeKey, table) {
  return function(item1, item2) {
    var val1, val2, rangeType, tableHashKey, tableRangeKey, tableHashType, tableRangeType,
        hashVal1, rangeVal1, hashVal2, rangeVal2
    if (rangeKey) {
      rangeType = Object.keys(item1[rangeKey] || item2[rangeKey] || {})[0]
      rangeVal1 = (item1[rangeKey] || {})[rangeType]
      rangeVal2 = (item2[rangeKey] || {})[rangeType]
      val1 = toLexiStr(rangeVal1, rangeType)
      val2 = toLexiStr(rangeVal2, rangeType)
    } else {
      tableHashKey = table.KeySchema[0].AttributeName
      tableRangeKey = (table.KeySchema[1] || {}).AttributeName
      tableHashType = Object.keys(item1[tableHashKey] || item2[tableHashKey] || {})[0]
      tableRangeType = Object.keys(item1[tableRangeKey] || item2[tableRangeKey] || {})[0]
      hashVal1 = item1[tableHashKey][tableHashType]
      rangeVal1 = (item1[tableRangeKey] || {})[tableRangeType]
      hashVal2 = item2[tableHashKey][tableHashType]
      rangeVal2 = (item2[tableRangeKey] || {})[tableRangeType]
      val1 = hashPrefix(hashVal1, tableHashType, rangeVal1, tableRangeType)
      val2 = hashPrefix(hashVal2, tableHashType, rangeVal2, tableRangeType)
    }
    return val1 < val2 ? -1 : val1 > val2 ? 1 : 0
  }
}

function checkConditional(data, existingItem) {
  var expected = data.Expected
  if (!expected) return null

  existingItem = existingItem || {}

  if (!matchesFilter(existingItem, expected, data.ConditionalOperator)) {
    return conditionalError()
  }
}

function validationError(msg) {
  if (msg == null) msg = 'The provided key element does not match the schema'
  var err = new Error(msg)
  err.statusCode = 400
  err.body = {
    __type: 'com.amazon.coral.validate#ValidationException',
    message: msg,
  }
  return err
}

function conditionalError(msg) {
  if (msg == null) msg = 'The conditional request failed'
  var err = new Error(msg)
  err.statusCode = 400
  err.body = {
    __type: 'com.amazonaws.dynamodb.v20120810#ConditionalCheckFailedException',
    message: msg,
  }
  return err
}

function itemSize(item, skipAttr) {
  var size = 0, attr, type, val
  for (attr in item) {
    type = Object.keys(item[attr])[0]
    val = item[attr][type]
    size += skipAttr ? 2 : attr.length
    switch (type) {
      case 'S':
        size += val.length
        break
      case 'B':
        size += new Buffer(val, 'base64').length
        break
      case 'N':
        val = new Big(val)
        size += Math.ceil(val.c.length / 2) + (val.e % 2 ? 1 : 2)
        break
      case 'SS':
        size += val.reduce(function(sum, x) { return sum + x.length }, skipAttr ? val.length : 0) // eslint-disable-line no-loop-func
        break
      case 'BS':
        size += val.reduce(function(sum, x) { return sum + new Buffer(x, 'base64').length }, skipAttr ? val.length : 0) // eslint-disable-line no-loop-func
        break
      case 'NS':
        size += val.reduce(function(sum, x) { // eslint-disable-line no-loop-func
          x = new Big(x)
          return sum + Math.ceil(x.c.length / 2) + (x.e % 2 ? 1 : 2)
        }, skipAttr ? val.length : 0)
        break
    }
  }
  return size
}

function capacityUnits(item, isRead, isConsistent) {
  var size = item ? Math.ceil(itemSize(item) / 1024 / (isRead ? 4 : 1)) : 1
  return size / (!isRead || isConsistent ? 1 : 2)
}

function valsEqual(val1, val2) {
  if (Array.isArray(val1) && Array.isArray(val2)) {
    if (val1.length != val2.length) return false
    return val1.every(function(val) { return ~val2.indexOf(val) })
  } else {
    return val1 == val2
  }
}

function matchesFilter(val, filter, conditionalOperator) {
  var results = Object.keys(filter).map(function(attr) {
    var comp = filter[attr].Exists != null ? (filter[attr].Exists ? 'NOT_NULL' : 'NULL') :
          filter[attr].ComparisonOperator || 'EQ',
        compVals = filter[attr].AttributeValueList || (filter[attr].Value ? [filter[attr].Value] : null),
        compType = compVals ? Object.keys(compVals[0])[0] : null,
        compVal = compVals ? compVals[0][compType] : null,
        attrType = val[attr] ? Object.keys(val[attr])[0] : null,
        attrVal = val[attr] ? val[attr][attrType] : null

    switch (comp) {
      case 'EQ':
        if (compType != attrType || !valsEqual(attrVal, compVal)) return false
        break
      case 'NE':
        if (compType == attrType && valsEqual(attrVal, compVal)) return false
        break
      case 'LE':
        if (compType != attrType ||
          (attrType == 'N' && !new Big(attrVal).lte(compVal)) ||
          (attrType != 'N' && toLexiStr(attrVal, attrType) > toLexiStr(compVal, attrType))) return false
        break
      case 'LT':
        if (compType != attrType ||
          (attrType == 'N' && !new Big(attrVal).lt(compVal)) ||
          (attrType != 'N' && toLexiStr(attrVal, attrType) >= toLexiStr(compVal, attrType))) return false
        break
      case 'GE':
        if (compType != attrType ||
          (attrType == 'N' && !new Big(attrVal).gte(compVal)) ||
          (attrType != 'N' && toLexiStr(attrVal, attrType) < toLexiStr(compVal, attrType))) return false
        break
      case 'GT':
        if (compType != attrType ||
          (attrType == 'N' && !new Big(attrVal).gt(compVal)) ||
          (attrType != 'N' && toLexiStr(attrVal, attrType) <= toLexiStr(compVal, attrType))) return false
        break
      case 'NOT_NULL':
        if (attrVal == null) return false
        break
      case 'NULL':
        if (attrVal != null) return false
        break
      case 'CONTAINS':
        if (compType == 'S') {
          if (attrType != 'S' && attrType != 'SS') return false
          if (!~attrVal.indexOf(compVal)) return false
        }
        if (compType == 'N') {
          if (attrType != 'NS') return false
          if (!~attrVal.indexOf(compVal)) return false
        }
        if (compType == 'B') {
          if (attrType != 'B' && attrType != 'BS') return false
          if (attrType == 'B') {
            attrVal = new Buffer(attrVal, 'base64').toString()
            compVal = new Buffer(compVal, 'base64').toString()
          }
          if (!~attrVal.indexOf(compVal)) return false
        }
        break
      case 'NOT_CONTAINS':
        if (compType == 'S' && (attrType == 'S' || attrType == 'SS') &&
            ~attrVal.indexOf(compVal)) return false
        if (compType == 'N' && attrType == 'NS' &&
            ~attrVal.indexOf(compVal)) return false
        if (compType == 'B') {
          if (attrType == 'B') {
            attrVal = new Buffer(attrVal, 'base64').toString()
            compVal = new Buffer(compVal, 'base64').toString()
          }
          if ((attrType == 'B' || attrType == 'BS') &&
              ~attrVal.indexOf(compVal)) return false
        }
        break
      case 'BEGINS_WITH':
        if (compType != attrType) return false
        if (compType == 'B') {
          attrVal = new Buffer(attrVal, 'base64').toString()
          compVal = new Buffer(compVal, 'base64').toString()
        }
        if (attrVal.indexOf(compVal) !== 0) return false
        break
      case 'IN':
        if (!attrVal) return false
        if (!compVals.some(function(compVal) {
          compType = Object.keys(compVal)[0]
          compVal = compVal[compType]
          return compType == attrType && attrVal == compVal
        })) return false
        break
      case 'BETWEEN':
        if (!attrVal || compType != attrType ||
          (attrType == 'N' && (!new Big(attrVal).gte(compVal) || !new Big(attrVal).lte(compVals[1].N))) ||
          (attrType != 'N' && (toLexiStr(attrVal, attrType) < toLexiStr(compVal, attrType) ||
            toLexiStr(attrVal, attrType) > toLexiStr(compVals[1][compType], attrType)))) return false
    }
    return true
  })

  var passed = results.reduce(function(memo, result) {
    if (result) memo++
    return memo
  }, 0)

  if (conditionalOperator && conditionalOperator === 'OR') {
    if (passed === 0) return false
  } else if (passed < Object.keys(filter).length) return false
  return true
}


Mitchel Evan is an American songwriter from Richmond, Virginia that is dedicated to keeping authentic music and honest storytelling alive. His journey from Virginia to Colorado and back again has resulted in two EP's and a full length album with his band, Mitchel Evan & The Mangrove, as well as his first solo release, the "Little Horse Tapes". Evan has recently relocated back to his hometown of Richmond and continues to write, record and perform at a prolific rate.
Tyler Meacham is a singer & songwriter currently based in central Virginia. Raised in Richmond, she has been writing music since childhood and is self-taught on guitar, piano, and ukulele. With an early introduction to the world of music through her father, as well as involvement in choir and musical theater, Tyler continued to perform in college as a member of Elon University's internationally-recognized a cappella group Twisted Measure. While in college, she formed folk pop band Cracked Vessels with Jacob Lenz. The duo played numerous live gigs and released their self-titled debut album in 2016, just prior to graduation. After a stint working as an Imagineer in Walt Disney World, her interest in the pursuit of music has been renewed, and she is currently working towards the goal of releasing a solo album. Using her degree in film production to produce demos & music videos, she launched the Song of the Month Club on Patreon to further support this goal. She is currently performing at local venues and open mics, always working on making more connections and reaching larger audiences with her pop-infused melodies & emotive lyrics. Currently her work can be found online across various platforms including YouTube, Facebook, Spotify, Apple Music, and at tylermeacham.com/music.


Small update; I've already obtained a Felix the cat Lumina cell and Tenryu Infinity; so disregard those! Any updates on the shipment?
So far nothing has been confirmed, but I just contacted them again so hopefully we can get word and start finalizing some custom orders.
Was that you on YJA getting the Felix cell lotsoballs? I thought of going for it but it was a bit rich for my budget!
It is a hanemono though; I only have one other one of those (Miracle carpet) for that frame. Plus I have a black cat; so had to have it naturally!
I would have to say. Sometimes it's actually cheaper to buy a complete machine off YJA rather than just the cell.
I once got a complete machine for ¥1 and I only really wanted the cell. Stuck it on the 2 month slow boat to keep shipping costs down. The only time I asked them to overvalued something on the customs charge as they wouldn't believe such a large and heavy box only cost a penny to buy.
Last edited by Drunkenclam; 01-30-2019 at 05:47 PM.
This is true; except when it comes time for the shipping bill of $400-500 for a full machine vs $120 range for just a cell! How do you get the slow boat shipping option anyway? FedEx was the cheapest option available the one time I ordered my Tropical Raised machine from FromJapan; it was very heavy though.
Nice! I saw it thought I'd grab it but seeing the bidding I kept looking to see what was out there. I did score the "Train by GO2!" cell from the same seller which made me very happy.
That one looked interesting I've been very happy with that seller on many occasions now.
Same seller has a second (and last! Supposedly) Felix cell for sale; this time bidding starts at 30,000 yen instead of 20k and somebody has already bid... i wonder if someone on here?
Hi all, was hoping someone could tell me the difference between these 2 please? Thanks in advance!
Is this --> " Pachislot Kyoto Pachi Slot AKB48 525 "
Hi Frank, any updates or timeframe available for the upcoming shipment?
I would love to get a Felix The Cat Cell For the Sankyo Lumina frame .
But how much from Clover Collectables for it ?
I bought Felix on yahooJapan, bidding war got up to 33,000 yen. A second Felix cell from same seller got bid up to 53,000 a few days later. I was just letting Frank know I no longer want them to find me a Felix as I originally requested.
Good luck, apparently Felix is a still a rare/valuable Lumina cell in Japan!
As far as I know Hanabi is the only member here who has one... I have seen vids of the FEVER too. It's a REALLY neat pachi that has aged well!
to really want what you want!
Last edited by KimbaWLion; 03-23-2019 at 12:18 PM.
Sorry it has been a while since an update, but the shipment is being confirmed today. Sadly we were very limited in terms of machine availability as our main supplier does seem to no longer be in business. If you have put down a deposit we were able to get your machine, but if you put in a request and didn't hear back from us we will still be keeping them on file and are going to continue looking for a new supplier to do another shipment around late summer / early fall if we can.


text:
Q: Is $g(x)=\cfrac{1}{1-\cfrac{1}{1-\cfrac{1}{1-x}}}$ continuous at $x=0$? Is $$
g(x)=\cfrac{1}{1-\cfrac{1}{1-\cfrac{1}{1-x}}}
$$ continuous at $x=0$ ?
My attempt $\rightarrow$
I thought of an another function $$f(x)=\frac{1}{1-x}$$ and then with this $$f(f(f(x)))$$ I got the required function.
Then found that $$
f(f(x)
$$
Is not continuous at $x=0$
So $f(f(f(x)))=$ is also not continuous at $x=0$ .
This is what I know.

A: For it to be continous at a given point, left-limit right-limit and the value at that point should be equal.
Now that the value does not exist ($x=0$), can we talk about it in terms of being equal to something?
It is not continuous at $x=0$.

redpajama_set_name: RedPajamaStackExchange


Update the configuration file of Apache web server to make the Apache web server function as a reverse proxy server with a CA Single Sign-On agent.
For the Apache web server, add the following ProxyPass settings to the configuration file.
hostname:port refers to the host and port of the application server running the Administrative UI.
Uncomment the following line in the configuration file.
For Apache-based servers behind the Apache reverse proxy server, update the following agent configuration parameters.
Set the ProxyAgent parameter to yes. This parameter specifies if a Web Agent is acting as a reverse proxy agent. The default is No.
When the value of this parameter is yes, the CA Single Sign-On agent on the front-end server preserves the original URL that the user requested in the SM_PROXYREQUEST HTTP header. This header is created whenever protected and unprotected resources are requested. The back-end server can read this header to obtain information about the original URL.
Set the ProxyTimeout parameter. This parameter specifies the number of seconds the reverse proxy server waits for the agent that is deployed behind it to respond to a request. The default value is 120 seconds.
(Optional) Set the ProxyTrust parameter. This parameter instructs the agent on a destination server to trust authorizations received from a CA SSO agent on a proxy server. A destination server is a server that is behind a reverse proxy server.
Setting this value to yes increases efficiency because only the agent on the proxy server contacts the Policy Server for authorization. The agent operating on the destination server does not contact the Policy Server again to reauthorize users. The default value is No.
Set the httpsports parameter to indicate to the Apache server which port is set up for SSL.


text:
In computer science, corecursion is a type of operation that is dual to recursion. Whereas recursion works analytically, starting on data further from a base case and breaking it down into smaller data and repeating until one reaches a base case, corecursion works synthetically, starting from a base case and building it up, iteratively producing data further removed from a base case. Put simply, corecursive algorithms use the data that they themselves produce, bit by bit, as they become available, and needed, to produce further bits of data. A similar but distinct concept is generative recursion which may lack a definite "direction" inherent in corecursion and recursion.

Where recursion allows programs to operate on arbitrarily complex data, so long as they can be reduced to simple data (base cases), corecursion allows programs to produce arbitrarily complex and potentially infinite data structures, such as streams, so long as it can be produced from simple data (base cases) in a sequence of finite steps. Where recursion may not terminate, never reaching a base state, corecursion starts from a base state, and thus produces subsequent steps deterministically, though it may proceed indefinitely (and thus not terminate under strict evaluation), or it may consume more than it produces and thus become non-productive. Many functions that are traditionally analyzed as recursive can alternatively, and arguably more naturally, be interpreted as corecursive functions that are terminated at a given stage, for example recurrence relations such as the factorial.

Corecursion can produce both finite and infinite data structures as results, and may employ self-referential data structures. Corecursion is often used in conjunction with lazy evaluation, to produce only a finite subset of a potentially infinite structure (rather than trying to produce an entire infinite structure at once). Corecursion is a particularly important concept in functional programming, where corecursion and codata allow total languages to work with infinite data structures.

Examples
Corecursion can be understood by contrast with recursion, which is more familiar. While corecursion is primarily of interest in functional programming, it can be illustrated using imperative programming, which is done below using the generator facility in Python. In these examples local variables are used, and assigned values imperatively (destructively), though these are not necessary in corecursion in pure functional programming. In pure functional programming, rather than assigning to local variables, these computed values form an invariable sequence, and prior values are accessed by self-reference (later values in the sequence reference earlier values in the sequence to be computed). The assignments simply express this in the imperative paradigm and explicitly specify where the computations happen, which serves to clarify the exposition.

Factorial
A classic example of recursion is computing the factorial, which is defined recursively by 0! := 1 and n! := n × (n - 1)!.

To recursively compute its result on a given input, a recursive function calls (a copy of) itself with a different ("smaller" in some way) input and uses the result of this call to construct its result. The recursive call does the same, unless the base case has been reached. Thus a call stack develops in the process. For example, to compute fac(3), this recursively calls in turn fac(2), fac(1), fac(0) ("winding up" the stack), at which point recursion terminates with fac(0) = 1, and then the stack unwinds in reverse order and the results are calculated on the way back along the call stack to the initial call frame fac(3) that uses the result of fac(2) = 2 to calculate the final result as 3 × 2 = 3 × fac(2) =: fac(3) and finally return fac(3) = 6. In this example a function returns a single value.

This stack unwinding can be explicated, defining the factorial corecursively, as an iterator, where one starts with the case of , then from this starting value constructs factorial values for increasing numbers 1, 2, 3... as in the above recursive definition with "time arrow" reversed, as it were, by reading it backwards as  The corecursive algorithm thus defined produces a stream of all factorials. This may be concretely implemented as a generator. Symbolically, noting that computing next factorial value requires keeping track of both n and f (a previous factorial value), this can be represented as:

or in Haskell,
  (\(n,f) -> (n+1, f*(n+1))) `iterate` (0,1)
meaning, "starting from , on each step the next values are calculated as ". This is mathematically equivalent and almost identical to the recursive definition, but the  emphasizes that the factorial values are being built up, going forwards from the starting case, rather than being computed after first going backwards, down to the base case, with a  decrement. The direct output of the corecursive function does not simply contain the factorial  values, but also includes for each value the auxiliary data of its index n in the sequence, so that any one specific result can be selected among them all, as and when needed.

There is a connection with denotational semantics, where the denotations of recursive programs is built up corecursively in this way.

In Python, a recursive factorial function can be defined as:
def factorial(n: int) -> int:
    """Recursive factorial function."""
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)
This could then be called for example as factorial(5) to compute 5!.

A corresponding corecursive generator can be defined as:
def factorials():
    """Corecursive generator."""
    n, f = 0, 1
    while True:
        yield f
        n, f = n + 1, f * (n + 1)
This generates an infinite stream of factorials in order; a finite portion of it can be produced by:
def n_factorials(k: int):
    n, f = 0, 1
    while n <= k:
        yield f
        n, f = n + 1, f * (n + 1)
This could then be called to produce the factorials up to 5! via:
for f in n_factorials(5):
    print(f)
If we're only interested in a certain factorial, just the last value can be taken, or we can fuse the production and the access into one function,
def nth_factorial(k: int):
    n, f = 0, 1
    while n < k:
        n, f = n + 1, f * (n + 1)
    yield f
As can be readily seen here, this is practically equivalent (just by substituting return for the only yield there) to the accumulator argument technique for tail recursion, unwound into an explicit loop. Thus it can be said that the concept of corecursion is an explication of the embodiment of iterative computation processes by recursive definitions, where applicable.

Fibonacci sequence
In the same way, the Fibonacci sequence can be represented as:

Because the Fibonacci sequence is a recurrence relation of order 2, the corecursive relation must track two successive terms, with the  corresponding to shift forward by one step, and the  corresponding to computing the next term. This can then be implemented as follows (using parallel assignment):
def fibonacci_sequence():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
In Haskell,  map fst ( (\(a,b) -> (b,a+b)) `iterate` (0,1) )

Tree traversal
Tree traversal via a depth-first approach is a classic example of recursion. Dually, breadth-first traversal can very naturally be implemented via corecursion.

Without using recursion or corecursion specifically, one may traverse a tree by starting at the root node, placing its child nodes in a data structure, then iterating by removing node after node from the data structure while placing each removed node's children back into that data structure. If the data structure is a stack (LIFO), this yields depth-first traversal, and if the data structure is a queue (FIFO), this yields breadth-first traversal.

Using recursion, a (post-order) depth-first traversal can be implemented by starting at the root node and recursively traversing each child subtree in turn (the subtree based at each child node) – the second child subtree does not start processing until the first child subtree is finished. Once a leaf node is reached or the children of a branch node have been exhausted, the node itself is visited (e.g., the value of the node itself is outputted). In this case, the call stack (of the recursive functions) acts as the stack that is iterated over.

Using corecursion, a breadth-first traversal can be implemented by starting at the root node, outputting its value, then breadth-first traversing the subtrees – i.e., passing on the whole list of subtrees to the next step (not a single subtree, as in the recursive approach) – at the next step outputting the value of all of their root nodes, then passing on their child subtrees, etc. In this case the generator function, indeed the output sequence itself, acts as the queue. As in the factorial example (above), where the auxiliary information of the index (which step one was at, n) was pushed forward, in addition to the actual output of n!, in this case the auxiliary information of the remaining subtrees is pushed forward, in addition to the actual output. Symbolically:

meaning that at each step, one outputs the list of values of root nodes, then proceeds to the child subtrees. Generating just the node values from this sequence simply requires discarding the auxiliary child tree data, then flattening the list of lists (values are initially grouped by level (depth); flattening (ungrouping) yields a flat linear list). In Haskell,
 concatMap fst ( (\(v, t) -> (rootValues v t, childTrees t)) `iterate` ([], fullTree) )

These can be compared as follows. The recursive traversal handles a leaf node (at the bottom) as the base case (when there are no children, just output the value), and analyzes a tree into subtrees, traversing each in turn, eventually resulting in just leaf nodes – actual leaf nodes, and branch nodes whose children have already been dealt with (cut off below). By contrast, the corecursive traversal handles a root node (at the top) as the base case (given a node, first output the value), treats a tree as being synthesized of a root node and its children, then produces as auxiliary output a list of subtrees at each step, which are then the input for the next step – the child nodes of the original root are the root nodes at the next step, as their parents have already been dealt with (cut off above). In the recursive traversal there is a distinction between leaf nodes and branch nodes, while in the corecursive traversal there is no distinction, as each node is treated as the root node of the subtree it defines.

Notably, given an infinite tree, the corecursive breadth-first traversal will traverse all nodes, just as for a finite tree, while the recursive depth-first traversal will go down one branch and not traverse all nodes, and indeed if traversing post-order, as in this example (or in-order), it will visit no nodes at all, because it never reaches a leaf. This shows the usefulness of corecursion rather than recursion for dealing with infinite data structures.

In Python, this can be implemented as follows.
The usual post-order depth-first traversal can be defined as:
def df(node):
    """Post-order depth-first traversal."""
    if node is not None:
        df(node.left)
        df(node.right)
        print(node.value)
This can then be called by df(t) to print the values of the nodes of the tree in post-order depth-first order.

The breadth-first corecursive generator can be defined as:
def bf(tree):
    """Breadth-first corecursive generator."""
    tree_list = [tree]
    while tree_list:
        new_tree_list = []
        for tree in tree_list:
            if tree is not None:
                yield tree.value
                new_tree_list.append(tree.left)
                new_tree_list.append(tree.right)
        tree_list = new_tree_list
This can then be called to print the values of the nodes of the tree in breadth-first order:
for i in bf(t):
    print(i)

Definition

Initial data types can be defined as being the least fixpoint (up to isomorphism) of some type equation; the isomorphism is then given by an initial algebra. Dually, final (or terminal) data types can be defined as being the greatest fixpoint of a type equation; the isomorphism is then given by a final coalgebra.

If the domain of discourse is the category of sets and total functions, then final data types may contain infinite, non-wellfounded values, whereas initial types do not. On the other hand, if the domain of discourse is the category of complete partial orders and continuous functions, which corresponds roughly to the Haskell programming language, then final types coincide with initial types, and the corresponding final coalgebra and initial algebra form an isomorphism.

Corecursion is then a technique for recursively defining functions whose range (codomain) is a final data type, dual to the way that ordinary recursion recursively defines functions whose domain is an initial data type.

The discussion below provides several examples in Haskell that distinguish corecursion. Roughly speaking, if one were to port these definitions to the category of sets, they would still be corecursive. This informal usage is consistent with existing textbooks about Haskell. The examples used in this article predate the attempts to define corecursion and explain what it is.

Discussion

The rule for primitive corecursion on codata is the dual to that for primitive recursion on data. Instead of descending on the argument by pattern-matching on its constructors (that were called up before, somewhere, so we receive a ready-made datum and get at its constituent sub-parts, i.e. "fields"), we ascend on the result by filling-in its "destructors" (or "observers", that will be called afterwards, somewhere - so we're actually calling a constructor, creating another bit of the result to be observed later on). Thus corecursion creates (potentially infinite) codata, whereas ordinary recursion analyses (necessarily finite) data.  Ordinary recursion might not be applicable to the codata because it might not terminate.  Conversely, corecursion is not strictly necessary if the result type is data, because data must be finite.

In "Programming with streams in Coq: a case study: the Sieve of Eratosthenes" we find
hd (conc a s) = a
tl (conc a s) = s

(sieve p s) = if div p (hd s) then sieve p (tl s)
              else conc (hd s) (sieve p (tl s))

hd (primes s) = (hd s)
tl (primes s) = primes (sieve (hd s) (tl s))
where primes "are obtained by applying the primes operation to the stream (Enu 2)". Following the above notation, the sequence of primes (with a throwaway 0 prefixed to it) and numbers streams being progressively sieved, can be represented as

or in Haskell,
(\(p, s@(h:t)) -> (h, sieve h t)) `iterate` (0, [2..])
The authors discuss how the definition of sieve is not guaranteed always to be productive, and could become stuck e.g. if called with [5,10..] as the initial stream.

Here is another example in Haskell. The following definition produces the list of Fibonacci numbers in linear time:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

This infinite list depends on lazy evaluation;  elements are computed on an as-needed basis, and only finite prefixes are ever explicitly represented in memory. This feature allows algorithms on parts of codata to terminate; such techniques are an important part of Haskell programming.

This can be done in Python as well:
from itertools import tee, chain, islice, imap

def add(x, y):
    return x + y

def fibonacci():
    def deferred_output():
        for i in output:
            yield i
    result, c1, c2 = tee(deferred_output(), 3)
    paired = imap(add, c1, islice(c2, 1, None))
    output = chain([0, 1], paired)
    return result

for i in islice(fibonacci(), 20):
    print(i)

The definition of zipWith can be inlined, leading to this:

fibs = 0 : 1 : next fibs
  where
    next (a: t@(b:_)) = (a+b):next t

This example employs a self-referential data structure. Ordinary recursion makes use of self-referential functions,   but does not accommodate self-referential data. However,  this is not essential to the Fibonacci example. It can be rewritten as follows:

fibs = fibgen (0,1)
fibgen (x,y) = x : fibgen (y,x+y)

This employs only self-referential function to construct the result. If it were used with strict list constructor it would be an example of runaway recursion, but with non-strict list constructor this guarded recursion gradually produces an indefinitely defined list.

Corecursion need not produce an infinite object; a corecursive queue is a particularly good example of this phenomenon. The following definition produces a breadth-first traversal of a binary tree in linear time:

data Tree a b = Leaf a  |  Branch b (Tree a b) (Tree a b)

bftrav :: Tree a b -> [Tree a b]
bftrav tree = queue
  where
    queue = tree : gen 1 queue

    gen  0   p                 =         []
    gen len (Leaf   _     : s) =         gen (len-1) s
    gen len (Branch _ l r : s) = l : r : gen (len+1) s

This definition takes an initial tree and produces a list of subtrees. This list serves dual purpose as both the queue and the result (gen len p produces its output len notches after its input back-pointer, p, along the queue).  It is finite if and only if the initial tree is finite.  The length of the queue must be explicitly tracked in order to ensure termination;  this can safely be elided if this definition is applied only to infinite trees.

Another particularly good example gives a solution to the problem of breadth-first labeling. The function label visits every node in a binary tree in a breadth first fashion,  and replaces each label with an integer,  each subsequent integer is bigger than the last by one. This solution employs a self-referential data structure,  and the binary tree can be finite or infinite.

label :: Tree a b -> Tree Int Int
label t = t′
    where
    (t′, ns) = go t (1:ns)

    go :: Tree a b    -> [Int]  -> (Tree Int Int, [Int])
    go   (Leaf   _    ) (n:ns) = (Leaf   n       , n+1 : ns  )
    go   (Branch _ l r) (n:ns) = (Branch n l′ r′ , n+1 : ns′′)
                                where
                                  (l′, ns′ ) = go l ns
                                  (r′, ns′′) = go r ns′

An apomorphism (such as an anamorphism, such as unfold) is a form of corecursion in the same way that a paramorphism (such as a catamorphism, such as fold) is a form of recursion.

The Coq proof assistant supports corecursion and coinduction using the CoFixpoint command.

History
Corecursion, referred to as circular programming, dates at least to , who credits John Hughes and Philip Wadler; more general forms were developed in . The original motivations included producing more efficient algorithms (allowing 1 pass over data in some cases, instead of requiring multiple passes) and implementing classical data structures, such as doubly linked lists and queues, in functional languages.

See also
 Bisimulation
 Coinduction
 Recursion
 Anamorphism

Notes

References

Theoretical computer science
Self-reference
Articles with example Haskell code
Articles with example Python (programming language) code
Functional programming
Category theory
Recursion

redpajama_set_name: RedPajamaWikipedia


text:
Q: Message app in BlackBerry 10 I am developing one message app which should get the messages from native message application and want to store it in my app's database .
I tried to refer official docs but not getting how to do this ?
 Can anyone tell me the solution ?

A: I believe you will need to access the data through the BB 10 NDK's system using the MessageService class. At least this is the closest i could think of if i understood your demands. See https://developer.blackberry.com/native/documentation/cascades/device_platform/pim/messages.html


text:
local M = {}

-- Constant
M.EQ = "EQ"
M.NE = "NE"
M.LT = "LT"
M.LE = "LE"
M.GT = "GT"
M.GE = "GE"

--------------------------------------------------------------------------------
-- Compare the b and a.

-- Sets the comparison function as an argument.

-- @param a Target.
-- @param b Target.
-- @param comp Function or a string constant.
-- @return True if the comparison result is matched.
--------------------------------------------------------------------------------
function M.compare(a, b, comp)
    comp = comp or M.EQ
    if type(comp) == "string" then
        comp = M["compare"] .. comp
    end
    return comp(a, b)
end

--------------------------------------------------------------------------------
-- Compare the b and a.

-- @param a Target.
-- @param b Target.
-- @return True if equal.
--------------------------------------------------------------------------------
function M.compareEQ(a, b)
    return a == b
end

--------------------------------------------------------------------------------
-- Compare the b and a.

-- @param a Target.
-- @param b Target.
-- @return True if not equal.
--------------------------------------------------------------------------------
function M.compareNE(a, b)
    return a ~= b
end

--------------------------------------------------------------------------------
-- Compare the b and a.

-- @param a Target.
-- @param b Target.
-- @return True if less than.
--------------------------------------------------------------------------------
function M.compareLT(a, b)
    return a < b
end

--------------------------------------------------------------------------------
-- Compare the b and a.

-- @param a Target.
-- @param b Target.
-- @return True if less than or equal.
--------------------------------------------------------------------------------
function M.compareLE(a, b)
    return a <= b
end

--------------------------------------------------------------------------------
-- Compare the b and a.

-- @param a Target.
-- @param b Target.
-- @return True if greater than.
--------------------------------------------------------------------------------
function M.compareGT(a, b)
    return a > b
end

--------------------------------------------------------------------------------
-- Compare the b and a.

-- @param a Target.
-- @param b Target.
-- @return True if greater than or equal.
--------------------------------------------------------------------------------
function M.compareGE(a, b)
    return a >= b
end

return M

redpajama_set_name: RedPajamaGithub


text:
Washington, DC: International Spy Museum
700 L'Enfant Plaza SW, Washington, DC
Two blocks south of the National Mall, on the east side of 10th St. SW/L'Enfant Plaza, SW, just south of its intersection with D St. SW.
Daily 10-6 (Call to verify) Local health policies may affect hours and access.
Adults $25.
RA Rates:
Results 1 to 5 of 5...
International Spy Museum
A blend of slick design, "experiential" displays, and real spy gadgets reveals the secret and sordid world of espionage and covert operations.
Roadsideamerica.com Report... [10/10/2021]
Visitor Tips and News About International Spy Museum
Worth the trip. Be prepared to spend hours trying to look at everything all while solving a crime.
[Shannon and Ashley, 05/22/2020]
At the Spy Museum, our extended family of 15 played "Operation Spy" -- it was a big hit for all of us (ages 15 to 83 years old). It's an audio / video / multimedia experience, including an actor/guide who may throw you hints, or throw you off, depending on your team's dynamics.
The surroundings change as the game progresses. Players move through several rooms, including a bus depot, war room, tunnel, office and surveillance van. Each room has a spy puzzle, e.g. surveillance, sleuthing, safe-cracking, to name a few, that must be solved by the team.
Depending on your skill and teamwork, there are six possible endings. Teams are scored from 1 (low) to 5 (high).
[swtrekker, 08/14/2011]
The Spy at Night/Operation Spy and the Spy in the City package add-ons are amazingly fun. The Spy in the City tour even takes you past a couple of attractions listed on RoadsideAmerica.com.
Bring a camera even if you can't use it in the museum, which is the only negative.
[Baumer, 05/28/2010]
The Spy Museum offers a fascinating glimpse into the lives of real (and, on, occasion, TV and movie) espionage and the people involved in it. There are lectures, films, book-signings, and family activities related to espionage featuring people involved in espionage and those who study and write about them. There are hands-on exhibits, all kinds of memorabilia from the Cold War, and a lot of really great gadgets that were used in actual espionage.
[Lee Gilliland, 12/26/2005]
An advisory board of former spooks and historians developed many of the ideas for the museum. Don't miss the KGB lipstick pistol and the CIA cyanide-impregnated suicide eyeglass frames -- the nibble of death.
Obscure Monument to Lobsterdom, Washington, DC - < 1 mi.
Williams "Slave Pen" Markers, Washington, DC - < 1 mi.
Animatronic Smokey Bear, Washington, DC - < 1 mi.
Wizard Tree, Columbia, MD - 24 mi.
DC Latest Tips and Stories
Feature: Zero Milestone, Washington, DC
JFK Ich Bin Ein Berliner Mural, Washington, DC
Feature: International Spy Museum, Washington, DC
Car Bomb Spot, Washington, DC
National Air and Space Museum, Washington, DC

redpajama_set_name: RedPajamaCommonCrawl


text:
Le terme anglais  (abrégé en « DTV »), également appelé vidéofilm fait référence à un film sorti directement à la vente aux particuliers ou à la location (vidéo-club, plateformes dématérialisées de vidéo à la demande) sans que celui-ci n'ait été au préalable exploité dans une salle de cinéma. Au Japon, le terme utilisé est « V-Cinéma ».

Techniquement, les films sortis en  sont appelés « films de second marché », par opposition aux « films de premier marché » dont l'exploitation débute en salle. Les films en  sont diffusés directement sur les supports VHS (autrefois), DVD ou Blu-ray (on parle alors de direct-to-dvd) ou sur les plates-formes de vidéo à la demande (direct-to-digital).

Dans son livre Le Cinéma enragé au Japon, le critique de cinéma Julien Sévéon précise que .

Notes et références

Article connexe
 Original video animation (OVA, anciennement OAV)

Vidéo à la demande


Rwanda claims the expulsions were part of crackdowns on those living illegally in the country.
Rwanda has expelled more than 1,500 Burundians in the past week after they refused to move to refugee camps, according to Burundian officials.
Monday's move is the latest of the signs that a political crisis is testing the already tense relations between the neighbouring central African countries.
Seraphine Mukantabana, Rwandan minister of disaster management and refugee affairs, said on Monday the expulsions were part of regular crackdowns on those living illegally in the country and were not targeting Burundians specifically.
Rwanda has been hosting tens of thousands of people who have fled more than a year of political violence in Burundi and others who have been there for work, often without formal permission.
"They were asked to go to refugee camps or return back to Burundi," the governor of Burundi's Kirundo province next to the Rwandan border, Melchior Nankwahomba, told the Reuters news agency.
"Those who refused to go to refugee camps were chased ... and stripped of their possessions," he said, adding that they were pushed out by local officials.
Philippe Ngabonziza, mayor of the Burundian town of Ntega, said 1,320 expelled Burundians had arrived since Friday.
The governor of the neighbouring Ngozi district, Albert Nduwimana, said they had received 218 people over the weekend.
The crackdown on Burundians follows the expulsion of thousands of Rwandans by Burundi since April 2015.
Hundreds have been killed and over 200,000 have fled Burundi, according to the UN, raising fears of a return to the civil war fought between 1993 and 2006.
Burundi has accused Rwanda of interfering in its political crisis, which has seen Burundian government forces clash with protesters and rebels who say the president violated the constitution by standing another term. Rwanda has denied Burundi's accusations.


text:
Set in the Mayan civilization, when a man's idyllic presence is brutally disrupted by a violent invading force, he is taken on a perilous journey to a world ruled by fear and oppression where a harrowing end awaits him. Through a twist of fate and spurred by the power of his love for his woman and his family he will make a desperate break to return home and to ultimately save his way of life. #No one can outrun their destiny.
Genres: Action, Drama, Thriller, History
Actors: Rudy Youngblood, Raoul Max Trujillo, Gerardo Taracena, Iazua Larios, Antonio Monroy, María Isabel Díaz Lago, Dalia Hernández, Jonathan Brewer, Morris Birdyellowhead, Carlos Emilio Báez, Amilcar Ramírez, Israel Contreras, Israel Ríos
Director: James Horner, Mel Gibson
Popularity: 115.292
Budget: $40,000,000
Apocalypto (2006)
maya civilization
Icon Entertainment International
Icon Productions
Watch Apocalypto Online
Apocalypto Full Movie
Apocalypto 123movies
Apocalypto Fmovies
Apocalypto Putlockers
Apocalypto Gomovies
Apocalypto Soap2day
Gimly
I don't know if there is a better example of dedication in filmmaking out there than there is in _Apocalypto_. Brilliant, if overrated. _Final rating:★★★ - I personally recommend you give it a go._
Trailer: Apocalypto
Six years ago NASA discovered the possibility of alien life within our solar system. A probe was launched to collect samples, but crashed upon...
The Hobbit: The Desolation of Smaug (2013)
The Dwarves, Bilbo and Gandalf have successfully escaped the Misty Mountains, and Bilbo has gained the One Ring. They all continue their journey to...
Spartacus (2004)
Sentenced to spend out the rest of his adult life laboring in the harsh deserts of Egypt, the Thracian slave Spartacus gets a new lease on life when...
Solomon Kane (2009)
IMDb: 5.92
A nomadic 16th century warrior, condemned to hell for his brutal past, seeks redemption by renouncing violence, but finds some things are worth...
True Grit (2010)
Following the murder of her father by a hired hand, a 14-year-old farm girl sets out to capture the killer. To aid her, she hires the toughest U.S....
Navy SEAL Lieutenant A.K. Waters and his elite squadron of tactical specialists are forced to choose between their duty and their humanity, between...
Open Water 2: Adrift (2006)
A weekend cruise on a luxurious party yacht goes horribly wrong for a group of old high-school friends. They forget to let the ladder down before...
Double Impact (1991)
Jean Claude Van Damme plays a dual role as Alex and Chad, twins separated at the death of their parents. Chad is raised by a family retainer in...
A group of people try to survive an attack of bloodthirsty zombies while trapped in a rural Pennsylvania farmhouse.
Ewoks: The Battle for Endor (1985)
The army of the Marauders, led by King Terak and the witch Charal, attack the Ewoks village, killing Cindel's family. Cindel and the Ewok Wicket...
Wrong Turn (2003)
Chris crashes into a carload of other young people, and the group of stranded motorists is soon lost in the woods of West Virginia, where they're...
Premonition (2007)
A depressed housewife who learns her husband was killed in a car accident the day previously, awakens the next morning to find him alive and well at...


text:
Live by city
Live by date
Movie outtakes
For Movie Fans Only, Volume 3
Released: 2000/12/02, by Memory
The last release from the Czech Fan Club are 3 CDS that showcase all the unobtainable and 'alternate' versions of songs from Elvis' movie soundtracks plus the bonus of a little dialogue. Unlike the excellent "Best Of G.I. Blues, Blue Hawaii" etc Czech CDS, these are not 'Studio Outtakes' but the genuine songs lifted from the original films.
This made me a little apprehensive at first, not only about the possible poor quality but also I wondered - 'How different can the songs really be?'. - And, do I really want even more Elvis' material from some, let's be honest, very dodgy films ?! Well I shouldn't have worried since the quality of the remastering is Brilliant - Also the CDS themselves are very cleverly compiled and they made me laugh and smile all weekend. To be honest these are the films that I grew up with - Fun summer weekends watching Elvis' movies on TV - and listening to all these CDS gave me happy flashbacks to my youth!
I also admit that the better Elvis' 60's soundtracks - even Harum Scarum (in patches) - appeal to me but I am also not the sort of person who would ever listen to, for instance, the Kissin' Cousins or Roustabout soundtrack albums.
Each FMFO CD is packed full - 35+ tracks on every one!- and each covers about 7 of Elvis' films. What I found I enjoyed most was the fact that the CDs really had the Elvis "Movies vibe". I honestly felt that I was back in the cinema and that I had 're-lived' 7 Elvis movies in 75 minutes!
Listening to them you truly do realize why the producer, Pavel C, called them "A Slavery of Love"! As a bonus the CD covers are nicely produced as well and packed full of photos. So what are the musical Highlights?
From 'Roustabout' ('64) to 'Paradise Hawaiian Style' ('66), 37 tracks, six movies, 75 minutes.
Of course Elvis' movies had taken a big dip in quality by 1964 but I found myself enjoying this volume of FMFO far more than I had expected. - 'Roustabout' is unfortunately a weak start but has the bonus of the movie version of "Little Egypt" and good orchestrated versions of "Big Love, Big Heartache" and the finale of "Brand New Day on the Horizon'.
'Girl Happy' is far better featuring the unreleased duet with Shelley Fabares on "Spring Fever". Elvis then says "Watch me, Hit it" as they lead into the fun 'live' version of "Wolf Call" and we also get the unreleased "Girl Happy" movie 'outro'. 'Tickle Me' was of course a film oddity using only previously released studio songs but they all sound very different here with interesting versions of "Long Lonely Highway" and "Slowly but Surely" among them. Next up the MGM Lion roars and we're away on a 'Harum Holiday'. Jack Costanza who starred in the film was known as "Mr Bongo" and it was his group that added the percussion to the soundtrack. This creates a livelier feel and benefits the songs - "Hey Little Girl" works as does both versions of the title track, especially the finale.
'Frankie and Johnny' features the unreleased duet with Donna Douglas on "Petunia" but the real highlight is the full 6 minutes of the 'Frankie and Johnny' production number with Donna Douglas and also Sue Ane Langdon dueting - great stuff.
'Paradise Hawaiian Style' ends the CD. Some fans will like the unreleased duets with Donna Butterworth on "Queenie Wahine" and "Datin'" (not me!) but Marianna Hill purring "Scratch my Back" with Elvis is excellent. The end 5 minute medley of "This is My Heaven/Drums of the Island" is a delight wrapping up the third and final, packed, CD of the series very nicely.
Sound: 8 out of 10.


text:
News | All stories
Czech support of European integration steeply declined, survey finds
Czech support of European integration is on the decline, according to a fresh survey by the American Pew Research Center. Among all eight EU member states polled, the Czech Republic sees the membership most critically. The survey also found that Czechs were especially critical of their prime minister's approach to the debt crisis in the Eurozone. The Pew Research Center concludes that the financial crisis within the union has also spurred a deep crisis of member countries' trust in the EU. Among the countries polled were Germany, France, Spain, Italy, Greece and the non-Eurozone members: the Czech Republic along with Poland and Great Britain.
New faction around deputy prime minister Karolína Peake gains official party status
The new faction around deputy prime minister Karolína Peake, formerly of Public Affairs, has officially been registered as a party. Mrs Peake said on Tuesday that she was glad the registration of the party had been successful and thanked all 1800 citizens who had signed a petition in support of her new LIDEM party. Mrs Peake founded the group after walking out on junior coalition partner Public Affairs in early May over the way the party presented itself. Her split with the party and the subsequent walk-out of some of its other members cast serious doubt over the future of the government coalition; however, it survived a vote of confidence.
Czech citizen killed in New Zealand
A 31-year-old Czech woman was found dead in New Zealand. Police said on Tuesday that the woman's body had been found on Sunday and that it is likely she became the victim of rape before she was killed. Police are investigating the case.
Czech president signs into law legislation on emission fees
Czech President Václav Klaus has signed into law legislation that will gradually increase emission fees. On Tuesday, the president ratified a law under which firms with a high level of emissions will have to pay 4200 Czech crowns per ton of CO2 emitted starting next year. The fee will gradually be increased to 14,700 crowns by 2021. The new regulation will mostly affect large corporations. The Confederation of Industry of the Czech Republic opposes it.
State prosecutor grants MP charged with corruption permission to attend lower house session on stripping him of his immunity
Former Central Bohemian governor David Rath, who is currently under arrest on suspicion of corruption, will be able to attend a session in the lower house of Parliament, of which he is still a member, in which deputies will vote on whether or not Mr Rath should be stripped of his immunity. Mr Rath had filed for permission to attend the session on Monday with the state prosecutor for the Ustí nad Labem region Lenka Bradáčová. She granted it, on condition that he only attends the period during which his case is discussed. Deputies are yet to decide whether or not this session of the lower house will be open to the public.
Petr Čech extends Chelsea contract to 2016
Czech soccer star Petr Čech has extended his contract with Chelsea until the year 2016. Commenting on his new contract, Čech said he hoped the next four years with his club would be as successful as the last eight had been. Since joining the Premier League in 2004, Čech has made over 360 appearances, won three Premier League titles, four FA Cups and two League Cups. In the recent Champions League finals, Čech helped secure Chelsea's victory by saving three penalties, one in extra time and two in the shootout. His new contract makes him one of the 20 best-paid soccer players internationally.
Exhibition featuring pictures of late president Václav Havel set to open in Old Town Square
A new exhibition of pictures of the late ex-president Václav Havel is set to open in the Prague City Gallery on Old Town Square on June 15. On display will be mostly photographs taken during his time in office – shots from his official visits abroad but also those that were taken behind the scenes. The exhibition has been organized by the Czech News Agency ČTK in memory of the late president. The agency has some 12,000 pictures of Mr Havel in its archives. The exhibition runs through July 6th.
Madeleine Albright receives Medal of Freedom
US President Barack Obama on Tuesday awarded the Medal of Freedom to Madeleine Albright, who was born in Czechoslovakia and fled the country with her parents to escape the Nazi occupation. She spent some time in England before immigrating to the US in 1948. Albright was the first woman to hold the nation's top diplomatic post of secretary of state. Among this year's recipients are John Glenn, the first American to orbit the Earth, and legendary singer-songwriter Bob Dylan. The Medal of Freedom is America's highest civilian honor. It is presented to individuals who have contributed to the security or national interests of the United States, world peace or cultural endeavors.
Rath region scraps problematic tenders worth two billion
Christian Falvey
In continuing fallout from the arrest of former governor of Central Bohemia David Rath, the region has decided to scrap problematic tenders worth two billion crowns. The projects include the reconstruction of the Bustehrad chateau, the financing of which was apparently at the centre of Dr Rath's bribery charges. Other projects involve subsidies for hospitals in Kladno and Pribram, and for Rath's town of Hostivice. Nearly 20 tenders for road repairs were also cancelled. Police arrested David Rath two weeks ago immediately after he received what they believe was a seven-million-crown bribe.
Roma will not press charges against Břeclav boy
Roma representatives will not press charges against a boy who falsely stated he had been seriously beaten by members of the community. The chairman of the national association of Roma told the Czech Press Agency on Monday that they wanted to make a conciliatory gesture and make sure that the entire situation is put to rest in a calm and dignified manner. Mass demonstrations broke out in Břeclav last month when the fifteen-year-old was hospitalised and lost a kidney. Last week he confessed that he had actually fallen off a railing.
Page 111/2588


text:
Stara škola kreka – iz tame u svjetlo, album Marina Ivanovića - Stoke iz 2017. godine.

Popis pjesama

Izvori

Vanjske poveznice
 Pjesma "Stara škola kreka" na YouTubeu

Hrvatski glazbeni albumi
Albumi iz 2017.


At Banjo, we share in the vision of small businesses, we love hearing exciting business ideas and inspirational stories of business success. Most of all, we like to see people out there pursuing their passion. There are 2 million small businesses in Australia employing around 49% of workers and representing some 97% of all businesses in Australia. These stats make it clear that we all benefit if small business, the backbone of our economy, has the support and environment to develop and grow their businesses.
Of 2 million SME's (Small to Medium Enterprises) in Australia, 51% have no lending product at all and they are typically funded with family loans or credit cards at rates closer to 25% without generally adjusting pricing to reward lower risk borrowers.
Funding for SMEs globally has become constrained during the recession and stayed at these low levels since: it is generally more profitable for traditional lenders to make a $2m loan than a $50,000 one.
Post GFC traditional lenders have grown their personal and home loan credit books at much faster rates than their small business books. This has been attributed to a number of factors such as the relative riskiness of SME loans to housing loans, greater capital requirements for SME compared to other forms of lending and finally reduced competition amongst business loan providers post GFC.
Submissions to the recent Financial System Inquiry[i] stated structural issues such as information asymmetry, regulation burden and the taxation system also as possible contributing factors to the lack of business finance provision to SME's.
There are a number of initiatives being implemented internationally aimed at addressing the same issues Australian SME's face accessing finance, and we could consider some of these as roadmaps for our creation of a better SME world.
Competition – under new legislation implemented by the UK Treasury last year, banks are instructed to help small and medium sized companies find new sources of finance if they have turned them down for loans. Santender and RBS have entered into partnership agreements with alternative financiers as evidence of this legislation in action.
Support – the British Business Bank provided funding and guarantees to providers of finance for SME to generate new lending and investment.
Transparency – positive credit reporting regime implemented by a voluntary agreement with major lenders to publish bank-by-bank lending.
Mentoring - the Small Business Administration has partnered with a national not-for-profit organization called SCORE to provide small business mentoring services to business owners across the country.
Focus - Small Business Saturday is an American shopping holiday held on the Saturday after US Thanksgiving during one of the busiest shopping periods of the year. Small Business Saturday encourages holiday shoppers to patronise brick and mortar businesses that are small and local.
At Banjo, we take an active role in advocating for small businesses in Australia. SMEs are the job creators and innovators we need to keep the Australian economy growing.
Banjo introduces a new online marketplace lending platform built by Australian banking experts who simply thought there must be a better way to provide unsecured loans to SMEs. We want to make it easy so business owners can get on with what they do best!
Increased competition in Australia will be good for business.
Recent calls by industry to reduce the red tape burden on SME's by automating BAS and income tax returns are positive initiatives. We support the government taskforce working to explore the potential of technology and digital platforms joining with Government to make it easier and more streamlined for businesses to interact.
Over the coming 12 months, the team at Banjo will place their shoulders to the wheel to work with Government, Industry Bodies and the Banking industry to explore ways in which we can all work together to create the right environment for small business to flourish in Australia.
Imagine being able to just get on with the business of running your business!


Depending on the configuration, the Syberg NMEA Expander can be used in several environments.
It is used as an expansion plug-on module to the Syberg Changeover Unit. It fits directly onto the male headers of J106, J206, J107, J207 and the bottom 4 positions of J500. NMEA 0183 inputs connected to this board are distributed onto input terminals of the Changeover Unit. This plug-on module replaces an external NMEA Expander and greatly simplifies installation.
It is used as a configurable, Stand Alone NMEA Expander.
Standard, pluggable terminals are used on the component side for terminals XJ106, XJ206, XJ107, XJ207 and XJ500. +24 V is supplied to XJ500 and the board may be operated as 2 galvanically separate systems.
4 x 1 input to 4 outputs (2 in each galvanic system).
2 x 1 input to 8 outputs (1 in each galvanic system).
1 x 1 input to 16 outputs (The galvanic systems are interconnected).
All IMO requirements are met or exceeded.
For more information, please download the instruction manual!


text:
poetry by DoppelHouse Press Sep 10, 202110:00 am September 16, 2021
HAGAR PEETERS Selected poetry
Select poems by Hagar Peeters, translated from the Dutch with an introduction by Judith Wilkinson
Essay by DoppelHouse Press Jul 7, 202110:20 am July 7, 2021
Language, Lunacy, and the Literary Provocateur: Life Writing and Schizophrenia
By Claire Phillips The night before picking up a copy of The Collected Schizophrenias: Essays, Esmé Weijun Wang's essays on the subject of "the full psychotic spectrum" or what are called "the schizophrenias" (4), I […]
poetry by DoppelHouse Press Mar 31, 202111:45 pm April 1, 2021
The Poetry of Joanna Roche
A selection of poems from Joanna Roche's recently released chapbook "then.now.if."
Essay by DoppelHouse Press Jan 21, 20216:59 pm June 23, 2021
A Script: Children of December
By Zarina Zabrisky
Scene 1. The camera slowly goes over my grandmother's wall calendar open on the caption, in Russian: LENINGRAD. November 7, 1988. 71st anniversary of the Great October Socialist Revolution.
Scene 2. The military factory entrance looks like Moloch's jaws.
Art by DoppelHouse Press Nov 3, 20209:10 pm June 23, 2021
COVID-19, MY COMRADE: Central-European Graffiti and Street-Art Responses to Pandemic
Written and photographed by Mitja Velikonja, Professor of Cultural Studies, University of Ljubljana, Slovenia
In the beginning is the scream. … And lots of screaming can be heard lately, in difficult times of global COVID-19 pandemic. As a researcher of urban cultures and radical politics I'm particularly interested in "sprayed screams," … reacting to the disease and even more to governmental medical, social and economic measures against it.
Pandemic BLM Politics: Graffiti from New York, Long Beach, and Los Angeles
By Carrie Paterson
Photos by Seph Rodney, Mario Ybarra Jr., and Carrie Paterson
It was lucky for me that early in the (first?) summer of the pandemic, I encountered the writings of Slovenian "graffitologist" Mitja Velikonja, just as my home street corner started filling up with warring pandemic wheatpaste posters and stickers. Like many shops and businesses around the country, the tenants decided to board up the windows in a (hyperbolic, on my quiet street) show of fear about property damage that might ensue from the Black Lives Matter protests
fiction by DoppelHouse Press Sep 23, 20206:50 pm January 21, 2021
Rosh Hashanah Poetry Edition
A selection of poems by Nina Pick. Grandchild of Holocaust survivors, and an integrative spiritual counselor, Pick works to revive Judaism through the gifts of female spiritual leaders and heal intergenerational trauma. She's a Reiki Master, a Waldorf educator, and a fellow at the Yiddish Book Center's Wexler Oral History Project.
film by DoppelHouse Press Aug 11, 20209:41 am January 21, 2021
By Glenn Harcourt
Harris's Carmilla is much more than just a well-told and engaging story with an affirmative if transgressive LBGTQ plot. It engages us also in the way it transforms its original source material, and about how that transgression can also be a liberation, as long as one is willing to be the price.
Art by DoppelHouse Press Jun 18, 202010:24 pm June 30, 2020
LOUISE BRIGHAM: Adventures of a Scrap Artist
By Antoinette LaFarge
"Two summers on the island of Spitzbergen," wrote Louise Brigham in 1909, "taught me, more than all previous experiments, the latent possibilities of a box." The book she published that year, Box Furniture, is indeed a testament to the possibilities of a box—and not just any box, but specifically the packing crates then used to ship all kinds of ordinary consumer goods. Brigham found in those humble, cheaply made boxes inspiration for a unique system of furniture design based entirely on recycled packing crates.
Art by DoppelHouse Press May 18, 20201:05 am June 23, 2020
Contemplating Disembodiment in the work of Liat Yossifor
By Susan Power
Our experience of time and space has been radically disrupted by the threat of the pandemic; its scope and sobering impact both intimate and distant. Yet this existential crisis can promote a new way of being in the world. With so many aspects of our lives on hold, the current moment offers a rare opportunity to reflect upon the "state of things." Like the eponymous 1982 film by Wim Wenders, which revolves around a science fiction film cast and crew stranded together on location when the production is stalled due to sudden lack of funds, Liat Yossifor's latest body of work was on its way to Sydney, Australia for a solo show at Fox Jensen Gallery scheduled to open on March 28 when it became stranded in shipping crates, postponed in the voyage to its destination, and ultimately consigned to a screen…
Previous1 2 3 … 5 Next


Having surveyed Grendon Green / The Firs (SO 599 573) I drove a few miles on minor lanes through the sleepy hamlet of Pencombe and parked at the edge of a muddied track leading to buildings named Little Hegdon. From here it was only a short walk down the narrow lane to a gate giving access to the field where the summit of Hegdon Hill is reported to be situated.
The field had been planted and it slowly rose to a grassed edge which steeply butted against a mature hedge, I followed its grassed rim toward the trig pillar which stands approximately 10 metres from the hedge.
The upper section of the hill was still in shade and white frosted, while to the north Grendon Green / The Firs was bathed in sunshine. I judged the grassed rim of the field which rose in to the hedge to be a part of land that had been disturbed when the hedge was planted and therefore not a natural part of the hill, because of this I placed the Trimble on what I judged to be the highest ground that did not rise steeply in to the hedge.
Whilst the Trimble gathered its customary five minutes of data I wandered down the field in the direction of where my car was parked to see if there was direct access to it, there wasn't, so once five minutes of data were gathered I closed the Trimble down, packed it away and retraced my steps back to the car on my inward route.
On the way back up the minor lane to the car I looked at the land either side of the strip of tarmac, each was vegetated with trees and brambles, and it was hard to judge if this land was higher than where the Trimble had been placed.
This hill could easily be bagged in a couple of minutes there and back if wanted, it had taken me 30 minutes, which is one of the advantages (or dependent upon your view; disadvantages) of surveying, as it affords time to look and potter, something that I'm now used to and enjoy.


text:
As Trump stumps for Texas, another poll shows him in dead heat with Biden
by Fernando Ramirez | Aug 24, 2020 | 2020 Elections, Politics
A new Public Policy Polling poll released Monday by USA Today again shows Texas is very much in play this November.
Former Vice President Joe Biden leads President Trump by one percentage point, 48 percent to 47 percent.
Trump carried the Lone Star State by a margin of 9 percentage points in 2016. Most recent polls show a close race between the two presidential candidates. Monday's poll was conducted last week just as the Democratic National Convention wrapped up.
Republicans kicked off their own platformless convention on Monday. In Trump's first speech of the convention, he took the time to attack Democrats and their chances in Texas.
"You're not going to win the state of Texas if you have no oil, no guns, and no religion," Trump said.
Polling conducted throughout much of the year has shown the two presidential candidates evenly matched in Texas, but the timing of this particular poll is giving the Trump team pause: at this point in the 2018 US Senate race, most polls had Ted Cruz ahead by 6 points. He would ultimately win by just over 2 points. If that trend holds for Trump in 2020, Biden would be on track for a four point victory.
Last week, a co-finance chairman of Trump's reelection campaign called the idea of battleground Texas "malarkey" and said the Trump campaign shouldn't put resources into the state.
That advice is falling on deaf ears; Trump has visited the Lone Star State three times this year and as of the last three weeks, his campaign has pumped more than $1.4 million advertising dollars into Texas — about six times more than the Biden campaign.
Trump says he's called 3.2 million Texans since the beginning of the election cycle. That's cute. @texasdemocrats has reached 3.5 million potential Texas voters IN THE LAST TWO WEEKS. https://t.co/fsSqslcvBx
— J Otis (@otis_was_here) August 24, 2020
The up-for-grabs polling coming out of Texas has also pushed the Biden campaign to make moves in the state. Earlier this month, the campaign staffed up and began airing TV ads in Texas, the first time a Democratic candidate has done so in a quarter-century, according to Texas Democrats.
If Biden wins Texas in November, he would be the first Democratic presidential candidate since Jimmy Carter to do so.
Photo: Loren Elliott/Getty Images


text:
Film Review: Olympus Has Fallen
Gerard Butler and Aaron Eckhart in Olympus Has Fallen
Obama had better watch his back because Hollywood have got it in for the White House this year. First out of the blocks in the 'White House under siege' sub-genre is Olympus Has Fallen, starring Morgan Freeman, Gerard Butler and Aaron Eckhart.
When a North Korean paramilitary group infiltrate the White House and take President Asher (Aaron Eckart) hostage, it is up to his old friend and Secret Service Agent Mike Banning (Gerard Butler) to swoop into action and really rustle their jimmies. As the tensions between the two countries escalate and full-scale war in Korea approaches, the pressure of keeping the peace is laid at the feet of Acting President Trumbull (Morgan Freeman).
Gerard Butler as Banning
Whilst it may not be the most original of action films, Olympus Has Fallen is most certainly not a wet sponge that should be avoided at all costs. On the contrary in fact, this film is a great late-night showing action thriller that is chock full of carnage, explosions and cheesy action film-troupes.
First off, Gerard Butler is a fantastic lead, something that was a little unexpected for me. After a few meanders with rom-coms in the last few years (The Ugly Truth, The Bounty Hunter), Butler is back in full-badass mode as Mike Banning. Butler seems to have real fun with the role, barely suppressing a cheesy grin as he threatens to shoot, stab and generally fuck-up the terrorists.
His character however is a little two-dimensional as early signs of characterisation are squandered in place of kicking-ass and charging around darkened corridors. Director Antoine Fuqua does try to construct some kind of background for Banning (his wife is a nurse, he feels guilty for letting the President's wife die) but all of this is quickly forgotten once the shit hits the chandelier (because the White House doesn't have fans).
Also, the dialogue is flat and uninspired; Banning isn't exactly John McClane in the witty one-liner department whilst Eckhart's president Asher is left to spew clichéd lines like "The United States of America doesn't negotiate with terrorists" and then subsequently do just that.
In terms of action, Olympus Has Fallen has enough on offer to please action-junkies that crave copious amounts of carnage. The opening salvo that sees the White House get over-run was a little too simplistic and easy for my liking, but Butler proved to be an extremely physical and brutal hero akin to Messrs Willis, Seagal and Stallone. For anyone who isn't into action films however, the fist-fights and knife plunges may seem a little over-the-top or unnecessarily violent for them to enjoy.
Crumping on the dance floor
Morgan Freeman and Aaron Eckhart were also good in their supporting roles, the former a little underwritten in my mind. It did seem as though all Freeman did was sit around in board room and give orders. Meanwhile, Rick Yune's maniacal villain was memorable enough to leave a lasting impression, something which cannot always be said about action films (We're looking at you A Good Day to Die Hard).
So whilst it isn't going to win any awards or make a huge amount of cash, Olympus Has Fallen is still a whole lot of fun that doesn't require too much thought to enjoy. It's cheap, cheesy and violent, a throwback to 80's action films that didn't try to be something they weren't. Definitely a guilty pleasure that will make you forget just how shit A Good Day to Die Hard was. Just don't go in expecting Citizen Kane and you should have a whole lot of fun.
I give Olympus Has Fallen: 6/10
See this if you liked: Air Force One, Die Hard, Gamer, Independence Day
Labels: Aaron Eckhart, Angela Bassett, Antoine Fuqua, Ashley Judd, Cole Hauser, Dylan McDermott, Film Reviews, Finley Jacobsen, Gerard Butler, Melissa Leo, Morgan Freeman, Olympus Has Fallen, Radha Mitchell, Rick Yune
Photology 12 September 2013 at 12:37
Thanks for review, it was excellent and very informative.
Film Review: Iron Man 3
Voice of Reason #10: Star Wars Overkill
Rank the Films: Marvel Cinematic Universe
Marvel Month: Who We Want To See In Avengers 2
Film Review: Oblivion
Marvel Month: Superhero Sell-Outs
Marvel Month: What To Expect In Marvel Phase 2
Introducing Marvel Month
The Strokes - Comedown Machine


text:
What Are BIOS and UEFI?
What Is CSM?
How Do I Know What Boot Scheme My PC Is Using?
What Is CSM Used For?
What if I'm Installing the First OS on a New Machine?
Advantages of UEFI
Faster boot and better power management
Secure Boot option
Native multi-boot
Better support for large drives
Better software control
Advantages of BIOS
Simpler boot process
More flexible OS options
Fewer bugs
How Do I Enable CSM?
What Happens if I Disable CSM?
What Is the Difference Between CSM and UEFI?
Should I Boot From UEFI or Legacy?
What is CSM, and how can you use it to get the most out of your computer?
I will address this question and everything else you need to know about CSM throughout this article.
Before we dive into CSM, you need to know that CSM is a component of your UEFI firmware.
BIOS and UEFI are both low-level software that run checks on your Hardware and then hand the boot process over to your operating system when you turn your computer on.
BIOS stands for Basic Input/Output System. It's the first thing that appears when you turn on your computer as it scrolls through a few lines or screens of text.
When you turn on your computer, BIOS is what enables it to work.
The BIOS is what facilitates the communication between all the microchips and components in your computer. It checks that all the hardware devices are working.
Once it finishes checking everything, it can tell the operating system to load up.
UEFI (Unified Extensible Firmware Interface) started to replace BIOS as the startup firmware in 2007 because of BIOS' severe limitations.
The system that a conventional BIOS uses to access your hard drive or SSD, called the master boot record (MBR), could only handle partitions smaller than 2 TB. This became a major issue for BIOS when storage drives started to exceed this capacity limit.
The vast majority of modern computers now use UEFI rather than a traditional BIOS – though it's still referred to as BIOS in most cases.
To circle back to the original question of this article: With the transition from traditional BIOS to UEFI, a new parameter called CSM was introduced.
CSM appears as a component in the UEFI setup menu.
But what is CSM, and what is it used for?
CSM stands for compatibility support module.
It's an optional tool included in the UEFI firmware that allows legacy BIOS compatibility.
CSM offers backward compatibility by booting the machine as if you were running a legacy BIOS system.
It also allows you to use older operating systems that don't support UEFI. You create the legacy BIOS compatibility by emulating a BIOS environment that's compatible with your current operating system.
If your computer is relatively new and came with Windows pre-installed, CSM would have most likely been disabled by default.
You don't need to enable it unless you want to install an older operating system that doesn't support UEFI – or if you're trying to boot from an old storage drive that you recently hooked up, that already has an OS installed, for that matter.
Here's how to check whether your Windows Operating System is booting through BIOS or UEFI.
Click the 'Windows' search key on your computer and launch (type in) 'System Information'.
BIOS Mode from my PC's System Information
Now find 'BIOS Mode' and it will say either UEFI or Legacy next to it.
If it says UEFI, your BIOS actually is UEFI and the CSM option in your BIOS is off (otherwise you couldn't have booted an OS in UEFI Mode)
If it says Legacy, your BIOS is either somewhat old-ish, or you most likely have a UEFI BIOS with the CSM option set to enabled/legacy
Two common scenarios call upon CSM.
The first situation is if you're installing an old operating system that doesn't support UEFI boot. This would be pre-SP1 Windows Vista or earlier.
Another reason to use CSM is if you need to install an operating system with a different "bitness" than that of the firmware.
For example, if you wanted to install a 32-bit OS on a machine with 64-bit UEFI, you would need to use CSM.
It's also important to note that BIOS boot usually requires MBR partitioning. However, some bootloaders support partitioning schemes, such as GPT.
UEFI boot typically requires the bitness of the OS to match the bitness of the firmware and most UEFI-based machines have 64-bit firmware.
You may wonder which boot mode is better for installing your operating system.
First, you should check if you have the option of installing with both UEFI and BIOS.
This involves restarting your computer and pressing the required key to enter the BIOS or UEFI setup mode. (Usually DEL Key or F2)
Once you've entered your BIOS/UEFI setup, look for 'Boot Mode' options that can be toggled between 'UEFI', 'Legacy', or 'UEFI + Legacy'.
It may also be called something similar to 'Enable UEFI Boot' or 'Enable Legacy Boot'. It may even mention the term CSM or compatibility support module.
If there are no options like this in your BIOS/UEFI, your motherboard doesn't support CSM.
You'll have to stick with whatever firmware boot mode you have when installing the new operating system.
If you DO have CSM options available, I recommend you try UEFI first, and if it doesn't work, you can use CSM to install your OS.
UEFI with Fast Boot can be twice as fast as a legacy boot on Windows machines.
Features such as sleep, hibernation, reboots, and so forth may partially or completely bypass the POST (power-on self-test). This means your PC is ready almost instantly when resuming from such power-saving modes.
Secure Boot may be more of a hassle than an advantage depending on your needs.
This is why the majority of hardware allows you to disable it. However, having an extra signature check at the firmware level is an additional protection feature against rootkits.
UEFI allows you to declare that more than one OS is installed on a single hard drive.
You can then choose between them within the firmware UI. This means you don't need an additional bootloader.
MBR partitions from BIOS only support up to 2 TB. UEFI goes up to a theoretical ~9 ZetaBytes.
You can still boot large disks under BIOS by using hybrid partition tables and an additional bootloader partition. However, it's better supported under UEFI without the need for extra patchwork.
Certain UEFI settings, such as the boot order, can be changed by the operating system directly.
This allows you to order things like 'shutdown and reboot from CD' from within the operating system, without needing to enter the firmware UI.
BIOS offers a boot process that is simpler by design. With UEFI, only non-removable media can be booted consistently.
This is because bootloader entries for operating systems on internal drives are stored on the motherboard.
The majority of UEFI systems are 64-bit, which means 32-bit systems will need to resort to CSM to boot. Windows versions older than Vista SP1 can't boot with UEFI.
UEFI implementations can have subtle but fatal bugs and flaws. This can result in bricking the motherboard by loading the wrong driver or removing the firmware configuration.
BIOS has been out since 1981, and the way it interfaces with the OS hasn't changed much during this time.
Nowadays, it's a very thin layer that is only used during boot.
The OS has almost no access to whatever stays inside the BIOS, so it's much more difficult to break things fatally.
Enabling CSM is different for each of the motherboard brands. It involves entering the BIOS as your computer is launching and locating the 'Boot' or 'Security' tab.
Look for a menu labeled 'Secure Boot', and there should be an option called 'Launch CSM'.
Enabling CSM from ASRock Motherboards
Once you have 'Launch CMS' enabled, select 'Save Changes & Reset', and your computer will be ready to launch with CSM.
CSM is a configuration of UEFI that allows legacy BIOS compatibility by emulating a BIOS environment.
Through CSM, you can use legacy operating systems and option ROMs that do not support UEFI.
I recommend using CSM to boot via legacy BIOS only if you:
Are setting up a virtual machine – UEFI on virtual machines hypervisors are usually limited and experimental; BIOS boot is much better supported
Need to boot a 32-bit operating system on a 64-bit machine
Have a firmware that's known to be buggy
Frequently swap hard drives between machines
Want to install an older OS
Other than these scenarios, it's better to go with UEFI. UEFI is faster, more secure, and has superior functionality.
If you do enable CSM to install an older operating system, your device will automatically boot using the same mode it was installed with.
You won't be able to boot using BIOS if you disable CSM.
UEFI will be enabled, which is needed to install and boot the most modern compatible operating systems.
CSM is a feature within UEFI that enables legacy BIOS support.
UEFI and BIOS are used interchangeably nowadays, but your motherboard most likely uses UEFI.
Enabling CSM allows for legacy BIOS features that aren't supported in normal UEFI mode.
CSM uses an MBR (master boot record) to boot the operating system. UEFI uses files within a larger partition to boot the OS.
GPT and MBR are different specifications for disk partition formatting. These allow you to use UEFI boot on an MBR formatted disk.
UEFI is the successor to BIOS. This means UEFI is currently the mainstream boot mode.
UEFI has better security, increased performance, greater scalability, and better programmability compared to legacy BIOS. I recommend you use UEFI to boot your PC.
Did that answer all your questions about CSM? Got any other unanswered questions? Feel free to ask us in the comments or our forum!
What Is ErP Mode (ErP Ready) in BIOS and Should You Use It?UPDATED December 28, 2022
How To Reset An MSI BIOS? [All Possible Ways]UPDATED November 2, 2022
How To Enter BIOS On Your Motherboard (MSI, Asus, Gigabyte, ASRock)UPDATED August 24, 2022
How to update your BIOS without a CPUUPDATED November 12, 2022
Bill L
Excellent! This saved my bacon with an Asus ROG laptop in which I add upgraded the bios version 310 to 312. I thought I had bricked the laptop because nothing would work; It was a dual boot machine, Windows 10 and Debian Linux, using GRUB2; neither OS would boot because the disk with GRUB wasn't even visible to the UEFI BIOS. The Bios was as far as I could get. I had looked at the 312 bios screens many many times trying to get the machine fixed, and indeed one screen mentioned CSM which was disabled; since I didn't understand what CSM meant, I left it disabled. I got about 4 hours of sleep in about a 60 hour period working on this until I came across this article by you. As I say, it saved my bacon. The laptop is now back to just the way it was before. Thank you again!
Glad it helped! This happened to me a couple of times. Especially when the CMOS Battery is empty and the BIOS just sort of resets to factory defaults, it's often the case that CSM is changed to something that is incompatible with what your OS's need.
Change that back and works as before.


text:
Q: Swift ObjectMapper: toJSONString for a dictonary containing mappable Object I would like to to get the json string for the following Dictionary, but I don't know what is the appropriate way to do so.
/* For example, I have a Dictionary contains a set of users and I want to get the JSONString of it. */

class User: Mappable {
    // some other implemenation ...
}

/* in some other class, e.g MyService.swift */
func generateString() -> String {
    let user1 = User()
    let user2 = User()

    // some other implemenation ...

    let seatDict: [String:User] = [
       "1A": user1,
       "1B": user2,
       // some other implemenation ...
       // some other implemenation ...
    ]

    // here i would like to return the JsonString of my seatDict
    let result: String = ... // how to do it?
    return result
}

A: You can do this by using the Mapper class.
...
// here i would like to return the JsonString of my seatDict
let jsonDict = Mapper<User>().toJSONDictionary(seatDict)
let result: String? = Mapper<User>.toJSONString(jsonDict as Any, prettyPrint: false)
return result

Keep in mind that toJSONString can return nil if serialisation fails - so you need to handle that somehow in your application. That's why I changed result to be optional