Copyright © 2000-2002 The Apache Software Foundation. All rights reserved. This software is published under the terms of the Apache Software License version 1.1, a copy of which has been included in the LICENSE.txt file shipped with the log4j distribution. This document is based on the article "Log4j delivers control over logging" published in November 2000 edition of JavaWorld. However, the present article contains more detailed and up to date information. The present short manual also borrows some text from "The complete log4j manual" by the same author (yours truly).
This document describes the log4j API, its unique features and design rationale. Log4j is an open source project based on the work of many authors. It allows the developer to control which log statements are output with arbitrary granularity. It is fully configurable at runtime using external configuration files. Best of all, log4j has a gentle learning curve. Beware: judging from user feedback, it is also quite addictive.
Almost every large application includes its own logging or tracing API. In conformance with this rule, the E.U. SEMPER project decided to write its own tracing API. This was in early 1996. After countless enhancements, several incarnations and much work that API has evolved to become log4j, a popular logging package for Java. The package is distributed under the Apache Software License, a fully-fledged open source license certified by the open source initiative. The latest log4j version, including full-source code, class files and documentation can be found at http://logging.apache.org/log4j/. By the way, log4j has been ported to the C, C++, C#, Perl, Python, Ruby, and Eiffel languages.
Inserting log statements into code is a low-tech method for debugging it. It may also be the only way because debuggers are not always available or applicable. This is usually the case for multithreaded applications and distributed applications at large.
Experience indicates that logging was an important component of the development cycle. It offeres several advantages. It provides precise context about a run of the application. Once inserted into the code, the generation of logging output requires no human intervention. Moreover, log output can be saved in persistent medium to be studied at a later time. In addition to its use in the development cycle, a sufficiently rich logging package can also be viewed as an auditing tool.
As Brian W. Kernighan and Rob Pike put it in their truly excellent book "The Practice of Programming"
As personal choice, we tend not to use debuggers beyond getting a stack trace or the value of a variable or two. One reason is that it is easy to get lost in details of complicated data structures and control flow; we find stepping through a program less productive than thinking harder and adding output statements and self-checking code at critical places. Clicking over statements takes longer than scanning the output of judiciously-placed displays. It takes less time to decide where to put print statements than to single-step to the critical section of code, even assuming we know where that is. More important, debugging statements stay with the program; debugging sessions are transient.
Logging does have its drawbacks. It can slow down an application. If too verbose, it can cause scrolling blindness. To alleviate these concerns, log4j is designed to be reliable, fast and extensible. Since logging is rarely the main focus of an application, the log4j API strives to be simple to understand and to use.
Log4j has three main components: loggers, appenders and layouts. These three types of components work together to enable developers to log messages according to message type and level, and to control at runtime how these messages are formatted and where they are reported.
The first and foremost advantage of any logging API over plain
System.out.println
resides in its ability to disable
certain log statements while allowing others to print unhindered. This
capability assumes that the logging space, that is, the space of all
possible logging statements, is categorized according to some
developer-chosen criteria. This observation had previously led us to
choose category as the central concept of the
package. However, since log4j version 1.2, Logger
class
has replaced the Category
class. For those familiar with
earlier versions of log4j, the Logger
class can be
considered as a mere alias to the Category
class.
Loggers are named entities. Logger names are case-sensitive and they follow the hierarchical naming rule:
|
For example, the logger named "com.foo"
is a parent
of the logger named "com.foo.Bar"
. Similarly,
"java"
is a parent of "java.util"
and an
ancestor of "java.util.Vector"
. This naming scheme
should be familiar to most developers.
The root logger resides at the top of the logger hierarchy. It is exceptional in two ways:
Invoking the class static Logger.getRootLogger method retrieves it. All other loggers are instantiated and retrieved with the class static Logger.getLogger method. This method takes the name of the desired logger as a parameter. Some of the basic methods in the Logger class are listed below.
package org.apache.log4j; public class Logger { // Creation & retrieval methods: public static Logger getRootLogger(); public static Logger getLogger(String name); // printing methods: public void debug(Object message); public void info(Object message); public void warn(Object message); public void error(Object message); public void fatal(Object message); // generic printing method: public void log(Level l, Object message); } |
Loggers may be assigned levels. The set of possible
levels, that is
DEBUG,
INFO,
WARN,
ERROR and
FATAL
are defined in the org.apache.log4j.Level
class. Although we do not encourage you to do so, you may define
your own levels by sub-classing the Level
class. A
perhaps better approach will be explained later on.
If a given logger is not assigned a level, then it inherits one from its closest ancestor with an assigned level. More formally:
|
To ensure that all loggers can eventually inherit a level, the root logger always has an assigned level.
Below are four tables with various assigned level values and the resulting inherited levels according to the above rule.
| Logger name | Assigned level |
Inherited level |
|---|---|---|
| root | Proot | Proot |
| X | none | Proot |
| X.Y | none | Proot |
| X.Y.Z | none | Proot |
In example 1 above, only the root logger is assigned a
level. This level value, Proot
, is inherited by the
other loggers X
, X.Y
and
X.Y.Z
.
| Logger name | Assigned level |
Inherited level |
|---|---|---|
| root | Proot | Proot |
| X | Px | Px |
| X.Y | Pxy | Pxy |
| X.Y.Z | Pxyz | Pxyz |
In example 2, all loggers have an assigned level value. There is no need for level inheritence.
| Logger name | Assigned level |
Inherited level |
|---|---|---|
| root | Proot | Proot |
| X | Px | Px |
| X.Y | none | Px |
| X.Y.Z | Pxyz | Pxyz |
In example 3, the loggers root
, X
and
X.Y.Z
are assigned the levels Proot
,
Px
and Pxyz
respectively. The logger
X.Y
inherits its level value from its parent
X
.
| Logger name | Assigned level |
Inherited level |
|---|---|---|
| root | Proot | Proot |
| X | Px | Px |
| X.Y | none | Px |
| X.Y.Z | none | Px |
In example 4, the loggers root
and X
and are assigned the levels Proot
and Px
respectively. The loggers X.Y
and X.Y.Z
inherits their level value from their nearest parent X
having an assigned level..
Logging requests are made by invoking one of the printing methods
of a logger instance. These printing methods are
debug,
info,
warn,
error,
fatal
and log
.
By definition, the printing method determines the level of a
logging request. For example, if c
is a logger
instance, then the statement c.info("..")
is a logging
request of level INFO.
A logging request is said to be enabled if its level is higher than or equal to the level of its logger. Otherwise, the request is said to be disabled. A logger without an assigned level will inherit one from the hierarchy. This rule is summarized below.
|
This rule is at the heart of log4j. It assumes that levels are
ordered. For the standard levels, we have DEBUG < INFO
< WARN < ERROR < FATAL
.
Here is an example of this rule.
// get a logger instance named "com.foo" Logger logger = Logger.getLogger("com.foo"); // Now set its level. Normally you do not need to set the // level of a logger programmatically. This is usually done // in configuration files. logger.setLevel(Level.INFO); Logger barlogger = Logger.getLogger("com.foo.Bar"); // This request is enabled, because WARN >= INFO. logger.warn("Low fuel level."); // This request is disabled, because DEBUG < INFO. logger.debug("Starting search for nearest gas station."); // The logger instance barlogger, named "com.foo.Bar", // will inherit its level from the logger named // "com.foo" Thus, the following request is enabled // because INFO >= INFO. barlogger.info("Located nearest gas station."); // This request is disabled, because DEBUG < INFO. barlogger.debug("Exiting gas station search"); |
Calling the getLogger
method with the same name will
always return a reference to the exact same logger object.
For example, in
Logger x = Logger.getLogger("wombat"); Logger y = Logger.getLogger("wombat"); |
x
and y
refer to exactly the same
logger object.
Thus, it is possible to configure a logger and then to retrieve the same instance somewhere else in the code without passing around references. In fundamental contradiction to biological parenthood, where parents always preceed their children, log4j loggers can be created and configured in any order. In particular, a "parent" logger will find and link to its descendants even if it is instantiated after them.
Configuration of the log4j environment is typically done at application initialization. The preferred way is by reading a configuration file. This approach will be discussed shortly.
Log4j makes it easy to name loggers by software component. This can be accomplished by statically instantiating a logger in each class, with the logger name equal to the fully qualified name of the class. This is a useful and straightforward method of defining loggers. As the log output bears the name of the generating logger, this naming strategy makes it easy to identify the origin of a log message. However, this is only one possible, albeit common, strategy for naming loggers. Log4j does not restrict the possible set of loggers. The developer is free to name the loggers as desired.
Nevertheless, naming loggers after the class where they are located seems to be the best strategy known so far.
The ability to selectively enable or disable logging requests based on their logger is only part of the picture. Log4j allows logging requests to print to multiple destinations. In log4j speak, an output destination is called an appender. Currently, appenders exist for the console, files, GUI components, remote socket servers, JMS, NT Event Loggers, and remote UNIX Syslog daemons. It is also possible to log asynchronously.
More than one appender can be attached to a logger.
The addAppender
method adds an appender to a given logger.
Each enabled logging
request for a given logger will be forwarded to all the appenders in
that logger as well as the appenders higher in the hierarchy. In
other words, appenders are inherited additively from the logger
hierarchy. For example, if a console appender is added to the root
logger, then all enabled logging requests will at least print on the
console. If in addition a file appender is added to a logger, say
C, then enabled logging requests for C and
C's children will print on a file and on the
console. It is possible to override this default behavior so that
appender accumulation is no longer additive by setting
the additivity flag to false
.
The rules governing appender additivity are summarized below.
|
The table below shows an example:
| Logger Name | Added Appenders | Additivity Flag | Output Targets | Comment |
|---|---|---|---|---|
| root | A1 | not applicable | A1 | The root logger is anonymous but can be accessed with the Logger.getRootLogger() method. There is no default appender attached to root. |
| x | A-x1, A-x2 | true | A1, A-x1, A-x2 | Appenders of "x" and root. |
| x.y | none | true | A1, A-x1, A-x2 | Appenders of "x" and root. |
| x.y.z | A-xyz1 | true | A1, A-x1, A-x2, A-xyz1 | Appenders in "x.y.z", "x" and root. |
| security | A-sec | false | A-sec | No appender accumulation since the additivity flag is set to
false .
|
| security.access | none | true | A-sec | Only
appenders of "security" because the additivity flag in "security" is
set to false .
|
More often than not, users wish to customize not only the output
destination but also the output format. This is accomplished by
associating a layout with an appender. The layout is
responsible for formatting the logging request according to the user's
wishes, whereas an appender takes care of sending the formatted output
to its destination.
The PatternLayout, part
of the standard log4j distribution, lets the user specify the output
format according to conversion patterns similar to the C language
printf
function.
For example, the PatternLayout with the conversion pattern "%r [%t] %-5p %c - %m%n" will output something akin to:
176 [main] INFO org.foo.Bar - Located nearest gas station.
The first field is the number of milliseconds elapsed since the start of the program. The second field is the thread making the log request. The third field is the level of the log statement. The fourth field is the name of the logger associated with the log request. The text after the '-' is the message of the statement.
Just as importantly, log4j will render the content of the log
message according to user specified criteria. For example, if you
frequently need to log Oranges
, an object type used in
your current project, then you can register an
OrangeRenderer
that will be invoked whenever an orange
needs to be logged.
Object rendering follows the class hierarchy. For example, assuming
oranges are fruits, if you register an FruitRenderer
, all
fruits including oranges will be rendered by the
FruitRenderer
, unless of course you registered an orange
specific OrangeRenderer
.
Object renderers have to implement the ObjectRenderer interface.
Inserting log requests into the application code requires a fair amount of planning and effort. Observation shows that approximately 4 percent of code is dedicated to logging. Consequently, even moderately sized applications will have thousands of logging statements embedded within their code. Given their number, it becomes imperative to manage these log statements without the need to modify them manually.
The log4j environment is fully configurable programmatically. However, it is far more flexible to configure log4j using configuration files. Currently, configuration files can be written in XML or in Java properties (key=value) format.
Let us give a taste of how this is done with the help of an
imaginary application MyApp
that uses log4j.
import com.foo.Bar; // Import log4j classes. import org.apache.log4j.Logger; import org.apache.log4j.BasicConfigurator; public class MyApp { // Define a static logger variable so that it references the // Logger instance named "MyApp". static Logger logger = Logger.getLogger(MyApp.class); public static void main(String[] args) { // Set up a simple configuration that logs on the console. BasicConfigurator.configure(); logger.info("Entering application."); Bar bar = new Bar(); bar.doIt(); logger.info("Exiting application."); } } |
MyApp
begins by importing log4j related classes. It
then defines a static logger variable with the name
MyApp
which happens to be the fully qualified name of the
class.
MyApp
uses the Bar
class defined in the
package com.foo
.
package com.foo; import org.apache.log4j.Logger; public class Bar { static Logger logger = Logger.getLogger(Bar.class); public void doIt() { logger.debug("Did it again!"); } } |
The invocation of the BasicConfigurator.configure method creates a rather simple log4j setup. This method is hardwired to add to the root logger a ConsoleAppender. The output will be formatted using a PatternLayout set to the pattern "%-4r [%t] %-5p %c %x - %m%n".
Note that by default, the root logger is assigned to
Level.DEBUG
.
The output of MyApp is:
0 [main] INFO MyApp - Entering application. 36 [main] DEBUG com.foo.Bar - Did it again! 51 [main] INFO MyApp - Exiting application.
The figure below depicts the object diagram of MyApp
after just having called the BasicConfigurator.configure
method.
As a side note, let me mention that in log4j child loggers link
only to their existing ancestors. In particular, the logger named
com.foo.Bar
is linked directly to the root
logger, thereby circumventing the unused com
or
com.foo
loggers. This significantly increases
performance and reduces log4j's memory footprint.
The MyApp
class configures log4j by invoking
BasicConfigurator.configure
method. Other classes only
need to import the org.apache.log4j.Logger
class,
retrieve the loggers they wish to use, and log away.
The previous example always outputs the same log information.
Fortunately, it is easy to modify MyApp
so that the log
output can be controlled at run-time. Here is a slightly modified
version.
import com.foo.Bar; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class MyApp { static Logger logger = Logger.getLogger(MyApp.class.getName()); public static void main(String[] args) { // BasicConfigurator replaced with PropertyConfigurator. PropertyConfigurator.configure(args[0]); logger.info("Entering application."); Bar bar = new Bar(); bar.doIt(); logger.info("Exiting application."); } } |
This version of MyApp
instructs
PropertyConfigurator
to parse a configuration file and
set up logging accordingly.
Here is a sample configuration file that results in exactly same
output as the previous BasicConfigurator
based example.
# Set root logger level to DEBUG and its only appender to A1. log4j.rootLogger=DEBUG, A1 # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n |
Suppose we are no longer interested in seeing the output of any
component belonging to the com.foo
package. The following
configuration file shows one possible way of achieving this.
log4j.rootLogger=DEBUG, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout # Print the date in ISO 8601 format log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Print only messages of level WARN or above in the package com.foo. log4j.logger.com.foo=WARN |
The output of MyApp
configured with this file is shown below.
2000-09-07 14:07:41,508 [main] INFO MyApp - Entering application. 2000-09-07 14:07:41,529 [main] INFO MyApp - Exiting application.
As the logger com.foo.Bar
does not have an assigned
level, it inherits its level from com.foo
, which
was set to WARN in the configuration file. The log statement from the
Bar.doIt
method has the level DEBUG, lower than the
logger level WARN. Consequently, doIt()
method's log
request is suppressed.
Here is another configuration file that uses multiple appenders.
log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n |
Calling the enhanced MyApp with the this configuration file will output the following on the console.
INFO [main] (MyApp2.java:12) - Entering application. DEBUG [main] (Bar.java:8) - Doing it again! INFO [main] (MyApp2.java:15) - Exiting application.
In addition, as the root logger has been allocated a second
appender, output will also be directed to the example.log
file. This file will be rolled over when it reaches 100KB. When
roll-over occurs, the old version of example.log
is
automatically moved to example.log.1
.
Note that to obtain these different logging behaviors we did not
need to recompile code. We could just as easily have logged to a UNIX
Syslog daemon, redirected all The log4j library does not make any assumptions about its
environment. In particular, there are no default log4j
appenders. Under certain well-defined circumstances however, the
static inializer of the The default initialization is very useful in environments where the
exact entry point to the application depends on the runtime
environment. For example, the same application can be used as a
stand-alone application, as an applet, or as a servlet under the
control of a web-server.
The exact default initialization algorithm is defined as follows:
See Loader.getResource(java.lang.String)
for the list of searched locations.
The PropertyConfigurator
will be used to parse the URL to configure log4j unless the URL ends
with the ".xml" extension, in which case the DOMConfigurator
will be used. You can optionaly specify a custom configurator. The
value of the log4j.configuratorClass system property is taken
as the fully qualified class name of your custom configurator. The
custom configurator you specify must implement the Configurator
interface.
The default log4j initialization is particularly useful in
web-server environments. Under Tomcat 3.x and 4.x, you should place
the You can also choose to set the system property
log4j.configuration before starting Tomcat. For Tomcat 3.x The
Example 1
The Unix shell command
com.foo
output to an NT
Event logger, or forwarded logging events to a remote log4j server,
which would log according to local server policy, for example by
forwarding the log event to a second log4j server.
Default Initialization Procedure
Logger
class will attempt to
automatically configure log4j. The Java language guarantees that the
static initializer of a class is called once and only once during the
loading of a class into memory. It is important to remember that
different classloaders may load distinct copies of the same
class. These copies of the same class are considered as totally
unrelated by the JVM.
resource
string variable to the value of
the log4j.configuration system property. The preferred
way to specify the default initialization file is through the
log4j.configuration system property. In case the system
property log4j.configuration is not defined, then set the
string variable resource
to its default value
"log4j.properties".
resource
variable to a
URL.
MalformedURLException
, then search for
the resource
from the classpath by calling
org.apache.log4j.helpers.Loader.getResource(resource,
Logger.class)
which returns a URL. Note that the string
"log4j.properties" constitutes a malformed URL.
Example Configurations
Default Initialization under Tomcat
log4j.properties
under the
WEB-INF/classes
directory of your web-applications. Log4j
will find the properties file and initialize itself. This is easy to
do and it works.
TOMCAT_OPTS
environment variable is used to set command
line options. For Tomcat 4.0, set the CATALINA_OPTS
environment variable instead of TOMCAT_OPTS
.
export TOMCAT_OPTS="-Dlog4j.configuration=foobar.txt"
tells log4j to use the file foobar.txt
as the default
configuration file. This file should be place under the
WEB-INF/classes
directory of your web-application. The
file will be read using the PropertyConfigurator. Each
web-application will use a different default configuration file because
each file is relative to a web-application.
Example 2
The Unix shell command
export TOMCAT_OPTS="-Dlog4j.debug -Dlog4j.configuration=foobar.xml"tells log4j to output log4j-internal debugging information and to use the file
foobar.xml
as the default configuration
file. This file should be place under the WEB-INF/classes
directory of your web-application. Since the file ends with a
.xml
extension, it will read using the DOMConfigurator. Each
web-application will use a different default configuration file because
each file is relative to a web-application.
Example 3
The Windows shell command
set TOMCAT_OPTS=-Dlog4j.configuration=foobar.lcf -Dlog4j.configuratorClass=com.foo.BarConfiguratortells log4j to use the file
foobar.lcf
as the default
configuration file. This file should be place under the
WEB-INF/classes
directory of your web-application. Due to
the definition of the log4j.configuratorClass system property,
the file will be read using the com.foo.BarConfigurator
custom configurator. Each web-application will use a different
default configuration file because each file is relative to a
web-application.
Example 4
The Windows shell command
set TOMCAT_OPTS=-Dlog4j.configuration=file:/c:/foobar.lcftells log4j to use the file
c:\foobar.lcf
as the default
configuration file. The configuration file is fully specified by the
URL file:/c:/foobar.lcf
. Thus, the same configuration
file will be used for all web-applications.
Different web-applications will load the log4j classes through
their respective classloaderss. Thus, each image of the log4j
environment will act independetly and without any mutual
synchronization. For example, FileAppenders
defined
exactly the same way in multiple web-application configurations will
all attempt to write the same file. The results are likely to be less
than satisfactory. You must make sure that log4j configurations of
different web-applications do not use the same underlying system
resource.
Initialization servlet
It is also possible to use a special servlet for log4j initialization. Here is an example,
package com.foo; import org.apache.log4j.PropertyConfigurator; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.io.IOException; public class Log4jInit extends HttpServlet { public void init() { String prefix = getServletContext().getRealPath("/"); String file = getInitParameter("log4j-init-file"); // if the log4j-init-file is not set, then no point in trying if(file != null) { PropertyConfigurator.configure(prefix+file); } } public void doGet(HttpServletRequest req, HttpServletResponse res) { } } |
Define the following servlet in the web.xml file for your web-application.
<servlet> <servlet-name>log4j-init</servlet-name> <servlet-class>com.foo.Log4jInit</servlet-class> <init-param> <param-name>log4j-init-file</param-name> <param-value>WEB-INF/classes/log4j.lcf</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> |
Writing an initialization servlet is the most flexible way for
initializing log4j. There are no constraints on the code you can place
in the init()
method of the servlet.
Most real-world systems have to deal with multiple clients simultaneously. In a typical multithreaded implementation of such a system, different threads will handle different clients. Logging is especially well suited to trace and debug complex distributed applications. A common approach to differentiate the logging output of one client from another is to instantiate a new separate logger for each client. This promotes the proliferation of loggers and increases the management overhead of logging.
A lighter technique is to uniquely stamp each log request initiated from the same client interaction. Neil Harrison described this method in the book "Patterns for Logging Diagnostic Messages," in Pattern Languages of Program Design 3, edited by R. Martin, D. Riehle, and F. Buschmann (Addison-Wesley, 1997).
To uniquely stamp each request, the user pushes contextual information into the NDC, the abbreviation of Nested Diagnostic Context. The NDC class is shown below.
public class NDC { // Used when printing the diagnostic public static String get(); // Remove the top of the context from the NDC. public static String pop(); // Add diagnostic context for the current thread. public static void push(String message); // Remove the diagnostic context for this thread. public static void remove(); }
The NDC is managed per thread as a stack of contextual
information. Note that all methods of the org.apache.log4j.NDC
class are static. Assuming that NDC printing is turned on, every time
a log request is made, the appropriate log4j component will include
the entire NDC stack for the current thread in the log
output. This is done without the intervention of the user, who is
responsible only for placing the correct information in the NDC by
using the push
and pop
methods at a few
well-defined points in the code. In contrast, the per-client logger
approach commands extensive changes in the code.
To illustrate this point, let us take the example of a servlet delivering content to numerous clients. The servlet can build the NDC at the very beginning of the request before executing other code. The contextual information can be the client's host name and other information inherent to the request, typically information contained in cookies. Hence, even if the servlet is serving multiple clients simultaneously, the logs initiated by the same code, i.e. belonging to the same logger, can still be distinguished because each client request will have a different NDC stack. Contrast this with the complexity of passing a freshly instantiated logger to all code exercised during the client's request.
Nevertheless, some sophisticated applications, such as virtual
hosting web servers, must log differently depending on the virtual
host context and also depending on the software component issuing the
request. Recent log4j releases support multiple hierarchy trees. This
enhancement allows each virtual host to possess its own copy of the
logger hierarchy.
One of the often-cited arguments against logging is its
computational cost. This is a legitimate concern as even moderately
sized applications can generate thousands of log requests. Much
effort was spent measuring and tweaking logging performance. Log4j
claims to be fast and flexible: speed first, flexibility second.
The user should be aware of the following performance issues.
When logging is turned
off entirely or just for a set
of levels, the cost of a log request consists of a method
invocation plus an integer comparison. On a 233 MHz Pentium II
machine this cost is typically in the 5 to 50 nanosecond range.
However, The method invocation involves the "hidden" cost of
parameter construction.
For example, for some logger To avoid the parameter construction cost write:
This will not incur the cost of parameter
construction if debugging is disabled. On the other hand, if
the logger is debug-enabled, it will incur twice the cost of
evaluating whether the logger is enabled or not: once
in In log4j, logging requests are made to instances of the Logger
class. Logger is a class and not an interface. This measurably
reduces the cost of method invocation at the cost of some
flexibility.
Certain users resort to preprocessing or compile-time
techniques to compile out all log statements. This leads to perfect
performance efficiency with respect to logging. However, since the
resulting application binary does not contain any log statements,
logging cannot be turned on for that binary. In my opinion this is
a disproportionate price to pay in exchange for a small performance
gain.
This is essentially the performance of walking the logger
hierarchy. When logging is turned on, log4j still needs to compare
the level of the log request with the level of the request
logger. However, loggers may not have an assigned
level; they can inherit them from the logger hierarchy. Thus,
before inheriting a level, the logger may need to search its
ancestors.
There has been a serious effort to make this hierarchy walk to
be as fast as possible. For example, child loggers link only to
their existing ancestors. In the The typical cost of walking the hierarchy is typically 3
times slower than when logging is turned off entirely.
This is the cost of formatting the log output and sending it to
its target destination. Here again, a serious effort was made to
make layouts (formatters) perform as quickly as possible. The same
is true for appenders. The typical cost of actually logging is
about 100 to 300 microseconds.
See org.apache.log4.performance.Logging
for actual figures.
Although log4j has many features, its first design goal was speed.
Some log4j components have been rewritten many times to improve
performance. Nevertheless, contributors frequently come up with new
optimizations. You should be pleased to know that when configured with
the SimpleLayout
performance tests have shown log4j to log as quickly as
Log4j is a popular logging package written in Java. One of its
distinctive features is the notion of inheritance in loggers. Using
a logger hierarchy it is possible to control which log statements
are output at arbitrary granularity. This helps reduce the volume of
logged output and minimize the cost of logging.
One of the advantages of the log4j API is its manageability. Once
the log statements have been inserted into the code, they can be
controlled with configuration files. They can be selectively enabled
or disabled, and sent to different and multiple output targets in
user-chosen formats. The log4j package is designed so that log
statements can remain in shipped code without incurring a heavy
performance cost.
Performance
cat
, writing,
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
incurs the cost of constructing the message parameter, i.e.
converting both integer i
and entry[i]
to a String, and concatenating intermediate strings,
regardless of whether the message will be logged or not.
This cost of parameter construction can be quite high and it
depends on the size of the parameters involved.
if(logger.isDebugEnabled() {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
debugEnabled
and once in
debug
. This is an insignificant
overhead because evaluating a logger takes about 1%
of the time it takes to actually log.
BasicConfigurator
example shown earlier, the logger named com.foo.Bar
is
linked directly to the root logger, thereby circumventing the
nonexistent com
or com.foo
loggers. This
significantly improves the speed of the walk, especially in "sparse"
hierarchies.
System.out.println
.
Conclusions
Acknowledgments
Many thanks to N. Asokan for reviewing the article. He is also one of
the originators of the logger concept. I am indebted to Nelson Minar
for encouraging me to write this article. He has also made many useful
suggestions and corrections to this article. Log4j is the result of a
collective effort.  Without exception, the best features in
the package have all originated in the user community.


Nice to meet you.
I hail from Bowling Green, Kentucky but now live in the great city of Chicago. I am a front end developer currently seeking new opportunities.
My heart beats for traveling, clean design, green grass, my bulldog Birdie, plants, a good drink, farmer's markets, and green tea lattes.
Take a look at resume and get in touch.


FinishDatabaseQuery()
Syntax
FinishDatabaseQuery(#Database)Description
Finish the current database SQL query and release its associated resources. Query related functions like FirstDatabaseRow() or NextDatabaseRow() can't be used anymore.
Parameters
#Database The database to use.
Return value
None.
Example
; First, connect to a database with an employee table ; If DatabaseQuery(#Database, "SELECT * FROM employee") ; Get all the records in the 'employee' table While NextDatabaseRow(#Database) ; Loop for each records Debug GetDatabaseString(#Database, 0) ; Display the content of the first field Wend FinishDatabaseQuery(#Database) EndIf
See Also
DatabaseQuery()
Supported OS
All


Glucocorticoid receptors on mononuclear leukocytes in Alzheimer 's disease.
Abstract
Several lines of evidence suggest disturbances of the hypothalamic-pituitary-adrenal (HPA) system in Alzheimer 's disease (AD). In an exploration of the potential role of the glucocorticoid receptor (GR) in AD, GR density and affinity were assessed on mononuclear leukocytes of 12 AD patients and 12 healthy controls. GR binding characteristics did not differ between patients and controls or between patients subdivided according to diagnosis or associated clinical features. These data suggest that the abnormalities of the HPA system in AD are not related to a GR deficiency.


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


Praxis
Choose a game from the list below. If you would like to request a game or create one yourself, click here.
Arithmetic Game That Numbers Game from CountdownCreated by Maxime Robeyns (2018). Feel free to contribute.
Choose a game from the list below. If you would like to request a game or create one yourself, click here.
Arithmetic Game That Numbers Game from CountdownCreated by Maxime Robeyns (2018). Feel free to contribute.


Methods
getBatchesAsync()
Retrieves the batches from the product DSU and updates the model
.Retrieves the batches from the product DSU and updates the model
getProductsAsync()
Retrieves the products from the DSU and updates the model by calling ProductsController#updateProducts after retrieval
.Retrieves the products from the DSU and updates the model by calling ProductsController#updateProducts after retrieval
register(participant, callback)
Creates the ID DSU and mounts it to the id_path
.Creates the ID DSU and mounts it to the id_path
Parameters:
| Name | Type | Description |
|---|---|---|
participant |
Participant | |
callback |
function |
updateBatches(batches)
Updates the batches model
.Updates the batches model
Parameters:
| Name | Type | Description |
|---|---|---|
batches |
Array.<object> | where the properties must be:
|
updateProducts(products)
Updates the products model
.Updates the products model
Parameters:
| Name | Type | Description |
|---|---|---|
products |
Array.<object> | where the properties must be:
|


Merchandise
Visit our office hours to view stock and purchase SFU engineering swag.
T-shirts and apparel
Look cool at school. There are limited sizes available, visit the ESSS office to try out a size!
Evolution black
Uniquely engineered
Evolution grey
Engineers without borders
Circuit
SFU Engineering jacket
Beer steins and mugs
Drink up! Here’s some cool looking contraptions for your beverages.
Freezable mug
Glass beer stein
Travel mug
Mug set
Accessories
Time to accessorize. Swag up with these engineering extras.


Licenses and Contribution Agreements for Software.
a) The Foundation shall generally accept contributions of software or documentation made under the same open source license as the work it modifies. The Foundation is not obligated to accept all contributions and may select contributions the Technical Committee or Board of Directors consider appropriate. The Board of Directors shall determine what licenses the Foundation will accept, and shall prefer licenses which the Open Source Initiative has approved and categorized as “popular and widely-used”.
b) Optionally, an individual or organization may choose to contribute software or documentation under the terms of the Contributor Agreements attached in Appendix 6. The Board of Directors may adopt additional contributor agreements as may be appropriate for certain projects or contributions.
Trademark Policy. The Trademark Policy of the Foundation shall be determined by the Board of Directors and may be modified by the Board of Directors.


sudo apt-get update && sudo apt-get upgrade
last modified: 2017-04-10
Clément Levallois
Debian jessie 8.7
vi
→ change for your favorite text editor, and probably valid for Ubuntu as well.
sudo apt-get update && sudo apt-get upgrade
aptitude install ntp
Then define your time zone (the one where your server is located):
dpkg-reconfigure tzdata
vi /etc/sysctl.d/local.conf
Paste the contents of this file:
Close the file
reboot the server
vi /etc/ssh/sshd_config
Text to change in the file:
change port SSH 22 by a new port (let’s say 1234), write the new port down somewhere
ChallengeResponseAuthentication no
UsePAM no
service sshd restart
apt-get install sudo
adduser myUser -s /bin/bash passwd myUser vi /etc/sudoers
and place the following line:
myUser ALL=(ALL)
vi /etc/ssh/sshd_config
AllowUsers myUser
Then restart the SSH service:
service sshd restart
vi /etc/ssh/sshd_config
Text to change in the file:
PermitRootLogin no
From there on, you cannot login to the server from root, only from myUser.
To switch to root privileges:
su -
Generate a key with puttygen (SSH-2 RSA 1024).
Parameters to change in /etc/ssh/sshd_config
:
ChallengeResponseAuthentication no
X11Forwarding no
UsePAM no
LogLevel DEBUG3 (this should be added, the parameter is not listed by default)
Save the file, then:
service sshd restart
Add your public key to /home/myUser/.ssd/authorized_keys
Make sure that:
you have put the keys in /home/myUser/.ssd/authorized_keys
(not just in the root user folder)
your key starts with "the "ssh-rsa" (the first "s" might be missing …)
the key doesn’t break in several lines
do chmod 700 ~/.ssh
on the home folder
use tail -f /var/log/auth.log
for debugging
When SSH key login works, go back to /etc/ssh/sshd_config
and do:
PasswordAuthentication no
then: service sshd restart
Things will not work the first time, useful tips:
sudo apt-get update
apt-get install ufw
ufw default deny incoming
sudo ufw allow 1234/tcp
ufw enable
First, making sure the firewall logs the traffic:
iptables -A INPUT -j LOG iptables -A FORWARD -j LOG
apt-get install psad
Then modify some options in the config file, which is situated here:
vi /etc/psad/psad.conf
Here are some options I modified: my psad config file
Then we whitelist our own server:
vi /etc/psad/auto_dl
where I put just 2 values:
<IP_ADDRESS> 0; # localhost
xx.xx.xxx.xxx 0; # Server IP (replace xx.xx.xxx.xxx by your actual server IP)
Author of this tutorial: Clement Levallois
All resources on linux security: https://seinecle.github.io/linux-security-tutorials/


This website was created to keep a collection of files and projects. It will have various content and information, as well as material for web-development and programming.
| PERSONAL | |
|---|---|
| KD Portfolio | Kemal Demirgil portfolio |
| GAMES | |
|---|---|
| Meteor Rush | Space shooter arcade game |
| Rock Paper Scissors | Rock paper scissors game |
| Code Quiz | Coding quiz challenge |
| MISC | |
|---|---|
| Tech Connect | Tech Blog |
| Password Generator | Secure password generator |
| HTML Directory | HTML directory with all the essentials |
| The List | To-do list to organize your daily tasks |
| Techbook | Social platform for developers & recruiters |
| Work Day Schedular | Day schedular application |
| Weather Dashboard | Weather application & forecast |
| Skewed News | Interactive news application |
| HTML Generator | Fast HTML template generator |
| README Generator | README generator to startup repositories quickly |
| Team Profile Generator | Generates a team and displays it on a webpage |
| Note Taker App | Add, edit and remove daily notes |
| E Tracker | Employee management system |
| Buy m3 | E-commerce applciation |


Hey, welcome to JavaScript Quiz! How it works:
1. When you click
the button, 2
min timer will start.
2. If you get the answer right, good for you!
3. There are 5
questions to check your knowledge.
4. Your score is going to be measured by the number of seconds
left on your timer.
5. Click "start quiz" button when you're ready.


Wireframing
This would be the basic layout for my landing page or the index.html file loaded when gunga.github.io is visited.
As you can probably notice I prefer simple, minimalistic layouts. Once you click any link and visit the rest of the page, this would be its layout.
This layout is pretty simple too. However, this is my preference; Simple, foolproof, easy to use. There's no need for a complicated layout which the user won't understand. Specially for a personal or blog-like website.


“I’m inspired by art, beauty and nature. Mid-century was my inspiration, but I wanted to bring it forward into the new-century. All my designs are totally comfortable, and inspired by the natural world. Each piece is customizable, and handcrafted to the highest quality standards.”-Jeff Vioski, Founder and Designer
VIOSKI is new-century modern. Redefining modern furniture for the way we live and work today.
The influences of nature, art, simplicity, and architectural structure are integrated into our timeless, and thought-provoking furniture designs. Every piece is engineered for ultimate comfort and function. Extraordinary attention is devoted to every detail.
By design, VIOSKI furniture is a perfect fit for commercial installations. Our superior quality also meets the demands of commercial settings, as each furniture piece is meticulously handcrafted by skilled artisans in California.
From the day we launched VIOSKI in 2004, our relationships with our customers have been valued above all.
We pride ourselves on being true partners to our clients, and strive for perfection in every project. Our clients have expressed genuine gratitude for the way we’ve helped them deliver their ideal environments. It’s these partnerships that motivate us to be our very best.


In 2021, armed with family recipes and an idea, Pat, opened the first Pat's Salmon Cookies. Pat's first location, located in the famous Pike Place Fish Market in Seattle, Washington was soon followed by many more locations around the world.
On opening day, Pat had no idea that the Salmon Cookies would become a favorite around the globe. What makes Pat's cookies so great? They are delicious cookies made into the shape of a salmon, that have just a hint of fishy goodness.
Our Cookies
At Pat's Salmon Cookies our goal is simple: to bake the best Salmon Cookies ever made. Always fresh and always tasty, we make our world famous salmon cookies from scratch every day using the finest and freshest ingredients. We take pride in our excellent customer service, so contact us today at one of our many locations for your special orders. Treat yourself - you deserve it!


{lang tom_tcshop:back}
{lang tom_tcshop:edit_title}
{lang tom_tcshop:ruzhu_content}
{$tcshopInfo['content']}
{$val['txt']}
X
{lang tom_tcshop:edit_btn}
{lang tom_tcshop:ruzhu_choose_address}
{lang tom_tcshop:ruzhu_choose_mylocation}
{lang tom_tcshop:ruzhu_choose_maplocation}
{lang tom_tcshop:ruzhu_choose_close}


Hello!
My name is Torleif Nielsen, though I go by Tor. I am a growing software developer with a passion for Open Source, and a dream of joining its giants from whom I credit much of what I know.
The Full StoryTorleif Nielsen
Software Developer
My Projects
Some things I'm working on
{{ range where .Data.Pages "Type" "project" }}
{{ .Render "li" }}
{{ end }}
Recent Posts
{{ $post_pag := .Paginate (where .Data.Pages "Type" "post") 5 }}
{{ range $post_pag.Pages }}
{{ .Render "li" }}
{{ end }}


Novelover's Utopia
Homepage
E-books and Articles
Fun Online Quizzes
The Utopian Blog - Your stories come to life
Not a member? Join us!
Novelovers' Utopia
- Where Monotony Stops and Adventures Begin! ~An Extensive E-Library ~
This is the heading of the panel
This goes right in the stomach of panel
Option 1
Option 1
Option 2
Option 2
Option 3
Option 3
Option 4
Option 4


Tuning
Object Detection Model Selection
One of the most important parts of our pipeline is the object detection model that produces bounding boxes for our further analysis. The Science Center plaza webcam has no labels, and it would be infeasible for us to provide ground truth labels for this dataset. Therefore, we used a pretrained model from the Microsoft COCO dataset. The Microsoft COCO dataset has labeled images of people, trucks, bicycles, cars, and many more relevant classes–however, the images are usually from a different perspective and very different distance. Therefore, we cannot use the reported mAP (mean Average Precision) for these models, and will have to evaluate the performance of these models visually. We looked at the architectures:
- Faster-RCNN
- SSD
- YOLO
We also looked at the following standard feature extractors:
- Resnet-50
- Resnet-101
- Inception-V2
We can evaluate these pretained models side by side.
Comparisons of Different Models
There is a tradeoff between how long it takes for inference and the quality of the predictions. The model with the best quality (Faster-RCNN with Resnet-101) has the slowest inference time. We chose to use this model due to the best performance in object detection.
We evaluate the model’s performance during different times of the day.


Usage
- Calling methods on the jCarousel instance
- Navigating the carousel
- Defining the number of visible items
- Vertical carousels
- RTL (Right-To-Left) carousels
- Manipulating the carousel
Calling methods on the jCarousel instance
If you have created a carousel like:
$(function() {
$('.jcarousel').jcarousel();
});
You can later call methods on the jCarousel instance like:
$('.jcarousel').jcarousel('scroll', '+=2');
The first argument is the method name. The following arguments are the arguments for the called method.
Alternatively, you can first grab the jCarousel instance and call the methods directly on it:
var instance = $('.jcarousel').data('jcarousel');
instance.scroll('+=2');
See API for all available methods.
Navigating the carousel
jCarousel offers no built in controls to navigate through the carousel. But you can simply implement navigation controls using the scroll method.
$('.jcarousel').jcarousel('scroll', target);
A simple example for previous and next controls:
$('.jcarousel-prev').click(function() {
$('.jcarousel').jcarousel('scroll', '-=1');
});
$('.jcarousel-next').click(function() {
$('.jcarousel').jcarousel('scroll', '+=1');
});
A more comfortable way is to use a navigation plugin:
Defining the number of visible items
You simply define the number of visible items by defining the width (or height
for a vertical carousel) of the root element (if you use the default from this
document, you do that with the class .jcarousel
in your stylesheet).
This offers a lot of flexibility, because you can define the width in pixel for a fixed carousel or in percent for a flexible carousel.
Fixed carousel
Always 3 visible items:
.jcarousel {
position: relative;
overflow: hidden;
width: 300px;
}
.jcarousel li {
float: left;
width: 100px;
}
Flexible carousel
The number of visible items depend on the width of the root's parent element:
.jcarousel {
position: relative;
overflow: hidden;
width: 100%;
}
.jcarousel li {
float: left;
width: 100px;
}
Vertical carousels
jCarousel tries to auto-detect the orientation by simply checking if the list elements’s height is greater than the list element’s width.
If auto-detection doesn't work, you can explicitly pass the vertical
option:
$('.jcarousel').jcarousel({
vertical: true
});
RTL (Right-To-Left) carousels
jCarousel tries to auto-detect if the carousel should run in RTL mode by looking
for a dir
attribute with the value rtl
on the root or any of its parent
elements.

If auto-detection doesn't work, you can explicitly pass the rtl
option.
Note: The dir="rtl"
attribute is still required!
$('.jcarousel').jcarousel({
rtl: true
});
When running a carousel in RTL mode, you should ensure to float the items to the right:
.jcarousel[dir=rtl] li {
float: right;
}
Manipulating the carousel
If you manipulate the carousel from the outside (eg. adding or removing items from the list), ensure that you call the reload method afterwards so that jCarousel becomes aware of the changes:
$(function() {
$('.jcarousel').jcarousel({
// Configuration goes here
});
// Append items
$('.jcarousel ul')
.append('
Item 1
')
.append('
Item 2
');
// Reload carousel
$('.jcarousel').jcarousel('reload');
});
Existing items should only be manipulated, not completely replaced:
$(function() {
// Don't do that
$('.jcarousel li:eq(0)')
.replaceWith('
Item 1
');
// Do this
$('.jcarousel li:eq(0)')
.addClass('myclass')
.text('Item 1');
});
If you are removing items, make sure they are currently not visible:
$(function() {
var carousel = $('.jcarousel'),
item = carousel.find('li:eq(0)');
if (carousel.jcarousel('visible').index(item) < 0) {
item.remove();
carousel.jcarousel('reload');
}
});


Ploror688.github.io
18 of the World’s Most Blissful Meditation Retreats. Plan Your Retreat The Retreat Company. Creative writing retreat scotland - Palazzo della Corgna. Arvon is a charity that runs five-day residential creative writing courses and retreats in rural writing houses, offering the time and space to write. Creative writing retreat scotland.
In prehistoric times Staffa was covered by the ice sheets which spread from Scotland out into the Atlantic Ocean beyond the Outer Hebrides. After the last retreat.
Fresh Start Mental Health Retreat October 2018 and all other months. Many dates. 14 and 21-Day Retreats at the beautiful ocean side Resort on Vancouver Island Spiritual Healing and Self-Realization Retreats. Creative writing holidays retreat scotland.
We would like to share with you our curated list of creative writing competitions. Included are details about max word count, associated fees, submission deadlines. Novel Writing Competition List for 2018 - 19. These competitions are for unpublished or self-published novels and novellas for international writers Top 10 art holidays and creative writing retreats An extensive list of short story competitions, including global UK short story writing contests. Details on entry fees, deadlines, prize money.
Mormon women blogging about the peculiar and the treasured. Writing Program - Nickelodeon Animation. Patricia Lee Lewis, MFA, of Patchwork Farm Retreat, offers creative writing and yoga workshops and retreats at mountainside Patchwork Farm in western Massachusetts. Performing Songwriter Creative Workshops are intimate gatherings that are designed to celebrate the creativity in all of us. With a mission to provide guidance. Writing Retreats in Scotland. . Moniack Mhor Creative Writing Centre is located in the Scottish . An annual writing retreat Hello! My name is Matt and I have a serious passion for anything marketing related, both academically and professionally. I started writing Scotland had been inhabited for thousands of years before the Romans arrived. However, it is only during the Greco-Roman period that Scotland is recorded in writing.
Best Training Companies About Ariel. Creative Writing Classes in London - Urban Writers Retreat. One of the things I regularly get asked for is if I know of creative writing courses, schools or classes in London. Having had a quick search around, they aren’t.
WRITING ADVICE: The Narrative Arc - Kate Forsyth. We celebrate an explosion of glittering creative talents for the 2018 Wallpaper Design Awards, from Instagrammable beds, wellness labs and see-through seating. Patchwork Farm – Writing Retreats. Join us. Patricia Lee Lewis, Jacqueline Sheehan and Jane Mortifee will combine their energies for an unforgettable Creative Writing, Hatha Yoga and meditation retreat. Novel Writing Competitions 2018 – Jessica Davidson. Scotland - Patchwork Farm – Writing Retreats. Goodworld journeys are for those seeking a travel experience that rests the body, enriches the mind feeds
Arvon residential creative writing courses and retreats. Plan a Retreat The Retreat Company - Spa Retreats
Eaton Manor, Shropshire – The Perfect Retreat Venue. Providing the ideal venue for all types of retreats, with luxury accommodation, in 500 acres of tranquil.
Performing Songwriter Creative Workshops. Creative writing retreats scotland - Get to know main recommendations as to how to get the greatest essay ever Top affordable and trustworthy academic writing. 2018 Exhibitor List Scottish Caravan, Motorhome. Inevitably, I've been asked many questions about my creative process. In my usual fashion, I talk about my narrative arc and how I cannot begin writing. UK creative writing competitions - Prize Magic. A list of current UK writing competitions for poetry, short stories and novels. Writing a marketing strap line that means something. Our global Writing Program is one of the best in the biz. Consider the facts: alum have gone on to create their own Nickelodeon shows and write for all sorts Visual Explorer™ is a tool for creative conversations and mediated dialogue—using a wide variety of images—about almost any topic chosen
The Retreat Company is your one-stop resource for the finest spa retreats, yoga holidays, health retreats across the globe, with over 70 activities to choose. Short Story Competitions 2018, List of Writing. The only place to start your next adventure is at Scotland’s largest caravan, motorhome and holiday home show event. Here you’ll Find out more about writing retreats and creative holidays in Scotland. Ananda in the Himalayas, Uttaranchal, India (photos prices) Ananda in the Himalayas offers the ultimate meditation retreat on a 100-acre estate. Creative writing retreat scotland - No Fs with our top essay services. Proofreading and editing services from top writers. receive the required paper
Top 10 art holidays and creative writing retreats in the UK Getting away from it all on a writing retreat or art at Scotland’s Creative Writing. Scotland - Cultural life Britannica.com. Scotland - Cultural life: Scotland’s culture and customs remain remarkably vigorous and distinctive despite the country’s union with the United Kingdom since. Wallpaper Design Awards 2018: best designs Writing Retreats in Scotland Scottish Book Trust. Mary Queen of Scotland and The Isles: A Novel by Margaret. Cape Wrath is described as the most north westerly extreme of mainland Scotland, lying approximately 120 miles from Inverness. Learn more about Ariel, our company history, culture, and all that we do. See how we've become one of the top training companies.
Creative writing retreats scotland - Boxspringbetten. Segullah - Mormon women blogging about the peculiar. Research report la. Concrete mix design research paper research paper on ramayana resort stephen king essay on writing desks the crucible witchcraft essay pierre. An Irish experience in northwest of Ireland, with nature walks and Irish music, while learning the art of travel writing; creative writing workshops on the shores. Scotland during the Roman Empire - Wikipedia.
Visual Explorer™ Leadership Explorer Tools. Writing Competitions, Contests, and Awards:


--- layout: post title: Fabric Bliss date: 2011-05-13 06:51:41.000000000 -04:00 categories: [] tags: [] status: draft type: post published: false meta: aktt_notify_twitter: 'no' _edit_last: '1' author: login: cint email<EMAIL_ADDRESS>display_name: Jacinta first_name: Jacinta last_name: '' ---
When Greg asked me what I wanted for my birthday, my first thought was I don't really need anything, but I did want and that want was fabric. I had a fun shopping spree online at my two favourite fabric stores The Fat Quarter and 1choice4quilting. It was a fun process without the hassel of finding a car park or having to take unwilling children to the shops. Too add to the enjoyment both stores had discounts and with the Australian dollar worth more than the US dollar, that added aI enjoyed a cuppa or two while trying not t


One can not only talk to the keyboard controller (by writing to port 0x64), but also to the keyboard (by writing to port 0x60).
In order to avoid interference between scancode sequences or mouse packets and the reponses given to commands, the keyboard or mouse should always be disabled before giving a command that requires a response, and probably enabled afterwards. Some keyboards or mice do the disable automatically in this situation, but still require an explicit enable afterwards.
Each command (other than 0xfe) is ACKed by 0xfa. Each unknown command is NACKed by 0xfe. Some mice expect a corrected byte as reply to the 0xfe, and will double-NACK with 0xfc when also that is wrong.
Here a list with the common commands.
| 0xed | Write LEDs |
| 0xee | Diagnostic echo |
| 0xf0 | Set/Get scancode set |
| 0xf2 | Read keyboard ID |
| 0xf3 | Set repeat rate and delay |
| 0xf4 | Keyboard enable |
| 0xf5 | Set defaults and disable keyboard |
| 0xf6 | Set defaults |
| 0xf7 | Set all keys to repeat |
| 0xf8 | Set all keys to give make/break codes |
| 0xf9 | Set all keys to give make codes only |
| 0xfa | Set all keys to repeat and give make/break codes |
| 0xfb | Set a single key to repeat |
| 0xfc | Set a single key to give make/break codes |
| 0xfd | Set a single key to give make codes only |
| 0xfe | Resend |
| 0xff | Keyboard reset |
If the command is preceded by writing 0xd4 to port 0x64, then it goes to the mouse instead of the keyboard. Common commands:
| 0xe6 | Set mouse scaling to 1:1 |
| 0xe7 | Set mouse scaling to 2:1 |
| 0xe8 | Set mouse resolution |
| 0xe9 | Get mouse information |
| 0xf2 | Read mouse ID |
| 0xf3 | Set mouse sample rate |
| 0xf4 | Mouse enable |
| 0xf5 | Mouse disable |
| 0xf6 | Set defaults |
| 0xff | Mouse reset |
Command e8: Nonstandard. Reported to give a 2-byte ID on an OmniKey keyboard.
Command ea: Nonstandard. The sequences ea 70 and ea 71 are used by some IBM keyboards to disable and enable extra keys.
Command eb: Nonstandard. Sequences involving eb are often used for manipulating extra LEDs.
Command ec: Nonstandard. On the IBM Rapid Access keyboard this command yields a 2-byte ID.
This command is followed by a byte indicating the desired LEDs setting. Bits 7-3: unused, 0. Bit 2: 1: CapsLock LED on. Bit 1: 1: NumLock LED on. Bit 0: 1: ScrollLock LED on. When OK, both bytes are ACKed. If the second byte is recognized as a command, that command is ACKed and done instead. Otherwise a NACK is returned (and a keyboard enable may be needed).
This command returns a single byte, again ee.
Command f0: Set/Get scancode set
Many, but not all, keyboards can be switched to three different scancode sets. This command, followed by a byte 01, 02, or 03 selects the corresponding scancode set. This command, followed by a zero byte, reads the current scancode set. The reply (translated) is 43, 41 or 3f, from untranslated 1, 2 or 3. Note that scancode set 1 should not be translated, while sets 2 and 3 should be translated.Set 2 was introduced by the AT. Set 3 by the PS/2.
This command reads a 2-byte keyboard ID. XT keyboards do not answer at all (of course), AT keyboards reply with an ACK (fa) only, MF2 and other keyboards reply with a 2-byte ID. Wait at least 10ms after issuing this command.For the mouse reply, see below.
Command f3: Set repeat rate and delay
A following byte gives the desired delay before a pressed key starts repeating, and the repeat rate.Bit 7: unused, 0.
Bits 6-5: 0, 1, 2, 3: 250, 500, 750, 1000 ms delay. Default after reset is 500 ms.
Bits 4-0: inter-character delay. The number of characters per second is given by
0 1 2 3 4 5 6 7 0 30.0 26.7 24.0 21.8 20.0 18.5 17.1 16.0 8 15.0 13.3 12.0 10.9 10.0 9.2 8.6 8.0 16 7.5 6.7 6.0 5.5 5.0 4.6 4.3 4.0 24 3.7 3.3 3.0 2.7 2.5 2.3 2.1 2.0 (that is, the inter-character delay is (2 ^ B) * (D + 8) / 240 sec, where B gives Bits 4-3 and D gives Bits 2-0).
Default after reset is 10.9 characters per second.
Logitech extended commands Logitech uses escape sequences involving f3 for extended commands. A Logitech extended command looks like f3 7f f3 00 f3 xx (for varying 7-bit values of xx). For example:
xx = 01: SendStatus: send the E1 XX codes for SubDeviceType, BatteryStatus, (Channel if relevant) KbdStatus (=wireless status).
xx = 02: OpenLocking
xx = 03: CloseLocking
xx = 06 f3 aa: Read byte at address aa (in 0x01-0x1e).
xx = 07 F3 aa f3 dd: Write dd at address aa (in 0x01-0x1e).
xx = 10 or 11: Clear all device-related data in EEPROM and RAM. Now device is disconnected.
If a transmit error occurs, the keyboard is automatically disabled. This command re-enables the keyboard and clears its internal 16-byte buffer.
Command f5: Set defaults and disable keyboard
Reset keyboard, clear output buffer, switch off LEDs, reset repeat rate and delay to defaults. Disable the keyboard scan.
Reset keyboard, clear output buffer, switch off LEDs, reset repeat rate and delay to defaults.
Command f7: Set all keys to repeat
Keyboards that support scancode Set 3 keep for each key two bits: does it repeat? does it generate a break code? This command sets the "repeat" bit for all keys. It does not influence keyboard operation when the scancode set is not Set 3.
Command f8: Set all keys to give make/break codes
This command sets the "generate break code" bit for all keys. It does not influence keyboard operation when the scancode set is not Set 3.
Command f9: Set all keys to give make codes only
This command clears the "generate break code" bit for all keys. It does not influence keyboard operation when the scancode set is not Set 3.
Command fa: Set all keys to repeat and give make/break codes
This command sets the "repeat" and "generate break code" bits for all keys. It does not influence keyboard operation when the scancode set is not Set 3.
Command fb: Set some keys to repeat
This command sets the "repeat" bits for the indicated keys. It is followed by the untranslated Set 3 scancodes of the keys for which this bit must be set. The sequence is ended by a command code (ed, ee, f0, f2-ff). Afterwards, a "keyboard enable" f4 is required.
Command fc: Set some keys to give make/break codes
This command sets the "generate break code" bits for the indicated keys. It is followed by the untranslated Set 3 scancodes of the keys for which this bit must be set. The sequence is ended by a command code (ed, ee, f0, f2-ff). Afterwards, a "keyboard enable" f4 is required.
Command fd: Set some keys to give make codes only
This command clears the "generate break code" bits for the indicated keys. It is followed by the untranslated Set 3 scancodes of the keys for which this bit must be set. The sequence is ended by a recognized command code (such as ed, ee, f0, f2-ff). Afterwards, a "keyboard enable" f4 is required.
Meant for use by the keyboard controller after a transmission error. Not for use by the CPU.
Reset and self-test. The self-test (BAT) will return aa when OK, and fc otherwise. As part of the self-test, all LEDs are flashed.


This document describes the test method and test results of the Grimoires project.
JUnit is used as a test tool in the Grimoires project.
In Grimoires' build.xml, there is an ant target "test-junit", which runs the junit test suite to test against a deployed Grimoires. Before run this target, you need to set up the "wstester/bos.properties" file. For instance, if Grimoires is deployed on the http://localhost:18080/grimoires/, registryBaseURL = http://localhost:18080/grimoires/services.
We have maintained an online nightly JUnit test report, which will be run at each night.
If Jena is used as the triple store, the JUnit test expects 2 errors and 5 failures:
| Test case | Error/failure reason |
| testGetBusinessDetail2 | The test case itself does not follow the Java binding spec. This is not a bug in Grimoires service. |
| testRelationshipFindRelatedBusinesses1 | Grimoires does not fully support "business relationship"-related operations. |
| testRelationshipGetAssertionStatusReport1 | Grimoires does not fully support "business relationship"-related operations. |
| testRelationshipDeletePublishAssertions1 | Grimoires does not fully support "business relationship"-related operations. |
| testRelationshipSetPublishAssertions1 | Grimoires does not fully support "business relationship"-related operations. |
| testRelationshipGetPublishAssertions1 | Grimoires does not fully support "business relationship"-related operations. |
| testUserGetRegisteredInfo1 | Grimoires does not fully support UDDI get_registeredInfo operation. |
If Sesame is used as the triple store instead of Jena, more errors/failures are expected. This is because Sesame does not support regular expression in searching. Note regular expression is not required by the UDDI specification.
There is a paper describing the performance benchmark methodology and results.


If you selected 'All Databanks' in the popup the result of a search will be an overview of hits grouped by databank. You can sort the results here by relevance or by databank by clicking either of these in the bar on top of the list. The number of hits to show per databank can be chosen as well.
In the overview you can either click a hit to see it directly, or click one of the databank names and this will repeat the search in that particular databank only, just like you would have selected that databank from the popup menu when doing the search.
The page you will see when doing a search in one databank only has several features that can help you to interpret the data. First of all there is a list containing four columns: one with the ID for each hit, a checkbox, a small image indicating the relevance and finally short description. The relevance image is shown only when relevant, i.e. if you did a pure boolean query there is no way a relevance ranking can be calculated and hence it is ommitted.


Class Resource.Layout
Inheritance
System.Object
Resource.Layout
Inherited Members
System.Object.Equals(System.Object)
System.Object.Equals(System.Object, System.Object)
System.Object.GetHashCode()
System.Object.GetType()
System.Object.MemberwiseClone()
System.Object.ToString()
System.Object.ReferenceEquals(System.Object, System.Object)
Assembly: Usb.Net.Android.dll
Syntax
Fields
|
Improve this Doc
View Source
abc_action_bar_title_item
Declaration
public static int abc_action_bar_title_item
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_action_bar_up_container
Declaration
public static int abc_action_bar_up_container
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_action_menu_item_layout
Declaration
public static int abc_action_menu_item_layout
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_action_menu_layout
Declaration
public static int abc_action_menu_layout
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_action_mode_bar
Declaration
public static int abc_action_mode_bar
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_action_mode_close_item_material
Declaration
public static int abc_action_mode_close_item_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_activity_chooser_view
Declaration
public static int abc_activity_chooser_view
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_activity_chooser_view_list_item
Declaration
public static int abc_activity_chooser_view_list_item
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int abc_alert_dialog_button_bar_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_alert_dialog_material
Declaration
public static int abc_alert_dialog_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_alert_dialog_title_material
Declaration
public static int abc_alert_dialog_title_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_dialog_title_material
Declaration
public static int abc_dialog_title_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_expanded_menu_layout
Declaration
public static int abc_expanded_menu_layout
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_list_menu_item_checkbox
Declaration
public static int abc_list_menu_item_checkbox
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_list_menu_item_icon
Declaration
public static int abc_list_menu_item_icon
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_list_menu_item_layout
Declaration
public static int abc_list_menu_item_layout
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_list_menu_item_radio
Declaration
public static int abc_list_menu_item_radio
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_popup_menu_header_item_layout
Declaration
public static int abc_popup_menu_header_item_layout
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_popup_menu_item_layout
Declaration
public static int abc_popup_menu_item_layout
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_screen_content_include
Declaration
public static int abc_screen_content_include
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_screen_simple
Declaration
public static int abc_screen_simple
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_screen_simple_overlay_action_mode
Declaration
public static int abc_screen_simple_overlay_action_mode
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int abc_screen_toolbar
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_search_dropdown_item_icons_2line
Declaration
public static int abc_search_dropdown_item_icons_2line
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_search_view
Declaration
public static int abc_search_view
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
abc_select_dialog_material
Declaration
public static int abc_select_dialog_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
notification_action
Declaration
public static int notification_action
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
notification_action_tombstone
Declaration
public static int notification_action_tombstone
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_media_action
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_media_cancel_action
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_template_big_media
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_template_big_media_custom
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_template_big_media_narrow
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_template_big_media_narrow_custom
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
notification_template_custom_big
Declaration
public static int notification_template_custom_big
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
notification_template_icon_group
Declaration
public static int notification_template_icon_group
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_template_lines_media
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_template_media
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int notification_template_media_custom
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
notification_template_part_chronometer
Declaration
public static int notification_template_part_chronometer
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
notification_template_part_time
Declaration
public static int notification_template_part_time
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
select_dialog_item_material
Declaration
public static int select_dialog_item_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
select_dialog_multichoice_material
Declaration
public static int select_dialog_multichoice_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
select_dialog_singlechoice_material
Declaration
public static int select_dialog_singlechoice_material
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
support_simple_spinner_dropdown_item
Declaration
public static int support_simple_spinner_dropdown_item
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
Declaration
public static int tooltip
Field Value
| Type |
Description |
| System.Int32 |
|


Hello i live in Quebec Canada, since Hydro-Quebec have install the new Smart Meter, my electricity bill have skyrocketing!
I was looking for a solution to monitor power usage directly from the breaker panel. I have find some solution, like the eGauge and The Energy Detective,but both are not in my budget range.
So i was wondering if your products, the OpenEneryMonitor can do this, monitor directly from breaker panel?
Thank you!
Re: Power Usage Monitor directly from breaker panel
A lot of people are monitoring, and some are controlling, their electricity consumption with OEM equipment and software. But as I'm not familiar with installation practice in Quebec, you'll have to do some reading and investigation yourself - or explain exactly what you mean by monitor directly from [the] breaker panel. You might also need to check up on what you're allowed to touch - a local competent electrician should be able to tell you.
Basically, our system was designed for UK practice where we have a single phase TNS or TNC-S system, 240 V, 50 Hz with a rating of either 80 or 100 A, and the primary monitor is on that incomer. But many people want to and do measure individual outgoing circuits.
So really, within the constraints of what you can safely and legally access, the choice is yours. You might like to read the article in Resources > Building Blocks about using the emonTx in N.America, as that might apply to you.
There's also a very long thread (that was started before that article was written!): http://openenergymonitor.org/emon/node/3265 that you might like to look at.
Re: Power Usage Monitor directly from breaker panel
Thank, what i mean by directly monitor from the breaker panel is if i put a sensor CT directly around each wire of each breaker on my panel like this:
If its possible,i will ask my electrician to help me out with the installation.
Thank for the forum thread , i will have look.
Re: Power Usage Monitor directly from breaker panel
I understand now. Yes, you can do that, but as the emonTx has only 4 current inputs, you will need a lot of emonTx's. A much less expensive solution will be, if your skills are up to it, to make a custom 'front-end' for a much higher powered Arduino variant that has a lot of analogue inputs. It has been done, so if you search the forums, you should find some references.
Re: Power Usage Monitor directly from breaker panel
Someone has already made a 32 input front end for emonCMS. Take a look at this unit:
http://www.brultech.com/store/product.php?id_product=108
Re: Power Usage Monitor directly from breaker panel
Great! Thank you for your answer, i will look at this and come back with my choice,
Have a nice day!


Set your github token
Set your github repository to save bookmark.
Save
Bookmarks icon made by
Smashicons
from
www.flaticon.com
is licensed by
CC 3.0 BY


my name is Fadi.
I'm 28 years old
I have a bachelor's degree in mechanical engineering from Damascus University
My thesis was about using machine learning to predict some properties of yarn cotton
after that, I realized how important the major or AI In particular and the software development in general
my hobbies are watching a tennis, and basketball match, movies
and I like playing Sudoko.
My top 10 favorite tennis players


☆*: .｡. *★,°*:.☆:Welcome to Y2D Wolrd!*.°★* 。 .｡.:*☆
Analysis by type of Kirby during the midterms.
It was an opportunity to figure out Kirby's type and see my type.
I was designing something about myself and creating a site.
I got to know myself well and pursued my own style and it was a fun experience.
As a designer, I'm still lacking a lot, but I'm trying to move forward in various ways.
As delicate as counting the stars in the night sky I want to be a designer.
I want to create a dreamy world by mixing various colors of the world.
🤍 010.5132.1050
🤍 @Y2ONDDU_
🤍 zzpx50021@naver.com


/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/ /*...*/ |
||
| 27 | package org.apache.http.impl.client.cache; |
|
|
||
/**
* Generates {@link Resource} instances whose body is stored in a temporary file.
*
* @since 4.1
*/ /*...*/ |
||
| 44 | @Immutable |
|
| 45 | public class FileResourceFactory implements ResourceFactory { |
|
| 47 | private final File cacheDir; |
|
| 48 | private final BasicIdGenerator idgen; |
|
| 50 | public FileResourceFactory(final File cacheDir) { |
|
| 51 | 1 | super(); |
| 52 | 1 | this.cacheDir = cacheDir; |
| 53 | 1 | this.idgen = new BasicIdGenerator(); |
| 54 | 1 | } |
| 56 | private File generateUniqueCacheFile(final String requestId) { |
|
| 57 | 2 | final StringBuilder buffer = new StringBuilder(); |
| 58 | 2 | this.idgen.generate(buffer); |
| 59 | 2 | buffer.append('.'); |
| 60 | 2 | final int len = Math.min(requestId.length(), 100); |
| 61 | 19 | for (int i = 0; i < len; i++) {
|
| 62 | 17 | final char ch = requestId.charAt(i); |
| 63 | 17 | if (Character.isLetterOrDigit(ch) || ch == '.') { |
| 64 | 12 | buffer.append(ch); |
| 65 | } else { |
|
| 66 | 5 | buffer.append('-'); |
| 67 | } |
|
| 68 | } |
|
| 69 | 2 | return new File(this.cacheDir, buffer.toString()); |
| 70 | } |
|
| 72 | @Override |
|
| 73 | public Resource generate( |
|
| 74 | final String requestId, |
|
| 75 | final InputStream instream, |
|
| 76 | final InputLimit limit) throws IOException { |
|
| 77 | 2 | final File file = generateUniqueCacheFile(requestId); |
| 78 | 2 | final FileOutputStream outstream = new FileOutputStream(file); |
| 79 | try { |
|
| 80 | 1 | final byte[] buf = new byte[2048]; |
| 81 | 1 | long total = 0; |
| 82 | int l; |
|
| 83 | 2 | while ((l = instream.read(buf)) != -1) {
|
| 84 | 1 | outstream.write(buf, 0, l); |
| 85 | 1 | total += l; |
| 86 | 1 | if (limit != null && total > limit.getValue()) { |
| 87 | 0 | limit.reached(); |
| 88 | 0 | break; |
| 89 | } |
|
| 90 | } |
|
| 91 | } finally { |
|
| 92 | 1 | outstream.close(); |
| 93 | 1 | } |
| 94 | 1 | return new FileResource(file); |
| 95 | } |
|
| 97 | @Override |
|
| 98 | public Resource copy( |
|
| 99 | final String requestId, |
|
| 100 | final Resource resource) throws IOException { |
|
| 101 | 0 | final File file = generateUniqueCacheFile(requestId); |
| 103 | 0 | if (resource instanceof FileResource) {
|
| 104 | 0 | final File src = ((FileResource) resource).getFile(); |
| 105 | 0 | IOUtils.copyFile(src, file); |
| 106 | 0 | } else { |
| 107 | 0 | final FileOutputStream out = new FileOutputStream(file); |
| 108 | 0 | IOUtils.copyAndClose(resource.getInputStream(), out); |
| 109 | } |
|
| 110 | 0 | return new FileResource(file); |
| 111 | } |
|
| 113 | } |


| Digital Elevation Model |
Geospatial Data Cloud site, Computer Network Information Center, Chinese Academy of Sciences. (
http://www.gscloud.cn )
|
30 m × 30 m raster |
Advanced Spaceborne Thermal Emission and Reflection Radiometer Global Digital Elevation Model Version 2 (ASTER GDEM V2) |
| Land Use Cover Maps |
Data Center for Resources and Environmental Sciences, Chinese Academy of Sciences (RESDC) (
http://www.resdc.cn )
|
30 m × 30 m raster |
2015 |
| Weather Data |
Climatic Data Center, National Meteorological Information Center, China Meteorological Administration (
http://data.cma.cn )
|
Daily temperature and precipitation |
1957–2016 |
| River Flow Records |
Annual Hydrological Report P.R. China (National Library of China) |
Monthly mean rate of flow |
2006–2015 |
| Sediment Records |
National Earth System Science Data Sharing Infrastructure, National Science and Technology Infrastructure of China (
http://www.geodata.cn )
|
Monthly mean sediment concentration in flow |
2006–2015 |


--- layout: page title: "FileOperations Module" description: "" ---
Makes a file with the given filename in the directory where it is run. {%highlight js%} FileOperations.CreateFile("filename.txt") {%endhighlight%}
Makes a file with the given filename in the specified Directory. {%highlight js%} FileOperations.CreateFileInDirectory("f.json","C:/Users/Myname/") {%endhighlight%}
Deletes File. You may include directory in filename {%highlight js%} FileOperations.DeleteFile("C:/Users/Myname/f.json") {%endhighlight%}
Copy file from startdest to enddest. The third argument passed is the new file {%highlight js%} FileOperations.CopyFile("C:/Users/Myname/f.json","C:/","new.txt") {%endhighlight%}


This project uses motion capture data to create movements that leave a trail. The program uses the locations of different parts of the body to create a paint brush affect as the body part moves across the screen.
The goal was to create a dance with this visual affect. While the current version of the code produces the dance in the video below, any motion capture data can be used. The program I have written can be easily edited to edit different variables such as: the body part the paint brush is attached to, the length the painting affect lasts, and the length if the trail created.
Getting the Data
I used the Perception Neuron Motion Capture Suit to collect the data.
The suit uses sensors to create a mapping of your body in the Axis Nueron Software. (shown in the picture below)
Converting Motion to Data
The data collected by the suit and the software was able to be downloaded into a binary FBX file. This file can then be passed into my program to change the movements you see on the screen.
The two videos below show how my movements were translated into an FBX file. The video to the right is what plays when you open the FBX file in FBX Preview on a computer.
Song: Still Feel It All by MARO
Final Product
Below is the final product I created to show how this program can be used to emphasize movements and illistrate how our bodies can move through space.


Overview
Package
Class
Use
Tree
Deprecated
Index
Help
PREV LETTER
NEXT LETTER
FRAMES
NO FRAMES
All Classes
A
B
C
D
E
F
G
H
I
J
L
M
N
O
P
R
S
T
U
V
W
X
Y
Z
_
N
NaiveAbsSemantics
- Class in
fsb.semantics.naivepso
NaiveAbsSemantics()
- Constructor for class fsb.semantics.naivepso.
NaiveAbsSemantics
NaiveAbsState
- Class in
fsb.semantics.naivepso
NaiveAbsState(MProgram, Validator, int)
- Constructor for class fsb.semantics.naivepso.
NaiveAbsState
NaiveAbsState(NaiveAbsState)
- Constructor for class fsb.semantics.naivepso.
NaiveAbsState
NaiveAbsStateFactory
- Class in
fsb.semantics.naivepso
NaiveAbsStateFactory()
- Constructor for class fsb.semantics.naivepso.
NaiveAbsStateFactory
name
- Variable in class fsb.ast.
PrimitiveSharedVal
name
- Variable in class fsb.explore.
Action
name
- Variable in class fsb.explore.
Resource
negate()
- Method in class ags.constraints.
BDDFormula
NEQ
- Static variable in class fsb.parser.
sym
newState(State)
- Method in interface fsb.explore.
StateFactory
newState(MProgram, Validator, int)
- Method in interface fsb.explore.
StateFactory
newState(State)
- Method in class fsb.semantics.eagerpso.
EagerAbsStateFactory
newState(MProgram, Validator, int)
- Method in class fsb.semantics.eagerpso.
EagerAbsStateFactory
newState(State)
- Method in class fsb.semantics.empeagerpso.
EmpEagerAbsStateFactory
newState(MProgram, Validator, int)
- Method in class fsb.semantics.empeagerpso.
EmpEagerAbsStateFactory
newState(State)
- Method in class fsb.semantics.naivepso.
NaiveAbsStateFactory
newState(MProgram, Validator, int)
- Method in class fsb.semantics.naivepso.
NaiveAbsStateFactory
newState(State)
- Method in class fsb.semantics.pso.
PSOStateFactory
newState(MProgram, Validator, int)
- Method in class fsb.semantics.pso.
PSOStateFactory
newState(State)
- Method in class fsb.semantics.sc.
SCStateFactory
newState(MProgram, Validator, int)
- Method in class fsb.semantics.sc.
SCStateFactory
newval
- Variable in class fsb.ast.
CAS
newval
- Variable in class fsb.ast.
Swap
next_token()
- Method in class fsb.parser.
Lexer
Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs.
nextClearBit(int)
- Method in class ags.constraints.
BitSet
Returns the index of the next false bit, from the specified bit (inclusive).
nextSetBit(int)
- Method in class ags.constraints.
BitSet
Returns the index of the next true bit, from the specified bit (inclusive).
NondetArit
- Class in
fsb.ast
NondetArit()
- Constructor for class fsb.ast.
NondetArit
NondetBool
- Class in
fsb.ast
NondetBool()
- Constructor for class fsb.ast.
NondetBool
nonEmpty(int)
- Method in class fsb.semantics.eagerpso.
SharedResVal
Nop
- Class in
fsb.ast
Nop()
- Constructor for class fsb.ast.
Nop
NOP
- Static variable in class fsb.parser.
sym
not(Formula)
- Static method in class ags.constraints.
BDDFormula
NOT
- Static variable in class fsb.parser.
sym
NotBool
- Class in
fsb.ast
NotBool(BoolExpr)
- Constructor for class fsb.ast.
NotBool
NotFormula
- Class in
ags.constraints
NotFormula(Formula)
- Constructor for class ags.constraints.
NotFormula
NULLARY_ABS_PRED
- Static variable in class ags.constraints.
BDDFormula.AtomComplexityComparator
num
- Variable in class ags.constraints.
TermDictionary
num
- Variable in class fsb.ast.
Allocate
NUMBER
- Static variable in class fsb.parser.
sym
numProcs
- Variable in class fsb.explore.
State
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
PREV LETTER
NEXT LETTER
FRAMES
NO FRAMES
All Classes
A
B
C
D
E
F
G
H
I
J
L
M
N
O
P
R
S
T
U
V
W
X
Y
Z
_


(defun OP:GetPoint (iPointID / oPoint cPoints)
;|
OP_GetPoint_1_0.lsp
Version History
1.0.1 October 24, 2017 Initial Release
Dependencies: OP:c3ddoc
http://justopie.github.io/blog/2016/01/how-to-add-a-point-group-with-autolisp/#c3ddoc
Usage: (OP:GetPoint)
Arguments: iPointID
Type: Integer or String
Returns: AECCPoint object or nil
Copyright © 2017 by Richard Lawrence
|;
(if (and (op:c3ddoc)
(setq cPoints (vlax-get-property _C3DDoc 'Points))
(not (vl-catch-all-error-p
(setq oPoint (vl-catch-all-apply
'vlax-invoke-method
(list cPoints 'find iPointID)
)
)
)
)
)
oPoint
)
)
Select all


Cute Animal Zoo
Experience nature as it was
meant
to be seen!
Home
News
Shows
Tickets
Virtual Tour
Map
About Us
Tickets
Prices
Season Ticket: R395
Patron Package: R800
Single Adult: R65
Single Child: R45
Single Pensioner: R55
Purchase tickets
Number of tickets:
First name:
Last name:
Email:
Comments:


{% extends "layout.html" %}
{% block title %}
Index
{% endblock %}
{% block main %}
Welcome to the shopping list creator!
Go to the meal designer to add and design your meals.
Go to the menu planner to plan out your week. You can plan for up to three meals per day.
Go to your pantry (optional) if you wish to subtract what you already have.
And finally, go to your shopping list to see what you need to buy for the week!


ASPIRIN ENTERIC COATED, REGULAR STRENGTH- aspirin tablet, coated
WALGREEN CO.
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
Reye’s syndrome: Children and teenagers who have or are recovering from chicken pox or flu-like symptoms should not use this product. When using this product, if changes in behavior with nausea and vomiting occur, consult a doctor because these symptoms could be an early sign of Reye's syndrome, a rare but serious illness.
Allergy alert: Aspirin may cause a severe allergic reaction, which may include:
hives
facial swelling
shock
asthma (wheezing)
Stomach bleeding warning: This product contains an NSAID, which may cause severe stomach bleeding. The chance is higher if you:
are age 60 or older
have had stomach ulcers or bleeding problems
take a blood thinning (anticoagulant) or steroid drug
take other drugs containing prescription or nonprescription NSAIDs [aspirin, ibuprofen, naproxen, or others]
have 3 or more alcoholic drinks every day while using this product
take more or for a longer time than directed
stomach bleeding warning applies to you
you have a history of stomach problems, such as heartburn
you have high blood pressure, heart disease, liver cirrhosis, or kidney disease
you have asthma
you are taking a diuretic
taking a prescription drug for
gout
diabetes
arthritis
These could be signs of a serious condition.
drink a full glass of water with each dose
adults and children 12 years and over: take 1 to 2 tablets every 4 hours while symptoms last
do not take more than 12 tablets in 24 hours unless directed by a doctor.
children under 12 years: ask a doctor
use by expiration date on package
store at 25ºC (77ºF); excursions permitted between 15°-30°C (59°-86°F)
black iron oxide, cellulose, colloidal silicon dioxide, corn starch, D&C yellow #10 aluminum lake, FD&C yellow #6 aluminum lake, hypromellose, polydextrose, polyethylene glycol, polyvinyl acetate phthalate, propylene glycol, shellac wax, simethicone, sodium alginate, sodium bicarbonate, stearic acid, talc, titanium dioxide, triacetin, triethyl citrate
Well at
Walgreens
WALGREENS PHARMACIST RECOMMENDEDǂ
NDC 0363-0227-14
ENTERIC COATED
REGULAR STRENGTH
Aspirin 325
325 mg / Pain Reliever (NSAID)
• Safety coated for aspirin
regimen users • Easy to swallow
500
ENTERIC COATED TABLETS
Compare to Ecotrin® active ingredientǂǂ
TAMPER EVIDENT: DO NOT USE IF IMPRINTED SAFETY SEAL UNDER CAP IS BROKEN OR MISSING
ǂWalgreens Pharmacist Survey Study, November 2014.
ǂǂThis product is not manufactured or distributed by Prestige Brands, Inc., owner of the registered trademark Ecotrin®.
50844 ORG111322714 ORG0515-F
DISTRIBUTED BY: WALGREEN CO.
200 WILMOT RD., DEERFIELD, IL 60015
100% SATISFACTION GUARANTEED
walgreens.com ©2015 Walgreen C0.
Walgreens 44-227
|
ASPIRIN
ENTERIC COATED, REGULAR STRENGTH aspirin tablet, coated | ||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||
|
| Labeler - WALGREEN CO. (008965063) |
| Establishment | |||
| Name | Address | ID/FEI | Business Operations |
|---|---|---|---|
| LNK International, Inc. | 832867837 | MANUFACTURE(0363-0227) |
| Establishment | |||
| Name | Address | ID/FEI | Business Operations |
|---|---|---|---|
| LNK International, Inc. | 038154464 | PACK(0363-0227) |


Save Under
You can choose the path and file name and then save the plot within the rectangular frame as bitmap.