class: center, middle # FP patterns 101 ### Pierangelo Cecchetto (@pierangelocecc) ### Reactive Amsterdam Meetup --- # Agenda - FP definition - Typeclasses - FP patterns with examples - Further path --- # What is FP? - Is it programming with `map`, `flatMap`, `filter`? -- - Pure functions -- - Referential transparency -- - Replace equals for equals -- - Equational reasoning --- # Referential Transparency - ~~Shared Mutable State~~ -- - ~~Exceptions~~ -- - ~~Partial functions~~ --- # Typeclasses ??? Let's talk about typeclasses. If we want to program with functions, and we have a strongly typed language at hand, it is natural to define to which objects these functions can be applied Typeclasses are a supreme way to model separation of concerns, and yet make sure we take care of all the necessary concerns, at compile time -- - Separation of concerns -- - Widespread in FP -- - _Ad hoc inheritance_ -- - Declare properties - Declare Laws (TCK) -- - Specify which types enjoy these properties - Or have the compiler deriving them for you -- - Compile-time check --- # Typeclasses ```scala trait Show[A] { def show(a: A): String } ``` ??? A very simple example of a typeclass is `Show` String representation of a class. We have already `toString` but if we forget to override it we end up having strange @ClassName#hashCode, and compiler says nothing! We need stronger guarantees! -- ```scala case class Dog(name: String) ``` -- ```scala implicit val show: Show[Dog] = new Show[Dog] { def show(d: Dog) = s"a dog named ${d.name}" } ``` -- ```scala val charlie = Dog("Charlie") // charlie: Dog = Dog(Charlie) implicitly[Show[Dog]].show(charlie) // res0: String = a dog named Charlie ``` --- # Typeclasses Having to type every time `implicitly[Show[Dog]]` is a bit noisy noisy -- Summoner ```scala object Show { def apply[A: Show]: Show[A] = implicitly } ``` -- ```scala Show[Dog].show(charlie) // res1: String = a dog named Charlie ``` -- Rich Syntax ```scala implicit class ShowSyntax[A: Show](a: A) { def show: String = Show[A].show(a) } ``` ```scala val charlie = Dog("Charlie") // charlie: Dog = Dog(Charlie) charlie.show // res2: String = a dog named Charlie ``` ??? In the next slides we will talk about specific type classes using the std version and the syntax enrichment version in an equivalent manner --- # Typeclasses ```scala def log[A: Show](a: A): String = s"I am logging about [${Show[A].show(a)}]" // log: [A](a: A)(implicit evidence$1: Show[A])String ``` -- ??? What we can do with Show? Explicitly declare how it should behave for a type Without forcing any inheritance All checked by the compiler -- ```scala val jack = Dog("Jack") // jack: Dog = Dog(Jack) log(jack) // res3: String = I am logging about [a dog named Jack] ``` -- ```scala case class Cat(name: String) // defined class Cat val oscar = Cat("Oscar") // oscar: Cat = Cat(Oscar) log(oscar) //
:17: error: could not find implicit value for evidence parameter of type Show[Cat] // log(oscar) // ^ ``` -- ## Compilation errors FTW!!! ??? Compiler is your friend, make use of it! --- # Semigroup ??? Semigroup is math term to express the fact that I can take 2 things of 1 type and produce another thing of the same type (internal, binary operation) TODO: make picture -- - Append ```scala trait Semigroup[A] { def combine(a: A, b: A): A } ``` -- ```scala Semigroup[Int].combine(100, 10) // res0: Int = 110 ``` -- ```scala Semigroup[List[Int]].combine(List(1,2,3), List(4,5,6)) // res1: List[Int] = List(1, 2, 3, 4, 5, 6) ``` --- # Semigroup - `|+|` operator ??? As we have seen, it is frequent practice to enrich the syntax of a type that has a type class with an operator that delegates to the typeclass definition -- ```scala 100 |+| 10 // res2: Int = 110 List(1,2,3) |+| List(4,5,6) // res3: List[Int] = List(1, 2, 3, 4, 5, 6) ``` --- # Semigroup Derived instances - If `A` is a Semigroup, `Map[K, A]` is a Semigroup ```scala val m1 = Map("cat" -> List(1,2,3), "dog" -> List(4,5,6)) // m1: scala.collection.immutable.Map[String,List[Int]] = Map(cat -> List(1, 2, 3), dog -> List(4, 5, 6)) val m2 = Map("cat" -> List(10), "cow" -> List(40)) // m2: scala.collection.immutable.Map[String,List[Int]] = Map(cat -> List(10), cow -> List(40)) ``` ??? `Map[K, V]` is a semigroup if V is a semigroup, therefore we have a semigroup in maps induced by the semigroup in Values -- ```scala m1 |+| m2 // res4: Map[String,List[Int]] = Map(cat -> List(1, 2, 3, 10), cow -> List(40), dog -> List(4, 5, 6)) ``` - If `A` is a semigroup, `Option[A]` is a semigroup ```scala 1.some |+| 2.some // res5: Option[Int] = Some(3) 1.some |+| None // res6: Option[Int] = Some(1) ``` --- # Semigroup ```scala def twice[A: Semigroup](a: A) = a |+| a // twice: [A](a: A)(implicit evidence$1: cats.Semigroup[A])A ``` ??? We can derive functions in terms of base operations, e.g. a function that combines an element with itself -- ```scala scala> twice(List(1,2,3)) res7: List[Int] = List(1, 2, 3, 1, 2, 3) ``` -- ```scala twice(Map("cat" -> List(1,2,3), "dog" -> List(4,5,6))) // res8: scala.collection.immutable.Map[String,List[Int]] = Map(cat -> List(1, 2, 3, 1, 2, 3), dog -> List(4, 5, 6, 4, 5, 6)) ``` --- # Monoid - combine 2 things ??? If we enrich a semigroup by providing a neutral element, we get a Monoid -- - has neutral element -- ```scala trait Monoid[A] { def combine(a: A, b: A): A def empty: A } ``` -- - Monoid Laws ```scala (a |+| b) |+| c === a |+| (b |+| c) ``` -- ```scala a |+| empty === empty |+| a === a ``` -- Grouping is irrelevant ```scala scala> List(1,2,3) |+| List(3,4,5) |+| List(7,8,9) res9: List[Int] = List(1, 2, 3, 3, 4, 5, 7, 8, 9) ``` ??? This simple property is fundamental when designing distributed systems --- # Monoid ```scala def fold[A: Monoid](xs: List[A]) = xs.foldLeft(Monoid[A].empty)(Monoid[A].combine) // fold: [A](xs: List[A])(implicit evidence$1: cats.Monoid[A])A ``` ??? Again, we can derive operations totally generic on monoids that work for _any_ monoid -- ```scala scala> List(1,2,3,4).combineAll res10: Int = 10 ``` -- ```scala scala> List(Some(1), Some(2), None).combineAll res11: Option[Int] = Some(3) ``` ??? Here we used the fact that given a `Monoid[A]`, we have for free a `Monoid[Option[A]]` -- ```scala case class Features(x: Double, y: Double) implicit val monoid: Monoid[Features] = new Monoid[Features] { def combine(a: Features, b: Features): Features = Features(a.x + b.x, a.y + b.y) def empty: Features = Features(0, 0) } val samples = List(Features(50, 50), Features(40,30), Features(10, 20)) val added = samples.combineAll ``` ??? We will see in the section about applicative a natural application of these concepts --- # Monoid Why should I care? - Addition of homogeneous quantities - Error accumulation (form validation) - Log accumulation - (Map) Reduce, parallel processing, scatter-gather ??? Reverse proxy --- # Functor ??? What is a functor? It is a type constructor equipped with a mapping operation, that changes just the content inside the box,without altering the box itself //TODO: make picture -- ```scala trait Functor[F[_]] { def map[A, B](fa: F[A])(f: A => B): F[B] //CT definition def lift[A, B](f: A => B): F[A] => F[B] = map(_)(f) } ``` --- # Functor ```scala Functor[Option].map(Some(5))(_ * 2) // res0: Option[Int] = Some(10) Functor[List].map(List(1,2,3))(_ * 10) // res1: List[Int] = List(10, 20, 30) ``` ??? From this it seems there is nothing really compelling about a functor. But it is one of the most underrated functional concepts, yet being a foundational one from the CT point of view E.g. let's consider the case of a JSON tree --- # Functor #### Json Decoder ```scala sealed trait Json case class JsonObject(fields: List[(String, Json)]) extends Json case class JsonArray(items: List[Json]) extends Json case class JsonString(value: String) extends Json case class JsonNumber(value: Double) extends Json case class JsonBoolean(value: Boolean) extends Json case object JsonNull extends Json ``` -- This is a classic JSON tree (Circe, Argonaut, Spray-Json) --- # Functor #### Json Decoder ```scala type DecodeResult[A] = Either[String, A] trait JsonDecoder[A] { def decode(json: Json): DecodeResult[A] } ``` ??? Let's define the JsonDecoder typeclass, specified by the `decode` method. -- -- ```scala implicit val doubleDecoder: JsonDecoder[Double] = new JsonDecoder[Double] { def decode(json: Json): DecodeResult[Double] = json match { case JsonNumber(value) => Right(value) case _ => Left("this is not a double") } } implicit val stringDecoder: JsonDecoder[String] = new JsonDecoder[String] { def decode(json: Json): DecodeResult[String] = json match { case JsonString(value) => Right(value) case _ => Left("this is not a string") } } ``` ??? We define the `JsonDecoder` for simple types --- # Functor #### Json Decoder ```scala def decode[A: JsonDecoder](json: Json): DecodeResult[A] = JsonDecoder[A].decode(json) ``` ??? And let's define a convenience method do decode a Json to a specific type `A` -- ```scala val jsonDouble: Json = JsonNumber(50) // jsonDouble: Json = JsonNumber(50.0) decode[Double](jsonDouble) // res3: DecodeResult[Double] = Right(50.0) ``` ??? We decode a JsonNumber as a Double -- ```scala val jsonString: Json = JsonString("Ferrari") // jsonString: Json = JsonString(Ferrari) decode[String](jsonString) // res4: DecodeResult[String] = Right(Ferrari) decode[Double](jsonString) // res5: DecodeResult[Double] = Left(this is not a double) ``` ??? And then we decode a Json as a String --- # Functor #### Json Decoder ```scala case class Price(euros: Double) extends AnyVal case class Car(name: String) extends AnyVal ``` ??? What do we do if we want to decode our Json object into a case class that wraps a double. Wrapping base types into case classes is a best practice to avoid passing wrong parameters, e.g. a port number in a place that is expecting a timeout in milliseconds. - If I want to decode a JsonString into a `Price` `Car` case class I could write my specific decoders for each of them, implicit jso. - This is a repetitive pattern - And where there is repetition there is room for abstraction -- ```scala trait JsonDecoder[A] { self => def decode(json: Json): DecodeResult[A] def map[B](f: A => B): JsonDecoder[B] = new JsonDecoder[B] { def decode(json: Json): DecodeResult[B] = self.decode(json).map(f) } } ``` -- ```scala implicit val priceDecoder: JsonDecoder[Price] = JsonDecoder[Double].map(Price.apply) implicit val carDecoder: JsonDecoder[Car] = JsonDecoder[String].map(Car.apply) ``` --- # Functor #### Json Decoder ```scala decode[Car](jsonString) // res7: DecodeResult[Car] = Right(Car(Ferrari)) ``` -- ```scala decode[Price](jsonDouble) // res8: DecodeResult[Price] = Right(Price(50.0)) ``` -- ```scala decode[Car](jsonDouble) // res9: DecodeResult[Car] = Left(this is not a string) ``` --- # Functor **Json Decoder**
```scala trait JsonDecoder[A] { self => def decode(json: Json): DecodeResult[A] def map[B](f: A => B): JsonDecoder[B] = new JsonDecoder[B] { def decode(json: Json): DecodeResult[B] = self.decode(json).map(f) } } ``` ??? Let's go a bit further in the inspection of the shape of functor, by using this example. Let's have a look at the shape of the `JsonDecoder` trait -- **Json Encoder**
```scala trait JsonEncoder[A] { def encode(a: A): Json } ``` ??? And let's define the opposite operation, an encoding operation where we start from `A` and end up in `Json` --- # Functor **Json Decoder**
**`A` in covariant position**
```scala trait JsonDecoder[A] { self => def decode(json: Json): DecodeResult[A] def map[B](f: A => B): JsonDecoder[B] = new JsonDecoder[B] { def decode(json: Json): DecodeResult[B] = self.decode(json).map(f) } } ``` **Json Encoder**
```scala trait JsonEncoder[A] { def encode(a: A): Json } ``` --- # Functor **Json Decoder**
**`A` in covariant position**
**Covariant functor**
```scala trait JsonDecoder[A] { self => def decode(json: Json): DecodeResult[A] def map[B](f: A => B): JsonDecoder[B] = new JsonDecoder[B] { def decode(json: Json): DecodeResult[B] = self.decode(json).map(f) } } ``` **Json Encoder**
```scala trait JsonEncoder[A] { def encode(a: A): Json } ``` --- # Functor **Json Decoder**
**`A` in covariant position**
**Covariant functor**
```scala trait JsonDecoder[A] { self => def decode(json: Json): DecodeResult[A] def map[B](f: A => B): JsonDecoder[B] = new JsonDecoder[B] { def decode(json: Json): DecodeResult[B] = self.decode(json).map(f) } } ``` **Json Encoder**
**`A` in a contravariant position**
```scala trait JsonEncoder[A] { def encode(a: A): Json } ``` --- # Functor **Json Decoder**
**`A` in covariant position**
**Covariant functor**
```scala trait JsonDecoder[A] { self => def decode(json: Json): DecodeResult[A] def map[B](f: A => B): JsonDecoder[B] = new JsonDecoder[B] { def decode(json: Json): DecodeResult[B] = self.decode(json).map(f) } } ``` **Json Encoder**
**`A` in a contravariant position**
**Contravariant functor**
```scala trait JsonEncoder[A] { self => def encode(a: A): Json def contramap[B](f: B => A): JsonEncoder[B] = new JsonEncoder[B] { def encode(b: B): Json = self.encode(f(b)) } } ``` ??? Here we defined a dual concept of a functor, which is the contravariant functor. We are expressing the fact that if I'm able to encode e.g. a Double to a JsonDouble, I can encode any type that is isomorphic to Double for free, as long as I know how to map that type into a double --- # Functor ```scala implicit val doubleEncoder: JsonEncoder[Double] = new JsonEncoder[Double] { self => def encode(value: Double): Json = JsonNumber(value) } ``` ??? We can define encoders for simple types -- ```scala implicit val priceEncoder: JsonEncoder[Price] = doubleEncoder.contramap(_.euros) ``` ??? And then derive encoders for related types -- ```scala encode(50.5) // res10: Json = JsonNumber(50.5) encode(Price(50.50)) // res11: Json = JsonNumber(50.5) ``` --- # Functor - Transformations preserving `F[_]` - Has multiple variants, make use of them! - We could go further with Invariant functors, Profunctors etc... --- # Functions Composition ??? What are effects? Let's consider a simple example, we have a devops application that given the name of the application needs to find the location of configuraiton -- ```scala val lookupPath: String => ConfigLocation = appName => ConfigLocation("application-config-point") ``` ??? And then read this configuration from the location -- ```scala val lookupConfig: ConfigLocation => AppConfig = configLocation => AppConfig(port = 80, rootUrl = "reactive-ams") ``` -- Composition ```scala val bootstrap: String => AppConfig = lookupPath andThen lookupConfig ``` ??? Then we can compose these 2 functions together -- ```scala bootstrap("reactive-app") // res12: AppConfig = AppConfig(80,reactive-ams) ``` -- Or ```scala val bootstrap: String => AppConfig = lookupConfig compose lookupPath ``` -- ```scala bootstrap("reactive-app") // res13: AppConfig = AppConfig(80,reactive-ams) ``` --- # Effects - Enrich our computation ??? Let's now introduce Effects. We call effects anything that enriches our domain to express specific, well defined behavior, e.g. - optionality - Error - Reading from context - State changes Let's see how we can enrich our functions to express the potential failure of computation -- ```scala val lookupPath: String => Either[String, ConfigLocation] = appName => { if (appName == "reactive-app") Right(ConfigLocation("location")) else Left(s"$appName app not found") } val lookupConfig: ConfigLocation => Either[String, AppConfig] = lookupPath => { if (lookupPath == ConfigLocation("location")) Right(AppConfig(port = 80, rootUrl = "reactive-ams")) else Left(s"$lookupPath path not found") } ``` -- ```scala val bootstrap: String => Either[String, AppConfig] = location => lookupPath(location).flatMap(lookupConfig) ``` ??? The fact that `Either` is equipped with a `flatMap` allows us to compose 2 functions -- ```scala bootstrap("reactive-app") // res14: Either[String,AppConfig] = Right(AppConfig(80,reactive-ams)) bootstrap("my-app") // res15: Either[String,AppConfig] = Left(my-app app not found) ``` ??? Let's see how far we can go with effects composition --- # Effects ```scala f: A => B ``` ??? We start with a function `A => B` -- ```scala f: A => F[B] ``` ??? And we enrich the output to an `F[B]`, in our case an Either, so we can conclude that effects... -- ```scala F[A] = Either[String, A] ``` - Effects express richer behaviour -- - Effects != Side Effects ??? To quote a famous guy in the Scala sphere -- > _Effects are good, side effects are bugs_ (Rob Norris) --- # Effects Composition ```scala val lookupPath: String => Either[String, ConfigLocation] = ??? val lookupConfig: ConfigLocation => Either[String, AppConfig] = ??? val bootstrap: String => Either[String, AppConfig] = location => lookupPath(location).flatMap(lookupConfig) ``` ??? How did we compose our effects? We used `flatMap` --- # Effects Composition ```scala val lookupPath: String => Option[ConfigLocation] = ??? val lookupConfig: ConfigLocation => Option[AppConfig] = ??? val bootstrap: String => Option[AppConfig] = location => lookupPath(location).flatMap(lookupConfig) ``` ??? If the effect was an `Option`, the expressions would look almost the same, just the effect we were expressing was Optionality of the output, without information about the specific error --- # Effects Composition ```scala val lookupPath: String => Task[ConfigLocation] = ??? val lookupConfig: ConfigLocation => Task[AppConfig] = ??? val bootstrap: String => Task[AppConfig] = location => lookupPath(location).flatMap(lookupConfig) ``` ??? If the effect was an `Task`, the expressions would look almost the same, just the effect we were expressing was Asynchronicity, e.g. some api calls happening under the hood THERE MUST BE AN ABSTRACTION AROUND THIS REPETITIVE PATTERN !!! --- # Monad ```scala trait Monad[F[_]] { def flatMap[A, B](fa: F[A])(f: A => F[B]): F[B] def pure[A](a: A): F[A] } ``` ??? Let's formalize the fact that a type constructor is equipped with a flatMap operation And let's also require that this thing is able to put a given `a: A` in a box of shape `F[_]` --- # Monad ```scala trait Monad[F[_]] extends Functor[F]{ def flatMap[A, B](fa: F[A])(f: A => F[B]): F[B] def pure[A](a: A): F[A] def map[A, B](fa: F[A])(f: A => B) = flatMap(fa)(a => pure(f(a))) } ``` ??? Just by following the types, we can derive an implementation of map just based on the fact that we have a `flatMap` and a `pure` -- This is all that you need to have a monad -- But don't forget the laws!!! -- - Associativity ```scala x.flatMap(f).flatMap(g) === x.flatMap(a => f(a).flatMap(g)) ``` -- - Identity ```scala flatMap(x)(pure) === x flatMap(pure(y))(f) === f(y) ``` --- # Monad Effects composition ```scala val lookupPath: String => ConfigLocation = ??? val lookupConfig: ConfigLocation => AppConfig = ??? val bootstrap: String => AppConfig = lookupPath andThen lookupConfig ``` ??? In the light of what we just said, let's have a look again at our original example -- vs ```scala def lookupPath(path:String): F[ConfigLocation] = ??? def lookupConfig(c: ConfigLocation): F[AppConfig] = ??? def bootstrap[F[_]: Monad](path: String): F[AppConfig] = lookupPath(location).flatMap(lookupConfig) ``` ??? And let's compare it with the effectful version... Still something doesn't add up, these 2 implementations are still quite different from each other... what can we do? --- # Monad Kleisli ```scala val lookupPath: String => ConfigLocation = ??? val lookupConfig: ConfigLocation => AppConfig = ??? val bootstrap: String => AppConfig = lookupPath andThen lookupConfig ``` -- ```scala case class Kleisli[F[_], A, B](run: A => F[B]) { def andThen[C](g: Kleisli[F, B, C])(implicit F: Monad[F]): Kleisli[F, A, C] = Kleisli(a => run(a).flatMap(g.run)) ``` -- ```scala val lookupPath: Kleisli[F, String, ConfigLocation] = ??? val lookupConfig: Kleisli[F, ConfigLocation, AppConfig] = ??? val bootstrap: Kleisli[F, String, AppConfig] = lookupPath andThen lookupConfig ``` -- Now they look the same! ??? Now the expressions look really similar --- # Monad - Kleisli and Monads ```scala trait Monad[F[_]] { def pure[A](a: A): F[A] def compose[A, B, C](f: A => F[B], g: B => F[C]): A => F[C] } ``` ??? These are 2 _equivalent_ formulations of a monad --- # Monad - Kleisli and Monads ```scala trait Monad[F[_]] { def pure[A](a: A): F[A] def compose[A, B, C](f: A => F[B], g: B => F[C]): A => F[C] def flatMap[A, B](fa: F[A])(f: A => F[B]): F[B] = compose(_:Unit => fa, f)(()) } ``` -- Now the associativity law is much easier! ```scala compose(compose (f, g), h) === compose(f, compose(g, h)) ``` -- Just like associativity for Monoids! ```scala (a |+| b) |+| c === a |+| (b |+| c) combine(combine(a, b), c) === combine(a, combine(b, c)) ``` -- A Monad is a monoid in the category of endofunctors! --- # Monad Wherever there is sequential computation, a monad will appear - `List[A]`, `Option[A]`, `Either[Error, A]` - `Reader[R, A]` - `Writer[W, A]` - `State[S, A]` --- # Monad Wherever there is sequential computation, a monad will appear - `List[A]`, `Option[A]`, `Either[Error, A]` - `Reader[R, A]` - Configuration, DI - `Writer[W, A]` - Logging, metrics - `State[S, A]` - State mutations --- # Functional Patterns - Create a few, reusable and composable abstractions -- - You learn them once, you use them everywhere -- - Experiment with them -- - Introduce them at work -- - Read the Red Book _Functional Programming in Scala_ -- - Read _Functional and Reactive Domain Modeling_ -- - Try Haskell -- - Keep learning! --- class: center, middle # Questions?


Regular paragraph
This is a paragraph with class="ex". This text is blue.
Some text with default writing-mode.
This is text in vertical writing-mode.
The following beverages:
These awesome games:
To visit these countries:


ge🌎
MOBILE
Sign in to your account
Remember Me
Sign in
- OR -
Sign in using Facebook
Sign in using Google+
I forgot my password
Register a new membership


Make sure to refresh both the extensions page (chrome://extensions/) and the gmail tab after updating the settings.
Save


This tutorial shows you how to setup a new Citrus project with Maven. You will see it is very easy and you are finished within minutes.
Preconditions
You need following software on your computer, in order to use the Citrus Framework:
In case you already use Maven build tool in your project it is most suitable for you to include Citrus into your Maven build lifecycle. In this tutorial we will setup a project with Maven and configure the Maven POM to execute all Citrus tests during the Maven integration-test phase. First of all we create a new Java project called "citrus-sample". We use the Maven command line tool in combination with Maven's archetype plugin. In case you do not have Maven installed yet it is time for you to do so before continuing this tutorial. See the Maven site for detailed installation instructions. So let's start with creating the Citrus Java project:
mvn archetype:generate -DarchetypeCatalog=http://citrusframework.org [...] Choose archetype: 1: http://citrusframework.org -> com.consol.citrus.mvn:citrus-quickstart (Citrus quickstart project) 2: http://citrusframework.org -> com.consol.citrus.mvn:citrus-quickstart-soap (Citrus quickstart project with SOAP client and server) 3: http://citrusframework.org -> com.consol.citrus.mvn:citrus-quickstart-jms (Citrus quickstart project with JMS consumer and producer) Choose a number: 1 Define value for groupId: com.consol.citrus.samples Define value for artifactId: citrus-sample Define value for version: 1.0-SNAPSHOT Define value for package: com.consol.citrus.samples [...]
In the sample above we used the Citrus archetype catalog located on the Citrus homepage. Citrus archetypes are also available in Maven central repository. So can also just use "mvn archetype:generate". As the list of default archetypes available in Maven central is very long you might want to filter the list with "citrus" and you will get just a few possibilities to choose from.
Citrus provides custom Maven archetypes. We load the archetype information from "http://citrusframework.org" and choose the Citrus basic archetype. Now you have to define several values for your project: the groupId, the artifactId, the package and the project version. After that we are done! Maven created a Citrus project structure for us which is ready for testing. You should see the following basic project folder structure.
citrus-sample | + src | | + main | | | + java | | | + resources | | + citrus | | | + java | | | + resources | | | + tests pom.xml
The Citrus project is absolutely ready for testing. With Maven we can build, package, install and test our project right away without any adjustments. Try to execute the following commands:
cd citrus-sample mvn package mvn integration-test mvn install
Congratulations!  The project comes with a sample Citrus test "SampleIT". You can find this test in "src/it/tests" and "src/it/java". The Citrus test was automatically executed in the integration test phase in Maven project lifecycle.
The next step would be to import our project into our favorite IDE (e.g. Eclipse, IntelliJ or NetBeans). With Eclipse for instance you have to execute the following command:
mvn eclipse:eclipse
Now let's import the new Citrus project into the IDE and have a closer look at the basic project files that were generated for you. First of all open the Maven POM (pom.xml). You see the basic Maven project settings, all Citrus project dependencies as well as the ConSol* Labs Maven repositories here. In future you may add other project dependencies, Maven plugins in this file. For now you do not have to change the Citrus Maven settings in your project's POM, however we have a closer look at them:
First of all the ConSol* Labs Maven repositories. Maven will load new versions of Citrus from these servers.
<repositories> [...] <repository> <id>consol-labs-release</id> <url>http://labs.consol.de/maven/repository/</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> <repository> <id>consol-labs-snapshots</id> <url>http://labs.consol.de/maven/snapshots-repository/</url> <snapshots> <enabled>true</enabled> <!-- Policy: always, daily, interval:xxx (xxx=#minutes, 60*24*7=10080), never --> <updatePolicy>10080</updatePolicy> </snapshots> <releases> <enabled>false</enabled> </releases> </repository> [...] </repositories>
<pluginRepositories> [...] <pluginRepository> <id>consol-labs-release</id> <url>http://labs.consol.de/maven/repository/</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </pluginRepository> <pluginRepository> <id>consol-labs-snapshots</id> <url>http://labs.consol.de/maven/snapshots-repository/</url> <snapshots> <enabled>true</enabled> <updatePolicy>10080</updatePolicy> </snapshots> <releases> <enabled>false</enabled> </releases> </pluginRepository> [...] </pluginRepositories>
Now we let's have a look at the Citrus project libraries as dependencies in our Maven POM.
<dependency> <groupId>com.consol.citrus</groupId> <artifactId>citrus-core</artifactId> <version>2.6-SNAPSHOT</version> <scope>test</scope> </dependency> <dependency> <groupId>com.consol.citrus</groupId> <artifactId>citrus-jms</artifactId> <version>2.6-SNAPSHOT</version> <scope>test</scope> </dependency> <dependency> <groupId>com.consol.citrus</groupId> <artifactId>citrus-ws</artifactId> <version>2.6-SNAPSHOT</version> <scope>test</scope> </dependency> <dependency> <groupId>com.consol.citrus</groupId> <artifactId>citrus-http</artifactId> <version>2.6-SNAPSHOT</version> <scope>test</scope> </dependency>
The Citrus Maven plugin capable of test creation and report generation.
<plugin> <groupId>com.consol.citrus.mvn</groupId> <artifactId>citrus-maven-plugin</artifactId> <version>2.6-SNAPSHOT</version> <configuration> <author>Mickey Mouse</author> <targetPackage>com.consol.citrus</targetPackage> </configuration> </plugin>
The surefire plugin is responsible for executing all available tests in your project when you run the integration-test phase in Maven:
<plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.3</version> <configuration> <skip>true</skip> </configuration> <executions> <execution> <id>citrus-tests</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <skip>false</skip> </configuration> </execution> </executions> </plugin>
Last not least the Citrus source directories defined as test sources for Maven:
<testSourceDirectory>src/it/java</testSourceDirectory> <testResources> <testResource> <directory>src/it/resources</directory> <includes> <include>**/*</include> </includes> <filtering>true</filtering> </testResource> <testResource> <directory>src/it/tests</directory> <includes> <include>**/*.xml</include> </includes> <excludes> </excludes> </testResource> </testResources>
Finally we are ready to proceed with creating new test cases. So let's add a new Citrus test case to our project. We use the Citrus Maven plugin here, just type the following command:
mvn citrus:create-test Enter test name: MyTest Enter test author: Unknown: : Christoph Enter test description: TODO: Description: : Enter test package: com.consol.citrus.samples: : Choose unit test framework testng: :
You have to specify the test name, author, description, package and the test framework. The plugin sucessfully generates the new test files for you. On the one hand a new Java class in src/it/java and a new XML test file in src/it/tests. The test is runnable right now. Try it and execute "mvn integration-test" once more. In the Citrus test results you will see that the new test was executed during integration-test phase along with the other existing test case. You can also run the test manually in your IDE with a TestNG plugin.
So now you are ready to use Citrus! Write test cases and add more logic to the test project. Have fun with it!


This is my Gibson Les Paul Deluxe
"Good as gold" is a phrase that gets thrown around a lot, but with the looks and tone of the original on full display, the Gibson Les Paul Deluxe Goldtop should be defined as its own precious metal. The iconic gold-on-maple top is complemented by a lustrous mahogany body and neck for days of sustain to beef up that hot pair of mini humbuckers. A modern classic.


Sailfish X now available for Sony Xperia 10 and 10 Plus
by MarinJolla announced that SailfishOS for Xperia devices or Sailfish X is now available for Xperia 10 and 10 Plus. If you own a Sony Xperia 10 or 10 Plus, you can download SailfishOS for free to get an experience of using the gesture-based OS. If you pay €49.90 or 29.90 if you are an existing Sailfish user, you’ll be able to download and install Android apps on it.
If you go for Sailfish X on your 21:9 Sony device, then it would be OK to inform you that Xperia 10 and Xperia 10 Plus can fully use all the latest features and updates that came with the recently announced Sailfish OS 3.2.0 Torronsuo update.
Sony Xperia 10 and 10 Plus are gorgeous looking devices, but I would love to try a Sailfish OS on a Nokia device too. That would set the things in the right direction :).
If you are in Helsinki during the Slush event, and by any chance are going to the event, you can find Jolla there over Slush Matchmaking app.
For more details on the Sailfish X for Xperia 10 and 10 Plus check the official Jolla blog.


Welcome to Physics with Matter-js!
Learn physics by adding particles, moving particles, tossing particles and changing the physics of the world!
Motivation
There are many interactive, and otherwise, simulations on the internet regarding physics education. There are many guided courses with visual and interactive aids. There is still room for an open-ended learning environment (OELE) that combines constructionist pedagogy with various forms of scaffolding, found as best practices in review of OELEs. This is a proof-of-concept of an OELE on laws of motion and their scope from simple kinematics to many-body physics.
Key aspects of design that help foster self-regulated learning (SRL) (see
report):
- Activities that build on prior knowledge/interests, so the student does not ignore it
- Activities should be sufficiently complex to allow for tinkering, so it is not solved instantly, allowing time to reflecton in the learning process
- Presence of facilitators to drive interest, help students focus and reflect on their activities
- Allows learner control: eg. ability to switch between difficulty levels
- Provides feedback on learning: eg. in the form of an assessment
Built by
Keshav


Shpiel
Log in
Sign up
Home
News
Sports
Tech
Feel Good
Business
Celebrity
Books
Education
News
Sports
Tech
Feel Good
Business
Celebrity
Books
Education


One of Bitcoin’s Biggest Holders Just Moved 46,000 BTC Worth $337.8 Million for a Fee of 40 Cents
by Daily Hodl StaffA huge transaction from a single, anonymous Bitcoin whale is sending waves through the cryptoverse.
Whale watchers are tracking the transaction, which moved the 46,000 BTC worth about $337.8 million between wallets of unknown origin.
The fee for the transaction cost just 40 cents.
Aside from that seismic transfer, crypto whales have been relatively quiet as Bitcoin drags the overall crypto market lower.
Another Bitcoin transaction of note in the last day was a movement of 12,000 BTC worth about $89 million from the Japanese Bitcoin wallet and exchange service Coincheck to an unknown wallet.


|
Bouncy Castle Cryptography Library 1.46 | ||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
| Interface Summary | |
|---|---|
| AsymmetricBlockCipher | base interface that a public/private key block cipher needs to conform to. |
| AsymmetricCipherKeyPairGenerator | interface that a public/private key pair generator should conform to. |
| BasicAgreement | The basic interface that basic Diffie-Hellman implementations conforms to. |
| BlockCipher | Block cipher engines are expected to conform to this interface. |
| CipherParameters | all parameter classes implement this. |
| DerivationFunction | base interface for general purpose byte derivation functions. |
| DerivationParameters | Parameters for key/byte stream derivation classes |
| Digest | interface that a message digest conforms to. |
| DSA | interface for classes implementing algorithms modeled similar to the Digital Signature Alorithm. |
| ExtendedDigest | |
| Mac | The base interface for implementations of message authentication codes (MACs). |
| Signer | Generic signer interface for hash based and message recovery signers. |
| SignerWithRecovery | Signer with message recovery. |
| StreamCipher | the interface stream ciphers conform to. |
| Wrapper |
| Class Summary | |
|---|---|
| AsymmetricCipherKeyPair | a holding class for public/private parameter pairs. |
| BufferedAsymmetricBlockCipher | a buffer wrapper for an asymmetric block cipher, allowing input to be accumulated in a piecemeal fashion until final processing. |
| BufferedBlockCipher | A wrapper class that allows block ciphers to be used to process data in a piecemeal fashion. |
| CipherKeyGenerator | The base class for symmetric, or secret, cipher key generators. |
| KeyGenerationParameters | The base class for parameters to key generators. |
| PBEParametersGenerator | super class for all Password Based Encryption (PBE) parameter generator classes. |
| StreamBlockCipher | a wrapper for block ciphers with a single byte block size, so that they can be treated like stream ciphers. |
| Exception Summary | |
|---|---|
| CryptoException | the foundation class for the hard exceptions thrown by the crypto packages. |
| DataLengthException | this exception is thrown if a buffer that is meant to have output copied into it turns out to be too short, or if we've been given insufficient input. |
| InvalidCipherTextException | this exception is thrown whenever we find something we don't expect in a message. |
| MaxBytesExceededException | this exception is thrown whenever a cipher requires a change of key, iv or similar after x amount of bytes enciphered |
| RuntimeCryptoException | the foundation class for the exceptions thrown by the crypto packages. |
|
Bouncy Castle Cryptography Library 1.46 | ||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


{% extends "templates/ingest-base.html" %} {% block main-content %}
Documentation for {{ app-title }} is split out into the following sections:


Background
I am a native of Seattle, born and raised on the eastside of Lake Washington. I like gardening, outdoors, history, and physical exercise. A fun fact, I've memorized the 81 versus of the Tao Te Ching. One of my near term goals is to learn how to code.
Education
- BA Political Science, Texas A&M
- MS Administration, Central Michigan University
Experience
- Affordable Housing Consultant
- Nonprofit Director of Development
- General Contracting and Construction Management
Top 10 Vacation Locations
- Athens
- Rome
- Barcelona
- Madrid
- Munich
- Heidleberg
- London
- Paris
- New York City
- Washington D.C.


This library is to service the Greater Eastside area and bring the love of books and adventure to those who need it most.
Need to find a book? Click on the Find A Book link in the menu above to be able to look through our entire library of available books.
Want to add a book to the library? Click on the Manage Books link in the menu above to add and delete new book entries.
Find your next favorite book to read.
Inventory
This area is meant for adding and updating the Library inventory.
Enter the book information to add books to the inventory.Title


|
666 66 |
Name
Short decription |
3 Japan Breakfast 50 min 2 |
Date: 00-00-00 By: |
|
666 66 |
Name
Short decription |
4 US Breakfast 50 min 4 |
Date: 00-00-00 By: |
|
666 66 |
Name
Short decription |
2 China Breakfast 50 min 4 |
Date: 00-00-00 By: |


Running a global Go dependency server
... alone
@arschles
Cloud Advocate, MS Azure
Hard earned lessons
In human psychology
experimental
= production ready
People build products on the service
No SLA = it has an SLA
Run imperfect things
These features would have been great!
Mutable endpoints
Usage / download stats
Choose managed services
Global proxy cache
Fully managed database
Managed containers
A 17 line bash script
@arschles
github.com/arschles


full stack web developer
see what i'm aboutI am a full stack web developer with a passion for the outdoors and all things internet. I am a fresh graduate of General Assembly’s Web Development Immersive where I learned HTML5/CSS3, JavaScript, jQuery, Ruby, Rails, MEN and MEAN stack among many other things. Due to the fast-paced nature of the course, I have honed my time management skills to a fine point.
Most recently, I worked at an outdoor recreation startup that provides unique camping experiences to groups with little to no previous exposure to the outdoors. Through this position I was able to build solid communication skills with clients by translating their desires into quality results with limited time and resources. Most importantly, I learned that death is in the details. It’s never fun to be caught in the woods during a storm without proper equipment. ⛈⛈⛈
Languages, frameworks, libraries, and technologies that I work with:
I am excited to combine the skills from my previous career with my newly-acquired technical skills to become a developer who can effectively communicate with clients and deliver their ideas in new and creative ways ⚡
Download Now!Ready to make me part of your team? Let's chat! Give me a call or send me an email and I will get back to you as soon as possible!
tel: +1-918-346-8902


I am from Eldorado Park.
I matriculated in 2019 at Eldomaine High School.
I love sport eg. Football, Swimming and Tennis.
I love People and having a positive impact on people's lives.
What I OfferHyper Text Markup Language
Syntax - Statements - Functions - Event Listener - Arrays - Objects - Variables etc.
Selectors - Declaration Block - Properties and Values


Search our Membership Directory by business category, business name, city or zip code. You have the option to use one or multiple search criteria.
As a special benefit to our members who are Chamber Edge subscribers, the list of Chamber members is available as an Excel Spreadsheet. This list is available for download at your convenience. Click here to find out more about Chamber Edge.
2742 Results Found...

       First St
Miamisburg, OH 45342
Phone Number:
937-847-6456
Website:
Business Name:
City of Riverside
Business Category:
Government Offices
Contact Name:
Mr. Bryan RH Chodkowski
Contact Title:
City Manager
Address:
1791 Harshman Road
Riverside, OH 45424-5017
Phone Number:
937-233-1801
Fax Number:
937-237-5965
Website:
Business Name:
City of Springboro
Business Category:
Government Offices
Contact Name:
Christine A. Thompson
Contact Title:
City Manager
Address:
320 West Central Avenue
Springboro, OH 45066-1106
Phone Number:
937-748-4355
Fax Number:
937-748-0815
Website:
Business Name:
City of Trotwood
Business Category:
Government Offices
Contact Name:
Mr. Michael J. Lucking
Contact Title:
City Manager
Address:
3035 Olive Road
Trotwood, OH 45426-2600
Phone Number:
937-854-7213
Fax Number:
937-854-0574
Website:
Business Name:
City of Vandalia
Business Category:
Government Offices
Contact Name:
Greg Shackelford
Contact Title:
Assistant City Manager
Address:
333 James Bohanan Drive
Vandalia, OH 45377-2394
Phone Number:
937-415-2250
Fax Number:
937-898-6117
Website:
Business Name:
CityFolk
Business Category:
Entertainment
Contact Name:
Kathleen Alter
Contact Title:
Executive Director
Address:
126 North Main Street
Dayton, OH 45402
Phone Number:
937-223-3655
Fax Number:
937-223-2842
Website:
Business Name:
CityWide Development Corporation
Business Category:
Economic Development
Contact Name:
Mr. Steven Budd
Contact Title:
President
Address:
8 N Main St
National City Centre
Dayton, OH 45402-1904
Phone Number:
937-853-2547
Fax Number:
937-222-7035
Website:
Business Name:
CJH Mechanical, Inc.
Business Category:
Air Conditioning & Heating
Contact Name:
Mr. Joe Hamilton
Contact Title:
President
Address:
3230 Upper Bellbrook Road
Bellbrook, OH 45305
Phone Number:
937-572-5844
Website:
Business Name:
CK Franchising, Inc./ Comfort Keepers
Business Category:
Non-Medical & Home Care
Contact Name:
Sarosh Mistry
Contact Title:
President, COO
Address:
6640 Poe Ave., Suite 200
Dayton, OH 45414
Phone Number:
937-264-1933
Fax Number:
937-264-3103
Website:
Business Name:
Clarion Inn Dayton Airport (Dixie Management II, Inc.)
Business Category:
Hotels/Motels
Contact Name:
Mr. Roy Smith
Contact Title:
Dir. of Operations
Address:
10 Rockridge Road
Englewood, OH 45322
Phone Number:
937-832-1234
Fax Number:
937-832-3548
Website:
Business Name:
Clark State Community College
Business Category:
Schools, Colleges, Universities
Contact Name:
Dr. Jo Alice Blondin
Contact Title:
President
Address:
570 E. Leffel Lane
Springfield, OH 45505-0570
Phone Number:
937-328-6002
Fax Number:
937-328-6142
Website:
Business Name:
Clark, Schaefer, Hackett & Company
Business Category:
Accountants, Certified, Public
Contact Name:
Mr. Herbert Lemaster
Contact Title:
Managing Shareholder
Address:
10100 Innovation Drive, Suite 400
Dayton, OH 45342
Phone Number:
937-226-0070
Fax Number:
937-226-1626
Website:
Business Name:
Clean All Services
Business Category:
Janitorial Service
Contact Name:
Mr. Steven Shuchat
Contact Title:
President
Address:
P.O. Box 4127
Sidney, OH 45365-4127
Phone Number:
937-498-4146
Fax Number:
937-498-4919
Website:
Business Name:
Clear Channel Communications, Inc.
Business Category:
Radio Stations
Contact Name:
Mr. Tom Doran
Contact Title:
Market Manager/President
Address:
101 Pine St
Dayton, OH 45402-2925
Phone Number:
937-224-1137
Fax Number:
937-224-3667
Website:
Business Name:
Clearing Path's Therapeutic Services
Business Category:
Mental Health Services
Contact Name:
Mrs. Wendy Haynes-Britton
Contact Title:
Co-Owner
Address:
2555 South Dixie Drive, Suite 100
Kettering, OH 45409
Phone Number:
937-299-9060
Fax Number:
937-299-3040
Website:
Business Name:
Cleary Machine Co., Inc.
Business Category:
Machine Shops
Contact Name:
Mr. Paul Kasperski
Contact Title:
Owner
Address:
4858 U.S. Route 35 East
West Alexandria, OH 45381
Phone Number:
937-839-4278
Fax Number:
937-839-4022
Website:
Business Name:
Climate Control Specialist
Business Category:
Air Conditioning & Heating
Contact Name:
Tim Jennings
Contact Title:
President
Address:
5893 Overbrooke Rd
Dayton, OH 45440
Phone Number:
937-604-8819
Business Name:
Clint's Printing, Inc.
Business Category:
Printers
Contact Name:
Susan Bernard
Address:
3963 Rockfield Dr.
Beavercreek, OH 45430-1126
Phone Number:
937-426-2771
Fax Number:
937-426-5613
Business Name:
Clinton County Motor Sports
Business Category:
Retail Shops
Contact Name:
Mr. Jason Adkins
Address:
6002 N. US Highway 68
Wilmington, OH 45177-9416
Phone Number:
937-283-2220
Business Name:
Clipper Courier, Inc.
Business Category:
Courier Services
Contact Name:
Mr. Ronald Vaughn
Contact Title:
President
Address:
4600 S Dixie Dr
Dayton, OH 45439-2114
Phone Number:
937-293-7854
Fax Number:
937-293-9192
Website:
Business Name:
Clothes That Work!

New Carlisle, OH 45344
Phone Number:
937-313-2518
Business Name:
Zumwald & Company, LLC
Business Category:
Consultants
Contact Name:
Teresa Zumwald
Contact Title:
Owner & President
Address:
P.O. Box 206
Englewood, OH 45322
Phone Number:
937-836-6802
Fax Number:
937-836-5986
Website:


 They prefer to hunt ground birds such as ptarmigan and grouse but also hunt seabirds and waterfowl, as well as land mammals such as ground squirrels, lemmings, voles, hares, rabbits, and marmots. Gyrfalcons often hunt using a fast, low flight to chase their prey.
The gyrfalcon is the world's fastest bird in level flight.These powerful birds may initially be underestimated, but their strength becomes evident after a few seconds in the air.
THANK YOU


panic "blah"
entries in
the GHC AST
By GHC 7.10 the ParsedSource
accurately reflected the state of the
original source
ParsedSource
ParsedSource
, purely as transformations of the AST,SrcSpan
s are no longer meaningfulXRec
ping-pong landedSrcSpan
indexing, by moving the annotations into
the ParsedSource
type ApiAnns = ( Map ApiAnnKey [SrcSpan]
, Map SrcSpan [Located AnnotationComment])
type ApiAnnKey = (SrcSpan, AnnKeywordId)
ParsedSource
, and separate annotationsSrcSpan
SrcSpan
order, for adding, or
moving items around.TransformT
monad transformer
to manage the linkage of the ParsedSource
and its annotations.ParsedSource
and the updated delta
annotations.SrcSpan
s for indexing.GhcPs
. There is one per AST element.data ApiAnn' ann
= ApiAnn { anchor :: RealSrcSpan
, anns :: ann
, comments :: [RealLocated AnnotationComment]
}
| ApiAnnNotUsed
data ApiAnnHsCase = ApiAnnHsCase
{ hsCaseAnnCase :: RealSrcSpan
, hsCaseAnnOf :: RealSrcSpan
, hsCaseAnnsRest :: [AddApiAnn]
} deriving Data
Attached as
| HsCase (XCase p)
(LHsExpr p)
(MatchGroup p (LHsExpr p))
type instance XCase GhcPs = ApiAnn' ApiAnnHsCase
type ApiAnn = ApiAnn' [AddApiAnn]
`foo`
,
':
,
(&)
,|
XRec
usages.type family XRec p a = r | r -> a
type instance XRec (GhcPass p) a = Located a
type LHsExpr p = XRec p (HsExpr p)
type instance XRec (GhcPass p) a = GenLocated (Anno a) a
type family Anno a = b
It is still located, but each AST element has a knob to set precisely what location type to use.
(Thanks Zubin Duggal for helping me with this)
(well, not kinds. Kinds.)
We again have a regular structure for this
data SrcSpanAnn' a = SrcSpanAnn { ann :: a, locA :: SrcSpan }
We have identified five different ones
type SrcSpanAnnA = SrcSpanAnn' (ApiAnn' AnnListItem)
type SrcSpanAnnL = SrcSpanAnn' (ApiAnn' AnnList)
type SrcSpanAnnP = SrcSpanAnn' (ApiAnn' AnnPragma)
type SrcSpanAnnC = SrcSpanAnn' (ApiAnn' AnnContext)
type SrcSpanAnnName = SrcSpanAnn' (ApiAnn' NameAnn)
In "normal" usage we can have
type LocatedA = GenLocated SrcSpanAnnA
type LocatedL = GenLocated SrcSpanAnnL
type LocatedP = GenLocated SrcSpanAnnP
type LocatedC = GenLocated SrcSpanAnnC
type LocatedN = GenLocated SrcSpanAnnName
type LocatedAn an = GenLocated (SrcSpanAnn' (ApiAnn' an))
type LHsExpr p = XRec p (HsExpr p)
type instance Anno (HsExpr (GhcPass p)) = SrcSpanAnnA
foo :: LocatedA (HsExpr GhcPs)
bar :: LHsExpr GhcPs
Note: in instance declarations, you have to use the
foo
form, which matches the "after
resolution" XRec
family.
anchor
field from earlierdata Entry = Entry RealSrcSpan [RealLocated AnnotationComment]
| NoEntryVal
class ExactPrint a where
getAnnotationEntry :: a -> Entry
exact :: a -> Annotated ()
exact
is analogous to
ppr
, where ExactPrint
is analogous to Outputable
getAnnotationEntry
pulls it out if it
exists, together with any comments in the span of the item.enterAnn
routingSimplest example
instance (ExactPrint a) => ExactPrint (Located a) where
getAnnotationEntry (L l _) = Entry (realSrcSpan l) []
exact (L _ a) = markAnnotated a
markAnnotated
manages the process of
descending into an enclosed AST item.
markAnnotated :: ExactPrint a => a -> Annotated ()
markAnnotated a = enterAnn (getAnnotationEntry a) a
The trivial version of enterAnn
, but
showing the basic interleaving flow, is
enterAnn :: (ExactPrint a) => Entry -> a -> Annotated ()
enterAnn NoEntryVal a = do
exact a
The version where there is an EntryVal
is
enterAnn (Entry anchor cs) a = do
addComments cs
printComments anchor
off <- gets epLHS
priorEndAfterComments <- getPos
let edp = adjustDeltaForOffset
off (ss2delta priorEndAfterComments anchor)
let
st = annNone { annEntryDelta = edp }
withOffset st (advance edp >> exact a)
withOffset :: Annotation -> (EPP a -> EPP a)
withOffset a =
local (\s -> s { epAnn = a })
ExactPrint
examplesinstance ExactPrint (HsTupArg GhcPs) where
getAnnotationEntry = const NoEntryVal
exact (Present _ e) = markAnnotated e
exact (Missing _) = return ()
instance ExactPrint (HsValBindsLR GhcPs GhcPs) where
getAnnotationEntry = const NoEntryVal
exact (ValBinds sortkey binds sigs) = do
applyListAnnotations
(prepareListAnnotationA (bagToList binds)
++ prepareListAnnotationA sigs
)
prepareListAnnotationA :: ExactPrint (LocatedAn an a)
=> [LocatedAn an a] -> [(RealSrcSpan,EPP ())]
prepareListAnnotationA ls
= map (\b -> (realSrcSpan $ getLocA b,markAnnotated b)) ls
applyListAnnotations :: [(RealSrcSpan, EPP ())] -> EPP ()
applyListAnnotations ls = withSortKey ls
withSortKey :: [(RealSrcSpan, EPP ())] -> EPP ()
withSortKey xs = do
Ann{annSortKey} <- asks epAnn
let ordered = case annSortKey of
NoAnnSortKey -> sortBy orderByFst xs
Annsortkey keys -> orderByKey xs keys
mapM_ snd ordered
data AnnSortKey
= NoAnnSortKey
| AnnSortKey [RealSrcSpan]
LocatedN RdrName
SrcSpan.


 Eat them anyway.
How to eat a Holy Moly Donut
Purchase from certified bakery (listed above).
Have napkins ready.


b2MouseJoint Class Reference
#include <b2MouseJoint.h>
List of all members.
Detailed Description
A mouse joint is used to make a point on a body track a specified world point. This a soft constraint with a maximum force. This allows the constraint to stretch and without applying huge forces. NOTE: this joint is not documented in the manual because it was developed to be used in the testbed. If you want to learn how to use the mouse joint, look at the testbed.
Constructor & Destructor Documentation
Member Function Documentation
| b2Vec2 b2MouseJoint::GetAnchorA |
( |
|
) |
const [virtual] |
| b2Vec2 b2MouseJoint::GetAnchorB |
( |
|
) |
const [virtual] |
| float32 b2MouseJoint::GetDampingRatio |
( |
|
) |
const |
| float32 b2MouseJoint::GetFrequency |
( |
|
) |
const |
| float32 b2MouseJoint::GetMaxForce |
( |
|
) |
const |
| b2Vec2 b2MouseJoint::GetReactionForce |
( |
float32 |
inv_dt |
) |
const [virtual] |
| float32 b2MouseJoint::GetReactionTorque |
( |
float32 |
inv_dt |
) |
const [virtual] |
| const b2Vec2 & b2MouseJoint::GetTarget |
( |
|
) |
const |
| void b2MouseJoint::InitVelocityConstraints |
( |
const b2TimeStep & |
step |
) |
[protected, virtual] |
| void b2MouseJoint::SetDampingRatio |
( |
float32 |
ratio |
) |
|
Set/get the damping ratio (dimensionless).
| void b2MouseJoint::SetFrequency |
( |
float32 |
hz |
) |
|
Set/get the frequency in Hertz.
| void b2MouseJoint::SetMaxForce |
( |
float32 |
force |
) |
|
Set/get the maximum force in Newtons.
| void b2MouseJoint::SetTarget |
( |
const b2Vec2 & |
target |
) |
|
Use this to update the target point.
| bool b2MouseJoint::SolvePositionConstraints |
( |
float32 |
baumgarte |
) |
[inline, protected, virtual] |
| void b2MouseJoint::SolveVelocityConstraints |
( |
const b2TimeStep & |
step |
) |
[protected, virtual] |
Friends And Related Function Documentation
Member Data Documentation
The documentation for this class was generated from the following files:


Drive 55: It's not just a Good Idea-- it's the Law! Rule: If your speed is <= 60: No ticket 61 .. 80: Ticket > 80: Book'em, Danno!


This game is a fun way to see the positive light in a crossword puzzle
In this game it shows more than one different type of body shape, so that you can dress up more than one!
In this game you have a character that moves to find the postive words that you will catch!


A space for information regarding Clevland's justice problem, government actions, non-profit actions, and solutions.
If you have information you would like to be included, please email it to CurtisMortensen@pm.me


{{ SHOW.TITLE }}
{{ SHOW.LINK }}
{{ EPISODE.LINK }}
{{ EPISODE.TITLE }}
{{ EPISODE.SEASON }}
{{ EPISODE.EPISODE }}
{{ EPISODE.RATING }}
{{ EPISODE.CERTIFICATION }}
{{ EPISODE.FIRST_AIRED }}
{{ EPISODE.LAST_PLAYED }}
{{ EPISODE.STUDIO }}
{{ EPISODE.PLOT }}
{{ EPISODE.WRITERS }}
{{ EPISODE.DIRECTORS }}
{{ BEGIN_BLOCK_WRITERS }}
{{ GENRE.NAME }}
{{ END_BLOCK_GENRES }}
{{ BEGIN_BLOCK_DIRECTORS }}
{{ DIRECTOR.NAME }}
{{ END_BLOCK_DIRECTORS }}
Video width: {{ FILEINFO.WIDTH }}
Video height: {{ FILEINFO.HEIGHT }}
Video aspect ratio: {{ FILEINFO.ASPECT }}
Video codec: {{ FILEINFO.CODEC }}
Video duration in seconds: {{ FILEINFO.DURATION }}
Audio codec(s) (joined by |): {{ FILEINFO.AUDIO.CODEC }}
Audio channels(s) (joined by |): {{ FILEINFO.AUDIO.CHANNELS }}
Audio languages(s) (joined by |): {{ FILEINFO.AUDIO.LANGUAGE }}


Zoom it provides a simple service based way of loading images and serving out tiles. The Zoomit service is based on the DZI format.
OpenSeadragon can render the DZI tiles and provide you all the features you can only get with OpenSeadragon.
If you are pulling image tiles from zoom it, please understand and respect any policy and copy rights of the image creator.
Configuration is done via the 'tileSources' option ( or programatically ).
OpenSeadragon({ ... tileSources: [{ Image: { xmlns: "http://schemas.microsoft.com/deepzoom/2009", Url: "http://cache.zoom.it/content/WwI0_files/", TileSize: "254", Overlap: "1", Format: "jpg", ServerFormat: "Default", Size: { Width: "5816", Height: "3961" } } }] ... });


Summon Necromancer
Necromancy was born in the darkest corners of hell. A Demon Necromancer can conjure an undead army by speaking just a single depraved word.
^a${value} Second(s) Recharge
60
${value} Energy Cost
350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500
${value} Summon Limit
1
${value} Summoned Immediately
1
MaxLevel
12
UltimateLevel
16


title=Booking.com rewrites the Java-based YUI compressor using Perl date=2012-12-16 type=post tags=blog status=published ~~~~~~
Booking.com has announced that they've re-written the Java-based YUI Compressor using Perl. I'm used to seeing people talking about rewriting systems written in Java into other languages like Python, C, C#, Haskell, Erlang, Scala, Groovy, etc. If I'm honest I just haven't seen many new Perl programs except buried in people's system administration logic and, of course, Puppet.
The results are impressive though, so this is very cool. And, I expect that this will make the tool more approachable to developers as Perl's still far easier and more pervasive than Java virtual machines on machines of developers who are not Java developers. So... cool!


Lesser-Known Films Reviews by<EMAIL_ADDRESS>Copyright 1987<EMAIL_ADDRESS>Three short reviews:
BATTLE OF ALGIERS
Music by Ennio Morricone. This was supposed banned (somewhere) for many years. This early Algerian production is a gritty drama about the liberation of Algiers from the French. It's a fairly straightforward political thriller, and it's hard to tell why it was banned (perhaps for political reasons?). The only "objectionable" scenes are one or two depicting the torture of Algerian revolutionaries.
ANGELIC CONVERSATION
Directed by Derek Jarman, with music by Coil. At this stage (way before Caravaggio), Jarman seems to be more interested in the interplay of light, color and sound than in creating any type of narrative structure. His human figures move through abstract and (treated) real landscapes, but their movement is usually "clipped," as if seen through strobe lights. Some interesting light/color textures reminiscent of Brakhage, but on the whole I found this to be much less interesting than Caravaggio.
CHASTE VIRGIN
If this is representative of the Taiwan "New Wave," than the movement still needs at least a few years to mature. There are some definite breaks with the traditional Taiwanese melodrama but old values (both cinematic and philosophical) still retain a stranglehold. This "realist" depiction of rural farm life and harsh economic realities is smothered by stock characters and situations and cloying sentimentality.
Bill
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Facebook Pay Rolls Out in U.S.
by Charlotte HenryFacebook Pay launched in the U.S. Thursday, Computing reported, following a trial in India. The service supports payments on the Facebook and Messenger platforms.
“Facebook Pay supports most major credit and debit cards as well as PayPal,” said Deborah Liu, vice president of Facebook’s marketplace and commerce division. She continued: “Payments are processed in partnership with companies like PayPal, Stripe and others around the world. Facebook Pay is built on existing financial infrastructure and partnerships, and is separate from the Calibra wallet which will run on the Libra network.” In addition to enabling users to buy goods on the social network’s various platforms, it will also enable them to send money to friends and donate to fundraisers.
Check It Out: Facebook Pay Rolls Out in U.S.


| Interface | Description |
|---|---|
| ConcurrentReferenceHashMap.Reference<K,V> |
A reference to an
ConcurrentReferenceHashMap.Entry contained in the map. |
| MultiValueMap<K,V> |
Extension of the
Map interface that stores multiple values. |
| ReflectionUtils.FieldCallback |
Callback interface invoked on each field in the hierarchy.
|
| ReflectionUtils.FieldFilter |
Callback optionally used to filter fields to be operated on by a field callback.
|
| ReflectionUtils.MethodCallback |
Action to take on each method.
|
| ReflectionUtils.MethodFilter |
Callback optionally used to filter methods to be operated on by a method callback.
|
| Class | Description |
|---|---|
| Assert |
Assertion utility class that assists in validating arguments.
|
| ClassUtils |
Miscellaneous class utility methods.
|
| CollectionUtils |
Miscellaneous collection utility methods.
|
| ConcurrentReferenceHashMap<K,V> | |
| ConcurrentReferenceHashMap.Entry<K,V> |
A single map entry.
|
| LinkedCaseInsensitiveMap<V> |
LinkedHashMap variant that stores String keys in a case-insensitive
manner, for example for key-based access in a results table. |
| LinkedMultiValueMap<K,V> |
Simple implementation of
MultiValueMap that wraps a LinkedHashMap ,
storing multiple values in a LinkedList . |
| MimeType |
Represents a MIME Type, as originally defined in RFC 2046 and subsequently
used in other Internet protocols including HTTP.
|
| MimeType.SpecificityComparator<T extends MimeType> | |
| MimeTypeUtils |
Miscellaneous
MimeType utility methods. |
| ObjectUtils |
Miscellaneous object utility methods.
|
| ReflectionUtils |
Simple utility class for working with the reflection API and handling
reflection exceptions.
|
| ResourceUtils |
Utility methods for resolving resource locations to files in the
file system.
|
| StringUtils |
Miscellaneous
String utility methods. |
| Enum | Description |
|---|---|
| ConcurrentReferenceHashMap.ReferenceType |
Various reference types supported by this map.
|
| ConcurrentReferenceHashMap.Restructure |
The types of restructuring that can be performed.
|
| Exception | Description |
|---|---|
| InvalidMimeTypeException |
Exception thrown from
MimeTypeUtils.parseMimeType(String) in case of
encountering an invalid content type specification String. |


Your guide to AFL draft academy and father-son bidding ahead of next week’s National Draft
by Matt BalmerOnce again, another draft pool is stacked to the brim with potential academy and father-son selections inside the first round and here’s your guide to how the bidding system works.
In 2015, the AFL created the draft value index which allocated a points value to every possible selection.
Clubs who already have gun academy and father-son youngsters attached to them now have to ‘pay’ to secure these players via multiple picks, because rival clubs have the right to bid on these players. This forces the nominated clubs to match the bid to secure the player. If they don’t, the player goes to the club who made the bid.
SCROLL DOWN FOR A FULL EXPLANATION ON THE BIDDING SYSTEM
Each draft selection now has a points value attached to it, starting with Pick 1 (worth 3000 points) down to Pick 73 (nine points). Picks from 74 onwards are worth nothing.
The best way to explain the scenario is via a hypothetical example.
- LET’s say Brisbane bid on Hawthorn father-son prospect Finn Maginness at Pick 21 (878 pts) **
- IN order to snare him, the Hawks now have to match the Lions’ bid using the draft picks they already hold.
- FIRST, we must take away the 197 point discount (which is automatically given to clubs for bids outside the first round) that would be given to the Hawks, meaning they now have to find 681 points to secure Henry.
- With Hawthorn already using Pick 11, their next three selections are Pick 42 (395), Pick 50 (273) and Pick 54 (220), cover the bid
- However, as the value of those three picks adds up to 888, they have 207 points left over. This means the Hawks’ Pick 54 would slide back to Pick 55 in the draft
- Now Finn Maginness is officially selected by the Hawks at Pick 21, but the Hawks have lost Pick 42 and 50.
- The Lions select again at Pick 22 and the predetermined draft order continues from there.
** - Note it is likely Pick 21 would slide back to Pick 23 after GWS match a bid on Tom Green and Fremantle match a bid on Liam Henry.
THE ACADEMY NOMINEES TO LOOK OUT FOR
Brisbane Lions: Will Martyn, Keidan Coleman, Noah Cumberland, Lachlan Johnson
GWS Giants: Tom Green
THE NEXT GENERATION ACADEMY NOMINEES TO LOOK OUT FOR
Fremantle: Liam Henry, Isaiah Butters
Hawthorn: Harrison Pepper
St Kilda: Bigoa Nyuon
THE FATHER-SON NOMINEES TO LOOK OUT FOR
Hawthorn: Finn Maginness (son of Scott, 131 games for Hawthorn)
Port Adelaide: Jackson Mead (son of Darren, 122 games for Port Adelaide), Trent Burgoyne (son of Peter, 240 games for Port Adelaide)
THE FULL VALUE INDEX
Note: When matching a bid, teams receive a 20 per cent discount for first round picks and a flat discount of 197 points for picks outside of the first round.
PICK — POINT VALUE — POINTS NEEDED TO MATCH WITH DISCOUNT
1 — 3000 — 2400
2 — 2517 — 2014
3 — 2234 — 1787
4 — 2034 — 1627
5 — 1878 — 1503
6 — 1751 — 1401
7 — 1644 — 1315
8 — 1551 — 1241
9 — 1469 — 1175
10 — 1395 — 1116
11 — 1329 — 1063
12 — 1268 — 1014
13 — 1212 — 970
14 — 1161 — 929
15 — 1112 — 890
16 — 1067 — 854
17 — 1025 — 788
18 — 985 — 788
19 — 948 — 751
20 — 912 — 715
21 — 878 — 681
22 — 845 — 657
23 — 815 — 618
24 — 785 — 588
25 — 756 — 559
26 — 729 — 532
27 — 703 — 506
28 — 677 — 480
29 — 653 — 456
30 — 629 — 432
31 — 606 — 409
32 — 584 — 387
33 — 563 — 366
34 — 542 — 345
35 — 522 — 325
36 — 502 — 305
37 — 483 — 286
38 — 465 — 268
39 — 446 — 249
40 — 429 — 232
41 — 412 — 215
42 — 395 — 198
43 — 378 — 181
44 — 362 — 165
45 — 347 — 150
46 — 331 — 134
47 — 316 — 119
48 — 302 — 105
49 — 287 — 90
50 — 273 — 76
51 — 259 — 62
52 — 246 — 49
53 — 233 — 36
54 — 220 — 23
55 — 207 — 10
56 — 194
57 — 182
58 — 170
59 — 158
60 — 146
61 — 135
62 — 123
63 — 112
64 — 101
65 — 90
66 — 80
67 — 69
68 — 59
69 — 49
70 — 39
71 — 29
72 — 19
73 — 9
Picks 74 and onwards — 0


Recently Graduated from NYU
I started off as a developer in insurance domain with AIG as client. Code development: creating tables, stored procedures and indexes. Design Reports for Internal user needs. Generate Dash Board Reports for Internal Users using SQL Server 2005 Reporting Services. Led the consolidation of two systems into one, and successfully migrated their existing portfolios onto a single platform resulting in about 30% reduction in maintenance costs. Contributed to migration project from mainframe to UNIX environment by testing core functions of the application. Performed internal and external quality reviews and ensured on time and bug free delivery. Consistently met and exceeded the expectation of client, with a 99% accuracy rate.
Created IMDB scale movies database by parsing extract files using Ruby and storing data into MySQL. Performed database tuning on huge tables achieving data appends and data retrieval of more than 1 million rows under a minute.
As my final requirement to complete my masters I.S. students collaborated with a technology company to build software or support a service. I was fortunate enough to work with Developer Evangelist, Rob Spectre, to improve Twilio's Blog Content creation by designing an automation system between Google Documents and Wordpress through a WP plugin. Along with three other classmates we developed the plugin with PHP and Google Drive API to convert a user's Google Doc to a Wordpress post keeping formatting, photos, videos content, and even language specific highlighting for code blocks.
Business analysis, understanding requirements and converting business requirements into technical solutions Created and maintained data flow diagrams for existing and future ETL processes. Setting up new test server and creating new SSDB catalog. Good working knowledge with Facts, Dimensions and Multi-Dimensional Cubes. Involved in complete SSIS life cycle: creating SSIS packages, building, deploying and executing the packages in both development and production environments Used various SSIS tasks such as Conditional Split, Multicast etc., to perform data scrubbing, data validations and cleansing during extraction of data into staging tables. Created SSIS package to load data between different servers and finally to Data warehouse. Created Parametrized Queries, generated Tabular reports, Sub reports, Cross Tabs, Drill down reports using Expressions, Functions, Charts, Maps, Sorting the data, Defining Data sources and Subtotals for the reports using SSRS Created Jobs and Job Notifications. Performed data validation between source system and data loaded in the data warehouse for new requirements.


The Jawr descriptor file consists of a simple properties file. All property names begin with jawr., followed by either js., css. or img. to denote which servlet will use them. A few common properties will not have the filetype prefix since they apply globally. Some configuration properties are using name of the class to use, the full qualified name containing package prefix is expected.
| Property name | Type | Purpose | Default value |
|---|---|---|---|
| jawr.charset.name | Any valid charset name (ISO-8859-1, UTF-8, etc) | Specifies the encoding to use when reading the resources to bundle and also the encoding with which the servlet will serve its responses. Note that all your resources (js or css files) must use the encoding you specify here, or Jawr will not work properly. | UTF8 |
| jawr.debug.on | Boolean | Toggle development mode on/off. If the JVM is started with the net.jawr.debug.on flag (-Dnet.jawr.debug.on=true), its value takes precedence over whatever value is set on the properties file. | false |
| jawr.debug.overrideKey | String | Override production mode on a request by request basis. | none |
| jawr.debug.ie.force.css.bundle | Boolean | Force Jawr to aggregate CSS bundle for IE in debug mode. This allows you to overcome the IE limitation, which can only handle 30 stylesheets. If you set this flag to true, with an IE browser in debug mode, Jawr will render each CSS bundle as a unique CSS resource, instead of referencing all the resources of the bundle. | false |
| jawr.debug.use.random.parameter | Boolean | The flag indicating if the random parameter must be added by default to all debug URL | true |
| jawr.gzip.on | Boolean | Enable the ability to serve gzipped resources to browsers that support it. | true |
| jawr.gzip.ie6.on | Boolean | Disable the serving of gzipped resources to Internet Explorer 6 or less. | true |
| jawr.use.generator.cache | Boolean | Define if we must use cache for the generated content. | true |
| jawr.use.smart.bundling | Boolean | Define if we must use the “smart bundling” feature (processing only modified bundle). | false |
| jawr.use.bundle.mapping | Boolean | Define if we must use the generated bundle mapping or not. | false |
| jawr.smart.bundling.delay.after.last.event | Integer | Defines the delay after the last event before starting the bundle processing (in second) | 2 |
| jawr.working.directory | String | Path to the jawr working directory. | javax.servlet.context.tempdir/jawrTmp |
| jawr.basecontext.directory | String | the path to the external base context directory where the resource can be found | none |
| jawr.basecontext.directory.high.priority | Boolean | the flag indicating if the resource must be searched in priority in the basecontext directory of not | false |
| jawr.config.reload int.interval | The interval in seconds in which Jawr checks whether the configuration or the bundles have changed. If this value is set, when you change the properties file or a bundle file, Jawr will detect it and redeploy itself so you don’t need to restart the server to test your changes. | none | |
| jawr.config.reload.refreshKey | String | Force a refresh of all bundles or the ones detected as modified if in smart bundling mode. Hit any bundle URL and add ?refreshKey=value to reload the bundles. | none |
| jawr.browser.resolver | String | Name of a class implementing net.jawr.web.resource.bundle.variant.VariantResolver. An instance of this class will be created and used to determine the Browser type to use for a given request. | net.jawr.web.resource.bundle.variant.resolver.BrowserResolver |
| jawr.url.connection.type.resolver | String | Name of a class implementing net.jawr.web.resource.bundle.variant.VariantResolver. An instance of this class will be created and used to determine the connection type (standard or ssl) of a given request. | net.jawr.web.resource.bundle.variant.resolver.ConnectionTypeResolver |
| jawr.css.skin.resolver | String | Name of a class extending net.jawr.web.resource.bundle.variant.css.AbstractCssSkinResolver. An instance of this class will be created and used to determine the css skin used in a given request. | net.jawr.web.resource.bundle.variant.css.CssSkinResolver |
| jawr.locale.resolver | String | Name of a class implementing net.jawr.web.resource.bundle.locale.LocaleResolver. An instance of this class will becreated and used to determine the Locale to use for a given request when using an i18n messages generator. | none |
| jawr.locale.generator.fallbackToSystemLocale | Boolean | The flag indicating if Jawr must use the System locale if no locale is found for a request. | true |
| jawr.locale.generator.quoteMsgKey | Boolean | The flag indicating if Jawr must use quote character for the messages keys in the generated javascript bundle. | false |
| jawr.locale.generator.resourceBundle.charset | String | The charset of the message ResourceBundle. | ISO-8859-1 |
| jawr.url.contextpath.override | URL (absolute or fragment) [http://...**\] ,[//somepath** protocol relative],[/somepath ] or [/] or []. | Override the use of the application’s contextpath to prefix every generated URL. Using ‘/’ will cause Jawr to skip the context path altogether (‘/001/bundles/mybundle.js’). Using an empty value will cause Jawr to generate page relative urls(‘001/bundles/mybundle.js’). | none |
| jawr.url.contextpath.ssl.override | URL (absolute or fragment) [https://...**\] ,[//somepath** protocol relative],[/somepath ] or [/] or []. | For HTTPS request, override the use of the application’s contextpath to prefix every generated URL. Using ‘/’ will cause Jawr to skip the context path altogether (‘/001/bundles/myb undle.js’). Using an empty value will cause Jawr to generate page relative urls (‘001/bundles/mybu ndle.js’). | none |
| jawr.url.contextpath.override.used.in.debug.mode | Boolean | The flag indicating if we should retrieve the debug resources from the overridden context path or not. | false |
| jawr.factory.use.orphans.mapper | Boolean | Enable/disable auto scanning of non explicitly mapped files to auto-compress and to generate a one-file bundle out of each. | true |
| jawr.css.classpath.handle.image | Boolean | The flag indicating if the CSS images should be retrieved from the classpath, for the CSS defined in the classpath. | none |
| jawr.csslinks.flavor | String | Sets how the LINK tags are rendered by the style tag. See the taglib docs. | xhtml |
| jawr.dwr.mapping | String | Value of the servlet-mapping that points to a DWR servlet instance. See DWR integration. | none |
| jawr.strict.mode | Boolean | Enable/disable strict mode for bundle request. | False |
| jawr.illegal.bundle.request.handler | String | The class name of the handler for illegal bundle request. | net.jawr.web.servlet.IllegalBundleRequestHandlerImpl |
| jawr.bundle.hashcode.generator | String | The class name of the hashcode bundle generator or MD5 if you want to use the MD5 algorithm for the hashcode. | none |
| jawr.js.engine | String | The default JS engine to use by processors and generators, which are based on JS engine (Possible values are : mozilla.rhino, nashorn, …) | mozilla.rhino |
| jawr.css.url.rewriter.context.path | String | The webapp context path. This property is used in the CSS URL rewriter to determine if an absolute path is in the web application or not. | none |
| jawr.css.postprocessor.base64ImageEncoder.encode.by.default | Boolean | Enable/disable the base64 image encoding by default | true |
| jawr.css.postprocessor.base64ImageEncoder.maxFileLength | Integer | The maximum size (in bytes) of the image to encode in base64 | 30000 |
| jawr.css.postprocessor.base64ImageEncoder.encode.sprite | Boolean | Enable/disable the base64 image encode on generated sprite image. | False |
| jawr.css.postprocessor.cssmin.keepLicence | Boolean | Flag indicating if the licence comments (/*! … */) should be kept or not. | False |
| jawr.css.skin.type.mapping | String | The type of mapping for the skin directory structure. The acceptable values are : skin_locale and locale_skin. | skin_locale |
| jawr.css.skin.default.root.dirs | String | The comma separated list of skin base directory. | none |
| jawr.css.skin.cookie | String | The name of the cookie where the current user CSS skin name is stored. | jawrSkin |
| jawr.jmx.mbean.prefix | String | The prefix for Jawr MBean. This can be useful for application which are deployed on different server using the same application context. | default |
These properties are used to configure basic aspects of an instance of the Jawr Servlet. There is a variant to each one, depending on whether the servlet will be used for javascript or CSS resources.
| Property name | Type | Purpose | Default value |
|---|---|---|---|
| jawr.js.use.cache jawr.css.use.cache | Boolean | Toggle the use of a cache manager that will store and serve all the bundles directly from system memory. | true |
| jawr.js.bundle.basedir jawr.css.bundle.basedir | URL fragment | This optional parameter tells Jawr to look for js or css files only in the specified directory, which may speed the starting time up a bit. The URL fragment denotes a path from the root of the WAR file (‘/js’, for instance). | None |
| jawr.js.bundle.factory.global.preprocessors jawr.css.bundle.factory.global.preprocessors | Comma separated list. | List of global preprocessors to apply to every resource before the bundling process. Check the global preprocessors manual for more info. | None |
| jawr.js.bundle.factory.bundlepostprocessors jawr.css.bundle.factory.bundlepostprocessors | Comma separated list. | List of postprocessors to apply to every generated bundle. Check the postprocessors manual for more info. | None |
| jawr.js.bundle.factory.filepostprocessors jawr.css.bundle.factory.filepostprocessors | Comma separated list. | List of postprocessors to apply to every resource before including it in a bundle. Check the postprocessors manual for more info. | None |
| jawr.js.bundle.factory.composite.bundlepostprocessors jawr.css.bundle.factory.composite.bundlepostprocessors | Comma separated list. | List of postprocessors to apply to every composite bundle. Check the postprocessors manual for more info. | None |
| jawr.js.bundle.factory.composite.filepostprocessors jawr.css.bundle.factory.composite.filepostprocessors | Comma separated list. | List of postprocessors to apply to every resource before including it in a composite bundle. Check the postprocessors manual for more info. | None |
| jawr.js.factory.use.singlebundle jawr.css.factory.use.singlebundle | Boolean | If true, all resources which don’t belong to any defined bundle are joined onto a single bundle, as opposed to the default behavior which is to map each one to a sinle-file bundle. | false |
| jawr.js.factory.singlebundle.bundlename jawr.css.factory.singlebundle.bundlename | URL fragment. (‘/script.js’, ‘bundles/script.js’, etc.) | When factory.use.singlebundle is set to true, this parameter defines the name of the bundle containing all orphans. It is mandatory to set this parameter when factory.use.singlebundle is set to true. | None |
| jawr.js.factory.use.dirmapper jawr.css.factory.use.dirmapper | Boolean | If true, a bundle will be created automatically from every directory under the defined basedir (or the root dir if none is defined). These bundles contain every resource within (javascript or css, depending on the case). Each bundle has the name of its root dir. | false |
| jawr.js.factory.dirmapper.excluded jawr.css.factory.dirmapper.excluded | Comma separated list. | List of directories to exclude when using the dirmapper. You must exclude directory names for those resources already mapped explicitly to a bundle. | None |
| jawr.js.bundle.link.renderer.class | String | The JS link render class, which must implements net.jawr.web.resource.bundle.renderer.JsBundleLinkRenderer | net.jawr.web.resource.bundle.renderer.JavascriptHTMLBundleLinkRenderer |
| jawr.css.bundle.link.renderer.class | String | The CSS link render class, which must implements net.jawr.web.resource.bundle.renderer.CssBundleLinkRenderer | net.jawr.web.resource.bundle.renderer.CSSHTMLBundleLinkRenderer |
This table is meant as a quick reference. To learn more about bundles definition, check the bundle definitions tutorial page.
| Property name | Type | Purpose | Default value |
|---|---|---|---|
| jawr.[type].bundle.[name].id | URL fragment (ex: ‘/bundles/global.js’) | Defines a bundle by giving it a name (the [name] part of the property) and a path, which must be unique. For members of a composite, this property must NOT be defined. The bundle Id must follow the following pattern ‘/[a-zA-Z0-9-_/]* .((js) | (css))’ for example : /myBundles/bundle-tree12.js. The bundle ID must not starts with ‘/WEB-INF/’ or ‘/META-INF/’ | |
| jawr.[type].bundle.[name].mappings | Comma separated list. | Mapping of the resources to include in the bundle. Values can be either a directory path (‘/someDir’), a directory path with wildcards to include subdirs (‘/someDir/**’), or a single resource path (‘/js/foo.js’). It is mandatory for each custom bundle unless it is a child of a composite. | None |
| jawr.[type].bundle.[name].global | Boolean | Set whether a bundle is global or not. If it is, it will be included before any non-global bundle. | false |
| jawr.[type].bundle.[name].order | Integer | Sets precedence for global bundles, when you have more than one. Bundles with a lower value will be included in pages before bundles with a higher value. | 0 |
| jawr.[type].bundle.[name].dependencies | Comma separated list. | This property sets the names of bundles, on which the bundle depends. If you include your bundle in a page, for each name in this list, Jawr will include the bundle associated if it’s not already included. This property is not allowed for global bundles | None |
| jawr.[type].bundle.[name].composite | Boolean | Set whether a bundle is a composite or not. If it is, the mappings attribute must not be set and instead, the child.names property will be used. | false |
| jawr.[type].bundle.[name].child.names | Comma separated list. | For a composite bundle, this property sets the names of bundles that must be defined in further properties. For each name in this list you must specify properties for a child bundle that must have no id and cannot be global. | None |
| jawr.[type].bundle.[name].bundle.prefix | String | Defines the prefix for the bundle, which will be preprend before the bundle hashcode. The generated bundle URL would look like /app ctx/pub/gzip_xxxxxxxxxx/path_to_bundle if pub is defined as bundle prefox. This can be helpful to define security filters to access bundles | None |
| jawr.[type].bundle.[name].productionURL | URL string | Defines a URL to use when this bundle is invoked under production mode. This is helpful when using publicly served libraries such as YUI. | None |
| jawr.[type].bundle.[name].bundlepostprocessors | Comma separated list. | Overrides the global bundles postprocessor. | None |
| jawr.[type].bundle.[name].filepostprocessors | Comma separated list. | Overrides the global file postprocessor. | None |
| jawr.[type].bundle.[name].debugonly | Boolean | If set to true, the bundle will only be included in pages when development mode is on. Useful for debugging script such as console writers. | false |
| jawr.[type].bundle.[name].debugnever | Boolean | If set to true, the bundle will never be included in pages when development mode is on. Useful for empty debugging script replacements (faux console writers, for instance). | false |
| jawr.[type].bundle.[name].ieonly.condition | IE expression | If set, the bundle will be included within a conditional comment for internet explorer. The value must correspond to a conditional comment selector expression (such as ‘if lt IE 6’). | None |
Jawr is also able to manage image resources. A dedicated servlet is used to handle them.
| Property name | Type | Purpose | Default value |
|---|---|---|---|
| jawr.binary.resources | String | The comma separated list of binary web resources, whose the hashcode will be calculated at Jawr Binary servlet startup. If a binary resource is not defined here, the hashcode will be calculated at runtime and put in cache. | None |
| jawr.binary.hash.algorithm | String | The hash algorithm to use for the binary resource (images, font, …). Two values are possible : CRC32 and MD5 | CRC32 |
| jawr.img.bundle.link.renderer.class | String | The image link render class, which must implements net.jawr.web.resource.bundle.renderer.image.ImgRenderer | net.jawr.web.resource.bundle.renderer.image.ImgHTMLRenderer |
| Property name | Type | Purpose | Default value |
|---|---|---|---|
| jawr.custom.global.preprocessor.[name].class | String | Qualified classname of the global preprocessor for JS resources to later be referenced with the id [name]. | None |
| Property name | Type | Purpose | Default value |
|---|---|---|---|
| jawr.custom.postprocessors.[name].class | String | Qualified classname of the postprocessor to later be referenced with the id [name]. | None |
| Property name | Type | Purpose | Default value |
|---|---|---|---|
| jawr.custom.generators | Comma separated list. | List of all the ResourceGenerator implementations you want to use. | None |
| Property name | Type | Purpose | Default value |
|---|---|---|---|
| jawr.custom.resolvers | Comma separated list. | List of all the VariantResolver implementations you want to use. | None |
These properties are no longer used in the current version of Jawr.
| Property name | Type | Purpose | Default value | Deprecated at version |
|---|---|---|---|---|
| jawr.js.commonURLPrefix jawr.css.commonURLPrefix | URL fragment (‘/V001’, for instance). The prefixes ‘/static’ and ‘/gzip_’ are reserved, so you can’t use any prefix starting with either string. The prefix can’t denote more than one path name (‘/foo/bar’ would be wrong, for instance). | Version prefix to append to all the URLs generated by the tags in the pages. Its purpose is to keep clients from using older cached versions of your bundles when a new one is deployed. It can be overridden by individual bundle definitions. This prefix is mandatory, Jawr will not start up without it. | None | 2.0 |
| jawr.[type].bundle.[name].prefix | URL fragment (‘/V001’, for instance). | Overrides the globalPrefix attribute for individual bundles, for increased control over client caching of versions. It has the same constraints as globalPreffix (prefixes starting with ‘/static’ and ‘/gzip_’ are not allowed) | None | 2.0 |
| jawr.js.bundle.names jawr.css.bundle.names | Comma separated list. | List of all the bundles you wish to define in the descriptor. For every item in this list, you must define bundle properties in the form ‘jawr.[type].bundle.[name].[property]’, where [type] is either js or css, [name] is the name defined in this list, and [property] is any of the bundle parameters defined below. | None | 2.7 |
| jawr.custom.postprocessors.names | Comma separated list. | List of all the custom postprocessors you wish to define in the descriptor. For every item in this list, you must define the postprocessor implementation class as defined below. Afterwards, you may use the names defined in this list to define postprocessor chains, as in: jawr.js.bundle.factory.bundlepostprocessors=JSMin,[myUserDefinedPostprocessor],license. | None | 2.8 |
| jawr.css.imagepath.override | String | Value to prepend to normalized css urls. So css background: url(../../img/bkrnd/bg.gif); will = background: url(\${jawr.css.imagepath.override}img/bkrnd/bg.gif); | None | 3.0 |
| jawr.js.bundle.[name].locales | Comma separated list. | Defines the locale variants to generate for this bundle, which will be available whenever a locale resolver returns a key matching any of the specified values. | None | 3.0 |
| jawr.css.classpath.handle.image | Boolean | The flag indicating if the CSS images should be retrieved from the classpath, for the CSS defined in the classpath. | none | 3.2 not supported since 3.5 |
| factory.use.orphans.mapper | Boolean | Enable/disable auto scanning of non explicitly mapped files to auto-compress and to generate a one-file bundle out of each. | true | 3.2.1 |
| jawr.image.resources | String | The comma separated list of images, whose the hashcode will be calculated at Jawr image servlet startup. If an image is not defined here, the hashcode will be calculated at runtime and put in cache. | None | Not supported since 3.6 (Please use jawr.binary.resources instead) |
| jawr.image.hash.algorithm | String | The hash algorithm to use for the images. Two values are possible : CRC32 and MD5 | CRC32 | Not supported since 3.6 (Please use jawr.binary.hash.algorithm instead) |


Tantã
Card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Não
Sim


--- layout: default title: JuiceKit ---
Demos with source code available{% for post in site.categories.demos %} |
Demos with source code not yet available
{% for post in site.categories.demos %}
|


Additional remarks for MailMergePending/SenderMail
Email address of sender. this value will be used to send merged document. Note: This property is used in Mail Merge, and it is obsolete in Word Merge.


API
<blurhash-img>
undefined
Attributes
| Name | Description | Type | Default |
|---|---|---|---|
| hash | The encoded blurhash, as a string. | string | undefined | undefined |
| resolutionX | The X-axis resolution in which the decoded image will be rendered at. Recommended min. 32px. Large sizes (>128px) will greatly decrease rendering performance. | number | 32 |
| resolutionY | The Y-axis resolution in which the decoded image will be rendered at. Recommended min. 32px. Large sizes (>128px) will greatly decrease rendering performance. | number | 32 |
Properties
| Name | Attribute | Description | Type | Default |
|---|---|---|---|---|
| hash | hash | The encoded blurhash, as a string. | string | undefined | undefined |
| resolutionX | resolutionX | The X-axis resolution in which the decoded image will be rendered at. Recommended min. 32px. Large sizes (>128px) will greatly decrease rendering performance. | number | 32 |
| resolutionY | resolutionY | The Y-axis resolution in which the decoded image will be rendered at. Recommended min. 32px. Large sizes (>128px) will greatly decrease rendering performance. | number | 32 |
| canvas | undefined | undefined | HTMLCanvasElement | undefined | undefined |


{% extends 'layout.html' %} {% block pageTitle %} Timed out, you will need to start again – How is coronvirus affecting you – NHS.UK {% endblock %} {% block beforeContent %}
{% endblock %} {% block content %}For security reasons, we can't save what you have done so far. You will need to start again.
{{ button({ "text": "Start again", "href": "#" }) }}


Links
The following are resources that we have found useful in teaching spatial analysis and methods using R. You may find these helpful as a reference. Free resources are denoted with an asterisk.
Spatial Data Analysis in R
Spatial R Task View*: Provides an overview of the R ecosystem for spatial data analysis
Applied Spatial Data Analysis with R (2nd Edition), Roger Bivand, Edzer Pebesma and Virgilio Gomez-Rubio (2013): More advanced, in-depth coverage of spatial statistical packages in R (assumes quite a bit of R expertise)
Geocomputation in R*: Recent online textbook about manipulating, mapping, and modeling geographic data
Introduction to visualizing spatial data in R*, Robin Lovelace, James Cheshire, Rachel Oldroyd and others (2015) : A good introductory overview of GIS operations in R
An Introduction to Spatial Data Analysis and Visualization in R*, Guy Lansley and James Cheshire (2016): A more extensive introduction to mapping, spatial data manipulation and visualization in R
An Introduction to R for Spatial Analysis and Mapping, Chris Brunsdon and Lex Comber (2015): a more in-depth intermediate overview of GIS operations and some spatial analysis in R with lots of illustrations
General R Learning
- R for Data Science*, Garrett Grolemund and Hadley Wickham (2017): A collection of data science “skills” using R, with an emphasis on “data munging” using specialized R packages called the “tidyverse” – highly recommended if you are serious about data science using R


SimTrader is a browser based market trading simulation game.
It uses real historical market data to provide a simulated trading environment.
The market is displayed as 1 minute Candlestick Chart.
Market Volume is displayed as a series of bars along the bottom of the chart.
After SimTrader finished loading, click the 'Ready!' button to start the simulation.
Click the clock while it is running to pause the simulation.
Click it again to resume the simulation.
You can change the speed of the simulation to run faster or slower.
Use the left arrow button, located under the clock, to slow the simulation.
Use the right arrow button, located under the clock, to speed up the simulation.
While the simulation is running, you can buy and sell the market.
The green right arrow button will buy a single unit.
The red left arrow button will sell a single unit.
The yellow button will flatten your position.
Buy when the price of the market is low and sell when the market price is high.


Sign in with your forge accout to discuss with other users.
Username
Password
{{user.name}}
Available
Yes
No
User List
Name
Status
Actions
{{user.name}}
{{user.status}}
Todos
{{remaining()}} of {{todos.length}} remaining
{{todo.text}}


Universal Functions (ufunc)¶
CuPy provides universal functions (a.k.a. ufuncs) to support various elementwise operations. CuPy’s ufunc supports following features of NumPy’s one:
- Broadcasting
- Output type determination
- Casting rules
CuPy’s ufunc currently does not provide methods such as reduce
, accumulate
, reduceat
, outer
, and at
.
Ufunc class¶
Available ufuncs¶
Math operations¶
add
subtract
multiply
divide
logaddexp
logaddexp2
true_divide
floor_divide
negative
power
remainder
mod
fmod
absolute
rint
sign
exp
exp2
log
log2
log10
expm1
log1p
sqrt
square
reciprocal
Trigonometric functions¶
sin
cos
tan
arcsin
arccos
arctan
arctan2
hypot
sinh
cosh
tanh
arcsinh
arccosh
arctanh
deg2rad
rad2deg
Bit-twiddling functions¶
bitwise_and
bitwise_or
bitwise_xor
invert
left_shift
right_shift
Comparison functions¶
greater
greater_equal
less
less_equal
not_equal
equal
logical_and
logical_or
logical_xor
logical_not
maximum
minimum
fmax
fmin
Floating point values¶
isfinite
isinf
isnan
signbit
copysign
nextafter
modf
ldexp
frexp
fmod
floor
ceil
trunc
ufunc.at¶
Currently, CuPy does not support at
for ufuncs in general.
However, cupy.scatter_add()
can substitute add.at
as both behave identically.