1. Introduction
Given that Groovy sits directly on top of Java, Groovy can leverage the tremendous amount of work already done for JMX with Java. In addition, Groovy provides a GroovyMBean
class which makes an MBean look like a normal Groovy object. This simplifies Groovy code for interacting with MBeans. For example, the following code:
println server.getAttribute(beanName, 'Age')
server.setAttribute(beanName, new Attribute('Name', 'New name'))
Object[] params = [5, 20]
String[] signature = [Integer.TYPE, Integer.TYPE]
println server.invoke(beanName, 'add', params, signature)
can be simplified to:
def mbean = new GroovyMBean(server, beanName)
println mbean.Age
mbean.Name = 'New name'
println mbean.add(5, 20)
The remainder of this page shows you how to:
-
Monitor the JVM using MXBeans
-
Monitor Apache Tomcat and display statistics
-
Monitor Oracle OC4J and display information
-
Monitor BEA WebLogic and display information
-
Leverage Spring’s MBean annotation support to export your Groovy beans as MBeans
2. Monitoring the JVM
MBeans are not accessed directly by an application but are managed by a repository called an MBean server. Java 5 and above includes a special MBean server called the platform MBean server, which is built into the JVM. Platform MBeans are registered in this server using unique names.
You can monitor the JVM through its platform MBeans with the following code:
import java.lang.management.*
def os = ManagementFactory.operatingSystemMXBean
println """OPERATING SYSTEM:
\tarchitecture = $os.arch
\tname = $os.name
\tversion = $os.version
\tprocessors = $os.availableProcessors
"""
def rt = ManagementFactory.runtimeMXBean
println """RUNTIME:
\tname = $rt.name
\tspec name = $rt.specName
\tvendor = $rt.specVendor
\tspec version = $rt.specVersion
\tmanagement spec version = $rt.managementSpecVersion
"""
def cl = ManagementFactory.classLoadingMXBean
println """CLASS LOADING SYSTEM:
\tisVerbose = ${cl.isVerbose()}
\tloadedClassCount = $cl.loadedClassCount
\ttotalLoadedClassCount = $cl.totalLoadedClassCount
\tunloadedClassCount = $cl.unloadedClassCount
"""
def comp = ManagementFactory.compilationMXBean
println """COMPILATION:
\ttotalCompilationTime = $comp.totalCompilationTime
"""
def mem = ManagementFactory.memoryMXBean
def heapUsage = mem.heapMemoryUsage
def nonHeapUsage = mem.nonHeapMemoryUsage
println """MEMORY:
HEAP STORAGE:
\tcommitted = $heapUsage.committed
\tinit = $heapUsage.init
\tmax = $heapUsage.max
\tused = $heapUsage.used
NON-HEAP STORAGE:
\tcommitted = $nonHeapUsage.committed
\tinit = $nonHeapUsage.init
\tmax = $nonHeapUsage.max
\tused = $nonHeapUsage.used
"""
ManagementFactory.memoryPoolMXBeans.each { mp ->
println "\tname: " + mp.name
String[] mmnames = mp.memoryManagerNames
mmnames.each{ mmname ->
println "\t\tManager Name: $mmname"
}
println "\t\tmtype = $mp.type"
println "\t\tUsage threshold supported = " + mp.isUsageThresholdSupported()
}
println()
def td = ManagementFactory.threadMXBean
println "THREADS:"
td.allThreadIds.each { tid ->
println "\tThread name = ${td.getThreadInfo(tid).threadName}"
}
println()
println "GARBAGE COLLECTION:"
ManagementFactory.garbageCollectorMXBeans.each { gc ->
println "\tname = $gc.name"
println "\t\tcollection count = $gc.collectionCount"
println "\t\tcollection time = $gc.collectionTime"
String[] mpoolNames = gc.memoryPoolNames
mpoolNames.each { mpoolName ->
println "\t\tmpool name = $mpoolName"
}
}
When run, you will see something like this:
OPERATING SYSTEM: architecture = x86 name = Windows XP version = 5.1 processors = 2 RUNTIME: name = 620@LYREBIRD spec name = Java Virtual Machine Specification vendor = Sun Microsystems Inc. spec version = 1.0 management spec version = 1.0 CLASS LOADING SYSTEM: isVerbose = false loadedClassCount = 919 totalLoadedClassCount = 919 unloadedClassCount = 0 COMPILATION: totalCompilationTime = 91 MEMORY: HEAP STORAGE: committed = 3108864 init = 0 max = 66650112 used = 1994728 NON-HEAP STORAGE: committed = 9240576 init = 8585216 max = 100663296 used = 5897880 name: Code Cache Manager Name: CodeCacheManager mtype = Non-heap memory Usage threshold supported = true name: Eden Space Manager Name: MarkSweepCompact Manager Name: Copy mtype = Heap memory Usage threshold supported = false name: Survivor Space Manager Name: MarkSweepCompact Manager Name: Copy mtype = Heap memory Usage threshold supported = false name: Tenured Gen Manager Name: MarkSweepCompact mtype = Heap memory Usage threshold supported = true name: Perm Gen Manager Name: MarkSweepCompact mtype = Non-heap memory Usage threshold supported = true THREADS: Thread name = Monitor Ctrl-Break Thread name = Signal Dispatcher Thread name = Finalizer Thread name = Reference Handler Thread name = main GARBAGE COLLECTION: name = Copy collection count = 60 collection time = 141 mpool name = Eden Space mpool name = Survivor Space name = MarkSweepCompact collection count = 0 collection time = 0 mpool name = Eden Space mpool name = Survivor Space mpool name = Tenured Gen mpool name = Perm Gen
3. Monitoring Tomcat
First start up Tomcat with JMX monitoring enabled by setting the following:
set JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004\
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
You can do this in your startup script and may choose any available port, we used 9004.
The following code uses JMX to discover the available MBeans in the running Tomcat, determine which are web modules, extract the processing time for each web module and displays the result in a graph using JFreeChart:
import groovy.swing.SwingBuilder
import javax.management.ObjectName
import javax.management.remote.JMXConnectorFactory as JmxFactory
import javax.management.remote.JMXServiceURL as JmxUrl
import javax.swing.WindowConstants as WC
import org.jfree.chart.ChartFactory
import org.jfree.data.category.DefaultCategoryDataset as Dataset
import org.jfree.chart.plot.PlotOrientation as Orientation
def serverUrl = 'service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi'
def server = JmxFactory.connect(new JmxUrl(serverUrl)).MBeanServerConnection
def serverInfo = new GroovyMBean(server, 'Catalina:type=Server').serverInfo
println "Connected to: $serverInfo"
def query = new ObjectName('Catalina:*')
String[] allNames = server.queryNames(query, null)
def modules = allNames.findAll { name ->
name.contains('j2eeType=WebModule')
}.collect{ new GroovyMBean(server, it) }
println "Found ${modules.size()} web modules. Processing ..."
def dataset = new Dataset()
modules.each { m ->
println m.name()
dataset.addValue m.processingTime, 0, m.path
}
def labels = ['Time per Module', 'Module', 'Time']
def options = [false, true, true]
def chart = ChartFactory.createBarChart(*labels, dataset,
Orientation.VERTICAL, *options)
def swing = new SwingBuilder()
def frame = swing.frame(title:'Catalina Module Processing Time', defaultCloseOperation:WC.EXIT_ON_CLOSE) {
panel(id:'canvas') { rigidArea(width:600, height:250) }
}
frame.pack()
frame.show()
chart.draw(swing.canvas.graphics, swing.canvas.bounds)
When run, we will see a trace of progress being made:
Connected to: Apache Tomcat/6.0.13 Found 5 web modules. Processing ... Catalina:j2eeType=WebModule,name=//localhost/,J2EEApplication=none,J2EEServer=none Catalina:j2eeType=WebModule,name=//localhost/host-manager,J2EEApplication=none,J2EEServer=none Catalina:j2eeType=WebModule,name=//localhost/docs,J2EEApplication=none,J2EEServer=none Catalina:j2eeType=WebModule,name=//localhost/examples,J2EEApplication=none,J2EEServer=none Catalina:j2eeType=WebModule,name=//localhost/manager,J2EEApplication=none,J2EEServer=none
The output will look like this:
Note: if you get errors running this script, see the Troubleshooting section below.
4. OC4J Example
Here is a script to access OC4J and print out some information about the server, its runtime and (as an example) the configured JMS destinations:
import javax.management.remote.*
import oracle.oc4j.admin.jmx.remote.api.JMXConnectorConstant
def serverUrl = new JMXServiceURL('service:jmx:rmi://localhost:23791')
def serverPath = 'oc4j:j2eeType=J2EEServer,name=standalone'
def jvmPath = 'oc4j:j2eeType=JVM,name=single,J2EEServer=standalone'
def provider = 'oracle.oc4j.admin.jmx.remote'
def credentials = [
(JMXConnectorConstant.CREDENTIALS_LOGIN_KEY): 'oc4jadmin',
(JMXConnectorConstant.CREDENTIALS_PASSWORD_KEY): 'admin'
]
def env = [
(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES): provider,
(JMXConnector.CREDENTIALS): credentials
]
def server = JmxFactory.connect(serverUrl, env).MBeanServerConnection
def serverInfo = new GroovyMBean(server, serverPath)
def jvmInfo = new GroovyMBean(server, jvmPath)
println """Connected to $serverInfo.node. \
Server started ${new Date(serverInfo.startTime)}.
OC4J version: $serverInfo.serverVersion from $serverInfo.serverVendor
JVM version: $jvmInfo.javaVersion from $jvmInfo.javaVendor
Memory usage: $jvmInfo.freeMemory bytes free, \
$jvmInfo.totalMemory bytes total
"""
def query = new javax.management.ObjectName('oc4j:*')
String[] allNames = server.queryNames(query, null)
def dests = allNames.findAll { name ->
name.contains('j2eeType=JMSDestinationResource')
}.collect { new GroovyMBean(server, it) }
println "Found ${dests.size()} JMS destinations. Listing ..."
dests.each { d -> println "$d.name: $d.location" }
Here is the result of running this script:
Connected to LYREBIRD. Server started Thu May 31 21:04:54 EST 2007. OC4J version: <IP_ADDRESS>.0 from Oracle Corp. JVM version: 1.6.0_01 from Sun Microsystems Inc. Memory usage: 8709976 bytes free, 25153536 bytes total Found 5 JMS destinations. Listing ... Demo Queue: jms/demoQueue Demo Topic: jms/demoTopic jms/Oc4jJmsExceptionQueue: jms/Oc4jJmsExceptionQueue jms/RAExceptionQueue: jms/RAExceptionQueue OracleASRouter_store: OracleASRouter_store
As a slight variation, this script displays a pie chart of memory usage using JFreeChart:
import org.jfree.chart.ChartFactory
import javax.swing.WindowConstants as WC
import javax.management.remote.*
import oracle.oc4j.admin.jmx.remote.api.JMXConnectorConstant
def url = 'service:jmx:rmi://localhost:23791'
def credentials = [:]
credentials[JMXConnectorConstant.CREDENTIALS_LOGIN_KEY] = "oc4jadmin"
credentials[JMXConnectorConstant.CREDENTIALS_PASSWORD_KEY] = "password"
def env = [:]
env[JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES] = "oracle.oc4j.admin.jmx.remote"
env[JMXConnector.CREDENTIALS] = credentials
def server = JMXConnectorFactory.connect(new JMXServiceURL(url), env).MBeanServerConnection
def jvmInfo = new GroovyMBean(server, 'oc4j:j2eeType=JVM,name=single,J2EEServer=standalone')
def piedata = new org.jfree.data.general.DefaultPieDataset()
piedata.setValue "Free", jvmInfo.freeMemory
piedata.setValue "Used", jvmInfo.totalMemory - jvmInfo.freeMemory
def options = [true, true, true]
def chart = ChartFactory.createPieChart('OC4J Memory Usage', piedata, *options)
chart.backgroundPaint = java.awt.Color.white
def swing = new groovy.swing.SwingBuilder()
def frame = swing.frame(title:'OC4J Memory Usage', defaultCloseOperation:WC.EXIT_ON_CLOSE) {
panel(id:'canvas') { rigidArea(width:350, height:250) }
}
frame.pack()
frame.show()
chart.draw(swing.canvas.graphics, swing.canvas.bounds)
Which looks like:
5. WebLogic Example
This script prints out information about the server followed by information about JMS Destinations (as an example). Many other mbeans are available.
import javax.management.remote.*
import javax.management.*
import javax.naming.Context
def urlRuntime = '/jndi/weblogic.management.mbeanservers.runtime'
def urlBase = 'service:jmx:t3://localhost:7001'
def serviceURL = new JMXServiceURL(urlBase + urlRuntime)
def h = new Hashtable()
h.put(Context.SECURITY_PRINCIPAL, 'weblogic')
h.put(Context.SECURITY_CREDENTIALS, 'weblogic')
h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, 'weblogic.management.remote')
def server = JMXConnectorFactory.connect(serviceURL, h).MBeanServerConnection
def domainName = new ObjectName('com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean')
def rtName = server.getAttribute(domainName, 'ServerRuntime')
def rt = new GroovyMBean(server, rtName)
println "Server: name=$rt.Name, state=$rt.State, version=$rt.WeblogicVersion"
def destFilter = Query.match(Query.attr('Type'), Query.value('JMSDestinationRuntime'))
server.queryNames(new ObjectName('com.bea:*'), destFilter).each { name ->
def jms = new GroovyMBean(server, name)
println "JMS Destination: name=$jms.Name, type=$jms.DestinationType, messages=$jms.MessagesReceivedCount"
}
Here is the output:
Server: name=examplesServer, state=RUNNING, version=WebLogic Server 10.0 Wed May 9 18:10:27 EDT 2007 933139 JMS Destination: name=examples-jms!exampleTopic, type=Topic, messages=0 JMS Destination: name=examples-jms!exampleQueue, type=Queue, messages=0 JMS Destination: name=examples-jms!jms/MULTIDATASOURCE_MDB_QUEUE, type=Queue, messages=0 JMS Destination: name=examplesJMSServer!examplesJMSServer.TemporaryQueue0, type=Queue, messages=68 JMS Destination: name=examples-jms!quotes, type=Topic, messages=0 JMS Destination: name=examples-jms!weblogic.wsee.wseeExamplesDestinationQueue, type=Queue, messages=0 JMS Destination: name=examples-jms!weblogic.examples.ejb30.ExampleQueue, type=Queue, messages=0
6. Spring Example
You can also use Spring to automatically register beans as JMX aware.
Here is an example class (Calculator.groovy):
import org.springframework.jmx.export.annotation.*
@ManagedResource(objectName="bean:name=calcMBean", description="Calculator MBean")
public class Calculator {
private int invocations
@ManagedAttribute(description="The Invocation Attribute")
public int getInvocations() {
return invocations
}
private int base = 10
@ManagedAttribute(description="The Base to use when adding strings")
public int getBase() {
return base
}
@ManagedAttribute(description="The Base to use when adding strings")
public void setBase(int base) {
this.base = base
}
@ManagedOperation(description="Add two numbers")
@ManagedOperationParameters([
@ManagedOperationParameter(name="x", description="The first number"),
@ManagedOperationParameter(name="y", description="The second number")])
public int add(int x, int y) {
invocations++
return x + y
}
@ManagedOperation(description="Add two strings representing numbers of a particular base")
@ManagedOperationParameters([
@ManagedOperationParameter(name="x", description="The first number"),
@ManagedOperationParameter(name="y", description="The second number")])
public String addStrings(String x, String y) {
invocations++
def result = Integer.valueOf(x, base) + Integer.valueOf(y, base)
return Integer.toString(result, base)
}
}
Here is the Spring configuration file (beans.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mbeanServer"
class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="locateExistingServerIfPossible" value="true"/>
</bean>
<bean id="exporter"
class="org.springframework.jmx.export.MBeanExporter">
<property name="assembler" ref="assembler"/>
<property name="namingStrategy" ref="namingStrategy"/>
<property name="beans">
<map>
<entry key="bean:name=defaultCalcName" value-ref="calcBean"/>
</map>
</property>
<property name="server" ref="mbeanServer"/>
<property name="autodetect" value="true"/>
</bean>
<bean id="jmxAttributeSource"
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
<!-- will create management interface using annotation metadata -->
<bean id="assembler"
class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="jmxAttributeSource"/>
</bean>
<!-- will pick up the ObjectName from the annotation -->
<bean id="namingStrategy"
class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="jmxAttributeSource"/>
</bean>
<bean id="calcBean"
class="Calculator">
<property name="base" value="10"/>
</bean>
</beans>
Here is a script which uses this bean and configuration:
import org.springframework.context.support.ClassPathXmlApplicationContext
import java.lang.management.ManagementFactory
import javax.management.ObjectName
import javax.management.Attribute
// get normal bean
def ctx = new ClassPathXmlApplicationContext("beans.xml")
def calc = ctx.getBean("calcBean")
Thread.start {
// access bean via JMX, use a separate thread just to
// show that we could access remotely if we wanted
def server = ManagementFactory.platformMBeanServer
def mbean = new GroovyMBean(server, 'bean:name=calcMBean')
sleep 1000
assert 8 == mbean.add(7, 1)
mbean.Base = 8
assert '10' == mbean.addStrings('7', '1')
mbean.Base = 16
sleep 2000
println "Number of invocations: $mbean.Invocations"
println mbean
}
assert 15 == calc.add(9, 6)
assert '11' == calc.addStrings('10', '1')
sleep 2000
assert '20' == calc.addStrings('1f', '1')
And here is the resulting output:
Number of invocations: 5 MBean Name: bean:name=calcMBean Attributes: (rw) int Base (r) int Invocations Operations: int add(int x, int y) java.lang.String addStrings(java.lang.String x, java.lang.String y) int getInvocations() int getBase() void setBase(int p1)
You can even attach to the process while it is running with jconsole. It will look something like:
We started the Groovy application with the -Dcom.sun.management.jmxremote
JVM argument.
See also:
7. Troubleshooting
7.1. java.lang.SecurityException
If you get the following error, your container’s JMX access is password protected:
java.lang.SecurityException: Authentication failed! Credentials required
To fix that, add an environment with the credentials when connecting, like this (password has to be set before that):
def jmxEnv = null
if (password != null) {
jmxEnv = [(JMXConnector.CREDENTIALS): (String[])["monitor", password]]
}
def connector = JMXConnectorFactory.connect(new JMXServiceURL(serverUrl), jmxEnv)
Details for the software you are trying to monitor/manage may differ slightly. Check out the other examples using credentials above if appropriate (e.g. OC4J and WebLogic). If you still have troubles, you will have to consult the documentation for the software you are trying to monitor/manage for details on how to provide credentials.
8. JmxBuilder
JmxBuilder is a Groovy-based domain specific language for the Java Management Extension (JMX) API. It uses the builder pattern (FactoryBuilder) to create an internal DSL that facilitates the exposure of POJO’s and Groovy beans as management components via the MBean server. JmxBuilder hides the complexity of creating and exporting management beans via the JMX API and provides a set of natural Groovy constructs to interact with the JMX infrastructure.
8.1. Instantiating JmxBuilder
To start using JmxBuilder, simply make sure the jar file is on your class path. Then you can do the following in your code:
def jmx = new JmxBuilder()
That’s it! You are now ready to use the JmxBuilder.
NOTE
-
You can pass in an instance of your own MBeanServer to the builder (JmxBuilder(MBeanServer))
-
If no MBeanServer is specified, the builder instance will default to the underlying platform MBeanServer.
Once you have an instance of JmxBuilder, you are now ready to invoke any of its builder nodes.
8.2. JMX Connectors
Remote connectivity is a crucial part of the JMX architecture. JmxBuilder facilitates the creation of connector servers and connector clients with nimimal amount of coding.
8.2.1. Connector Server
JmxBuilder.connectoServer() supports the full Connector api syntax and will let you specify properties, override the URL, specify your own host, etc.
Syntax
jmx.connectorServer( protocol:"rmi", host:"...", port:1099, url:"...", properties:[ "authenticate":true|false, "passwordFile":"...", "accessFile":"...", "sslEnabled" : true | false // any valid connector property ] )
Note that the serverConnector node will accept four ServerConnector property aliases (authenticate, passwordFile,accessFile, and sslEnabled). You can use these aliases or provided any of the RMI-supported properties.
Example - Connector Server (see correction below)
jmx.connectorServer(port: 9000).start()
The snippet above returns an RMI connector that will start listening on port 9000. By default, the builder will internally generate URL "service:jmx:rmi:///jndi/rmi://localhost:9000/jmxrmi".
NOTE: Sadly you are as likely to get something like the following when attempting to run the previous snippet of code (example is incomplete, see below):
Caught: java.io.IOException: Cannot bind to URL [rmi://localhost:9000/jmxrmi]: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: ?????? java.net.ConnectException: Connection refused] ??
This occurs on Mac and Linux (CentOS 5) with Groovy 1.6 installed. Perhaps there were assumptions made about the configuration of the /etc/hosts file?
| The correct example is shown below. |
Connector Example (Corrected) - Connector Server
The example above does not create the RMI registry. So, in order to export, you have to first export the RMI object registry (make sure to import java.rmi.registry.LocateRegistry
).
import java.rmi.registry.LocateRegistry
//...
LocateRegistry.createRegistry(9000)
jmx.connectorServer(port: 9000).start()
8.2.2. Connector Client
JmxBuilder.connectorClient() node lets you create JMX connector client object to connect to a JMX MBean Server.
Syntax
jmx.connectorClient ( protocol:"rmi", host:"...", port:1099, url:"...", )
Example - Client Connector
Creating a connector client can be done just as easily. With one line of code, you can create an instance of a JMX Connector Client as shown below.
def client = jmx.connectorClient(port: 9000)
client.connect()
You can then access the MBeanServerConnection associated with the connector using:
client.getMBeanServerConnection()
8.3. JmxBuilder MBean Export
You can export a Java object or a Groovy object with minimal coding. JmxBuilder will even find and export dynamic Groovy methods injected at runtime.
8.3.1. Implicit vs Explicit Descriptors
When using the builder, you can let JmxBuilder implicitly generate all of your MBean descriptor info. This is useful when you want to write minimal code to quickly export your beans. You can also explicitly declare all descriptor info for the bean.  The JmxBuilder.export() Node
The JmxBuilder.export() node provides a container where all management entities to be exported to the MBeanServer are placed. You can place one or more bean() or timer() nodes as children of the export() node. JmxBuilder will automatically batch export the entities described by the nodes to the MBean server for management (see example below).
def beans = jmx.export {
bean(new Foo())
bean(new Bar())
bean(new SomeBar())
}
In the code snippet above, JmxBuilder.export() will export three management beans to the MBean server.
8.3.3. JmxBuilder.export() Syntax
JmxBuilder.export() node supports the registrationPolicy parameter to specify how JmxBuilder will behave to resolve bean name collision during MBean registration:
jmx.export(policy:"replace|ignore|error") or jmx.export(regPolicy:"replace|ignore|error")
-
replace - JmxBuilder.export() will replace any bean already registered with the MBean during export.
-
ignore - The bean being exported will be ignored if the same bean is already registered.
-
error - JmxBuilder.export() throws an error upon bean name collision during registration.
8.3.4. Integration with GroovyMBean Class
When you export an MBean to the MBeanServer, JmxBuilder will return an instance of GroovyMBean representing the management bean that have been exported by the builder. Nodes such as bean() and timer() will return an instances of GroovyMBean when they are invoked. The export() node returns an array of all of GroovyMBean[] representing all managed objects exported to the MBean server.
8.3.5. MBean Registration with JmxBuilder.bean()
This portion of this reference uses class RequestController to illustrate how to use JmxBuilder to export runtime management beans. The class is for illustration purpose and can be a POJO or a Groovy bean.
RequestController
class RequestController {
// constructors
RequestController() { super() }
RequestController(Map resource) { }
// attributes
boolean isStarted() { true }
int getRequestCount() { 0 }
int getResourceCount() { 0 }
void setRequestLimit(int limit) { }
int getRequestLimit() { 0 }
// operations
void start() { }
void stop() { }
void putResource(String name, Object resource) { }
void makeRequest(String res) { }
void makeRequest() { }
}
Implicit Export
As mentioned earlier, you can use JmxBuilder’s flexible syntax to export any POJO/POGO with no descriptor. The builder can automatically describe all aspects of the management beans using implicit defaults. These default values can easily be overridden as we’ll see in this in the next section.
The simplest way to export a POJO or POGO is listed below.
jmx.export {
bean(new RequestController(resource: "Hello World"))
}
What this does:
-
First, the JmxBuilder.export() node will export an MBean to the MBeanServer representing the declared POJO instance.
-
The builder will generate a default ObjectName for the MBean and all other MBean descriptor information.
-
JmxBuilder will automatically export all declared attributes (MBean getter/setters), constructors, and operations on the instance.
-
The exported attributes will have read-only visibility.
Remember, JmxBuilder.export() returns an array of GroovyMBean[] objects for all exported instances. So, once you call JmxBuilder.export(), you have immediate access to the underlying MBean proxy (via GroovyMBean).
8.3.6. JmxBuilder.bean() Syntax
The JmxBuilder.bean() node supports an extensive set of descriptors to describe your bean for management. The JMX MBeanServer uses these descriptors to expose meta data about the bean exposed for management.
jmx.export { bean( target:bean instance, name:ObjectName, desc:"...", attributes:"*", attributes:[] attributes:[ "AttrubuteName1","AttributeName2",...,"AttributeName_n" ] attributes:[ "AttributeName":"*", "AttributeName":[ desc:"...", defaultValue:value, writable:true|false, editable:true|false, onChange:{event-> // event handler} ] ], constructors:"*", constructors:[ "Constructor Name":[], "Constructor Name":[ "ParamType1","ParamType2,...,ParamType_n" ], "Constructor Name":[ desc:"...", params:[ "ParamType1":"*", "ParamType2":[desc:"...", name:"..."],..., "ParamType_n":[desc:"...", name:"..."] ] ] ], operations:"*", operations:[ "OperationName1", "OperationName2",...,"OperationNameN" ], operations:[ "OperationName1":"*", "OperationName2":[ "type1","type2,"type3" ] "OperationName3":[ desc:"...", params:[ "ParamType1":"*" "ParamType2":[desc:"...", name:"..."],..., "ParamType_n":[desc:"...", name:"..."] ], onInvoked:{event-> JmxBuilder.send(event:"", to:"")} ] ], listeners:[ "ListenerName1":[event: "...", from:ObjectName, call:{event->}], "ListenerName2":[event: "...", from:ObjectName, call:&methodPointer] ] ) }
Instead of describing the entire node, the following section explore each attribute separately.
8.3.7. Bean() Node - Specifying MBean ObjectName
Using the bean() node descriptors, you can specify your own MBean ObjectName.
def ctrl = new RequestController(resource:"Hello World")
def beans = jmx.export {
bean(target: ctrl, name: "jmx.tutorial:type=Object")
}
The ObjectName can be specified as a String or an instance of the ObjectName.
8.4. Bean() Node - Attribute Export
JMX attributes are the setters and getters on the underlying bean. The JmxBuilder.bean() node provides several ways to flexibly describe and export MBean attributes. You can combine them however you want to achieve any level of attribute visibility. Let’s take a look.
8.4.1. Export All Attributes with Wildcard "*"
The following code snippet will describe and export all attributes on the bean as read-only. JmxBuilder will use default values to describe the attributes that exported for management.
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(target: new RequestController(),
name: objName,
attributes: "*")
}
8.4.2. Export Attribute List
JmxBuilder will let you specify a list of attributes to export.
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(
target: new RequestController(),
name: objName,
attributes: ["Resource", "RequestCount"]
)
}
In the snippet above, only the "Resource" and "RequestCount" attributes will be exported. Again, since no descriptors are provided, JmxBuilder will use sensible defaults to describe the exported attributes.
8.4.3. Export Attribute with Explicit Descriptors
One of the strengths of JmxBuilder is its flexibility in describing MBean. With the builder you can describe all aspects of the MBeans attribute that you want to export to the MBeanServer (see syntax above).
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(
target: new RequestController(),
name: objName,
attributes: [
"Resource": [desc: "The resource to request.", readable: true, writable: true, defaultValue: "Hello"],
"RequestCount": "*"
]
)
}
In the snippet above, attribute "Resource" is fully-described using all supported descriptors (i.e. desc, readable, writable, defaultValue) for a JMX attribute. However, we use the wildcard to describe attribute RequestCount and it will be exported and described using defaults.
8.5. Bean() Node - Constructor Export
JmxBuilder supports the explicit description and export of constructors defined in the underlying bean. There are several options available when exporting constructors. You can combine them however you want to achieve the desired level of manageability.
8.5.1. Export all Constructors with "*"
You can use the builder’s special '""' notation to *export all constructors declared on the underlying bean. The builder will use default values to describe the MBean constructors.
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(
target: new RequestController(),
name: objName,
constructors: "*"
)
}
8.5.2. Export Constructors using Parameter Descriptor
JmxBuilder lets you target specific constructor to export by describing the parameter signature. This is useful when you have several constructors with different parameter signature and you want to export specific constructors.
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(
target: new RequestController(),
name: objName,
constructors: [
"RequestController": ["Object"]
]
)
}
Here, JmxBuilder will export a constructor that takes one parameter of type "Object". Again, JmxBuilder will use default values to fill in the description of the constructor and the parameters.
8.5.3. Export Constructor with Explicit Descriptors
JmxBuilder allows you to fully-describe the constructor that you want to target for export (see syntax above).
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(target: new RequestController(), name: objName,
constructors: [
"RequestController": [
desc: "Constructor takes param",
params: ["Object" : [name: "Resource", desc: "Resource for controller"]]
]
]
)
}
In the code above, JmxBuilder will target a constructor that takes one parameter for export to the MBeanServer. Notice how the constructor can be fully-described using all optional descriptor keys including parameter descriptors.
8.6. Bean() Node - Operation Export
Similar to constructors, JmxBuilder supports the description and export of MBean operations using a flexible notation (see above for syntax). You can combine these notations however you want to achieve the level of operation manageability desired.
8.6.1. Export All Operations with "*"
You can use the builder’s special '""'' notation to *export all operations defined on the bean to be exposed for management. The builder will use default descriptor values for the operations being exported.
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(
target: new RequestController(),
name: objName,
operations: "*"
)
}
In this snippet, JmxBuilder will export all bean operations and will use default values to describe them in the MBeanServer.
8.6.2. Export Operation List
JmxBuilder has a shorthand notation that lets you quickly target operations to be exported by providing a list of methods to export.
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(
target: new RequestController(),
name: objName,
operations: ["start", "stop"]
)
}
In the snippet above, the builder will only export methods start() and stop(). All other methods will be ignored. JmxBuilder will use default descriptor values to describe the operations being exported.
8.6.3. Export Operations by Signature
Using JmxBuilder, you can target methods to export for management using the methods’s parameter signature. This is useful when you want to distinguish methods with the same name that you want to export (i.e. stop() instead of stop(boolean)).
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(
target: new RequestController(),
name: objName,
operations: [
"makeRequest": ["String"]
]
)
}
In the snipet above, JmxBuilder would select method makeRequest(String) to be exported instead of the other version makeRequest() which takes no parameter. In this shorthand context, the signature is specified as a list of type (i.e. "String").
8.6.4. Export Operations with Explicit Descriptors
JmxBuilder supports detailed descriptors for bean operations. You can supply deep descriptor info about any operation on your bean including a name, description, method parameters, parameter type, and parameter description.
def objName = new ObjectName("jmx.tutorial:type=Object")
def beans = jmx.export {
bean(target: new RequestController(), name: objName,
operations: [
"start": [desc: "Starts request controller"],
"stop": [desc: "Stops the request controller"],
"setResource": [params: ["Object"]],
"makeRequest": [
desc: "Executes the request.",
params: [
"String": [name: "Resource", desc: "The resource to request"]
]
]
]
)
}
The snippet above shows all of the ways JmxBuilder allows you to describe an operation targeted for management:
-
Operations start() and stop() are described by the "desc" key (this is enough since there are no params).
-
In operation setResource() uses of a shorthand version of params: to describe the parameters for the method.
-
makeRequest() uses the the extended descriptor syntax to describe all aspects of the operation.
8.7. Embedding Descriptor
JmxBuilder supports the ability to embed descriptors directly in your Groovy class. So, instead of wrapping your description around the declared object (as we’ve seen here), you can embed your JMX descriptors directly in your class.
RequestControllerGroovy
class RequestControllerGroovy {
// attributes
boolean started
int requestCount
int resourceCount
int requestLimit
Map resources
// operations
void start() { }
void stop(){ }
void putResource(String name, Object resource) { }
void makeRequest(String res) { }
void makeRequest() { }
static descriptor = [
name: "jmx.builder:type=EmbeddedObject",
operations: ["start", "stop", "putResource"],
attributes: "*"
]
}
// export
jmx.export(
bean(new RequestControllerGroovy())
)
There are two things going on in the code above:
-
Groovy class RequestControllerGroovy is defined and includes a static descriptor member. That member is used to declare a JmxBuilder descriptor to describe member of the class targeted for JMX export.
-
The second part of the code shows how to use JmxBuilder to export that class for management.
8.8. Timer Export
JMX standards mandate that the implementation of the API makes available a timer service. Since JMX is a component-based architecture, timers provide an excellent signalling mechanism to communicate to registered listener components in the MBeanServer. JmxBuilder supports the creation and export of timers using the same easy syntax we’ve seen so far.
8.8.1. Timer Node Syntax
timer( name:ObjectName, event:"...", message:"...", data:dataValue startDate:"now"|dateValue period:"99d"|"99h"|"99m"|"99s"|99 occurrences:long )
The timer() node supports several attributes:
-
name: - Required The qualified JMX ObjectName instance (or String) for the timer.
-
event: - The JMX event type string that will be broadcast with every timing signal (default "jmx.builder.event").
-
message: - An optional string value that can be sent to listeners.
-
data: - An optional object that can be sent to listeners of timing signal.
-
startDate: - When to start timer. Set of valid values [ "now", date object ]. Default is "now"
-
period: - A timer’s period expressed as either a number of millisecond or time unit (day, hour, minute, second). See description below.
-
occurrences: - A number indicating the number of time to repeat timer. Default is forever.
8.8.2. Exporting a Timer
def timer = jmx.timer(name: "jmx.builder:type=Timer", event: "heartbeat", period: "1s")
timer.start()
This snippet above describes, creates, and exports a standard JMX Timer component. Here, the timer() node returns a GroovyMBean that represents the registered timer MBean in the MBeanServer.
An alternative way of exporting timers is within the JmxBuilder.export() node.
def beans = jmx.export {
timer(name: "jmx.builder:type=Timer1", event: "event.signal", period: "1s")
timer(name: "jmx.builder:type=Timer2", event: "event.log", period: "1s")
}
beans[0].start()
beans[1].start()
8.8.3. Timer Period
The timer() node supports a flexible notation for specifying the timer period values. You can specify the time in second, minutes, hour, and day. The default is millisecond.
-
timer(period: 100) = 100 millisecond
-
timer(period: "1s") = 1 second
-
timer(period: "1m") = 1 minute
-
timer(period: "1h") = 1 hour
-
timer(period: "1d") = 1 day
The node will automatically translate.
8.9. JmxBuilder and Events
An integral part of JMX is its event model. Registered management beans can communicate with each other by broadcasting events on the MBeanServer’s event bus. JmxBuilder provides several ways to easily listen and react to events broadcasted on the MBeanServer’s event bus. Developers can capture any event on the bus or throw their own to be consumed by other components registered on the MBeanServer.
8.9.1. Event Handling Closures
JmxBuilder leverages Groovy’s use of closures to provide simple, yet elegant, mean of reacting to JMX events. JmxBuilder supports two closure signatures:
Parameterless
callback = { ->
// event handling code here.
}
JmxBuilder executes the closure and passes no information about the event that was captured on the bus.
With Event Parameter
callback = { event ->
// event handling code
}
JmxBuilder will pass an "event" object to the closure using this format. The event object contains information about the event was intercepted so that it can be handled by the handler. The parameter will contain different set of info depending on the event that was captured.
8.9.2. Handling Attribute onChange Event
When describing attributes (see bean() node section above), you can provide a closure (or method pointer) for callback to be executed when the value of the attribute is updated on the exported MBean. This gives developers an opportunity to listen to and react to state changes on the MBean.
jmx.export {
bean(
target: new RequestController(), name: "jmx.tutorial:type=Object",
attributes: [
"Resource": [
readable: true, writable: true,
onChange: { e ->
println e.oldValue
println e.newValue
}
]
]
)
}
The sample snippet above shows how to specify an "onChange" callback closure when describing MBean attributes. In this sample code, whenever attribute "Resource" is updated via the exported MBean, the onChange event will be executed.
8.9.3. Attribute onChange Event Object
When handling the attribute onChange event, the handler closure will receive an event object with the following info:
-
event.oldValue - the previous attribute value before the change event.
-
event.newValue - the new value of the attribute after the change.
-
event.attribute - the name of the attribute on which the event occurred.
-
event.attributeType - the data type of the attribute that causes the event.
-
event.sequenceNumber - a numeric value representing the sequence number of event.
-
event.timeStamp - a time stamp for the event occurrence.
8.9.4. Handling Operation onCall Event
Similar to mbean attributes, JmxBuilder affords developers the ability to listen for operation invocation on an MBean registered in the MBeaServer. JmxBuilder accepts a callback closure that will be executed after the MBean method has invoked.
class EventHandler {
void handleStart(e){
println e
}
}
def handler = new EventHandler()
def beans = jmx.export {
bean(target: new RequestController(), name: "jmx.tutorial:type=Object",
operations: [
"start": [
desc:"Starts request controller",
onCall:handler.&handleStart
]
]
)
}
The snippet above shows how to declare an "onCall" closure to be used as listener when operation "start()" is invoked on the MBean. This sample uses the method pointer syntax to illustrate the versatility of JmxBuilder.
8.9.5. Operation onCall Event Object
When handling the operation onCall event, the callback closure will receive an event object with the following info:
-
event.event - the event type string that was broadcasted.
-
event.source - The object on which the method was invoked.
-
event.data - the data type of the attribute that causes the event.
-
event.sequenceNumber - a numeric value representing the sequence number of event.
-
event.timeStamp - a time stamp for the event occurrence.
8.10. Listener MBean
When you export an MBean with the bean() node, you can define events the MBean can listen and react to. The bean() node provides a "listeners:" attribute that lets you define event listeners that your bean can react to.
def beans = jmx.export {
timer(name: "jmx.builder:type=Timer", event: "heartbeat", period: "1s").start()
bean(target: new RequestController(), name: "jmx.tutorial:type=Object",
operations: "*",
listeners: [
heartbeat: [
from: "jmx.builder:type=Timer",
call: { e ->
println e
}
]
]
)
}
In the sample above, we see the syntax for adding listeners to an exported MBean.
-
Fist, a timer is exported and started.
-
Then an MBean is declared that will listen to the timer event and do something meaningful.
-
The "heartbeat:" name is arbitrary and has no correlation to the timer declared above.
-
The source of the event is specified using the "from:" attribute.
You can also specify an event type you are interested in receiving from a broadcaster (since a broadcaster can be emitting multiple events).
8.10.1. Listening to JMX Events
In some cases, you will want to create stand-alone event listeners (not attached to exported MBeans). JmxBuilder provides the Listener() node to let you create JMX listeners that can listen to MBeanServer events. This is useful when creating JMX client applications to monitor/manage JMX agents on remote JMX MBeanServers.
8.10.2. Listener Node Syntax
jmx.listener( event: "...", from: "object name" | ObjectName, call: { event-> } )
Here is the description of the listener() node attributes:
-
event: An optional string that identifies the JMX event type to listen for.
-
from (required): The JMX ObjectName of the component to listen to. This can be specified as a string or an instance of ObjectName
-
call: The closure to execute when the event is captured. This can also be specified as a Groovy method pointer.
Here is an example of JmxBuilder’s listener node:
jmx.timer(name: "jmx.builder:type=Timer", period: "1s").start()
jmx.listener(
from: "jmx.builder:type=Timer",
call: { e ->
println "beep..."
}
)
This example shows how you can use a stand alone listener (outside of an MBean export). Here, we export a timer with a 1 second resolution. Then, we specify a listener to that timer that will print "beep" every second.
8.11. Emitting JMX Events
JmxBuilder provides the tools needed to broadcast your own events on the MBeanServer’s event bus. There are no restrictions on the event type you can broadcast. You simply declare your emitter and the event type that you want to send, then broadcast your event at any time. Any registered component in the MBeanServer can register themselves to listen to your events.
8.11.1. Emitter Syntax
jmx.emitter(name:"Object:Name", event:"type")
The attributes for the node Emitter() can be summarized as follows:
-
name: an optional JMX ObjectName used to register your emitter in the MBeanServer. Default is jmx.builder:type=Emitter,name=Emitter@OBJECT_HASH_VALUE
-
event: an option string value that describes the JMX event type. Default is "jmx.builder.event.emitter".
8.11.2. Declare the Emitter
def emitter = jmx.emitter()
The snippet declares the emitter using implicit descriptor syntax. JmxBuilder will do the followings:
-
Create and register an emitter MBean with a default ObjectName.
-
Setup a default event type with value "jmx.builder.event.emitter".
-
Return a GroovyMBean representing the emitter.
As with other nodes in the builder, you can override all keys in the emitter() node. You can specify the ObjectName and the event type.


Hi I'm Michelle :) I'm a junior attending ALHS. During my free time I like to take pictures and hang out with my friends.
I also like to play Pubg and We Bare Bear.


Boris Johnson is least trusted politician, says John McDonnell – video
The shadow chancellor says he agrees with DUP's Arlene Foster that Johnson is 'a prime minister whose word cannot be trusted'. McDonnell compares Johnson to Donald Trump during a speech outlining Labour's plans for the first 100 days if the party wins the general election on 12 December • General election: McDonnell outlines first 100 days of Labour government – live news


| {{ stat }}: | {{ character.stats[stat.toLowerCase()] }} |
|---|
| {{ stat }}: | {{ character.stats[stat.toLowerCase()] }} |
|---|
Use this tool to level-up a character.
This character has been generated using {{ character.stats.method }} method.
Warning: These tools are for character GENERATION, not LEVEL-UPS. All of these methods will reset your current XP use.
Use point buy if you wish to use your own dice to roll random stats, there is a place to specify that the user rolled their own stats.


engineyard (Engine Yard, Inc.) Organization
- Name
- Engine Yard, Inc.
- Website/Blog
- http://www.engineyard.com/blog
- Location
- San Francisco, CA
- Member Since
- Jan 29, 2008
- 35 public repos
- 50 members
Public Repositories (35)
-
ey-cloud-recipes
Forked from subpoprecords/ey-cloud-recipes
A starter repo for custom chef recipes on EY's cloud platform
Last updated Wed Jul 07 11:12:07 -0700 2010
-
realweb
Easily runs a rack app for tests that hit web APIs
Last updated Sun Jul 04 12:44:06 -0700 2010
-
eycap
Engine Yard specific capistrano recipes
Last updated Mon Jun 28 13:49:23 -0700 2010
-
ey_cloud_stack
temporarily a vanilla rails222 app for testing
Last updated Fri Jun 25 15:26:52 -0700 2010
-
emacs-starter-kit
Forked from technomancy/emacs-starter-kit
All the code you need to get started, with an emphasis on dynamic languages.
Last updated Wed Jun 09 13:55:43 -0700 2010
-
rails_metrics
Engine for tracking various metrics related to a Rails 3 application
Last updated Wed Jun 09 07:45:57 -0700 2010
-
rails-dispatch-week-8-plugins
Last updated Thu May 27 15:58:55 -0700 2010
-
sous_chef
Last updated Tue May 11 10:32:52 -0700 2010
-
rails_dev_directory
Rails Development Directory
Last updated Mon May 10 16:07:21 -0700 2010
-
rails-2.2.2-app
Last updated Wed May 05 11:56:26 -0700 2010
-
chef-deploy
Forked from ezmobius/chef-deploy
Chef Resources and Providers for deploying ruby web apps without capistrano
Last updated Thu Apr 01 15:14:46 -0700 2010
-
rack-app
Last updated Mon Mar 08 18:09:25 -0800 2010
-
rails_metrics_example
An example Rails 3 application using the rails3-app-metrics plugin
Last updated Thu Mar 04 05:31:08 -0800 2010
-
empty-rails-235
Last updated Wed Feb 24 16:16:11 -0800 2010
-
sendgrid_api
Last updated Sun Jan 17 20:55:04 -0800 2010
-
resque
Forked from defunkt/resque
Resque is a Redis-backed library for creating background jobs, placing those jobs on multiple que...
Last updated Mon Jan 11 18:10:21 -0800 2010
-
vertebra
Top-level repository with the entire vertebra distribution
Last updated Mon Dec 07 00:59:57 -0800 2009
-
vertebra-rb
XMPP agent framework
Last updated Mon Dec 07 00:58:27 -0800 2009
-
oauth_provider
Forked from halorgium/oauth_provider
A library for assisting with making an OAuth provider
Last updated Tue Oct 13 19:36:53 -0700 2009
-
sappy
Forked from abcde/sappy
An API wrapper for SiteUptime
Last updated Wed Oct 07 15:47:45 -0700 2009
-
cucumber
Forked from aslakhellesoy/cucumber
BDD that talks to domain experts first and code second
Last updated Thu Sep 17 19:19:35 -0700 2009
-
fresh-merb-app
Last updated Thu Jul 16 15:12:08 -0700 2009
-
loudmouth
Forked from wyhaines/loudmouth
An asynchronous XMPP library
Last updated Thu Apr 23 12:47:07 -0700 2009
-
vertebra-erl
Vertebra Erlang Pieces
Last updated Sat Apr 18 04:33:04 -0700 2009
-
dm-core
Forked from datamapper/dm-core
DataMapper - Core
Last updated Sat Apr 18 01:44:34 -0700 2009
-
vertebra-gem
Gem handler for vertebra
Last updated Tue Apr 14 10:00:36 -0700 2009
-
loudmouth-ruby
Forked from wyhaines/loudmouth-ruby
Ruby bindings for the Loudmouth library
Last updated Wed Mar 25 12:29:12 -0700 2009
-
vertebra-ref
Documentation for Vertebra
Last updated Mon Mar 23 13:08:23 -0700 2009
-
natter
Erlang XMPP Client
Last updated Wed Mar 11 07:27:28 -0700 2009
-
vertebra-xen
Vertebra actor and runner for controlling xen instances
Last updated Wed Mar 04 16:48:50 -0800 2009
-
puppet-daemontools
Forked from duritong/puppet-daemontools
Puppet module to manage daemontools
Last updated Thu Feb 12 00:02:35 -0800 2009
-
sequel
Forked from jeremyevans/sequel
Sequel: The Database Toolkit for Ruby
Last updated Tue Oct 28 18:32:22 -0700 2008
-
mongrel
Engine Yard fork of mongrel
Last updated Fri Jun 20 05:03:22 -0700 2008
-
backup
A class that can keep X number of backups of a file
Last updated Wed Jun 11 06:02:17 -0700 2008
-
xmpp4em
Forked from tmm1/xmpp4em
EventMachine based XMPP client
Last updated Sat Jun 07 23:41:03 -0700 2008
Organization Members (50)
-
adelcambre (Andy Delcambre)
26 public repos, 26 followers
-
akatz (Avrohom Katz)
8 public repos, 5 followers
-
atmos (Corey Donohoe)
65 public repos, 136 followers
-
BanzaiMan (Hiro Asari)
13 public repos, 12 followers
-
bdejesus (Ben De Jesus)
3 public repos, 0 followers
-
benburkert (BenBurkert)
39 public repos, 29 followers
-
blaisdellk
3 public repos, 3 followers
-
bluelion
0 public repos, 0 followers
-
bratta (Tim Gourley)
16 public repos, 5 followers
-
brixen (Brian Ford)
7 public repos, 24 followers
-
carllerche (Carl Lerche)
14 public repos, 91 followers
-
daksis (Randall Thomas)
1 public repos, 11 followers
-
damm (Scott M. Likens)
11 public repos, 16 followers
-
demonbane (Alex Malinovich)
12 public repos, 6 followers
-
dennisjbell (Dennis J. Bell)
5 public repos, 3 followers
-
dpiddy (Dan Peterson)
19 public repos, 4 followers
-
evanphx (Evan Phoenix)
20 public repos, 182 followers
-
ezmobius
19 public repos, 309 followers
-
filmprog (Tyler Bird)
4 public repos, 3 followers
-
freeformz (Edward Muller)
18 public repos, 8 followers
-
geemus (Wesley Beary)
23 public repos, 45 followers
-
gengor
0 public repos, 0 followers
-
glenndavy
8 public repos, 9 followers
-
gmedrano
0 public repos, 0 followers
-
halorgium (Tim Carey-Smith)
122 public repos, 57 followers
-
jpease (Justin Pease)
5 public repos, 3 followers
-
krutten
6 public repos, 1 followers
-
larrytheliquid (Larry Diehl)
36 public repos, 38 followers
-
mage2k (Erik Jones)
3 public repos, 3 followers
-
martinemde (Martin Emde)
19 public repos, 9 followers
-
mdolian
5 public repos, 0 followers
-
mreider
0 public repos, 0 followers
-
mutle (Mutwin Kraus)
34 public repos, 9 followers
-
nicksieger (Nick Sieger)
31 public repos, 84 followers
-
outerim (Lee Jensen)
0 public repos, 0 followers
-
pdsphil (Phil Ripperger)
4 public repos, 9 followers
-
rlpowell
0 public repos, 1 followers
-
shaiguitar
3 public repos, 2 followers
-
smerritt (Sam Merritt)
10 public repos, 6 followers
-
spastorino (Santiago Pastorino)
14 public repos, 17 followers
-
sr (Simon Rozet)
86 public repos, 191 followers
-
stolt45 (Christopher Stolt)
14 public repos, 6 followers
-
tongson
0 public repos, 0 followers
-
tpoland
1 public repos, 0 followers
-
tweibley (Taylor Weibley)
0 public repos, 4 followers
-
watsonian (Joel Watson)
26 public repos, 1 followers
-
wdperson (Mike Riley)
3 public repos, 3 followers
-
wjessop (Will Jessop)
6 public repos, 10 followers
-
wycats (Yehuda Katz)
69 public repos, 998 followers
-
wyhaines (Kirk Haines)
13 public repos, 15 followers


{% extends "interviews/interview/base.html" %} {% block content %}
The Setup PH is a localization of The Setup, a collection of nerdy interviews asking people from all walks of life what they use to get the job done.


Enter a text underneath this paragraph and add some Emojis to see
what output the EmojiPicker()
class gives.
getValue()
render()
Store emojis, for example as *.png
files, in the /emojis/
folder
⎮- index.html
⎮- EmojiPicker.js
⎮- EmojiPicker.css
⎮- emojis/
⎮- bowtie.png
⎮- smile.png
⎮- laughing.png
⎮- blush.png
⎮- smiley.png
Include CSS an JavaScript files.

<link rel="stylesheet" type="text/css" href="EmojiPicker.css">
Add the following JavaScript Code to your index.html
function initEmojiPicker() {
EmojiPickerSettings.path = 'emojis/';
EmojiPickerSettings.icons = {'bowtie': 'bowtie.png',
'smile': 'smile.png',
'laughing': 'laughing.png',
'blush': 'blush.png',
'smiley': 'smiley.png'};
var ep = new EmojiPicker();
}
And the following HTML body tag

Save all emojis in a folder and add each one with a shortcut code and
it's filename to EmojiPickerSettings.icons
as seen
in Minimal section in the following format:
{'shortcut': 'filename.png'};
You can also copy the /emojis/
folder from the source
and include this JavaScript Snippet after including EmojiPicker.js
in your HTML.
The last step you have to do is to tell EmojiPicker.js where to find the the emoji images. To do so, replace path/to/png/ with yours.
EmojiPickerSettings.path = 'path/to/png/';Sometimes it's necessary to also set
EmojiPickerSettings.renderPath
.
For example if you store your JavaScript files in a /js/
folder.
EmojiPickerSettings.path = '../path/to/png/';
EmojiPickerSettings.renderPath = 'path/to/png/';
The div which to use as the editor needs the id emojiArea

You can either use the original CSS file or create an own one. The following list shows each element and it's selector.
EmojiPickerSettings.prefix = 'yourPrefix_';
Don't forget to add the prefix in your CSS!
EmojiPicker.js always requires this CSS:


|
Ignite Tools
|
This class provides the primary interface for interacting with the Urban Airship subscription functionality. More...
#import <UASubscriptionManager.h>
Properties | |
Inventory | |
--------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- | |
| UASubscriptionInventory * | inventory |
| The inventory of subscriptions (and their products and contents) | |
| UASubscriptionProduct * | pendingProduct |
Downloads | |
--------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- | |
| UASubscriptionDownloadManager * | downloadManager |
Singleton | |
--------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- | |
| (UASubscriptionManager *) | + shared |
| Singleton initializer. | |
| (void) | - forceRelease |
UI and Initialization | |
--------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- | |
| (void) | + useCustomUI: |
| (void) | + displaySubscription:animated: |
| (void) | + hideSubscription |
| (void) | + land |
| (BOOL) | + setDownloadDirectory: |
| Set a custom download directory, creating it if necessary. | |
| (BOOL) | + setDownloadDirectory:withProductIDSubdir: |
| Set a custom download directory. | |
| (Class) | - uiClass |
Purchase and Restore Subscriptions | |
--------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- | |
| UASubscriptionObserver * | transactionObserver |
| (void) | - purchase: |
| Purchase a subscription product. | |
| (void) | - purchaseProductWithId: |
| Purchase a subscription product. | |
| (void) | - setPendingSubscription: |
| (void) | - purchasePendingSubscription |
| (void) | - restoreAutorenewables |
| Restores all autorenewable purchases for this user. | |
| (void) | - loadSubscription |
| Loads the product inventory, the available content and the user's purchases. | |
| (void) | - enterForeground |
| (void) | - enterBackground |
| (void) | - subscriptionWillEnterForeground |
| (void) | - subscriptionWillEnterBackground |
| (void) | - subscriptionsUpdated: |
| (void) | - userSubscriptionsUpdated: |
| (void) | - inventoryUpdateFailedWithError: |
| (void) | - purchaseProductFinished: |
| (void) | - purchaseProductFailed:withError: |
| (void) | - downloadContentFinished: |
| (void) | - downloadContentFailed: |
| (void) | - restoreAutorenewablesFinished: |
| (void) | - restoreAutorenewableProductFailed: |
| (void) | - restoreAutorenewablesFailedWithError: |
This class provides the primary interface for interacting with the Urban Airship subscription functionality.
It provides support for both autorenewable and non-autorenewable subscriptions.
Register a UASubscriptionManagerObserver to receive notifications when products, subsriptions or their contents change.
| - (void) loadSubscription |
Loads the product inventory, the available content and the user's purchases.
This is an asynchronous task. Register a UASubscriptionManagerObserver to receive status updates for this process.
| - (void) purchase: | (UASubscriptionProduct *) | product |
Purchase a subscription product.
Register a UASubscriptionManagerObserver to receive status updates for this process.
| product | The subscription product to purchase |
| - (void) purchaseProductWithId: | (NSString *) | productId |
Purchase a subscription product.
Register a UASubscriptionManagerObserver to receive status updates for this process.
| product | The product ID to purchase |
| - (void) restoreAutorenewables |
Restores all autorenewable purchases for this user.
This triggers a StoreKit restore process, which requests receipts for all the autorenewable subscription products that this user has ever purchased.
Once received, the receipts are submitted to Urban Airship so that the appropriate access may be granted. If the user is restoring purchases from another device, this device's user will be merged into the original UA user based on their iTunes account.
Register a UASubscriptionManagerObserver to receive status updates for this process.
| + (BOOL) setDownloadDirectory: | (NSString *) | path |
Set a custom download directory, creating it if necessary.
Creates a product ID subdirectory if the product ID is specified in the Urban Airship content information.
The default directory is defined as kUADownloadDirectory: <library directory>="">/ua/downloads/
| path | The custom download directory (with trailing slash) |
| + (BOOL) setDownloadDirectory: | (NSString *) | path | |
| withProductIDSubdir: | (BOOL) | makeSubdir | |
Set a custom download directory.
Optionally creates a product ID subdirectory if the product ID is specified in the Urban Airship content information.
The default directory is defined as kUADownloadDirectory: <library directory>="">/ua/downloads/
| path | The custom download directory (with trailing slash) |
| makeSubdir | If YES, creates a subdirectory named with the content key *OR* the product ID, if available |
| + (UASubscriptionManager*) shared |
Singleton initializer.


Ancient Stone Tablet:
The text describes the decisive battles against Daimon the White-Eyed.
Past heroes used the bead of summoning to call out Daimon before he and his minions were ready.
Now it all makes sense! You know how to defeat Daimon!
As you stand thinking before the tablet, something falls to the ground.


Enter as much as you know of an English word. When you don't known the letter, use _ (L__K). If you know two letters are the same, use a number (L11K).


300 Buildings. 200 People. Find and Click Mr. RED.
:00
You Win! Thanks to you, the danger has been averted.
Wait! We've just learned that Mrs. RED, an accomplice, has escaped!
Catch Mrs. RED
Time's Up Thanks to you, Mr. RED may never be found
I won't fail this time.
Find Mr. RED An incredibly dangerous person is lurking within this city. Stop the threat before it is too late Use WASD or Arrows to move and Mouse to click
Go
Use WASD or Arrows to move, Space to jump, and Mouse to click


Text 1
Title 1
Longer Text 1
Title 2
Longer Text 2
Title 3
Longer Text 3
Title 4
Longer Text 4
Text 2
Text 3
Text 4


La Toscana is a new Italian Restaurant & Pizzaria that offers wonderfully delicious food and extravagant prices in the heart of the city center.
The farm-house gardens are in integral part of Toscana's philosophy towards cooking at our popular Dublin restaurants, and we believe that our customers should eat as well as we do at home. Avoiding nasty sprays, using organic farm eggs from our corn-fed hens, we grow our own seasonal organic fruit, vegetables, salads and herbs from our farm-house in Co Wicklow and pick fresh daily ingredients for our restaurant in the heart of Dublin City Centre. We pride ourselves on honest seasonal vegetables packed with nutrients. Our aim is to bring the spirit of the Mediterranean lifestyle into our busy city kitchens, having grown up ourselves on a Mediterranean diet and picking our breakfast from our fathers gardens I feel great pleasure combining the fertile Irish soil with the rich heritage of classic and modern Italian cuisine.
Toscana Italian restaurant in Temple bar district boasts a great central location, opposite Dublin Castle and close to Christchurch cathederal. Ideally located near Vicar Street, Gaiety and Tivoli theatres, and so near to the Olympia Theatre in Dublin. So whether it's a leisurely lunch, Early Bird/Pre theatre dinner in Dublin or an atmospheric evening with family or friends, if you wish to combine a real traditional feel with a warm friendly atmosphere, in one of the best Italian restaurants in Dublin then Toscana is a must!
"Buon Appetito"
| Monday | 12:00 - 24:00 | |
| Tuesday | 12:00 - 24:00 | |
| Wednesday | 12:00 - 24:00 | |
| Thursday | 12:00 - 24:00 | |
| Friday | 12:00 - 24:00 | |
| Saturday | 12:00 - 24:00 | |
| Sunday | 12:00 - 24:00 |
If you would like to sign up to the Toscana mailing list and avail of our monthly newsletter and special offers, please enter your information below.
To make a reservation call 01 7499238 or click on the link below
Make A Reservation


Please use with markpage Firefox plugin, available at MarkPage on GitHub
Source for this Node.js server available at MarkPage-Server on GitHub


Styles
This section covers basic HTML tags, such as headings, buttons, form controls or lists. Think of these as the building blocks that can either be used on their own or to create components or layouts.
Groups of tags are included in cases where a single element should not exist on its own. For example, an <input>
tag should usually be accompanied by a
, so those two are demonstrated as a single pattern.
Alerts
Alerts
Alerts are super handy
.alert-bottom
to flip the fade-out styling.
Colors
Color Palette
The full color palette is available as named variables when building Apollo UI from the source SCSS modules.  In general, it is preferred to use the
tag when linking to another document or a section of the current document. Buttons that perform any other action should use the <button>
tag.
Note that only the
and <button>
tags include the pulse animation. Don't ask why.
Button Colors
Button States
Disabled styles are available button
and input
tags by applying the disabled
attribute. Anchor tags can appear disabled by adding the .disabled
class, though this does not actually disable the link.
Button Sizes
A compact size is available when buttons need to fit in small spaces. Buttons with long labels automatically get smaller padding.
When used with the Modernizr touchevents
test, touch-enabled devices will get larger buttons.
Full-width buttons
When you need a button to fill the available space in a grid layout, simply add the btn-block
modifier class.
Forms
Basic form
Forms are used to gather input from the user.
Checkbox
See some checkboxes in action!
Radio button
See some radio buttons in action!
Select
The select control allows users to select a single option from a list to be added to the form submission.
Textarea
Forms are used to gather input from the user.
Toggle
The toggle control is an alternate way of displaying a radio button to allow users to toggle between two or more values in a form. This is a different application than a tab, which looks similar, but is used to toggle content panes.
Validation states
Contextual error messages are displayed to the user below the input field.
Note that there are two markup options available. The first is for when you can apply the validation class name to the parent .form-group
. The second is for when you need to apply the validation class name directly to the .form-control
and .form-msg
elements.
Grid
Grid overview
Grids are made up of containers, rows, and columns. Each page should have one or more containers, but a container should never need to be nested within another container. Rows
Responsive columns
The grid enables responsive layouts by allowing you to specify how many columns each element takes up at each breakpoint. Resize your browser window to see the columns below change their relative width at each breakpoint.
Column offsets
Sometimes you need to put space between columns. The grid comes with column offset classes for just this reason, so don't be a chump and add empty columns to your layout.
Push/pull
Use push/pull to swap order of columns or just move things around. Push classes move things to the right, while pull moves them to the left.
Tables
Table overview
Here's how tables look in Apollo. A few different button styles have been used to show how each looks in a table.
| Country | Capital | Population | Language | |
|---|---|---|---|---|
| USA | Washington D.C. | 309 million | English | |
| Germany | Berlin | 81 million | German | |
| Sweden | Stockholm | 9 million | Swedish |
Compact spacing
If you need tighter spacing on your tables, simply add .table-sm
to the

and the cell padding is reduced throughout.
| Country | Capital | Population | Language | |
|---|---|---|---|---|
| USA | Washington D.C. | 309 million | English | |
| Germany | Berlin | 81 million | German | |
| Sweden | Stockholm | 9 million | Swedish |
Hover rows
If you have your table wired to take some action when a user clicks on a row, adding the .table-hover
class gives a nice visual indication to the user that the row is clickable. Add the .table-active
class to a row to show that it has been selected.
| Country | Capital | Population | Language | |
|---|---|---|---|---|
| USA | Washington D.C. | 309 million | English | |
| Germany | Berlin | 81 million | German | |
| Sweden | Stockholm | 9 million | Swedish |
Highlight rows
Highlight rows with status indicators by adding a class like .table-success
to a row to get a border and light background color. If you want a more subtle indicator, use .table-success-border
to get just the side border.
| Country | Capital | Population | Language |
|---|---|---|---|
| USA | Washington D.C. | 309 million | English |
| Germany | Berlin | 81 million | German |
| Sweden | Stockholm | 9 million | Swedish |
| Czech Republic | Prague | 10.5 million | Czech |
| USA | Washington D.C. | 309 million | English |
| Germany | Berlin | 81 million | German |
| Sweden | Stockholm | 9 million | Swedish |
| Czech Republic | Prague | 10.5 million | Czech |


Donnelly reveals concept for Marine Building pub-restaurant
by Lindsay William-RossLast month Vancouver’s Donnelly Group went public with the news they’d taken over the pub space vacated by Elephant & Castle inside the city’s historic Marine Building. Now Donnelly has revealed the name and concept for what they’re launching there.
Called Brass Fish Tavern, the pub-restaurant takes its name from the art deco creatures that adorn the entrance to what was at one time the tallest building in Vancouver.
Renovations to the space are being led by designer Ricky Alvarez, and will find the layout of the room somewhat reshaped.
Brass Fish Tavern will align for the most part with what Donnelly patrons have come to know from their multiple ventures in Vancouver. The menu will offer a mix of “considered takes on pub classics with fresh dishes inspired by international culinary travels and exploration.”
From the bar, guests will find a full cocktail program and local craft beers.
The Donnelly Group says they are hoping to have Brass Fish Tavern open in the Marine Building in early January 2020.
Brass Fish Tavern is located at 385 Burrard Street in Vancouver


Callum Cockerill-Mollett happy to get a run at Walsall
Saddlers' academy prospect Callum Cockerill-Mollett is realising his dream of getting a run of games for Walsall after a handful of impressive performances.
by Liam KeenThe 20-year-old signed his first professional contract with the club in August 2016, making his senior debut in a 5-2 Checkatrade victory over Grimsby in the same month.
Injuries meant he was restricted to one senior appearance in the 2017/18 season before he was sent on loan to Telford and Chasetown last season.
This campaign, the Leicester-born defender has been in and out of the starting XI, but injuries to left-back Cameron Pring has meant Cockerill-Mollett has been handed his chance.
Praise has been thrown at the youngster from fans and manager Darrell Clarke after impressive displays in Walsall's last three matches.
And Cockerill-Mollett says a run of games is all he wanted as he bids to prove himself to those at the club.
“All I want to do is play games for this club," he said.
“The more games I get, the more chance I have of progressing and getting another contract to carry on.
“All I have to do is keep working hard, keep playing well and keep my place in the team.
“All I’ve ever wanted is a run of games and I’m starting to get that now.
“I feel like every game I’m progressing and playing better.
“And I get more confident - personally it’s good.
“The team is doing well too which is a bonus."
In the league win over Cambridge on Saturday, Walsall fielded Cockerill-Mollett alongside three other academy products, Liam Kinsella, Liam Roberts and Alfie Bates.
And Cockerill-Mollett says that the historic set-up of the club, giving youngsters a chance, is coming good.
“That’s the philosophy of the club, it always has been since I’ve been here," he added.
“I’ve been here for five years now.
“It’s always been youngsters getting chances.
“Then moving them on after that, but I want to do well for this club and progress myself.
“Hopefully get us to the top of the table."


Interface IColorDef
Interface to handle the colors of IGeoObject objects
Namespace: CADability.Attribute
Assembly: CADability.dll
Syntax
public interface IColorDef
Properties
| Improve this Doc View SourceColorDef
Sets and gets the color of the object
Declaration
ColorDef ColorDef { get; set; }
Property Value
| Type | Description |
|---|---|
| ColorDef |
Methods
| Improve this Doc View SourceSetTopLevel(ColorDef)
Sets the color of only the top level object (in case of the object contains children) No changing events are issued. Not intended for public use.
Declaration
void SetTopLevel(ColorDef newValue)
Parameters
| Type | Name | Description |
|---|---|---|
| ColorDef | newValue |
SetTopLevel(ColorDef, Boolean)
Same as SetTopLevel(ColorDef), but also overwrites the color of child objects if it is null. Child objects that already have colors remain unchanged.
Declaration
void SetTopLevel(ColorDef newValue, bool overwriteChildNullColor)
Parameters
| Type | Name | Description |
|---|---|---|
| ColorDef | newValue | |
| System.Boolean | overwriteChildNullColor |


Wallet address N/A COPY
Available Balance N/A Locked N/A Refresh
Open Wallet Close Wallet
Generate Wallet


ResoUtils class
Resonance utility class for defaults and helper methods
Constructors
Properties
- hashCode → int
-
The hash code for this object. [...]
read-only, inherited
- runtimeType → Type
-
A representation of the runtime type of the object.
read-only, inherited
Methods
-
noSuchMethod(
Invocation invocation ) → dynamic -
Invoked when a non-existent method or property is accessed. [...]
inherited
-
toString(
) → String -
Returns a string representation of this object.
inherited
Operators
-
operator ==(
Object other ) → bool -
The equality operator. [...]
inherited
Static Properties
-
ATTENUATION_ROLLOFFS
↔ List<
String> -
Rolloff models (e.g. 'logarithmic', 'linear', or 'none').
read / write
- DEFAULT_AMBISONIC_ORDER ↔ num
-
The default ambisonic order.
read / write
- DEFAULT_ATTENUATION_ROLLOFF ↔ String
-
Default rolloff model ('logarithmic').
read / write
- DEFAULT_AZIMUTH ↔ num
-
Default azimuth (in degrees). Suitable range is 0 to 360.
read / write
- DEFAULT_DIRECTIVITY_ALPHA ↔ num
-
The default alpha (i.e. microphone pattern).
read / write
- DEFAULT_DIRECTIVITY_SHARPNESS ↔ num
-
The default pattern sharpness (i.e. pattern exponent).
read / write
- DEFAULT_ELEVATION ↔ num
-
Default elevation (in degres).
Suitable range is from -90 (below) to 90 (above).
read / write
-
DEFAULT_FORWARD
↔ List<
num> -
read / write
- DEFAULT_MAX_DISTANCE ↔ num
-
read / write
- DEFAULT_MIN_DISTANCE ↔ num
-
read / write
-
DEFAULT_POSITION
↔ List<
num> -
read / write
-
DEFAULT_REFLECTION_COEFFICIENTS
↔ Map<
String, dynamic> -
The default reflection coefficients (where 0 = no reflection, 1 = perfect
reflection, -1 = mirrored reflection (180-degrees out of phase)).
read / write
- DEFAULT_REFLECTION_CUTOFF_FREQUENCY ↔ num
-
The -12dB cutoff frequency (in Hertz) for the lowpass filter applied to
all reflections.
read / write
- DEFAULT_REFLECTION_MAX_DURATION ↔ num
-
The maximum delay (in seconds) of a single wall reflection.
read / write
- DEFAULT_REFLECTION_MIN_DISTANCE ↔ num
-
The minimum distance we consider the listener to be to any given wall.
read / write
- DEFAULT_REFLECTION_MULTIPLIER ↔ num
-
The multiplier to apply to distances from the listener to each wall.
read / write
- DEFAULT_REVERB_BANDWIDTH ↔ num
-
The default bandwidth (in octaves) of the center frequencies.
read / write
- DEFAULT_REVERB_DURATION_MULTIPLIER ↔ num
-
The default multiplier applied when computing tail lengths.
read / write
-
DEFAULT_REVERB_DURATIONS
↔ List<
num> -
The default multiband RT60 durations (in seconds).
read / write
-
DEFAULT_REVERB_FREQUENCY_BANDS
↔ List<
num> -
Center frequencies of the multiband late reflections.
Nine bands are computed by: 31.25 /// 2^(0:8).
read / write
- DEFAULT_REVERB_GAIN ↔ num
-
The default gain (linear).
read / write
- DEFAULT_REVERB_MAX_DURATION ↔ num
-
The maximum impulse response length (in seconds).
read / write
- DEFAULT_REVERB_PREDELAY ↔ num
-
The late reflections pre-delay (in milliseconds).
read / write
- DEFAULT_REVERB_TAIL_ONSET ↔ num
-
The length of the beginning of the impulse response to apply a
half-Hann window to.
read / write
-
DEFAULT_RIGHT
↔ List<
num> -
read / write
-
DEFAULT_ROOM_DIMENSIONS
↔ Map<
String, dynamic> -
Default room dimensions (in meters).
read / write
-
DEFAULT_ROOM_MATERIALS
↔ Map<
String, String> -
Default materials that use strings from
ResoUtils.MATERIAL_COEFFICIENTS MATERIAL_COEFFICIENTS
read / write - DEFAULT_SOURCE_DISTANCE ↔ num
-
Default distance from listener when setting angle.
read / write
- DEFAULT_SOURCE_GAIN ↔ num
-
Default input gain (linear).
read / write
- DEFAULT_SOURCE_WIDTH ↔ num
-
The default source width.
read / write
- DEFAULT_SPEED_OF_SOUND ↔ num
-
read / write
-
DEFAULT_UP
↔ List<
num> -
read / write
- DEGREES_TO_RADIANS ↔ num
-
read / write
- EPSILON_FLOAT ↔ num
-
read / write
- LISTENER_MAX_OUTSIDE_ROOM_DISTANCE ↔ num
-
Maximum outside-the-room distance to attenuate far-field listener by.
read / write
- LOG2_DIV2 ↔ num
-
read / write
- LOG1000 ↔ num
-
read / write
- NUMBER_REFLECTION_AVERAGING_BANDS ↔ num
-
The number of bands to average over when computing reflection coefficients.
read / write
- NUMBER_REVERB_FREQUENCY_BANDS ↔ num
-
The number of frequency bands.
read / write
- RADIANS_TO_DEGREES ↔ num
-
read / write
-
ROOM_AIR_ABSORPTION_COEFFICIENTS
↔ List<
num> -
Air absorption coefficients per frequency band.
read / write
- ROOM_EYRING_CORRECTION_COEFFICIENT ↔ num
-
A scalar correction value to ensure Sabine and Eyring produce the same RT60
value at the cross-over threshold.
read / write
-
ROOM_MATERIAL_COEFFICIENTS
↔ Map<
String, List< num> > -
Pre-defined frequency-dependent absorption coefficients for listed materials.
Currently supported materials are: [...]
read / write
- ROOM_MIN_VOLUME ↔ num
-
The minimum threshold for room volume.
Room model is disabled if volume is below this value.
read / write
- ROOM_STARTING_AVERAGING_BAND ↔ num
-
The starting band to average over when computing reflection coefficients.
read / write
- SOURCE_MAX_OUTSIDE_ROOM_DISTANCE ↔ num
-
Maximum outside-the-room distance to attenuate far-field sources by.
read / write
- TWENTY_FOUR_LOG10 ↔ num
-
read / write
- TWO_PI ↔ num
-
read / write


|
Welcome to the Zebra Crossing site at zxing.appspot.com.  These QR Codes can contain a URL, contact information, a calendar event, and much more. The ZXing Project exists to provide an open source barcode scanner for a range of devices. |


Schtromm.github.io
A History of the Archaic Greek World offers a theme-based approach to the development of the Greek world in the years 1200-479 BCE. A Thematic study of this crucial formative period of Greek history, from the same series as P.J. Rhodes A History of the Classical Greek World. Takes a critical and analytical look at evidence about the history of the archaic Greek World. Amazon.com: Customer reviews: A History of the Archaic. Author: Jonathan M. Hall. Publisher: John Wiley Sons ISBN:<PHONE_NUMBER> Category: History Page: 392 View: 1248 A History of the Archaic Greek World offers a theme-based approach to the development of the Greek world in the years 1200-479. Amazon.com: A History of the Archaic Greek World: ca. 1200-479 BCE<PHONE_NUMBER>680): Jonathan M. Hall: Books. Jonathan M. Hall History The University of Chicago.
Bryn Mawr Classical Review 2007.01.41.
Grecs - Viquipèdia, l'enciclopèdia lliure. Nusrat Fateh Ali Khan - Jhoole Jhoole Laal Live In Greek Theatre, Berkeley CA, 1996 04:22. Greek music - Zorba the Greek. 00:54. A History of the Archaic Greek World: ca. 1200-479 BCE Popular Online. 2 years ago 1 views. Adriano Dragoljub Fake news story; Embed the video PDF A History of the Archaic Greek World: ca. 1200-479. A history of the archaic Greek world, ca. 1200-479.
Greco-Persian Wars; Persian soldier (left) and Greek hoplite (right) depicted fighting, on an ancient kylix, 5th century.
Ancient Greece (Greek: Ελλάς, translit. Ellas) was a civilization belonging to a period of Greek history from the Greek Dark Ages of the 12th–9th centuries.
Find helpful customer reviews and review ratings for A History of the Archaic Greek World: ca. 1200-479 BCE at Amazon.com. Read honest and unbiased product reviews from our users. A History of the Archaic Greek World, ca. 1200–479 BCE, 1st ed. Malden, MA: Blackwell, 2007. Also translated into Polish and Greek. Also translated into Polish and Greek. Hellenicity: Between Ethnicity and Culture. ANCIENT EGYPT : The impact of Ancient Egypt on Greek. A History of the Archaic Greek World: ca. 1200-479. I am not a graduate student in classics, just someone who grew up with an interest in classical history: studied Latin and Greek, did some reading
Greco-Persian Wars - Wikipedia. Jonathan Hall has written a stimulating new history of Archaic Greece. Hall states that I had not intended to write a revisionist history of the Archaic Greek world.rather, my intention was always to introduce the reader to some of the excitement that accompanies the practice of history. A History of the Archaic Greek World: Ca. 1200-479. Get this from a library! A history of the archaic Greek world, ca. 1200-479 BCE. Jonathan M Hall -- A History of the Archaic Greek World offers a theme-based approach to the development of the Greek world in the years 1200-479 BCE. Updated and extended in this edition to include two new sections.
Amazon.com: A History of the Classical Greek World:.
A-history-of-the-archaic-greek-world-ca-1200-479-bce. PDF A History of the Archaic Greek World: ca. 1200-479.
A History of the Archaic Greek World provides theme-basedcoverage of the years 1200-479 BCE. By revisiting theevidence from the period with a critical and analytical eye, Jonathan M. Hall gives the reader the opportunity to investigate atfirst hand this crucial formative period of Greek history. A History of the Archaic Greek World, ca. 1200-479. Temes indoeuropeus Llengües indoeuropees: Albanès · Armeni · Bàltic Cèltic · Eslau · Germànic · Grec Indoiranià (Indoari, Indoirànic). A history of the archaic greek world A history of the archaic Greek world, ca. 1200-479 BCE. Jonathan M Hall -- Chronicles the history of ancient Greece from 1200 to 479 BCE, describing the rise of the city-state and citizen militias, and examining the origins of egalitarianism.


is an American cryptographer, computer security professional, privacy specialist and writer.
is an American author and journalist. He writes about architecture, design, technology, urbanism, art, and travel.
a writer, historian, and activist. She has written on a variety of subjects, including the environment, politics, place, and art.
an American urban studies theorist focusing on social and economic theory.
is a 31 year old U.S. citizen, former Intelligence Community officer and whistleblower. He revealed a vital public window into the NSA and its international intelligence partners' secret mass surveillance programs and capabilities.
is the Executive Director of Electronic Frontier Foundation. An American civil liberties attorney specializing in Internet law.
is director of the Center for Civic Media at MIT, and an Associate Professor of the Practice at the MIT Media Lab. His research focuses on the use of media as a tool of social change, the role of technology in international development, and the use of new media technologies by activists.
is the President and Founder of SeamlessDocs Federal. Is a former Administrator of the United States General Services Administration.
serves as Humanitarian OpenStreetMap Team's Executive Director. 12 years leading diverse, people-focused, technology and data-enabled projects across the public, private, nonprofit, and international humanitarian sectors.
is an entrepreneur, web designer, author, podcaster, and speaker on web design.
is an American executive, designer, technologist. His work explores the area where business, design, and technology merge to make space for the "humanist technologist."
is a Turkish writer, academic, and techno-sociologist known primarily for her research on the social implications of emerging technologies in the context of politics and corporate responsibility.


Asking Questions
I think the key to asking good questions is making sure the person you're asking understands your question. That's deep isn't it. It's just like any other time you're communicating with another person. Clarity is essential, and perhaps moreso when asking a question. If a question is being posed, it's probably because there's a lack of clarity or a misunderstanding to begin with.
To communicate your question well, I think a careful choice of words is step one. Thinking about how you're going to phrase the question is a good idea. Precision is key. It's important to be as specific as you need to be in order to properly communicate your question. Also, it's especially helpful if you're aware of the person you're asking and whether they're understanding what you're asking.
In my case, I think I tend to err on the side of overthinking my words. So as far as asking questions, I think I'm generally pretty clear. Also, I consider myself to be pretty aware in general. But there's obviously always room for improvement.


VIEWRES(1) VIEWRES(1) NAME viewres - graphical class browser for Xt SYNOPSIS viewres [-option ...] DESCRIPTION The viewres program displays a tree showing the widget class hierarchy of the Athena Widget Set. Each node in the tree can be expanded to show the resources that the corresponding class adds (i.e. does not inherit from its parent) when a widget is created. This application allows the user to visually examine the structure and inherited resources for the Athena Widget Set. OPTIONS Viewres accepts all of the standard toolkit command line options as well as the following: -top name This option specifies the name of the highest widget in the hier‐ archy to display. This is typically used to limit the display to a subset of the tree. The default is Object. -variable This option indicates that the widget variable names (as declared in header files) should be displayed in the nodes rather than the widget class name. This is sometimes useful to distinguish wid‐ get classes that share the same name (such as Text). -vertical This option indicates that the tree should be displayed top to bottom rather left to right. VIEW MENU The way in which the tree is displayed may be changed through the entries in the View menu: Show Variable Names This entry causes the node labels to be set to the variable names used to declare the corresponding widget class. This operation may also be performed with the SetLabelType(variable) transla‐ tion. Show Class Names This entry causes the node labels to be set to the class names used when specifying resources. This operation may also be per‐ formed with the SetLabelType(class) translation. Layout Horizontal This entry causes the tree to be laid out from left to right. This operation may also be performed with the SetOrienta‐ tion(West) translation. Layout Vertical This entry causes the tree to be laid out from top to bottom. This operation may also be performed with the SetOrienta‐ tion(North) translation. Show Resource Boxes This entry expands the selected nodes (see next section) to show the new widget and constraint resources. This operation may also be performed with the Resources(on) translation. Hide Resource Boxes This entry removes the resource displays from the selected nodes (usually to conserve space). This operation may also be per‐ formed with the Resources(off) translation. SELECT MENU Resources for a single widget class can be displayed by clicking Button2 on the corresponding node, or by adding the node to the selection list with Button1 and using the Show Resource Boxes entry in the View menu. Since Button1 actually toggles the selection state of a node, clicking on a selected node will cause it to be removed from the selected list. Collections of nodes may also be selected through the various entries in the Select menu: Unselect All This entry removes all nodes from the selection list. This oper‐ ation may also be performed with the Select(nothing) translation. Select All This entry adds all nodes to the selection list. This operation may also be performed with the Select(all) translation. Invert All This entry adds unselected nodes to, and removes selected nodes from, the selection list. This operation may also be performed with the Select(invert) translation. Select Parent This entry selects the immediate parents of all selected nodes. This operation may also be performed with the Select(parent) translation. Select Ancestors This entry recursively selects all parents of all selected nodes. This operation may also be performed with the Select(ancestors) translation. Select Children This entry selects the immediate children of all selected nodes. This operation may also be performed with the Select(children) translation. Select Descendants This entry recursively selects all children of all selected nodes. This operation may also be performed with the Select(descendants) translation. Select Has Resources This entry selects all nodes that add new resources (regular or constraint) to their corresponding widget classes. This opera‐ tion may also be performed with the Select(resources) transla‐ tion. Select Shown Resource Boxes This entry selects all nodes whose resource boxes are currently expanded (usually so that they can be closed with Hide Resource Boxes). This operation may also be performed with the Select(shown) translation. ACTIONS The following application actions are provided: Quit() This action causes viewres to exit. SetLabelType(type) This action sets the node labels to display the widget variable or class names, according to the argument type. SetOrientation(direction) This action sets the root of the tree to be one of the following areas of the window: West, North, East, or South. Select(what) This action selects the indicated nodes, as described in the VIEW MENU section: nothing (unselects all nodes), invert, parent, ancestors, children, descendants, resources, shown. Resources(op) This action turns on, off, or toggles the resource boxes for the selected nodes. If invoked from within one of the nodes (through the keyboard or pointer), only that node is used. WIDGET HIERARCHY Resources may be specified for the following widgets: Viewres viewres Paned pane Box buttonbox Command quit MenuButton view SimpleMenu viewMenu SmeBSB layoutHorizontal SmeBSB layoutVertical SmeLine line1 SmeBSB namesVariable SmeBSB namesClass SmeLine line2 SmeBSB viewResources SmeBSB viewNoResources MenuButton select SimpleMenu selectMenu SmeBSB unselect SmeBSB selectAll SmeBSB selectInvert SmeLine line1 SmeBSB selectParent SmeBSB selectAncestors SmeBSB selectChildren SmeBSB selectDescendants SmeLine line2 SmeBSB selectHasResources SmeBSB selectShownResources Form treeform Porthole porthole Tree tree Box variable-name Toggle variable-name List variable-name Panner panner where variable-name is the widget variable name of each node. SEE ALSO X(7), xrdb(1), listres(1), editres(1), appres(1), appropriate widget doc‐ uments COPYRIGHT Copyright 1994 X Consortium See X(7) for a full statement of rights and permissions. AUTHOR Jim Fulton, MIT X Consortium X Version 11 viewres 1.0.3 VIEWRES(1)