text:
package scala.tools.nsc
package typechecker

import scala.collection.mutable
import scala.collection.mutable.ListBuffer
import scala.util.control.Exception.ultimately
import symtab.Flags._
import PartialFunction._

/** An interface to enable higher configurability of diagnostic messages
 *  regarding type errors.  This is barely a beginning as error messages are
 *  distributed far and wide across the codebase.  The plan is to partition
 *  error messages into some broad groups and provide some mechanism for
 *  being more or less verbose on a selective basis.  Possible groups include
 *  such examples as
 *
 *    arity errors
 *    kind errors
 *    variance errors
 *    ambiguity errors
 *    volatility/stability errors
 *    implementation restrictions
 *
 *  And more, and there is plenty of overlap, so it'll be a process.
 *
 *  @author Paul Phillips
 *  @version 1.0
 */
trait TypeDiagnostics {
  self: Analyzer =>

  import global._
  import definitions._

  /** For errors which are artifacts of the implementation: such messages
   *  indicate that the restriction may be lifted in the future.
   */
  def restrictionWarning(pos: Position, unit: CompilationUnit, msg: String): Unit =
    reporter.warning(pos, "Implementation restriction: " + msg)
  def restrictionError(pos: Position, unit: CompilationUnit, msg: String): Unit =
    reporter.error(pos, "Implementation restriction: " + msg)

  /** A map of Positions to addendums - if an error involves a position in
   *  the map, the addendum should also be printed.
   */
  private val addendums = perRunCaches.newMap[Position, () => String]()
  private var isTyperInPattern = false

  /** Devising new ways of communicating error info out of
   *  desperation to work on error messages.  This is used
   *  by typedPattern to wrap its business so we can generate
   *  a sensible error message when things go south.
   */
  def typingInPattern[T](body: => T): T = {
    val saved = isTyperInPattern
    isTyperInPattern = true
    try body
    finally isTyperInPattern = saved
  }

  def setAddendum(pos: Position, msg: () => String) =
    if (pos != NoPosition)
      addendums(pos) = msg

  def withAddendum(pos: Position) = (_: String) + addendums.getOrElse(pos, () => "")()

  def decodeWithKind(name: Name, owner: Symbol): String = {
    val prefix = (
      if (name.isTypeName) "type "
      else if (owner.isPackageClass) "object "
      else "value "
    )
    prefix + name.decode
  }

  /** Does the positioned line assigned to t1 precede that of t2?
   */
  def posPrecedes(p1: Position, p2: Position) = p1.isDefined && p2.isDefined && p1.line < p2.line
  def linePrecedes(t1: Tree, t2: Tree) = posPrecedes(t1.pos, t2.pos)

  private object DealiasedType extends TypeMap {
    def apply(tp: Type): Type = tp match {
      // Avoid "explaining" that String is really java.lang.String,
      // while still dealiasing types from non-default namespaces.
      case TypeRef(pre, sym, args) if sym.isAliasType && !sym.isInDefaultNamespace =>
        mapOver(tp.dealias)
      case _ =>
        mapOver(tp)
    }
  }

  /** An explanatory note to be added to error messages
   *  when there's a problem with abstract var defs */
  def abstractVarMessage(sym: Symbol): String =
    if (sym.isSetter || sym.isGetter && sym.setterIn(sym.owner).exists)
      "\n(Note that variables need to be initialized to be defined)"
    else ""

  private def methodTypeErrorString(tp: Type) = tp match {
    case mt @ MethodType(params, resultType)  =>
      def forString = params map (_.defString)

       forString.mkString("(", ",", ")") + resultType
    case x                                    => x.toString
  }

  /**
   * [a, b, c] => "(a, b, c)"
   * [a, B]    => "(param1, param2)"
   * [a, B, c] => "(param1, ..., param2)"
   */
  final def exampleTuplePattern(names: List[Name]): String = {
    val arity = names.length
    val varPatterNames: Option[List[String]] = sequence(names map {
      case name if nme.isVariableName(name) => Some(name.decode)
      case _                                => None
    })
    def parenthesize(a: String) = s"($a)"
    def genericParams = (Seq("param1") ++ (if (arity > 2) Seq("...") else Nil) ++ Seq(s"param$arity"))
    parenthesize(varPatterNames.getOrElse(genericParams).mkString(", "))
  }

  def alternatives(tree: Tree): List[Type] = tree.tpe match {
    case OverloadedType(pre, alternatives)  => alternatives map pre.memberType
    case _                                  => Nil
  }
  def alternativesString(tree: Tree) =
    alternatives(tree) map (x => "  " + methodTypeErrorString(x)) mkString ("", " <and>\n", "\n")

  /** The symbol which the given accessor represents (possibly in part).
    * This is used for error messages, where we want to speak in terms
    * of the actual declaration or definition, not in terms of the generated setters
    * and getters.
    *
    * TODO: is it wise to create new symbols simply to generate error message? is this safe in interactive/resident mode?
    */
  def underlyingSymbol(member: Symbol): Symbol =
    if (!member.hasAccessorFlag || member.accessed == NoSymbol) member
    else if (!member.isDeferred) member.accessed
    else {
      val getter = if (member.isSetter) member.getterIn(member.owner) else member
      val flags  = if (getter.setterIn(member.owner) != NoSymbol) DEFERRED.toLong | MUTABLE else DEFERRED

      getter.owner.newValue(getter.name.toTermName, getter.pos, flags) setInfo getter.tpe.resultType
    }

  def treeSymTypeMsg(tree: Tree): String = {
    val sym               = tree.symbol
    def hasParams         = tree.tpe.paramSectionCount > 0
    def preResultString   = if (hasParams) ": " else " of type "

    def patternMessage    = "pattern " + tree.tpe.finalResultType + valueParamsString(tree.tpe)
    def exprMessage       = "expression of type " + tree.tpe
    def overloadedMessage = s"overloaded method $sym with alternatives:\n" + alternativesString(tree)
    def moduleMessage     = "" + sym
    def defaultMessage    = moduleMessage + preResultString + tree.tpe
    def applyMessage      = defaultMessage + tree.symbol.locationString

    if (!tree.hasExistingSymbol) {
      if (isTyperInPattern) patternMessage
      else exprMessage
    }
    else if (sym.isOverloaded) overloadedMessage
    else if (sym.isModule) moduleMessage
    else if (sym.name == nme.apply) applyMessage
    else defaultMessage
  }

  def disambiguate(ss: List[String]) = ss match {
    case Nil      => Nil
    case s :: ss  => s :: (ss map { case `s` => "(some other)"+s ; case x => x })
  }

  // todo: use also for other error messages
  def existentialContext(tp: Type) = tp.skolemsExceptMethodTypeParams match {
    case Nil  => ""
    case xs   => " where " + (disambiguate(xs map (_.existentialToString)) mkString ", ")
  }

  def explainAlias(tp: Type) = {
    // Don't automatically normalize standard aliases; they still will be
    // expanded if necessary to disambiguate simple identifiers.
    val deepDealias = DealiasedType(tp)
    if (tp eq deepDealias) "" else {
      // A sanity check against expansion being identical to original.
      val s = "" + deepDealias
      if (s == "" + tp) ""
      else "\n    (which expands to)  " + s
    }
  }

  /** Look through the base types of the found type for any which
   *  might have been valid subtypes if given conformant type arguments.
   *  Examine those for situations where the type error would have been
   *  eliminated if the variance were different.  In such cases, append
   *  an additional explanatory message.
   *
   *  TODO: handle type aliases better.
   */
  def explainVariance(found: Type, req: Type): String = {
    found.baseTypeSeq.toList foreach { tp =>
      if (tp.typeSymbol isSubClass req.typeSymbol) {
        val foundArgs = tp.typeArgs
        val reqArgs   = req.typeArgs
        val params    = req.typeConstructor.typeParams

        if (foundArgs.nonEmpty && foundArgs.length == reqArgs.length) {
          val relationships = (foundArgs, reqArgs, params).zipped map {
            case (arg, reqArg, param) =>
              def mkMsg(isSubtype: Boolean) = {
                val op      = if (isSubtype) "<:" else ">:"
                val suggest = if (isSubtype) "+" else "-"
                val reqsym  = req.typeSymbol
                def isJava  = reqsym.isJavaDefined
                def isScala = reqsym hasTransOwner ScalaPackageClass

                val explainFound = "%s %s %s%s, but ".format(
                  arg, op, reqArg,
                  // If the message involves a type from the base type sequence rather than the
                  // actual found type, we need to explain why we're talking about it.  Less brute
                  // force measures than comparing normalized Strings were producing error messages
                  // like "and java.util.ArrayList[String] <: java.util.ArrayList[String]" but there
                  // should be a cleaner way to do this.
                  if (found.dealiasWiden.toString == tp.dealiasWiden.toString) ""
                  else " (and %s <: %s)".format(found, tp)
                )
                val explainDef = {
                  val prepend = if (isJava) "Java-defined " else ""
                  "%s%s is %s in %s.".format(prepend, reqsym, param.variance, param)
                }
                // Don't suggest they change the class declaration if it's somewhere
                // under scala.* or defined in a java class, because attempting either
                // would be fruitless.
                val suggestChange = "\nYou may wish to " + (
                  if (isScala || isJava)
                    "investigate a wildcard type such as `_ %s %s`. (SLS 3.2.10)".format(op, reqArg)
                  else
                    "define %s as %s%s instead. (SLS 4.5)".format(param.name, suggest, param.name)
                )

                Some("Note: " + explainFound + explainDef + suggestChange)
              }
              // In these cases the arg is OK and needs no explanation.
              val conforms = (
                   (arg =:= reqArg)
                || ((arg <:< reqArg) && param.isCovariant)
                || ((reqArg <:< arg) && param.isContravariant)
              )
              val invariant = param.variance.isInvariant

              if (conforms)                             Some("")
              else if ((arg <:< reqArg) && invariant)   mkMsg(isSubtype = true)   // covariant relationship
              else if ((reqArg <:< arg) && invariant)   mkMsg(isSubtype = false)  // contravariant relationship
              else None // we assume in other cases our ham-fisted advice will merely serve to confuse
          }
          val messages = relationships.flatten
          // the condition verifies no type argument came back None
          if (messages.size == foundArgs.size)
            return messages filterNot (_ == "") mkString ("\n", "\n", "")
        }
      }
    }
    ""    // no elaborable variance situation found
  }

  // For found/required errors where AnyRef would have sufficed:
  // explain in greater detail.
  def explainAnyVsAnyRef(found: Type, req: Type): String = {
    if (AnyRefTpe <:< req) notAnyRefMessage(found) else ""
  }

  // TODO - figure out how to avoid doing any work at all
  // when the message will never be seen.  I though context.reportErrors
  // being false would do that, but if I return "<suppressed>" under
  // that condition, I see it.
  def foundReqMsg(found: Type, req: Type): String = {
    def baseMessage = (
      ";\n found   : " + found.toLongString + existentialContext(found) + explainAlias(found) +
       "\n required: " + req + existentialContext(req) + explainAlias(req)
    )
    (   withDisambiguation(Nil, found, req)(baseMessage)
      + explainVariance(found, req)
      + explainAnyVsAnyRef(found, req)
    )
  }

  def typePatternAdvice(sym: Symbol, ptSym: Symbol) = {
    val clazz = if (sym.isModuleClass) sym.companionClass else sym
    val caseString =
      if (clazz.isCaseClass && (clazz isSubClass ptSym))
        ( clazz.caseFieldAccessors
          map (_ => "_")    // could use the actual param names here
          mkString (s"`case ${clazz.name}(", ",", ")`")
        )
      else
        "`case _: " + (clazz.typeParams match {
          case Nil  => "" + clazz.name
          case xs   => xs map (_ => "_") mkString (clazz.name + "[", ",", "]")
        })+ "`"

    if (!clazz.exists) ""
    else "\nNote: if you intended to match against the class, try "+ caseString
  }

  case class TypeDiag(tp: Type, sym: Symbol) extends Ordered[TypeDiag] {
    // save the name because it will be mutated until it has been
    // distinguished from the other types in the same error message
    private val savedName = sym.name
    private var postQualifiedWith: List[Symbol] = Nil
    def restoreName()     = sym.name = savedName
    def modifyName(f: String => String) = sym setName newTypeName(f(sym.name.toString))

    /** Prepend java.lang, scala., or Predef. if this type originated
     *  in one of those.
     */
    def qualifyDefaultNamespaces() = {
      val intersect = Set(trueOwner, aliasOwner) intersect UnqualifiedOwners
      if (intersect.nonEmpty && tp.typeSymbolDirect.name == tp.typeSymbol.name) preQualify()
    }

    // functions to manipulate the name
    def preQualify()   = modifyName(trueOwner.fullName + "." + _)
    def postQualify()  = if (!(postQualifiedWith contains trueOwner)) { postQualifiedWith ::= trueOwner; modifyName(_ + "(in " + trueOwner + ")") }
    def typeQualify()  = if (sym.isTypeParameterOrSkolem) postQualify()
    def nameQualify()  = if (trueOwner.isPackageClass) preQualify() else postQualify()

    def trueOwner  = tp.typeSymbol.effectiveOwner
    def aliasOwner = tp.typeSymbolDirect.effectiveOwner

    def sym_==(other: TypeDiag)     = tp.typeSymbol == other.tp.typeSymbol
    def owner_==(other: TypeDiag)   = trueOwner == other.trueOwner
    def string_==(other: TypeDiag)  = tp.toString == other.tp.toString
    def name_==(other: TypeDiag)    = sym.name == other.sym.name

    def compare(other: TypeDiag) =
      if (this == other) 0
      else if (sym isLess other.sym) -1
      else 1

    override def toString = {
      """
      |tp = %s
      |tp.typeSymbol = %s
      |tp.typeSymbol.owner = %s
      |tp.typeSymbolDirect = %s
      |tp.typeSymbolDirect.owner = %s
      """.stripMargin.format(
        tp, tp.typeSymbol, tp.typeSymbol.owner, tp.typeSymbolDirect, tp.typeSymbolDirect.owner
      )
    }
  }
  /** This is tricky stuff - we need to traverse types deeply to
   *  explain name ambiguities, which may occur anywhere.  However
   *  when lub explosions come through it knocks us into an n^2
   *  disaster, see SI-5580.  This is trying to perform the initial
   *  filtering of possibly ambiguous types in a sufficiently
   *  aggressive way that the state space won't explode.
   */
  private def typeDiags(locals: List[Symbol], types0: Type*): List[TypeDiag] = {
    val types   = types0.toList
    // If two different type diag instances are seen for a given
    // key (either the string representation of a type, or the simple
    // name of a symbol) then keep them for disambiguation.
    val strings = mutable.Map[String, Set[TypeDiag]]() withDefaultValue Set()
    val names   = mutable.Map[Name, Set[TypeDiag]]() withDefaultValue Set()

    val localsSet = locals.toSet

    def record(t: Type, sym: Symbol) = {
      if (!localsSet(sym)) {
        val diag = TypeDiag(t, sym)
        strings("" + t) += diag
        names(sym.name) += diag
      }
    }
    for (tpe <- types ; t <- tpe) {
      t match {
        case ConstantType(_)    => record(t, t.underlying.typeSymbol)
        case TypeRef(_, sym, _) => record(t, sym)
        case _                  => ()
      }
    }

    val collisions = strings.values ++ names.values filter (_.size > 1)
    collisions.flatten.toList
  }

  /** The distinct pairs from an ordered list. */
  private def pairs[T <: Ordered[T]](xs: Seq[T]): Seq[(T, T)] = {
    for (el1 <- xs ; el2 <- xs ; if el1 < el2) yield
      ((el1, el2))
  }

  /** Given any number of types, alters the name information in the symbols
   *  until they can be distinguished from one another: then executes the given
   *  code.  The names are restored and the result is returned.
   */
  def withDisambiguation[T](locals: List[Symbol], types: Type*)(op: => T): T = {
    val typeRefs = typeDiags(locals, types: _*)
    val toCheck  = pairs(typeRefs) filterNot { case (td1, td2) => td1 sym_== td2 }

    ultimately(typeRefs foreach (_.restoreName())) {
      for ((td1, td2) <- toCheck) {
        val tds = List(td1, td2)

        // If the types print identically, qualify them:
        //   a) If the dealiased owner is a package, the full path
        //   b) Otherwise, append (in <owner>)
        if (td1 string_== td2)
          tds foreach (_.nameQualify())

        // If they have the same simple name, and either of them is in the
        // scala package or predef, qualify with scala so it is not confusing why
        // e.g. java.util.Iterator and Iterator are different types.
        if (td1 name_== td2)
          tds foreach (_.qualifyDefaultNamespaces())

        // If they still print identically:
        //   a) If they are type parameters with different owners, append (in <owner>)
        //   b) Failing that, the best we can do is append "(some other)" to the latter.
        if (td1 string_== td2) {
          if (td1 owner_== td2)
            td2.modifyName("(some other)" + _)
          else
            tds foreach (_.typeQualify())
        }
      }
      // performing the actual operation
      op
    }
  }

  trait TyperDiagnostics {
    self: Typer =>

    def permanentlyHiddenWarning(pos: Position, hidden: Name, defn: Symbol) =
      context.warning(pos, "imported `%s' is permanently hidden by definition of %s".format(hidden, defn.fullLocationString))

    object checkUnused {
      val ignoreNames: Set[TermName] = Set(TermName("readResolve"), TermName("readObject"), TermName("writeObject"), TermName("writeReplace"))

      class UnusedPrivates extends Traverser {
        val defnTrees = ListBuffer[MemberDef]()
        val targets   = mutable.Set[Symbol]()
        val setVars   = mutable.Set[Symbol]()
        val treeTypes = mutable.Set[Type]()

        def defnSymbols = defnTrees.toList map (_.symbol)
        def localVars   = defnSymbols filter (t => t.isLocalToBlock && t.isVar)

        def qualifiesTerm(sym: Symbol) = (
             (sym.isModule || sym.isMethod || sym.isPrivateLocal || sym.isLocalToBlock)
          && !nme.isLocalName(sym.name)
          && !sym.isParameter
          && !sym.isParamAccessor       // could improve this, but it's a pain
          && !sym.isEarlyInitialized    // lots of false positives in the way these are encoded
          && !(sym.isGetter && sym.accessed.isEarlyInitialized)
        )
        def qualifiesType(sym: Symbol) = !sym.isDefinedInPackage
        def qualifies(sym: Symbol) = (
             (sym ne null)
          && (sym.isTerm && qualifiesTerm(sym) || sym.isType && qualifiesType(sym))
        )

        override def traverse(t: Tree): Unit = {
          t match {
            case t: MemberDef if qualifies(t.symbol)   => defnTrees += t
            case t: RefTree if t.symbol ne null        => targets += t.symbol
            case Assign(lhs, _) if lhs.symbol != null  => setVars += lhs.symbol
            case _                                     =>
          }
          // Only record type references which don't originate within the
          // definition of the class being referenced.
          if (t.tpe ne null) {
            for (tp <- t.tpe ; if !treeTypes(tp) && !currentOwner.ownerChain.contains(tp.typeSymbol)) {
              tp match {
                case NoType | NoPrefix    =>
                case NullaryMethodType(_) =>
                case MethodType(_, _)     =>
                case _                    =>
                  log(s"$tp referenced from $currentOwner")
                  treeTypes += tp
              }
            }
            // e.g. val a = new Foo ; new a.Bar ; don't let a be reported as unused.
            t.tpe.prefix foreach {
              case SingleType(_, sym) => targets += sym
              case _                 =>
            }
          }
          super.traverse(t)
        }
        def isUnusedType(m: Symbol): Boolean = (
              m.isType
          && !m.isTypeParameterOrSkolem // would be nice to improve this
          && (m.isPrivate || m.isLocalToBlock)
          && !(treeTypes.exists(tp => tp exists (t => t.typeSymbolDirect == m)))
        )
        def isUnusedTerm(m: Symbol): Boolean = (
             (m.isTerm)
          && (m.isPrivate || m.isLocalToBlock)
          && !targets(m)
          && !(m.name == nme.WILDCARD)              // e.g. val _ = foo
          && !ignoreNames(m.name.toTermName)        // serialization methods
          && !isConstantType(m.info.resultType)     // subject to constant inlining
          && !treeTypes.exists(_ contains m)        // e.g. val a = new Foo ; new a.Bar
        )
        def unusedTypes = defnTrees.toList filter (t => isUnusedType(t.symbol))
        def unusedTerms = defnTrees.toList filter (v => isUnusedTerm(v.symbol))
        // local vars which are never set, except those already returned in unused
        def unsetVars = localVars filter (v => !setVars(v) && !isUnusedTerm(v))
      }

      def apply(unit: CompilationUnit) = {
        val p = new UnusedPrivates
        p traverse unit.body
        val unused = p.unusedTerms
        unused foreach { defn: DefTree =>
          val sym             = defn.symbol
          val pos = (
            if (defn.pos.isDefined) defn.pos
            else if (sym.pos.isDefined) sym.pos
            else sym match {
              case sym: TermSymbol => sym.referenced.pos
              case _               => NoPosition
            }
          )
          val why = if (sym.isPrivate) "private" else "local"
          val what = (
            if (sym.isDefaultGetter) "default argument"
            else if (sym.isConstructor) "constructor"
            else if (sym.isVar || sym.isGetter && (sym.accessed.isVar || (sym.owner.isTrait && !sym.hasFlag(STABLE)))) "var"
            else if (sym.isVal || sym.isGetter && (sym.accessed.isVal || (sym.owner.isTrait && sym.hasFlag(STABLE))) || sym.isLazy) "val"
            else if (sym.isSetter) "setter"
            else if (sym.isMethod) "method"
            else if (sym.isModule) "object"
            else "term"
          )
          reporter.warning(pos, s"$why $what in ${sym.owner} is never used")
        }
        p.unsetVars foreach { v =>
          reporter.warning(v.pos, s"local var ${v.name} in ${v.owner} is never set - it could be a val")
        }
        p.unusedTypes foreach { t =>
          val sym = t.symbol
          val why = if (sym.isPrivate) "private" else "local"
          reporter.warning(t.pos, s"$why ${sym.fullLocationString} is never used")
        }
      }
    }

    object checkDead {
      private val exprStack: mutable.Stack[Symbol] = mutable.Stack(NoSymbol)
      // The method being applied to `tree` when `apply` is called.
      private def expr = exprStack.top

      private def exprOK =
        (expr != Object_synchronized) &&
        !(expr.isLabel && treeInfo.isSynthCaseSymbol(expr)) // it's okay to jump to matchEnd (or another case) with an argument of type nothing

      private def treeOK(tree: Tree) = {
        val isLabelDef = tree match { case _: LabelDef => true; case _ => false}
        tree.tpe != null && tree.tpe.typeSymbol == NothingClass && !isLabelDef
      }

      @inline def updateExpr[A](fn: Tree)(f: => A) = {
        if (fn.symbol != null && fn.symbol.isMethod && !fn.symbol.isConstructor) {
          exprStack push fn.symbol
          try f finally exprStack.pop()
        } else f
      }
      def apply(tree: Tree): Tree = {
        // Error suppression (in context.warning) would squash some of these warnings.
        // It is presumed if you are using a -Y option you would really like to hear
        // the warnings you've requested; thus, use reporter.warning.
        if (settings.warnDeadCode && context.unit.exists && treeOK(tree) && exprOK)
          reporter.warning(tree.pos, "dead code following this construct")
        tree
      }

      // The checkDead call from typedArg is more selective.
      def inMode(mode: Mode, tree: Tree): Tree = if (mode.typingMonoExprByValue) apply(tree) else tree
    }

    private def symWasOverloaded(sym: Symbol) = sym.owner.isClass && sym.owner.info.member(sym.name).isOverloaded
    private def cyclicAdjective(sym: Symbol)  = if (symWasOverloaded(sym)) "overloaded" else "recursive"

    /** Returns Some(msg) if the given tree is untyped apparently due
     *  to a cyclic reference, and None otherwise.
     */
    def cyclicReferenceMessage(sym: Symbol, tree: Tree) = condOpt(tree) {
      case ValDef(_, _, tpt, _) if tpt.tpe == null        => "recursive "+sym+" needs type"
      case DefDef(_, _, _, _, tpt, _) if tpt.tpe == null  => List(cyclicAdjective(sym), sym, "needs result type") mkString " "
      case Import(expr, selectors)                        =>
        ( "encountered unrecoverable cycle resolving import." +
          "\nNote: this is often due in part to a class depending on a definition nested within its companion." +
          "\nIf applicable, you may wish to try moving some members into another object."
        )
    }

    // warn about class/method/type-members' type parameters that shadow types already in scope
    def warnTypeParameterShadow(tparams: List[TypeDef], sym: Symbol): Unit =
      if (settings.warnTypeParameterShadow && !isPastTyper && !sym.isSynthetic) {
        def enclClassOrMethodOrTypeMember(c: Context): Context =
          if (!c.owner.exists || c.owner.isClass || c.owner.isMethod || (c.owner.isType && !c.owner.isParameter)) c
          else enclClassOrMethodOrTypeMember(c.outer)

        tparams.filter(_.name != typeNames.WILDCARD).foreach { tp =>
        // we don't care about type params shadowing other type params in the same declaration
        enclClassOrMethodOrTypeMember(context).outer.lookupSymbol(tp.name, s => s != tp.symbol && s.hasRawInfo && reallyExists(s)) match {
          case LookupSucceeded(_, sym2) => context.warning(tp.pos,
            s"type parameter ${tp.name} defined in $sym shadows $sym2 defined in ${sym2.owner}. You may want to rename your type parameter, or possibly remove it.")
          case _ =>
        }
      }
    }

    /** Report a type error.
     *
     *  @param pos    The position where to report the error
     *  @param ex     The exception that caused the error
     */
    def reportTypeError(context0: Context, pos: Position, ex: TypeError) {
      if (ex.pos == NoPosition) ex.pos = pos
      // TODO: should be replaced by throwErrors
      // but it seems that throwErrors excludes some of the errors that should actually be
      // buffered, causing TypeErrors to fly around again. This needs some more investigation.
      if (!context0.reportErrors) throw ex
      if (settings.debug) ex.printStackTrace()

      ex match {
        case CyclicReference(sym, info: TypeCompleter) =>
          if (context0.owner.isTermMacro) {
            // see comments to TypeSigError for an explanation of this special case
            throw ex
          } else {
            val pos = info.tree match {
              case Import(expr, _)  => expr.pos
              case _                => ex.pos
            }
            context0.error(pos, cyclicReferenceMessage(sym, info.tree) getOrElse ex.getMessage())

            if (sym == ObjectClass)
              throw new FatalError("cannot redefine root "+sym)
          }
        case _ =>
          context0.error(ex.pos, ex.msg)
      }
    }
  }
}


Ahhhh oui my dears, love is in the air. Hearts and lips are floating around your face and shop windows are plastered in hues of pinks and reds. Even restaurants have heart shaped foods today. I actually made my fox some heart shaped blackberry pancakes this morning. I could not resist these Kate Spade heart shaped molds I found. You can see more of our funny morning together over on insta stories. It'a a dark rainy winter day here in Tulsa (my fave weather) and I am definitely feeling romantic. My love, Ryan Adams dropped a surprise First Listen on NPR this morning. The new album comes out later this week so it was the best V-day present I could ever ask for. And I spent the day finalizing all the last minute details for my LALALAND themed birthday party and isn't the decor up there just perfect? I cannot thank Fox Fete enough and am so excited for you all to see the final touches here on the blog after the party. Rodge gifted me the LaLa Land soundtrack on vinyl so that's been on repeat too.
While this image is so lovely, the typical Valentine's Day gushiness can come across as a bit annoying at times, especially to the single folks out there. And although some may be spending the day bathing in this holiday's cheesy romance (turn up that Marvin Gaye and get out the best lingerie you have), I thought I would gift all of my readers with some good music. I will also be sharing a list of romantic comedies that were sent over to me in a face-book post today. All about sharing the love!
Here's a playlist with a little something for everyone — even those who hate Cupid's favorite day. Seriously something for EVERYONE. Lin even made me throw a Frank Zappa track on here. HA!
I personally love Eternal Sunshine of the Spotless Mind . But I may be flying solo here!
Amanda Frausto: PS I Love You!
So loves...it is time for me to enjoy some chocolate covered strawberries and sangria (it's my new thing) in a hot bath that my sweetie has prepared!


including, where applicable, the matters specified in sections 113(3A) and 115(6A) of that Act and the following provisions once they are in force, namely section 113(3C)(a) and (b) and section 115(6B)(a) and (b) of that Act(3).
Section 115(5)(ea) is inserted by the Care Standards Act 2000, section 104.
A position is within section 115(3) if it involves regularly caring for, training, supervising or being in sole charge of persons aged under 18. A position is within section 115(4) if it is of a kind specified in regulations and involves regularly caring for, training, supervising or being in sole charge of persons aged 18 or over.
Sections 113(3A) and 115(6A) are added to the Police Act 1997 by section 8 of the Protection of Children Act 1999 (c. 14), and amended by sections 104 and 116 of, and paragraph 25 of Schedule 4 to, the Care Standards Act 2000. Sections 113(3C) and 115(6B) are added to the Police Act 1997 by section 90 of the Care Standards Act 2000 on a date to be appointed.


Duane Shields has become a mixed martial artist whom I admire outside of the cage as well as in. His last fight for Mike Bickings' promotion, Art of War 4, he took a fight against John "Bearcat" Brennan on just a few days notice. Shields lost a unanimous decision on the judges' scorecards, but earned much respect for living the mantra that "fighters fight." Brennan was the hometown prospect who had sold lots of tickets and lost his opponent the week of the scheduled bout. In stepped Shields, with the blessing of his coach, Will Martinez.
Duane trains year round so he is always in shape and willing to mix it up. On October 5, in his hometown of Philadelphia, he gets a fight with a full training camp as he welcomes Bilal Khan to the cage at Art of War 8. I stopped up to Martinez BJJ to see Duane and chat up how life was going and how he feels with a full camp behind him. Check out our interview above.
Duane is not afraid to admit that he's made mistakes in the past. The important thing is that he has learned from them as he has dedicated his life to being a drug and alcohol counselor as well as a full time dad to two beautiful boys who he absolutely adores. Shields is very easy to root for and I'm proud to call him my friend.
I will be cage-side for commentary with my big homie, Justin Haskell and MyMMANews will have up to the minute results and a full recap.


Service Professor is your trusted garbage disposal repair and plumbing service for West Michigan.
Garbage disposals are your convenient kitchen appliance that makes cooking and eating more fun. Who doesn't enjoy creating tasty dishes when you know you don't have to worry about disposing of the scraps afterward. But, garbage disposals get clogged over time. Or the waste line will get coated and blocked with food waste.
If your waste disposal gets clogged and you cannot easily unclog it, our disposal experts are here to help. Service Professor's plumbers in Grand Rapids and across Western Michigan are highly rated for service and workmanship. They'll get your disposal cleared in no time. And if it needs repairs, they can do that too. And when you need to upgrade to a newer model or replace a broken disposer, they are the plumbing professionals to count on.
Problems with Your Garbage Disposal?
If you experience any of these problems, there are some disposal troubleshooting that you can do before calling a plumber. But, if your troubleshooting doesn't work, you can get fast 24/hour service for your Grand Rapids plumbing appliance repair company – Service Professor. Our plumbers have the necessary skills and tools to quickly fix your disposer and make life more convenient.
There are some issues that you can quickly address yourself without needing to call a plumber. This is especially the case if the garbage disposal is humming but not working properly.
1. Locate the reset button at the bottom of the garbage disposal and press it.
2. If this doesn't work, then switch off the power to the disposer and check to see if anything is blocking the drain. You may need to use a flashlight to see better. If there is a foreign object blocking the drain, then use a pliers or other tool to remove it. DO NOT stick your hand inside the disposer.
3. If there is nothing blocking the drain, the block may be at the bottom of the disposer. If this is the case, then find the garbage disposal hex wrench that may have come with your machine. This tool can be used to unjam the disposal at the bottom of the disposer.
4. If you are still unable to get the disposer to work, then contact Service Professor and have one of our plumbers take a look at it for you.
Sometimes the disposer cannot be fixed. And you will need to install a new garbage disposal unit. If you don't want to deal with the hassle of learning to install a disposer yourself, then contact Service Professor in Grand Rapids to help you get it done quickly.
Our expert plumbers will make the garbage disposal process very efficient and have you using your new disposal unit in no time.
Searching for "garbage disposal installation near me" in Grand Rapids? Then look no further than Service Professor. We offer garbage disposal repair and replacement services across Grand Rapids and a great portion of Western Michigan. Let our plumbers quickly get your disposal unit working again.
Give us a call at 616-871-1900616-871-1900 for 24/7 emergency garbage disposal repairs in Grand Rapids.


text:
4311 Zguridi este un asteroid din centura principală, descoperit pe 26 septembrie 1978 de Liudmila Juravliova.

Legături externe

 4311 Zguridi în JPL Small-Body Database
 4311 Zguridi în baza de date a Minor Planet Center
 Diagrama orbitei asteroidului 4311 Zguridi (JPL)

Obiecte astronomice descoperite în 1978
Centura de asteroizi

redpajama_set_name: RedPajamaWikipedia


Alkycontrol Methanol Injection kit for the CTSV platform. This is the best kit on the market for the CTSV. Features Custom made hoses, fittings, wiring, instructions etc. Modified Pump 250+ PSI, protective cover to keep water from intruding into motor, custom built Progressive controller preset for the LS based platform. Custom Relay to transfer power from Fuse box to controller eliminating any interference from the system and vehicle electronics. 3 teflon lined braided hoses with pressed on ends custom length. Hose feature AN fittings. Meaning a wrench is needed to install and secure hoses. No push-in deal. This is a complete kit. Down to the custom tank fitting and grommet for the reservoir, cap for reservoir, plug for ww pump, stainless..... See All Info for more.


Lets say I have 4 loops in 4 tracks in one session.
I am able to see all the four tracks in the session..
Is there any way / setting where i can start track 1 and the moment i click track 2, track one should stop?
meaning at one time if i want only one track to play in loop, and the moment i click another track, the previous one should stop and this starts.
I am sorry if this is redundant, but I am new here, and tried searching the forum but didnt find this anywhere.
Can i use SampleBot with BT4 to trigger tracks?
was not referring to group functionality... just want a setting in which loop 1 stops when loop 2 starts.
@Bandbaaja - what might work for you, depending on the tracks, is turning on "Count-in/out Mute". You still have to touch both tracks, but any time during the loop, causes the touched track to mute/unmute when it reaches the end/beginning or the track. If the tracks are really short then it doesn't really help. If the tracks are different lengths it can still work if the lengths are multiples ( a bit more difficult).
This is of course assuming you are using "synchronized" mode.
May be useful, may not.
I'm a new user. I am looking for (and cannot find) the possibility to arm a track so it would start the recording when a signal gets in.for the first layer of course.
Welcome @Soob - there is no auto/threshhold trigger to start recording on sound. Currently, practice is the only solution, unless you want to set up the tempo before you start, use the metronome and set count-in ON. But then of course you must play to that tempo on the first loop also.


text:
Fox Talbot photograph of Brunel's Hungerford bridge to go on display
Fragile image of short-lived suspension bridge to come out of climate-controlled store for month as part of exhibition
Maev Kennedy
Wed 21 May 2014 08.03 EDT First published on Wed 21 May 2014 08.03 EDT
The 1845 image of Hungerford bridge marks William Henry Fox Talbot's first success in permanently fixing a photographic image in a salt print. Photograph: Museum of London
A unique photograph as wispy as a cobweb and almost as fragile is to go on display for one month, in a specially darkened room, before it must go back into its climate-controlled store.
The image dates from 1845, the oldest in the vast collection of the Museum of London, and it marks two points in history: the pioneering amateur photographer William Henry Fox Talbot's first success in permanently fixing a photographic image in a salt print; and Isambard Kingdom Brunel's newly completed Hungerford bridge.
The photograph shows Thames barges moored below the piers and giant chains of the pioneering engineer's radical suspension bridge, just short of 457 metres (1,500ft) long, which was designed to allow horse drawn carts cross the river to Hungerford market.
Like many of Brunel's most ambitious projects, including his tunnel under the Thames further downstream, it was a financial disaster: it opened just as the railway era dawned, soon making both the structure and the barges obsolete. His piers survive as the foundations of the modern footbridge flanking the 20th-century railway bridge, and the magnificent chains were recycled into his most famous bridge at Clifton in Bristol.
Fox Talbot, a wealthy gentleman amateur scientist, recognised as one of the fathers of photography, did not have to worry about commerce.
He had published his work on photographic processes in 1839, and published the first book illustrated with photographs. His solution to the problem of converting a negative – taken with one of the cameras built by his estate carpenter – into a permanent positive image was the precursor of techniques which would endure until the advent of digital photography.
Although his 1845 print of Hungerford bridge survives as a thing of beauty and scientific interest, it is extremely fragile, and already faded by exposure to light.
It was judged impossible to display in the decades since the Museum of London acquired it but has now been cleared for inclusion in the exhibition on the history and art of Thames bridges, which opens next month at the museum's branch in Docklands.
Francis Marshall, curator of Bridge, said he was incredibly excited by the decision include it in the show.
"By contrasting the old barges in the foreground with Brunel's new iron bridge, Fox Talbot highlights the technological advances of the 19th century," said Marshal. "The photographic process he pioneered would dominate image-making for the next 150 years, until the dawn of digital photography. In a way, he is responsible for the way in which we see the world today. Ironically, Brunel's bridge was demolished within 15 years to make way for a railway crossing."
It will be on display only for the first month of the six-month run of the exhibition, in a darkened space in which visitors will be able briefly to illuminate the image created by a science which would transform mankind's view of the world, recording a city about to be changed forever.
• Bridge, Museum of London Docklands, 27 June to 2 November
Letters reveal Isambard Kingdom Brunel's pollution concerns
Engineer worried factory waste was contaminating Bristol water supplies, papers show
Published: 2 Apr 2019
World's steepest funicular rail line to open in Switzerland
Schwyz-Stoos funicular, hailed as triumph of engineering, goes into service on Sunday
Being Brunel museum opens on Bristol harbourside
New £7.2m attraction celebrates Isambard Kingdom Brunel's work and life through previously unseen artefacts and a journey into the mind of the great engineer
Light at the end of the tunnel: sun shines for Brunel's birthday
Rail staff confirm legend that rising sun shines through Box tunnel in Bath on birthday of Isambard Kingdom Brunel
Man of Iron: Thomas Telford and the Building of Britain by Julian Glover review – the colossus of roads
European leaders open world's longest rail tunnel in Switzerland
Published: 1 Jun 2016
Brunel's Atmospheric Railway
Uncovering the lives of women in science and technology: the case of Sarah Guppy

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Failing to format flashdrive to UDF I'm trying to create a UDF partition on a flash drive to install grub2 (to boot ISOs from)
~$ export DSK=/dev/sdd
# wipe the disk
~$ sudo dd if=/dev/zero of=${DSK} bs=512 count=2048
~$ sudo sgdisk --zap-all ${DSK}

# create partition for udf
~$ #sudo parted -s ${DSK} mklable msdos
~$ #sudo parted -s ${DSK} -a optimal unit MB -- mkpart primary 1 -1
~$ (echo o; echo n; echo p; echo 1; echo ; echo ; echo t ; echo 6 ; echo w) | sudo fdisk -b 512 ${DSK}

~$ sudo mkudffs --media-type=hd --blocksize=512 ${DSK}1
trying to change type of multiple extents

A: I had the same error with mkudffs on a partition, but on the device itself it worked flawlessly. Running strace on mkudffs showed that it was seeking to a few places and trying to read 1 byte, but getting nothing back. dvd+rw-format flat out refused to work on partitions.
What worked for me was to create a UDF filesystem essentially anywhere, in this case the USB stick without a partition, /dev/sdd
mkudffs --media-type=hd --vid=VOLUME --lvid=VOLUME --blocksize=512 /dev/sdd

save at least the beginning of that filesystem somewhere:
dd if=/dev/sdd bs=1024 count=40000 | gzip > /tmp/udf

create the partition (of type 6):
fdisk  /dev/sdd

plaster the partial, non-fitting filesystem on the partition:
gunzip -c  /tmp/udf  | dd of=/dev/sdd1

then make a proper filesystem:
mkudffs --media-type=hd --vid=UDF32GB --lvid=UDF32GB --blocksize=512 /dev/sdd1

A:
trying to change type of multiple extents

This problem should be fixed in the last mkudffs 2.0 version from udftools project.
Make sure that partition which is going to be formatted as UDF has at least 300 sectors. Partitions/disks with less sectors cause problems for UDF.

redpajama_set_name: RedPajamaStackExchange


text:
Late diagnosis linked to poor survival in elderly breast cancer patients
Older women are less likely to survive breast cancer than their younger counterparts, largely because their disease tends to be diagnosed at a later stage, new research in the British Journal of Cancer shows.
Scientists analysed data on more than 14,000 women with breast cancer between 1999 and 2007.
The women were divided into four age groups and the researchers found that those diagnosed between the ages of 50 and 69 had an 89 per cent chance of surviving for five years.
For those diagnosed between the ages of 70 and 74, five-year survival dropped to 81 per cent, while women who were over 80 when they were diagnosed had just a 70 per cent chance of living for five years.
The research also revealed that ten per cent of over-80s were diagnosed at a late stage in their disease, compared to just three per cent of 50 to 69-year-olds.
Women who were diagnosed at a late stage only had a 14 per cent chance of surviving for five years.
Study author Dr Paul Pharoah, a Cancer Research UK-funded scientist at the University of Cambridge, said: 'This study suggests that improving the way breast cancer is diagnosed and treated in the elderly could mean fewer die prematurely from the disease.
'More needs to be done to raise awareness of the disease in older women who are not automatically invited for mammograms, especially since risk of the disease increases with age.'
Women over the age of 70 are not routinely invited for breast screening, but are advised to request an appointment every three years.
Poor 'less likely to survive breast cancer'
Late diagnosis 'common' in urinary cancers
Patients 'confused' by cancer diagnosis
Survival rates for lung cancer are 'poor'
Late cancer diagnosis 'claims thousands of lives'
Study finds factors affecting late cancer diagnosis


text:
VISIONS OF PLACE: CITY, NEIGHBORHOODS, SUBURBS, AND CINCINNATI'S CLIFTON, 1850–2000
by ZANE L. MILLER
Library of Congress Classification HT168.C52M55 2001
Dewey Decimal Classification 307.33620977178
Almost every American city has or had neighborhoods like Clifton, which developed in the mid-nineteenth century as a silk-stocking suburb with a more diverse population than most observers noticed. Incorporated by Cincinnati in the late nineteenth century, Clifton had a reputation as a better-than-average place in which to live, a view that persisted until the end of the twentieth century.
In Visions of Place, Zane L. Miller treats ideas about the nature of cities—including their neighborhoods and their suburbs—as the dynamic factors in Clifton's experience and examines the changes in Clifton's social, physical, civic, and political structure resulting from these transforming notions. These structural shifts involved a variety of familiar nineteenth- and twentieth-century urban phenomena, including not only the switch from suburban village to city neighborhood and the salience of interracial fears but also the rise of formal city planning and conflicts among Protestants, Catholics, and Jews over the future of Clifton's religious and ethnic ambiance.
Miller concludes with a policy analysis of current and future prospects for neighborhoods like Clifton and the cities and metropolitan areas of which they form a part.
Zane L. Miller is Charles Phelps Taft Professor of History Emeritus at the University of Cincinnati. An internationally renowned historian and past president of the Urban History Association, he is co-author of Changing Plans for America's Inner Cities (The Ohio State University Press).
1. Transforming Clifton: The New Suburban and Neighborhood Idea, 1870s–1910s
2. Preparing for the Worst: Comprehensive Planning for the End of Clifton, 1910s–1950s
3. Establishing Clifton as an "In-town Suburb," 1955–1964
4. Toward Community Control, 1964 –1974
5. Making a Comprehensive Neighborhood Plan, 1974 –1982
6. Implementing the Plan: The Politics of Neighborhood Autonomy
Epilogue: Race and the Future
Appendix: Methodological Note on "Liberation" History
See other books on: Cities and towns | City planning | Growth | Neighborhoods | Ohio
Nearby on shelf for Communities. Classes. Races / Urban groups. The city. Urban sociology / City planning:


Owning a cars and truck is extremely helpful as it assists in very easy and also efficient transportation from one point to the other. Regrettably, all cars and trucks are prone to experiencing some issue at some time. These problems may be as a result of deterioration, crashes among other aspects. Consequently, your cars and truck could need routine repair work and maintenance. If you own a foreign car such as a Subaru, Audi, Toyota, and also Acura, they require the solutions of an expert as a result of their one-of-a-kind make.
There are numerous solutions that import auto repair service experts could give. They include transmissions, battery billing as well as beginning, repair services to brakes and also the clutch or changes to the air conditioning system as well as air conditioning. When your foreign auto breaks down, it may also be a sign of an engine issue, failing of the exhaust system or a wear and tear on the tires. All these issues should be addressed by a very- knowledgeable specialist that has actually concentrated on import car repair.
To add on that, the parts as well as the systems of these cars are different from that of autos manufactured in the USA. For example, the automobile parts of a Chevrolet are not the same as those of a Volkswagen or an Acura. Subsequently, such vehicles demand certain tools and also tools for compatibility. For this reason, exclusively, you need to take into consideration trying to find a specialist that manages import auto repair service as they recognize the ideal components, tools, and devices that are necessary for the repair work of cars such as Audi.
Also, you obtain accessibility to highly-trained professionals. This is a much better choice compared to investing money on auto mechanics who have not focused on the fixing and maintenance of import automobiles. Given that these professionals will be able to easily work on the repairs, you will eventually save money.
An additional advantage of accessing their solutions is that they can take you with the basic maintenance of the import car. As currently specified, a few of the problems that could influence such cars and trucks are intricate. During the repair service of your car, you stand a possibility to benefit by learning exactly how the components can be properly maintained to make sure that your car does not break down regularly.
Finally, it holds true that specialists are the most effective at managing your import car repair services. Their performance at doing repairs to a few of the European and also Japanese automobiles is outstanding. As a result, you need to think about having a specialist working with the repair of your automobile as you will enjoy with the quality of the solutions.


The Business Office main phone number is (615) 886-4733. This number can be utilized when patients are calling to inquire about their billing concerns. Each patient calling this number will have the convenience of having their basic billing questions (e.g., account balance, when and to whom account was billed, payments received, etc.) answered by our 24-hour/7-days-per-week electronic phone service. Of course, if you prefer you may speak to a patient account representative.
Our Business Office is open to take calls from 8:00am to 4:30pm Central Standard Time. As noted above, our Electronic Phone Service can answer basic patient billing concerns 24 hours/7days a week. Please remember that we have a financial counselor and cashier to answer all your billing concerns.


text:
Apple Maps recovers from multi-hour partial service outage affecting search & directions [u]
By Malcolm Owen
Friday, June 15, 2018, 07:37 am PT (10:37 am ET)
Apple Maps endured a multi-hour partial service outage on Friday, with a large number of users unable to use the navigational functions to get directions on the iPhone, iPad, Apple Watch, and Mac versions of the app.
Starting from 10am eastern, attempts to request a route failed to work, with Apple Maps displaying the warning message "Directions Not Available, Route information is not available at the moment." In some cases, searches for locations are failing to work properly.
AppleInsider's testing found the issue is not limited to a specific country, with errors appearing in searches placed in the United States, Canada, the United Kingdom, and other areas.
At 10:29am eastern, Apple's System Status page indicated there were no issues with the Maps Display, Routing and Navigation, Search, and Traffic services. At 10:59am eastern, issues were highlighted for the Maps Search and Maps Routing and Navigation services, and that they were under investigation.
At 1:20pm eastern, AppleInsider staff noted direction queries started working again. At 1:30am, Apple updated its System Status page to advise it had "investigated and resolved the issue."
AppleInsider spoke with an Apple data center employee who told us at 10:49 a.m. Eastern time that there was "nothing obvious" going on at that moment.
While the initial issues related to Apple Maps, it seems the issue also had an impact on other apps that rely on Apple's location services. In some instances, such as weather apps, the inability to determine the location also prevents local weather results to be fetched and displayed.
This is a developing story. AppleInsider will update as events warrant.
Apple & tech's disproportionate share of S&P index raising eyebrows
Here are over 150 new features and changes in iOS 12 for iPhone and iPad


text:
Alzheimer's Educational Video: RI Experts on What You Need to Know
Mar 17, 2020 | Alzheimer's Resources, Featured Resource
Looking to learn more about Alzheimer's symptoms, prevention, treatment, resources and research? Watch this Alzheimer's educational video featuring a panel discussion hosted by the Cranston Senior Enrichment Center. The discussion includes Alzheimer's experts from the Memory and Aging Program at Butler Hospital, the University of Rhode Island's Ryan Institute for Neuroscience and Rhode Island Geriatric Education Center, the RI Mood and Memory Research Institute, and the Alzheimer's Disease and Memory Disorder Center at Rhode Island Hospital…
Browse more Alzheimer's resource articles in the Resources section of our blog!
If you're 40+ with normal memory or mild memory loss, you can help in the fight against Alzheimer's. Here's how: butler.org/ALZregistry
Groundbreaking Alzheimer's Study Administers First Dose
The first infusion of an investigational drug that aims to delay or help to prevent the earliest memory loss due to Alzheimer's disease took place in September at Butler Hospital in Providence, R.I., researchers announced.
Passion for Fitness Fuels Sam Slezak's Leadership in National Study to Protect Brain Health
Sam Slezak originally set out to become a trainer for professional athletes. Here's how and why he became a project manager for a landmark national Alzheimer's study instead.
Dr. Hwamee Oh Awarded NIH Grant for Study of Neuroimaging Markers of Early Alzheimer's
The study seeks to identify new cognitive and neural biomarkers of preclinical Alzheimer's disease, which would aid in earlier diagnosis and interventional treatment for the disease.
Katie Brandt Shares 5 Critical Dementia Caregiving Tips
Caregiver to both her young husband and her father with dementia, now she's supporting others in the caregiver journey.
Butler Hospital among first in U.S. to launch new study of promising Alzheimer's treatment
AHEAD 3-45 is a clinical trial for a treatment aimed at preventing cognitive decline in people with preclinical Alzheimer's Disease (AD).
The Fight Against Alzheimer's Continues Amid Coronavirus
MAP Director Dr. Stephen Salloway, along with other international leaders in the fight against Alzheimer's, talk with the Providence Journal and WJAR NBC10 about how the fight to end Alzheimer's continues despite coronavirus.
Drug studied at Butler Hospital could become first to meaningfully change course of Alzheimer's
Aducanumab, an investigational drug for the treatment for Alzheimer's disease, has been submitted to the FDA for approval with a request for Priority Review. If approved, it would become the first therapy to reduce the clinical decline of Alzheimer's disease.
RI Chosen as 1 of 5 Sites for First Nationwide Study of Lifestyle Intervention to Reduce Risk of Cognitive Decline
The U.S. Study to Protect Brain Health Through Lifestyle Intervention to Reduce Risk (U.S. POINTER) is sponsored by the Alzheimer's Association and is the first such study to be conducted in a large, diverse group of Americans across the United States.
Can smartphone technology detect preclinical Alzheimer's? New study aims to find out.
Louisa Thompson, Ph.D., research scientist at Brown University and Butler Hospital, will evaluate how app-based and online cognitive tests might be used to detect subtle changes in memory and thinking associated with Alzheimer's.


Since the release of RFEM 5, the 'Result Beam' member type has been available. The result beam is a virtual member that does not have any stiffness nor require any support. It can be used in various situations in order to integrate the results from members, surfaces, and solids, and to display them as member internal forces.
A quadratic integration area is used, whose centroid is located in the member axis.
A rectangular integration area is used, whose centroid may vary.
A circular integration area is used, whose centroid is located in the member axis.
Only the elements for evaluation are used, which are in the list of 'Including Objects' and are within the possible effective area (see below).
If the integration area overlaps the objects which should not be taken into account, these objects can be defined in the list 'Except from Including Objects'.
A result beam can only provide results of the elements located within a rectangular axis of the member start and end. All elements outside these boundaries are not taken into account.
This is illustrated in Figure 01: The results do not apply to the areas marked in red. The turquoise areas were manually modelled as auxiliary areas and represent the boundaries of the result beam.
For the internal forces of the member, it is irrelevant which cross‑section is used. So if you want to apply the result beam to only determine the internal forces, you can use any cross‑section. However, if you want to perform further design in the add‑on modules such as RF‑STEEL EC3 or RF‑CONCRETE Members, the cross‑section plays an important role and thus should be specifically defined.
Since the distribution of internal forces is not much reliable, it is necessary to set a higher number of member divisions for result diagrams in the global calculation parameters.
For the internal forces N, Vy, and Vz, the parallel distance of the result beam to the centroid of the including objects does not matter. So if you want to only evaluate the axial and shear forces, you can model the result member on or above the structure to get a clear display.
However, it is crucial for the internal forces Mt, My, and Mz to place the result beam in the centroid of the including objects. In addition to including moments, the axial forces multiplied by the distance of each FE mesh point are added to the centroid of the result beam.


Tudor and Black are based in East Anglia. We specialise in car renovation and the storage of motor vehicles; You can rest assured that all vehicles are stored in a dry modern facility with round the clock protection. With manned personal and otherwise when unmanned the security is directly linked to Red-Care and the police. We (John Smith) have had 40 years restoration experience in restoring all types of classic cars. We specialise in Aston Martins, Bentleys, Rolls Royce, and Jaguars.
Fire protection is fitted of exacting standards as required by our insurance and linked directly to our security system with all the benefits. The company has an insurance to the value of £14 million so you can only imagine the precautions that are required hence the extra fire and security. Most importantly the Company provides a planned maintenance program which is essential to the vehicle's well being.
These vehicles are a valuable commodity and without regular servicing could create lasting damage. This facility is tailored to the customers needs with a current MOT check which allows the customer to take their vehicle for a spin when required. The company also provides a delivery and collection service in covered transport, notice is always nice. Meet and greet at airports with your treasured vehicle can be arranged.
Alec Slade is pleased to announce his move to Tudor & Black, after 40 years specialising in both mechanical and restoration of Aston Martin cars from his own business workshop. His vast knowledge and experience undoubtedly will be an asset to the operations and expansion plans of John Smith at Tudor & Black Leiston. We have just recently completed restoration of a DB4 and a DB5 so the total of expertise of John and Alec combined will inevitably become a leading force in East Anglia. Alec will run independently at Leiston and Johns work on Aston Martins, will in future be conducted by Alec who formally traded as Excalibur of Beccles Suffolk.
This exceptional DB4 is a historically important Aston Martin being the first Series 3 car produced and the factory demonstrator. According to a copy of the original build sheet, which accompanies the car, it was constructed in April of 1961 and fitted with a number of special options from new including overdrive, oil cooler and chrome wire wheels.
Built in 1939 and featuring coachwork by Carlton Carriage Co., the Daimler was used by the Prime Minister (Winston Churchill) during his election campaigns in 1944 and 1949. With a top speed of 76mph, the drop head Coupe uses a four-speed Wilson pre-selector in tandem with a Daimler Fluid Flywheel rather than a conventional manual or automatic gearbox. Gears are selected by hand before a "change pedal" is used to enact the shift.
For more information visit or for a personal consultation please give us a call.


We Track enlisted me to design & develop a brand new mobile/tablet friendly website whilst simultaneously refreshing their current brand & style. This Cardiff based business needed a fresh & current look to improve their online presence.
The site has been a great success and has helped We Track to generate new business.


text:
This website uses cookies. By accessing or using this website, you acknowledge that you have read, understood and agreed to these Terms of Use and you consent to our use of these cookies. Read more about our use of cookies.
Main navigation (without target group)
More about Peyronie's disease
Treatment of Peyronie's disease
How to talk to your partner
Listen to the expert
John discovered that he had Peyronie's disease in his late fifties. For him it seemed that the curvature appeared out of the blue. Here is John's story.
"Painful, uncomfortable, not looking forward to sex."
When did you start to notice symptoms of Peyronie's disease?
- The first time I noticed Peyronie's in myself was in my late fifties. It seemed to me at the time that it happened overnight, that one minute I had a normal erect penis and then almost out the blue – suddenly – I had what turned out to be a 65-degree bend.
How did it affect you?
- The penis was pointing almost straight at my navel, and was bent more or less halfway along this length. That's not how my penis was supposed to look. Psychologically it's very dismaying to suddenly experience this thing. A man's erect penis is a pretty fundamental part of his self-concept, I discovered. And when it wasn't the way it ought to be, in the actual fact to have an erection was uncomfortable bordering on painful. Also, just the appearance of it. I didn't like the way it looked. I didn't like the way I felt. It was undermining in quite a profound way. Particularly because I was in a relatively new relationship and sex was a pretty important part of that.
How would you describe Peyronie's disease?
Horrible, painful, uncomfortable, not looking forward to sex, not looking forward to sexual stimulation. That's a really weird thing, that's a really weird position to be in. It's totally counter to the way a human being is supposed to function. I didn't want to be sexually aroused, what about that? It's not fun.
What advice can you give to somebody who suspects Peyronie's disease?
- The most important advice I can give somebody who discovers they have Peyronie's is to find somebody to talk to who knows about it. There are an awful lot of people who don't. I encountered several of them before I found somebody that did understand it, that did know what treatments were available. I was told by my GP that there was no cure, no solution apart from surgery and to go home and get on with my life. I didn't. I consulted Dr. Google, did a little bit more research and then eventually found someone who did understand and did know what the options were.
Swedish Orphan Biovitrum Ltd
Tel: +44 (0) 1223 891854 | Suite 2, Riverside 3, Granta Park, | Great Abington, Cambridgeshire, CB21 6AD
NP-4300 | Date of preparation: May 2018 | Terms of use | Contact us | Privacy Policy


Ian Bremmer is an American political scientist and writer. He was born in 1969. He is the president and founder of Eurasia Group and a professor at Columbia University. His books include, The J Curve: A New Way to Understand Why Nations Rise and Fall, The Fat Tail: The Power of Political Knowledge in an Uncertain World (co-authored with Preston Kent), The End of the Free Market: Who Wins the War Between States and Corporations?, Every Nation for Itself: Winners and Losers in a G-Zero World, Superpower: Three Choices for America's Role in the World, and Us vs. Them: The Failure of Globalism.


It's easy to enjoy this TV console's on trend, industrial style. This piece blends hand distressed wood and metal into one cohesive, contemporary design, allowing it to suit living spaces across the style spectrum. With two lower drawers and two shelves, this console also provides concealed storage and open space for display.
The Chandler Contemporary Industrial TV Console with Distressed Finish by Simmons Upholstery at Royal Furniture in the Memphis, Nashville, Jackson, Birmingham area. Product availability may vary. Contact us for the most current availability on this product.


Send hugs and kisses to your sweetie - the chocolate kind, of course! This gift box features Hershey's Hugs and Kisses, truffles, chocolate biscuits and Turkish delight.
Click the button below to add the Hugs and Kisses to your wish list.


Coming back to the topic... Today I decided to spend my time off 1 hour when the kids are at class in this park. Every evening I choose different ways to pass the time. Not going to delve into that right now.
Today for some reason the park invited me... I had actually planned for a nice chi-chatting-walkathon with a newly found friend, but it so happened that she was occupied otherwise... So I ended up with myself, walking and chitchatting with my non stop thoughts..
Today for since reason the park looks more lovely and beautiful than it ever did. Is it because I am actually 'SEEING' it today?.. Most days I am so engrossed in the music or the walking speed.. But today I looked around and took in the sights, not the sounds.. For I had the most musical pieces of MS playing in my ear.
This area is filled with stone really elegantlly looking people, mostly aged and middle aged.. Except for the play area which is filed with the cutest of tiny tots. This is indeed a very well maintained park... Beautiful adorned with very very lush and thick and colourful bougainvillea on the sides of the park.. Green plants all around and inside the park. One small area cornered off and filled with pebbles for 'accupressure' walk experience.. One small area with exercise equipment for adults.
Along the walk itself many neat small benches.. Here I saw a gang of uncles chatting and laughing off - enjoying the best times of their lives - an aunty meditating, a married couple rejuvenating their relationship, a passionate lover couple trying to restrain their passion, could of parked wheelchairs with few unfortunates who can satisfy their basic need to walk only by observing others... Few prams and their proud parents walking or playing with the giggling babies inside..
Though all our trips are planned almost a year in advance, there are occasions where we surprise ourselves by planning a weekend trip just two or three weekends in advance. Ahem! I think the day we plan a trip in the morning and start in the afternoon will probably never come - i think that is being too impulsive - for my character. So, that was how the trek to Kudremukh was planned for the weekend of Pongal, only after the year began. One moment R said shall we go, second moment a call went to our friends S&L and 3rd moment the search for homestays and 4th moment the homestay confirmed.
The toughest part was to convince the little ones to bunk school on Monday. I think by now they have gotten to use just how irresponsible parents we are when it comes to have 100% attendance in school - that they did not kick much fuss.
All was good. Early morning, packed to the hilt we started off in our little red wagon, enjoying the awesome weather and drive to Kudremukh. On the way we stopped for breakfast at a new place called "Dhruvathare" suggested by S and it indeed turned out to be a lovely place with good food and nice restrooms and a small play area in the front for the kids. It was also packed to the hilt and we actually had to wait to get a place to sit.
A little after this stop, we encountered and awesome sight. The area was so fogged that we could hardly see 50 meters in front of the car. We drove this way for nearly 2 kms and it was great fun.
Most of the journey was on the Chikmagalur Road. At Kottigehara, we took a turn towards Kudremukh to enter the ghat section. This section of the road , until we reached Kalasa is one of the most beautiful ghat sections that I have driven on. We could not enjoy the onward journey as much as enjoyed the return because of Little Mili's motion sickness and throwing up issues. We managed to stop at a beautiful road side tea plantation and too some really cute pictures. On this route is a very charming little Coffee shop - which sells one of the most amazing coffee powder I have ever had. Their house - which is a vision of green - is adjacent to the shop and is a wonderful place to view. And the best part I found recently is that he can ship the powder to Bangalore also.
Soon we reached Balagal. Here we parked our cars and got into the Jeeps that our "Resort" provided to reach their place.
I have been to my fair share of these homestays that are situated high up in the hills or low down in the valley (Jhari Eco Valley) , that the only means of transportation is their own Pazhai kalam jeeps (the types that Rajesh khanna would go about singing - Mere Sapnon ki rani .. or Chala jaata hoon ... except that the driver would be nowhere comparable to Rajesh Khanna). But this is my far the most bumpiest and most toughest ride I have ever experienced.
The ride is about 2 - 3 - 4 Kms ? sorry i forget the number; but it feels like eternity - before we reach the slope that deposits us in the feet of the homestay.
My feelings about the homestay started with something and changed into something else over the course of our stay here. Mind you, like I do as usual, this time I had done no research about this place that the Mr. had booked. So let me start from the beginning. A flight of rocky steps lead upto a big large courtyard , where there were coffee beans scattered in a neat long patch to dry. We found a few tents set up around the courtyard.
We reached there at about 3 in the afternoon and the place was totally deserted.
There was a huge house with a large verandah and a couple of rooms set away from the house adjoining the verandah. On the first floor we could see large rooms akin to a dormitory.
The entire place was surrounded by greenery and mountains as far as the eye could see.
It seemed more like a house than a homestay - if you get what i mean. After calling for a few mins, a tiny lady came out and we managed to convey to her that we have come to stay for two days and would like some lunch. Unfortunately for the "communication" skills of the Mr. , apparently it seemed that they did not expect us for lunch and we were STARVING!!! ... She said she will arrange something and went in. When you are keenly waiting for something , time just seems frozen and it was the same for us and no matter how much we tried, we could not make any small talk.
Then she arrived with few buckets, followed by another man helping her with some more buckets. It was a very simple meal - rice , sambar , palya, buttermilk and papad. But boy! was it the most tastiest meal that we had ever eaten. Almost all of the adults took more than 3 servings !!! The Mr. who would not touch rice with a 10 feet pole ate 4 whole servings !!!!
The place is a very very simple and rustic place. The two rooms that we were given were quite dingy and the bed very simple and small. They dont have a great mattress or pillows. Since the beds couldnt accomodate us 4, when we asked he directed us to use the thermocol sheets that would serve as mattress. For the average tourist who has never trekked or stayed in "trekky" places, this would be a big put off. But there is a reason why the place is so rudimentary. As Mr.Rajegowda explained - this place is only used by trekkers and predominantly in the moonsoon season where the entire place is crawling with leeches - it made no sense in investing in good mattress etc - which would never clear well nor dry well in incessant raining periods. When he put it that way it made sense.
There was a very 'Alice hole' kind of bathroom attached to the rooms where there is no hot water. But there are two common bathrooms outside the main house where the hot water is just too amazing - fed from wood fires. Especially after a long sweaty tiring trek. Though it is a shame that the trekkers just dont bother to dispose off their soaps packets / shampoo bottles.
The food is very simple - mostly consisting of Rice, a sambhar and rasam , palya , papadam and very watery curd. If you request they make the most awesome egg burji and a non veg dish - i cannot vouch for the taste of this one. Coffee and tea that is served in the morning and evenings is very sugary. It was the first time that the kids were eager to drink the beverage - no doubt!!!
Rajegowda, his wife and the few helpers they have around are very helpful folks - of course you must know Kannada to converse with them. Rajegowda can manage a bit of Hindi. We found them to be very obliging to any reasonable requests we had.
In the evenings it became very very cold and by around 6 we would start to shiver. We would wait impatiently for the next half hour to pass and darkness to fall , for then would light up the bonfire. There are very few chairs around in that place, so we would first pounce and get all the chairs and occupy them and spend the next 2 hours or more roasting in front of the first, impatiently waiting for hot dinner to be served. Dinner was mostly the same fare as lunch with rotis and one subzi added extra. Once again - very simple yet very tasty food.
Now the Trek - It is probably one of the most beautiful treks I have ever been on. Mainly for the fact that no matter which part of the trek you are in, you will be able to see your destination looming clearly ahead of you. It is also a very beautifully maintained trail - thanks to the 'No Plastic' rule and the fact that there is a guide that is appointment by the government to accompany you.
The mountain is called so because it is shaped like the profile of the back of a horse - with trees dotting the mountain to look like the horse's mane and tail. It is a moderate to strenuous trek with many climbs and descents - both of them being quite steep. It is better to start for the trek very early in the morning - we started at 7:45, as the amount of cover along the way is limited and very sparse. Despite reaching the top at 11:15 and starting back nearly at 12 and having hats - we adults all got sun burnt on our head or shoulders. The first time I even got sun burnt - so did not even know it was sun burn that was causing my shoulders to burn.
Almost after halfway the walk up, there are few streams that you can refill your bottles from. There is enough flat space on the top to sit and enjoy quiet moments.
We came back from the trek, tired and famished - to enjoy some nice onion pakoda and sugary coffee. Refreshed after a very hot bath - we settled in front of the fire again and enjoyed our last night at the homestay.
I am almost tempted to want to do the trek again in monsoon, but just cannot stand the leeches. Let us see if there is a change in mind.
Small Pleasure of Life ..
... watching the sun rise while you cycle ..
... Soaking in the sight of this beautiful Tabibuea Rosea, which last for just mere weeks in the streets of Bangalore.
Last weekend we had been to our college friend L's new place and I was stumped by how lovely she had kept her house. It was no surprise for she had always been a stickler for neatness. After coming back, I carried a bit of the "clean bug" with me, I suppose, and looked at disgust with the dust laden shelves under the TV which contained an un-used DVD Player and a grandfather VCR ( I am not even sure anybody remember those anymore) and decided to declutter.
My first recollection of video tapes were I think when I was in class 6 or 7. We had this shop near home where we could rent the VHS and the tapes for a period. My parents would rent the VHS and some movie tapes for the weekend and soon we decided to buy our own one - as buying one turned to be more economical than the renting. My dad researched a bit and we bought a VCR and our first VHS tape on which we could record movies from the TV. I still remember the enthusiasm I felt when we got it all hooked up and set up the VCR for recording and recorded our programs. There started the awesome journey of recordings ... We soon learnt the magic of timed-recording, which helped us record movies and programs when we were out of home. Late Night New Year programs, missed episodes of Chitrahaar (remember how excited we were to be shown the 1/10th of a new song that would be released another month later), sunday morning cartoon shoes on DD... all of these would get recorded. Funny, we were never a "serial" loving family else we would by now have had zillion tapes containing all the episodes.
Then came the phase when I bought my first video recorder in 2003 and recorded the entire of New York for my parents. They were so enamoured by it that my dad had got it transferred to 2 or 3 VHS tapes so that they could play it again and again in bits and pieces. Amma and me are great fans of 'Heidi' - so when I went to the USA for the first time, I bought her the original movie where Heidi is played by the famous child actor Shirley Temple.
One well loved 'dog-eared' VHS tape I found was of Tom and Jerry cartoons - I did have a super collection of those well loved shows which was a great source of entertainment in days when we did not have YouTube and could play almost any episode whenever we wanted.
It has been a long week .. Started off with the R leaving for globe trotting to UK on Sunday morning .. Before I could rub my hands in glee and plan my so-called 'free' evenings - the little one goes and wakes up with a high temperature on Monday morning. I think that it must be that should-have-never-eaten-in-the-first-place 'ice gola' that she gobbled the previous evening while I was busy looking at trinkets in the mela in our apartment and leave for work ... I come back to find that she is still the same and has not risen out of the bed .. Worry starts to kick in and I somehow prevent it from turning into the panic monster. Tuesday morning sees me rushing first thing to Cloud nine because guess what - I felt as if was sleeping beside a hot pot the whole night .. The doc has one look at her and suspects to be H1N1 (excuse me those are meaningless letters put together for me ... I mean hello ... do normal people even get such an infection ???) Apprently yes ... later I come to know (thanks to whatsapp forwards) that it is very much in air and totally in Bangalore's air. Even before the suspicion is confirmed as a test she puts her on medication (I love you Doc for that) ... and after confirmation - the entire family gets on medication. It is no easy job taking care of a sick child - I dont need to tell you moms - it is worse when you also get the same sickness (if not fully partial) and you have a fully healthy child to take care of also and prevent her from falling sick.
While walking back to catch an auto to rush back to the little kittens that were wailing for their mamma at home , I remembered this song .. https://www.youtube.com/watch?v=At1qTKjiz-I ... and realized that this is really what the world needs ... a little love ... that is what my mother needed .. a little love .. the medicines, doctors , care and all is there ... but that little love helped her ..
I read an interesting article in The Young World (in fact go to touching the newspaper after a long time) yesterday - which set me thinking.
We live in times of excess - excess of everything - that we probably dont realize the sweetness of missing something or the value of anything at all!
I was cleaning up my kids cupboard and found about 7 boxes of crayons - each one of them opened and probably used just once or twice ; 15 pens of different shapes , sizes and types; 34 pencils ; 42 erasers of all different shapes, colors and fragrances ; 16 sharpeners (why would ever need more than 1 sharpener at a given point beats me!) - and all of these are not even bought by me !!! They all are part of the elaborate 'Return gifts' that I have collected over the years for birthday parties that the girls have been invited for!
Of course they dont realize the importance of a single thing! They dont feel the same attachment as I felt for the one and only one "pen-pencil' that I had all the years that I was a student at school and the sentiment that was associated with it as I had worked hard to 'earn' it as a prize for getting good marks in a particular exam!
Or the fact that I still keep the fountain pen that leaks ink every time you use it - but saw me through all of my college years - despite the leak - because it was the gift from my late grandfather!
The same goes for clothes. There is no longer the need to wait for an occasion to buy clothes now-a-days. The need for clothes is more driven by sale seasons or demands of various classes they attend to or worst of all birthday parties they attend to! I still remember how attached I was to the skirt I got for my 8th birthday - one that could stretch from one end of the room to the other - it was much more expensive than my parents' budget and so I valued it more than anything in my wardrobe - for I knew that the next time I got something really good would be about a year later - at the minimum!
Ah! I miss the good old days!
Bhagwan - Hai kahan re Tu?
The first time I heard this song from PK - I really did not give it much thought. But when I heard it on the big screen again - while watching the visuals, the song just stuck to be like glue.
Today, when this song plays I cannot do anything else, but just sit back, close my eyes and focus only on the lyrics and the pain of the truth in Sonu's voice.
Maya had her 4th month shots yesterday and I noted something strange.
The night she had her 2nd month shots we watched 'Dasavatharam' - thanks to the Mr. who held Maya all the time.
And Yesterday night we watching a little part of "Kuselan" - thanks to Maya - who slept a bit early (maybe it was the shots).
One starring the "universal hero" and the other starring his rival "superstar" - What a coincidence huh?
The Mr. and I are not a great fan of movies - in the sense that we need to watch every movie that gets released - but are a fan of GOOD movies - old or new and make a point to watch the special and good ones.
Once in a while this post comes back ... because there is no specific topic to write about but a mix of many small small things. Why do the best of thoughts and ideas come at a time when I cannot pen (sorry key) them down. I almost wrote the entire blog in my mind while cycling back today and now cant recall a single word of it ! Arghhh!
Yesterday was one of those days that came after a long long time in my life - when I just did not feel like doing a single single thing - could have sat a wrote this then - but just could not life my pen (oops sorry press a key down).
Life has been whizzing past with various milestones happening, some being jotted down hurriedly in the book of memories, some just lost in dusted pages of my own brain.
My dad has always hated me listening to bollywood songs , but I have always felt that my life has been connected with just those songs in one way or the other - or maybe I made the connection myself. Can't say - the mind is such a curious toy.
Mind - for the past one year or so - this has been the most prominent topic in my life. From talks with my friend R to my boss M and my own hubby - this one crops up every time - Mind - do we control it or does it control us ? What is this thing called Mind? I started to read the book suggested by M (and left it halfway - what is it with me and self improvement/ self help books - i just cant seem to be finishing them) - Untethered Soul - a very good read , when I got into the mood, it talks entirely about how the Mind as an entirely different 'being' which is totally seperate from us and how it causes us to do the things that we do and dont want do and think and dont want to think. The book hubby has been behind me to read also talks of the same - What to tell yourself when you talk to yourself. The same concept was spoken by Loiuse Hay - who i got in 'touch' with 4 years ago through - You can heal yourself. But why am I not able to grasp it ? Why am I not able to master it ? The concept is just so simple. I can control what I think ! I can make my life just the way I want it - all it takes is a very very small and simple change - the way I think. Why is it so hard ? No answer ! Is it just my stubborness to getting a better life and getting out of the self pity pool that I am so comfortable in wallowing in like a hippo?
Today was a milestone. I cycled all by myself to Malleswaram and back. It felt ... sort of liberating .. It was just me , my music , my thoughts , my reflections of what I saw on the road ... Ever since I became an adult, I always wanted my soul mate .. Amma always berated me for wanting that one individual who would be my other half and how I would share every single thought in my head with that person. Maybe I was wrong after all - one does not really need that one person to be 'happy'. I dont know ... Does one need ? Too many confused thoughts!
Sometimes I wonder if all of these memories are special only for me, or do those people who I associate these with also think of me at times. Why should I care ? I write the story of my life only right ? Dont' I ? Like Krishna says in Gita - I should just keep doing my Karma..
Just another Human Being in this world trying to understand herself and the world, sometimes succeeding sometimes failing.


text:
Win The New J-Lo CD 'Rebirth' ... TODAY!!
Love her or loathe her, uber-diva Jennifer Lopez knows how to deliver on record. She understands how to make the most of her limited vocal range, choosing to surround herself with able producers Rodney Jerkins, Timbaland, Big Boi and Cory Rooney, who oversaw Lopez's first album, On the 6.
The mix makes Rebirth far more enjoyable than it should be, coasting on midnight-groove ballads and polished dance tracks. Lopez's fourth studio album offers little insight into her much-gossiped-about persona, but it's an undeniably fun ride anyway. A blaring James Brown horn riff drills first single "Get Right" into your head almost immediately, and soon enough, you'll find yourself bopping to the beat.
The Middle-Eastern flavor of "Step Into My World" is undeniably seductive, and it's actually enhanced by Lopez's wisp of a voice. "Whatever You Wanna Do" and "Cherry Pie" are solid dance tracks, the kind of grooves Janet Jackson made before she became a Superbowl afterthought. Nothing here ever sounds forced or canned, and in the world of MTV and radio edits, maybe that does make Lopez a bit of a revolutionary after all.
If you would like to win your own copy of this great new CD, just answer this easy question: Name all of J-Lo's past and present husbands!
Send me your answers and if you're correct you'll be in the running to win one of these wonderful new CDs. Just send us an e:mail here before March 20th with your answer and the subject title 'J-LO CD' to:
www.EpicRecords.com
CLICK HERE TO ORDER IT TODAY FROM AMAZON.COM!
CLICK HERE TO CHECK OUT THE BRAND NEW GIVEAWAY ADDED TODAY!


Technology has the potential to create enormous opportunity, but also presents several challenges. Digital disruption in the oil and gas space is no different. As many sectors worldwide have embarked on their own digital journeys, the energy sector has also started to explore the promise of digital enablement and Big Data.
One of the companies leading the march into digital future is Baker Hughes, a GE company (BHGE); merging the oil and gas expertise that Baker Hughes has developed over its many years in the sector with GE's digital expertise from manufacturing, aerospace and healthcare amongst many other sectors. I recently sat down with Dean Arnison, global product leader-subsea production systems and services, at BHGE to explore what he felt digitization meant to the oil and gas sector.
Tools and processes undoubtedly differ between organizations. That said, most oil and gas companies are on a similar journey, looking at how to improve their own productivity and cut base costs, while exploring the ways digital can be leveraged to optimize the production from assets through a greater understanding of failure points and inefficiencies, and because of augmented decision-making.
BHGE are also looking at opportunities to improve internal working practices through digital-enablement, by automating processes and bringing data onto digital platforms for online access, data sharing and consumption. One example is the fast track towards the digitization of all its data books, developing 'digital twins' of its products carrying design, production and operational data, and introducing a number of automated test regimes in its subsea manufacturing sites.
Arnison explained that from the information he has access to, he can see that operators and service companies are on a similar journey, but there is also a duplication of effort that could be solved by a more collaborative effort. With the rapid pace of change that characterizes the world today, especially around digitalization, there is a need for more joint industry programs (JIPs) and other such initiatives designed to better connect the industry as a whole.


100 Cars, 17 Palaces & Private Yacht Worth $ 7 Million: Look at Kim Jong-Un's Daily Life!
Everyone loves to hate Kim Jong-Un and we hope you know all the reasons behind it. After Kim Jong II passed away, he became the leader of North Korea. Today, we will tell you some more facts about him, which will make you hate him all the more.
Yes, we will talk about his luxurious lifestyle, and sadly he doesn't spend a penny on all of it; he uses the funds of North Korea to enjoy a lavish life. Since he enjoys a good political power there, he can do anything he wishes to. You shall be shocked to see his King like life; North Korea is financially unstable and on top of that, the leader's unethical spending, the GDP is affected all the more.
Let's delve deeper into his lifestyle..
A Yacht worth $ 7 million!
He owns a 100 feet long yacht worth $ 7 million; this is by far the best one by Princess which a yacht manufacturing company. The leader loves to spend some quality time on the sea.
Kim Jong-Un loves to have premium liquor; cognac and whiskey are 2 of his favorite drinks and he keeps importing them from different countries. It is said that the price of 1 liquor bottle equals to the weekly earnings of a person in North Korea. Along with whiskey, he loves to enjoy his favorite cigarette brand, Yves Saint Laurent.
More than a Dozen Palaces to live in!
Kim stays wherever he wants to; he owns 17 palaces all across North Korea and apart from that, he also owns a private island.
He owns a private jet too!
Recently, Kim shared the picture of his private jet, Air Force Un. It is luxurious and has leather couches and crystal ash trays. Known for its lavishness, the cost of this jet is $ 1.5 million.
Apart from liquor, Kim loves to try out a variety of imported foods as well. He import various exotic meals from different parts of the world, for instance caviar from Iran, pork from Denmark or mangoes from Thailand.
Kim Jong-Un has been crazy for cars; his collection includes 100 luxury cars, with Mercedes Benz line being his favorite. Moreover, he has a good collection of race cars as well.
The North Korean leader has built a private movie theater for entertainment purpose; it has the capacity of 1000 people. He used to get tired searching for a seat in other theater, and this was the reason why he spent $200,000 on building a private one.
Kim Jong-Un is married and he spends a lot of money on pampering his wife; be it expensive jewelry, sushi chefs, designer handbags or private shows.