text:
const { GraphQLString, graphql } = require(`graphql`)
const { build } = require(`../..`)
const withResolverContext = require(`../../context`)
import { buildObjectType } from "../../types/type-builders"
const { store } = require(`../../../redux`)
const { actions } = require(`../../../redux/actions`)
const { dispatch } = store
const { createFieldExtension, createTypes } = actions

const report = require(`gatsby-cli/lib/reporter`)
report.error = jest.fn()
report.panic = jest.fn()
report.warn = jest.fn()
report.log = jest.fn()
report.activityTimer = jest.fn(() => {
  return {
    start: jest.fn(),
    setStatus: jest.fn(),
    end: jest.fn(),
  }
})
afterEach(() => {
  report.error.mockClear()
  report.panic.mockClear()
  report.warn.mockClear()
  report.log.mockClear()
})

describe(`GraphQL field extensions`, () => {
  beforeEach(() => {
    dispatch({ type: `DELETE_CACHE` })
    const nodes = [
      {
        id: `test1`,
        parent: `test5`,
        internal: { type: `Test`, contentDigest: `0` },
        somedate: `2019-09-01`,
        otherdate: `2019-09-01`,
        nested: {
          onemoredate: `2019-07-30`,
          title: `Hello World`,
        },
      },
      {
        id: `test2`,
        parent: `test6`,
        internal: { type: `Test`, contentDigest: `0` },
        somedate: `2019-09-13`,
        otherdate: `2019-09-13`,
        nested: {
          onemoredate: `2019-09-26`,
        },
      },
      {
        id: `test3`,
        parent: null,
        internal: { type: `Test`, contentDigest: `0` },
        somedate: `2019-09-26`,
        otherdate: `2019-09-26`,
      },
      {
        id: `test4`,
        internal: { type: `Test`, contentDigest: `0` },
        olleh: `world`,
      },
      {
        id: `test5`,
        children: [`test1`],

        internal: { type: `AnotherTest`, contentDigest: `0` },
        date: `2019-01-01`,
      },
      {
        id: `test6`,
        children: [`test2`],

        internal: { type: `AnotherTest`, contentDigest: `0` },
        date: 0,
      },
      {
        id: `test7`,
        internal: { type: `NestedTest`, contentDigest: `0` },
        top: 78,
        first: {
          next: 26,
          second: [
            {
              third: {
                fourth: [
                  {
                    fifth: `lorem`,
                  },
                  {
                    fifth: `ipsum`,
                  },
                ],
              },
            },
            {
              third: {
                fourth: [
                  {
                    fifth: `dolor`,
                  },
                  {
                    fifth: `sit`,
                  },
                ],
              },
            },
          ],
        },
      },
    ]
    nodes.forEach(node =>
      actions.createNode(node, { name: `test` })(store.dispatch)
    )
  })

  it(`allows creating a custom field extension`, async () => {
    dispatch(
      createFieldExtension({
        name: `birthday`,
        args: {
          greeting: {
            type: GraphQLString,
          },
        },
        extend(options, prevFieldConfig) {
          return {
            type: `String`,
            args: {
              emoji: {
                type: `Boolean`,
              },
            },
            resolve(source, args, context, info) {
              const fieldValue = source[info.fieldName]
              const date = new Date(fieldValue)
              if (date.getUTCMonth() === 8 && date.getUTCDate() === 26) {
                return args.emoji
                  ? `:cake:`
                  : options.greeting || `Happy birthday!`
              }
              return fieldValue
            },
          }
        },
      })
    )
    dispatch(
      createTypes(`
        type Test implements Node @dontInfer {
          somedate: Date @birthday(greeting: "Cheers!")
          otherdate: Date @birthday
        }
      `)
    )
    const query = `
      {
        test(id: { eq: "test3" }) {
          withDefaultArgs: somedate
          withQueryArg: somedate(emoji: true)
          withoutArgs: otherdate
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        withQueryArg: `:cake:`,
        withDefaultArgs: `Cheers!`,
        withoutArgs: `Happy birthday!`,
      },
    }
    expect(results).toEqual(expected)
  })

  it(`allows creating a custom field extension (used in type builder)`, async () => {
    dispatch(
      createFieldExtension({
        name: `birthday`,
        args: {
          greeting: {
            type: GraphQLString,
          },
        },
        extend(options, prevFieldConfig) {
          return {
            type: `String`,
            args: {
              emoji: {
                type: `Boolean`,
              },
            },
            resolve(source, args, context, info) {
              const fieldValue = source[info.fieldName]
              const date = new Date(fieldValue)
              if (date.getUTCMonth() === 8 && date.getUTCDate() === 26) {
                return args.emoji
                  ? `:cake:`
                  : options.greeting || `Happy birthday!`
              }
              return fieldValue
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        buildObjectType({
          name: `Test`,
          fields: {
            somedate: {
              type: `Date`,
              extensions: {
                birthday: {
                  greeting: `Cheers!`,
                },
              },
            },
            otherdate: {
              type: `Date`,
              extensions: {
                birthday: {},
              },
            },
          },
          interfaces: [`Node`],
          extensions: { infer: false },
        })
      )
    )
    const query = `
      {
        test(id: { eq: "test3" }) {
          withDefaultArgs: somedate
          withQueryArg: somedate(emoji: true)
          withoutArgs: otherdate
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        withQueryArg: `:cake:`,
        withDefaultArgs: `Cheers!`,
        withoutArgs: `Happy birthday!`,
      },
    }
    expect(results).toEqual(expected)
  })

  it(`creates built-in field extensions`, async () => {
    dispatch(
      createTypes(`
        type Test implements Node @dontInfer {
          somedate: Date @dateformat
          proxy: Date @proxy(from: "somedate")
        }
      `)
    )
    const query = `
      {
        test(id: { eq: "test3" }) {
          somedate(formatString: "YYYY")
          proxy
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        proxy: `2019-09-26`,
        somedate: `2019`,
      },
    }
    expect(results).toEqual(expected)
  })

  it(`allows specifying extension options with type string`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: {
            // type provided as string
            type: `String`,
          },
        },
        extend(options) {
          return {
            resolve() {
              return options.planet || `world`
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        `type Test implements Node {
          hello: String @hello
          hi: String @hello(planet: "mars")
        }`
      )
    )
    const query = `
      {
        test {
          hello
          hi
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        hello: `world`,
        hi: `mars`,
      },
    }
    expect(results).toEqual(expected)
  })

  it(`allows specifying extension options with flat type string`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          // type provided as flat string
          planet: `String`,
        },
        extend(options) {
          return {
            resolve() {
              return options.planet || `world`
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        `type Test implements Node {
          hello: String @hello
          hi: String @hello(planet: "mars")
        }`
      )
    )
    const query = `
      {
        test {
          hello
          hi
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        hello: `world`,
        hi: `mars`,
      },
    }
    expect(results).toEqual(expected)
  })

  it(`allows specifying extension options with default value`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: {
            type: `String!`,
            defaultValue: `world`,
          },
        },
        extend(options) {
          return {
            resolve() {
              return options.planet
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        `type Test implements Node {
          hello: String @hello
          hi: String @hello(planet: "mars")
        }`
      )
    )
    const query = `
      {
        test {
          hello
          hi
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        hello: `world`,
        hi: `mars`,
      },
    }
    expect(results).toEqual(expected)
  })

  it(`allows specifying extension options with default value (type builder)`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: {
            type: `String!`,
            defaultValue: `world`,
          },
        },
        extend(options) {
          return {
            resolve() {
              return options.planet
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        buildObjectType({
          name: `Test`,
          interfaces: [`Node`],
          fields: {
            hello: {
              type: `String`,
              extensions: {
                hello: {},
              },
            },
            hi: {
              type: `String`,
              extensions: {
                hello: { planet: `mars` },
              },
            },
          },
        })
      )
    )
    const query = `
      {
        test {
          hello
          hi
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        hello: `world`,
        hi: `mars`,
      },
    }
    expect(results).toEqual(expected)
  })

  it(`allows List and NonNull type modifiers in extension type`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planets: {
            type: `[String!]`,
            defaultValue: [`world`],
          },
        },
        extend(options) {
          return {
            resolve() {
              return options.planets
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        `type Test implements Node {
          hello: [String] @hello
          hi: [String] @hello(planets: ["mars", "venus"])
        }`
      )
    )
    const query = `
      {
        test {
          hello
          hi
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        hello: [`world`],
        hi: [`mars`, `venus`],
      },
    }
    expect(results).toEqual(expected)
  })

  it(`allows wrapping existing field resolver`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: `String`,
        },
        extend(options, prevFieldConfig) {
          const { resolve } = prevFieldConfig
          return {
            resolve(...rp) {
              const planet = resolve(...rp)
              return options.planet
                ? [planet, options.planet].join(`, `)
                : planet
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        buildObjectType({
          name: `Test`,
          interfaces: [`Node`],
          fields: {
            hello: {
              type: `String`,
              resolve: () => `world`,
              extensions: { hello: {} },
            },
            hi: {
              type: `String`,
              resolve: () => `world`,
              extensions: { hello: { planet: `mars` } },
            },
          },
        })
      )
    )
    const query = `
      {
        test {
          hello
          hi
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        hello: `world`,
        hi: `world, mars`,
      },
    }
    expect(results).toEqual(expected)
  })

  // TODO: Decide on intended behavior
  it(`input type reflects changed type when extension changes field type`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        extend(options) {
          return {
            type: `String`,
            resolve: () => `world`,
          }
        },
      })
    )
    dispatch(
      createTypes(
        `type Test implements Node {
          hello: Boolean @hello
        }`
      )
    )
    const query = `
      {
        test {
          hello
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        hello: `world`,
      },
    }
    expect(results).toEqual(expected)
    const { hello } = store
      .getState()
      .schema.getType(`TestFilterInput`)
      .getFields()
    expect(hello.type.toString()).toBe(`StringQueryOperatorInput`)
  })

  it(`handles multiple extensions per field`, async () => {
    dispatch(
      createFieldExtension({
        name: `uppercase`,
        extend(options, prevFieldConfig) {
          return {
            type: `String`,
            async resolve(source, args, context, info) {
              const resolver =
                prevFieldConfig.resolve || context.defaultFieldResolver
              const resolved = await resolver(source, args, context, info)
              return String(resolved).toUpperCase()
            },
          }
        },
      })
    )
    dispatch(
      createFieldExtension({
        name: `reverse`,
        extend(options, prevFieldConfig) {
          return {
            type: `String`,
            async resolve(source, args, context, info) {
              const resolver =
                prevFieldConfig.resolve || context.defaultFieldResolver
              const resolved = await resolver(source, args, context, info)
              return [...String(resolved)].reverse().join(``)
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        `type Test implements Node {
          olleh: String @uppercase @reverse
        }`
      )
    )
    const query = `
      {
        test(id: { eq: "test4" }) {
          olleh
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      test: {
        olleh: `DLROW`,
      },
    }
    expect(results).toEqual(expected)
  })

  it(`shows error message when extension name is reserved`, async () => {
    dispatch(
      createFieldExtension({
        name: `dateformat`,
        extend: () => {
          return {}
        },
      })
    )
    const schema = await buildSchema()
    expect(report.error).toBeCalledWith(
      `The field extension name \`dateformat\` is reserved for internal use.`
    )
    const directive = schema.getDirective(`dateformat`)
    expect(directive).toBeDefined()
    expect(directive.args).toHaveLength(4)
  })

  it(`shows error message when extension is already defined`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {},
        extend: () => {
          return {
            resolve: () => `world`,
          }
        },
      })
    )
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: `String`,
        },
        extend: () => {
          return {
            resolve: () => `again`,
          }
        },
      })
    )
    const schema = await buildSchema()
    expect(report.error).toBeCalledWith(
      `A field extension with the name \`hello\` has already been registered.`
    )
    const directive = schema.getDirective(`hello`)
    expect(directive).toBeDefined()
    expect(directive.args).toHaveLength(0)
  })

  it(`shows error message when no extension name provided`, () => {
    dispatch(
      createFieldExtension({
        args: {},
        extend: () => {
          return {
            resolve: () => `world`,
          }
        },
      })
    )
    expect(report.error).toBeCalledWith(
      `The provided field extension must have a \`name\` property.`
    )
  })

  // FIXME: error message for directive is different from extension error,
  // because directive is checked before by graphql-compose. also: we get
  // parsing panics, not error messages.
  // we get an extension option with a wrong type
  it(`validates type of extension options`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: `String`,
        },
        extend(options) {
          return {
            resolve() {
              return options.planet || `world`
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        `type Test implements Node {
          hi: String @hello(planet: 2)
        }`
      )
    )
    await buildSchema()
    expect(report.panic).toBeCalledWith(
      expect.stringContaining(
        `Encountered an error parsing the provided GraphQL type definitions:\n` +
          `Argument "planet" has invalid value 2.`
      )
    )
  })

  // we get an extension option with a wrong type
  it(`validates type of extension options (type builder)`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: `String`,
        },
        extend(options) {
          return {
            resolve() {
              return options.planet || `world`
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        buildObjectType({
          name: `Test`,
          interfaces: [`Node`],
          fields: {
            hi: {
              type: `String`,
              extensions: {
                hello: {
                  planet: 2,
                },
              },
            },
          },
        })
      )
    )
    await buildSchema()
    expect(report.error).toBeCalledWith(
      `Field extension \`hello\` on \`Test.hi\` has argument \`planet\` with ` +
        `invalid value "2". String cannot represent a non string value: 2`
    )
  })

  // FIXME: See above (directive error messages different than with extensions,
  // because they are reported as parsing errors (which are panics, not errors))
  it(`validates non-null and list types of extension options`, async () => {
    dispatch(
      createFieldExtension({
        name: `test`,
        args: {
          one: `Int!`,
          two: `[Int]`,
          three: `[Int!]!`,
        },
        extend(options) {
          return {
            resolve() {
              return options.planet || `world`
            },
          }
        },
      })
    )
    dispatch(
      createTypes([
        `type Test implements Node {
          first: String @test(one: 1, two: [1], three: [1])
          second: String @test(one: "1", two: [1], three: [1])
        }`,
        `type Test implements Node {
          third: String @test(two: [1], one: 1, three: [1])
          fourth: String @test(two: ["1"], one: 1, three: [1])
        }`,
        `type Test implements Node {
          fifth: String @test(three: [1], one: 1, two: [1])
          sixth: String @test(three: [], one: 1, two: [1])
          seventh: String @test(three: [null], one: 1, two: [1])
        }`,
      ])
    )
    await buildSchema()
    expect(report.panic).toBeCalledWith(
      expect.stringContaining(
        `Encountered an error parsing the provided GraphQL type definitions:\n` +
          `Argument "one" has invalid value "1".`
      )
    )
    expect(report.panic).toBeCalledWith(
      expect.stringContaining(
        `Encountered an error parsing the provided GraphQL type definitions:\n` +
          `Argument "two" has invalid value ["1"].`
      )
    )
    expect(report.panic).toBeCalledWith(
      expect.stringContaining(
        `Encountered an error parsing the provided GraphQL type definitions:\n` +
          `Argument "three" has invalid value [null].`
      )
    )
  })

  it(`validates non-null and list types of extension options (type builder)`, async () => {
    dispatch(
      createFieldExtension({
        name: `test`,
        args: {
          one: `Int!`,
          two: `[Int]`,
          three: `[Int!]!`,
        },
        extend(options) {
          return {
            resolve() {
              return options.planet || `world`
            },
          }
        },
      })
    )
    dispatch(
      createTypes([
        buildObjectType({
          name: `Test`,
          interfaces: [`Node`],
          fields: {
            first: {
              type: `String`,
              extensions: {
                test: {
                  one: 1,
                  two: [1],
                  three: [1],
                },
              },
            },
            second: {
              type: `String`,
              extensions: {
                test: {
                  one: `1`,
                  two: [1],
                  three: [1],
                },
              },
            },
          },
        }),
        buildObjectType({
          name: `Test`,
          interfaces: [`Node`],
          fields: {
            third: {
              type: `String`,
              extensions: {
                test: {
                  two: [1],
                  one: 1,
                  three: [1],
                },
              },
            },
            fourth: {
              type: `String`,
              extensions: {
                test: {
                  two: [`1`],
                  one: 1,
                  three: [1],
                },
              },
            },
          },
        }),
        buildObjectType({
          name: `Test`,
          interfaces: [`Node`],
          fields: {
            fifth: {
              type: `String`,
              extensions: {
                test: {
                  three: [1],
                  one: 1,
                  two: [1],
                },
              },
            },
            sixth: {
              type: `String`,
              extensions: {
                test: {
                  three: [],
                  one: 1,
                  two: [1],
                },
              },
            },
            seventh: {
              type: `String`,
              extensions: {
                test: {
                  three: [null],
                  one: 1,
                  two: [1],
                },
              },
            },
          },
        }),
      ])
    )
    await buildSchema()
    expect(report.error).toBeCalledWith(
      `Field extension \`test\` on \`Test.second\` has argument \`one\` with ` +
        `invalid value "1". Int cannot represent non-integer value: "1"`
    )
    expect(report.error).toBeCalledWith(
      `Field extension \`test\` on \`Test.fourth\` has argument \`two\` with ` +
        `invalid value "1". Int cannot represent non-integer value: "1"`
    )
    expect(report.error).toBeCalledWith(
      `Field extension \`test\` on \`Test.seventh\` has argument \`three\` with ` +
        `invalid value "". Expected non-null field value.`
    )
  })

  // FIXME: `graphql-compose` (in `parseDirectives`) silently omits invalid extension options.
  // we get an extension option that has not been defined.
  it.skip(`validates non-existing extension options`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: `String`,
        },
        extend(options) {
          return {
            resolve() {
              return options.planet || `world`
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        `type Test implements Node {
          hi: String @hello(what: 2)
        }`
      )
    )
    await buildSchema()
    expect(report.error).toBeCalledWith(`Some error message`)
  })

  // we get an extension option that has not been defined.
  it(`validates non-existing extension options (type builder)`, async () => {
    dispatch(
      createFieldExtension({
        name: `hello`,
        args: {
          planet: `String`,
        },
        extend(options) {
          return {
            resolve() {
              return options.planet || `world`
            },
          }
        },
      })
    )
    dispatch(
      createTypes(
        buildObjectType({
          name: `Test`,
          interfaces: [`Node`],
          fields: {
            hi: {
              type: `String`,
              extensions: {
                hello: {
                  what: 2,
                },
              },
            },
          },
        })
      )
    )
    await buildSchema()
    expect(report.error).toBeCalledWith(
      `Field extension \`hello\` on \`Test.hi\` has invalid argument \`what\`.`
    )
  })

  // we get an extension that has not been defined
  it(`validates non-existing extension`, async () => {
    dispatch(
      createTypes(
        `type Test implements Node {
          hi: String @what(what: 2)
        }`
      )
    )
    await buildSchema()
    expect(report.error).toBeCalledWith(
      `Field extension \`what\` on \`Test.hi\` is not available.`
    )
  })

  // we get an extension that has not been defined
  it(`validates non-existing extension (type builder)`, async () => {
    dispatch(
      createTypes(
        buildObjectType({
          name: `Test`,
          interfaces: [`Node`],
          fields: {
            hi: {
              type: `String`,
              extensions: {
                what: {
                  what: 2,
                },
              },
            },
          },
        })
      )
    )
    await buildSchema()
    expect(report.error).toBeCalledWith(
      `Field extension \`what\` on \`Test.hi\` is not available.`
    )
  })

  it(`built-in extensions wrap resolver`, async () => {
    dispatch(
      createFieldExtension({
        name: `zeroToNull`,
        extend(options, prevFieldConfig) {
          return {
            async resolve(source, args, context, info) {
              const resolver =
                prevFieldConfig.resolve || context.defaultFieldResolver
              const fieldValue = await resolver(source, args, context, info)
              if (fieldValue === 0) {
                return null
              }
              return fieldValue
            },
          }
        },
      })
    )
    dispatch(
      createTypes(`
        type AnotherTest implements Node {
          date: Date @zeroToNull @dateformat
          reverse: Date @dateformat @zeroToNull @proxy(from: "date")
        }
      `)
    )
    const query = `
      {
        allAnotherTest {
          nodes {
            date(formatString: "MM/DD/YYYY")
            reverse(formatString: "MM/DD/YYYY")
          }
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      allAnotherTest: {
        nodes: [
          {
            date: `01/01/2019`,
            reverse: `01/01/2019`,
          },
          {
            date: null,
            reverse: `Invalid date`,
          },
        ],
      },
    }
    expect(results).toEqual(expected)
  })

  it(`built-in extensions merge extension args`, async () => {
    dispatch(
      createFieldExtension({
        name: `replace`,
        extend(options, prevFieldConfig) {
          return {
            args: {
              ...prevFieldConfig.args,
              match: `String!`,
              replaceWith: `String!`,
            },
            async resolve(source, args, context, info) {
              const resolver =
                prevFieldConfig.resolve || context.defaultFieldResolver
              const fieldValue = await resolver(source, args, context, info)
              if (fieldValue == args.match) {
                return args.replaceWith
              }
              return fieldValue
            },
          }
        },
      })
    )
    dispatch(
      createTypes(`
        type AnotherTest implements Node {
          date: Date @replace @dateformat
          reverse: Date @dateformat @replace @proxy(from: "date")
        }
      `)
    )
    const query = `
      {
        allAnotherTest {
          nodes {
            date(formatString: "MM/DD/YYYY", match: "0", replaceWith: "1978-09-26")
            reverse(formatString: "MM/DD/YYYY", match: "Invalid date", replaceWith: "WRONG!")
          }
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      allAnotherTest: {
        nodes: [
          {
            date: `01/01/2019`,
            reverse: `01/01/2019`,
          },
          {
            date: `09/26/1978`,
            reverse: `WRONG!`,
          },
        ],
      },
    }
    expect(results).toEqual(expected)
  })

  it(`built-in extensions wraps custom resolver`, async () => {
    dispatch(
      createTypes(
        buildObjectType({
          name: `AnotherTest`,
          interfaces: [`Node`],
          fields: {
            date: {
              type: `Date`,
              extensions: {
                dateformat: true,
              },
              args: {
                replaceZeroWith: `String!`,
              },
              resolve(source, args, context, info) {
                const fieldValue = source[info.fieldName]
                if (fieldValue === 0) {
                  return args.alt
                }
                return fieldValue
              },
            },
          },
        })
      )
    )
    const query = `
      {
        allAnotherTest {
          nodes {
            date(formatString: "MM/DD/YYYY", replaceZeroWith: "1978-09-26")
          }
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      allAnotherTest: {
        nodes: [
          {
            date: `01/01/2019`,
          },
          {
            date: null,
          },
        ],
      },
    }
    expect(results).toEqual(expected)
  })

  describe(`nested-fields-aware default field resolver`, () => {
    it(`@proxy extension works with nested fields`, async () => {
      dispatch(
        createTypes(`
          type Fourth {
            fifth: String
          }
          type Third {
            fourth: [Fourth]
          }
          type Second {
            third: Third
          }
          type First {
            next: Int
            second: [Second]
          }
          type NestedTest implements Node {
            first: First
            fromNextLevel: Int @proxy(from: "first.next")
            fromBottomLevel: [[String]] @proxy(from: "first.second.third.fourth.fifth")
          }
        `)
      )
      const query = `
        {
          nestedTest {
            fromNextLevel
            fromBottomLevel
          }
        }
      `
      const results = await runQuery(query)
      const expected = {
        nestedTest: {
          fromNextLevel: 26,
          fromBottomLevel: [
            [`lorem`, `ipsum`],
            [`dolor`, `sit`],
          ],
        },
      }
      expect(results).toEqual(expected)
    })

    it(`@proxy extension works with parent node fields`, async () => {
      dispatch(
        createTypes(`
          type Fourth {
            fifth: String
            fromTopLevel: Int @proxy(from: "top", fromNode: true)
            fromNextLevel: Int @proxy(from: "first.next", fromNode: true)
          }
          type Third {
            fourth: [Fourth]
          }
          type Second {
            third: Third
          }
          type First {
            next: Int
            second: [Second]
          }
          type NestedTest implements Node {
            first: First
            top: Int
          }
        `)
      )
      const query = `
        {
          nestedTest {
            first {
              second {
                third {
                  fourth {
                    fromTopLevel
                    fromNextLevel
                  }
                }
              }
            }
          }
        }
      `
      const results = await runQuery(query)
      const expected = {
        nestedTest: {
          first: {
            second: [
              {
                third: {
                  fourth: [
                    {
                      fromTopLevel: 78,
                      fromNextLevel: 26,
                    },
                    {
                      fromTopLevel: 78,
                      fromNextLevel: 26,
                    },
                  ],
                },
              },
              {
                third: {
                  fourth: [
                    {
                      fromTopLevel: 78,
                      fromNextLevel: 26,
                    },
                    {
                      fromTopLevel: 78,
                      fromNextLevel: 26,
                    },
                  ],
                },
              },
            ],
          },
        },
      }
      expect(results).toEqual(expected)
    })

    it(`works with multiple field extensions`, async () => {
      dispatch(
        createTypes(`
          type Nested {
            onemoredate: Date
          }
          type Test implements Node @dontInfer {
            nested: Nested
            proxied: Date @dateformat(formatString: "YYYY") @proxy(from: "nested.onemoredate")
          }
        `)
      )
      const query = `
        {
          test {
            proxied
          }
        }
      `
      const results = await runQuery(query)
      const expected = {
        test: {
          proxied: `2019`,
        },
      }
      expect(results).toEqual(expected)
    })

    it(`allows linking from nested fields`, async () => {
      dispatch(
        createTypes(`
          type Nested {
            onemoredate: Date @dateformat
          }
          type Test implements Node @dontInfer {
            linked: Test @link(by: "nested.onemoredate", from: "nested.onemoredate")
            nested: Nested
          }
        `)
      )
      const query = `
        {
          test {
            linked {
              nested {
                onemoredate(formatString: "MM/DD/YYYY")
              }
            }
          }
        }
      `
      const results = await runQuery(query)
      const expected = {
        test: {
          linked: {
            nested: {
              onemoredate: `07/30/2019`,
            },
          },
        },
      }
      expect(results).toEqual(expected)
    })

    it(`works in a custom field extension`, async () => {
      dispatch(
        createFieldExtension({
          name: `slug`,
          args: {
            from: `String!`,
          },
          extend(options) {
            return {
              resolve(source, args, context, info) {
                const fieldValue = context.defaultFieldResolver(
                  source,
                  args,
                  context,
                  {
                    ...info,
                    from: options.from || info.from,
                    fromNode: options.from ? options.fromNode : info.fromNode,
                  }
                )
                return String(fieldValue)
                  .toLowerCase()
                  .replace(/[^\w]+/g, `-`)
              },
            }
          },
        })
      )
      dispatch(
        createTypes(`
          type Test implements Node @dontInfer {
            nested: Nested
            slug: String @slug(from: "nested.title")
          }
          type Nested {
            title: String
          }
        `)
      )
      const query = `
        {
          test {
            slug
          }
        }
      `
      const results = await runQuery(query)
      const expected = {
        test: {
          slug: `hello-world`,
        },
      }
      expect(results).toEqual(expected)
    })

    it(`proxies to field from parent node with helper extension`, async () => {
      dispatch(
        createFieldExtension({
          name: `parent`,
          extend(options, fieldConfig) {
            return {
              resolve(source, args, context, info) {
                const resolver =
                  fieldConfig.resolve || context.defaultFieldResolver
                return resolver(
                  context.nodeModel.getNodeById({ id: source.parent }),
                  args,
                  context,
                  info
                )
              },
            }
          },
        })
      )
      dispatch(
        createTypes(`
          type Test implements Node {
            fromParentNode: Date @dateformat(formatString: "YYYY") @parent @proxy(from: "date")
          }
        `)
      )
      const query = `
        {
          test {
            fromParentNode
          }
          filtered: test(parent: { id: { ne: null } }) {
            fromParentNode
          }
        }
      `
      const results = await runQuery(query)
      const expected = {
        test: {
          fromParentNode: `2019`,
        },
        filtered: {
          fromParentNode: `2019`,
        },
      }
      expect(results).toEqual(expected)
    })

    describe(`proxies to fields on other nodes when combined with projection extension`, () => {
      it.todo(`proxies to field on parent node`)
      it.todo(`proxies to nested field on parent node`)
      it.todo(`proxies to field on ancestor node`)
      it.todo(`proxies to nested field on ancestor node`)
      it.todo(`proxies to field on linked in node`)
      it.todo(`proxies to nested field on linked in node`)
    })
  })

  it(`link extension accepts return type argument`, async () => {
    dispatch(
      createFieldExtension({
        name: `reduce`,
        args: {
          to: `String!`,
        },
        extend(options, fieldConfig) {
          return {
            async resolve(source, args, context, info) {
              const { getValueAt } = require(`../../../utils/get-value-at`)
              const resolver =
                fieldConfig.resolve || context.defaultFieldResolver
              const fieldValue = await resolver(source, args, context, info)
              if (fieldValue == null) return null
              return getValueAt(fieldValue, options.to)
            },
          }
        },
      })
    )
    dispatch(
      createTypes(`
        type Test implements Node @dontInfer {
          fieldFromParent: Date @link(from: "parent", on: "AnotherTest") @reduce(to: "date") @dateformat(formatString: "MM/DD/YYYY")
        }
        type AnotherTest implements Node @dontInfer {
          fieldsFromChildren: [Date] @link(from: "children", on: "[Test!]!") @reduce(to: "somedate") @dateformat(formatString: "DD/MM/YYYY")
          nestedFieldsFromChildren: [Date] @link(from: "children", on: "[Test!]!") @reduce(to: "nested.onemoredate") @dateformat(formatString: "DD/MM/YYYY")
        }
      `)
    )
    const query = `
      {
        allTest {
          nodes {
            id
            fieldFromParent
          }
        }
        allAnotherTest {
          nodes {
            id
            fieldsFromChildren
            nestedFieldsFromChildren
          }
        }
      }
    `
    const results = await runQuery(query)
    const expected = {
      allTest: {
        nodes: [
          {
            id: `test1`,
            fieldFromParent: `01/01/2019`,
          },
          {
            id: `test2`,
            fieldFromParent: `Invalid date`,
          },
          {
            id: `test3`,
            fieldFromParent: null,
          },
          {
            id: `test4`,
            fieldFromParent: null,
          },
        ],
      },
      allAnotherTest: {
        nodes: [
          {
            id: `test5`,
            fieldsFromChildren: [`01/09/2019`],
            nestedFieldsFromChildren: [`30/07/2019`],
          },
          {
            id: `test6`,
            fieldsFromChildren: [`13/09/2019`],
            nestedFieldsFromChildren: [`26/09/2019`],
          },
        ],
      },
    }
    expect(results).toEqual(expected)
  })
})

const buildSchema = async () => {
  await build({})
  return store.getState().schema
}

const runQuery = async query => {
  await build({})
  const {
    schema,
    schemaCustomization: { composer: schemaComposer },
  } = store.getState()
  const results = await graphql({
    schema,
    source: query,
    rootValue: undefined,
    contextValue: withResolverContext({
      schema,
      schemaComposer,
    }),
  })
  expect(results.errors).toBeUndefined()
  return results.data
}


The brain and the eye work together to produce vision. The eye changes the light that hits it into nerve signals. These signals travel along the optic nerve to the brain. In amblyopia, the brain favors signals from one eye over the other. The eye with amblyopia looks normal, but it is not working normally because the brain is favoring the other eye.
Amblyopia is the most common cause of vision problems in children. The condition affects about 2 to 3 out of every 100 children. Without successful treatment in early childhood, amblyopia usually persists into adulthood. Amblyopia is the most common cause of monocular (one eye) vision problems among children and young to middle-aged adults.
Medication - A drop of a drug called atropine is placed in the stronger eye once a day to temporarily blur the vision so that the brain will favor the eye with amblyopia.
Patching – For this treatment, an opaque, adhesive patch is worn over the stronger eye for different amounts of time each day in order to force the child to use the eye with amblyopia. The child will do this until the vision in his or her weaker eye improves.
Eye doctors used to think that treating amblyopia in older children would be of little benefit. However, research has since shown that treatments for younger children might also help children age 7 through 17 with amblyopia. This shows that age alone should not decide whether a child should get treatment for amblyopia.
Research is currently limited and scientists don't know how successful treatments would be for amblyopia in adults. During the first six to nine years of life, the visual system develops very rapidly, and complicated connections between the eye and the brain are created. Scientists are still studying whether treatment for amblyopia in adults would be able to improve vision.


An American film actress. Born Margaret LaVelle Fitzpatrick, she appeared in 62 movies between 1932 and 1948, usually as the leading lady's extremely formidable rival; some of these roles include the second wife in My Favorite Wife (1940) with Irene Dunne and Cary Grant, Anna May Wong's sophisticated competitor in Dangerous to Know (1938), Carole Lombard's spoiled sister in My Man Godfrey (1936), and Linda Shaw, Ginger Rogers' rival in Stage Door (1937).
She also played the lead in films such as James Whale's Wives Under Suspicion (1938) and Robert Florey's Disbarred (1939).
Patrick retired from acting in films in 1948 and later, with her third husband Thomas Cornwell Jackson, became a producer of the Perry Mason television series (1957–1966).
She died from leukemia at age 69 in Los Angeles.


Last Friday, July 20 ZUNIBAL attended the inauguration of the new facility developed by Tecnalia: the HarshLab. This floating laboratory is intended for testing in a real marine environment, the first in Europe.
HarshLab will provide accurate information to predict the behavior of materials, components and equipment with the aim of developing "offshore" energy systems, those generated at the sea. In addition, it will also facilitate analysis in the area of splash (where the wave breaks), in the area of immersion (under the surface, at different depths) and in the area of atmospheric exposure (above the surface).
The laboratory was inaugurated in Bermeo and was attended by the Minister of Economic Development and Infrastructure of the Basque Government, Arantxa Tapia.


text:
Q: VBA to export specific sheets based on cell values to PDF I am trying to output certain ranges on various sheets to pdf based on whether Cells E22,E24,E26,E28,E30 On "Front Sheet" = 1 and it would output sheets "Front Sheet,Dimension Report,Drawing,Dimension Printout, HFQ Report,Hardness Data", so if E22 =1 it would output "Front Sheet" and if E22 = 1 then it would output "Dimension Report" but if E26 did not = 1 then it would igonre that page but still output the rest
On my current code I get a runtime error 9. and im not sure how to resolve this issue
Private Sub CommandButton1_Click()

    Const cESheets As String = "Front Sheet,Dimension Report,Drawing,Dimension Printout, HFQ Report,Hardness Data"
    Const cSheet As String = "Front Sheet"
    Const cRange As String = "E22,E24,E26,E28,E30"
    Const cCrit As Long = 1

    Dim wb As Workbook
    Dim Cell As Range
    Dim vntS As Variant
    Dim iFound As Long

    ' **********************************
    ' Copy Sheets to New workbook.
    ' **********************************

    vntS = Split(cESheets, ",")

    With ThisWorkbook
        For Each Cell In .Worksheets(cSheet).Range(cRange)
            If Cell.Value = cCrit Then
                iFound = iFound + 1
                If iFound = 1 Then
                    .Sheets(Trim(vntS(iFound - 1))).Copy
                    Set wb = ActiveWorkbook
                  Else
                    .Sheets(Trim(vntS(iFound - 1))).Copy _
                            After:=wb.Sheets(wb.Sheets.Count)
                End If
              'Else
            End If
        Next
    End With

    ' **********************************
    ' Export New Workbook to PDF
    ' **********************************

    If iFound = 0 Then Exit Sub

    With wb
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:="Exported.pdf", _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=True
        .Close False
    End With

End Sub

I am getting the runtime error 9 at:
Else
                    .Sheets(Trim(vntS(iFound - 1))).Copy _
                            After:=wb.Sheets(wb.Sheets.Count)

I am fairly new to VBA so anyway help is appreciated.

A: Export to PDF Based on Cell Value

*

*Adjust the values in the constants section.

*Unless no cell contains criteria value (nothing will happen), the first worksheet and the worksheets designated by each cell where the criteria value was found, will be copied.

The Code
Option Explicit

Private Sub CommandButton1_Click()

    Const cESheets As String = "Sheet1,Sheet2,Sheet3,Sheet4,Sheet5,Sheet6"
    Const cSheet As String = "Sheet1"
    Const cRange As String = "E22,E24,E26,E28,E30"
    Const cCrit As Long = 1

    Dim dwb As Workbook
    Dim sws As Worksheet
    Dim Cell As Range
    Dim vntS() As String
    Dim iFound As Long

    vntS = Split(cESheets, ",")

    Set sws = ThisWorkbook.Worksheets(Trim(vntS(0)))

    ' Sum is incorrect, and CountIf doesn't work on non-contiguous cells.
    For Each Cell In sws.Range(cRange).Cells
        If Cell.Value = cCrit Then
            iFound = 1
            Exit For
        End If
    Next Cell
    If iFound = 0 Then Exit Sub

    ' **********************************
    ' Copy Sheets to New workbook.
    ' **********************************

    Application.ScreenUpdating = False

    sws.Copy
    Set dwb = ActiveWorkbook
    iFound = 0

    For Each Cell In sws.Range(cRange).Cells
        iFound = iFound + 1
        If Cell.Value = cCrit Then
            sws.Parent.Worksheets(Trim(vntS(iFound))).Copy _
                After:=dwb.Sheets(dwb.Sheets.Count)
        End If
    Next

    ' **********************************
    ' Export New Workbook to PDF
    ' **********************************

     With dwb
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:="Exported.pdf", _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=True
        .Close False
    End With

    Application.ScreenUpdating = True

End Sub

redpajama_set_name: RedPajamaStackExchange


Understanding dopamine's effects on the complex striatal microcircuit ideally requires large-scale models that replicate the neuron types, numbers, and connectivity at one-to-one scale. To build at such scales, we require individual neuron models that are simple enough to be computationally tractable, but sufficiently complex to capture key membrane properties that contribute to the characteristic behavior of a neuron species. Our neuron model of choice is the recent canonical spiking model of Izhikevich . However, it has not yet been extended to account for the action of neuromodulators.
We extend the striatal medium spiny (MSN) and fast-spiking (FS) interneuron models of  to account for dopaminergic modulation of intrinsic ion channels and synaptic inputs. We use data from a recent 189 compartment model of the MSN  to tune our simple model of that neuron under both current injection and spiking input regimes with varying activation of dopamine D1- and D2-type receptors. The reduced models capture the input-output relationships for both current injection and spiking input with remarkable accuracy. We derive a full set of stability properties for the original and dopamine modulated forms of the MSN model. We use these to establish that the dopamine models do not change the stability properties and hence the models predict that the MSN is not bistable in either baseline or dopamine-saturated conditions. Our extensions to the simple model of the FS interneuron are consistent with the existing data, but tuning the new parameters is made difficult by the lack of quantitative results from experimental work. Our work thus establishes reduced yet accurate dopamine-modulated forms of MSN and FS interneuron models, suitable for use in large-scale models of the striatum. Moreover, these also provide a tractable framework for further study of dopamine's effects on individual neuron computation.
We thank Jason Moyer for generously sending us the input-output data from the multi-compartment medium spiny neuron model. This work was funded by the EU Framework 6 Project IST-027819-IP, EPSRC Research Grant EP/C516303/1, and the EPSRC "CARMEN" e-Science Pilot Project.


text:
|}

Siehe auch
 Liste der Bodendenkmäler in Korschenbroich

!

redpajama_set_name: RedPajamaWikipedia


Risk Weighted Assets provide a measure of the total scale and risk of a regulated bank's activities, against which the bank is required to hold minimum levels of regulatory capital.
In simple terms, assets are multiplied by appropriate risk weightings - historically ranging from 0% to 100% depending on the level of risk - and aggregated.
Other risks, including operational risk, are also appropriately evaluated and risk weighted, adding additional RWAs to the regulatory total.
The calculation of RWAs has been increasingly refined over time.
Risk weights may, in some cases, be derived from individual banks' own internal risk models, subject to the regulator's approval.
Other risk weightings are determined on a standardised basis for all banks.
Also known as total risk weighted exposure.
This page was last modified on 4 December 2016, at 19:32.


text:
BBC World's HARDtalk India presenter Karan Thapar wins an Asian Television Award
WEBWIRE – Friday, December 2, 2005
Karan Thapar, the presenter of BBC World's hard-hitting interview programme HARDtalk India, was named the Best Current Affairs Presenter for the year at the Asian Television Awards in Singapore last night (1st December). Karan takes the coveted trophy for a record third time, having won in 1999 and again in 2003.
Karan won the award this year for an edition of HARDtalk India with the former Law Minister and BJP General Secretary Arun Jaitley, which was broadcast on BBC World in April this year. He won the accolade ahead of other nominees from current affairs programming running on international channels across Asia including NewsAsia, MediaCorp News, Singapore; CNN International, Hong Kong; Eastern Broadcasting, ETTV-S Channel, Taiwan; and PT Media Televisi Indonesia, Channel 57, Indonesia.
An elated Karan, who was in Singapore to receive the award, says: "I am flattered and delighted. I feel particularly honoured to have received the Best Current Affairs Presenter award three times in the last six years.''
HARDtalk India has featured guests including the Prime Minister, Dr. Manmohan Singh; the Leader of the Opposition and BJP President, L.K. Advani; plus the Chief Ministers of Tamil Nadu, Andhra Pradesh, Orissa, Delhi, Assam, Rajasthan, Jammu and Kashmir and Madhya Pradesh. Some of the international leaders that the programme has interviewed are the US Secretary of State, Condoleezza Rice; the former Sri Lankan President, Chandrika Kumaratunga; the former Prime Minister of Pakistan, Benazir Bhutto; and His Holiness the Dalai Lama.
In addition, BBC World gained another nomination at the Asian Television Awards in the category of Best Documentary Programme for The Legend of Fat Mama. Produced by Ice Cube Design & Films for BBC World, the documentary is about the Chinese community in Kolkata, and offers a nostalgic journey in search of a woman who once made outstanding noodles in Chinatown, revealing interesting interlinked stories.
The Asian Television Awards, established in 1996, are designed to recognise and reward programming and production excellence across Asia. The awards, now in their tenth year, are
given across 33 categories including Best Current Affairs Presenter, Best Documentary Programme, Best Drama Series, Best Talk Show and Best Cinematography amongst others, and judged by an eminent panel, drawn from leading broadcasters across 15 Asian nations.
BBC World, the BBC's commercially funded international 24-hour news and information channel, is owned and operated by BBC World Ltd, a member of the BBC's commercial group of companies. BBC World is available in more than 200 countries and territories worldwide, and reaches 270 million households (128 million 24-hour homes) and more than one million hotel rooms. BBC World launched in its present format in 1995 and is funded by advertising and subscription. For further information on how to receive BBC World, download schedules or find out more about the channel, visit bbcworld.com.
BBC World was recently named the Best Foreign Channel at the Indian Television Academy Awards 2005 held in Mumbai in November 2005. Decided on the basis of public polling, the BBC's international news channel triumphed over other fellow nominees Star Movies, AXN and HBO.
WebWireID6362
Deeptie Sethi
Lifestyle / Society
Publishing / Information Services

redpajama_set_name: RedPajamaCommonCrawl


text:
Модест Онисимович Клер (25 декабря 1879 — 10 сентября 1966) — российский и советский учёный-геолог, палеонтолог, гидрогеолог, инженерный геолог и краевед. Профессор, автор научных работ по геологии и краеведению Урала.

Биография
Родился  года в городе Екатеринбург. Сын учителя французского языка, краеведа и основателя Уральского общества любителей естествознания (УОЛЕ) Онисима Егоровича Клера. Мать — Наталия Николаевна.

Образование
В 1898 году окончил классическую гимназию в Екатеринбурге. Помогал отцу в составлении коллекций насекомых, гербариев, археологии и для Музея УОЛЕ.

Окончил в 1901 году естественно-исторический факультет Невшательскую академию в Швейцарии.

В 1904 году окончил Женевский университет и защитил в диссертацию по палеонтологии на звание доктора естественных наук.

Научная и педагогическая работа
С 1901 года работал ассистентом при кафедре геологии в Невшательской академии.

В 1903—1907 годах был хранителем геологического и палеонтологического отделов Женевского городского музея природы, одновременно собирая для него материалы по исторической геологии Швейцарии.

В 1908—1910 годах был хранителем Геологического кабинета Киевского университета.

В 1908—1910 годах был хранителем Геологического кабинета Донского политехнического института.

В 1911—1923 годах — заведующий краеведческим музеем Уральского общества любителей естествознания в Екатеринбурге.

Одновременно в 1913—1929 годах состоял сотрудником Уральского отделения Геологического комитета. Входил в Комиссию по изучению естественно-производительных сил России (1926—1929).

Преподавал историческую геологию и палеонтологию в Невшательской академии, Женевском и Киевском университетах, в Донском политехническом институте, Уральском горном институте.

Доцент Уральского горного института (с 1918), профессор (с 1919 с перерывами до 1951). Заведовал кафедрами динамической геологии, гидрогеологии, инженерной геологии Уральского политехнического института и Свердловского горного института. Ректор Екатеринбургского народного университета (с 1919 года). Преподавал в вузах Свердловска до выхода на пенсию.

С 1936 по 1937 год был ответственным за оформление отдела общей геологии на выставке, подготовленной к 17 сессии Международного геологического конгресса в СССР. На базе этой выставки был создан Свердловский геологический музей.

C помощью М. О. Клера решены проблемы водоснабжения уральских заводов (УЗТМ, Уралэлектротяжмаш, Уралхиммаш, Первоуральский новотрубный завод и др.). Руководил гидрологическими исследованиями для поиска источников водоснабжения крупных городов Урала: Свердловска, Нижнего Тагила, Серова, Карпинска, Челябинска, Златоуста.

Железные дороги Урала строились при научных консультациях М. О. Клера.

Политические репрессии
В январе 1924 был обвинен в шпионаже в пользу Франции. Модесту Клеру поставили в вину, то что он, используя свои знания, опыт и данные из открытых источников, подготовил доклад о состоянии платиновой промышленности Урала. Эта информация была необходима французскому правительству для переговоров с властями СССР, на которых решался вопрос аренды советских платиновых месторождений. За передачу данных о состоянии платиновой промышленности иностранцам Модеста Клера объявили «продажной шкурой буржазии». 14 февраля 1924 года Екатеринбургский губсуд осудил его по статье 66 УК, по замене расстрела присудил к 10-летней строгой изоляции. По постановлению ВЦИКа 8 августа 1925 года был освобождён.

В 1930 году был арестован по Делу Рамзина (Дело Промпартии, 58-я статья) и перевезён в Ленинград. 28 октября 1931 года постановлением Коллегии ОГПУ был выслан на 5 лет на Урал. С тех пор продолжал жить в Свердловске.

Посмертно реабилитирован: «в соответствии со ст. З Закона РСФСР "О реабилитации жертв политических репрессий" от 18 октября 1991 г. Клер Модест Онисимович считается реабилитированным».

Последние годы жизни
1 сентября 1950 года вышел на пенсию. Последние 15 лет жизни много сил отдавал краеведению и работе с детьми, которые его звали «дедушка Мо».

Скончался 10 сентября 1966 года в городе Свердловск. Похоронен на Широкореченском кладбище.

Его свояченица (сестра жены) Маргарита Робертовна Герштейн была замужем за видным эсером, членом Учредительного собрания Л. Я. Герштейном.

Семья
Брат — Клер, Владимир Онисимович (1878—1958) — геолог, палеонтолог, биолог и географ.

Награды и премии
 1945 — Медаль «За доблестный труд в Великой Отечественной войне 1941—1945 гг.».

Членство в организациях
 1901 — член Уральского общества любителей естествознания (УОЛЕ), президент УОЛЕ в 1920—1923 годах.

Примечания

Литература
 Клер М. О. Домовой на Лосином торфянике. Необыкновенные Истории // Уральский следопыт. — 1958. — № 1. — С. 11.
 Архипина Н. П., Горчаковский П. Л. Модест Онисимович Клер // Известия ВГО. — 1967. — Вып. 3.
 Покровский М. П. Клер Модест Онисимович // Дела и судьбы: Научно-техническая интеллигенция Урала в 20-30-е годы. — Екатеринбург, 1903.
 Мазур В. А. К делу профессора Клера  // Известия Уральского государственного университета. — 1997. — № 5. — C. 92-98.
 Перченов Ф. Ф., Беляков Л. П. Заблоцкий Е. М., Никольская Л. В. Клер (Клэр) Модест Онисимович (Анисимович) 1879—1966 // Репрессированные геологи. 3-е издание. — Москва, Санкт-Петербург: ВСЕГЕИ, 1999. — С. 154—155.

Ссылки

 Библиография
 Клер Модест Онисимович — Свободная энциклопедия Урала
  — кинофильм к 85-летию Модеста Онисимовича Клера. 1966.
 Дело Екатеринбурга. Профессор, а ведь вы — иностранный шпион!  — Геолога и краеведа, президента Уральского общества любителей естествознания Модеста Клера заклеймили «продажной шкурой буржуазии» и приговорили к расстрелу. С. Чирков. Городские истории.
 Суд над Модестом Клером. Воспоминания С.В. Грум-Гржимайло .

Геологи СССР
Репрессированные в СССР
Геологи, репрессированные в СССР
Выпускники Екатеринбургской гимназии
Выпускники Университета Невшателя
Выпускники Женевского университета
Преподаватели Университета Невшателя
Преподаватели Женевского университета
Преподаватели Киевского университета
Преподаватели Южно-Российского политехнического университета
Преподаватели Уральского горного университета
Преподаватели Уральского технического университета
Похороненные на Широкореченском кладбище


Combining the unparalleled speed and precision of DSMX® technology with superior ergonomics and the most impressive suite of pro-class features ever found in a handheld transmitter.
The Spektrum™ AirWare™ software that comes in the DX18 transmitter offers all the programming features an expert pilot could want. And the intuitive SimpleScroll™ interface makes navigating menus and changing settings as simple as "roll and click." It's almost like using a mouse.
Many Spektrum AirWare features are innovations you won't find anywhere else, innovations that make flying safer and programming easier.
With voice alerts, you can keep tabs on important functions without ever taking your eyes off what you're flying. They can be programmed to call out what flight mode you've chosen or report telemetry information on demand. If an alarm goes off, you won't have to look at the transmitter display to see what's happening. The transmitter will tell you.
In addition to extensive airplane and heli programming, the DX18 transmitter has the most impressive sailplane programming features you'll find in any handheld transmitter. Ten available flight modes, 5 wing types, 3 tail types, 2 motor types, flap delay with elevator compensation-it has it all. You even have the ability to adjust individual servo characteristics (end points, travel, center, etc.) for all 18 channels.
The wireless trainer link gives instructors the option to wirelessly ''buddy box'' with another DSM2®/DSMX® transmitter. Once bound to another transmitter, ModelMatch™ technology will allow the DX18 to re-link without having to go through the bind process again.
The enormous capacity of the DX18's on-board memory means you will rarely, if ever, need to juggle models between transmitter memory and your SD card. The model memory menu is easier to navigate too. Only memory slots with model settings saved to them will appear. You won't have to scroll through empty slots or move models around if one is deleted.
Both the DX18 transmitter and its AR9020 receiver are X-Plus capable, meaning you can add up to eight extra switch channels with an X-Plus channel expansion module. You just plug the module into the AR9020 and bind it. It's just what anyone who flies complex scale models or high-performance sailplanes needs.
Both the DX18 transmitter and its receiver are X-Plus capable, meaning you can add up to eight extra channels with an X-Plus channel expansion module. just plug the module into the receiver, bind it and then assign the extra 8 channels to any function desired. It's just what anyone who flies complex scale models or high-performance sailplanes needs.
Built-in telemetry gives you real-time information on things like your model's battery voltage, signal quality, engine or motor temperature, airspeed, altitude and more. You can have the DX18 recite this information on demand using the programmable voice alerts. You also have the option of logging telemetry data to the transmitter's SD card for review after the flight.
A Spektrum TM1000 or TM1100 Air Telemetry Module (both sold separately) and a telemetry-capable receiver are required. You will also find a wide array of Spektrum telemetry sensors for tracking just about any vital model function you can think of, and new ones are being added all the time.
The weight distribution and ergonomics of the DX18 have been optimized to fit the way you fly. The result is a sense of balance and comfort that perfectly complements the speed and precision of DSMX technology.
The Spektrum™ AirWare™ software that comes in the DX18 offers all the programming features an expert pilot could want. And the intuitive SimpleScroll™ interface makes navigating menus and changing settings as simple as "roll and click." It's almost like using a mouse.
Many Spektrum AirWare features are innovations you won't find anywhere else; innovations that make flying safer and programming easier.
In addition to extensive airplane and heli programming, the DX18 has the most impressive sailplane programming features you'll find in any handheld transmitter. Ten available flight modes, 5 wing types, 3 tail types, 2 motor types, flap delay with elevator compensation-it has it all. You even have the ability to adjust individual servo characteristics (end points, travel, center, etc.) for all 18 channels.
The wireless trainer link gives instructors the option to wirelessly "buddy box" with another DSM2®†/DSMX® transmitter. Once bound to another transmitter, ModelMatch™ technology will allow the DX18 to re-link without having to go through the bind process again.
Because the DX18 Gen 2 uses the same software platform as the DX6 Gen 2, DX7 Gen 2 and DX9, you can share model setups with owners of those transmitters as well.
The DX18 has all the programming functions you need to fly everything from tiny collective pitch helis to competition sailplanes and giant-scale jets.
Both the DX18 and the AR9020 receiver it comes with have X-Plus™ channel expansion capabilities. This means you can add up to eight extra channels with an X-Plus channel expansion module (SPMXP8000 – sold separately). Just plug the module into the receiver, bind it and then assign the extra channels to any function you want.
A Spektrum TM1000 telemetry module and telemetry sensors (all sold separately) are required. You will find there are Spektrum telemetry sensors for tracking just about any model function you can think of, and new ones are being added all the time.
Product: Spektrum DX18G2 and Spektrum DX18 Stealth Edition transmitters with Region: US-247 in the System Settings Screen.
Issue: It has come to the attention of Horizon Hobby, LLC that some DX18G2 and DX18 Stealth Edition transmitters may have a reduction in performance at extreme ranges. Horizon Hobby performed extensive testing to confirm that the reduction in range takes place at extreme ranges well outside normal flying conditions for most conventional flying.
What To Do: Spektrum DX18G2 and DX18 Stealth Edition transmitters with a green dot in the battery compartment and on the box are not affected.
For Spektrum DX18G2 and DX18 Stealth Edition transmitters that do not have a green dot in the battery compartment and on the box, follow the steps listed below to perform a full range test. If the transmitter fails the full range test, please fill out the Repair Request Form found here. After completing and submitting the Repair Request Form, Horizon Hobby will E-mail a shipping label for you to use to return the transmitter. Typical turnaround time for a repair is 7–10 business days. You will not incur any fees or charges for the repair, if it is deemed necessary.
For customers outside of North America or Europe, please contact your local distributor.
2. Any Spektrum full-range receiver with servos attached (or an electric aircraft with full range receiver installed), together with the appropriate charged battery.
3. A small non-conductive (non-metal) stand or table approximately 30 inches (76.2 centimeters) tall (to place the transmitter on when testing).
4. Smart phone with GPS device for measuring distance.
Failsafe will be used to determine if the signal is lost. If using an electric airplane, remove the propeller and bind the DX18G2/Stealth Edition transmitter to the full range receiver at low throttle. When bound, verify that failsafe is working by increasing the throttle position to a low RPM then turn off the transmitter. The motor should turn off indicting loss of signal.
2. If using a receiver and servo only, put the receiver in small a small cardboard box with the antenna taped verticality and the throttle servo located so that it's easy to see. Bind the DX18G2/Stealth Edition to the full range receiver at low throttle. When bound, increase the throttle position to full throttle, then turn off the transmitter while observing the throttle servo. Verify that the throttle servo moves to the low-throttle position.
3. Place an approximately 30-inch (75 cm), non-conductive stand or table in an area that allows an unobstructed, line-of-sight view from the table to the area where the transmitter range test will be performed.4. Power on the transmitter and receiver, arm the ESC and/or confirm the throttle servo is operational. With propeller removed, increase the throttle position to a low RPM setting. If using a throttle servo only, increase the servo position to full throttle and note the location of the servo arm for later reference. At this throttle position, place the DX18G2/Stealth Edition transmitter on the table/stand.
5. Walk or drive the model/receiver 0.5 mile away from the operating transmitter. While facing the transmitter, and with an unobstructed line of sight view, with the model/receiver held at chest height, the motor should remain on at 0.5 miles. If using a receiver/servo only, the servo should remain in its noted full throttle location.
6. If at 0.5 miles the system goes into failsafe (Low throttle position), the radio should be returned to Horizon for service by following the above instructions.
1. Export all programmed models to an SD card.
3. Carefully wrap the transmitter in bubble wrap and pack the transmitter into a strong cardboard box, ensuring the transmitter will not move around in transit. DX18 Stealth Edition Only: Do not return the DX18 Stealth Edition Transmitter Case.
The Spektrum trademark is used with permission of Bachmann Industries, Inc..


The special offers for June 2012 at the Wool Studio in George on the Garden Route include Mosiac, Snowball and Lussuria.
The Wool Studio is a well-known wool shop in the Garden Route. They have been supplying locals, visitors and even people all over South Africa with fine quality wool, yarn and accessories.


With halls for nearly a thousand attendees, business centre, translation cabins and unique a la carte secretarial services, Ercilla is clearly the largest and most comprehensive offer for any sort of event in the area, big or small, private or public, a wedding or a congress.
Take a look at some of the vast possibilities and breakouts of our many halls and meeting rooms.
Occasional series of DJs and Jazz concerts are seldom held at The Lobby. Any arrangements can be set on demand.
Contact our Meeting and Events department for a quote on cce@ercillahoteles.com or call +34944705700.


text:
Sign in | Create a Rediffmail account
Rediff.com » Business » Cos take green path to save costs and sustain growth
Cos take green path to save costs and sustain growth
Last updated on: September 29, 2018 11:09 IST
A selection of Indian corporations are cutting costs and contributing to a green economy by embracing clean fuel and India Inc sees a strong business case in adopting renewable energy to power their operations.
Illustration: Dominic Xavier/Rediff.com.
Tata Motors recorded savings of Rs 66.63 million in the financial year 2017-2018 by sourcing and generating a total of 99,382 MWh of renewable electricity to power its manufacturing operations in India.
The company is not alone.
Villagers stand under a power generating windmill turbine during the inauguration ceremony of a new 25 MW ReNew Power wind farm at Kalasar village in Gujarat. Photograph: Amit Dave/Reuters.
Other big corporates like Infosys, Wipro, Cognizant, ITC, and JK Tyre, too, are increasingly rooting for green and clean power with the twin objective of saving cost and achieving sustainable growth.
According to Bloomberg NEF, globally, private enterprises and public institutions have signed contracts to purchase over 7 gigawatts of clean energy so far this year as compared to 5.4 gigawatts in 2017.
This chart presented by RE100 explains how "businesses can be leaders in the shift to renewable electricity -- going further and faster to accelerate a clean economy." RE 100 is an organisation of the world's most influential companies, committed to 100 per cent renewable power. Image: Courtesy @theRE100/Twitter.
India Inc sees a strong business case in adopting renewable energy to power operations.
"Tata Motors' manufacturing processes consists of energy intensive (ones) that contribute nearly three-fourths of the carbon emissions from our manufacturing operations. We are using renewable energy to power our manufacturing operations to cut down the carbon footprint," says Arvind Bodhankar, head, sustainability, Tata Motors.
Workers clean photovoltaic panels inside a solar power plant in Gujarat. Photograph: Amit Dave/Reuters.
Given that most corporations that are in manufacturing have high-power requirements, investment in renewable energy is clearly the best bet to save costs. At present, the cost of solar power ranges from Rs 2.05 per unit to Rs 5 per unit across Indian states depending on open access charges and added tax levies. This is still lower than traditional power that is priced at Rs 7 to Rs 8 per unit for commercial users, according to some of the spokespersons BS spoke to.
Over the last three years, Tata Motors, for instance, has increased the share of renewable energy in its total electricity consumption from 8.44 per cent to 21 per cent. The company has an installed solar capacity of 6.11 MW. It is working towards adding another 6.7 MW of capacity this year. As regards wind energy, the carmaker has its own assets of 21.95 MW and a power purchase agreement with third party provider for 30 MW of power.
A graph showing global public support for energy sources, based on a poll by Ipsos Global, conducted in 24 countries, including India, based on the opinion of 18,787 global adults. Image: Courtesy Enescot/Wikimedia Commons.
Conglomerate ITC plans to rapidly scale up its renewable energy portfolio in the next few years. Several of its manufacturing units and luxury hotels are powered by renewable energy. Today, 43 per cent of the conglomerate's energy consumption is from renewable sources. At present the company's total installed capacity of wind and solar energy is 140 MW. The company generates another 40 MW from biomass.
Techonolgy and consulting major Infosys aims to source 100 per cent of its electricity from renewables at its campuses over the next two years. Humongous solar panels at the Mysore campus of Infosys can be seen in the picture. Photograph: Courtesy Indianhilbilly/Wikimedia Commons.
"Investment in renewable energy assets is done based on techno-commercial feasibility. Energy audits, benchmarking, continuous review of performance and target setting ensure progressive reduction in specific energy consumption," says Chitranjan Dar, group head, sustainability, research and development and projects, ITC Ltd. It is estimated that ITC's cost savings on account of this would be upwards of 50 per cent.
The growth of clean energy. Image: Courtesy GGByte/Wikimedia Commons.
Information technology firms in India is another set of big power consumers. Most of the electricity consumption for firms such as Infosys and Wipro is in running their facilities. The campuses at these companies largely rely on renewable energy installations such as solar power plants that are grid connected and offset a part of their electricity consumption in the campus.
A call to action to industries globally, including India, to transition to clean energy from The Climate Group, a non-profit that is working to "catalyse climate leadership in government and business to accelerate the shift to a prosperous and thriving 'net-zero' future for all." Image: Courtesy @ClimateGroup/Twitter.
Infosys, for one, aims to source 100 per cent of its electricity from renewables over the next two years. It has a total installed capacity of 46 MW of solar PV plants. The company sourced about 44 per cent of the total electricity consumed from renewables (including green power purchase) in 2018.
The largest wind farm of India at Muppandal, seen from Aralvaimozhi station, Tamil Nadu, has a 1,500 MW capacity making it one of the largest in the world too. Photograph: Courtesy CC-by-sa PlaneMad/Wikimedia Commons.
Ramadas Kamath, executive vice-president and head, facilities, administration, security and sustainability at Infosys, says, "We were the first Indian company to join the global RE100 campaign, with a commitment to go 100 per cent on renewables. Our strategy is multi-pronged -- install onsite solar PV plants in all our campuses, covering roof tops of buildings and some ground mount installations within campuses, offsite solar PV plants installed for captive usage purpose, and to purchase green power from third party renewable energy generators."
Solar resources map of India from 2011. Image: Courtesy SolarGIS © 2011 GeoModel Solar s.r.o/Wikimedia Commons.
IT firm Cognizant derived about 18 per cent of its overall energy consumption in India from renewable sources of energy in 2017.
"To cut energy costs and go green, we have set a target of reaching 22 per cent of the company's energy consumption to be fulfilled from renewable energy," says R Ramkumar, executive director, India, Cognizant.
Wind, solar, and hydroelectricity are three emerging renewable sources of energy. Photograph: Courtesy Jürgen from Sandesneben, Germany/Wikimedia Commons.
At JK Tyre, the majority of renewable energy is used to power the manufacturing plants located in Chennai and Mysore. Anil Kumar Makkar, manufacturing director, JK Tyre, points out that the company has power requirements in excess of 250 million units per year for plant operations across India.
"Currently, 37 per cent of our power requirements are met by renewable energy sources, including wind and solar. By end of next financial year, we aim to increase the share of renewable energy in our total power consumption to 45 per cent." The company claims that it has recorded savings over Rs 100 million by using renewable energy in last year.
A projection on the growth of clean energy worldwide 2007-2017, based on Clean Edge Energy Trends Report, 2008. Image: Courtesy GGByte/Wikimedia Commons.
Even as companies look to increase the share of renewables in their total energy consumption mix, challenges abound. For most of the companies, energy generation is not their core competency and expertise, suggests Makkar of JK Tyre. To overcome this, most players use a mix of own installation plus buy power from third party suppliers.
India's present sources of energy. Image: Courtesy Central Electricity Authority, Ministry of Power, Government of India. 31 May 2018 on Wikipedia.
Mahesh Makhija, director, business development and commercial, renewables, CLP India, which is into solar and wind power generation, suggests that access to cheap power and reducing reliability on the grid are the two key reasons why many firms are opting for renewables.
Sangeeta Tanwar in New Delhi
Related News: India Inc, ITC, Wikimedia Commons, Courtesy CC-by-sa, JK Tyre
Truth and justice have prevailed: PM on ICJ verdict
Saeed's arrest result of US 'great pressure': Trump
K'taka: Rebel Cong MLA ready to vote in favour of govt
Will go back to ICJ if Pak violates ruling: Salve
Rajya Sabha approves bill to give more powers to NIA
Major tax cut for UP's 'mom and pop' stores
OYO forays into co-working spaces with two brands
Moneywiz Live!
Will solar energy power Modi's dream of 'electricity for all'?
An energy superpower? Not India!
India Business News | Indian Stock Market News | Bollywood Movies | Indian Cricket News | India News
© 2019 Rediff.com - Investors - Advertise - Disclaimer - Privacy - Careers - Feedback | Terms of use


The Training and Certification Module gives you an integrated learning platform right within your PRM. Easily deliver training to both your Partners and internal Users, and test their knowledge using multiple choice exams. Automatically award Certifications to Users that successfully complete the required Courses in your Channeltivity portal – and in-person as well. Streamline your channel certification program with automatic expiration and useful reports right in the partner's profile.
Channel Partners get an up-to-date and accurate view into their training and certifications right within their portal – no need to worry about single sign-on or multiple logins.
Easily upload training content consisting of text, videos, images, files and links.
Test your users' knowledge with multiple choice Quizzes.
Specify which training needs to be completed to achieve a certification.
Learn more about the Training and Certification Module.
Video files can now be uploaded directly to the Library and streamed in various formats across different devices. Supported formats are MP4, AVI, MOV, WMV, and MKV.
The redesigned MDF Request page makes it easier to scan for details such as statuses and balances.


text:
Soderberg enjoying renaissance play, career-firsts
Tim Wharnsby
Carl SoderbergColorado Avalanche
In a league that continues to get younger, veteran centre Carl Soderberg keeps improving with age.
The oldest player on the Colorado Avalanche at 33 already has scored a career-high 17 goals with one-third of the season left to play.
The native of Malmo, Sweden jested he's playing his best hockey these days because he likely doesn't have many seasons remaining.
"I don't really know," said Soderberg, when asked why he's playing so well. "Maybe it's because I'm trying to enjoy myself more and I don't have much time left."
It certainly appeared Soderberg didn't have much time left after he only produced six goals and 14 points in 2016-17. But despite his poor campaign, Soderberg was named to the Swedish national team for the 2017 IIHF World Championship and won a gold medal.
He returned to Colorado last year with a new lease on his hockey life. He was a healthy scratch for the season opener but once he found himself in the lineup he responded with a 16-goal campaign to match the career-high he piled up in his first full season in the league with the 2013-14 Boston Bruins.
His renaissance made him the Avalanche's nomination for 2017-18 Bill Masterton Trophy, awarded to the player who best exemplifies the qualities of perseverance, sportsmanship and dedication to the game.
The good vibrations continued for Soderberg this season, especially when he recently caught fire with five goals in his final eight games before the NHL All-Star break – including his first NHL career hat trick.
Moser (and the team!) are exponentially more excited than Carl Soderberg about his first career hat trick.
And that is absolutely fitting. #GoAvsGo pic.twitter.com/GOv4tsXcdt
— Colorado Avalanche (@Avalanche) January 15, 2019
Despite not making the Swedish under-20 team for the World Junior Championship in his draft year, Soderberg did manage to lead the Swedish junior league in scoring with the 2003-04 Malmo Redhawks with 23 goals and 48 points in 27 games.
That was good enough for the St. Louis Blues to select him in the second round (49th overall) in the 2004 NHL Draft. Soderberg attended his first training camp in St. Louis two years later. But he failed to crack the Blues roster and returned home to play for Malmo IF in the Swedish Elite League.
He enjoyed a strong start with 12 goals and 30 points in 31 games only to be derailed by a serious eye injury. In a January 2007 game, an opponent tried to lift Soderberg's stick but missed and caught him in the left eye underneath his visor.
Soderberg suffered a detached retina. All of a sudden, his hockey career was in jeopardy at age 21.
"I really didn't know if I would play again," he said. "I didn't know if I would see again out of the eye. I just wanted to get healthy. I wanted to be pain-free."
Soderberg was hospitalized for three months after the incident. He required a few surgeries but his vision never fully returned to 100 percent. He said the best way to describe the sight in his left eye these days is "blurry" with 20-80 vision.
The biggest hurdle, according to Soderberg, was to accept what happened to him. Once he accepted his injury he felt he could give hockey a try again. He dropped down a league in Sweden for four seasons before feeling comfortable enough to give the Swedish Elite League another try.
In the meantime, the Blues had traded him to the Bruins for goalie Hannu Toivonen in the summer of 2007, even though Soderberg's career had stalled. He took his time and regained confidence, finally arriving in Boston at the end of the owners' lockout-shortened 2012-13 season. He suited up for six regular-season games and a pair of playoff games in Boston's march to the final against the Chicago Blackhawks.
The Bruins first had him play left wing. But when he was moved back to his natural position of centre he found it a better fit because of his vision problems.
"You learn what you can do, what works," he said. "It's not a problem anymore."
My Top 5 | Erik Johnson
Get to know more about the six-foot-four, 225-pound blueliner in this edition of My Top 5!
Graves making impression on Avs blue line
There is no relation between Adam and Ryan Graves, but they immediately hit it off after the Rangers selected the younger Graves in the fourth round at the 2013 NHL Draft.
Tenacity makes MacKinnon elite competitor – on the ice
For Cam Russell, it's the perfect example of what makes Nathan MacKinnon an elite competitor.
Player Q&A | Gabriel Landeskog
Nobody can debate Gabriel Landeskog started 2018-19 on fire. His stance on pineapple on pizza? Well, that's a hot take.
Player of the Week | Nathan MacKinnon
Nathan MacKinnon led the league with seven points, alongside Colorado Avalanche captain Gabriel Landeskog, while building his season-opening point streak to eight games.
Jarome Iginla retires leaving Flames legacy behind him
A lot has changed over the last two decades in professional hockey. Through it all, there was Jarome Iginla.


Russia's gas pipeline Nord Stream 2 is a geopolitical project of the Kremlin, which has nothing to do with economic and business interests, but aims to destroy the unity of Europe, Ukrainian President Petro Poroshenko has said.
In his article for Germany's Frankfurter Allgemeine Zeitung newspaper, which was published on May 18, Poroshenko emphasized that Nord Stream 2 is a tragic mistake of a historical scale with unthinkable consequences.
"This is an absolutely geopolitical project of the Kremlin, which has nothing to do with economic and business interests, and is aimed, first and foremost, at the destruction of the unity of Europe and, subsequently, its subordination. This has always been the ideology of the Russian energy policy. Today there are no grounds to think differently, until Russian aggression against Ukraine and the West is not actually stopped, and the Kremlin begins to respect international law and order," the president wrote.
Poroshenko expressed confidence that under the current circumstances any large-scale pan-European project with the Kremlin would mean pacification of the aggressor, rather than a manifestation of force. And as soon as Nord Stream 2 is filled with Russian gas, "the Kremlin will not refrain from an even more brutal attack on our common values." "Even worse, it will give Russia an advantage," Poroshenko said.
In addition, he warned of trust in the promises of "bright dividends" of the Kremlin.
"Do not believe that Gazprom intends to adhere to the agreements. Its reliability has been significantly compromised, and the last example is the failure of Gazprom to recognize the Stockholm arbitration decision in favor of Ukraine. It's hard to be a reliable partner when you are called to be an energy lever of the Kremlin in its geopolitical games," Poroshenko said.
"Thus, investment in Nord Stream 2 is investment in the disintegration of Europe. Does Europe really need another such gas pipeline with Russia?" he said.


text:
3 Days Tanzania Northern Circuit
This safari starts and ends in Arusha Tanzania, it takes you to both Tarangire national park as well as Ngorongoro Crater. Tarangire National Park is one of the largest parks in Tanzania and it's located in the southwest of Lake Manyara it covering an area of 2850km. its landscape is covered by Baobab trees, high grasses as well as dense bush. The park is also famous for elephants, waterbuck, wildebeests, giraffes, olive baboons as well as baobab tree-climbing lions.
The safari also takes you to Serengeti National Park, this is one of the largest national parks in TZ and has got a variety of habitats as well as landscapes which include; swamps, thick bush, savannah, grasslands, mountains, and lakes. There are also the bizarre rock formations which are called Kopjes that occupy this grassland scape where one can see the predators. You might get a chance to watch the annual migration of the thousands of animals which make the park famous. This happens in both the short rainy season of November and December where the herds move from the hills in the north to the plains within the south. And in the long rainy season from April up to June, they return to the north. This circle depends mainly on the year's rainfalls and the locations of the herds.
Also you'll visit the Ngorongoro crater which is filled with lots of wildlife species including lions, elephants, zebras, and many birds, the crater highly attracts lots of tourists and is surrounded by water sources.
Transportation in 4×4 safari vehicle
Professional, English speaking guide
Meals-Breakfast, Lunch & Dinner
Overnight stays in Safari Lodges / Luxury Tented Camps
All national park fees
Alcoholic and soft drinks
Day 1: Arusha to Tarangire National park
Early in the morning after breakfast, meet and greet with your professional driver guide for briefing and drive directly to Tarangire national park for the full day game drive. Tarangire national park is an amazing place to be, some call it the Elephant sanctuary as your more than likely to experience large herds of Elephants each lead by a matriarch which in most cases is the oldest elephant of the group. Other threatened and endangered species that you will experience are ebony trees, the super muscular python, cheetah, the African wild dogs, Greater Kudu, Beisa Oryx and other many animals not to mention. In fact the bird life of this park is just astonishing and splendid with over 550 species of birds recorded in the park.
Your picnic lunch will then be served in the bush while a level of experience remains tremendous. After game drive you will drive back to the Serengeti where you will spend your night in the accommodation facility of your preference.
Day 2: Serengeti National park
Early in the morning after breakfast, meet and greet with your professional driver guide for briefing and without delay start your whole day game drive in the Serengeti, the Serengeti offers one of the most amazing game viewing in Africa: great herds of buffalo and wildebeests, groups of elephant and giraffes, eland, impala and Grant's gazelle, Lions, leopards and others, can be seen very often not to mention the immense landscape view of the Serengeti plains.
Your picnic lunch will then be served in the bush after which will be followed with an evening game drive which will connect to a drive to the Ngorongoro crater where you will spend your night in the accommodation facility of your preference.
Day 3: Ngorongoro Crater to Arusha
Early in the morning after breakfast, meet and greet with your professional driver guide for briefing and without delay start descending in the crater for your game drive. The Ngorongoro crater is a conservation area and a UNESCO World Heritage Site located 210 km west of Arusha. Known as 'the eighth wonder of the world the Ngorongoro Crater is one of Africa's best-known wildlife arenas. Its home to the vast, volcanic Ngorongoro Crater and big 5 game (elephant, lion, leopard, buffalo, rhino). Huge herds of wildebeests and zebras traverse its plains during their annual migration. Livestock belonging to the semi-nomadic Maasai tribe graze alongside wild animals.
Your picnic lunch will then be served in the crater after which will be followed with a drive back to Arusha town in your hotel and that will be end of our adventure.
Tours Reviews
Feb - Jul - Aug - Oct 4 Days Dar es Salaam Eastern Zone
Saadani National Park is a one-of-a-kind paradise with a unique ecosystem where beach life meets...
$500$390 View More


GENERAL CONTRACTOR: Weaver & Jacobs Constructors, Inc.
GENERAL CONTRACTOR: Catamount Constructors, Inc.
150,000 s.f. two story elementary school with related site improvements.
GENERAL CONTRACTOR: DMAC Construction & Development, Inc.
81,000 s.f. two-story addition to an existing student fitness center on an active college campus including two nadatoriums and cast-in-place pool shells.
ARCHITECT: Edgecomb & Associates, Inc.


After Sarajevo, the exhibition about the contribution of former migrants, nowadays national minorities will visit Srebrenica, Visoko and Zenica.
The exhibition will be held at the Cultural Center Srebrenica from 15th to 21st November. On International Human Rights Day – 10th December, the exhibition will be hosted by the Cultural Center Altintag in Visoko. During January 2019, it will travel to the Zenica City Museum.
Stories of the Italians, Germans, Roma, Poles, Czechs and other national minorities presented at the exhibition talks about their important roles in this society through centuries. The exhibition aims to open dialogue about the relationship of BiH society with migrants, in the past and nowadays.
The exhibition was part of the project "InVisible: Cultural Rights of National Minorities in BiH", funded by the United States Government.


It will be welcome news to many North West motorists that work on the new Mersey Gateway crossing is at last making progress. After years of negotiations between local government authorities, industry leaders and central government we can see things starting to take shape.
Traffic congestion is set to get much worse however before it gets better. Local road closures on both sides of Manchester Ship Canal will soon start to have an adverse affect on motorists journeys. The Speke Road slip road in Widnes to the Ditton Roundabout is scheduled to shut this Tuesday for five months and motorists have been warned to expect major delays!
Our drivers here at D&D Coatings spend many hours during the course of each month stuck in traffic. Just this week our managing director, Paul Drinkwater, was delayed by over 2 hours and was late for an important site meeting with another new client. We dread to think what traffic congestion costs our company each year in time and fuel costs. This only emphasizes the need for more robust infrastructure here in the UK.
When the new bridge opens in 2014 it will be tolled, along with the existing Silver Jubilee bridge, at £2 per one way trip. Halton residents in both Widnes and Runcorn will be able to use both bridges free of charge in an announcement made by Chancellor of the Exchequer George Osborne in July 2014. There will be no toll booths on either bridge unlike the Mersey tunnels.
Toll charges will be collected using the open road rolling system as used by the Irish Highways Agency on motorways including the M50 Dublin orbital, M1, M3, M4, M6, M7 and M8 motorways across Ireland. This will ensure traffic moves smoothly and we don't see the problems endured by motorists in Liverpool and Wallasey during rush hour.
Expanding this system to both new roads and existing busy routes such as the M6 motorway could be the future. We believe the time saved with shorter journeys to our sites across the country would out way the extra toll costs, and we're sure many businesses would agree. Currently traffic monitoring systems are too slow to react and alert road users to congestion. Quite often we find ourselves stationery in a traffic jam with no indication to any problem displayed on our screens until its too late.
Our staff travel across the UK every day and with our expanding fleet of vehicles this is translating into more man hours on Britains roads than ever. So our question is, could tolling Britains roads be the answer to increasing traffic disruption? Or do we need a more radical solution? Time will tell I'm sure but in the meantime we'll have to continue enduring traffic congestion and simply hope for the best. Our business, every other business and possibly the future of our great nation will depend on a free flowing road network.


text:
Browse Books: Political Science / Colonialism & Post-Colonialism
Puerto Rico: An Interpretive History from Pre-Columbian Times to 1900 (Paperback)
By Olga Jimenez De Wagenheim, Olga Jimenez De Wagenheim
Decolonising the Mind: The Politics of Language in African Literature (Studies in African Literature) (Paperback)
By Ngugi Wa Thiong'o
Loot: Britain and the Benin Bronzes (Hardcover)
By Barnaby Phillips
The Common Wind: Afro-American Currents in the Age of the Haitian Revolution (Paperback)
By Julius S. Scott
The Whole Picture: The colonial story of the art in our museums & why we need to talk about it (Paperback)
By Alice Procter
How We Go Home: Voices from Indigenous North America (Voice of Witness) (Paperback)
By Sara Sinclair (Editor)
The New Age of Empire: How Racism and Colonialism Still Rule the World (Hardcover)
By Kehinde Andrews
Aqueduct: Colonialism, Resources, and the Histories We Remember (Semaphore #13) (Paperback)
By Adele Perry
Heart Berries: A Memoir (Hardcover)
By Terese Marie Mailhot
Rebels Against the Raj: Western Fighters for India's Freedom (Hardcover)
By Ramachandra Guha
The Communist Manifesto (Paperback)
By Frederick Engels, Samuel Moore (Translator), Karl Marx
Postcolonial Melancholia (Wellek Library Lectures) (Paperback)
By Paul Gilroy
Political Science / Colonialism & Post-Colonialism