1. Introduction
Shadow is a Gradle plugin for combining dependency classes and resources with a project’s into a single
output Jar.
The combined Jar is often referred to a fat-jar or uber-jar.
Shadow utilizes JarInputStream
and JarOutputStream
to efficiently process dependent libraries
into the output jar without incurring the I/O overhead of expanding the jars to disk.
1.1. Benefits of Shadow
Shadowing a project output has 2 major use cases:
-
Creating an executable JAR distribution
-
Bundling and relocating common dependencies in libraries to avoid classpath conflicts
1.1.1. Executable Distributions
Executable distribution is the main use case for application developers. The goal of an executable distribution is a single file that can be deployed and executed/run in the runtime environment. In the case of Shadow, this is a single uber or fat JAR. The JAR file contains all the application code and dependent libraries to execute (not including the standard JVM libraries). The shadow JAR does not include the JRE itself. It must be available on the target system.
Executable JARs contain a JAR MANIFEST that specifies the application Main Class. This allows the application to be started with a single command:
$ java -jar application-shadow.jar
1.1.2. Library Bundling
Dependency bundling and relocation is the main use case for library authors. The goal of a bundled library is to create a pre-packaged dependency for other libraries or applications to utilize. Often in these scenarios, a library may contain a dependency that a downstream library or application also uses. In some cases, different versions of this common dependency can cause an issue in either the upstream library or the downstream application. These issues often manifest themselves as binary incompatibilities in either the library or application code.
By utilizing Shadow’s ability to relocate the package names for dependencies, a library author can ensure that the library’s dependencies will not conflict with the same dependency being declared by the downstream application.
1.2. Getting Started
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.0.0-SNAPSHOT'
}
}
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'
Alternatively, the Gradle Plugin syntax can be used:
plugins {
id 'com.github.johnrengelman.shadow' version '1.0.0-SNAPSHOT'
id 'java'
}
Shadow is a reactive plugin. This means that applying Shadow by itself will perform no configuration on your project. Instead, Shadow reacts to the application of other plugins to decorate the project.
This means, that for most users, the java
or groovy
plugins must be explicitly applied
to have the desired effect.
1.3. Default Java/Groovy Tasks
In the presence of the java
or groovy
plugins, Shadow will automatically configure the
following behavior:
-
Adds a
shadowJar
task to the project. -
Adds a
shadow
configuration to the project. -
Configures the
shadowJar
task to include all sources from the project’smain
sourceSet. -
Configures the
shadowJar
task to bundle all dependencies from theruntime
configuration. -
Configures the classifier attribute of the
shadowJar
task to be'all'
. -
Configures the
shadowJar
task to generate aManifest
with:-
Inheriting all configuration from the standard
jar
task. -
Adds a
Class-Path
attribute to theManifest
that appends all dependencies from theshadow
configuration
-
-
Configures the
shadowJar
task to exclude any JAR index or cryptographic signature files matching the following patterns:-
META-INF/INDEX.LIST
-
META-INF/*.SF
-
META-INF/*.DSA
-
META-INF/*.RSA
-
-
Creates and registers the
shadow
component in the project (used for integrating withmaven-publish
). -
Configures the
uploadShadow
task (as part of themaven
plugin) with the following behavior:-
Removes the
compile
andruntime
configurations from thepom.xml
file mapping. -
Adds the
shadow
configuration to thepom.xml
file asRUNTIME
scope.
-
1.4. Shadowing Gradle Plugins
Starting with v2.0.0, Shadow is capable of automatically configuring package relocation for your dependencies. This is useful especially when building Gradle plugins where you want your dependencies to not conflict with versions provided by the Gradle runtime.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.0.0-SNAPSHOT'
}
}
apply plugin: 'com.github.johnrengelman.shadow-plugin'
apply plugin: 'java'
Alternatively, the Gradle Plugin syntax can be used:
plugins {
id 'com.github.johnrengelman.shadow-plugin' version '1.0.0-SNAPSHOT'
id 'java'
}
Applying the shadow-plugin
plugin is the same as applying the standard shadow
plugin with the additional creation
of the configureRelocationShadowJar
task.
This task runs before the shadowJar
task and scans the packages presention the dependencies that will be merged into
the final jar and automatically configures relocation for them.
By default the tasks relocates all packages to the shadow.
prefix. For example org.jdom2.JDOMException
becomes
shadow.org.jdom2.JDOMException
For more details see the sectinon Using Shadow to Package Gradle Plugins
2. Configuring Shadow
The ShadowJar
task type extends from Gradle’s
Jar
type.
This means that all attributes and methods available on Jar
are also available on
ShadowJar
.
Refer the Gradle User Guide for Jar for
details.
2.1. Configuring Output Name
Shadow configures the default shadowJar
task to set the output JAR’s destinationDir
, baseName
, appendix
,
version
, and extension
to the same default values as Gradle does for all Jar
tasks.
Additionally, it configures the classifier
to be all
.
If working with a Gradle project with the name myApp
and version 1.0
, the default shadowJar
task will output a
file at: build/libs/myApp-1.0-all.jar
As with all Jar
tasks in Gradle, these values can be overridden:
build/libs/shadow.jar
Unresolved directive in 10-configuring.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy[tags=rename]
2.2. Configuring the Runtime Classpath
Each Java JAR file contains a manifest file that provides meta data about the contents of the JAR file itself. When using a shadowed JAR file as an executable JAR, it is assumed that all necessary runtime classes are contained within the JAR itself. There may be situations where the desire is to not bundle select dependencies into the shadowed JAR file but they are still required for runtime execution.
In these scenarios, Shadow creates a shadow
configuration to declare these dependencies.
Dependencies added to the shadow
configuration are not bundled into the output JAR.
Additionally, Shadow automatically configures the manifest of the shadowJar
task to contain a Class-Path
entry
in the JAR manifest.
The value of the Class-Path
entry is the name of all dependencies resolved in the shadow
configuration
for the project.
Unresolved directive in 10-configuring.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy[tags=shadowConfig]
Inspecting the META-INF/MANIFEST.MF
entry in the JAR file will reveal the following attribute:
Class-Path: junit-3.8.2.jar
When deploying a shadowed JAR as an execution JAR, it is important to note that any non-bundled runtime dependencies
must be deployed in the location specified in the Class-Path
entry in the manifest.
2.3. Configuring the JAR Manifest
Beyond the autmatic configuration of the Class-Path
entry, the shadowJar
manifest is configured in a number of ways.
First, the manifest for the shadowJar
task is configured to inherit from the manifest of the standard jar
task.
This means that any configuration performed on the jar
task will propagate to the shadowJar
tasks.
Unresolved directive in 10-configuring.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy[tags=jarManifest]
Inspecting the META-INF/MANIFEST.MF
entry in the JAR file will revel the following attribute:
Class-Path: /libs/a.jar
If it is desired to inherit a manifest from a JAR task other than the standard jar
task, the inheritFrom
methods
on the shadowJar.manifest
object can be used to configure the upstream.
task testJar(type: Jar) {
manifest {
attributes 'Description': 'This is an application JAR'
}
}
shadowJar {
manifest {
inheritFrom project.tasks.testJar.manifest
}
}
2.4. Filtering Shadow Jar Contents
The final contents of a shadow JAR can be filtered using the exclude
and include
methods inherited from Gradle’s
Jar
task type.
Refer to the Jar documentation for details on the various versions of the methods and their behavior.
When using exclude
/include
with a ShadowJar
task, the resulting copy specs are applied to the final JAR
contents.
This means that, the configuration is applied to the individual files from both the project source set or any
of the dependencies to be merged.
Unresolved directive in 11-filtering-contents.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy[tags=excludeFile]
Excludes and includes can be combined just like a noraml Jar
task, with excludes
taking precendence over includes
.
Additionally, ANT style patterns can be used to match multiple files.
Unresolved directive in 11-filtering-contents.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy[tags=excludeOverInclude]
2.5. Configuring Shadowed Dependencies
Shadow configures the default shadowJar
task to merge all dependencies from the project’s runtime
configuration
into the final JAR.
The configurations to source dependencies from for the merging can be configured using the configurations
property
of the ShadowJar
task type.
shadowJar {
configurations = [project.configurations.compile]
}
The above code sample would configure the shadowJar
task to merge depdencies from only the compile
configuration.
This means any dependency declared in the runtime
configuration would be not be included in the final JAR.
|
Note the literal use of |
2.6. Filtering Dependencies
Individual dependencies can be filtered from the final JAR by using the dependencies
block of a
ShadowJar
task.
Dependency filtering does not apply to transitive dependencies.
That is, excluding a dependency does not exclude any of its dependencies from the final JAR.
The dependency
blocks provides a number of methods for resolving dependencies using the notations familiar from
Gradle’s configurations
block.
Unresolved directive in 12-controlling-dependencies.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy[tags=excludeDep]
Unresolved directive in 12-controlling-dependencies.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy[tags=excludeProject]
|
While not being able to filter entire transitive dependency graphs might seem like an oversight, it is necessary because it would not be possible to intelligently determine the build author’s intended results when there is a common dependency between two 1st level dependencies when one is excluded and the other is not. |
2.6.1. Using Regex Patterns to Filter Dependencies
Dependencies can be filtered using regex patterns.
Coupled with the <group>:<artifact>:<version>
notation for dependencies, this allows for excluding/including
using any of these individual fields.
Unresolved directive in 12-controlling-dependencies.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy[tags=excludeDepWildcard]
Any of the individual fields can be safely absent and will function as though a wildcard was specified.
shadowJar {
dependencies {
exclude(dependency('shadow:d'))
}
}
The above code snippet is functionally equivalent to the previous example.
This same patten can be used for any of the dependency notation fields.
shadowJar {
dependencies {
exclude(dependency(':d:1.0'))
}
}
shadowJar {
dependencies {
exclude(dependency('shadow::1.0'))
}
}
2.6.2. Programmatically Selecting Dependencies to Filter
If more complex decisions are needed to select the dependencies to be included, the
dependencies
block provides a
method that accepts a Closure
for selecting dependencies.
Unresolved directive in 12-controlling-dependencies.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy[tags=excludeSpec]
2.7. Controlling JAR Content Merging
Shadow allows for customizing the process by which the output JAR is generated through the
Transformer
interface.
This is a concept that has been carried over from the original Maven Shade implementation.
A Transformer
is invoked for each entry in the JAR before being written to
the final output JAR.
This allows a Transformer
to determine if it should process a particular
entry and apply any modifications beforewriting the stream to the output.
shadowJar {
transform(MyTransformer.class)
}
Additionally, a Transformer
can accept a Closure
to configure the provided Transformer
.
shadowJar {
transform(MyTransformer.class) {
enable = true
}
}
An instantiated instance of a Transformer
can also be provided.
shadowJar {
transform(new MyTransformer(enabled: true))
}
2.7.1. Merging Service Descriptor Files
Java libraries often contain service descriptors files in the META-INF/services
directory of the JAR.
A service descriptor typically contains a line delimited list of classes that are supported for a particular service.
At runtime, this file is read and used to configure library or application behavior.
Multiple dependencies may use the same service descriptor file name.
In this case, it is generally desired to merge the content of each instance of the file into a single output file.
The ServiceFileTransformer
class is used to perform this merging.
By default, it will merge each copy of a file under META-INF/services
into a single file in the output JAR.
shadowJar {
mergeServiceFiles()
}
The above code snippet is a convenience syntax for calling
transform(ServiceFileTransformer.class)
.
|
Groovy Extension Module descriptor files (located at |
Configuring the Location of Service Descriptor Files
By default the ServiceFileTransformer
is configured to merge
files in META-INF/services
.
This directory can be overridden to merge descriptor files in a different location.
shadowJar {
mergeServiceFiles {
path = 'META-INF/custom'
}
}
Excluding/Including Specific Service Descriptor Files From Merging
The ServiceFileTransformer
class supports specifying specific
files to include or exclude from merging.
shadowJar {
mergeServiceFiles {
exclude 'META-INF/services/com.acme.*'
}
}
2.7.2. Merging Groovy Extension Modules
Shadow provides a specific transformer for dealing with Groovy extension module files.
This is due to their special syntax and how they need to be merged together.
The GroovyExtensionModuleTransformer
will handle these
files.
The ShadowJar
task also provides a short syntax method to add this transformer.
shadowJar {
mergeGroovyExtensionModules()
}
2.7.3. Appending Text Files
Generic text files can be appended together using the
AppendingTransformer
.
Each file is appended using new lines to separate content.
The ShadowJar
task provides a short syntax method of
append(String)
to configure this transformer.
shadowJar {
append 'test.properties'
}
2.7.4. Appending XML Files
XML files require a special transformer for merging.
The XmlAppendingTransformer
reads each XML document and merges
each root element into a single document.
There is no short syntax method for the XmlAppendingTransformer
.
It must be added using the transform
methods.
shadowJar {
tranform(XmlAppendingTransformer.class) {
resource = 'properties.xml'
}
}
2.8. Relocating Packages
Shade is capable of scanning a project’s classes and relocating specific dependencies to a new location. This is often required when one of the dependencies is susceptible to breaking changes in versions or to classpath pollution in a downstream project.
|
Google’s Guava and the ASM library are typical cases where package relocation can come in handy. |
Shadow uses the ASM library to modify class byte code to replace the package name and any import statements for a class. Any non-class files that are stored within a package structure are also relocated to the new location.
Unresolved directive in 14-package-relocation.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/RelocationSpec.groovy[tags=relocate]
The code snippet will rewrite the location for any class in the junit.framework
to be shadow.junit
.
For example, the class junit.textui.TestRunner
becomes shadow.junit.TestRunner
.
In the resulting JAR, the class file is relocated from junit/textui/TestRunner.class
to
shadow/junit/TestRunner.class
.
|
Relocation operates at a package level. It is not necessary to specify any patterns for matching, it will operate simply on the prefix provided. |
|
Relocation will be applied globally to all instance of the matched prefix. That is, it does not scope to only the dependencies being shadowed. Be specific as possible when configuring relocation as to avoid unintended relocations. |
2.8.1. Filtering Relocation
Specific classes or files can be included
/excluded
from the relocation operation if necessary.
Unresolved directive in 14-package-relocation.adoc - include::../../test/groovy/com/github/jengelman/gradle/plugins/shadow/RelocationSpec.groovy[tags=relocateFilter]
3. Creating a Custom ShadowJar Task
The built in shadowJar
task only provides an output for the main
source set of the project.
It is possible to add arbitrary ShadowJar
tasks to a project.
When doing so, ensure that the configurations
property is specified to inform Shadow which dependencies to merge
into the output.
task testJar(type: ShadowJar) {
classifier = 'tests'
from sourceSets.test.output
configurations = [project.configurations.testRuntime]
}
The code snippet above will geneated a shadowed JAR contain both the main
and test
sources as well as all runtime
and testRuntime
dependencies.
The file is output to build/libs/<project>-<version>-tests.jar
.
4. Integrating with Application Plugin
Shadow reacts to the presence of Gradle’s
application
plugin and will automatically
configure additional tasks for running the shadowed JAR and creating distributions containing the shadowed JAR.
Just like the normal jar
task, when the application
plugin is applied, the shadowJar
manifest will be
configured to contain the Main-Class
attribute with the value specified in the project’s mainClassName
attribute.
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'
mainClassName = 'myapp.Main'
4.1. Running the Shadow JAR
When applied along with the application
plugin, the runShadow
task will be created for starting
the application from the shadowed JAR.
The runShadow
task is a JavaExec
task that is configured to execute java -jar myproject-all.jar
.
It can be configured the same as any other JavaExec
task.
runShadow {
args 'foo'
}
4.2. Distributing the Shadow JAR
The Shadow plugin will also configure distribution tasks when in the presence of the application
plugin.
The plugin will create shadowDistZip
and shadowDistTar
which creates Zip and Tar distributions
respectively.
Each distribution will contain the shadowed JAR file along with the necessary start scripts to launch
the application.
Additionally, the plugin will create the installShadowDist
and startShadowScripts
tasks which stages the necessary
files for a distribution to build/install/<project name>-shadow/
.
5. Publishing Shadow JARs
5.1. Publishing with Maven-Publish Plugin
The Shadow plugin will automatically configure the necessary tasks in the presence of Gradle’s
maven-publish
plugin.
THe plugin will create and configure a software component named "shadow"
for use with the
publishing
block.
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'com.github.johnrengelman.shadow'
publishing {
publications {
shadow(MavenPublication) {
from components.shadow
}
}
repositories {
maven {
url "http://repo.myorg.com"
}
}
}
5.2. Publishing with Maven Plugin
The Shadow plugin will automatically configure the necessary tasks in the presence of Gradle’s
maven
plugin.
To publish the JAR, simply configure the publish location for the uploadShadow
task and execute it.
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'com.github.johnrengelman.shadow'
uploadShadow {
repositories {
mavenDeployer {
repository(url: "http://repo.myorg.com")
}
}
}
6. Using Shadow in Multi-Project Builds
When using Shadow in a multi-project build, project dependencies will be treated the same as
external dependencies.
That is a project dependency will be merged into the shadowJar
output of the project that
is applying the Shadow plugin.
6.1. Depending on the Shadow Jar from Another Project
In a multi-project build there may be one project that applies Shadow and another that
requires the shadowed JAR as a dependency.
In this case, use Gradle’s normal dependency declaration mechanism to depend on the shadow
configuration of the shadowed project.
dependencies {
compile project(path: 'api', configuration: 'shadow')
}
7. Using Shadow to Package Gradle Plugins
In some scenarios, writing a Gradle plugin can be problematic because your plugin may depend on a version that conflicts with the same dependency provided by the Gradle runtime. If this is the case, then you can utilize Shadow to relocate your dependencies to a different package name to avoid the collision.
Configuring the relocation has always been possible, but the build author is required to know all the package names
before hand. Shadow v2.0 corrects this by introducing a new task type ConfigureShadowRelocation
.
Tasks of this type are configured to target a an instance of a ShadowJar
task and run immediately before it.
The ConfigureShadowRelocation
task, scans the dependencies from the configurations specified on the associated
ShadowJar
task and collects the package names contained within them. It then configures relocation for these
packages using the specified prefix
on the associated ShadowJar
task.
While this is useful for developing Gradle plugins, nothing about the ConfigureShadowRelocation
task is tied to
Gradle projects. It can be used for standard Java or Groovy projects.
A simple Gradle plugin can use this feature by applying the shadow-plugin
plugin and configuring the dependencies
like so:
plugins {
id 'com.github.johnrengelman.shadow-plugin' version '1.0.0-SNAPSHOT'
id 'java'
}
dependencies {
shadow localGroovy()
shadow gradleApi()
compile 'org.jdom:jdom2:2.0.5'
compile 'org.ow2.asm:asm:5.0.3'
compile 'org.ow2.asm:asm-commons:5.0.3'
compile 'commons-io:commons-io:2.4'
compile 'org.apache.ant:ant:1.9.4'
compile 'org.codehaus.plexus:plexus-utils:2.0.6'
}
Note that the localGroovy()
and gradleApi()
dependencies are added to the shadow
configuration instead of the
normal compile
configuration. These 2 dependencies are provided by Gradle to compile your project but are ultimately
provided by the Gradle runtime when executing the plugin. Thus, it is not advisable to bundle these dependencies
with your plugin.
8. Change Log
v2.0.0 (Unreleased)
-
Breaking Change! Restrict Plugin to Gradle 3.0+
-
Breaking Change! Build with Java 7
-
Breaking Change! Updated
Transformer
interface to acceptTransformerContext
object instead of individual values -
Breaking Change! Updated
Relocator
interface to acceptRelocatePathContext
andRelocateClassContext
objects -
Breaking Change! Distribution tasks
distShadowZip
anddistShadowTar
have been removed and replaced with the standardshadowDistZip
andshadowDistTar
from the Gradle Distribution plugin. -
Breaking Change! The
installShadowApp
task has been removed and replaced with the standardinstallShadowDist
task from the Gradle Distribution plugin. -
Breaking Change! The new
installShadowDist
task outputs tobuild/install/<project name>-shadow
per the standard (formerly wasbuild/installShadow
) -
NEW Introducing
ConfigureShadowRelocation
task andcom.github.johnrengelman.shadow-plugin
plugin to automatically configure package relocation for Gradle plugins. -
NEW Integration with Gradle Build Scans. When running a
ShadowJar
task with Build Scans, custom values including dependencies merged anc package relocations are published in the scan. -
Build Shadow w/ Shadow. This will help prevent any future classpath conflicts with Gradle.
-
Replace
startShadowScripts
tasks with Gradle’s built-inCreateStartScripts
type. -
Build with Gradle 3.1
v1.2.4
-
Don’t resolve dependency configurations during config phase (Issue #128)
-
Build plugin with Gradle 2.14
-
Fix docs regarding inheriting Jar manifest (Issue #251)
-
Ethan Hall - Support projects that configure uploading to Ivy repositories (Pull Request #256)
-
Force task to depend on dependency configuration (Issue #152)
-
Do not explode ZIP files into shadow jar (Issue #196)
-
John Szakmeister - Preserve timestamps on merged jar entries (Pull Request #260)
v1.2.3
-
Support for Gradle 2.11-rc-1 (Issue #177)
-
Convert internal framework to Gradle TestKit
-
Fedor Korotkov - Use BufferedOutputStream when writing the Zip file (PR #171)
-
Haw-Bin Chai - Quote Jar path in Windows start script as it may contain spaces (PR #170)
-
Serban Iordache - Evaluate relocation specs when merging service descriptors (PR #165)
v1.2.2
-
Minecrell - Gradle 2.5 compatibility (Issue #147)
v1.2.1
-
Apply package relocations to dependency resources (Issue #114)
v1.2.0
-
Re-organize some code to remove need for forcing the Gradle API ClassLoader to allow the
org.apache.tools.zip
package. -
Upgrade JDOM library from 1.1 to 2.0.5 (change dependency from
jdom:jdom:1.1
toorg.jdom:jdom2:2.0.5
) (Issue #98) -
Convert ShadowJar.groovy to ShadowJar.java to workaround binary incompatibility introduced by Gradle 2.2 ((Issue #106)
-
Updated ASM library to
5.0.3
to support JDK8 (Issue #97) -
Allows for regex pattern matching in the
dependency
string when including/excluding (Issue #83) -
Apply package relocations to resource files (Issue #93)
v1.1.2
-
fix bug in
runShadow
where dependencies from theshadow
configuration are not available (Issue #94)
v1.1.1
-
Fix bug in
'createStartScripts'
task that was causing it to not execute'shadowJar'
task (Issue #90) -
Do not include
null
in ShadowJar Manifest'Class-Path'
value whenjar
task does not specify a value for it. (Issue #92) -
ShadowJar Manifest
'Class-Path'
should reference jars from'shadow'
config as relative to location ofshadowJar
output (Issue #91)
v1.1.0
-
Breaking Change! Fix leaking of
shadowJar.manifest
intojar.manifest
. (Issue #82) To simplify behavior, theshadowJar.appendManifest
method has been removed. Replace uses withshadowJar.manifest
-
ShadowTask
now has aconfigurations
property that is resolved to the files in the resolved configuration before being added to the copy spec. This allows for an easier implementation for filtering. The default 'shadowJar' task has the convention of adding the'runtime'
scope to this list. Manually created instances ofShadowTask
have no configurations added by default and can be configured by settingtask.configurations
. -
Properly configure integration with the
'maven'
plugin when added. When adding'maven'
the'uploadShadow'
task will now properly configure the POM dependencies by removing the'compile'
and'runtime'
configurations from the POM and adding the'shadow'
configuration as aRUNTIME
scope in the POM. This behavior matches the behavior when using the'maven-publish'
plugin. -
Matt Hurne - Allow
ServiceFileTransformer
to specify include/exclude patterns for files within the configured path to merge. -
Matt Hurne - Added
GroovyExtensionModuleTransformer
for merging Groovy Extension module descriptor files. The existingServiceFileTransformer
now excludes Groovy Extension Module descriptors by default. -
distShadowZip
anddistShadowZip
now contain the shadow library and run scripts instead of the default from the'application'
plugin (Issue #89)
v1.0.3
-
Make service files root path configurable for
ServiceFileTransformer
(Issue #72) -
Andres Almiray - Added PropertiesFileTransformer (Issue #73)
-
Brandon Kearby - Fixed StackOverflow when a cycle occurs in the resolved dependency graph (Issue #69)
-
Apply Transformers to project resources (Issue #70), Issue #71)
-
Do not drop non-class files from dependencies when relocation is enabled. Thanks to Minecrell for digging into this. (Issue #61)
-
Remove support for applying individual sub-plugins by Id (easier maintenance and cleaner presentation in Gradle Portal)
v1.0.2
-
Do not add an empty Class-Path attribute to the manifest when the
shadow
configuration contains no dependencies. -
runShadow
now registersshadowJar
as an input. Previously,runShadow
did not executeshadowJar
and an error occurred. -
Support Gradle 2.0 (Issue #66)
-
Do not override existing 'Class-Path' Manifest attribute settings from Jar configuration. Instead combine. (Issue #65)
v1.0.1
v1.0.0
-
Previously known as v0.9.0
-
All changes from 0.9.0-M1 to 0.9.0-M5
-
Properly configure the ShadowJar task inputs to observe the include/excludes from the
dependencies
block. This allows UP-TO-DATE checking to work properly when changing thedependencies
rules (Issue #54) -
Apply relocation remappings to classes and imports in source project (Issue #55)
-
Do not create directories in jar for source of remapped class, created directories in jar for destination of remapped classes (Issue #53)
v0.9.0-M5
-
Add commons-io to compile classpath
-
Update asm library to 4.1
v0.9.0-M4
-
Break plugin into multiple sub-plugins.
ShadowBasePlugin
is always applied.ShadowJavaPlugin
andShadowApplicationPlugin
are applied in reaction to applying thejava
andapplication
plugins respectively. -
Shadow does not applied
java
plugin automatically.java
orgroovy
must be applied in conjunction withshadow
. -
Moved artifact filtering to
dependencies {}
block underneathshadowJar
. This allows better include/exclude control for dependencies. -
Dependencies added to the
shadow
configuration are automatically added to theClass-Path
attribute in the manifest forshadowJar
-
Applying
application
plugin and settingsmainClassName
automatically configures theMain-Class
attribute in the manifest forshadowJar
-
runShadow
now utilizes the output of theshadowJar
and executes usingjava -jar <shadow jar file>
-
Start Scripts for shadow distribution now utilize
java -jar
to execute instead of placing all files on classpath and executing main class. -
Excluding/Including dependencies no longer includes transitive dependencies. All dependencies for inclusion/exclusion must be explicitly configured via a spec.
v0.9.0-M3
-
Use commons.io FilenameUtils to determine name of resolved jars for including/excluding
v0.9.0-M2
-
Added integration with
application
plugin to replace oldOutputSignedJars
task -
Fixed bug that resulted in duplicate file entries in the resulting Jar
-
Changed plugin id to 'com.github.johnrengelman.shadow' to support Gradle 2.x plugin infrastructure.
v0.9.0-M1
-
Rewrite based on Gradle Jar Task
-
ShadowJar
now extendsJar
-
Removed
signedCompile
andsignedRuntime
configurations in favor ofshadow
configuration -
Removed
OutputSignedJars
task
9. About This Project
I started this project in December of 2012. We were working on converting from a monolithic application into a the new hot jazz of "microservices" using Dropwizard. I had also just started learning about Gradle and I knew that the incremental build system it provided would benefit our development team greatly. Unfortunately, the closest thing that Gradle had to Maven’s Shade plugin was its ability to create application TARs and ZIPs.
So, Charlie Knudsen and myself set out to port the existing Shade code into a Gradle plugin.
This port is what existing up until the 0.9
milestone releases for Shadow.
It functioned, but it wasn’t idiomatic Gradle by any means.
Starting with 0.9, Shadow was rewritten from the ground up as standard Gradle plugin and leveraged as much of Gradle’s classes and concepts as possible. At the same time as the 0.9 release, Gradle was announcing the Gradle Plugin Portal and so Shadow was published there.
Shadow has had nearly ~900,000 downloads from Bintray and countless more from the Gradle Plugin Portal.


 Photography helps me capture the way I see things through my eyes.I have always been Amazed by the many beautiful things I see just walking around my neighborhood. So these 6 images that I've picked are some of my favorites because just walking around where I live I captured these Beautiful landscapes.
These 6 images below are images I took walking around the city. When I first saw them I thought wow what an amazing place to take this amazing shot. With some of them the way the lighting was hitting that object in the picture really helped that object really stand out . And with the others just the positioning of things looked like it would make an amazing picture.


Channel supplies the configuration for channel context client
type Channel interface { Client ChannelService() fab.ChannelService ChannelID() string }
ChannelProvider returns channel client context
type ChannelProvider func() (Channel, error)
Client supplies the configuration and signing identity to client objects.
type Client fab.ClientContext
ClientProvider returns client context
type ClientProvider func() (Client, error)
Local supplies the configuration for a local context client
type Local interface { Client LocalDiscoveryService() fab.DiscoveryService }
LocalProvider returns local client context
type LocalProvider func() (Local, error)
Providers represents the SDK configured providers context.
type Providers interface { core.Providers msp.Providers fab.Providers }


| ^a${value} Second(s) Recharge | 30
|
| ${value}% Chance of Activating | 8
|
| ${value} Second Duration | 10
|
| ${chance}% Chance of ${value}% Physical Resistance | [8.0, 10.0, 11.0, 13.0, 15.0, 16.0, 18.0, 20.0, 22.0, 23.0, 25.0, 27.0, 28.0, 30.0]% Chance of 100.0% Physical Resistance
|
| ${chance}% Chance of ${value}% Pierce Resistance | [8.0, 10.0, 11.0, 13.0, 15.0, 16.0, 18.0, 20.0, 22.0, 23.0, 25.0, 27.0, 28.0, 30.0]% Chance of 100.0% Pierce Resistance
|
| +${value}% Defensive Ability | 5 7 9 11 13 15 17 18 20 22 24 26 28 30
|
| MaxLevel | 10
|
| UltimateLevel | 14
|


Fur-ever friends! Cheetah cub and dog have an adorable sleepover
CINCINNATI -- Fur-ever friends!
Video from the zoo shows the unlikely best pals, rescue dog Remus and baby cheetah Kris, cuddling up together during their "BFF sleepover."
RELATED:Cheetah cub and rescue pup become best friends
The animals were brought together as part of a program run by the zoo, which pairs dogs with solo cheetahs for companionship. They say sometimes cheetahs aren't born into large litters, so those who are on their own would spend time with rescue dogs.
See more stories about cute animals.


--- layout: default title: Home ---
Hi, I am Sworup Shakya. I am a Web Developer from Kathmandu Nepal. My passion is music, sports and literature. I love building interesting web applications.
I have been working in the field for more than 10 years. I have worked with various programming languages and frameworks during my career on both back-end and front-end technologies.
I started my career as a Flash ActionScript developer, working for more than 5 years developing frameworks for puzzle game logic and developing stand-alone flash websites. Then I moved on to working with PHP and am very proficient with raw PHP, Wordpress, CodeIgniter and Laravel. For a brief time for one of my employers, I worked with ASP.net MVC 3.
Currently I am working at Sustainable Solutions Nepal holding the position of Senior Programmer. Since, last few years I have been specifically working with React, React Native, Node.js and 4D Database Language.
You can contact me here.


Madrasah's admission form
Do you want to be part of Al-furqoon? If yes, here is the way to
apply
- Click on proceed and fill the form.
- Then, press the submit button, and wait while the page loads.
- Make sure the input data is/are correct.
- Printing of form is required for reference purpose, and payment of
requested charges before printing the filled form.
- After completing the registration, kndly visit the Madrasah @ No. 17, Oluwakemi
Mosque, Olodo, Sabo, Sagamu, Ogun state.


A channel to discuss trading. For useful links and more info click the pinned messages to the right.
100 messages
Before 05-Dec-19 12:00 AM
infotech-al18-Apr-19 01:43 PM
yeah BTC for the win, but thats like buying bonds and fixed income and just waiting, where is the fun?
PHBA206118-Apr-19 01:43 PM
There are already some implementations of Plasma on Ethereum
so yes, Ethereum can scale, the real question is to what degree(edited)
infotech-al18-Apr-19 01:43 PM
@Markus KMD is my largest bag after BTC
just need to diversify a little more
Markus18-Apr-19 01:43 PM
then imo eth classic is better bet then eth itself
more potential to grow
infotech-al18-Apr-19 01:44 PM
i thought that also, but the ETH train is already run away, ETC is left standing at the station, it will never come close to the hype of ETH in my opinion
Ludom18-Apr-19 01:44 PM
Eth classic is dead
No devs
infotech-al18-Apr-19 01:45 PM
strictly speaking in trading terms
Ludom18-Apr-19 01:45 PM
I don't really trade.
Markus18-Apr-19 01:45 PM
when is ETH going to update so that u can stake ETH?
infotech-al18-Apr-19 01:45 PM
i do more buy and hodl anyway, i just a bot for some trading
Ludom18-Apr-19 01:45 PM
I didn't came in crypto for the money. I was here for the exciting projects and the fun
The money came because I was in the good place at the right moment.(edited)
infotech-al18-Apr-19 01:46 PM
I hate the word shilling, but i am a strong advocate for KMD on twitter
i came in for both
the money and the fun
this is the most fun i have in tech since i started in tech, KMD is the real deal and hope it continues people need to see more of this tech.
Ludom18-Apr-19 01:47 PM
I was in crypto before Eth
infotech-al18-Apr-19 01:47 PM
wow
Markus18-Apr-19 01:47 PM
any1 know what is current status on NEM? did they get the funding to keep going?

Markus18-Apr-19 01:49 PM
ouch
infotech-al18-Apr-19 01:49 PM
wasnt much
but still learned my lesson!
lol
Ludom18-Apr-19 01:50 PM
I remember to trade the token of James on the asset exchange of Nxt
It was fun
infotech-al18-Apr-19 01:52 PM
fun is just beginning, next bull run will be lots of fun, because people FOMO in
it will be crazy
Markus18-Apr-19 01:52 PM
fomo will start when its time for parabolic rise
infotech-al18-Apr-19 01:53 PM
BNB started their own chain
lots of things happening in this space, so hard to keep up
jl777c18-Apr-19 01:53 PM
having a single road for all traffic in a city, good idea or bad?
infotech-al18-Apr-19 01:53 PM
bad idea for sure
Markus18-Apr-19 01:53 PM
horrible
jl777c18-Apr-19 01:54 PM
having a single chain for all smartcontracts, good idea or bad?
infotech-al18-Apr-19 01:54 PM
bad for sure lol
Markus18-Apr-19 01:54 PM
who have that
jl777c18-Apr-19 01:54 PM
sharding will arrive 6 months after LN
infotech-al18-Apr-19 01:54 PM
love the socratic method! lol
jl777c18-Apr-19 01:54 PM
it is just common sense
infotech-al18-Apr-19 01:54 PM
true
jl777c18-Apr-19 01:55 PM
everybody stuck in a traffic jam for hours, instantly knows that if there are many roads with more capacity than cars, no problem
once there are more cars than the roads can handle, problems
infotech-al18-Apr-19 01:55 PM
so you dont think ETH will be around longer, i am saying there is room for the tech and for the price to go back to $1k
jl777c18-Apr-19 01:55 PM
i didnt say anything about longevity or price
i just asked about good idea or bad
is the boeing max 737 automatic controls a good idea or bad?
infotech-al18-Apr-19 01:56 PM
true indeed
jl777c18-Apr-19 01:56 PM
having a complex solution to a problem creates the near certainity of disaster
Ludom18-Apr-19 01:56 PM
+1
Markus18-Apr-19 01:56 PM
but boeing max had some software problem i quess thats why those 2 crashes happened
jl777c18-Apr-19 01:57 PM
if the problem was simple, then there wouldnt have been a software problem
maybe having oversized engines on a small plane, just creates instability?
and all the sharding proposals remind me of unscrambling the omelette problem
not that it is impossible, it is just very very difficult and unlike to work well
the eggs taste really bad after being unscrambled
infotech-al18-Apr-19 02:00 PM
now im not validated anymore
jl777c18-Apr-19 02:00 PM
sharding also shards the hashrate
shard it 100x and each shard gets 1% the hashrate
Markus18-Apr-19 02:00 PM
I like the way JL explain and compare technical stuff with real life situations
jl777c18-Apr-19 02:00 PM
maybe they can add dPoW though
there is a lot of needless jargon in crypto
PHBA206118-Apr-19 02:01 PM
afaik Ethereum already has some Plasma implementations as scaling solutions(edited)
jl777c18-Apr-19 02:01 PM
most of it is people trying to convince you how smart they are
bitcoin has LN
i think 100 BTC of capacity?
Markus18-Apr-19 02:01 PM
depends how many nodes running if im not wrong?
not sure
jl777c18-Apr-19 02:02 PM
i dont know a way to have a single road be able to allow millions of cars on it without traffic jams
i do know how to have 1000 roads with million cars on it to have no traffic problems
in fact, it is easy to imagine the two cases and instantly know that a single chain for all is just not a good idea
and what is sharding?
it is splitting things into different subchains
but they all need to interact in some realtime? fashion and prevent double spends in all possible cases to be as secure as the main chain
i dont even bother to try to solve such very difficult problems
i prefer changing the problem into a simpler one
since I am a simple C programmer
2
3
infotech-al18-Apr-19 02:04 PM
jl777c18-Apr-19 02:04 PM
gotta be simple enough to fully understand it, otherwise any implementation will have bugs


{% extends 'shared/base.html' %} {% block content %} Registration form Name Location Type of professional Interior designer Product designer Visualizer Other Tell us about yourself Username Password Repeat password Register Already have an account? Login here. {% endblock %}
Already have an account? Login here.


Use the gfsh
command-line utility to configure your Apache Geode cluster (also called a “distributed system”). The cluster configuration service persists the cluster configurations and distributes the configurations to members of the cluster. There are also several additional ways to configure a cluster.
Use gfsh
to configure regions, disk stores, members, and other Geode objects.
You can also use gfsh
to start and stop locators, servers, and Geode monitoring tools. As you execute these commands, the cluster configuration service persists the configuration. When new members join the cluster, the service distributes the configuration to the new members.
gfsh
is the recommended means of configuring and managing your Apache Geode cluster, however you can still configure many aspects of a cluster using the older methods of the cache.xml and gemfire.properties files. See cache.xml and the Reference for configuration parameters. You can also configure some aspects of a cluster using a Java API. See Managing Apache Geode.
Overview of the Cluster Configuration Service
The Apache Geode cluster configuration service persists cluster configurations created by
gfsh
commands to the locators in a cluster and distributes the configurations to members of the cluster.Tutorial—Creating and Using a Cluster Configuration
A short walk-through that uses a single computer to demonstrate how to use
gfsh
to create a cluster configuration for a Geode cluster.Deploying Application JARs to Apache Geode Members
You can dynamically deploy your application JAR files to specific members or to all members in your distributed system. Geode automatically keeps track of JAR file versions; autoloads the deployed JAR files to the CLASSPATH; and auto-registers any functions that the JAR contains.
-
Apache Geode allows you to organize your distributed system members into logical member groups.
Exporting and Importing Cluster Configurations
The cluster configuration service exports and imports configurations created using
gfsh
for an entire Apache Geode cluster.Cluster Configuration Files and Troubleshooting
When you use the cluster configuration service in Geode, you can examine the generated configuration files in the
cluster_config
directory on the locator.gfsh
saves configuration files at the cluster-level and at the individual group-level.Loading Existing Configuration Files into Cluster Configuration
To load an existing cache.xml or gemfire.properties configuration file into a new cluster, use the
--load-cluster-configuration-from-dir
parameter when starting up the locator.Using gfsh to Manage a Remote Cluster Over HTTP or HTTPS
You can connect
gfsh
via HTTP or HTTPS to a remote cluster and manage the cluster usinggfsh
commands.Deploying Configuration Files without the Cluster Configuration Service
You can deploy your Apache Geode configuration files in your system directory structure or in jar files. You determine how you want to deploy your configuration files and set them up accordingly.
Starting Up and Shutting Down Your System
Determine the proper startup and shutdown procedures, and write your startup and shutdown scripts.
Running Geode Locator Processes
The locator is a Geode process that tells new, connecting members where running members are located and provides load balancing for server use.
Running Geode Server Processes
A Geode server is a process that runs as a long-lived, configurable member of a client/server system.
-
Geode output files are optional and can become quite large. Work with your system administrator to determine where to place them to avoid interfering with other system activities.
-
You can configure and limit port usage for situations that involve firewalls, for example, between client-server or server-server connections.


input
type checkbox
elements are rendered by default as square boxes that are checked (ticked) when activated, like you might see in an official government paper form.
input
type radio
elements are generally used in radio groups—collections of radio buttons describing a set of related options.
ods-options
elements support either radio
or checkbox
use cases.
Narrow
Default radio button group
Radio button group, horizontal
option (limit 3 min breakpoint-narrow)
Radio button group, horizontal
option ignored due to option limit (3)
Radio button group with option set to checked
Radio button group set disabled
Radio button group with error
Default checkbox group
Checkbox group, horizontal
option (limit 3 min breakpoint-narrow)
Checkbox group, horizontal
option ignored due to option limit
Checkbox group with option set to checked
Checkbox group set disabled
Checkbox group with error
Light dom version of the radio group
Light dom version of checkbox


Jimmie Johnson's call to quit NASCAR 'not a retirement from racing'
by Nick de GrootJimmie Johnson will not retire from racing when he leaves the NASCAR Cup Series at the end of the 2020 season, although he has ruled out an IndyCar switch.
The seven-time Cup Series champion, who has 83 wins to his name, announced on Wednesday he will leave the #48 Hendrick Motorsports squad at the end of next season.
Johnson started his Cup Series career in 2001 with the same team, and has only competed in select sportscar outings, including the Daytona 24 Hours, away from his Cup commitments.
He has driven other machinery, most recently in a car swap with Fernando Alonso last year in which he drove a 2013 McLaren MP4-28.
Despite confirming his NASCAR retirement would not be the end of his racing career, 44-year-old Johnson said he has not thought about other categories since the announcement.
"This is not a retirement from driving race cars," Johnson said.
"This is slowing down from 38 weekends a year and you certainly know the stress and pressure, that grind that it takes."
He added: "I would come back and drive Cup cars for Rick [Hendrick], without a doubt, all options are open, honestly, except IndyCar and fast ovals."
Johnson said he has not been in touch with any teams in any other categories and, when asked if he favoured any category above another, replied: "No, nothing now. I haven't even thought about it."
With one year left of Cup competition, Johnson said his focus was on ending his winless streak, which stretches over two years, and reaching the final four of next year's championship.
"If you're in that championship four, at Phoenix now, you've got a shot," he said. "And that is absolutely the goal for next year.
"I have the fire. Our team is getting stronger.
"I think Hendrick Motorsports as a whole; we've had a great evolution through the course of 2019.
"We have some new things coming our way for 2020. And just pulling back and looking at the opportunity this company has in 2020, and then myself, with it being my final full-time year, that's a special opportunity."
Johnson insisted his winless streak had not played a part in his decision to retire, adding: "Truthfully, it had very little implication on me making this decision."


Great web applications don't require instruction manuals or lots of text, they are self explanatory.


CFITSIO supports reading and writing FITS images or table columns containing 64-bit integer data values. Support for 64-bit integers was added to the official FITS Standard in December 2005. FITS 64-bit images have BITPIX = 64, and the 64-bit binary table columns have TFORMn = 'K'. CFITSIO also supports the 'Q' variable-length array table column format which is analogous to the 'P' column format except that the array descriptor is stored as a pair of 64-bit integers.
For the convenience of C programmers, the fitsio.h include file defines (with a typedef statement) the 'LONGLONG' datatype to be equivalent to an appropriate 64-bit integer datatype on each platform. Since there is currently no universal standard for the name of the 64-bit integer datatype (it might be defined as 'long long', 'long', or '__int64' depending on the platform) C programmers may prefer to use the 'LONGLONG' datatype when declaring or allocating 64-bit integer quantities when writing code which needs to run on multiple platforms. Note that CFITSIO will implicitly convert the datatype when reading or writing FITS 64-bit integer images and columns with data arrays of a different integer or floating point datatype, but there is an increased risk of loss of numerical precision or numerical overflow in this case.


{% extends 'sqli-base.html' %} {% set title = 'SQL INSERT injection' %} {% block instructions %}
Use SQL injection to insert a new user into the database.
The users table has one column.


Villagers: 5
Wood: 0
Stone: 0
Bronze: 0
Iron: 0
Steel: 0
Food: 200
Houses: 3
Armor: 0
Shields: 0
Weapons: 0
Technology Level: 0
Available Villagers: 5
Farms: 0
Lumber Camp: 0
Mines: 0
Total Defense: 5


Note: This only shows latitude and longitude(latlng) because for exact address I'd need to implement some proprietary third party api which will convert latlng to plain address And i dont want to send your coordinates to them because "I care about your privacy!". But if you want you can do it yourself. For that, one of many sites is https://www.latlong.net/Show-Latitude-Longitude.html
Know Your Location Trail
So, Whats location trail?
Location trail refers to a time stamped list of locations of a device which can be found using the GPS.
This is open source project to demonstate how the location traling works, you can take a look at source code by visiting repo hosted on github. (Link is at top right corner)Press this button to begin locating your location.
Note: It require GPS to track location, So make sure your location services are turned on.


Integrate new Datasets¶
This document provides a brief overview how to integrate a new benchmarking dataset.
We provide two classes that the new dataset needs to inherit from:
DataSample
DiagnosticDataset
Create new Data Samples¶
Each sample of a dataset is represented as an object of DataSample
.
It stores all the relevant information, like the id’s for the question and image, the tokenized question, the corresponding answer,
and the path to the image.
The following code block contains an exemplary DataSample
class MyDataSample(DataSample):
def __init__(self,
question_id: str,
question: str,
answers: Dict[str, float],
image_id: str,
image_path: str) -> None:
super().__init__(question_id,
question,
answers,
image_id,
image_path)
# add your question preprocessing function
self._question = preprocess_question(question)
@property
def image(self) -> np.ndarray:
if isinstance(self._img, type(None)):
self._img = load_img(self._image_path)
return self._img
@image.setter
def image(self, image: np.ndarray):
self._img = image
# reset image features, since image updated
self._img_feats = None
@property
def question_tokenized(self) -> List[str]:
return self._question.split()
Create new Diagnostic Datasets¶
An object of DiagnosticDataset
requires the path to the image directory, a name for the dataset, and a dictionary
that contains a mapping of classifier index to the natural language answer string.
The _load_data()
function needs to be rewritten to match the desired format the dataset comes in.
The data
property should be a list with objects of MyDataSample
for each data entry from the original data format.
The following code block contains an exemplary DiagnosticDataset
.
from vqa_benchmarking_backend.utils.vocab import Vocabulary
from my_datasample import MyDataSample
class MyDataset(DiagnosticDataset):
def __init__(self,
question_file: str,
img_dir: str,
idx2ans: Dict[int, str],
name: str) -> None:
self.img_dir = img_dir
self.idx2ans = idx2ans
self.name = name
self.data, self.qid_to_sample, self.q_vocab, self.a_vocab = self._load_data(question_file)
def _load_data(self, question_file: str) -> Tuple[List[DataSample], Dict[str, DataSample], Vocabulary, Vocabulary]:
data = []
qid_to_sample = {}
answer_vocab = Vocabulary(itos={}, stoi={})
question_vocab = Vocabulary(itos={}, stoi={})
# load questions
ques = json.load(open(question_file))
for qid in tqdm(ques):
iid = str(ques[qid]['imageId'])
sample = MyDataSample(question_id=qid,
question=ques[qid]['question'],
answers={ques[qid]['answer']: 1.0},
image_id=iid,
image_path=os.path.join(self.img_dir, f"{iid}.jpg"))
answer_vocab.add_token(ques[qid]['answer'])
for token in sample.question_tokenized:
question_vocab.add_token(token)
qid_to_sample[qid] = sample
data.append(qid_to_sample[qid])
return data, qid_to_sample, question_vocab, answer_vocab
def __getitem__(self, index) -> DataSample:
return self.data[index]
def label_from_class(self, class_index: int) -> str:
return self.a_vocab.itos(class_index)
def word_in_vocab(self, word: str) -> bool:
return self.q_vocab.exists(word)
def __len__(self):
return len(self.data)
def get_name(self) -> str:
# Needed for file caching
return self.name
def index_to_question_id(self, index) -> str:
return self.data[index].question_id
def class_idx_to_answer(self, class_idx: int) -> Union[str, None]:
if isinstance(next(iter(self.idx2ans.keys())), int):
if class_idx in self.idx2ans:
return self.idx2ans[class_idx]
else:
if str(class_idx) in self.idx2ans:
return self.idx2ans[str(class_idx)]
return None


Vote On Future Items
Shop Our Catalog
- Select an item from our catalog and indicate how many you would like to purchase
- Once you've made your selection, click the "Add to Cart" button
- When you are ready to purchase, click the "Cart" link above to view your cart and check out


System Of A Down
Login
SYSTEM OF A DOWN (SELF TITLED)
Suite-Pee
Know
Sugar
Suggestions
Spiders
DDevel
Soil
War?
Mind
Peephole
CUBErt
Darts
P.L.U.C.K. (Politically Lying, Unholy, Cowardly Killers)
Playing : P.L.U.C.K. (Politically Lying, Unholy, Cowardly Killers)
Your browser does not support the audio element.
Toxicity
Prison Song
Needles
Deer Dance
Jet Pilot
X
Chop Suey!
Bounce
Forest
ATWA ("Air Trees Water Animals")
Science
Shimmy
Toxicity
Psycho
Aerials
Playing: Chop Suey!
Your browser does not support the audio element.
Steal This Album!
Chic 'N' Stu
Innervision
Bubbles
Boom!

Mezmerize
Soldier Side - Intro
B.Y.O.B. ("Bring Your Own Bombs")
Revenga
Cigaro
Radio/Video
This Cocaine Makes Me Feel Like I'm on This Song
Violent Pornography
Question!
Sad Statue
Old School Hollywood
Lost in Hollywood
Playing: This Cocaine Makes Me Feel Like I'm On This Song
Your browser does not support the audio element.

Protect The Land EP
Protect The Land
Genecidal Humanoidz
Playing: Genecidal Humanoidz
Your browser does not support the audio element.


Left side: paths to which access can be granted.
Right side: emails of users that can access the selected path.
Enter * to allow everyone access without login.
You can enter multiple emails at once separated by ;
Granting access to a path gives also access to all sub-paths unless a more specific access control rule is defined. The more specific rule overwrites a more generic one.
visit a location in a
separate tab.
compose a notification about a
shared location.
remove an access control
list for a path (left) or remove a user (right).
Move a mouse over a user to quickly check which locations the user
can access (marked with ).
grant a user access to
the currently active location.
compose a notification
about locations shared with a user.
remove a user and disallow
the removed user access to all locations.
Customizes a page shown to not authenticated users.
Set a field to an empty string to revert the field to its default value. HTML tags are not interpreted.
marks changed, but not
yet saved fields. When clicked, reverts the changes.
A list of addresses (protocol://domain[:optional port]) that can be used to access the site. Requests from addresses that are not on the list are rejected.
If https://example.org is on the list and http://example.org is not, requests to http://example.org will be redirected to https://example.org.
It is safe to add http://localhost[:port] to communicate with wwwhisper from a local machine.
visit an address in a
separate tab.
remove an address.


{% extends 'base.html' %} {% block title %}{{ block.super }}: Incomplete{% endblock %} {% block backToDashboard %} {% endblock %} {% block content %}
Some divorces are more complicated than others, and not everyone should use this online tool. So let's start by asking you a few questions to make sure that this website is right for your situation.


First, the basics.
Headings set your default page size
Add your four mochi images from your tutorial here.
Let's make an unordered list. These are three places I've traveled to.
And now, one in order.
Sometimes you want to draw attention to something in a line of text.
Sometimes you want to strongly emphasize something in the text.
Sometimes you want to do both.
Soft line breaks can't wrap anything.
Neither can image tags, or hard lines.
Add a hard line under here.
This page probably doesn't look great - we'll learn how to hook it to CSS next week.


|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface PathIterator
The PathIterator
interface provides the mechanism
for objects that implement the Shape
interface to return the geometry of their boundary by allowing
a caller to retrieve the path of that boundary a segment at a
time. This interface allows these objects to retrieve the path of
their boundary a segment at a time by using 1st through 3rd order
Bézier curves, which are lines and quadratic or cubic
Bézier splines.
Multiple subpaths can be expressed by using a "MOVETO" segment to create a discontinuity in the geometry to move from the end of one subpath to the beginning of the next.
Each subpath can be closed manually by ending the last segment in
the subpath on the same coordinate as the beginning "MOVETO" segment
for that subpath or by using a "CLOSE" segment to append a line
segment from the last point back to the first.
Be aware that manually closing an outline as opposed to using a
"CLOSE" segment to close the path might result in different line
style decorations being used at the end points of the subpath.
For example, the BasicStroke
object
uses a line "JOIN" decoration to connect the first and last points
if a "CLOSE" segment is encountered, whereas simply ending the path
on the same coordinate as the beginning coordinate results in line
"CAP" decorations being used at the ends.
Shape
,
BasicStroke
| Field Summary | |
|---|---|
static int |
SEG_CLOSE
The segment type constant that specifies that the preceding subpath should be closed by appending a line segment back to the point corresponding to the most recent SEG_MOVETO. |
static int |
SEG_CUBICTO
The segment type constant for the set of 3 points that specify a cubic parametric curve to be drawn from the most recently specified point. |
static int |
SEG_LINETO
The segment type constant for a point that specifies the end point of a line to be drawn from the most recently specified point. |
static int |
SEG_MOVETO
The segment type constant for a point that specifies the starting location for a new subpath. |
static int |
SEG_QUADTO
The segment type constant for the pair of points that specify a quadratic parametric curve to be drawn from the most recently specified point. |
static int |
WIND_EVEN_ODD
The winding rule constant for specifying an even-odd rule for determining the interior of a path. |
static int |
WIND_NON_ZERO
The winding rule constant for specifying a non-zero rule for determining the interior of a path. |
| Method Summary | |
|---|---|
int |
currentSegment(double[] coords)
Returns the coordinates and type of the current path segment in the iteration. |
int |
currentSegment(float[] coords)
Returns the coordinates and type of the current path segment in the iteration. |
int |
getWindingRule()
Returns the winding rule for determining the interior of the path. |
boolean |
isDone()
Tests if the iteration is complete. |
void |
next()
Moves the iterator to the next segment of the path forwards along the primary direction of traversal as long as there are more points in that direction. |
| Field Detail |
|---|
static final int WIND_EVEN_ODD
static final int WIND_NON_ZERO
static final int SEG_MOVETO
static final int SEG_LINETO
static final int SEG_QUADTO
(t=[0..1])
using
the most recently specified (current) point (CP),
the first control point (P1),
and the final interpolated control point (P2).
The parametric control equation for this curve is:
P(t) = B(2,0)*CP + B(2,1)*P1 + B(2,2)*P2 0 <= t <= 1 B(n,m) = mth coefficient of nth degree Bernstein polynomial = C(n,m) * t^(m) * (1 - t)^(n-m) C(n,m) = Combinations of n things, taken m at a time = n! / (m! * (n-m)!)
static final int SEG_CUBICTO
(t=[0..1])
using
the most recently specified (current) point (CP),
the first control point (P1),
the second control point (P2),
and the final interpolated control point (P3).
The parametric control equation for this curve is:
P(t) = B(3,0)*CP + B(3,1)*P1 + B(3,2)*P2 + B(3,3)*P3 0 <= t <= 1 B(n,m) = mth coefficient of nth degree Bernstein polynomial = C(n,m) * t^(m) * (1 - t)^(n-m) C(n,m) = Combinations of n things, taken m at a time = n! / (m! * (n-m)!)This form of curve is commonly known as a Bézier curve.
static final int SEG_CLOSE
| Method Detail |
|---|
int getWindingRule()
WIND_EVEN_ODD
,
WIND_NON_ZERO
boolean isDone()
true
if all the segments have
been read; false
otherwise.void next()
int currentSegment(float[] coords)
coords
- an array that holds the data returned from
this method
SEG_MOVETO
,
SEG_LINETO
,
SEG_QUADTO
,
SEG_CUBICTO
,
SEG_CLOSE
int currentSegment(double[] coords)
coords
- an array that holds the data returned from
this method
SEG_MOVETO
,
SEG_LINETO
,
SEG_QUADTO
,
SEG_CUBICTO
,
SEG_CLOSE
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Copyright © 2004, 2010 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.


{% extends 'layout.html' %} {% block layout-content %}
Showing the current enrollments for {{ semester }}.


Class: InstanceCollection
| Defined in: | src/mozart/model-instancecollection.coffee |
| Inherits: | MztObject |
Overview
InstanceCollection is the abstract base class for all relation objects.
For more information, see http://www.mozart.io/guides/understanding_relations
Direct Known Subclasses
ManyToManyCollection, ManyToManyPolyCollection, ManyToManyPolyReverseCollection, OneToManyCollection, OneToManyPolyCollection
Constant Summary
Constants inherited from MztObject
Instance Method Summary
- - (integer) count() Bound The number of items in the collection
- - (object) allAsMap() Bound All the items in the collection as a map of id -> item
- - (array) all() All the items in the collection as an array
- - (void) subscribeEvents(models) Bound Subscribe to create, update and destroy events on the supplied models
- - (void) unsubscribeEvents(models) Bound Unsubscribe to create, update and destroy events on the supplied models
Inherited Method Summary
Methods inherited from MztObject
.include, .extend, .create, #constructor, #toString, #get, #set, #subscribe, #subscribeOnce, #publish, #unsubscribe, #release
Instance Method Details
- (integer) count() (bound)
The number of items in the collection
- (object) allAsMap() (bound)
All the items in the collection as a map of id -> item
- (array) all()
All the items in the collection as an array
- (void) subscribeEvents(models) (bound)
Subscribe to create, update and destroy events on the supplied models
- (void) unsubscribeEvents(models) (bound)
Unsubscribe to create, update and destroy events on the supplied models


Gautam Adani, Ajay Piramal Strong Contenders For DHFL; Apollo Also In Fray
by IANSThe Gautam Adani-led Group and the Piramal Group are among the major contenders for the crisis-hit Dewan Housing Finance Corporation (DHFL), sources said.
Further, Apollo is also said to be in the fray to take over the troubled company, after the Reserve Bank of India (RBI) on Wednesday (20 November) said that it would initiate insolvency proceedings for the resolution of the company.
The RBI also superseded the Board of Directors of DHFL owing to governance concerns and defaults by DHFL in meeting various payment obligations.
The central bank also appointed R. Subramaniakumar, ex-MD and CEO of Indian Overseas Bank, as the administrator of DHFL under Section 45-IE (2) of the Reserve Bank of India Act, 1934.
With the RBI's decision, DHFL is set to become the first non-banking financial company (NBFC) to be referred to the National Company Law Tribunal (NCLT) under new rules notified by the government.
(This story has been published from a wire agency feed without modifications to the text. Only the headline has been changed.)


M.S.A
Home
Movies
Series
Anime
Favorite
Add
About Us
Name :
YearOfProduction :
catogary:
movie
series
anime
Type:
Please insert the URL of photo:


|
Games Task Scheduler (GTS)
A multi-processor scheduling framework for games engines
|
Inherits gts::Task.
Public Member Functions | |
| ParallelFibContinuationTask (uint32_t l, uint32_t r, uint64_t *sum) | |
| virtual Task * | execute (gts::TaskContext const &) override |
| Public Member Functions inherited from gts::Task | |
| GTS_INLINE void | addChildTaskWithoutRef (Task *pChild) |
| GTS_INLINE void | addChildTaskWithRef (Task *pChild, gts::memory_order order=gts::memory_order::seq_cst) |
| GTS_INLINE void | setContinuationTask (Task *pContinuation) |
| GTS_INLINE void | recycle () |
| void | waitForAll () |
| void | spawnAndWaitForAll (Task *pChild) |
| GTS_INLINE void | setAffinity (uint32_t workerIdx) |
| GTS_INLINE int32_t | addRef (int32_t count=1, gts::memory_order order=gts::memory_order::seq_cst) |
| GTS_INLINE int32_t | removeRef (int32_t count=1, gts::memory_order order=gts::memory_order::seq_cst) |
| GTS_INLINE void | setRef (int32_t count, gts::memory_order order=gts::memory_order::seq_cst) |
| GTS_INLINE void | setName (const char *name) |
| GTS_INLINE int32_t | refCount (gts::memory_order order=gts::memory_order::acquire) const |
| GTS_INLINE uint32_t | getAffinity () const |
| GTS_INLINE bool | isStolen () const |
| GTS_INLINE Task * | parent () |
| GTS_INLINE const char * | name () const |
Public Attributes | |
| uint64_t | l |
| uint64_t | r |
| uint64_t * | sum |


Multiple channel monetization technique to deliver maximum eCPM to publishers !
Get best demand for your video inventory
A Stop over for all your Advertising requirements to both Advertiser and Pubisher. As a platform we support wide range of formats like plain text, Banner ads, Performance Campaign, Video ads and interactive ads.
Reach your audience wherever they are on the internet, Mobile, Desktop, App, Social Media. We guarantee best results through Vertical channel targeting, behavioral targeting, content targeting, Retargeting, Social Media targeting, Geo- Targeting, gender targeting and much more. Flexible and fully-customizable ads to meet your needs World wide inventory for all your advertising requirement either on CPC, CPM, CPL, Mailers and CPV model. Do maximum branding through Innovative ad format like Overlay, Page takeover, Skinning and expandable Ads.
Monetize your inventory with multichannel monetization technic. Optimize your inventory via search, mobile, video, Pop-under, Overlay, banners, and so on. Enjoy industry-high payouts and best eCPM. Access live support and personalized account management
Space Technologies is formed by group of well experienced group digital advertising Professionals to explore new possibilities in digital advertising to give maximum reach to advertisers and give best possible eCPM to publishers.


As it's essential for the pizzagna, it's possible to set background the color on the all its layers.
Using Structure layer, you can set KPI tiles default color.
For that, you have to use WidgetTypesService
, as in the example.
Path for setting the default color - "tiles.properties.template.properties.widgetData.backgroundColor"
It's possible to specify the tile color on the widget configuration
layer config.
Picking the color from the UI using KPI configurator, the background color is set on this layer.
It's also possible to set the color on the data
layer,
for that the dataSource should return backgroundColor
property in the data object
and KPI tile will receive that.
It's possible to configure the background color so that it will have different value depending on the received value.
In order to do that, you have to configure the KpiColorPrioritizer
.
To do that, put the KpiColorPrioritizer
in the providers
sections.
Also, you can configure the color rules for that. You have to configure following properties for each
comparisonType
- type of the value comparison,
value
- value to compare with
color
- color to set
There're default comparators:
">"
- a > b comparison"<"
- a < b comparison">="
- a >= b comparison"<="
- a <= b comparison"=="
- a == b comparison
You can also use custom comparators, in case you want to have another value comparison logic.
To use custom formatters, use KpiColorComparatorsRegistryService
.
It's highly recommended to put this logic in the module.
For example, this is how to configure not equal comparator:
Note: KpiColorComparatorsRegistryService
is provided in root
,
if you want to isolate comparators, please declare it in the desired providers
section.
By default, KPI color pickers have a predefined set of colors.
You can use DEFAULT_KPI_BACKGROUND_COLORS
variable if you need.
To use a custom color pallette, you have to set it to the pizzagna using the WidgetTypesService
.
To set the pallette to the Description section, use WellKnownPathKey.TileDescriptionBackgroundColors
path.
To set the pallette to the Background Color Rules section, use WellKnownPathKey.TileBackgroundColorRulesBackgroundColors
path.
Check the example code for more details.


Leave this blank unless you are having issues with webhook events failing to trigger.
In some rare cases, the URL that Gitea uses in webhook events may not be the same as the URL that Jenkins uses
to access Gitea. For example, if Jenkins needs to access the Gitea web interface through a reverse proxy but
regular users access Gitea directly.
If this is the case, then provide the Server URL that Gitea publishes in the webhook events. To determine this URL
you can inspect an event in the Gitea Web UI. The event will look something like:
{
...
"repository":{
...
"full_name": "example/reponame",
...
"html_url": "http://git.example.org:3000/example/reponame",
...
},
...
}
You are looking for the repository/html_url
value and you should remove the
repository/full_name
part at the end to determine the Alias URL to specify, i.e. using the example
payload above, the alias URL would be http://git.example.org:3000/


Sterling supports Gomez after England defender booed by Wembley fans
Raheem Sterling has criticised England fans who booed Joe Gomez during the 7-0 rout of Montenegro at Wembley.
Forward Sterling missed the victory which secured the Three Lions’ passage to Euro 2020 after his skirmish with Gomez at St George’s Park on Monday.
Liverpool defender Gomez was jeered when he came on in the second half, leaving Manchester City star Sterling unhappy in the stands.
Sterling tweeted after the match: “To all the England fans, I wanted to leave things as it was but tonight I have to speak again.
“It was hard for me to see my team-mate get booed for something that was my fault. Joe hasn’t done anything wrong and for me to see someone who keeps his head down and work hard…
“Especially after a difficult week for him to be booed when he came on tonight was wrong. I’ve taken full responsibility and accepted the consequence. I felt as though I had to say this, get home safe every one.”
READ MORE
Euro 2020 wrap: England, France, Turkey and the Czech Republic secure qualification


You can work out as little or as much as you want and only pay when you go to the gym. With FitStew there are never any long term commitments or contracts.
Multiple Workouts
Multiple Locations


Abhilash's Page of Interests
Welcome to my page of interests.
Below mentioned are the things I like to do.
Watch
Anime
,
Movies
.
Play online multiplayer games.
Learn
Java
and
Android Application Development
.
Here are a list of my favorite things -
Favorite Fruit
Top 5 favorite Anime
Erased: A Town Without Me
Death Parade
Devil is a part timer
DanMachi
The Dusk Maiden of Dawn


--- layout: post status: publish published: true title: Podcast 4.28 - "...this just in." author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 7698 wordpress_url: http://ivyenvy.com/?p=7698 date: '2012-07-30 22:10:26 +0000' date_gmt: '2012-07-31 03:10:26 +0000' categories: - Podcast - Trades tags: - Cardinals - Geovany Soto - Mark Prior - Peoria Chiefs - Ryan Dempster - Javier Baez - Anthony Rizzo - Jorge Soler - Albert Almora - Zach Lee - Cubs hats - Walk-off Celebration - plate-mob comments: - id: 5518 author: Ivy Envy » Trade Deadline 2012 Wrap-Up author_email: '' author_url: http://ivyenvy.com/?p=7700 date: '2012-07-31 15:47:40 +0000' date_gmt: '2012-07-31 20:47:40 +0000' content: "[...] we sat down to record Episode 4.28 of the Ivy Envy Podcast Monday night, we wondered if Theo and Jed would allow the trade deadline to pass today without [...]" ---
I believe this episode is the first time we've experienced a Cubs player traded during a recording, and there appeared to be two players traded. We start off by talking about what we witnessed from Javier Baez in Peoria on Sunday. We comment on the plate-mob celebration after Anthony Rizzo's walk-off home run against the Cardinals and our feelings on these types of celebrations.
Ryan Dempster rejects a trade to the Braves and we talk about this situation and the impact that move had on the Cubs hopes of getting some talent in return. We talk about a few other players that could (and are) traded.
Then, we look at some questions from listeners. We discuss the idea of the Cubs tanking the season. Michael from Galesburg brings up Mark Prior and we re-live that whole situation. DeRose gives us a whole show's-worth of material involving Almora, Soler, Dempster, Zach Lee, Soto, the #10 in the outfield grass and Cubs hats and how they are designed and styled.
Kurt gives us his scary stat of the week and we pick a winner for this week's caption contest. Then things get interesting with some moves and we bail so we can pay attention to the game.


I've currently got an emonTx and a Nanode RF base (running the multinode sketch), transmitting to emoncms.org, which has been in service for several years.
I'm slowly getting round to implementing some of my home automation ideas and now have another Nanode RF recieving all RFM12B transmissions and spitting them to serial, which is then read and pushed into MQTT topics (and then there are some subscribers to push that data into Redis, MySQL etc).
What I want to do next, is have a subscriber to MQTT, which collects data since the last transmission, and periodically sends it up to emoncms.org - like the multinode_bulksend sketch does, as with 28 room nodes transmitting every 60s + emonTx every 5s, the current base will be making constant HTTP requests to emoncms.org.
Will only sending to emoncms.org every 20s, 30s or even 60s affect my electricity data much?
Why was 5s chosen for the emonTx?
If it's getting transmitted up to emoncms.org less often, I can increase the interval on the emonTx too, to extend battery life and ensure it's not hogging the 868mhz frequency so much!
Incidentally, is there a simple explanation anywhere of how emonTx is calculating the kWh and kWh/d counters from the incoming emonTx data? - i'd like to be able to calculate the same locally from the mqtt topic.
Thanks!
Ian
PS: So many feed times in emoncms.org now - any pointers on what to read to catch up on what the different types are? - and any good reads / recommendations on data storage of sensor data on mass?
Re: emonTx Transmit Interval & electricity calculations
Hello Ian, to answer your last question first, I've made a start on documentation that tries to explain in a fair bit of detail the difference between the different engines and their development history linked from the forum post here: http://openenergymonitor.org/emon/node/5319 (also linked from building blocks now)
If you can move the kwh calculation to your emontx that would certainly mean you could post less often without loosing accuracy on your accumulated and daily kwh figures. Its good to do this anyway.
Here are the three lines used in the emontx example here to do this: https://github.com/openenergymonitor/emonTxFirmware/blob/master/emonTxV3...
joules_CT1 += tx_data.realPower_CT1 * time_interval;
tx_data.wh_CT1 += joules_CT1 / 3600;
joules_CT1 = joules_CT1 % 3600;
If tx_data.wh_CT1 is a long and joules_CT1 is an integer joules_CT1 / 3600 whill be the equivalent of doing floor(joules_CT1 / 3600) and joules_CT1 % 3600 gives the remainder.
Re: emonTx Transmit Interval & electricity calculations
That's excellent - thanks Trystan!
Ian


This is the second panel of the basic tab example. This is the second panel of the basic tab example.
{% extend 'demo/base.html' rightmenu=True app_logo='Nuit BETA' %} {% block right_menu %} {% menu_section is_list=True title='Links!' %} {% menu_item always_display=True link='#' name='Bob' %} {% menu_item always_display=True link='#' name='Ben' %} {% menu_item always_display=True link='#' name='Bop' %} {% end_menu_section %} {% menu_section title='Other Stuff' %}
This is some other stuff.
{% end_menu_section %} {% endblock %} {% block title %}Introduction{% endblock %} {% block scripts %} {% endblock scripts %} {% block content %} {% set_active_menu 'introduction' %}This demo project is designed to demonstrate the UI capabilities of Nuit.
This is the first panel of the basic tab example. This is the first panel of the basic tab example.
This is the second panel of the basic tab example. This is the second panel of the basic tab example.
This is the third panel of the basic tab example. This is the third panel of the basic tab example.
This is the fourth panel of the basic tab example. This is the fourth panel of the basic tab example.


- childrenTarget - AdWords::V13::SiteSuggestionService::ChildrenTarget
- ethnicityTarget - AdWords::V13::SiteSuggestionService::EthnicityTarget
- genderTarget - AdWords::V13::SiteSuggestionService::GenderTarget
- maxAgeRange - AdWords::V13::SiteSuggestionService::AgeRange
- maxHouseholdIncomeRange - AdWords::V13::SiteSuggestionService::HouseholdIncomeRange
- minAgeRange - AdWords::V13::SiteSuggestionService::AgeRange
- minHouseholdIncomeRange - AdWords::V13::SiteSuggestionService::HouseholdIncomeRange
Methods
- N
Attributes
| [RW] | childrenTarget | |
| [RW] | ethnicityTarget | |
| [RW] | genderTarget | |
| [RW] | maxAgeRange | |
| [RW] | maxHouseholdIncomeRange | |
| [RW] | minAgeRange | |
| [RW] | minHouseholdIncomeRange |
Class Public methods
new(childrenTarget = nil, ethnicityTarget = nil, genderTarget = nil, maxAgeRange = nil, maxHouseholdIncomeRange = nil, minAgeRange = nil, minHouseholdIncomeRange = nil)
Source: show
# File lib/adwords4r/v13/SiteSuggestionService.rb, line 76 def initialize(childrenTarget = nil, ethnicityTarget = nil, genderTarget = nil, maxAgeRange = nil, maxHouseholdIncomeRange = nil, minAgeRange = nil, minHouseholdIncomeRange = nil) @childrenTarget = childrenTarget @ethnicityTarget = ethnicityTarget @genderTarget = genderTarget @maxAgeRange = maxAgeRange @maxHouseholdIncomeRange = maxHouseholdIncomeRange @minAgeRange = minAgeRange @minHouseholdIncomeRange = minHouseholdIncomeRange end