This chapter covers Groovy Closures. A closure in Groovy is an open, anonymous, block of code that can take arguments,
return a value and be assigned to a variable. A closure may reference variables declared in its surrounding scope. In
opposition to the formal definition of a closure, Closure
in the Groovy language can also contain free variables which
are defined outside of its surrounding scope. While breaking the formal concept of a closure, it offers a variety of
advantages which are described in this chapter.
1. Syntax
1.1. Defining a closure
A closure definition follows this syntax:
{ [closureParameters -> ] statements }
Where [closureParameters->]
is an optional comma-delimited list of
parameters, and statements are 0 or more Groovy statements. The parameters
look similar to a method parameter list, and these parameters may be
typed or untyped.
When a parameter list is specified, the ->
character
is required and serves to separate the arguments from the closure body.
The statements portion consists of 0, 1, or many Groovy statements.
Some examples of valid closure definitions:
{ item++ } (1)
{ -> item++ } (2)
{ println it } (3)
{ it -> println it } (4)
{ name -> println name } (5)
{ String x, int y -> (6)
println "hey ${x} the value is ${y}"
}
{ reader -> (7)
def line = reader.readLine()
line.trim()
}
| 1 | A closure referencing a variable named item |
| 2 | It is possible to explicitly separate closure parameters from code by adding an arrow (-> ) |
| 3 | A closure using an implicit parameter (it ) |
| 4 | An alternative version where it is this time an explicit parameter |
| 5 | In that case it is often better to use an explicit name for the parameter |
| 6 | A closure accepting two typed parameters |
| 7 | A closure can contain multiple statements |
1.2. Closures as an object
A closure is an instance of the groovy.lang.Closure
class, making it assignable to a variable or a field as any
other variable, despite being a block of code:
def listener = { e -> println "Clicked on $e.source" } (1)
assert listener instanceof Closure
Closure callback = { println 'Done!' } (2)
Closure<Boolean> isTextFile = {
File it -> it.name.endsWith('.txt') (3)
}
| 1 | You can assign a closure to a variable, and it is an instance of groovy.lang.Closure |
| 2 | If not using def , you can assign a closure to a variable of type groovy.lang.Closure |
| 3 | Optionally, you can specify the return type of the closure by using the generic type of groovy.lang.Closure |
1.3. Calling a closure
A closure, as an anonymous block of code, can be called like any other method. If you define a closure which takes no argument like this:
def code = { 123 }
Then the code inside the closure will only be executed when you call the closure, which can be done by using the variable as if it was a regular method:
assert code() == 123
Alternatively, you can be explicit and use the call
method:
assert code.call() == 123
The principle is the same if the closure accepts arguments:
def isOdd = { int i-> i%2 == 1 } (1)
assert isOdd(3) == true (2)
assert isOdd.call(2) == false (3)
def isEven = { it%2 == 0 } (4)
assert isEven(3) == false (5)
assert isEven.call(2) == true (6)
| 1 | define a closure which accepts an int as a parameter |
| 2 | it can be called directly |
| 3 | or using the call method |
| 4 | same goes for a closure with an implicit argument (it ) |
| 5 | which can be called directly using (arg) |
| 6 | or using call |
Unlike a method, a closure always returns a value when called. The next section discusses how to declare closure arguments, when to use them and what is the implicit "it" parameter.
2. Parameters
2.1. Normal parameters
Parameters of closures follow the same principle as parameters of regular methods:
-
an optional type
-
a name
-
an optional default value
Parameters are separated with commas:
def closureWithOneArg = { str -> str.toUpperCase() }
assert closureWithOneArg('groovy') == 'GROOVY'
def closureWithOneArgAndExplicitType = { String str -> str.toUpperCase() }
assert closureWithOneArgAndExplicitType('groovy') == 'GROOVY'
def closureWithTwoArgs = { a,b -> a+b }
assert closureWithTwoArgs(1,2) == 3
def closureWithTwoArgsAndExplicitTypes = { int a, int b -> a+b }
assert closureWithTwoArgsAndExplicitTypes(1,2) == 3
def closureWithTwoArgsAndOptionalTypes = { a, int b -> a+b }
assert closureWithTwoArgsAndOptionalTypes(1,2) == 3
def closureWithTwoArgAndDefaultValue = { int a, int b=2 -> a+b }
assert closureWithTwoArgAndDefaultValue(1) == 3
2.2. Implicit parameter
When a closure does not explicitly define a parameter list (using ->
), a closure always defines an implicit
parameter, named it
. This means that this code:
def greeting = { "Hello, $it!" }
assert greeting('Patrick') == 'Hello, Patrick!'
is stricly equivalent to this one:
def greeting = { it -> "Hello, $it!" }
assert greeting('Patrick') == 'Hello, Patrick!'
If you want to declare a closure which accepts no argument and must be restricted to calls without arguments, then you must declare it with an explicit empty argument list:
def magicNumber = { -> 42 }
// this call will fail because the closure doesn't accept any argument
magicNumber(11)
2.3. Varargs
It is possible for a closure to declare variable arguments like any other method. Vargs methods are methods that can accept a variable number of arguments if the last parameter is of variable length (or an array) like in the next examples:
def concat1 = { String... args -> args.join('') } (1)
assert concat1('abc','def') == 'abcdef' (2)
def concat2 = { String[] args -> args.join('') } (3)
assert concat2('abc', 'def') == 'abcdef'
def multiConcat = { int n, String... args -> (4)
args.join('')*n
}
assert multiConcat(2, 'abc','def') == 'abcdefabcdef'
| 1 | A closure accepting a variable number of strings as first parameter |
| 2 | It may be called using any number of arguments without having to explicitly wrap them into an array |
| 3 | The same behavior is directly available if the args parameter is declared as an array |
| 4 | As long as the last parameter is an array of an explicit vargs type |
3. Delegation strategy
3.1. Groovy closures vs lambda expressions
Groovy defines closures as instances of the Closure class. It makes it very different from lambda expressions in Java 8. Delegation is a key concept in Groovy closures which has no equivalent in lambdas. The ability to change the delegate or change the delegation strategy of closures make it possible to design beautiful domain specific languages (DSLs) in Groovy.
3.2. Owner, delegate and this
To understand the concept of delegate, we must first explain the meaning of this
inside a closure. A closure actually
defines 3 distinct things:
-
this
corresponds to the enclosing class where the closure is defined -
owner
corresponds to the enclosing object where the closure is defined, which may be either a class or a closure -
delegate
corresponds to a third party object where methods calls or properties are resolved whenever the receiver of the message is not defined
3.2.1. The meaning of this
In a closure, calling getThisObject
will return the enclosing class where the closure is defined. It is equivalent to
using an explicit this
:
class Enclosing {
void run() {
def whatIsThisObject = { getThisObject() } (1)
assert whatIsThisObject() == this (2)
def whatIsThis = { this } (3)
assert whatIsThis() == this (4)
}
}
class EnclosedInInnerClass {
class Inner {
Closure cl = { this } (5)
}
void run() {
def inner = new Inner()
assert inner.cl() == inner (6)
}
}
class NestedClosures {
void run() {
def nestedClosures = {
def cl = { this } (7)
cl()
}
assert nestedClosures() == this (8)
}
}
| 1 | a closure is defined inside the Enclosing class, and returns getThisObject |
| 2 | calling the closure will return the instance of Enclosing where the the closure is defined |
| 3 | in general, you will just want to use the shortcut this notation |
| 4 | and it returns exactly the same object |
| 5 | if the closure is defined in a inner class |
| 6 | this in the closure will return the inner class, not the top-level one |
| 7 | in case of nested closures, like here cl being defined inside the scope of nestedClosures |
| 8 | then this corresponds to the closest outer class, not the enclosing closure! |
It is of course possible to call methods from the enclosing class this way:
class Person {
String name
int age
String toString() { "$name is $age years old" }
String dump() {
def cl = {
String msg = this.toString() (1)
println msg
msg
}
cl()
}
}
def p = new Person(name:'Janice', age:74)
assert p.dump() == 'Janice is 74 years old'
| 1 | the closure calls toString on this , which will actually call the toString method on the enclosing object,
that is to say the Person instance |
3.2.2. Owner of a closure
The owner of a closure is very similar to the definition of this in a closure with a subtle difference: it will return the direct enclosing object, be it a closure or a class:
class Enclosing {
void run() {
def whatIsOwnerMethod = { getOwner() } (1)
assert whatIsOwnerMethod() == this (2)
def whatIsOwner = { owner } (3)
assert whatIsOwner() == this (4)
}
}
class EnclosedInInnerClass {
class Inner {
Closure cl = { owner } (5)
}
void run() {
def inner = new Inner()
assert inner.cl() == inner (6)
}
}
class NestedClosures {
void run() {
def nestedClosures = {
def cl = { owner } (7)
cl()
}
assert nestedClosures() == nestedClosures (8)
}
}
| 1 | a closure is defined inside the Enclosing class, and returns getOwner |
| 2 | calling the closure will return the instance of Enclosing where the the closure is defined |
| 3 | in general, you will just want to use the shortcut owner notation |
| 4 | and it returns exactly the same object |
| 5 | if the closure is defined in a inner class |
| 6 | owner in the closure will return the inner class, not the top-level one |
| 7 | but in case of nested closures, like here cl being defined inside the scope of nestedClosures |
| 8 | then owner corresponds to the enclosing closure, hence a different object from this ! |
3.2.3. Delegate of a closure
The delegate of a closure can be accessed by using the delegate
property or calling the getDelegate
method. It is a
powerful concept for building domain specific languages in Groovy. While closure-this and closure-owner
refer to the lexical scope of a closure, the delegate is a user defined object that a closure will use. By default, the
delegate is set to owner
:
class Enclosing {
void run() {
def cl = { getDelegate() } (1)
def cl2 = { delegate } (2)
assert cl() == cl2() (3)
assert cl() == this (4)
def enclosed = {
{ -> delegate }.call() (5)
}
assert enclosed() == enclosed (6)
}
}
| 1 | you can get the delegate of a closure calling the getDelegate method |
| 2 | or using the delegate property |
| 3 | both return the same object |
| 4 | which is the enclosing class or closure |
| 5 | in particular in case of nested closures |
| 6 | delegate will correspond to the owner |
The delegate of a closure can be changed to any object. Let’s illustrate this by creating two classes which are not
subclasses of each other but both define a property called name
:
class Person {
String name
}
class Thing {
String name
}
def p = new Person(name: 'Norman')
def t = new Thing(name: 'Teapot')
Then let’s define a closure which fetches the name
property on the delegate:
def upperCasedName = { delegate.name.toUpperCase() }
Then by changing the delegate of the closure, you can see that the target object will change:
upperCasedName.delegate = p
assert upperCasedName() == 'NORMAN'
upperCasedName.delegate = t
assert upperCasedName() == 'TEAPOT'
At this point, the behavior is not different from having a `variable defined in the lexical scope of the closure:
def target = p
def upperCasedNameUsingVar = { target.name.toUpperCase() }
assert upperCasedNameUsingVar() == 'NORMAN'
However there is are major differences:
-
in the last example, target is a local variable referenced from within the closure
-
the delegate can be used transparently, that is to say without prefixing method calls with
delegate.
as explained in the next paragraph.
3.2.4. Delegation strategy
Whenever, in a closure, a property is accessed without explicitly setting a receiver object, then a delegation strategy is involved:
class Person {
String name
}
def p = new Person(name:'Igor')
def cl = { name.toUpperCase() } (1)
cl.delegate = p (2)
assert cl() == 'IGOR' (3)
| 1 | name is not referencing a variable in the lexical scope of the closure |
| 2 | we can change the delegate of the closure to be an instance of Person |
| 3 | and the method call will succeed |
The reason this code works is that the name
property will be resolved transparently on the delegate
object! This is
a very powerful way to resolve properties or method calls inside closures. There’s no need to set an explicit delegate.
receiver: the call will be made because the default delegation strategy of the closure makes it so. A closure actually
defines multiple resolution strategies that you can choose:
-
Closure.OWNER_FIRST
is the default strategy. If a property/method exists on the owner, then it will be called on the owner. If not, then the delegate is used. -
Closure.DELEGATE_FIRST
reverses the logic: the delegate is used first, then the owner -
Closure.OWNER_ONLY
will only resolve the property/method lookup on the owner: the delegate will be ignored. -
Closure.DELEGATE_ONLY
will only resolve the property/method lookup on the delegate: the owner will be ignored. -
Closure.TO_SELF
can be used by developers who need advanced meta-programming techniques and wish to implement a custom resolution strategy: the resolution will not be made on the owner or the delegate but only on the closure class itself. It makes only sense to use this if you implement your own subclass ofClosure
.
Let’s illustrate the default "owner first" strategy with this code:
class Person {
String name
def pretty = { "My name is $name" } (1)
String toString() {
pretty()
}
}
class Thing {
String name (2)
}
def p = new Person(name: 'Sarah')
def t = new Thing(name: 'Teapot')
assert p.toString() == 'My name is Sarah' (3)
p.pretty.delegate = t (4)
assert p.toString() == 'My name is Sarah' (5)
| 1 | for the illustration, we define a closure member which references "name" |
| 2 | both the Person and the Thing class define a name property |
| 3 | Using the default strategy, the name property is resolved on the owner first |
| 4 | so if we change the delegate to t which is an instance of Thing |
| 5 | there is no change in the result: name is first resolved on the owner of the closure |
However, it is possible to change the resolution strategy of the closure:
p.pretty.resolveStrategy = Closure.DELEGATE_FIRST
assert p.toString() == 'My name is Teapot'
By changing the resolveStrategy
, we are modifying the way Groovy will resolve the "implicit this" references: in this
case, name
will first be looked in the delegate, then if not found, on the owner. Since name
is defined in the
delegate, an instance of Thing
, then this value is used.
The difference between "delegate first" and "delegate only" or "owner first" and "owner only" can be illustrated if one of the delegate (resp. owner) does not have such a method or property:
class Person {
String name
int age
def fetchAge = { age }
}
class Thing {
String name
}
def p = new Person(name:'Jessica', age:42)
def t = new Thing(name:'Printer')
def cl = p.fetchAge
cl.delegate = p
assert cl() == 42
cl.delegate = t
assert cl() == 42
cl.resolveStrategy = Closure.DELEGATE_ONLY
cl.delegate = p
assert cl() == 42
cl.delegate = t
try {
cl()
assert false
} catch (MissingPropertyException ex) {
// "age" is not defined on the delegate
}
In this example, we define two classes which both have a name
property but only the Person
class declares an age
.
The Person
class also declares a closure which references age
. We can change the default resolution strategy from
"owner first" to "delegate only". Since the owner of the closure is the Person
class, then we can check that if the
delegate is an instance of Person
, calling the closure is successful, but if we call it with a delegate being an
instance of Thing
, it fails with a groovy.lang.MissingPropertyException
. Despite the closure being defined inside
the Person
class, the owner is not used.
| A comprehensive explanation about how to use this feature to develop DSLs can be found in a dedicated section of the manual. |
4. Closures in GStrings
Take the following code:
def x = 1
def gs = "x = ${x}"
assert gs == 'x = 1'
The code behaves as you would expect, but what happens if you add:
x = 2
assert gs == 'x = 2'
You will see that the assert fails! There are two reasons for this:
-
a GString only evaluates lazily the
toString
representation of values -
the syntax
${x}
in a GString does not represent a closure but an expression to$x
, evaluated when the GString is created.
In our example, the GString
is created with an expression referencing x
. When the GString
is created, the value
of x
is 1, so the GString
is created with a value of 1. When the assert is triggered, the GString
is evaluated
and 1 is converted to a String
using toString
. When we change x
to 2, we did change the value of x
, but it is
a different object, and the GString
still references the old one.
A GString will only change its toString representation if the values it references are mutating. If the references
change, nothing will happen.
|
If you need a real closure in a GString and for example enforce lazy evaluation of variables, you need to use the
alternate syntax ${→ x}
like in the fixed example:
def x = 1
def gs = "x = ${-> x}"
assert gs == 'x = 1'
x = 2
assert gs == 'x = 2'
And let’s illustrate how it differs from mutation with this code:
class Person {
String name
String toString() { name } (1)
}
def sam = new Person(name:'Sam') (2)
def lucy = new Person(name:'Lucy') (3)
def p = sam (4)
def gs = "Name: ${p}" (5)
assert gs == 'Name: Sam' (6)
p = lucy (7)
assert gs == 'Name: Sam' (8)
sam.name = 'Lucy' (9)
assert gs == 'Name: Lucy' (10)
| 1 | the Person class has a toString method returning the name property |
| 2 | we create a first Person named Sam |
| 3 | we create another Person named Lucy |
| 4 | the p variable is set to Sam |
| 5 | and a closure is created, referencing the value of p , that is to say Sam |
| 6 | so when we evaluate the string, it returns Sam |
| 7 | if we change p to Lucy |
| 8 | the string still evaluates to Sam because it was the value of p when the GString was created |
| 9 | so if we mutate Sam to change his name to Lucy |
| 10 | this time the GString is correctly mutated |
So if you don’t want to rely on mutating objects or wrapping objects, you must use closures in GString
by explicitly
declaring an empty argument list:
class Person {
String name
String toString() { name }
}
def sam = new Person(name:'Sam')
def lucy = new Person(name:'Lucy')
def p = sam
// Create a GString with lazy evaluation of "p"
def gs = "Name: ${-> p}"
assert gs == 'Name: Sam'
p = lucy
assert gs == 'Name: Lucy'
5. Closure coercion
Closures can be converted into interfaces or single-abstract method types. Please refer to this section of the manual for a complete description.
6. Functional programming
Closures, like lambda expressions in Java 8 are at the core of the functional programming paradigm in Groovy. Some functional programming
operations on functions are available directly on the Closure
class, like illustrated in this section.
6.1. Currying
In Groovy, currying refers to the concept of partial application. It does not correspond to the real concept of currying in functional programming because of the different scoping rules that Groovy applies on closures. Currying in Groovy will let you set the value of one parameter of a closure, and it will return a new closure accepting one less argument.
6.1.1. Left currying
Left currying is the fact of setting the left-most parameter of a closure, like in this example:
def nCopies = { int n, String str -> str*n } (1)
def twice = nCopies.curry(2) (2)
assert twice('bla') == 'blabla' (3)
assert twice('bla') == nCopies(2, 'bla') (4)
| 1 | the nCopies closure defines two parameters |
| 2 | curry will set the first parameter to 2 , creating a new closure (function) which accepts a single String |
| 3 | so the new function call be called with only a String |
| 4 | and it is equivalent to calling nCopies with two parameters |
6.1.2. Right currying
Similarily to left currying, it is possible to set the right-most parameter of a closure:
def nCopies = { int n, String str -> str*n } (1)
def blah = nCopies.rcurry('bla') (2)
assert blah(2) == 'blabla' (3)
assert blah(2) == nCopies(2, 'bla') (4)
| 1 | the nCopies closure defines two parameters |
| 2 | rcurry will set the last parameter to bla , creating a new closure (function) which accepts a single int |
| 3 | so the new function call be called with only an int |
| 4 | and it is equivalent to calling nCopies with two parameters |
6.1.3. Index based currying
In case a closure accepts more than 2 parameters, it is possible to set an arbitrary parameter using ncurry
:
def volume = { double l, double w, double h -> l*w*h } (1)
def fixedWidthVolume = volume.ncurry(1, 2d) (2)
assert volume(3d, 2d, 4d) == fixedWidthVolume(3d, 4d) (3)
def fixedWidthAndHeight = volume.ncurry(1, 2d, 4d) (4)
assert volume(3d, 2d, 4d) == fixedWidthAndHeight(3d) (5)
| 1 | the volume function defines 3 parameters |
| 2 | ncurry will set the second parameter (index = 1) to 2d , creating a new volume function which accepts length and height |
| 3 | that function is equivalent to calling volume omitting the width |
| 4 | it is also possible to set multiple parameters, starting from the specified index |
| 5 | the resulting function accepts as many parameters as the initial one minus the number of parameters set by ncurry |
6.2. Memoization
Memoization allows the result of the call of a closure to be cached. It is interesting if the computation done by a function (closure) is slow, but you know that this function is going to be called often with the same arguments. A typical example is the Fibonacci suite. A naive implementation may look like this:
def fib
fib = { long n -> n<2?n:fib(n-1)+fib(n-2) }
assert fib(15) == 610 // slow!
It is a naive implementation because 'fib' is often called recursively with the same arguments, leading to an exponential algorithm:
-
computing
fib(15)
requires the result offib(14)
andfib(13)
-
computing
fib(14)
requires the result offib(13)
andfib(12)
Since calls are recursive, you can already see that we will compute the same values again and again, although they could
be cached. This naive implementation can be "fixed" by caching the result of calls using memoize
:
fib = { long n -> n<2?n:fib(n-1)+fib(n-2) }.memoize()
assert fib(25) == 75025 // fast!
| The cache works using the actual values of the arguments. This means that you should be very careful if you use memoization with something else than primitive or boxed primitive types. |
The behavior of the cache can be tweaked using alternate methods:
-
memoizeAtMost
will generate a new closure which caches at most n values -
memoizeAtLeast
will generate a new closure which caches at least n values -
memoizeBetween
will generate a new closure which caches at least n values and at most n values
The cache used in all memoize variants is a LRU cache.
6.3. Composition
Closure composition corresponds to the concept of function composition, that is to say creating a new function by composing two or more functions (chaining calls), as illustrated in this example:
def plus2 = { it + 2 }
def times3 = { it * 3 }
def times3plus2 = plus2 << times3
assert times3plus2(3) == 11
assert times3plus2(4) == plus2(times3(4))
def plus2times3 = times3 << plus2
assert plus2times3(3) == 15
assert plus2times3(5) == times3(plus2(5))
// reverse composition
assert times3plus2(3) == (times3 >> plus2)(3)
6.4. Trampoline
Recursive algorithms are often restricted by a physical limit: the maximum stack height. For example, if you call a method
that recursively calls itself too deep, you will eventually receive a StackOverflowException
.
An approach that helps in those situations is by using Closure
and its trampoline capability.
Closures are wrapped in a TrampolineClosure
. Upon calling, a trampolined Closure
will call the original Closure
waiting
for its result. If the outcome of the call is another instance of a TrampolineClosure
, created perhaps as a result
to a call to the trampoline()
method, the Closure
will again be invoked. This repetitive invocation of returned
trampolined Closures instances will continue until a value other than a trampolined Closure
is returned. That value
will become the final result of the trampoline. That way, calls are made serially, rather than filling the stack.
Here’s an example of the use of trampoline()
to implement the factorial function:
def factorial
factorial = { int n, def accu = 1G ->
if (n < 2) return accu
factorial.trampoline(n - 1, n * accu)
}
factorial = factorial.trampoline()
assert factorial(1) == 1
assert factorial(3) == 1 * 2 * 3
assert factorial(1000) // == 402387260.. plus another 2560 digits
6.5. Method pointers
It is often practical to be able to use a regular method as a closure. For example, you might want to use the currying abilities of a closure, but those are not available to normal methods. In Groovy, you can obtain a closure from any method with the method pointer operator.


VSL // Baseball And Manifest Destiny
* Obsessive fans like Batting Stance Guy
today’s Very Short List:
culture 6 May 2015
Tabitha Soren
Subscribe
* Star Walk
* At the Convent of Santa Maria delle Grazie
http://link.nyobserver.com/516ca68465217dc6e1b9a3a62kjju.23kf/TvnrKi0WTdwTHwxwC1483
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a62kjju.23kf/UHyHCJsf7NZSKXrPCc3a0
Subscribe
Forward
My Account
Unsubscribe
culture 29 Apr 2015
Singer-songwriter TORRES shares a few of her inspirations.
culture 27 Apr 2015
Trivia host Tony Hightower lays some good ol’ fact-based entertainment on us all.
lit 22 Apr 2015
VSL editor Alexa Jaccarino reads the Brothers Grimm.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2015
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


Probolinggo's volcano
The day started at 2 A.M which gave us just enough time to get to “King Kong view
piont” in time for the sunrise. Now we heard that watching the sunrise over mount
bromo was an incredible experience, but a cold one. To be completely honest we told
ourself mehhh we are Canadien... a cold experience in Indonesia must be a joke to
us. But that was without taking into account a few element. First we didn’t have our
coats, only hoodies. Second we went to a waterfall the day before and gabby’s
thirsty shoes were still wet. Also, we had a pretty long ride of bike to do (windy…)
and last but not least, it’s been awhile since our body met something remotely
resembling cold. With all of those element into account, I was cold and as always,
Alexis was fine. That man is never cold, apparently it comes with growing up in
Beauce… Anyway, doing motorbike in the middle of the night was pretty cool but it
has a downside, you kind of see nothing…
Once you get close to the volcano, you get arrested at a city gate where you will be
charge a “city fee” which is a made up thing for the town to charge tourist for the
volcano. Don’t get fooled, to visit the volcano itself you have to pay again. The
first “tax” is 20 000 rupiah per person which is around 2$. Once you have paid, you
make your way up top the view point. Don’t worry you won’t get lost, not only does
the locals (who are all awake in the middle of the night) are directing you, but
there’s so many tourist truck passing by that you just need to follow them. Since I
am still not the greatest copilot in history, we didn’t end up in King kong’s
viewpoint but the place was less crowded. We just stop when we judged that we were
high enough to see the volcano and there was not too many people. While you wait for
the sun to rise, there’s an endless amount of vendor that will try to sell you,
hats, coffee, breakfast and gloves.
Pro tips: if you don’t have gloves (like any
normal person traveling in Indonesia) use socks to cover your hands not pretty but
it works.
After 30 minutes, the sun was there I a got to say it was worth it. I am not an
early bird (more like a noon bird), so I rarely see sunrise but I was glad I made
the effort to see it.
Once the sun was up, all the tourists went back into their
tucks and headed down to the volcano itself and so did we.
When we made our way down
we crossed a entrance looking place but we didn’t stop. To be fair it looked more
like a door than anything else and at that moment we already paid something when we
entered the village, for us that was the fee. So as we were arriving in the “sea of
sand”, yep it’s its real name, we got arrested by a guy requesting our ticket.
Let
me explain a little bit, first the guy was coming from behind us so he probably
followed us from the gate, second he didn’t spoke well in english. We proceed to
show him the ticket we got at the village entrance. He explained to us that it was
not the proper ticket for the volcano. We argued (I say we but It was Alexis) and
after a while he just said to Alexis to get back up alone and we would have to buy
only 1 ticket for both of us (340 000 ruppia). So I basically visited the volcano
for free. Now I see you reading this and thinking, they just scammed the country!
Indonesia is a poor country and needs this money to maintained their national
ressource. The thing is... according to Indonesia’s laws, nobody's supposed to be
charged when visiting a natural site. So the ticket itself was illegal… And once you
see the site, you know the money doesn’t go to keep it in shape…
After having a bit of fun in the sand, we headed to the bottom of the volcano. We
left our motorbike in the sort of parking at the beginning of the trail.
After that,
we climbed. First we got through a sandy path and made our way to the stairs, with
the horses and all of the other humans.
Once you get to the stair, you have to climb
up the stair in a line.
After
the stairs, we were on the verge of the volcano, we walked on a 5 feet large edge
around the hole of the volcano.  Both side were not really appealing to do a free fall.
After taking a impossible amount of picture we made our way back down the volcano. I
think I still have sand in my shoes from that day.
We then went back to our hotel and proceed to fall asleep in less than 30 second.


Kim Kardashian hasn't found stolen engagement ring as she poses with replica
Kim Kardashian has revealed she didn’t find her stolen engagement ring after posing with a stunning replica.
Calm down everyone.
The Keeping Up With The Kardashians star had the ring given to her by Kanye West, who she married in 2014, stolen during a 2016 trip to Paris.
However, everyone was left baffled when she appeared to pose for an ad campaign while wearing the very ring everyone thought was missing.
As it turns out, there’s a pretty simple explanation.
‘I borrowed all jewellery from Lorraine Schwartz,’ she told Entertainment Tonight. ‘It was nice to borrow it all and it was nice to give it back to her.’
The 39-year-old added: ‘That was a really fun shoot and because it was diamonds, I thought this was the perfect way to bring it back and wear them again.’
Advertisement Advertisement
Kim also explained she sometimes borrows fake versions of the ring from Lorraine, who made the original, saying: ‘There is a replica around. A little fake that I’ll borrow from her sometimes that she made. A really nice one. It looks really nice.’
The horrific Paris robbery saw Kim being held at gunpoint, with $10 million (£7.7 million) of her jewelry being stolen.
She recently recalled the ordeal during an episode of E!
‘That 10 minutes really changed my whole life,’ she said. ‘Right as I was about to fall asleep, I heard guys running up the stairs. They wanted my ring and my jewellery, so I didn’t fight back.
‘I just gave them everything and they tied me up.

Got a showbiz story?
If you've got a story, video or pictures get in touch with the Metro.co.uk Entertainment team by emailing us<EMAIL_ADDRESS>calling 020 3615 2145 or by visiting our Submit Stuff page - we'd love to hear from you.


The TabSheet component has seven predefined styles:
centered-tabs
compact-tabbar
equal-width-tabs
framed
icons-on-top
only-selected-closeable
padded-tabbar
You can set these styles to the TabSheet using the stylename attribute either in the XML descriptor or
in the screen controller using constants from HaloTheme class.


LevelUp is a personal assistant app that keeps track of tasks/goals/habits and helps you stay on top of them through gamification - essentially turning your life into an RPG where you build stats like strength and intelligence through accomplishing real life tasks like exercise and reading.
HTML, CSS, Javascript, Handlebars, Clean Design, Gender Neutral Color Palette
User registers for an account. User logins and adds either routines or task or both. The user is assigned basic starting stats is several different categories such as strength, vitality, intelligence and charisma
When the user completes task they receive experience points based on the type of categories selected and receives experience based on various parameters selected such as if the task in catagorized as either trivial or difficult.
A routine is a parameter that is an ongoing goal that you set. These will usually consist of habits that you are either looking to accomplish on a scheduled basis. In addition you can set habits that you wish to discontinue. (i.e smoking)
A task is a short-term goal that has a once it's completed it is removed from your profile.
Node.js Express, MySQL, Passport.js


{% extends 'base.html' %} {% block title %}About{% endblock %} {% block content %}
Outfitless helps users organize their closet, choose outfits, and keep track of their clothes. Most notably, it keeps track of the cost per use for each piece of clothing.
Inspired by the trend towards zero waste, capsule wardrobes, and Mari Kondo of "The Life-Changing Magic of Tidying Up", Outfitless hopes that its users will learn to do more with less.
This was created by Janet Anne Panen for her final project at Hackbright Academy, an engineering school for women.
For more info on the languages, frameworks, libraries and database, check out her Github here. You can also contact her via Twitter or email (janetpanen at gmail dot com).
And in case you were wondering–yes, she was definitely inspired by Clueless.


API description
The following table displays and briefly explains the methods exposed by the Socios Rest API.
The functionality described below is implemented only for the social networks that support it and the implementation is subject to the
limitations imposed by each social network. Only information marked as "public" can be retrieved.
In searches accepting a list of social networks as a query parameter, if the field is empty, all social networks are included in the
search.
All methods accept an extra optional query parameter named "format". If set to "json", the results will be displayed in json format. The
default is xml.
- getPersons
- connectedPersons
- myConnectedPersons
- findPersonsByKeyword
- findPersonsByUsername
- findPersonsByMediaItem
- findPersonsByActivity
- getMediaItems
- getMediaItemsForUser
- getMediaItemsForPage
- findMediaItems
- findRelevantMediaItems
- getActivities
- getActivitiesForUser
- findActivities
- getComments
- getCommentsForMediaItem
- getCommentsForActivity
- postMessage
WADL
getPersons
Query parameters :
- id: the identifier of a user in a social network (required).
- sn: the social network (required).
Description :
Returns the user.
connectedPersons
Query parameters :
- id: the identifier of a user in a social network (required).
- sn: the social network (required).
Description :
Returns the user's contacts.
myConnectedPersons*
Query parameters :
- id: the identifier of a user in a social network (required).
- sn: the social network (required).
Description :
Returns the user's contacts.
* This method requires an authentication token.
findPersonsByKeyword*
Query parameters :
- keywords: list of comma separated keywords (required).
- sns: list of social networks to include in the search (optional).
Description :
Returns users based on the search keywords (AND operator).
* For some social networks, this method requires an authentication token.
findPersonsByUsername
Query parameters :
- username: the username of a user in a social network (required).
- sn: the social network (required).
Description :
Returns the user.
findPersonsByActivity
Query parameters :
- id: the identifier of an activity in a social network (required).
- sn: the social network (required).
Description :
Returns users associated with the activity. Depending on the social network, this may include just the owner or users who have commented,
liked or been tagged in the activity.
getMediaItemsForPage
Query parameters :
- id: the identifier of a page in a social network (required).
- sn: the social network (required).
Description :
Returns media items posted on the page.
getActivities
Query parameters :
- id: the identifier of an activity in a social network (required).
- sn: the social network (required).
Description :
Returns the activity.
getActivitiesForUser
Query parameters :
- id: the identifier of a user in a social network (required).
- sn: the social network (required).
Description :
Returns the activities performed by the user.
findActivities
Query parameters :
- keywords: list of comma separated keywords (optional).
- lang: language of an activity (optional).
- sns: list of social networks to include in the search (optional).
Description :
Returns activities based on the search criteria.
postMessage*
Query parameters :
- id: the identifier of a user in a social network (required).
- sn: the social network (required).
- msg: text of the message (required).
Description :
Posts a message on behalf of the user and returns the id of the new post.
* This method requires an authentication token.
The following table indicates which methods are implemented for each social network.
Methods marked with an asterisk (*) require an authentication token.


I'm a software developer from the Netherlands. I currently focus on iOS development using either Swift or Objective-C. I'm able to turn your ideas into functional iOS apps. Scroll down to read more about me and the stuff I've worked on!
This app was created for a DJ. The app allows the user to listen to DJ Censura's music and playlists. The app has an intuitive music player at the bottom of the screen. The app also allows user to mark music as their favorite.
Read More >This app was created for the visually impaired. The app allows the user to zoom into text, apply visual effects and toggle the flash in order to be able to read text. The app also supports OCR (Optical Character Recognition) which allows the user to use the camera to read text by showing boxes containing the words and reading it one by one.
Read More >This is the settings page to a magnifier app. The magnifier app itself allows the user to scan text and read it using text to speach. These settings allow the user to change things like the voice of text to speech, the volume and the language.
Read More >This is a simple about page created for an existing app. The about page links to the company's website and allows the user to send the company an email.
Read More >This app allows the user to record their voices and apply a fun effect to it. Some of the effects include: chipmunk, ogre and telephone. The user is then able to save their recordings and listen to them at a later date.
Read More >This is an iOS library written in Swift that allows users to take a simple survey. The library presents a screen that allows the user to leave a rating and an explanation. The survey is available in a dark and light theme.
Read More >These are some of the skills that I've acquired while working as a software developer. I have experience with the latest versions of Xcode (auto layout, debugging etc.), Swift and Objective-C. I have used several first party and third party libraries within iOS (using dependency managers CocoaPods and Carthage). I also have some web development experience using HTML, CSS, JavaScript and PHP. On both the web and app side I've worked with sql. I've worked with several frameworks within php such as Symfony and Laravel. Lastly I also have experience with C++ (using the Qt framework) and Java (with Android).
"Fady was excellent! He demonstrated straight away that he understood the brief and what was required to achieve the objective. He worked quickly and efficiently and was able communicate what he was doing every step of the way..."
Read More >"I needed work completed very quickly in order to submit an app to the app store and Fady delivery the work within a few hours. A very nice implementation and he delivered quality code."
Read More >"Fady was honest, quick and skillful. He didn't accept the job until he fully understood what was required of him. He's very polite and easy to work with. Oh, and the job was completed perfectly."
Read More >"Fady provided us excellent service during his time upgrading our iOS app. His work was prompt and exactly as we wanted. He communicated at all times to ensure we were getting what we need. I have no hesitation in recommending Fady and we will certainly look to work with him again."
Read More >"Fady did an excellent job and was really quick. Highly recommend."
Read More >"Great work from Fady again. Very responsive to my requests, adheres to deadlines and goes above and beyond to make sure I receive what I'm asking for. Highly recommended worker."
Read More >"Great worker. Great communication. Highly recommended. Had a good time working with him on my small task."
Read More >"Fady completed the work much faster than anticipated, and everything works well. Highly recommended!"
Read More >"Fady did a great job on time. Will hire him again in future work. Thanks."
Read More >"I had a small request for a very basic prototype. Fady fulfilled my request within 24 hours. He he communication strong and very keen on the result. Pleasure working with him! Thank you."
Read More >Interested in working together or do want me to develop you an iOS app? Send me a message:


Click a candidate to see the candidate in the comparison table.
Click an issue to see it in the comparison table.
| Issues |
{{candidate.firstname}} {{candidate.lastname}} |
|---|---|
| {{category.name}} | |
| {{issue.name}} | * policy position not found at this time {{positions.data[issue.id][candidate.id]}} |


Your organization must be above the Free tier to purchase cloud access to datasets. If your organization is above the Free tier, to add cloud access for a dataset, follow these steps:
You will be redirected to the Pricing page.


failed in a row.
_logger.debug("Reading server neurovault data.")
collections = _scroll_server_results(
_NEUROVAULT_COLLECTIONS_URL, query_terms=self.collection_terms_,
local_filter=self.collection_filter_,
failed in a row.
_print_if("Reading server neurovault data.",
_DEBUG, self.verbose)
collections = _scroll_server_results(
_NEUROVAULT_COLLECTIONS_URL, query_terms=self.collection_terms_,
local_filter=self.collection_filter_,


I am a very dynamic, result-oriented Program Manager at DevCareer. I have over 2 years of experience in this field. Currently, I placed myself on a learning Spree on how to create a viable system that would aid the training of Nigerians and Africans to step into STEM and the tech industry, upskilling to reduce the rate of unemployment.
In my spare time, I enjoy Listening to Music, Watching Soccer and studying through various activities on Product School.
In addition, I have quite an experience as a Frontend developer and also tools regarding it .


Generates a cmake build, and runs the configured build tool.
This task is used to integrate cmake based projects with a larger ant build.
| Attribute | Description | Required |
| srcdir | Location of the source directory, where the top level
CMakeLists.txt file is found. |
No, defaults to the current directory. |
| bindir | Location to the binary directory, where the cmake output is written, this can be the same as the srcdir. | No, defaults to the current directory |
| buildtype | The type of the build, (usually one of Debug, Release, RelWithDebInfo or MinSizeRelComma). See notes on build type. | No |
| cleanfirst | Call the clean target first when building. | No, defaults to false |
| cmakeonly | When set to true, runs cmake but does not execute the build. | No, defaults to false |
| target | The target of the project to build. | No, defaults to the generated all target |
generator
Specify the cmake generator to use for each platform. Child of
cmake
.
| Attribute | Description | Required |
| bindir | Location to the binary directory, where the cmake output is written, this can be the same as the srcdir. | No, defaults to the top level bindir |
| buildtype | The type of the build, (usually one of Debug, Release, RelWithDebInfo or MinSizeRelComma). See notes on build type. | No, defaults to the top level buildtype |
| cleanfirst | Call the clean target first when building. | No, defaults to the top level cleanfirst |
| name | The name of the generator to use, this must be a valid cmake generator. | No, defaults cmake platforms default |
| platform | The name of the platform this generator is valid for.
This is tested against the java property os.name . |
No, defaults to support all platforms |
| target | The target of the project to build. | No, defaults to the generated all target |
variable
Set cmake variables. This can be a child of the cmake
then
it is global, or a child of the generator
then it is specific
to that generator.
| Attribute | Description | Required |
| name | The name of the variable to set. | Yes |
| type | The type of the variable. Possible values STRING, FILEPATH, PATH, BOOL. | No, defaults to STRING |
| value | The value to set the variable. | Yes |
| target | The target of the project to build. | No, defaults to the top level target |
readvar
Read the value of a cmake cache variable to an ant varaiable. Child of
cmake
| Attribute | Description | Required |
| name | The name of the variable to read. | Yes |
| property | The name of the ant property to set. | Yes |
<taskdef name="cmake" classname="org.iainhull.ant.CmakeBuilder"/> <cmake/>
Run cmake in the current directory, using it both the source directory and binary directory, then executes the resulting make files or projects.
<taskdef name="cmake" classname="org.iainhull.ant.CmakeBuilder"/> <cmake srcdir="${src}" bindir="${binary}" buildtype="${buildtype}" />
Runs cmake in the ${src} directory and write the output to the ${binary} directory, then executes the resulting make files or projects.
<taskdef name="cmake" classname="org.iainhull.ant.CmakeBuilder"/> <cmake srcdir="${src}" bindir="${binary}" buildtype="${buildtype}" > <generator name="Visual Studio 8 2005" platform="windows" /> <generator name="Unix Makefiles" /> </cmake>
Runs cmake in the ${src} directory and write the output to the ${binary} directory, then executes the resulting make files or projects. On the " windows" platform the "Visual Studio 8 2005" on all other plaforms the default generator is used.
The buildtype attribute of the cmake and generator tags is used to set the cmake variable CMAKE_BUILD_TYPE. This is usually one of Debug, Release, RelWithDebInfo or MinSizeRelComma see the Cmake documentation for the CMAKE_BUILD_TYPE and CMAKE_CONFIGURATION_TYPES for more information.


T
- The type of parsed response this request expects.public class Request<T> extends java.lang.Object implements java.lang.Comparable<Request<T>>, java.lang.Cloneable
setNetworkRequest(NetworkRequest)
to provide the http entity to be sent.
For complex requests you can use MultipartBuilder
and
FormEncodingBuilder
to generate the setNetworkRequest(NetworkRequest)
Converter
or Converter.Factory
to
transform data to NetworkRequest
and Response
from NetworkResponse
.
If more complex logic is required and request is extended then
one should implement:
getBody()
in case of Post or Put
getHeadersMap()
in case of specific headers
getBodyContentType()
in case of specific content type
Note that if != null
it will be added to the headers of the request
| Modifier and Type | Class and Description |
|---|---|
static interface |
Request.Method
Supported request methods.
|
static class |
Request.Priority
Priority values.
|
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
DEFAULT_PARAMS_ENCODING
Default encoding for POST or PUT parameters.
|
static java.lang.String |
EVENT_ADD_DISCARD_CANCELED
when the Request is cancelled event before even added to the
RequestQueue |
static java.lang.String |
EVENT_ADD_TO_QUEUE
when the Request was just added to the
RequestQueue |
static java.lang.String |
EVENT_CACHE_DISCARD_CANCELED
when the Request appears to be cancelled just after taken by the
CacheDispatcher for processing |
static java.lang.String |
EVENT_CACHE_HIT
when Cache record is found, no NetworkRequest will be needed
|
static java.lang.String |
EVENT_CACHE_HIT_EXPIRED
when Cache is expired
|
static java.lang.String |
EVENT_CACHE_HIT_EXPIRED_BUT_WILL_DELIVER_IT
when Cache is expired but we will deliver it as a response anyway ignoring http rules
|
static java.lang.String |
EVENT_CACHE_HIT_PARSED
when cache record is parsed to
Response |
static java.lang.String |
EVENT_CACHE_HIT_REFRESH_NEEDED
when Cache record is found, but another NetworkRequest will be needed
|
static java.lang.String |
EVENT_CACHE_MISS
when
CacheDispatcher cannot find Request cashe in Cache |
static java.lang.String |
EVENT_CACHE_QUEUE_TAKE
when request is being taken from the cache queue by the
CacheDispatcher |
static java.lang.String |
EVENT_CANCELED_AT_DELIVERY
when response is prepared for delivery but is the request is already cancelled so that
response will be ignored and Request#onResponse or Request#onError will not be called.
|
static java.lang.String |
EVENT_DELIVER_ERROR
just before the error is delivered i.e.
|
static java.lang.String |
EVENT_DELIVER_RESPONSE
just before the response is delivered i.e.
|
static java.lang.String |
EVENT_DONE
when request is completely finished and no more events will be received
|
static java.lang.String |
EVENT_INTERMEDIATE_RESPONSE
when the response is delivered but the request hasn't finished yet and more responses could
arrive
|
static java.lang.String |
EVENT_NETWORK_CACHE_WRITTEN
when the Response is being cached an saved in your registered
Cache |
static java.lang.String |
EVENT_NETWORK_DISCARD_CANCELED
When request is found to be Cancelled just before being processed by the
NetworkDispatcher |
static java.lang.String |
EVENT_NETWORK_HTTP_COMPLETE
when a Response is returned from
Network and is ging to be processed by the
NetworkDispatcher |
static java.lang.String |
EVENT_NETWORK_PARSE_COMPLETE
when parsing of the
NetworkResponse completed in the
NetworkDispatcher using Request's
parseNetworkResponse(NetworkResponse) method. |
static java.lang.String |
EVENT_NETWORK_QUEUE_TAKE
when request is being taken from the network queue by the
NetworkDispatcher |
static java.lang.String |
EVENT_NETWORK_RETRY
when request was not successful and after validation from the
RetryPolicy
is being resend to the Stack |
static java.lang.String |
EVENT_NETWORK_RETRY_FAILED
when request was not successful and validation from the
RetryPolicy does not pass |
static java.lang.String |
EVENT_NETWORK_STACK_AUTH_ERROR
when we have HTTP_UNAUTHORIZED = 401; from the network stack
|
static java.lang.String |
EVENT_NETWORK_STACK_AUTH_ERROR_RESEND
when we have had 401 or 407 and we have proper Authenticator available we resend the request
|
static java.lang.String |
EVENT_NETWORK_STACK_AUTH_PROXY_ERROR
when we have HTTP_PROXY_AUTH = 407; from the network stack
|
static java.lang.String |
EVENT_NETWORK_STACK_COMPLETE
when Network Stack returns Network Response
|
static java.lang.String |
EVENT_NETWORK_STACK_REDIRECT_COMPLETE
when a new call(made because of a redirect) completes
|
static java.lang.String |
EVENT_NETWORK_STACK_REDIRECT_SEND
when a new call is made because of a redirect
|
static java.lang.String |
EVENT_NETWORK_STACK_SEND
when request is being send to the network stack
|
static java.lang.String |
EVENT_NETWORK_TRANSFORM_COMPLETE
when Original NetworkResponse is transformed in case of a Transformer available
|
static java.lang.String |
EVENT_NOT_MODIFIED
when cache response is delivered and the network response is "not-modified" i.e.
|
static java.lang.String |
EVENT_POST_ERROR
when error occurs and response is being prepared for delivery
|
static java.lang.String |
EVENT_POST_RESPONSE
when network call is OK and response is being prepared for delivery
|
static java.lang.String |
EVENT_PRE_ADD_TO_QUEUE
this is the very first event before the request is added to the
RequestQueue |
protected java.lang.Integer |
sequence
Sequence number of this request, used to enforce FIFO ordering.
|
| Constructor and Description |
|---|
Request(java.lang.String method,
HttpUrl url) |
Request(java.lang.String method,
HttpUrl url,
java.lang.Class<T> responseType) |
Request(java.lang.String method,
HttpUrl url,
Converter<NetworkResponse,T> converterFromResponse)
Creates a new request with the given method (one of the values from
Request.Method ),
URL, and error listener. |
Request(java.lang.String method,
java.lang.String url) |
Request(java.lang.String method,
java.lang.String url,
java.lang.Class<T> responseType) |
Request(java.lang.String method,
java.lang.String url,
Converter<NetworkResponse,T> converterFromResponse) |
| Modifier and Type | Method and Description |
|---|---|
<R extends Request<T>> |
addErrorListener(RequestListener.ErrorListener errorListener) |
<R extends Request<T>> |
addMarker(java.lang.String tag,
java.lang.Object... args)
Adds an event to this request's event log; for debugging.
|
<R extends Request<T>> |
addMarkerListener(RequestListener.MarkerListener markerListener) |
<R extends Request<T>> |
addResponseListener(RequestListener.ResponseListener<T> responseListener) |
void |
cancel()
Mark this request as canceled.
|
Request<T> |
clone() |
int |
compareTo(Request<T> other)
Our comparator sorts from high to low priority, and secondarily by
sequence number to provide FIFO ordering.
|
void |
deliverError(JusError error)
Delivers error message to the ErrorListener that the Request was
initialized with.
|
protected void |
deliverResponse(T response)
Subclasses must implement this to perform delivery of the parsed
response to their listeners.
|
<R extends Request<T>> |
enqueue() |
byte[] |
getBody()
Returns the raw POST or PUT body to be sent.
|
java.lang.String |
getBodyContentType()
Returns the content type of the POST or PUT body.
|
Cache.Entry |
getCacheEntry()
Returns the annotated cache entry, or null if there isn't one.
|
java.lang.String |
getCacheKey()
Returns the cache key for this request.
|
ConnectivityManager |
getConnectivityManager() |
Converter<NetworkResponse,T> |
getConverterFromResponse() |
RequestFuture<T> |
getFuture() |
Headers |
getHeaders() |
java.util.Map<java.lang.String,java.lang.String> |
getHeadersMap()
Returns a list of extra HTTP headers to go along with this request
|
java.lang.String |
getMethod()
Return the method for this request.
|
NetworkRequest |
getNetworkRequest() |
NoConnectionPolicy |
getNoConnectionPolicy() |
Request.Priority |
getPriority()
Returns the
Request.Priority of this request; Request.Priority.NORMAL by default. |
Authenticator |
getProxyAuthenticator() |
Response<T> |
getRawResponse() |
RedirectPolicy |
getRedirectPolicy()
Returns the redirect policy that should be used for this request.
|
RequestQueue |
getRequestQueue() |
RetryPolicy |
getRetryPolicy()
Returns the retry policy that should be used for this request.
|
int |
getSequence()
Returns the sequence number of this request.
|
Authenticator |
getServerAuthenticator() |
java.lang.Object |
getTag()
Returns this request's tag.
|
int |
getTrafficStatsTag() |
HttpUrl |
getUrl()
Returns the URL of this request.
|
java.lang.String |
getUrlString()
Returns the URL String of this request.
|
boolean |
hasHadResponseDelivered()
Returns true if this request has had a response delivered for it.
|
boolean |
isCanceled()
Returns true if this request has been canceled.
|
boolean |
isLogSlowRequests() |
protected JusError |
parseNetworkError(JusError jusError)
Subclasses can override this method to parse 'networkError' and return a more specific error.
|
protected Response<T> |
parseNetworkResponse(NetworkResponse response)
Subclasses can implement this to parse the raw network response
and return an appropriate response type.
|
<R extends Request<T>> |
prepRequestQueue(RequestQueue requestQueue) |
<R extends Request<T>> |
removeErrorListener(RequestListener.ErrorListener errorListener) |
<R extends Request<T>> |
removeMarkerListener(RequestListener.MarkerListener markerListener) |
Request<T> |
removeResponseListener(RequestListener.ResponseListener<T> responseListener) |
<R extends Request<T>> |
setCacheEntry(Cache.Entry entry)
Annotates this request with an entry retrieved for it from cache.
|
<R extends Request<T>> |
setConnectivityManager(ConnectivityManager connectivityManager) |
<R extends Request<T>> |
setLogSlowRequests(boolean logSlowRequests) |
Request<T> |
setNetworkRequest(NetworkRequest networkRequest) |
<R extends Request<T>> |
setNoConnectionPolicy(NoConnectionPolicy noConnectionPolicy) |
<R extends Request<T>> |
setPriority(Request.Priority priority)
Set
Request.Priority of this request; Request.Priority.NORMAL by default. |
<R extends Request<T>> |
setProxyAuthenticator(Authenticator proxyAuthenticator) |
<R extends Request<T>> |
setRedirectPolicy(RedirectPolicy redirectPolicy)
Sets the redirect policy for this request.
|
<R> Request<T> |
setRequestData(R requestData,
Converter<R,NetworkRequest> converterToRequest)
Set data to send which will be converted to
NetworkRequest
This will overwrite all previous http body and headers defined |
<R extends Request<T>> |
setRetryPolicy(RetryPolicy retryPolicy)
Sets the retry policy for this request.
|
protected <R extends Request<T>> |
setSequence(int sequence)
Sets the sequence number of this request.
|
<R extends Request<T>> |
setServerAuthenticator(Authenticator serverAuthenticator) |
<R extends Request<T>> |
setShouldCache(boolean shouldCache)
Set whether or not responses to this request should be cached.
|
<R extends Request<T>> |
setTag(java.lang.Object tag)
Set a tag on this request.
|
boolean |
shouldCache()
Returns true if responses to this request should be cached.
|
java.lang.String |
toString() |
public static final java.lang.String EVENT_CACHE_HIT_EXPIRED
public static final java.lang.String EVENT_POST_ERROR
the params attached are:
public static final java.lang.String EVENT_POST_RESPONSE
the params attached are:
public static final java.lang.String EVENT_INTERMEDIATE_RESPONSE
public static final java.lang.String EVENT_CANCELED_AT_DELIVERY
Although no response callback will be sent the Request response
from getRawResponse()
should available if needed for logging purposes for
example.
public static final java.lang.String EVENT_DONE
public static final java.lang.String EVENT_NETWORK_QUEUE_TAKE
NetworkDispatcher
public static final java.lang.String EVENT_NETWORK_STACK_SEND
the params attached are:
NetworkRequest
Headers
that will be passed to the HttpStackpublic static final java.lang.String EVENT_NETWORK_STACK_AUTH_ERROR
the params attached are:
public static final java.lang.String EVENT_NETWORK_STACK_AUTH_PROXY_ERROR
the params attached are:
public static final java.lang.String EVENT_NETWORK_STACK_AUTH_ERROR_RESEND
the params attached are:
public static final java.lang.String EVENT_NETWORK_STACK_REDIRECT_SEND
the params attached are:
Request
that will be sent to the Stackpublic static final java.lang.String EVENT_NETWORK_STACK_REDIRECT_COMPLETE
the params attached are:
public static final java.lang.String EVENT_NETWORK_STACK_COMPLETE
the params attached are:
NetworkResponse
public static final java.lang.String EVENT_NETWORK_TRANSFORM_COMPLETE
the params attached are:
NetworkResponse
public static final java.lang.String EVENT_NETWORK_DISCARD_CANCELED
NetworkDispatcher
public static final java.lang.String EVENT_NETWORK_RETRY
RetryPolicy
is being resend to the Stack
the params attached are:
String
of Format "%s-retry [conn-timeout=%s] [read-timeout=%s]"public static final java.lang.String EVENT_NETWORK_RETRY_FAILED
RetryPolicy
does not pass
the params attached are:
String
of Format "%s-timeout-giveup [conn-timeout=%s] [read-timeout=%s]"public static final java.lang.String EVENT_NETWORK_HTTP_COMPLETE
Network
and is ging to be processed by the
NetworkDispatcher
the params attached are:
NetworkResponse
of Format "%s-timeout-giveup [conn-timeout=%s] [read-timeout=%s]"public static final java.lang.String EVENT_NOT_MODIFIED
public static final java.lang.String EVENT_NETWORK_PARSE_COMPLETE
NetworkResponse
completed in the
NetworkDispatcher
using Request's
parseNetworkResponse(NetworkResponse)
method.public static final java.lang.String EVENT_NETWORK_CACHE_WRITTEN
Cache
public static final java.lang.String EVENT_PRE_ADD_TO_QUEUE
RequestQueue
public static final java.lang.String EVENT_ADD_TO_QUEUE
RequestQueue
public static final java.lang.String EVENT_CACHE_QUEUE_TAKE
CacheDispatcher
public static final java.lang.String EVENT_CACHE_DISCARD_CANCELED
CacheDispatcher
for processingpublic static final java.lang.String EVENT_ADD_DISCARD_CANCELED
RequestQueue
public static final java.lang.String EVENT_CACHE_MISS
CacheDispatcher
cannot find Request cashe in Cache
public static final java.lang.String EVENT_CACHE_HIT_EXPIRED_BUT_WILL_DELIVER_IT
public static final java.lang.String EVENT_CACHE_HIT
public static final java.lang.String EVENT_CACHE_HIT_PARSED
Response
public static final java.lang.String EVENT_CACHE_HIT_REFRESH_NEEDED
public static final java.lang.String EVENT_DELIVER_RESPONSE
RequestListener.ResponseListener.onResponse(Object)
will be calledpublic static final java.lang.String EVENT_DELIVER_ERROR
RequestListener.ErrorListener.onError(JusError)
will be calledpublic static final java.lang.String DEFAULT_PARAMS_ENCODING
protected java.lang.Integer sequence
public Request(java.lang.String method, java.lang.String url)
public Request(java.lang.String method, HttpUrl url)
public Request(java.lang.String method, java.lang.String url, java.lang.Class<T> responseType)
public Request(java.lang.String method, HttpUrl url, Converter<NetworkResponse,T> converterFromResponse)
Request.Method
),
URL, and error listener. Note that the normal response listener is not provided here as
delivery of responses is provided by subclasses, who have a better idea of how to deliver
an already-parsed response.public Request(java.lang.String method, java.lang.String url, Converter<NetworkResponse,T> converterFromResponse)
public final RequestQueue getRequestQueue()
public Converter<NetworkResponse,T> getConverterFromResponse()
public java.lang.String getMethod()
Request.Method
.public HttpUrl getUrl()
public java.lang.String getUrlString()
public NetworkRequest getNetworkRequest()
public Request<T> setNetworkRequest(NetworkRequest networkRequest)
public <R> Request<T> setRequestData(R requestData, Converter<R,NetworkRequest> converterToRequest) throws java.io.IOException
NetworkRequest
This will overwrite all previous http body and headers definedrequestData
- converterToRequest
- java.io.IOException
public <R extends Request<T>> R addResponseListener(RequestListener.ResponseListener<T> responseListener)
public <R extends Request<T>> R addMarkerListener(RequestListener.MarkerListener markerListener)
public <R extends Request<T>> R addErrorListener(RequestListener.ErrorListener errorListener)
public Request<T> removeResponseListener(RequestListener.ResponseListener<T> responseListener)
public <R extends Request<T>> R removeMarkerListener(RequestListener.MarkerListener markerListener)
public <R extends Request<T>> R removeErrorListener(RequestListener.ErrorListener errorListener)
public NoConnectionPolicy getNoConnectionPolicy()
public <R extends Request<T>> R setNoConnectionPolicy(NoConnectionPolicy noConnectionPolicy)
public ConnectivityManager getConnectivityManager()
public <R extends Request<T>> R setConnectivityManager(ConnectivityManager connectivityManager)
public boolean isLogSlowRequests()
public <R extends Request<T>> R setTag(java.lang.Object tag)
RequestQueue.cancelAll(Object)
.public java.lang.Object getTag()
setTag(Object)
public <R extends Request<T>> R setPriority(Request.Priority priority)
Request.Priority
of this request; Request.Priority.NORMAL
by default.priority
- Request.Priority
of this requestpublic Request.Priority getPriority()
Request.Priority
of this request; Request.Priority.NORMAL
by default.public Authenticator getServerAuthenticator()
public <R extends Request<T>> R setServerAuthenticator(Authenticator serverAuthenticator)
public Authenticator getProxyAuthenticator()
public <R extends Request<T>> R setProxyAuthenticator(Authenticator proxyAuthenticator)
public int getTrafficStatsTag()
NetworkDispatcher.addTrafficStatsTag(io.apptik.comm.jus.Request<?>)
public <R extends Request<T>> R setRetryPolicy(RetryPolicy retryPolicy)
public RetryPolicy getRetryPolicy()
public <R extends Request<T>> R setRedirectPolicy(RedirectPolicy redirectPolicy)
public RedirectPolicy getRedirectPolicy()
public <R extends Request<T>> R addMarker(java.lang.String tag, java.lang.Object... args)
public <R extends Request<T>> R prepRequestQueue(RequestQueue requestQueue)
protected final <R extends Request<T>> R setSequence(int sequence)
RequestQueue
.public final int getSequence()
public java.lang.String getCacheKey()
public <R extends Request<T>> R setCacheEntry(Cache.Entry entry)
public Cache.Entry getCacheEntry()
public void cancel()
public boolean isCanceled()
public final java.util.Map<java.lang.String,java.lang.String> getHeadersMap()
public final Headers getHeaders()
public java.lang.String getBodyContentType()
public byte[] getBody()
public final <R extends Request<T>> R setShouldCache(boolean shouldCache)
public final boolean shouldCache()
public boolean hasHadResponseDelivered()
protected Response<T> parseNetworkResponse(NetworkResponse response)
response
- Response from the networkprotected JusError parseNetworkError(JusError jusError)
The default implementation just returns the passed 'networkError'.
jusError
- the error retrieved from the networkprotected void deliverResponse(T response)
response
- The parsed response returned by
parseNetworkResponse(NetworkResponse)
public void deliverError(JusError error)
error
- Error detailspublic RequestFuture<T> getFuture()
public int compareTo(Request<T> other)
public java.lang.String toString()
toString
in class java.lang.Object


TechnoVit of Vit chennai is one of the largest tech fests that features events of different types and had a tinge of cultural touch as it focusses both on technical and cultural fronts.
Model United Nations works as a wonderful platform for the interested students to learn and display their verbal skills and discuss about the relevant world issues.
What does this team member to? Keep it short! This is also a great spot for social links!
What does this team member to? Keep it short! This is also a great spot for social links!
What does this team member to? Keep it short! This is also a great spot for social links!


Department of Computer Science
CS Home
|
CCLS Home
|
SFSU Home
|
Resources & Links
|
ACM
|
Contact
Mission and Objectives
Prospective Students
Undergraduate Program
Graduate Program
Advising
Faculty and Staff
Ctr for Comp for Life Sci
Research Projects, Labs, and Groups
Schedules
Forms
Resources & Links
Employment
CS Advisory Board
Contact Us
Search
Resources
Student Resources
- - - - - - - - - - -
Faculty/Staff Resources
Department Resources for Students
Association of Computing Machinery (ACM)
iLearn
Computer Science Labs
Cluster Computing Resources
Department Forms
Graduation
Grants & Scholarships & Fellowships
Pre-Doctoral Program at SFSU
Preparing Oral Presentations
SFSU COSE Safety Website (including forms)
Unix Access & C++ Compilation
Back to Top
Admissions and Advising
Admissions
Department Advising
General Advising
SFSU On-line Bulletin
Collaboration
American University of Armenia
Biology Department
Chemistry Department
Back to Top
Other SFSU Resources
Academic Affairs
Center for Teaching and Faculty Development CTFD
Colleges and Departments
Community Involvement
Financial Aid
International Student Health Services
Office of International Programs
Parking
Public Safety, Department of
Student Affairs
Student Health Services
Student Voice
(SFSU Student Opinions)
Back to Top
Faculty Resources
Resources for Faculty/Staff:
Assist.org -- Checking Student Transfer Units
iLearn
California Faculty Association
COSE Home page
Day One Instructor Checklist
Faculty Affairs
Faculty Development Collaboration Form (NEW!)
Graduate Division
Grant Links
Human Resources
New Textbooks & Publishers Link
Parking Permit
Policy on Currency of Tenured/tenure-track Faculty
Policy on Evaluation of Part-time faculty/lecturers
RTP (Retention, Tenure, and Promotion) Policy
SFSU On-line Bulletin
Staff/Faculty Forms
Student Inquiry
Syllabus Creation, Inititiate Exit Survey
University & Budget Planning
Webgrades/Rosters
Back to Top
webteam
|
OC License


@* * Copyright 2021 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import viewmodels.AddToListRow @this() @(items: Seq[AddToListRow])(implicit messages: Messages)


The meeting started with Dad drilling a hole in the bot as the students walked in. I attempted to tell Carlie in a nice and respectful way that Mr. Williams (Code Mentor) had asked me to teach her and Anton how to commit and push, and pull code from Github. Its a pretty simple process that really only consists of downloading some helpful software from SmartGit and configuring it to recognize some code changes. I'm sure it would have only taken 15 min or so (of our three hours).
Unfortunatley when Carlie asked why I hadn't told Anton I was supposed to teach them, I replied by saying he was busy with the electrical board and I wasn't going to bother him (I respect Anton a lot). She took that as an opportunity to claim that she was also working with him yesterday and today. Im sitting here watching her while writing this and she isn't really doing much but walking around. Whatever. I told Matt that we would just have to wait until he was back to get the job done. He didn't seem worried but the meeting beginning with a talk about time management makes me feel otherwise.
Outside of Robotics
In other news, my day sadly started with a post that I read on ChiefDelphi.com The thread is about the captain of FRC Team 987 the Highrollers. He sadly took his own life yesterday and the community is pretty shaken up about it. It's so sad that people feel the need to take their own life and I think the community and hopefully the rest of the world agrees with me on that.
I think I'm going to include random images for the headers of these blog posts. It might keep it fresh a bit. Don't be worried about me writing about people on the team. I'll keep it respectful and just tell the truth from my perspective. They probably won't be the people reading this blog anyways.
One last thing. Altough this didn't happen today necesarrily it was recently. I crashed Mom and Dad's car. I honestly don't know why I was only the road I was on, but it was slippery. I slid and hit the curb and while that doens't sound like a lot, it was like $3500 in damages based on the insurance claim.  I don't have a whole lot of money at the moment but my friend Arad has considered paying me to make him a website for his app. Thats all I think.
Over and out Captain


VuePress
Vue-powered Static Site Generator
What is VuePress?
- Minimalistic static site generator with a Vue-powered theming system and Plugin API
- A default theme optimized for writing technical documentation
- JAMSTACK(JavaScript,Api,Markdown)
- Written By the Vue Core Team!
- Each page generated by VuePress has its own pre-rendered static HTML.
- Vue takes over the static content and turns it into a full Single-Page Application (SPA).
- A VuePress site is in fact a SPA powered by Vue, Vue Router and webpack.
- Easy to host to static services like Surge and Netlify and to integrate tools like Netlify CMS
What Can I Use?
- Can use Markdown Files (Includes built in Markdown Extensions)
- Any Markdown file that contains a YAML frontmatter block will be processed
- Can use Vue components that are registered in project.(Don't have to learn VueJS to get started!)
Default Theme
- Vuepress Default Theme comes with customizable sidebar,search box, and Navbar
- Navbar automatically searches all headers with markdown
- Writing your own themes using Vue Components
Plugins
- Plugins generally add global-level functionality to VuePress.
- Examples: Back to the top, Google Analytics, PWA Support


Use .list-group-item-[theme] within list items for theming them. A badge within .list-group-item can be pushed to the right using .d-flex.justify-content-between.align-items-center


I’m a Full stack Hardware design engineer. Currently, I’m pursuing my master’s degree in High-Speed Digital Engineering at the University of Colorado Boulder. I work on things related to electronics, such as high-speed board design, circuit design, digital design, Verilog development, embedded development, etc. Yeah that’s what I do as a professional. As a hobbyist, I do much more than these things.
MS in High-Speed Digital Engineering, 2025
University of Colorado Boulder
B.E in Electronics and Instrumentation, 2017
Visvesvaraya Technologial University
CCE Proficiency Course on Innovative Product Development and Design Methods, 2018
Indian Institute of Science
Programming
Hardware design
Noobie photography with my pixel
Loves Tech Quiz
Innovative product design
Hobby artist
Responsibilities include:
Got an amazing opprtunity to work under Prof. Bhardwaj Amrutur, Dr. Ashish Joglekar and Dr. Josephine Ruth on various things like UWB localisation, Autonomous drone charging and robotic manipulators & end effectors. Rakshit Ramesh mentored me in UWB localisation project.
Responsibilities: Designed electronics systems for automated water treatment and filtration units.
The company works on solving water crisis problem in urban area by treating it and recycling it. It was a great opptortunity for me to learn various aspects of system design and product design under the guidance of Prof. Sanjiv Sambandan, Karthik Raghunandan and K Sharath Karanth
Image Source: Economic Times
Responsibilities: Designed wireless flow sensor and current sensor network.
I conducted a workshop on Internet of things and Edge AI for 11th standard students at my Alma mater Viveka Pre University College, Kota, Udupi. Students discussed their ideas and how they can implement them using opensource tools.
I participated in the annual HAM Radio competition here in Bengaluru and was able to make as many as 30 connections through the line of sight and repeater-assisted transmission. For the event, I used my homemade 4-element Yagi Antenna.
I got an opportunity to give a talk on “Introduction to Edge AI” to 60+ 2nd Year Engineering Students of NIT AP, India. Introduced them to amazing tools like #edgeimpulse #SensiML #Brainium and #AIfES
Our paper Agrosquad - An IoT-based precision agriculture using UAV and low-power soil multi-sensor got published at IEEE-CONECCT 2021 Conference.
I wrote a writeup so that it might help someone someday.
The agenda was to cover the key concepts that we as hardware engineers deal with in our work environments. I believe that we can always share our experience and knowledge to ensure that the students get the right information demanded by the industry. It’s always a pleasure to go back to college. As an alumnus, I am proud to give back to the place that has had such a positive influence on my career.
Here’s my call sign: VU3TEY.
Our work on UWB-based localisation is up on Arxiv.
My article on Azure in Industrial IoT was selected among the top 20 articles in a competition organised by KonfHub
Delivered a talk on our hackathon experience and how one can utilize opportunities during their bachelor’s degree at my Alma mater Bangalore Institute of Technology. Shared my experience with current students about how a hardware-based prototype will help one to understand the inner workings of a product. All this was possible because of my college mates and hackathon partners Hansum Krishna, Shashank Punia and Asif Sajjad for 30+ hackathons and much more.. way to go team.!
I conducted a workshop on open source electronics for 11th standard students at my Alma mater Viveka Pre University College, Kota, Udupi. The response was very good, students started giving life to their innovative ideas with the help of an arduino microcontroller and basic electronics. I’m very happy that some even won awards at project exhibition competitions organised by nearby engineering colleges.
I wrote an article on Devopedia.org which is a group of like-minded engineers in Bengaluru where we discuss the latest technologies and conduct workshops on them.
I was fortunate to get in touch with entrepreneur Ram Prakash H who was listed among the top 20 India Innovators under 35 by MIT TR35 for the innovation Quillpad technology which was later deployed by Rediff.com, Indiatimes, AADHAAR, LG, Yahoo Inc etc.
I got an opportunity to work with him in organising various events at his GR Lavender Apartment’s Science Fest - ELICIT 2016, including a workshop using Balsa Wood Glider, DIY Den for teaching kids how to use an Arduino, A TicTacToe Playing robot using image processing e.t.c. Also, I got an opportunity to inaugurate the ELICIT 2016 using my homemade drone.
This is where all started, I always wanted to build a plane with a custom transmitter and receiver and I was able to do it with the help of Arduino. Luckily I got a chance to showcase my project at Arduino Day 2015. This event helped me a lot in terms of career opportunities, I got many contacts from this event which helped me in involving the open-source community.
A self sustained LoRa based Air Quality monitor using MKRWAN 1300
January 2020 - Current
January 2020 - Current
October 2019 - November 2019
September 2019 - November 2019
April 2019 to August 2019
February 2019 to March 2019
February 2019 to March 2019
November 2018 to January 2019
Smart switch based on Infineon’s CoolMOS MOSFET for spark-free switching of drones and electric vehicles
Aug. 2018 to Sept. 2018
Predictive maintenance of Industrial motors using Infineon’s high precision 3D magnetic sensor TLE-493D
Predictive maintenance based IoT solution which can pinpoint manhole clogging in an urban drainage system thereby preventing manual inspections Sept. 2018 to Present
Apr. 2018 to Present
Localisation of drones in GPS denied environments
July 2017 to Apr. 2018
Embedded System for sensing water quality and other parameters and controlling the water treatment plant
Jan. 2017 to Apr. 2017
The algorithms that build maps of an unknown environment and simultaneously perform localization in that region.
Aug. 2016 to Present
A complete agriculture surveillance and monitoring system with digital image processing.
Oct. 2016 to Present Smart driver assistant system with pattern recognition and sensors
Feb. 2017 to Mar. 2017
Modular case for smartphone which can be used to control IoT devices.
My article Azure in Industrial IoT was selected as one of the top 20 articles among 80+ articles received for the competition.
May 2020 Best Healthcare Application
April 2020 Runner Up
March 2020 Won 3rd Prize
September 2019 Won the 1st prize for ‘BEST USE CASE FOR REAL LIFE PRACTICAL APPLICATION’
March 2019 Won best project award in SMART BUILDING category
ReImagine Waste, CPDM, IISc. Sept. 2018 Won the special prize in the hackathon
Sept. 2018 Won best project award in industrial category.
Ericsson Semifinalist in the International Ericsson Awards 2017.
MediaTek and Angelhack 2017 - 3rd Prize
CeBIT India Winner of national level IoT hackathon
Mercedes Benz Research and Development India, Best Geek Group Oct. 2016
BMSCE and ABB Sept. 2016 Hackathon organised by BMSCE on the occasion of their college fest Phaseshift.
Chopra’s, Brain Box Quizzing, 2nd Prize
April 2017 Semifinalist, team AGROSQUAD
May 2017 2nd prize winner in tech quiz.
Jan. 2016 - Mar. 2016 Indian Institute of Science, PESIT Bangalore, NMIT Bangalore. Grabbed First prize at Pravega, Aatmatrisha and Anaadyanta techno-cultural fests of respective colleges.
Indian Institute of Science Feb. 2015 Won First prize in designing fixed wing aircraft on the occasion of Open Day 15


Welcome to my very first experience with coding! This is intended to be a basic informative site. My name is Nathaniel Posekany. I can't say I'm proud of what I've done here, but I feel that it's a good first step!


DfE enquiries
Central newsdesk 020 7783 8300
General enquiries 0370 000 2288
Press release
The Education Funding Agency announces 46 schools are to be rebuilt using private finance under the next steps of the Priority School Building Programme.
The Education Funding Agency (EFA) today announced 46 schools will be rebuilt using private finance under the next steps of the Priority School Building Programme (PSBP).
46 schools in 5 batches will be rebuilt under the government’s new approach to public private partnerships, known as PF2. These schools have a total funding requirement of approximately £700 million.
The funding is set to be raised using an innovative new ‘aggregator’ model. The ‘aggregator’ will be able to access both the bank debt and capital markets in order to secure the best deals for the taxpayer.
The Hertfordshire, Luton and Reading batch will be launched at a bidders day due to be held by the EFA on 28 May 2013. A notice inviting bids from firms interested in constructing and maintaining the schools will be published in the Official Journal of the European Union in June.
The other batches, to be released to the market over the next 12 months, are:
The announcement underlines the government’s commitment to using public private partnerships to deliver investment in new public infrastructure and assets.
The government is determined to raise the standard of schools and the education they provide to help those who want to work hard and ensure the country can compete in the global race.
The performance of the ‘aggregator’ model will be assessed to inform future investment in the education estate which will be identified by the property data survey programme, due to report in October this year. This is the first centrally collated information of the condition of all schools since 2005.
Ministers are also announcing the allocation of a further £300 million of capital funding in the current spending review period to enable an early start for 27 further schools in the programme. These schools will be procured in 4 batches.
The investment is part of the government’s commitment to give children the best possible start in life and to make sure schools are a place where children can fulfil their aspirations.
The remaining schools in the programme are intended to be delivered using capital funding, subject to the next spending review settlement. The timetable for the remaining schools in the programme will be announced after the settlement is made in June.
Peter Lauener, Chief Executive of the EFA, said:
I am delighted we can confirm the schools to be rebuilt through private finance. The government’s new approach to public private partnerships provides a great opportunity for industry to step up to the mark and I am looking forward to seeing innovative and cost-effective proposals.
These 5 privately-financed batches, plus the additional 4 capital-funded batches also announced today, will help us overhaul the schools with the greatest need, ensuring young people can learn in buildings that are up to scratch.
Today’s announcement builds on the excellent progress being made on the original 8 batches of capital-funded schools. The first schools will be delivered ahead of the original timetable. The first capital project was procured in just 26 weeks. The first spade will hit the ground later this month at Whitmore Park School in Coventry.
All schools and local authorities within the programme will be contacted today with further details relevant to them.
On 5 December 2012, the Government concluded its review of PFI and published full details of a new approach to public private partnerships, PF2. Further information can be found on the HM Treasury website
The Priority School Building Programme (PSBP) is a centrally managed programme set up to address the condition of the schools most in need of urgent repair. Through the PSBP, 261 schools will be rebuilt or have their condition needs met. The first school will be completed in 2014.
Good progress is being made on the delivery of the 51 schools already being taken forward using capital grant. Contractors have been appointed to build the first three batches of schools (North East, Midlands 1, and Midlands 2 batches) and construction work is expected to start in May. Contractors for the other 5 capital batches of schools will be announced before the end of May.
We are currently working with 4 private finance batches and work with a 5th will start imminently.
Since 2010 this government has allocated £2.7 billion to local authorities to support the provision of new school places and £2.8 billion for the maintenance of the school estate to meet the needs of maintained schools and academies. Over the spending review period, the total capital made available for investment in schools in England will be about £18 billion.
In order to ascertain the renovation needs of the schools estate in England, the Department for Education has been conducting a national programme of surveys, which should be available by autumn 2013. Information on the condition of all schools was last collated centrally in 2005.
Central newsdesk 020 7783 8300
General enquiries 0370 000 2288


class: center, middle, inverse, title-slide # Detection of Differentially Interacting Chromatin Regions From Multiple Hi-C Datasets ## #bioc2020 workshop ### Mikhail Dozmorov ### Virginia Commonwealth University ### 2020-07-30, 10:00-10:55am ET ---  ## HiCcompareWorkshop resources - These slides: [https://mdozmorov.github.io/Talk_HiCcompare](https://mdozmorov.github.io/Talk_HiCcompare) - GitHub repo: [https://github.com/mdozmorov/HiCcompareWorkshop](https://github.com/mdozmorov/HiCcompareWorkshop) - Docker image: [https://hub.docker.com/repository/docker/mdozmorov/hiccompareworkshop](https://hub.docker.com/repository/docker/mdozmorov/hiccompareworkshop) - Pkgdown website: [https://mdozmorov.github.io/HiCcompareWorkshop/](https://mdozmorov.github.io/HiCcompareWorkshop/) - Start this workshop at [http://workshop.bioc.cancerdatasci.org/](http://workshop.bioc.cancerdatasci.org/) - Username: rstudio - Password: welcome-to-bioc2020 - `help(package = "HiCcompareWorkshop")` --- ## The 3D structure of the genome - Human genome is big - ~3.2 billion base pairs - ~2 meters (~6ft) of DNA in one cell are packed into the `\(\sim10\mu m\)` nucleus - ~500 times distance from Earth to Sun in all cells from human body .center[] --- ## Chromosome conformation capture technologies The core strategy in 3D genome mapping is nuclear **proximity ligation** (Cullen et al., 1993), which allows detection of distant genomic segments residing in close spatial proximity to one another, yet are linearly far away. .center[] .small[ Lieberman-Aiden, Erez, Nynke L. van Berkum, Louise Williams, Maxim Imakaev, Tobias Ragoczy, Agnes Telling, Ido Amit, et al. “[Comprehensive Mapping of Long-Range Interactions Reveals Folding Principles of the Human Genome](https://doi.org/10.1126/science.1181369).” Science, 2009 ] --- ## Hi-C Data as a matrix .pull-left[ - The genome (chromosome) is split into equally sized regions - Data is represented by a symmetric matrix of contacts `\(C_{ij}\)` where entry `\(ij\)` corresponds to the number of times region `\(i\)` comes into contact with region `\(j\)` - Off-diagonal data view - increasing **distance** between interacting regions - Power-law decay of interactions with increasing **distance** ] .pull-right[  ] --- ## Biases in Hi-C data - Hi-C data suffers from many biases: **sequence-driven** (e.g., mappability, CG content) & **technology-driven** (e.g., type of restriction enzyme, sequencing platform) - Most normalization methods work only on individual Hi-C dataset, one at a time - Individual normalization methods do not perform well when the goal is comparison .small[Lyu, Hongqiang, Erhu Liu, and Zhifang Wu. “[Comparison of Normalization Methods for Hi-C Data](https://europepmc.org/article/med/31588782).” BioTechniques 68, no. 2 (2020) Zheng, Ye, Peigen Zhou, and Sündüz Keleş. “[FreeHi-C Spike-in Simulations for Benchmarking Differential Chromatin Interaction Detection](https://doi.org/10.1016/j.ymeth.2020.07.001).” Methods, July 2020] --- ## Joint Normalization on the MD plot .pull-left[ - **MD plot** represents data from two Hi-C matrices on one plot - Similar to the MA plot (Bland-Altman plot) - Y-axis: **M**ean differences in interaction frequencies = log2(IF2/IF1) - X-axis: Genomic **D**istance ] .pull-right[  ] --- ## Joint Loess Normalization of Hi-C Data .center[] .small[Lyu, Hongqiang, Erhu Liu, and Zhifang Wu. “[Comparison of Normalization Methods for Hi-C Data](https://europepmc.org/article/med/31588782).” BioTechniques, 2020] --- ## Cyclic loess normalization of multiple Hi-C datasets Cyclic loess (Ballman et al. 2004) - take each pair of datasets, normalize, repeat until convergence 1. Choose two out of the N total samples then generate an MD plot 2. Fit a loess curve f(d) to the MD plot 3. Subtract f(d)/2 from the first dataset and add f(d)/2 to the second 4. Repeat until all unique pairs have been compared 5. Repeat until convergence .small[Ballman, Karla V., Diane E. Grill, Ann L. Oberg, and Terry M. Therneau. “[Faster Cyclic Loess: Normalizing RNA Arrays via Linear Models](https://doi.org/10.1093/bioinformatics/bth327).” Bioinformatics (Oxford, England) 20, no. 16 (November 1, 2004)] --- ## Distance-centric chromatin interaction difference detection .center[] .small[Zheng, Ye, Peigen Zhou, and Sündüz Keleş. “[FreeHi-C Spike-in Simulations for Benchmarking Differential Chromatin Interaction Detection](https://doi.org/10.1016/j.ymeth.2020.07.001).” Methods, 2020] --- ## Distance-centric chromatin interaction difference detection - **Exact test** - For comparing 2 groups without other covariates - Similar to Fisher's exact test - **GLM Methods** - For more complex experiments utilize the GLM framework - The vector of covariates `\(x_i\)` can be linked with `\(\mu_{dgj}\)` through a log-linear model `\(log(\mu_{dgj}) = x_i^T\beta_{dg} + log(M_{dj})\)` - Implemented in [edgeR](https://bioconductor.org/packages/edgeR/) R package --- ## Interpretation of differentially interacting chromatin regions (DIRs) - **Visualization of DIRs.** A Manhattan-like plot of DIRs may inform us about abnormalities or reveal chromosome site-specific enrichment of differentially interacting regions - **Overlap between differentially expressed genes and DIRs.** If gene expression measurements are available, differentially expressed genes may be tested for overlap with DIRs - test the link between DIRs and changed gene expression - **Functional enrichment of genes overlapping DIRs.** DIRs may disrupt specific pathways/functions - test whether genes overlapping DIRs are enriched in a canonical pathway or share a common function --- ## Interpretation of differentially interacting chromatin regions (DIRs) - **Overlap enrichment between TAD boundaries and DIRs.** DIRs may correspond to TAD boundaries that are deleted or created - test DIRs for significant overlap with TAD boundaries detected in either condition or only in boundaries changed between the conditions - **Overlap between DIRs and binding sites.** DIRs may correspond to locations where proteins bind with DNA, such as CTCF sites - test for overlap between binding site locations and DIRs. --- ## Summary - **Distance-centric view** of Hi-C data is critical (`MD plot`) - **Joint loess normalization** effectively removes between-dataset biases (`HiCcompare`, https://bioconductor.org/packages/HiCcompare/) - **Differential analysis considering distance** has optimal performance (`multiHiCcompare`, https://bioconductor.org/packages/multiHiCcompare/) .small[ - Stansfield, John C., Kellen G. Cresswell, Vladimir I. Vladimirov, and Mikhail G. Dozmorov. “[HiCcompare: An R-Package for Joint Normalization and Comparison of HI-C Datasets](https://doi.org/10.1186/s12859-018-2288-x).” BMC Bioinformatics (December 2018) - Stansfield, John C, Kellen G Cresswell, and Mikhail G Dozmorov. “[MultiHiCcompare: Joint Normalization and Comparative Analysis of Complex Hi-C Experiments](https://doi.org/10.1093/bioinformatics/btz048).” Bioinformatics, January 22, 2019 ] --- ## HiCcompareWorkshop resources - These slides: [https://mdozmorov.github.io/Talk_HiCcompare](https://mdozmorov.github.io/Talk_HiCcompare) - GitHub repo: [https://github.com/mdozmorov/HiCcompareWorkshop](https://github.com/mdozmorov/HiCcompareWorkshop) - Docker image: [https://hub.docker.com/repository/docker/mdozmorov/hiccompareworkshop](https://hub.docker.com/repository/docker/mdozmorov/hiccompareworkshop) - Pkgdown website: [https://mdozmorov.github.io/HiCcompareWorkshop/](https://mdozmorov.github.io/HiCcompareWorkshop/) .center[Get in touch on Twitter [@mikhaildozmorov](https://twitter.com/mikhaildozmorov)
 or by e-mail `mdozmorov at vcu dot edu`] .small[ This research was supported by the American Cancer Society [IRG-14-192-40] and the National Institute of Environmental Health Sciences of the National Institutes of Health [T32ES007334] ]


| Order Id | No of Products | Order Expire Date | Total Price | Location | Order Status | Seller Confirmation | Buyer Confirmation |
|---|---|---|---|---|---|---|---|
| {{order.id}} | {{order.noOfProducts}} | {{order.orderExpirationDate}} | {{order.totalPrice}} | {{order.orderLocation}} | {{order.orderStatus}} | Confirmed. Not Confirmed. | Confirmed. Not Confirmed. |


--- layout: post title: 360° sketch date: '2017-04-15T06:59:17+02:00' categories: - Sketches picture_url: https://film-Storyboards.tumblr.com/post/159598877551 ---


Chapter 5 Visualizations
Minor visualization capabilities exist within the package, mostly for checking the integrity of the imported information. For example, once imported, a color table can be viewed:
The label.cex argument controls the size of each label as plotted in its square, and the label.font controls whether the label is printed in bold (=2) or regular face (=1). nrows_in_display allows manually setting the number of rows in the visualized table. If not given, this defaults to NULL, which is a flag for the function to pick its own visualized table dimensions.
For labeled data, class maps can be visualized with
NeuroScopeIO::vis_classmap(class_matrix = incl$class, ctab = ctab)
## Warning in as.cimg.array(RGBarray): Assuming third dimension corresponds to
## colour
The argument class_matrix must contain class labels for each pixel (and be in “image” format, i.e., with dimensions = image dimension). This obviously requires import of the include and ctab information.
PE plurality labels of the SOM can be visualized in the same manner by converting the nunr class information back to a cube:
som_labels = NeuroScopeIO::convert_datmat_to_datcub(datmat=nunr$class, img_x = som_x, img_y = som_y)
NeuroScopeIO::vis_classmap(class_matrix = som_labels, ctab = ctab, pixel_expansion_factor = 5)
## Warning in as.cimg.array(RGBarray): Assuming third dimension corresponds to
## colour
The additional argument pixel_expansion_factor enlarges each pixel defined in the class_matrix by its value. This is helpful for visualizing SOM labels, as SOM lattices are typically small (and the resulting plot hard to see).