text:
https://whateveryoneneedstoknow.com/browse;jsessionid=3D78B15CCBA0768E4008B873C66925C0?btog=book&pageSize=20&sort=titlesort&t=WENTKO_SUBJECTS%3ASOC02270&t0=WENTKO_SUBJECTS%3ALAW00010
Legal and Constitutional History (1)
United States History (1)
Open Section Constitutional and Administrative Law (1)
Parliamentary and Legislative Practice (1)
Human Rights and Immigration (1)
Law and Society (1)
Open Section Criminology and Criminal Justice (2)
Forms of Crime (1)
Gender and Politics (1)
Human Rights and Politics (1)
Political Institutions (1)
Social Movements and Social Change (1)
Politics x
Download complete list of books in this Politics Collection (.pdf) (.xls)
Citizenship: What Everyone Needs to Know®
Peter J. Spiro
Almost everyone has citizenship, and yet it has emerged as one of the most hotly contested issues of contemporary politics. Even as cosmopolitan elites and human rights advocates aspire to ... More
Almost everyone has citizenship, and yet it has emerged as one of the most hotly contested issues of contemporary politics. Even as cosmopolitan elites and human rights advocates aspire to some notion of "global citizenship," populism and nativism have re-ignited the importance of national citizenship. Either way, the meaning of citizenship is changing. Citizenship once represented solidarities among individuals committed to mutual support and sacrifice, but as it is decoupled from national community on the ground, it is becoming more a badge of privilege than a marker of equality. Intense policy disagreement about whether to extend birthright citizenship to the children of unauthorized immigrants opens a window on other citizenship-related developments. At the same time that citizenship is harder to get for some, for others it is literally available for purchase. The exploding incidence of dual citizenship, meanwhile, is moving us away from a world in which states jealously demanded exclusive affiliation, to one in which individuals can construct and maintain formal multinational identities. Citizenship does not mean the same thing to everyone, nor have states approached citizenship policy in lockstep. Rather, global trends point to a new era for citizenship as an institution. In Citizenship: What Everyone Needs to Know®, legal scholar Peter J. Spiro explains citizenship through accessible terms and questions: what citizenship means, how you obtain citizenship (and how you lose it), how it has changed through history, what benefits citizenship gets you, and what obligations it extracts from you--all in comparative perspective. He addresses how citizenship status affects a person's rights and obligations, what it means to be stateless, the refugee crisis, and whether or not countries should terminate the citizenship of terrorists. He also examines alternatives to national citizenship, including sub-national and global citizenship, and the phenomenon of investor citizenship. Spiro concludes by considering whether nationalist and extremist politics will lead to a general retreat from state-based forms of association and the end of citizenship as we know it. Ultimately, Spiro provides historical and critical perspective to a concept that is a part of our everyday discourse, providing a crucial contribution to our understanding of a central organizing principle of the modern world.Less
The Gun Debate: What Everyone Needs to Know® (2 ed.)
Philip J. Cook and Kristin A. Goss
No topic is more polarizing than guns and gun control. From a gun culture that took root early in American history to the mass shootings that repeatedly bring the public discussion of gun ... More
No topic is more polarizing than guns and gun control. From a gun culture that took root early in American history to the mass shootings that repeatedly bring the public discussion of gun control to a fever pitch, the topic has preoccupied citizens, public officials, and special interest groups for decades. In this thoroughly revised second edition of The Gun Debate: What Everyone Needs to Know® noted economist Philip J. Cook and political scientist Kristin A. Goss delve into the issues that Americans debate when they talk about guns. With a balanced and broad-ranging approach, the authors thoroughly cover the latest research, data, and developments on gun ownership, gun violence, the firearms industry, and the regulation of firearms. The authors also tackle sensitive issues such as the impact of gun violence on quality of life, the influence of exposure to gun violence on mental health, home production of guns, arming teachers, the effect of concealed weapons on crime rates, and the ability of authorities to disarm people who aren't allowed to have a gun. No discussion of guns in the U.S. would be complete without consideration of the history, culture, and politics that drive the passion behind the debate. Cook and Goss deftly explore the origins of the American gun culture and the makeup of both the gun rights and gun control movements. Written in question-and-answer format, this updated edition brings the debate up-to-date for the current political climate under Trump and will help readers make sense of the ideologically driven statistics and slogans that characterize our national conversation on firearms. This book is a must-read for anyone interested in getting a clear view of the issues surrounding guns and gun policy in America.Less
Impeachment: What Everyone Needs to Know®
Impeachment: What Everyone Needs to Know® is the step back and deep reflection on the law of impeachment that everyone needs now. Written in an accessible and lively question-and-answer ... More
Impeachment: What Everyone Needs to Know® is the step back and deep reflection on the law of impeachment that everyone needs now. Written in an accessible and lively question-and-answer format, it offers a timely explanation of the impeachment process from its very meaning to its role in politics today. The book defines the scope of impeachable offenses, and how the Constitution provides alternative procedures and sanctions for addressing misconduct in office. It explains why the only two presidential impeachments, those of Andrew Johnson and Bill Clinton, failed to lead to conviction, and how the impeachments of federal judges illuminate the law and politics of the process. As a legal expert and the only joint witness in the impeachment proceedings against President Clinton, author Michael J. Gerhardt also explores a question frequently asked-will Donald Trump be impeached? This book does not take a side in the debate over the possible impeachment of the president; instead, it is a primer for anyone eager to learn about impeachment's origins, practices, limitations, and alternatives.Less
Marijuana Legalization: What Everyone Needs to Know® (2 ed.)
Jonathan P. Caulkins, Beau Kilmer, and Mark A.R. Kleiman
Should marijuana be legalized? Since 2012 four US states have legalized commercial for-profit marijuana production and use, while Washington DC has legalized possession, growth and gifting ... More
Should marijuana be legalized? Since 2012 four US states have legalized commercial for-profit marijuana production and use, while Washington DC has legalized possession, growth and gifting of limited amounts of the plant. Other states, and even cities, have decriminalized possession, allowed for medical use, or reduced possession to a misdemeanor. While marijuana is forbidden by international treaties and by national and local laws across the globe, polls show that public support for legalization has continued to increase steadily over time. So why does the issue of marijuana legalization continue to be so controversial? One short answer is that it is an extremely complicated business, with approaches toward legalization just within the United States varying widely. What's more, not all supporters of "legalization " agree on what it is they want to legalize: Just using marijuana? Growing it? Selling it? Advertising it? If sales are to be legal, what regulations and taxes should apply? Different forms of legalization have demonstrated very different results. This second edition of Marijuana Legalization: What Everyone Needs to Know® provides readers with a non-partisan primer covering everything from the risks and benefits of using marijuana to what is happening with marijuana policy in the United States and abroad. The authors discuss the costs and benefits of legalization at the state and national levels and explore the "middle ground " of policy options between prohibition and commercialized production. The book also considers the personal impact of marijuana legalization on parents, heavy users, medical users, employers, and even drug traffickers.Less
Violence against Women: What Everyone Needs to Know®
Jacqui True
Violence against women and girls (VAWG) is a longstanding problem that has increasingly come to the forefront of international and national policy debates and news: from the US ... More
Violence against women and girls (VAWG) is a longstanding problem that has increasingly come to the forefront of international and national policy debates and news: from the US reauthorization of the Violence against Women Act and a United Nations declaration to end sexual violence in war, to coverage of gang rapes in India, cyberstalking and "revenge porn", honor killings, female genital mutilation, and international trafficking. Yet, while we frequently read or learn about particular experiences or incidents of VAWG, we are often unaware of the full picture. Jacqui True, an internationally renowned scholar of globalization and gender, provides an expansive frame for understanding VAWG in this book. Among the questions she addresses include: What are we talking about when we discuss VAWG? What kinds of violence does it encompass? Who does it affect most and why? What are the risk factors for victims and perpetrators? Does VAWG occur at the same level in all societies? Are there cultural explanations for it? What types of legal redress do victims have? How reliable are the statistics that we have? Are men and boys victims of gender-based violence? What is the role of the media in exacerbating VAWG? And, what sorts of policy and advocacy routes exist to end VAWG? This volume addresses the current state of knowledge and research on these questions. True surveys our best understanding of the causes and consequences of violence against women in the home, local community, workplace, public, and transnationally. In so doing, she brings together multidisciplinary perspectives on the problem of violence against women and girls, and sets out the most promising policy and advocacy frameworks to end this violence.Less


Tormach Slant Lathe [Archive] - CNCzone.com- Largest Forums for CNC Professional and Hobbyist alike!
Where Is That Lathe We Were Promised???
Sprut Setup.. tool kits.. etc..
Is the Turret available yet?
How many free inputs on Tormach lathe controller?
Newbie Has anyone Successfully moved a SlantPro into a basement?
Need Help! Mass / New England Slant Pro Owners willing to train ?
New Slant Pro, spindle won't run.
Overwhelmed with CAD/CAM. Suggestions for a beginner?
Will the Tormach lathe/PP do constant surface speed ?
Need Help! X ballnut access ?
Need Help! TURRET NOT WORKING!!!
How do I actually change the tool with a turret?
SlantPRO post processor for Fusion 360.
Tormach Lathe ... the adventure !
Ordered Tuesday gets here Friday!. Have a couple questions.
Need Help! Whats your procedure for aligning and shimming gang tooling?
Need Help! Newest PP Fusion360 post.
Anyone selling their slant pro?
Anyone have a working post for Sprutcam 7?
Pros & Cons of new and old lathe turrets?
Any interest in SL15 3 Jaw Chuck Soft Jaw Fusion 360 Model and CAM?
PLEASE help. How would you quote a part like this?
CNC: Learn more to earn more.
Fusion 360 and inverted gang tools?
Anybody in Canada bought the Tormach lathe?
Newbie Miilfast E stop kit fit for lathe?
Tormach Lathe Capabilies Questions + Turret?
How do you dial in tolerances?
Feeds and Speeds, which app do you use?
Any tips on parting 2.4" diameter stainless steel?
Need Help! CAM code when using a tool post on the 'X' minus.
lathe stops at zero and will not proceed?
Will a BXA toolpost work in the Slant Pro?
Quick vid on how I indicate round tooling on the slant using a coaxial indicator.


text:
package mdmoss.doobiegen

import mdmoss.doobiegen.GenOptions.{AlwaysInsertDefault, GenOption, NoWrite, IgnoreDefault}
import mdmoss.doobiegen.Runner.Target
import mdmoss.doobiegen.sql.{Column, Table, TableRef}

case class RowRepField(sourceTable: Table, source: List[Column], scalaName: String, scalaType: ScalaType, defaultValue: Option[String] = None)

case class Insert(fn: FunctionDef)

case class InsertMany(fn: FunctionDef)

case class Create(fn: FunctionDef, void: FunctionDef)

case class CreateMany(process: FunctionDef, list: FunctionDef, void: FunctionDef)

case class Get(inner: FunctionDef, outer: FunctionDef)

case class Find(inner: FunctionDef, outer: FunctionDef)

case class All(inner: FunctionDef, outer: FunctionDef)

case class AllUnbounded(fn: FunctionDef)

case class Count(inner: FunctionDef, outer: FunctionDef)

case class BaseMultiget(fn: FunctionDef)

case class MultiGet(inner: FunctionDef)

case class Update(inner: FunctionDef, outer: FunctionDef)

object Analysis {

  /* Helpers */
  implicit class CamelCaseStrings(s: String) {
    def camelCase: String = "_([a-z])".r.replaceAllIn(s, m => m.group(1).capitalize)
  }

  implicit class RowRepsForInsert(l: List[RowRepField]) {
    /* We lowercase everything here to avoid case issues */
    def sqlColumns: String = l.flatMap(_.source).map(c => c.sqlName.toLowerCase).mkString(", ")
    def sqlColumnsInTable(table: Table) = l.flatMap(_.source).map(c => c.sqlNameInTable(table).toLowerCase).mkString(", ")

    /*
     * Case is an interesting question. According to what I've heard about the issue, we should be lowercasing
     * any table and column names that aren't quoted.
     *
     * See http://stackoverflow.com/questions/20878932/are-postgresql-column-names-case-sensitive
     *
     * I think the correct way to handle this is to do what the database does: Add quotes to the parser, and use either
     * a lowercase string or the exact, quoted string as appropriate. @Todo.
     */
  }

  /** Returns an arbitrary using the given constructor and the arb instance for each type in order */
  def merge(constructor: String, scalaTypes: List[ScalaType]): String = {
    s"$constructor(" + scalaTypes.map(_.qualifiedArb).mkString(", ") + ")"
  }

  def makeSafe(string: String): String = if (ReservedWords.contains(string)) s"`$string`" else string

  val ReservedWords = Seq(
    "type",
    "package"
  )

  val DefaultNoWriteSqlTypes = Seq(
    sql.BigSerial
  )
}

class Analysis(val model: DbModel, val target: Target) {
  import Analysis._

  def targetPackage(table: Table) = target.`package` + table.ref.schema.map(s => s".$s").getOrElse("") + ".gen"

  def targetObject(table: Table) = table.ref.sqlName.camelCase.capitalize

  def fullTarget(table: Table) = targetPackage(table) + "." + targetObject(table)

  def privateScope(table: Table) = "gen"

  def resolve(ref: TableRef): Table = model.tables.find { t =>
    equalRef(t.ref, ref)
  } match {
    case Some(table) => table
    case None =>
      println("Are we missing a table? Couldn't find a ref")
      println(ref)
      assert(false)
      null
  }

  def columnOptions(table: Table, column: Column): List[GenOption] = {
    target.columnOptions.get(table.ref.fullName).flatMap(_.get(column.sqlName)).toList.flatten
  }

  def statementOptions(table: Table): List[StatementTypes.Statement] = {
    target.statements.flatMap(_.get(table.ref.fullName)).toList.flatten ++ target.tableSpecificStatements.getOrElse(table.ref.fullName, List.empty)
  }

  def isNoWrite(table: Table, column: Column): Boolean = {
    val options = columnOptions(table, column)
    DefaultNoWriteSqlTypes.contains(column.sqlType) || options.contains(NoWrite)
  }

  def isNoInsert(table: Table, column: Column): Boolean = {
    val options = columnOptions(table, column)
    (options.contains(AlwaysInsertDefault) || isNoWrite(table, column)) && !options.contains(IgnoreDefault)
  }

  def isNoWrite(table: Table, rowRepField: RowRepField): Boolean = isNoWrite(table, rowRepField.source.head)
  def isNoInsert(table: Table, rowRepField: RowRepField): Boolean = isNoInsert(table, rowRepField.source.head)

  def pkNewType(table: Table): Option[(List[RowRepField], ScalaType)] = table.columns.filter(_.isSingularPrimaryKey) match {
    case Nil      => None
    case c :: Nil =>
      val rep = c.scalaRep(table).copy(scalaName = "value")
      val symbol = c.sqlName.camelCase.capitalize
      val arb = merge(symbol, List(c.scalaType))
      Some(List(rep), ScalaType(symbol, arb, Some(fullTarget(table))))
    case cs       => None
  }

  def rowNewType(table: Table): (List[RowRepField], ScalaType) = {
    /* We'll put the primary key first, if any, then other components */
    val pkPart = pkNewType(table).map {
      case (reps, newType) => reps match {
        case r :: Nil => RowRepField(table, r.source, r.source.head.scalaName, newType)
        case rs       => RowRepField(table, rs.flatMap(_.source), "pk", newType)
      }
    }

    val parts = pkPart.toList ++ table.nonSingularPrimaryKeyColumns.map(_.scalaRep(table))
    val arb = merge("Row", parts.map(_.scalaType))
    (parts, ScalaType("Row", arb, Some(fullTarget(table))))
  }

  /**
    * Generates a `Shape` for a table, which is like a `Row`, except:
    * - Omits columns that are of types listed in `SkipInsert`
    * - Unwraps newtypes to their raw form (for easier inserting)
    * The intended usage of `Shape` is for `createMany` and similar methods.
    *
    * Sometimes Row == Shape, and that's fine. @Todo unify in these cases?
    */
  def rowShape(table: Table): (List[RowRepField], ScalaType) =  {
    val parts = table.columns.filterNot(isNoInsert(table, _)).map(_.scalaRep(table))

    (parts, ScalaType("Shape", merge("Shape", parts.map(_.scalaType)), Some(fullTarget(table))))
  }

  /* We need this to get around casing issues for now. Todo fix this */
  def equalRef(t1: TableRef, t2: TableRef): Boolean = {
    t1.schema.filter(_ != "public").map(_.toLowerCase) == t2.schema.filter(_ != "public").map(_.toLowerCase) &&
    t1.sqlName.toLowerCase == t2.sqlName.toLowerCase
  }

  def getColumn(table: TableRef, name: String): sql.Column = {
    model.tables.filter(t => equalRef(t.ref, table)).head.columns.filter(_.sqlName == name).head
  }

  def getTable(table: TableRef) = model.tables.find(t => equalRef(t.ref, table)).get

  /* Gets the param type used to reference a table and column */
  def paramType(table: TableRef, column: sql.Column): FunctionParam = {
    val source = rowNewType(getTable(table))._1.filter(_.source.contains(column)).head
    FunctionParam(source.scalaName, source.scalaType)
  }

  def getParam(r: RowRepField): FunctionParam = {
    val options = columnOptions(r.sourceTable, r.source.head)
    r.source.head.references match {
      case Some(sql.References(fTable, fCol)) =>
        val p = paramType(fTable, getColumn(fTable, fCol)).copy(name = r.scalaName)
        if (r.source.head.isNullible) {
          val default = if (options.contains(IgnoreDefault)) None else Some("None")
          p.copy(
            `type` = p.`type`.copy(symbol = s"Option[${p.`type`.qualifiedSymbol}]", "None", None),
            default = default
          )
        } else {
          p
        }
      case None =>
        /* In this case, we want to use unwrapped types, not the primary key - so we go back to the original rep */
        val rep = r.source.headOption.map(_.scalaRep(r.sourceTable)).getOrElse(r)

        val default = if (options.contains(IgnoreDefault)) None else r.defaultValue
        FunctionParam(rep.scalaName, rep.scalaType, default = default)
    }
  }

  private def fragmentSelectExpression(table: Table): String = {
    s"""\"\"\" ++ ${rowNewType(table)._2.symbol}.ColumnsFragment ++ sql\"\"\""""
  }

  /* We somehow get information about row sources / values from different places. @Todo unify */
  def insert(table: Table): Insert = {

    val params = rowNewType(table)._1.filterNot(isNoInsert(table, _)).map(getParam)

    val values = rowNewType(table)._1.map(r =>
      if   (isNoInsert(table, r))  "default"
      else                        s"$${${getParam(r).name}}"
    ).mkString(", ")

    val body =
      s"""sql\"\"\"
         |  INSERT INTO ${table.ref.fullName} (${rowNewType(table)._1.sqlColumns})
         |  VALUES ($values)
         |\"\"\".update
         |""".stripMargin.trim

    val fn = FunctionDef(Some(privateScope(table)), "insert", params, "Update0", body)
    Insert(fn)
  }

  def insertMany(table: Table): InsertMany = {
    val shape = rowShape(table)

    val values = rowNewType(table)._1.map(r =>
      if   (isNoInsert(table, r)) "default"
      else                        "?"
    ).mkString(", ")

    val body =
      s"""val sql = "INSERT INTO ${table.ref.fullName} (${rowNewType(table)._1.sqlColumns}) VALUES ($values)"
         |Update[${shape._2.symbol}](sql)
         |""".stripMargin

    val fn = FunctionDef(None, "insertMany", List(), "Update[Shape]", body)
    InsertMany(fn)
  }

  def create(table: Table): Create = {
    val in = insert(table)
    val rowType = rowNewType(table)

    val body =
      s"create(Shape(${in.fn.params.map(f => f.name).mkString(", ")}))"

    val fn = FunctionDef(None, "create", in.fn.params, s"ConnectionIO[${rowType._2.symbol}]", body)

    val vBody =
      s"createVoid(Shape(${in.fn.params.map(f => f.name).mkString(", ")}))"

    val void = FunctionDef(None, "createVoid", in.fn.params, "ConnectionIO[Unit]", vBody)
    Create(fn, void)
  }

  def createMany(table: Table): CreateMany = {
    val im = insertMany(table)
    val shape = rowShape(table)
    val rowType = rowNewType(table)
    val param = FunctionParam("values", ScalaType(s"List[${shape._2.qualifiedSymbol}]", "List()", None))

    val insertData = param.name
    val columns = rowType._1.flatMap(_.source).map(s => "\"" + s.sqlName.toLowerCase + "\"").mkString(", ")

    val pBody =
      s"insertMany.updateManyWithGeneratedKeys[${rowType._2.symbol}]($columns)($insertData)"

    val process = FunctionDef(Some(privateScope(table)), "createManyP", List(param), s"scalaz.stream.Process[ConnectionIO, ${rowType._2.symbol}]", pBody)

    val anyParamsNonEmpty = s"${param.name}.nonEmpty"

    val body =
      s"if ($anyParamsNonEmpty) createManyP(${param.name}).runLog.map(_.toList) else List.empty.point[ConnectionIO]"

    val list = FunctionDef(None, "createMany", List(param), s"ConnectionIO[List[${rowType._2.symbol}]]", body)

    val vBody =
      s"if ($anyParamsNonEmpty) insertMany.updateMany[List]($insertData).map(_ => ()) else ().point[ConnectionIO]"

    val void = FunctionDef(None, "createManyVoid", List(param), "ConnectionIO[Unit]", vBody)
    CreateMany(process, list, void)
  }

  def createShape(table: Table): Create = {
    val shape = rowShape(table)
    val rowType = rowNewType(table)

    val body =
      "createMany(shape :: Nil).map(_.head)"

    val fn = FunctionDef(None, "create", FunctionParam("shape", shape._2, None) :: Nil, s"ConnectionIO[${rowType._2.symbol}]", body)

    val vBody =
      "createManyVoid(shape :: Nil)"

    val void = FunctionDef(None, "createVoid", FunctionParam("shape", shape._2, None) :: Nil, s"ConnectionIO[Unit]", vBody)
    Create(fn, void)
  }

  def get(table: Table, withFragment: Boolean): Option[Get] = pkNewType(table).map { pk =>

    val rowType = rowNewType(table)

    val selectExpression = if (withFragment) {
      fragmentSelectExpression(table)
    } else {
      rowType._1.sqlColumnsInTable(table)
    }

    val innerBody =
      s"""(sql\"\"\"
         |  SELECT $selectExpression
         |  FROM ${table.ref.fullName}
         |  WHERE ${pk._1.sqlColumnsInTable(table)} = $${${pk._1.head.source.head.scalaName}}
         |\"\"\").query[${rowType._2.symbol}]
         |""".stripMargin

    val inner = FunctionDef(Some(privateScope(table)), "getInner", Seq(FunctionParam(pk._1.head.source.head.scalaName, pk._2)), s"Query0[${rowType._2.symbol}]", innerBody)

    val outerBody =
      s"getInner(${inner.params.map(_.name).mkString(",")}).unique"

    val outer = FunctionDef(None, "get", inner.params, s"ConnectionIO[${rowType._2.symbol}]", outerBody)

    Get(inner, outer)
  }

  def find(table: Table, withFragment: Boolean): Option[Find] = pkNewType(table).map { pk =>

    val rowType = rowNewType(table)

    val selectExpression = if (withFragment) {
      fragmentSelectExpression(table)
    } else {
      rowType._1.sqlColumnsInTable(table)
    }

    val innerBody =
      s"""(sql\"\"\"
         |  SELECT $selectExpression
         |  FROM ${table.ref.fullName}
         |  WHERE ${pk._1.sqlColumnsInTable(table)} = $${${pk._1.head.source.head.scalaName}}
         |\"\"\").query[${rowType._2.symbol}]
         |""".stripMargin

    val params = pk._1 match {
      case p :: Nil => Seq(FunctionParam(p.source.head.scalaName, p.scalaType))
      case ps => ps.zipWithIndex.map { case (p, i) => FunctionParam(p.source.head.scalaName, p.scalaType)}
    }
    val inner = FunctionDef(Some(privateScope(table)), "findInner", params, s"Query0[${rowType._2.symbol}]", innerBody)

    val outerBody = s"findInner(${params.map(_.name).mkString(", ")}).option"
    val outer = FunctionDef(None, "find", params, s"ConnectionIO[Option[${rowType._2.symbol}]]", outerBody)

    Find(inner, outer)
  }

  def allUnbounded(table: Table): AllUnbounded = {
    val rowType = rowNewType(table)

    /* This is a super hack, but will do for now */
    val bigintMax = "9223372036854775807L"

    val body =
      s"allInner(0, $bigintMax).list"

    val call = FunctionDef(None, "allUnbounded", Seq(), s"ConnectionIO[List[${rowType._2.symbol}]]", body)

    AllUnbounded(call)
  }

  def all(table: Table, withFragment: Boolean): All = {
    val rowType = rowNewType(table)
    val offsetLimit = Seq(FunctionParam("offset", ScalaType("Long", "0L", None)), FunctionParam("limit", ScalaType("Long", "0L", None)))

    val selectExpression = if (withFragment) {
      fragmentSelectExpression(table)
    } else {
      rowType._1.sqlColumnsInTable(table)
    }

    val innerBody =
      s"""(sql\"\"\"
         |  SELECT $selectExpression
         |  FROM ${table.ref.fullName}
         |  OFFSET $$offset
         |  LIMIT $$limit
         |\"\"\").query[${rowType._2.symbol}]
         |""".stripMargin

    val inner = FunctionDef(Some(privateScope(table)), "allInner", offsetLimit, s"Query0[${rowType._2.symbol}]", innerBody)

    val outerBody =
      "allInner(offset, limit).list"

    val outer = FunctionDef(None, "all", offsetLimit, s"ConnectionIO[List[${rowType._2.symbol}]]", outerBody)

    All(inner, outer)
  }

  def count(table: Table): Count = {
    val innerBody =
      s"""sql\"\"\"
         |  SELECT COUNT(*)
         |  FROM ${table.ref.fullName}
         |\"\"\".query[Long]
         |""".stripMargin

    val inner = FunctionDef(Some(privateScope(table)), "countInner", Seq(), "Query0[Long]", innerBody)

    val outerBody = "countInner().unique"
    val outer = FunctionDef(None, "count", Seq(), "ConnectionIO[Long]", outerBody)

    Count(inner, outer)
  }

  private def unwrapsNeeded(field: RowRepField): Int = {
    field.source.head.references match {
      case None => 1
      case Some(ref) =>
        val lower = model.tables.find { t => equalRef(t.ref, ref.table)}.get
        val lowerField = rowNewType(lower)._1.find(_.source.head.sqlName == ref.column)
        lowerField match {
          case None => 2
          case Some(f) => 1 + unwrapsNeeded(f)
        }
    }
  }

  def baseMultiget(table: Table, withFragment: Boolean): Option[BaseMultiget] = {
    val rowType = rowNewType(table)

    /* Hacky for now */
    val excludedColumns: Set[String] = statementOptions(table).collect {
      case rm: StatementTypes.RefinedMultiget => rm.excludeColumns.getOrElse(Nil)
    }.flatten.toSet

    val multigetColumns = table.columns.filterNot { c => excludedColumns.contains(c.sqlName) }

    val params = pkNewType(table).map { pk =>
      FunctionParam(pk._1.head.source.head.scalaName, app(app(pk._2, "Seq"), "Option"))
    }.toList ++
    multigetColumns.flatMap {
      case c @ Column(colName, colType, copProps) if c.reference.isDefined && !c.isNullible && !c.isSingularPrimaryKey =>
        Seq(FunctionParam(c.scalaName, app(app(c.scalaType, "Seq"), "Option")))

      case _ => Seq()
    }

    val returnType = s"Query0[${rowType._2.symbol}]"

    val where = "WHERE " + (pkNewType(table).map { pk =>
      val arrayName = pk._1.head.source.head.scalaName

      val unwraps = List.fill(unwrapsNeeded(pk._1.head))("value").mkString(".")
      val matchArray = s"$${{${arrayName}}.toSeq.flatten.map(_.$unwraps).toArray}"

      s"($${$arrayName.isEmpty} OR ${pk._1.head.source.head.sqlNameInTable(table)} = ANY($matchArray))"
    }.toList ++ multigetColumns.zipWithIndex.flatMap {
      case (c@Column(colName, colType, copProps), i) if c.reference.isDefined && !c.isNullible && !c.isSingularPrimaryKey =>
        val rowRep = rowType._1.find(_.source.head == c).get
        val unwraps = List.fill(unwrapsNeeded(rowRep) - 1)("value").mkString(".")
        val matchArray = s"$${{${c.scalaName}}.toSeq.flatten.map(_.${unwraps}).toArray}"

        Seq(
          s"($${${c.scalaName}.isEmpty} OR ${c.sqlNameInTable(table)} = ANY($matchArray))"
        )
      case _ => Seq()
    }
      ).mkString("\nAND ")

    val selectExpression = if (withFragment) {
      fragmentSelectExpression(table)
    } else {
      rowType._1.sqlColumnsInTable(table)
    }

    val body =
      s"""(sql\"\"\"
         |  SELECT $selectExpression
         |  FROM ${table.ref.fullName}
         |  $where
         |\"\"\").query[${rowType._2.symbol}]
         |""".stripMargin

    val multiget = FunctionDef(
      Some(privateScope(table)),
      "multigetInnerBase",
      params,
      returnType,
      body
    )

    params.length match {
      case 0 => None
      case _ => Some(BaseMultiget(multiget))
    }
  }

  def isInMultiget(t: Table, c: Column) = {
    /* Hacky for now */
    val excludedColumns: Set[String] = statementOptions(t).collect {
      case rm: StatementTypes.RefinedMultiget => rm.excludeColumns.getOrElse(Nil)
    }.flatten.toSet
    c.reference.isDefined && !c.isNullible && !c.isSingularPrimaryKey && !excludedColumns.contains(c.sqlName)
  }

  private def multigetBody(
    base: BaseMultiget,
    columnScalaName: String,
    paramsBefore: Int,
    paramsAfter: Int,
    finalMap: Option[String],
    groupByInnerValue: Boolean = false
  ): String = {
    val listParamName = columnScalaName
    val baseParams = List.fill(paramsBefore)("None") ++
      List(s"Some(distinctValues" + finalMap.map(f => s".map($f)").getOrElse("") + ")") ++
      List.fill(paramsAfter)("None")

    val groupBy = s"_.$columnScalaName" ++ (if (groupByInnerValue) ".value" else "")

    s"""if ($listParamName.nonEmpty) {
       |  val distinctValues = $listParamName.distinct
       |  for {
       |    resultRaw    <- multigetInnerBase(${baseParams.mkString(", ")}).list
       |    resultGrouped = resultRaw.groupBy($groupBy)
       |  } yield $listParamName.toList.flatMap(x => resultGrouped.getOrElse(x, List.empty))
       |} else List.empty.point[ConnectionIO]
       |""".stripMargin
  }

  def multigets(table: Table, withFragment: Boolean): Seq[MultiGet] = {
    val rowType = rowNewType(table)

    /* All of these now call through to the underlying multiget */
    val returnType = s"ConnectionIO[List[${rowType._2.symbol}]]"

    val numPkFields = if (pkNewType(table).isDefined) 1 else 0

    baseMultiget(table, withFragment).toList.flatMap { base =>

        pkNewType(table).toList.flatMap { pk =>

          val params = pluralise(List(FunctionParam(table.singularPrimaryKeyColumns.head.scalaName, pk._2)))

          val body = multigetBody(base, params.map(_.name).head, 0, base.fn.params.length - 1, None)

          List(
            MultiGet(FunctionDef(None, "multiget", params, returnType, body))
          )

        } ++ pkNewType(table).toList.flatMap { pk =>

          val params = pluralise(List(FunctionParam(table.singularPrimaryKeyColumns.head.scalaName, table.singularPrimaryKeyColumns.head.scalaType)))

          val body = multigetBody(base, params.map(_.name).head, 0, base.fn.params.length - 1, Some(s"${pk._2.symbol}(_)"), groupByInnerValue = true)

          if (table.singularPrimaryKeyColumns.head.references.isDefined) {
            List(
              MultiGet(FunctionDef(None, s"multigetBy${table.singularPrimaryKeyColumns.head.unsafeScalaName.capitalize}", params, returnType, body))
            )
          } else {
            List()
          }

        } ++table.columns.filter(isInMultiget(table, _)).zipWithIndex.flatMap {
          case (c@Column(colName, colType, copProps), i) if c.reference.isDefined && !c.isNullible && !c.isSingularPrimaryKey =>

            val params = pluralise(List(FunctionParam(c.scalaName, c.scalaType)))

            val paramsBefore = i + numPkFields
            val paramsAfter = base.fn.params.length - (paramsBefore + 1)
            val body = multigetBody(base, params.map(_.name).head, paramsBefore, paramsAfter, None)

            List(MultiGet(FunctionDef(None, s"multigetBy${c.unsafeScalaName.capitalize}", params, returnType, body)))

          case  _ => List()
        } ++ table.columns.filter(isInMultiget(table, _)).zipWithIndex.flatMap {
          case (c@Column(colName, colType, copProps), i) if c.reference.isDefined && !c.isNullible && !c.isSingularPrimaryKey =>

            val params = List(FunctionParam(c.scalaName, c.scalaType))

            val paramsBefore = i + numPkFields
            val paramsAfter = base.fn.params.length - (paramsBefore + 1)
            val baseParams = List.fill(paramsBefore)("None") ++ List(s"Some(Seq(${params.map(_.name).head}))") ++ List.fill(paramsAfter)("None")
            val body = s"multigetInnerBase(${baseParams.mkString(", ")}).list"

            List(MultiGet(FunctionDef(None, s"getBy${c.unsafeScalaName.capitalize}", params, returnType, body)))

          case  _ => List()

        }

    }
  }

  /* This contains some hacks. @Todo fix */
  def update(table: Table): Option[Update] =  pkNewType(table).map { pk =>

    val row = rowNewType(table)
    val params = Seq(FunctionParam("row", row._2))

    val innerUpdates = row._1.map(f =>
      if (isNoWrite(table, f)) s"${f.source.head.sqlName} = ${f.source.head.sqlName}"
      else                      s"${f.source.head.sqlName} = $${row.${f.scalaName}}"
    ).mkString(", ")

    val innerBody =
      s"""sql\"\"\"
         |  UPDATE ${table.ref.fullName}
         |  SET $innerUpdates
         |  WHERE ${table.singularPrimaryKeyColumns.head.sqlName} = $${row.${table.singularPrimaryKeyColumns.head.scalaName}}
         |\"\"\".update
         |""".stripMargin

    val inner = FunctionDef(Some(privateScope(table)), "updateInner", params, "Update0", innerBody)

    val outerBody =
      "updateInner(row).run"

    val outer = FunctionDef(None, "update", params, "ConnectionIO[Int]", outerBody)

    Update(inner, outer)
  }

  /**
    * Turn a singular param into a multiple param.
    *
    * eg, (id: Long, name: String) => (params: Seq(Long, String))
    * eg. (id: Long) => (id: Seq(Long))
    */
  def pluralise(params: List[FunctionParam]): List[FunctionParam] = params match {
    case p :: Nil => List(p.copy(`type` = app(p.`type`, "Seq")))
    case ps => ps
  }

  /**
    * Wraps the given type in some applicative thing.
    */
  def app(t: ScalaType, app: String): ScalaType = ScalaType(s"$app[${t.qualifiedSymbol}]", s"$app(${t.qualifiedArb})", None)

  implicit class ColumnScalaRep(column: sql.Column) {

    def unsafeScalaName: String = column.sqlName.camelCase
    def scalaName: String = makeSafe(unsafeScalaName)

    /* This drops any foreign keys after the first, because I'm not sure if that's even valid */
    def reference = column.properties.flatten {
      case r @ sql.References(_, _) => Some(r)
      case _ => None
    }.headOption

    def scalaType: ScalaType = {
      val base = reference match {
        case Some(sql.References(table, col)) =>
          val targetTable = resolve(table)
          val targetColumn = targetTable.columns.filter(_.sqlName.toLowerCase() == col.toLowerCase).head
          foreignType(targetTable, targetColumn)

        case None =>
          column.sqlType match {
            case sql.BigInt          => ScalaType("Long", "0L", None)
            case sql.BigSerial       => ScalaType("Long", "0L", None)
            case sql.Boolean         => ScalaType("Boolean", "true", None)
            case sql.DoublePrecision => ScalaType("Double", "0.0", None)
            case sql.Date            => ScalaType("LocalDate", "LocalDate.of(1, 1, 1)", None)
            case sql.Integer         => ScalaType("Int", "0", None)
            case sql.Decimal(_, _)   => ScalaType("BigDecimal", "BigDecimal(0)", None)
            case sql.Text            => ScalaType("String", "\"\"", None)
            case sql.TimestampTZ     => ScalaType("Timestamp", "new Timestamp(0L)", None)
            case sql.Timestamp       => ScalaType("LocalDateTime", "LocalDateTime.of(1, 1, 1, 1, 1)", None)
            case sql.JsonB           => ScalaType("Json", "Argonaut.jEmptyObject", Some("argonaut"))
            case sql.Json            => ScalaType("Json", "Argonaut.jEmptyObject", Some("argonaut"))
            case sql.Geometry        => ScalaType("PGgeometry", "new PGgeometry()", None)
            case sql.SmallInt        => ScalaType("Short", "0.toShort", None)
            case sql.Time            => ScalaType("Time", "new Time(0L)", None)
            case sql.Uuid            => ScalaType("UUID", "UUID.randomUUID()", None)
          }
      }

      column.isNullible match {
        case true => ScalaType(s"Option[${base.qualifiedSymbol}]", "None", None, optionOf = Some(base))
        case false => base
      }
    }

    def scalaRep(table: Table) = {
      val options = columnOptions(table, column)

      RowRepField(
        table,
        List(column),
        scalaName,
        scalaType,
        defaultValue = if (column.isNullible) Some("None") else None)
    }
  }

  /* This is the type that should be used by other tables referring to the given column */
  def foreignType(table: Table, column: Column): ScalaType = {

    val pk = pkNewType(table).head

    column.isNullible match {
      case true => ScalaType(s"Option[${pk._2.qualifiedSymbol}]", "None", None)
      case false => pk._2
    }
  }
}

redpajama_set_name: RedPajamaGithub


We Are Cardiff is one of the world's best city blogs. It also won Best Blog at the Wales Blog Awards, and currently has over 40,000 followers across a variety of platforms.
The We Are Cardiff editors, Helia and Hana, both work as freelance writers and content creators. If you're interested in this or would like to interview either of them, please contact us.
If you're interested in advertising with us, we can help you reach a wide audience across the south Wales area. There are several options for how we can work together – please get in touch to find out more, or download our media kit.
We also specialise in content creation, social media management, photography, and web and digital productions. If you're interested in working with us, give us a shout.


Lease a Hughes HN satellite broadband internet system. Get all the benefits of a satellite internet system, with none of the equipment or maintenance costs.
No activation or suspension fees.
Service includes our IA100 high speed internet service package (higher levels are available).
Only $189.00 per month for HN service.
Free training available on request. Training is free at our office, or $350.00 per day at your facility. Includes installation, antenna pointing, and troubleshooting.
You can suspend service at any time, but must complete 18 months of active service before the lease is fulfilled. After your 18-month lease is finished, you may continue service on a month-to-month basis, or cancel the service at anytime. Upon cancellation, simply return your equipment to Houston Media Systems. https://txdish.com/oilfield/internet/If you need to cancel service before the 18 month lease is fulfilled, you may buy out any remaining months of the lease.
$189.00 per month is for HN service only. HX service is available for a quote.
Cancellation fees apply for breaking the 18-month commitment.
Upload and Downloads you experience will vary based on a variety of factors.
Fair access policies apply (download allowance or unlimited service available at additional cost).


Eve Golden's YouTube Theater: Some People . . .
This postcard, marked 1909, showing Broadway, looking north just below 4th Street, has been listed on EBay. Bidding starts at $8.95. And for comparison, here's what it looks like on Google Street View. Let's take a closer look.
This postcard complements the Rediscovering Los Angeles post on Angels Flight. It's postmarked 1904 and photo was taken from Spring Street looking toward the 3rd Street tunnel. Bidding starts at $5.
L.A. Observed has reposted this image, which was posted by Michael Beschloss, who identifies it as Broadway as it looked about 1902.
This 1921 architectural photo of Loew's State Theater under construction at 7th Street and Broadway has been listed on EBay. Bidding starts at $24. Notice the signage for Bullock's in the background.
The things you see in downtown Los Angeles.
On Location: The May Co.


This will be the biggest show of the year for Living Dead Dolls yet, so make sure to drop by the booth to say hi, and get some autographs. This is a great opportunity to pick up older items you need for your collection. This is a must see event for any LDD fan!
Chiller Theatre will also host a litany of exciting guests including Keir Dullea and Gary Lockwood from 2001: A Space Odyssey and Richard Dreyfuss from Close Encounters of the Third Kind and Jaws. Don't delay! Find out more about getting tickets here.


text:
Wow rolling Tobacco banned from sale from May 2020....
By RR007
January 3, 2020 in Off Topic Chat
Was all over the news last night apparently the legislation was passed in 2016 but will be introduced in May this year
Having read all the articles this will fan an explosive black market for rolling tobacco from outside the EU....... So in short from May because we're in transistion period we still abide to EU law meaning sale is withdrawn....... However obviously 1st Jan 2021 it can go back on sale but not in the entire eurozone. You wont be able to buy in super cheap places like Bulgaria (as I did last summer) Poland Romania etc etc....note banned for sale but not illegal
Baccy coming in from the Emirates will be like gold dust make no mistake. Menthol cigarettes are gone as well
https://www.dailymail.co.uk/news/article-7845451/Menthol-cigarettes-banned-UK-2020.html
Suppose the nearest place to get around it would be Tenerife ??
I'm a non-smoker so not really followed this story but to my outsider's eye the story doesn't seem clear cut.
Are all forms of rolling tobacco being banned, or just those that contain menthol? (admittedly I'm ignorant as to whether there is such a thing)
Some of the pieces I've just been reading suggest the latter.
1 minute ago, Lemondropkid said:
I read it as all rolling tobacco to be honest. Am guessing this will surface pretty quickly elsewhere so will keep an eye on it
No I think its all rolling tobacco. Note the full stop at start of screenshot after "2020"
10 minutes ago, RR007 said:
Thanks I saw that, but then found more specific text
Menthol ban will include click dual flavoured cigarettes
New tobacco laws will see flavoured cigarettes banned next year. Menthol cigarettes are currently in a four-year phasing-out period, which started in May 2016 and will be completed by May 20, 2020. The ban will also see the production of click dual cigarettes – such as Sterling Dual – that change from normal to menthol, stopped.
Deborah Arnott, chief executive of Action on Smoking and Health, said the new rules will mean that "no person may produce or supply cigarettes or hand rolling tobacco with:
(a) a filter, paper, package, capsule or other component containing flavourings;
(b) a filter, paper or capsule containing tobacco or nicotine; or
(c) a technical feature allowing the consumer to modify the smell, taste, or smoke intensity of the product."
Source from the anti-smoking group ASH
https://ash.org.uk/media-and-news/ash-daily-news/ash-daily-news-for-9-october-2019/
Edited January 3, 2020 by Lemondropkid
yes i agree looks like its specifically menthol related gear
Just now, RR007 said:
Still not feel 100% sure, but that seems to be the way
Those that sell the blackmarket tabacco at the likes of Kilburn High Road or the various markets will be loving this.
Edited January 3, 2020 by Krapow
3 hours ago, RR007 said:
Isn't that Spain ?
tommy dee
EU laws, no longer a concern to the UK. f me sideways, half the people I know are omn old holborn or golden virgin.
1 hour ago, Stillearly said:
Edited January 3, 2020 by RR007
^^^ So yes wouldnt have mattered anyway.
33 minutes ago, tommy dee said:
lol theres a bloody great thread within Liverpool going on. They are having a meltdown lol. It is as Lemondropkid says I think just menthol related baccy and Cigs
fygjam
If there's no baccy then there's no need for shop to stock rolling papers.
Under EU law it is only a ban against adding menthol and other flavours to tobacco. If there is a ban rolling tobacco in general it is a locale UK law, that has nothing to do with the EU.
The directive says :
2) Ban on cigarettes and RYO with characterising flavours
Cigarettes and RYO tobacco products may no longer have characterising flavours such as menthol, vanilla or candy that mask the taste and smell of tobacco(***). In the case of products with more than a 3% market share (e.g. menthol), the ban will apply as of 2020.
A procedure for determining whether a tobacco product has a characterising flavour has been established, and an independent advisory panel will be set up to assist the Commission and Member States in this respect.
(***) Other products, such as cigars, cigarillos and snus are exempt from this ban.
Edited January 3, 2020 by Lirchenfeld
I'd imagine if it was all tobacco products then the tobacco lobby would be going ballistic.
eyes4thais
I don't care anymore, they cant smoke next to me in the pub, so i could not give a monkeys! I did not read article, But i would think it is logical to ban rolled tobacco because it is MORE dangerous and is widely used by the younger generation because it is affordable. Forcing smokers to buy expensive tailor made would encourage many more to quit. Win win. A friend of mine smoked roll up all his life, He died last yrs at 60.
Menthol gives a false impression of being safer, and again attracts the younger generation, so a logical decision to ban it.
Steelers4Life
...and the smugglers shall prosper!
Asian, Russian mobsters, and your various other rogue groups etc. have a very, very lucrative illegal industry here in the States smuggling cigarettes and loose tobacco from the southern States to the New York City area.
Example: a pack of cigarettes cost about $5.25 USD in Virginia / a pack of cigarettes cost about $13.00 USD in New York City
1 tractor trailer (their preferred method of transport) can hold approx. 800 cases each containing 600 packs of cigarettes (480,000 packs)
480,000 packs x $5.25 a pack = $2,520,000 USD --- Sell them in NYC at a reduced rate of $10 a pack ($4,800,000 USD) and you have just made a profit of approx. $2,280,000 USD for 1 truckload.
Illegal tobacco trafficking has a higher profit margin than cocaine, heroin, marijuana, or guns. according to the ATF here.
No worries! You will get your loose tobacco from somewhere. 😀
Skalliwag
Advanced Supar poster
It's odd to someone smoke here now.
Im trying to think of the last person I saw having a cigarette here,and I'm struggling to think of one.
6 hours ago, Lantern said:
They did and extensively lobbied against it. Definately looks though like just all menthol cigs and flavoured rolling baccy. Still bound to hit a lot I'd imagine

redpajama_set_name: RedPajamaCommonCrawl


Artificial intelligence: What does the future hold for India? This was the idea that was explored and discussed in the TCS Pan IIT Conclave 2019, with Zinnov as the knowledge partner, at the Indian Institute of Technology Delhi. The theme was set keeping in mind the fact that artificial intelligence and machine learning are technologies that are poised to transform the way humans will interact with machines, and the role that machines will play in all spheres of human life.
The speakers consisted of noted personalities of the country and abroad from various prestigious domains such IITs, industry leaders, subject matter experts, startups and government authorities. The sessions were based on use of artificial intelligence across diverse realms which are as follows: AI for Social Good, AI for Agriculture, AI for Education, AI in Manufacturing, Ethics, Privacy & Security, Future of Work, AI in Healthcare, AI and Startups, Governance of AI systems, and AI for Finance.
The sessions followed a format wherein the first the topic was addressed, and then based on the ideas generated in the panel discussions, the actions needed to be taken by the academia, industry, startups and policy makers, respectively, was framed. The panel consisted of one speaker/expert from each domain mentioned above.
Some of the speakers that took part in the panel discussions are as follows: S Sadagopan, G. S. Raghavan, Sudha Ram, Anand Rangarajan, Gautam Shroff, Prof. Isaac Ben, Nipun Mehrotra, Anna Roy, Dr. P Anandan, Ajay Sawhney, Neha Kumar, Dr. Rajesh Krishnan, P P Chakraborthy, Dr. Shailesh Kumar, C V Jawahar, Prof. T A Gonsalves, Dr. Suhas Wani, T V Prabhakar, Abhijit Joshi, Sriram Raghavan, Sujit Kumar, Anil Srivastava, P P Chakraborty, Dr. Venkat Runkana, Dr. Satyam Priyadarshy, Dr. Aloknath De, Luis Gonzalez, Sudeshna Sarkar, Prof. Rajat Moona, Subhashish Banerjee, Rajeev Rastogi, Ajay Bhushan Pandey, Shyam Divan, Sameer Garde, Jayant Sinha, Kevin Desouza, Amit Basole, Surjit Bhalla, Jayanthi Sivaswamy, Navakanta Bhat, Dr. Vivek Shekhar, Niranjan Joshi, Dr. Tanveer Syeda Mahmood, Ravi Narayan, Dr. Ashutosh Sharma, Manish Singhal, Ashish Gupta, Apurv Anand, Debu Chatterjee, and several others.
PanIIT Alumni India (Pan IIT) is an umbrella organization, representing alumni of all Indian Institutes of Technology (IITs). With the vision of "Dedicate the Knowledge Pool of Pan IIT Alumni for improving the Quality of Life of the people of India", the movement over the years, has developed and and spread in various parts of the world. Besides India, it has a very active presence in the United States, Canada, United Kingdom, Korea, Singapore, and Australia.
IIT Conclave 2019: Use of Artificial Intelligence for the Greater Good 0 out of 5 based on 0 ratings. 0 user reviews.


The American Academy of Pediatrics (AAP) recently issued a statement calling for governments to enact policies that allow only medical exemptions to vaccinations required for child care and school. The desired result of high vaccination rates will help ensure no child has to suffer through a disease that could have been prevented by a vaccine.
The AAP statement is in response to a growing number of pockets of unvaccinated children around the country. Many of the parents who choose not to vaccinate their children have received misleading or untrue information. And many vaccine refusers think the diseases against which we vaccinate no longer exist, even though they are circulating worldwide.
Low vaccination rates put children who cannot be vaccinated — such as those with medical problems or those who are too young to be vaccinated — at high risk for becoming ill or dying from a vaccine-preventable illness.
For babies born in United States in 2009, routine childhood immunization will prevent about 42,000 early deaths and 20 million cases of disease, according to a report published in the medical journal Pediatrics, saving $13.5 billion in direct costs and $68.8 billion in societal costs.
Vaccinating children makes sense from both a humanitarian and a financial viewpoint. It is time for Texas to eliminate nonmedical exemptions to vaccines.


Perfect and easy for gatherings with little prep time required, these sandwiches are sure to be a hit at your next get together!
Marinate chicken in Greek vinaigrette, salt, pepper, and zest of lemon.
Grill chicken breast and cut length-wise.
Spread Tzatziki on both slices of Focaccia bread.
Place chicken, cucumbers, and tomatoes on bread. Crumble feta cheese into large pieces, place on top of tomatoes and add top slice of bread.


our life..: we made it!
we are here... in the sunny state of CA!!
it was a crazy two weeks... we are trying to unpack and make it feel like home.
Let's get working on that internet! I keep checking in to see how life is in sunny california! Hope all is well! Oh, and you're comments on facebook about pool days... rude!!!!:) I'm jealous!


Nike are giving you the chance to try some of their most popular clothes and footwear for FREE! Simply sign up to their product testing site to be in with the chance!
Click 'GET THIS FREEBIE' and complete the online questionnaire so that they can build a profile for you. Once you're all registered you'll be notified of any products that fit your profile so that they can send them to you, so keep an eye on your emails!
You could be trying the latest pair of trainers or some of their new clothing lines!!


On Saturday, October 27th thousands of participants will run and walk the Susan G. Komen Race for the Cure throughout downtown Memphis in support of a world without breast cancer. Join us at the South Main Market as they turn at our building. We will be cheering them on right outside.
To sign up for the Race for the Cure click here.


The Village, Loxton has an aura of old world charm. When entering The Village you will feel like you have been transported back to the late 1890s when the Loxton township was just being developed.
Foundations for The Village were laid in the 1970s when the Loxton National Trust branch built a pug and pine replica of 'Loxton's Hut' – there are now over 45 fully furnished buildings and sites depicting and preserving the history and the way early settlers lived. Several buildings are home to the 1956 Murray River Flood exhibition, an amazing collection of photos showing the heartbreak and destruction left when the banks of The Murray overflowed!
The whole family will enjoy The Village, let parents and grandparents reminisce whilst children learn how those before them once lived.


Kurt Urban Performance can design an engine build to meet your specific needs.
This trunnion kit has been the best we have tested for those pushing the edge with hydraulic lifter valve gear. These parts have the durability for standing up in the most demanding street-performance-Auto cross-track day cars used today. The bushing is fully floating making assembly easy and lowering inertia weight on the rocker while increasing surface area carrying the load.
Have a custom engine designed and built to meet your specifications and exceed your expectations..


text:
What will the next wave of wildfires be like in Idaho?
Comments Off on What will the next wave of wildfires be like in Idaho?
The next wave, in many ways, is already here.
The wildfires in Idaho have become the latest manifestation of the trend of extreme weather events that has plagued the state in recent years.
In October, wildfires burned through much of the Great Basin.
In February, wildfires scorched a third of the state.
These extreme events have created an enormous demand for water in the region.
Now, that demand is getting a boost from a wildfire in the Great Plains.
The fires in Idaho and Montana are both wildfires.
Both fires are large, and both have massive populations.
The Great Basin wildfires are the largest on record, according to the US National Weather Service.
They were estimated to have burned more than 12,000 acres and have destroyed more than 1,100 homes and businesses in the regions south of Boise.
But there is one difference between the two fires.
The Montana fires are smaller, and have burned less than half as much land.
The wildfire in Idaho is larger and much more destructive, and the fires are both being driven by a drought.
The US National Drought Monitor says the state is experiencing the fourth-worst drought on record.
The drought has left many farmers with less land and forced many ranchers to relocate to remote areas in the area.
These farmers are also struggling with water shortages.
According to the Montana Drought Assessments, the state was in the midst of an eight-day drought in April.
The state also experienced a five-day, 10-day and 20-day dry period in the fall.
The last time there was a drought on this scale was during the 1920s, when Montana was experiencing one of the worst droughts in American history.
The United States is experiencing its second-worst dry period on record and at least a third the states average annual precipitation, according the National DRI.
A recent report by the US Department of Agriculture's Natural Resources Conservation Service (NRCS) noted that there were 8,700 lakes in the state, the lowest level in 50 years.
That number was down from the peak of nearly 9,700 during the dry years of the 1970s.
But drought is not the only thing that is causing the wildfires in the Idaho and Oregon fires.
There are also issues with the climate in the western part of the region, where wildfires are burning.
According the NRCS, the western side of the Basin has the most severe fire conditions on record due to the drought.
Fires have been burning in the desert east of the Boise metro area and in parts of southern Oregon.
But fires are also occurring in the eastern side of Idaho and in the north-central part of Montana.
In the northern part of that state, fires are burning along the Umatilla River in Idaho.
The river was once the most productive in the world, but the water level has dropped to near the lowest in nearly half a century.
There have been numerous fires along the river in recent months.
The fire season is the period when the fire season normally runs from July through December.
The dry weather in Idaho has resulted in the fires being allowed to burn.
However, the fire risk is also high because of the lack of water supply in that part of Idaho.
And because of how dry the riverside area of the river is, fires in that area could easily spread.
The federal government has set up a drought relief fund for the region of Idaho that is expected to raise $30 million.
However the funding won't cover the costs of water and other services that are critical to the region's farmers.
That money is being directed to farmers in the drought-stricken regions of the western and central parts of the basin.
Idaho has been dealing with drought for decades.
In 2007, the federal government set aside $5 billion for the state to deal with drought and wildfires.
That amount is expected continue to grow as the drought continues to worsen.
However that $5bn is not enough to keep the fires from spreading.
And the fires could get even worse.
The NRCC has forecast a drought that will last through the end of the year, with fire danger increasing with the weather pattern.
"The fire season in the Western Basin will be very dry, with some areas in our region having a dry fire season as early as April," the NSCS wrote.
"Flooding from the dry conditions could become a major threat to the state's water supply and livestock."
This fire season was supposed to last through mid-April.
The current drought is also expected to last until at least May.
It is unknown how the fire conditions will change in the future.
But it is important to remember that drought can be temporary.
Fires are not just limited to a few months in a row.
They can be years in the making.
In fact, some areas have experienced more than a decade of drought in one area.
The Umatillas fire was a major


text:
Bernard P. Lynch, 91
By shaun.lambert@c... ()
Thursday, May 9, 2019 - 10:49am
Bernard P. Lynch, 91, of Frankford, Del., passed away peacefully, surrounded by his loving family, on Sunday, May 5, 2019, at his home. He was born in Frankford, Del., on May 26, 1927, son of the late Atwood F. Lynch Sr. and the late Hazel C. (Walls) Lynch.
Lynch proudly served his country in the U.S. Air Corps during World War II. In 1992, he retired from work as the postmaster of the Frankford Post Office, after 25 years of service. He served his community in a number of capacities for the Town of Frankford. He served as the town's mayor and was also on the town council for a number of years.
Lynch was a charter member of the Elks Lodge 2173 in Selbyville, Del., and also a faithful member of the Frankford United Methodist Church. He will be remembered as a loving father, grandfather and great-grandfather.
In addition to his parents, Lynch was preceded in death by his wife, Grace H. Lynch; his brother, Atwood F. Lynch Jr.; and three sisters, Eleanor Lingo, Melreth Holladay and Odelta Lynch. He is survived by his daughter, Janet Hearn and her husband, Edgar, of Frankford; his son, Philip Lynch of Lewes, Del.; two granddaughters, Tonya James and her husband, Curtis, of Seaford, Del., and Monica Banks and her husband, Ted, of Dagsboro, Del.; three great-grandchildren, Lindsey Furbush, Branson James and Kenton James; two step-grandchildren, Pam Clowser and her husband, Brian, of Millsboro, Del., and Eddie Hearn of Laurel, Del.; and three step-great-grandchildren, Cierra Hearn, Sidney Hearn and Brooke Clowser.
A funeral service will be held at 1 p.m., with visitation at noon, on Friday, May 10, 2019, at Melson Funeral Services, 43 Thatcher Street, Frankford, Del. Interment will follow at Carey's Cemetery in Frankford. In lieu of flowers, the family suggested memorial contributions to the Frankford U.M. Church; P.O. Box 37; Frankford, DE 19945, or to Seasons Hospice; 220 Continental Dr., Ste. 407; Newark, DE 19713. Condolences may be sent online at www.melsonfuneralservices.com.


text:
@implementation SYStory

MJCodingImplementation
@end


May, 2017. The OMG SysML Version 1.5 specification (OMG document formal/2017-56-01) was formally released and can be downloaded from the OMG SysML page at http://www.omg.org/spec/SysML/1.5/. This specification supercedes SysML Version 1.4. A primary change from SysML v1.4 is the introduction of an Abstract Requirement that can be extended to support other kinds of requirements such as property-based requirements (refer to Annex E.8). The intent is to enable more precise expressions of requirements beyond purely text-based requirements.
The complete list of issues that were addressed as part of this revision can also be found by selecting the Issues Fixed link on the SysML specification page.


text:
H

Ha – He

Haapalaite (valleriite: IMA1972-021) 2.FD.30
Hafnon (zircon: IMA1974-018) 9.AD.30    (IUPAC: hafnium tetraoxysilicate)
Hagendorfite (alluaudite: 1954) 8.AC.10    (IUPAC: disodium manganese (iron(II) iron(III)) triphosphate)
Haggertyite (magnetoplumbite: IMA1996-054) 4.CC.45    (IUPAC: barium hexairon pentatitanium magnesium nonadecaoxide)
Häggite (Y: 1958) 4.HE.25    (IUPAC: vanadium(III) vanadium(IV) trihydro dioxide)
Hagstromite (IMA2019-093) 7.0  [no] [no]
Haidingerite (Y: 1827) 8.CJ.20    (IUPAC: calcium hydroxoarsenate monohydrate)
Haigerachite (IMA1997-049) 8.CF.10    (IUPAC: potassium triiron(III) hexa(dihydroxophosphate) di(hydroxophosphate) tetrahydrate)
Haineaultite (IMA1997-015) 9.DG.50
Hainite-(Y) (seidozerite, rinkite: IMA2016 s.p., Y: 1893) 9.BE.22
Haitaite-(La) (IMA2019-033a)  [no] [no]
Haiweeite (IMA1962 s.p., 1959) 9.AK.25    (IUPAC: calcium diuranyl dodecaoxypentasilicate dihydroxyl hexahydrate)
Hakite-(Hg) (tetrahedrite: IMA2018-K, IMA1970-019) 2.GB.05    (Cu6[Cu4Hg2]Sb4Se13)
Halamishite (phosphide: IMA2013-105) 1.0  [no] [no] (IUPAC: pentanickel tetraphosphide)
Håleniusite (fluorite) 3.DE.05
Håleniusite-(La) (fluorite: IMA2003-028) 3.DE.05   [no] (IUPAC: lanthanum oxofluoride)
Håleniusite-(Ce) (fluorite: IMA2021-042) 3.DE.05  [no] [no]
Halilsarpite (IMA2019-023) 8.CH.05  [no] [no]
Halite (halite, rocksalt: 1847) 3.AA.20    (IUPAC: sodium chloride)
Hallimondite (IMA1965-008) 8.EA.10    (IUPAC: dilead uranyl diarsenate (n)hydrate)
Halloysite (kaolinite: 1826) 9.ED.10
Halotrichite (halotrichite: 1777) 7.CB.85    (IUPAC: iron(II) dialuminium tetrasulfate docosahydrate)
Halurgite (IMA1967 s.p., 1962) 6.H0.35
Hambergite (Y: 1890) 6.AB.05    (IUPAC: diberyllium hydro borate)
Hammarite (meneghinite: 1924) 2.HB.05a    (Cu2Pb2Bi4S9)
Hanahanite (IMA2022-012) 4.E0.  [no] [no]
Hanauerite (IMA2018-045) 2.0  [no] [no] (IUPAC: silver mercury sulfide iodide)
Hanawaltite (IMA1994-036) 3.DD.15    ((Hg-Hg)3HgO3Cl2)
Hancockite (epidote, clinozoisite: IMA2006 s.p., 1899) 9.BG.05a
Hanjiangite (IMA2009-082) 9.E?.  [no] [no]
Hanksite (Y: 1885) 7.BD.30    (IUPAC: potassium docosasodium chloro nonasulfate dicarbonate)
Hannayite (Y: 1878) 8.CH.35    (IUPAC: diammonium trimagnesium tetra(hydroxophosphate) octahydrate)
Hannebachite (IMA1983-056) 4.JE.10    (IUPAC: dicalcium sulfite monohydrate).
Hansblockite (IMA2015-103) 2.0  [no] [no] ()
Hansesmarkite (polyoxometalate: IMA2015-067) 4.0  [no] [no]
Hanswilkeite (IMA2022-041) 2.CB.  [no] [no]
Hapkeite (silicide: IMA2003-014) 1.BB.35    (IUPAC: diiron silicide)
Haradaite (IMA1963-011) 9.DH.15    (IUPAC: strontium vanadium(IV) heptaoxodisilicate)
Hardystonite (melilite: 1899) 9.BB.10    (IUPAC: dicalcium zinc heptaoxodisilicate)
Harkerite (Y: 1951) 6.AB.70
Harmotome (zeolitic tectosilicate: IMA1997 s.p., 1801) 9.GC.10
Harmunite (post-spinel: IMA2012-045) 4.0  [no] [no] (IUPAC: calcium diiron tetraoxide)
Harrisonite (IMA1991-010) 8.AC.55    (IUPAC: calcium hexairon(II) di(tetraoxysilicate) diphosphate)
Harstigite (Y: 1886) 9.BF.05    (IUPAC: hexacalcium tetraberyllium manganese(II) di(tetraoxysilicate) di(heptaoxodisilicate) dihydroxyl)
Hasanovite (IMA2020-033)  [no] [no]
Hashemite (baryte: IMA1978-006) 7.FA.15    (IUPAC: barium chromate(VI))
Hastingsite [Ca-amphibole: IMA2012 s.p., 1896] 9.DE.15
Hatchite (hatchite: 1912) 2.GC.05    (IUPAC: silver lead thallium diarsenide pentasulfide)
Hatertite (alluaudite: IMA2012-048) 8.0  [no] [no] ()
Hatrurite (Y: 1977) 9.AG.65    (IUPAC: tricalcium oxo(tetraoxysilicate))
Hauchecornite (hauchecornite: IMA1975-006a, 1893 Rd) 2.BB.10    (IUPAC: nonanickel bismuth antimonide octasulfide)
Hauckite (IMA1979-012) 7.BB.10
Hauerite (pyrite: 1846) 2.EB.05a    (IUPAC: manganese disulfide)
Hausmannite (spinel: 1813) 4.BB.10    (IUPAC: manganese(II) dimanganese(III) tetraoxide)
Haüyne (sodalite: 1807) 9.FB.10
Hawleyite (sphalerite: 1955) 2.CB.05a    (IUPAC: cadmium sulfide)
Hawthorneite (magnetoplumbite: IMA1988-019) 4.CC.45
Haxonite (carbide: IMA1971-001) 1.BA.10    (IUPAC: triicosa(iron,nickel) hexacarbide)
Haycockite (chalcopyrite: IMA1971-028) 2.CB.10b    (IUPAC: tetracopper pentairon octasulfide)
Haydeeite (atacamite: IMA2006-046) 3.DA.10c    (IUPAC: tricopper magnesium hexahydro dichloride)
Haynesite (IMA1990-023) 4.JJ.25    (IUPAC: triuranyl dihydro disulfite pentahydrate)
Haywoodite (IMA2021-115)
Hazenite (IMA2007-061) 8.CH.40   [no] (IUPAC: potassium sodium dimagnesium diphosphate tetradecahydrate)
Heamanite-(Ce) (IMA2020-001) 4.0  [no] [no]
Heazlewoodite (Y: 1897) 2.BB.05    (IUPAC: trinickel disulfide)
Hechtsbergite (atelestite: IMA1995-050) 8.BO.15    (IUPAC: dibismuth hydro oxovanadate)
Hectorfloresite (IMA1987-050a) 7.BD.60    (IUPAC: nonasodium iodate tetrasulfate)
HectoriteQ (montmorillonite, smectite: 1941) 9.EC.45
Hedegaardite (whitlockite: IMA2014-069) 8.0  [no] [no]
Hedenbergite (pyroxene: IMA1988 s.p., 1819) 9.DA.15    (IUPAC: calcium iron(II) hexaoxydisilicate)
Hedleyite (tetradymite: 1945) 2.DC.05    (IUPAC: heptabismuth tritelluride)
Hedyphane (apatite: IMA1980 s.p., 1830) 8.BN.05    (IUPAC: dicalcium trilead chloro triarsenate)
Heftetjernite (wolframite: IMA2006-056) 4.DB.30    (IUPAC: scandium tantalum tetraoxide)
Heideite (IMA1973-062) 2.DA.15    ()
Heidornite (Y: 1956) 6.EC.30
Heinrichite (Y: 1958) 8.EB.05    (IUPAC: barium diuranyl diarsenate decahydrate)
Heisenbergite (IMA2010-076) 4.GA.  [no] [no] (IUPAC: uranyl dihydroxide monohydrate)
Hejtmanite (seidozerite, bafertisite: IMA1989-038) 9.BE.55
Heklaite (fluorosilicate: IMA2008-052) 3.0    (IUPAC: potassium sodium hexafluorosilicate)
Hellandite 9.DK.20
Hellandite-(Ce) (IMA2001-019) 9.DK.20   [no]
Hellandite-(Y) (IMA2000-F, 1903) 9.DK.20
Hellyerite (IMA1962 s.p., 1959) 5.CA.20    (IUPAC: nickel carbonate hexahydrate)
Helmutwinklerite (tsumcorite: IMA1979-010) 8.CG.20    (IUPAC: lead dizinc diarsenate dihydrate)
Helvine (sodalite: 1804) 9.FB.10    (IUPAC: triberyllium tetramanganese(II) tri(tetraoxysilicate) sulfide)
Hematite (corundum: IMA1971 s.p., 1546) 4.CB.05    (IUPAC: diiron trioxide)
Hematolite (hematolite: 1884) 8.BE.45
Hematophanite (perovskite: 1928) 3.DB.35    ()
Hemihedrite (iranite: IMA1967-011) 7.FC.15    (IUPAC: zinc decalead hexachromate di(tetraoxysilicate) dihydroxyl)
Hemimorphite (IMA1962 s.p., 1853) 9.BD.10    (IUPAC: tetrazinc heptaoxodisilicate dihydroxyl monohydrate)
Hemleyite (corundum: IMA2016-085) 9.0  [no] [no] (IUPAC: iron trioxysilicate)
Hemloite (IMA1987-015) 04.JB.60
Hemusite (sphalerite: IMA1968-038) 2.CB.35a    (IUPAC: tetracopper(I) dicopper(II) tin molybdenum octasulfide)
Hendekasartorite (sartorite: IMA2015-075) 2.0  [no] [no] (Tl2Pb48As82S172)
Hendersonite (hewettite: IMA1967 s.p., 1962) 4.HG.50
Hendricksite (mica: IMA1965-027) 9.EC.20    (IUPAC: potassium trizinc (aluminotrisilicate) decaoxydihydroxyl)
Heneuite (IMA1983-057) 8.BO.25    (IUPAC: calcium pentamagnesium hydro triphosphate carbonate)
Henmilite (IMA1981-050) 6.AC.30   (IUPAC: dicalcium copper tetrahydro di[tetrahydroborate])
Hennomartinite (lawsonite: IMA1992-033) 9.BE.05    (IUPAC: strontium dimanganese(III) heptaoxodisilicate dihydroxyl monohydrate)
Henritermierite (garnet, henritermierite: IMA1968-029) 9.AD.25    (IUPAC: tricalcium dimanganese(III) di(tetraoxysilicate) tetrahydroxyl)
Henryite (IMA1982-094) 2.BA.65    (, with x ~ 0.40)
Henrymeyerite (hollandite, coronadite: IMA1999-016) 4.DK.05b    (IUPAC: barium (heptatitanium iron(II)) hexadecaoxide)
Hentschelite (IMA1985-057) 8.BB.40    (IUPAC: copper diiron(III) dihydro diphosphate)
Hephaistosite (IMA2006-043) 3.AA.60    (IUPAC: thallium dilead pentachloride)
Heptasartorite (sartorite: IMA2015-073) 2.0  [no] [no] (Tl7Pb22As55S108)
Herbertsmithite (atacamite: IMA2003-041) 3.DA.10c    (IUPAC: tricopper zinc hexahydro dichloride)
Hercynite (spinel, spinel: 1839) 4.BB.05    (IUPAC: iron(II) dialuminium tetraoxide)
Herderite (gadolinite, herderite: 1828) 8.BA.10    (IUPAC: calcium beryllium fluoro phosphate)
Hereroite (hereroite: IMA2011-027) 8.0  [no]
Hermannjahnite (zinkosite: IMA2015-050) 7.0  [no] [no] (IUPAC: copper zinc disulfate)
Hermannroseite (adelite: IMA2010-006) 8.BH.35  [no]  (IUPAC: calcium copper hydro phosphate)
Herzenbergite (Y: 1935) 2.CD.05    (IUPAC: tin sulfide)
Hessite (Y: 1843) 2.BA.60    (IUPAC: disilver telluride)
Hetaerolite (spinel: 1877) 4.BB.10    (IUPAC: zinc dimanganese(III) tetraoxide)
Heterogenite ("O(OH)" group: IMA1967 s.p., 1872) 4.FE.20    (IUPAC: hydrocobalt(III) oxide)
HeteromorphiteI (plagionite: 1849) 2.HC.10c    (IUPAC: heptalead octaantimonide nonadecasulfide)
Heterosite (olivine: 1826) 8.AB.10    (IUPAC: iron(III) phosphate)
Heulandite (zeolitic tectosilicate) 9.GE.05
Heulandite-Ba (IMA2003-001) 9.GE.05    (, zeolite family, chain of T10O20 tetrahedra)
Heulandite-Ca (IMA1997 s.p.) 9.GE.05    (, zeolite family, chain of T10O20 tetrahedra)
Heulandite-K (IMA1997 s.p., 1822) 9.GE.05   [no] (, zeolite family, chain of T10O20 tetrahedra)
Heulandite-Na (IMA1997 s.p.) 9.GE.05   [no] (, zeolite family, chain of T10O20 tetrahedra)
Heulandite-Sr (IMA1997 s.p.) 9.GE.05   [no] (, zeolite family, chain of T10O20 tetrahedra)
Hewettite (hewetite: 1914) 4.HE.15    (IUPAC: calcium hexavanadium(V) hexadecaoxide nonahydrate)
Hexacelsian (dmisteinbergite: IMA2015-045) 9.F?.  [no] [no] (IUPAC: barium (dialuminium octaoxydisilicate))
Hexaferrum (alloy: IMA1995-032) 1.AG.05   [no] ()
Hexahydrite (hexahydrite: 1911) 7.CB.25    (IUPAC: magnesium sulfate hexahydrate)
Hexahydroborite (IMA1977-015) 6.AC.25    (IUPAC: calcium di[tetrahydroborate] dihydrate)
Hexamolybdenum (alloy: IMA2007-029) 1.0   [no] ()
HexatestibiopanickeliteN (Y: 1974) 2.CC.30    ()
Hexathioplumbite (IMA2021-092) 7.JA.  [no] [no]
Heyerdahlite (astrophyllite: IMA2016-108) 9.D?.  [no] [no]
HeyiteQ (brackebuschite: IMA1971-042) 8.BK.20    Note, Uwe Kolitsch: it might be calderonite.
Heyrovskýite (lillianite: IMA1970-022) 2.JB.40b    (IUPAC: hexalead nonasulfa dibismuthide)
Hezuolinite (chevkinite: IMA2010-045) 9.BE.70  [no]

Hi – Hy
Hiärneite (IMA1996-040) 4.DL.10   [no]
Hibbingite (atacamite: IMA1991-036) 3.DA.10a    (IUPAC: diiron(II) trihydroxide chloride)
Hibonite (magnetoplumbite: 1956) 4.CC.45
Hidalgoite (alunite, beudantite: IMA1987 s.p., 1953 Rd) 8.BL.05    (IUPAC: lead trialuminium sulfate arsenate hexahydrate)
Hielscherite (ettringite: IMA2011-037) 7.0  [no] [no]
Hieratite (fluorosilicate: 1882) 3.CH.15    (IUPAC: dipotassium hexafluorosilicate)
Hilairite (hilairite: IMA1972-019) 9.DM.10    (IUPAC: disodium zircon nonaoxo trisilicate trihydrate)
Hilarionite (kaňkite: IMA2011-089) 8.0  [no] [no] (IUPAC: diiron(III) hydro sulfate arsenate hexahydrate)
Hilgardite (hilgardite: 1937) 6.ED.05    (IUPAC: dicalcium nonaoxo pentaborate monohydrate)
Hillebrandite (Y: 1908) 9.DG.40    (IUPAC: dicalcium trioxo silicate dihydroxyl)
Hillesheimite (günterblassite: IMA2011-080) 9.0  [no] [no]
Hillite (fairfieldite: IMA2003-005) 8.CG.05    (IUPAC: dicalcium zinc diphosphate dihydrate)
Hingganite (gadolinite) 9.AJ.20
Hingganite-(Ce) (IMA2004-004, 1987) 9.AJ.20    (IUPAC: cerium beryllium tetraoxysilicate hydroxyl)
Hingganite-(Nd) (IMA2019-028) 9.AJ.20  [no] [no]
Hingganite-(Y) (IMA1981-052) 9.AJ.20    (IUPAC: yttrium beryllium tetraoxysilicate hydroxyl)
Hingganite-(Yb) (IMA1982-041) 9.AJ.20    (IUPAC: ytterbium beryllium tetraoxysilicate hydroxyl)
Hinsdalite (alunite, beudandite: IMA1987 s.p., 1911 Rd) 8.BL.05    (IUPAC: lead trialuminium hexahydro sulfate phosphate)
Hiortdahlite (wöhlerite: IMA1987 s.p., 1890) 9.BE.17  [no]
Hiortdahlite IIN (Y: 1988, 1890) 9.BE.17  [no] [no]
Hiroseite (perovskite: IMA2019-019) 9.0  [no] [no] (IUPAC: iron trioxy silicate)
Hisingerite (kaolinite: 1819) 09.ED.10
Hitachiite (tetradymite: IMA2018-027) 2.0  [no] [no] (Pb5Bi2Te2S6)
Hizenite-(Y) (tengerite: IMA2011-030) 5.0  [no]  (IUPAC: dicalcium hexayttrium undecacarbonate tetradecahydrate)
Hjalmarite (amphibole: IMA2017-070) 9.D?.  [no] [no]
Hloušekite (lindackerite: IMA2013-048) 8.0  [no] [no] ()
Hocartite (stannite: IMA1967-046) 2.CB.15a    (IUPAC: disilver iron tin tetrasulfide)
Hochelagaite (IMA1983-088) 4.FM.15    (IUPAC: calcium tetraniobium undecaoxide octahydrate)
Hodgesmithite (ktenasite: IMA2015-112) 7.0  [no] [no] (IUPAC: hexa(copper,zinc) zinc decahydro disulfate trihydrate)
Hodgkinsonite (Y: 1913) 9.AE.20    (IUPAC: dizinc manganese tetraoxysilicate dihydroxyl)
Hodrušite (cuprobismutite: IMA1969-025) 2.JA.10c    (IUPAC: tetracopper hexabismuth undecasulfide)
Hoelite (Y: 1922) 10.CA.15    (IUPAC: 9,10-anthraquinone)
Hoganite (IMA2001-029) 10.AA.35    (IUPAC: copper diacetate monohydrate)
Hogarthite (lemoynite: IMA2009-043) 9.E?.  [no] [no]
Høgtuvaite (sapphirine: IMA1990-051) 9.DH.40
Hohmannite (amarantite: 1888) 7.DB.30    (IUPAC: diiron(III) oxodisulfate octahydrate)
Holdawayite (IMA1986-001) 5.BA.20    (IUPAC: hexamanganese(VI) (chloro,hydro) dicarbonate heptahydro)
Holdenite (Y: 1927) 8.BE.55    (IUPAC: hexamanganese(II) trizinc diarsenate tetraoxysilicate octahydroxyl)
Holfertite (IMA2003-009) 4.GB.70    ((UO2)1.75Ca0.25TiO4·3H2O)
Hollandite (hollandite, coronadite: IMA2012 s.p., 1906 Rd) 4.DK.05a    (IUPAC: barium hexamanganese(IV) dimanganese(III) hexadecaoxide)
Hollingworthite (ullmannite: IMA1964-029) 2.EB.25    (IUPAC: rhodium arsenide sulfide)
Hollisterite (alloy: IMA2016-034) 1.0  [no] [no] (IUPAC: trialuminium iron alloy)
Holmquistite [Li-amphibole: IMA2012 s.p., IMA1997 s.p., 1913] 9.DD.05
Holtedahlite (IMA1976-054) 8.BB.20    (IUPAC: dodecamagnesium hexa(hydro,oxo) (hydroxophosphate,carbonate) pentaphosphate)
Holtite (dumortierite: IMA1969-029 Rd) 9.AJ.10    ((Ta0.6☐0.4)Al6BSi3O18)
Holtstamite (garnet: IMA2003-047) 9.AD.25    (IUPAC: tricalcium dialuminium di(tetraoxysilicate) tetrahydroxyl)
Homilite (gadolinite: 1876) 9.AJ.20    (IUPAC: dicalcium iron(II) decaoxo diboro disilicate)
Honeaite (IMA2015-060) 2.0  [no] [no] (IUPAC: trigold thalium ditelluride)
Honessite (hydrotalcite, woodwardite: IMA1962 s.p., 1956) 7.DD.35
Hongheite (vesuvianite: IMA2017-027) 9.B  [no] [no]
Hongshiite (alloy: IMA1988-xxx, 1974) 1.AG.45    (IUPAC: platinum copper alloy)
Honzaite (burgessite: IMA2014-105) 8.0  [no] [no] (IUPAC: dinickel dihydroxoarsenate pentawater)
Hopeite (hopeite: 1822) 8.CA.30    (IUPAC: trizinc diphosphate tetrahydrate)
Horákite (IMA2017-033) 8.0  [no] [no]
Hörnesite (vivianite: 1860) 8.CE.40    (IUPAC: trimagnesium diarsenate octahydrate)
Horomanite (IMA2007-037) 2.BB.    (IUPAC: hexairon trinickel octasulfide)
Horváthite-(Y) (IMA1996-032) 5.BD.25    (IUPAC: sodium yttrium difluoro carbonate)
Höslite (IMA2021-084) 8.DB.  [no] [no]
Hotsonite (IMA1983-033) 8.DF.05    (IUPAC: pentaluminium decahydro sulfate phosphate octahydrate)
Housleyite (IMA2009-024) 7.0  [no] [no] (Pb6CuTe4O18(OH)2)
Howardevansite (howardevansite: IMA1987-011) 8.AC.05    (IUPAC: sodium copper(II) diiron(III) trivanadate)
Howieite (IMA1964-017) 9.DH.65
Howlite (Y: 1868) 6.CB.20    (IUPAC: dicalcium nonaoxo pentaboro silicate pentahydroxyl)
Hrabákite (hauchecornite: IMA2020-034)  [no] [no]
Hsianghualite (zeolitic tectosilicate: IMA1997 s.p., 1958) 9.GB.05    (IUPAC: dilithium tricalcium triberyllium tri(tetraoxosilicate) difluoride)
Huanghoite-(Ce) (IMA1967 s.p., 1961) 5.BD.35    (IUPAC: barium cerium fluoro dicarbonate)
Huangite (alunite, alunite: IMA1991-009) 7.BC.10
Huanzalaite (wolframite: IMA2009-018) 4.DB.30  [no]  (IUPAC: magnesium tungstate)
Hubeite (IMA2000-022) 9.BJ.60   [no]
Hübnerite (wolframite: 1865) 4.DB.30    (IUPAC: manganese(II) tungstate)
Huemulite (decavanadate: IMA1965-012) 4.HG.10
Huenite (IMA2015-122) 7.0  [no] [no] (IUPAC: tetracopper dihydro trimolybdate)
Hügelite (Y: 1913) 8.EC.15
Hughesite (decavanadate: IMA2009-035a) 8.0  [no]
Huizingite-(Al) (IMA2015-014) 7.0  [no]
Hulsite (hulsite: 1908) 6.AB.45
Humberstonite (IMA1967-015) 7.DG.10    (IUPAC: tripotassium heptasodium dimagnesium hexasulfate dinitrate hexahydrate)
Humboldtine (humboldtine: 1821) 10.AB.05    (IUPAC: iron(II) oxalate dihydrate)
Humite (humite: 1813) 9.AF.50    (IUPAC: heptamagnesium tri(tetraoxosilicate) di(fluoride,hydroxyl))
Hummerite (Y: 1951) 4.HC.10
Hunchunite (alloy: IMA1991-033) 1.AA.25    (IUPAC: digold lead alloy)
Hundholmenite-(Y) (okanoganite: IMA2006-005) 9.AJ.35   [no] (IUPAC: magnesium pentaoxo tetraborate tetrahydro heptahydrate)
Hungchaoite (IMA1967 s.p., 1964) 6.DA.20
Huntite (Y: 1953) 5.AB.25    (IUPAC: calcium trimagnesium tetracarbonate)
Hureaulite (IMA2007 s.p., 1825) 8.CB.10    (IUPAC: pentamanganese(II) di(hydroxophosphate) diphosphate tetrahydrate)
Hurlbutite (danburite: 1952) 8.AA.15    (IUPAC: calcium diberyllium diphosphate)
Hutcheonite (garnet, garnet: IMA2013-029) 9.AD.25  [no] [no] (IUPAC: tricalcium dititanium dodecaoxy dialuminosilicate)
Hutchinsonite (Y: 1905) 2.HD.45    (IUPAC: lead thallium pentarsenide nonasulfide)
Huttonite (monazite: 1951) 9.AD.35    (IUPAC: thorium tetraoxysilicate)
HyalophaneI (Y: 1855) 9.FA.30
Hyalotekite (hyalotekite: 1877) 9.CH.05
HydroastrophylliteN (astrophyllite: 2003) 9.DC.05
Hydrobasaluminite (Y: 1948) 7.DE.60    (IUPAC: tetraluminium decahydro sulfate pentadecahydrate)
Hydrobiotite (corrensite: IMA1983 s.p., 1882 Rd) 9.EC.60    A 1:1 regular interstratification of biotite and vermiculite layers.
Hydroboracite (Y: 1834) 6.CB.15
Hydrocalumite (hydrotalcite: 1934) 4.FL.10
Hydrocerussite (Y: 1877) 5.BE.10    (IUPAC: trilead dihydro dicarbonate)
Hydrochlorborite (Y: 1965) 6.DA.30
Hydrodelhayelite (IMA1979-023) 9.EB.10
Hydrodresserite (dundasite: IMA1976-036) 5.DB.15    (IUPAC: barium dialuminium tetrahydro dicarbonate trihydrate)
Hydroglauberite (IMA1968-026) 7.CD.20    (IUPAC: decasodium tricalcium octasulfate hexahydrate)
Hydrohalite (Y: 1847) 3.BA.05    (IUPAC: sodium chloride dihydrate)
Hydrohalloysite (kaolinite: 1943) 9.ED.   [no]
Hydrohonessite (hydrotalcite, woodwardite: IMA1980-037a) 7.DD.35
Hydrokenoelsmoreite (pyrochlore, elsmoreite: IMA2010 s.p., IMA2003-059 Rd) 4.DH.15
Hydrokenomicrolite (pyrochlore, microlite: IMA2011-103) 4.D  [no] [no]
Hydrokenopyrochlore (pyrochlore, pyrochlore: IMA2017-005) 4.D  [no] [no]
Hydrokenoralstonite (pyrochlore: 1871) 3.CF.05
Hydromagnesite (Y: 1828) 5.DA.05    (IUPAC: pentamagnesium dihydro tetracarbonate tetrahydrate)
Hydrombobomkulite (chalcoalumite: IMA1979-079a) 5.ND.15
Hydroniumjarosite (alunite, alunite: IMA1987 s.p., 1960 Rd) 7.BC.10
Hydroniumpharmacoalumite (pharmacosiderite: IMA2012-050) 8.D  [no] [no]
Hydroniumpharmacosiderite (pharmacosiderite: IMA2010-014) 8.DK.10  [no]
Hydronováčekite (IMA2007 s.p., 1951) 8.EB.05  [no] [no] (IUPAC: magnesium diuranyl diarsenate dodecahydrate)
Hydropascoite (pascoite: IMA2016-032) 4.0  [no] [no]
Hydroplumboelsmoreite (jixianite, pyrochlore: IMA2021 s.p., IMA2013 s.p., IMA2010 s.p., IMA1984-062) 4.DH.15
Hydropyrochlore (pyrochlore, pyrochlore: IMA2010 s.p., 1977 Rd) 4.DH.15
Hydroredmondite (redmondite: IMA2021-073)  [no] [no]
Hydroromarchite ("O(OH)" group: IMA1969-007) 4.FF.05    (IUPAC: dihydrotritin(II) dioxide)
HydroscarbroiteQ (Y: 1960) 5.DA.35
Hydrotalcite (hydrotalcite: 1842) 5.DA.50
Hydroterskite (terskite: IMA2015-042) 4.0  [no] [no] (IUPAC: disodium dodecaoxy zirconhexasilicate hexahydroxyl)
Hydrotungstite (Y: 1944) 4.FJ.15    (IUPAC: tungsten dihydro dioxide monohydrate)
Hydrowoodwardite (hydrotalcite, woodwardite: IMA1996-038) 7.DD.35
Hydroxyapophyllite-(K) (apophyllite: IMA2013 s.p., IMA1978 s.p.) 9.EA.15
Hydroxycalciomicrolite (pyrochlore, microlite: IMA2013-073) 4.D  [no] [no] (IUPAC: pentadecacalcium ditantalum hexaoxo hydro)
Hydroxycalciopyrochlore (pyrochlore, pyrochlore: IMA2011-026) 4.D  [no] [no]
Hydroxycalcioroméite (pyrochlore, roméite: IMA2010 s.p., 1895 Rd) 4.D
Hydroxycancrinite (cancrinite: IMA1990-014) 9.FB.05
Hydroxyferroroméite (pyrochlore, roméite: IMA2016-006) 4.D  [no] [no]
Hydroxykenoelsmoreite (pyrochlore, elsmoreite: IMA2016-056) 4.D  [no] [no]
Hydroxykenomicrolite (pyrochlore, microlite: IMA2010 s.p., IMA1980-021 Rd) 4.DH.
Hydroxykenopyrochlore (pyrochlore, pyrochlore: IMA2017-030a) 4.D  [no] [no]
Hydroxylapatite (apatite: IMA2010 s.p., 1856) 8.BN.05    (IUPAC: pentacalcium hydro triphosphate)
Hydroxylbastnäsite (bastnäsite) 5.BD.20a (IUPAC: REE hydrocarbonate)
Hydroxylbastnäsite-(Ce) (IMA1987 s.p., 1964) 5.BD.20a
Hydroxylbastnäsite-(La) (1986, IMA2021-001) 5.BD.20a   [no]
Hydroxylbastnäsite-(Nd) (IMA1984-060) 5.BD.20a
Hydroxylborite (IMA2005-054) 6.AB.50    (IUPAC: trimagnesium trihydro borate)
Hydroxylchondrodite (humite: IMA2010-019) 9.AF.45  [no]  (IUPAC: pentamagnesium di(tetraoxysilicate) dihydroxyl)
Hydroxylclinohumite (humite: IMA1998-065) 9.AF.55   [no] (IUPAC: nonamagnesium tetra(tetraoxysilicate) dihydroxyl)
Hydroxyledgrewite (humite: IMA2011-113) 9.AF.  [no] [no] (IUPAC: nonacalcium tetra(tetraoxysilicate) dihydroxyl)
Hydroxylellestadite (apatite: IMA2010 s.p., IMA1970-026) 9.AH.25
Hydroxylgugiaite (melilite: IMA2016-009) 9.B?.  [no] [no]
Hydroxylhedyphane (apatite: IMA2018-052) 8.BN.  [no] [no] (IUPAC: dicalcium trilead hydro triarsenate)
Hydroxylherderite (gadolinite: IMA2007 s.p., 1894) 8.BA.10    (IUPAC: calcium beryllium hydro phosphate)
Hydroxylpyromorphite (apatite: IMA2017-075) 8.0  [no] [no] (IUPAC: pentalead hydro triphosphate)
Hydroxylwagnerite (wagnerite: IMA2004-009) 8.BB.15  [no] [no] (IUPAC: dimagnesium hydro phosphate)
Hydroxymanganopyrochlore (pyrochlore, pyrochlore: IMA2012-005) 4.D  [no]
Hydroxymcglassonite-(K) (apophyllite: IMA2020-066) 9.0  [no] [no]
Hydroxynatropyrochlore (pyrochlore, pyrochlore: IMA2017-074) 4.D  [no] [no]
Hydroxyplumbopyrochlore (pyrochlore: IMA2018-145) 4.0  [no] [no]
Hydrozincite (Y: 1853) 5.BA.15    (IUPAC: pentazinc hexahydro dicarbonate)
Hylbrownite (kanonerovite: IMA2010-054) 8.FC.  [no] [no]
Hypercinnabar (IMA1977-D) 2.CD.15b    (IUPAC: mercury sulfide)
Hyršlite (sartorite: IMA2016-097) 2.0  [no] [no] (Pb8As10Sb6S32)
Hyttsjöite (IMA1993-056) 9.EG.60   [no]

External links
IMA Database of Mineral Properties/ RRUFF Project
Mindat.org - The Mineral Database
Webmineral.com
Mineralatlas.eu minerals H

redpajama_set_name: RedPajamaWikipedia


Welcome to the current incredible weblog, At this point that you are visiting 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) article. You can find any sort of Compression Socks products of which perhaps you would like in the following. Most people do blog post so many products with which has a good good quality, this also 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) can be described as product we highly recommend to suit your needs. You might want to explore this page meticulously in order to gain certain beneficial home elevators 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) prior to deciding to get the idea.
923CLLM99 Size: Large Long (LL) Features: -Sock.-Material: 78pct Nylon, 22pct spandex – latex free.-Fabric: Opaque.-Toe type: Closed toe.-Medical compression socks and stockings have earned a long-standing reputation for high medical effectiveness and durability.-Access stockings offer quality, durability, and effectiveness at a fraction of the price.-Condition: Chronic venous insufficiency (CVI), deep vein thrombosis (DVT), moderate / severe swelling, varicose veins – moderate / severe.-Sold as a pair. Options: -Available in small short (SS), small long (SL), medium short (MS), medium long (ML), large short (LS), large long (LL), x-large short (XS) and x-large long (XL) sizes. Construction: -Constructed from a two-way stretch knit that increases patient comfort and therefore promotes compliance. Color/Finish: -Color: Black. Dimensions: -Style / Length: Knee high.
The product detailed description higher than could be account required to buy 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL). Next in case you are interested to own 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) which construction from Sigvaris company, it is possible to simply click Buy Link below. This approach 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) who has object coupon: B003QZWHRA.
Not really without the need of reason you highly recommend 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) to you, it is all considering 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) is often a product that has so excellent quality by means of trusted Sigvaris product. Besides this approach 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) post, that world-wide-web moreover gives other blogposts for you, and find it by using the lookup proverbial box which placed besides this web site. Please click the BUY BUTTON less than if you ever actually want to buy this approach 970 Access Series 30-40 mmHg Men's Closed Toe Knee High Sock Size: Large Long (LL) merchandise.


When it comes to tree care maintenance, homeowners may be getting their information passed down by generation or from friends and neighbors. And while some of that information may be true, chances are that most of it is missing the mark. That is why it is always a good idea to get your tree care maintenance information from your trusted Houston tree trimming specialists at Metro Tree.
It is common for most root systems to extend several feet underground with the majority of the roots being concentrated in the top few inches of soil. The main supporting system can be found near the base of the tree, where is meets the soil. From there it tapers of quite drastically into smaller, more fragile roots. This means protecting the layers of soil near the base of the tree is more important to the tree's overall health.
While many homeowners may think that the addition of concrete to large cavities or hollows within a tree can help to make it more structurally sound, this practice can actually do more harm to a tree. In fact, instead of strengthening the tree it can have the reverse effect and stimulate more decay and breakage. Tree care specialists now know that it is better to let the tree heal on its own and use spray insulation to fill holes if necessary.
While the process of pruning does in fact result in dense and often vigorous sprout growth, this process consumes a great deal of a tree's energy. Luckily there are many great benefits of healthy pruning but over-pruning can become a serious problem when it comes to the overall health of your trees. If you are unsure of an appropriate tree pruning schedule for your trees, seek advice from a professional technician before beginning work on the trees located on your property.
There are many myths surrounding the practice of topping trees but the only thing Houston residents should remember is that topping trees is extremely damaging to your tree's health. Topping a tree always results in serious injury to the tree and commonly results in long-term structural issues as well. This practice can also cause decay, disease and rapid re-growth, resulting in the need for constant upkeep.
Unfortunately, as magical as trees are, they do not have the ability to heal by regenerating lost tissue. When a tree is pruned or punctures it simply covers these "injuries" with brand new layers of wood. Cutting close to the trunk of the tree or worse, puncturing the tree trunk can result in decay and disease. DIYers should be careful to retain the "branch collar" or the slightly raised sections that surround the base of the tree branches when pruning.
While some smaller trees can benefit from the addition of a sturdy stake to keep upright after initial planting, trees that can stand on their own don't need to be routinely staked. Unnecessary staking is an added step for homeowners that can be avoided and when done improperly, can create new health problems for your trees. Any staking done on your property should be seen as a temporary solution to assist trees while they gain their own strength and they should be removed in a timely manner.
Sometimes, in order to prevent decay, deter insect infestations or cover wounds on trees, homeowners may turn to tree seal or paint to mask unsightly areas. While this process may temporarily cover problem areas it is detrimental to the health of your trees. Paints, tar, shellac and other sealants do not prevent disease or decay and in some cases, may actually cause more harm to your trees health. It is recommended that homeowners leave wounds open to allow the tree to heal naturally.
You may think that the occasional addition of a quality topsoil near the base of your tree is a good way to keep it healthy and strong. But this process can have the opposite effect on your trees. It is very important the the base of your trees stays at an appropriate depth in relation to the soil grade surrounding it. Too much soil, constant grade changes and excessive cultivation can result in root loss and other, more serious consequences.
While it is true that most trees do just fine out in the forest, urban trees are not living under those same conditions. The trees on your property have to deal with a great deal of negative influences to their health including pollution, confined spaces, concrete, asphalt, soil compaction and smaller rooting areas. The loss of even a single tree can also have a devastating impact on the overall landscape surrounding your home.
10. This Company Advertised as "Experts", So They Must Be!
There are no regulations set in place for people placing ads in the Yellow Pages, on the Internet or even in your local classifieds. The only way to be sure that you are working with a team of certified tree experts is to do your homework. Look for certified Arborists and ask for references before you hire a technician. It is also important for homeowners to ask to see proof of insurance certificates and credentials before agreeing to any type of contract with a tree maintenance service.


At Glotrans Financial Services, we know that every client has different goals and strategies for achieving them. That is why we make it our number one priority to thoroughly discuss, evaluate, and understand the goals of each customer. With this knowledge, we help clients achieve their goals by providing our expertise and financial services.
Now residence dashwoods she excellent you. Shade being under his bed her. Much read on as draw.


I have never been one to cook. I don't cook for myself and even with the best intentions, I don't really cook for the little dude. When we were invited to Plum's cookery school I was excited to see if they could persuade me that I can make a healthy meal for him.
As well as being completely lost in a kitchen, I worry that any meals I make for him won't have the same nutrition and taste that the pouches we buy do. His health and well being is my priority so I need to know what I cook would be packed full of the right nutrition.
We were invited into the home of Beverly Glock which doubles as a cookery school, helping ordinary people get comfortable in the kitchen. They invited 5 bloggers with young children along so that we could recreate their new taste adventure dish 'cape curry with beef'- one of Dylan's firm favourites. I was looking forward to seeing how it was actually made and getting to taste our homemade version.
expected and went down very well as a lovely lunch for both adults and babies. The wonderful thing about the new taste adventure range is that the dishes are tasty and full of flavour so they are perfect for the whole family.
We also made an oven cooked rice dish, Ross fil-forn which again was a lovely healthy meal suitable for weaning babied yet really easy to make. Getting children used to a variety of flavours and tastes at an early age is very important and Dylan is definitely at the stage where he can handle something a bit stronger. He enjoys mild spices in his food and the taste adventures range are perfect for encouraging this.
These delicious dinners have persuaded me that healthy food is not that hard to cook. Making the sweet cape curry Beverly showed us where you would seperate it if you were cooking for the whole family, and you could add salt and stronger spices to one portion, whilst keeping the other baby friendly. Tasting the final dish however, there is no way I would want to add salt. The flavours were divine and salt would have added nothing. This meant it would certainly be healthier than the usual meals we eat!
As well as creating and tasting these wonderful dishes, we were also served some of Beverly's other creations - yummy homemade muffins using Plum baby fruit puree instead of extra sugar. They were sweet and fruity and the lack of sugar meant it was perfectly acceptable to eat two, or maybe three. . . my kind of cake! It was even ok to share them with the little people, although they seemed more than happy with the wonderful snacks provided by Plum.
We had a wonderful day at the Plum Cookery School and learnt a lot about what goes into the baby food we feed our children and how easy it is to cook a healthy and nutritious meal for them packed full of flavour and goodness. Dylan learnt that if he smiles sweetly at the right people he gets lots of snacks!
Disclaimer: I was invited to the Plum cookery school and my expenses were paid. I also took home a lovely goody bag. I was not told what to write though, so all thoughts and opinions are my own.
It was a very yummy day! I cooked up the Ros Fil Forn for dinner the other day and it was a massive hit with both Luke and Leo!


Sip on this squeeze of the week that I call The Citrus Fizzy.
What I love about this drink is that the bitterness of the grapefruit vodka and lime tonic is complimented by the sweet and dense pomegranate juices. The ginger ale gifts the perfect amount of bubble while the lemon juice keeps the cocktail crisp and tangy.
This spring inspired cocktail will have you feeling fuzzy, fizzy and refreshed all at once.
Note: Any brand of vodka around 35% alcohol content will be of decent quality. The brand I chose to use was SKYY infusion vodka because it was on sale for $11.99. I knew I was using the vodka with mixers. If I were to be making shots, I would've gone with a smoother vodka but this brand will suffice for a mixed drink that is fun and fruity and blends well with the other flavors.
1. Slice the orange and run the slice around the drink's rim to coat it in fresh juice.
2. Dip the rim your glass in pure cane sugar or any flavored sugar of your choice.
3. Fill your glass with ice to the tippy top.
1. Chill the 2 ounces of vodka, 1 ounce of pomegranate berry juice and squeezed lemon in your shaker with crushed ice.
2. Strain the liquid and pour it over the ice.
3. Top with 1 ounce of tonic with lime and 2 ounces of ginger ale.
Garnish your Citrus Fizzy with leftover grapefruit or orange wedges.
Then sip it and get lit!
I hope you enjoy this fun yet simple spring inspired recipe.
This is officially added to my Summer Drinks!