text:
Real-time Java, Part 3
Threading and synchronization
Threading and synchronization considerations in the Real-time Specification for Java
Content series:
This content is part # of # in the series: Real-time Java, Part 3
This content is part of the series:Real-time Java, Part 3
Stay tuned for additional content in this series.
Threading and synchronization are core features of the Java programming language, described in the Java Language Specification (JLS). The RTSJ extends the core capabilities of the JLS in a number of ways. (See Related topics for links to the JLS and RTSJ.) For example, the RTSJ introduces new real-time (RT) thread types that must follow a stricter scheduling policy than a regular Java thread. Another example is priority inheritance, a locking policy that defines how lock synchronization is managed when a lock is contested.
Understanding the management of priorities and priority queues is useful in understanding the RTSJ changes to threading and synchronization. Priorities are also an important tool for use by RT applications. This article describes aspects of RTSJ threading and synchronization by discussing how thread priorities and priority queues are managed. The discussion includes considerations that you should take into account when developing, deploying, and executing RT applications, including those you build using IBM WebSphere® Real Time (see Related topics).
Understanding regular Java threads
Threads defined in the JLS are called regular Java threads. A regular Java thread is an instance of the
java.lang.Thread class that has an integer priority in the range from 1 to 10. To accommodate a number of execution platforms, the JLS allows a lot of flexibility in how you implement, schedule, and manage priorities of regular Java threads.
WebSphere VMs on Linux®, including WebSphere Real Time, use native threading services that the Linux operating system provides. You can appreciate aspects of Java threading and synchronization by understanding aspects of Linux threading and synchronization.
Linux threading and synchronization
The Linux operating system has provided different user-level threading implementations throughout its history. The Native POSIX Thread Library (NPTL) (see Related topics) is the latest strategic threading direction for Linux and the one used by WebSphere VMs. The advantages of NPTL over its predecessors are POSIX compliance and better performance. POSIX services are available at compile time through system header files. POSIX services are available at run time through the
libpthread.so dynamic library and underlying Linux kernel support. The Linux kernel performs thread scheduling based on static controls, such as thread priority levels, and on certain dynamic conditions of the threads executing in the system.
POSIX allows you to create POSIX threads (pthreads) with different thread scheduling policies and priorities to meet differing application needs. Three such scheduling policies are:
SCHED_OTHER policy is used for traditional user tasks such as program-development tools, office applications, and Web browsers.
SCHED_RR and
SCHED_FIFO are intended to be used by applications requiring more deterministic and timely needs. The primary difference between
SCHED_RR and
SCHED_FIFO is that
SCHED_RR time slices a thread's execution, whereas
SCHED_FIFO doesn't. The
SCHED_OTHER and
SCHED_FIFO policies are used by WebSphere Real Time and are described in more detail below. (We don't cover the
SCHED_RR policy, which WebSphere Real Time doesn't use.)
POSIX provides locking and synchronization support through the
pthread_mutex data type.
pthread_mutexes can be created with different locking policies. A locking policy is intended to affect execution behavior when more than one thread wants to acquire the same lock simultaneously. Standard Linux versions support a single default policy, whereas RT Linux versions also support the priority inheritance locking policy. We'll describe the priority inheritance policy in more detail in this article's Synchronization overview section.
Linux scheduling and locking involve managing first in, first out (FIFO) queues.
Thread scheduling with regular Java threads
The RTSJ indicates that the behavior of regular Java threads is as defined in the JLS. In WebSphere Real Time, regular Java threads are implemented using the Linux's
POSIX SCHED_OTHER scheduling policy. The
SCHED_OTHER policy is intended for applications such as compilers and word processors, not for tasks requiring more determinism.
In the 2.6 Linux kernel, the
SCHED_OTHER policy supports 40 priority levels. These 40 priority levels are managed on a per-processor basis, which means that:
- Linux attempts to execute a thread on the same processor for cache performance reasons.
- Thread scheduling predominantly uses per-processor locks instead of per-system locks.
If required, Linux migrates threads from one processor to another to balance workloads.
Within each of the 40 priority levels, Linux manages an active queue and an expiration queue. Each queue contains a linked list of threads or is empty. The active and expiration queues are used for efficiency, load balancing, and other purposes. Logically, you can view the system as managing a single FIFO queue, termed a run-queue, for each of the 40 priorities. A thread is dispatched from the front of the nonempty run-queue with the highest priority. That thread is removed from the queue and executes for a period of time called a time quantum or time slice. When an executing thread expires its time quantum, it's placed at the end of the run-queue for its priority and assigned a new time quantum. By dispatching from a queue's head and placing expired threads at a queue's tail, execution happens in a round-robin fashion within a priority.
The time quantum given to a thread depends on the thread's assigned priority. Threads with higher assigned priorities are given longer time quanta to execute. To prevent threads from hogging the CPU, Linux dynamically raises or lowers a thread's priority based on factors such as whether the thread is I/O or CPU bound. A thread can voluntarily relinquish its time slice by yielding (such as by calling
Thread.yield()), or a thread can relinquish control by blocking, at which point the thread waits for an event to occur. One such event could be triggered by a lock being released.
The VM in WebSphere Real Time doesn't explicitly assign the 10 regular Java thread priorities across the range of the 40
SCHED_OTHER Linux thread priorities. All regular Java threads, regardless of their Java priority, are assigned the default Linux priority. The default Linux priority is in the middle of the range of the 40
SCHED_OTHER priorities. By using the default, regular Java threads execute with fairness in the sense that, regardless of dynamic priority adjustments that Linux may make, every regular Java thread in a run-queue eventually executes. This assumes a system with only regular Java threads executing and not, for example, a system that's executing RT threads.
Note that both the VM in WebSphere Real Time and the non-RT version of the WebSphere VM use the
SCHED_OTHER policy and default priority assignment for regular Java threads. By using the same policy, both JVMs have similar, but not identical, thread scheduling and synchronization characteristics. Changes in the WebSphere Real Time class libraries, changes in the JVM, and changes in the JIT compiler in support of the RTSJ as well as the introduction of the RT Metronome garbage collector (see Related topics) make it impossible for applications to run with identical timing and performance characteristics in both JVMs. During IBM WebSphere Real Time testing, timing differences surfaced race conditions (in other words, bugs) in test programs that had run fine for years on other JVMs.
Code example using regular Java threads
Listing 1 shows a program using regular Java threads that determines how many iterations of a loop can be executed by each of two created threads in a five-second interval:
Listing 1. Regular Java threads
class myThreadClass extends java.lang.Thread { volatile static boolean Stop = false; // Primordial thread executes main() public static void main(String args[]) throws InterruptedException { // Create and start 2 threads myThreadClass thread1 = new myThreadClass(); thread1.setPriority(4); // 1st thread at 4th non-RT priority myThreadClass thread2 = new myThreadClass(); thread2.setPriority(6); // 2nd thread at 6th non-RT priority thread1.start(); // start 1st thread to execute run() thread2.start(); // start 2nd thread to execute run() // Sleep for 5 seconds, then tell the threads to terminate Thread.sleep(5*1000); Stop = true; } public void run() { // Created threads execute this method System.out.println("Created thread"); int count = 0; for (;Stop != true;) { // continue until asked to stop count++; Thread.yield(); // yield to other thread } System.out.println("Thread terminates. Loop count is " + count); } }
The program in Listing 1 has three user threads that are regular Java threads:
- The primordial thread:
- It's the main thread that is implicitly created on process startup and executes the
main()creates two regular Java threads: one thread with priority 4 and another thread with priority 6.
- This main thread intentionally blocks itself by sleeping for five seconds by making a call to
- After the five-second sleep, this thread directs the other two threads to terminate.
- It's the main thread that is implicitly created on process startup and executes the
- A thread at priority 4:
- This thread is created by the primordial thread, which executes the
run()method containing a
- The thread:
- Increments a count in each loop iteration.
- Voluntarily relinquishes its time slice by making a call to
- Terminates when the main thread has requested. Just prior to termination, the thread prints out the loop count.
- This thread is created by the primordial thread, which executes the
- A thread at priority 6: This thread performs the same actions as the thread at priority 4.
If this program is run on a uniprocessor or unloaded multiprocessor system, each thread prints out close to the same
for loop iteration count. In one run, the program printed:
Created thread Created thread Thread terminates. Loop count is 540084 Thread terminates. Loop count is 540083
If the call to
Thread.yield() is removed, the loop counts for the two threads can be close but are highly unlikely to be identical. Both threads are assigned the same default priority in the
SCHED_OTHER policy, so both threads are given the same time slice to execute. Because the threads execute identical code, they should have similar dynamic priority adjustments and execute in a round-robin fashion from the same run-queues. But, because the thread at priority 4 executes first, it should have a slightly larger share of the five-second execution interval and print out a higher loop count.
Understanding RT threads
An RT thread is an instance of
javax.realtime.RealtimeThread. The RTSJ requires that an implementation of the specification must provide a contiguous range of at least 28 priorities for RT threads. These priorities are referred to as real-time priorities. The starting value of the RT priority range is not mandated by the specification other than it must be numerically higher than 10 -- the highest priority value given to a regular Java thread. For portability reasons, application code should use the new
PriorityScheduler class's
getPriorityMin() and
getPriorityMax() methods to determine the range of available RT priority values.
Motivation for RT threads
Thread scheduling in the JLS is imprecise and provides only 10 priority values. The POSIX
SCHED_OTHER policy, as implemented by Linux, meets the needs of a variety of applications. But the
SCHED_OTHER policy has some undesirable characteristics. Dynamic priority adjustments and time slicing can happen at unpredictable times. The number (40) of
SCHED_OTHER priorities is not that large, and a range of these priorities is already assumed by applications with regular Java threads and for dynamic priority adjustments. The JVM also requires priorities for internal threads for special purposes such as garbage collection (GC).
The lack of determinism, the need for more priority levels, and the desire for compatibility with existing applications motivated the need for extensions that would provide new scheduling capabilities to Java programmers. Classes in the
javax.realtime package, as described in the RTSJ, provide these capabilities. In WebSphere Real Time, the Linux
SCHED_FIFO scheduling policy addresses RTSJ scheduling needs.
Thread scheduling with RT Java threads
In WebSphere Real Time, 28 RT Java priorities are supported and have a range of 11 to 38. APIs of the
PriorityScheduler class should be used to retrieve this range. This section describes more details of thread scheduling as described in the RTSJ and aspects of the Linux
SCHED_FIFO policy that more than meet the RTSJ's requirements.
The RTSJ views RT priorities as being logically implemented by the run-time system maintaining a separate queue for each of the RT priorities. The thread scheduler must dispatch from the head of the highest-priority queue that is not empty. Note that if no threads are in any of the queues for RT priorities, a regular Java thread is dispatched that executes as described in the JLS (see Thread scheduling with regular Java threads).
A dispatched thread with an RT priority is allowed to execute until it blocks, voluntarily relinquishes control by yielding, or is preempted by a thread with a higher RT priority. A thread with an RT priority that voluntarily yields is placed at the back of the queue for its priority. The RTSJ also requires that such scheduling be done in constant time and cannot vary based on factors such as the number of RT threads that are executing. The 1.02 version of the RTSJ applies these rules to uniprocessor systems; the RTSJ doesn't mandate how the scheduling happens on multiprocessor systems.
Linux provides all the proper RTSJ scheduling requirements with the
SCHED_FIFO policy. The
SCHED_FIFO policy is intended for RT and not for user tasks.
SCHED_FIFO differs from the
SCHED_OTHER policy by providing 99 priority levels.
SCHED_FIFO does not time slice threads. Also, the
SCHED_FIFO policy doesn't dynamically adjust the priority of RT threads except through the priority inheritance locking policy, which the Synchronization overview section describes. Because of priority inheritance, priority adjustments are required by the RTSJ.
Linux provides constant time scheduling for both RT threads and regular Java threads. On multiprocessor systems, Linux tries to emulate the behavior of a single global queue of RT threads that are dispatched to available processors. This is closest to the spirit of the RTSJ but it does differ from the
SCHED_OTHER policy used for regular Java threads.
Problematic code example using RT threads
Listing 2 modifies the code from Listing 1 to create RT threads instead of regular Java threads. The use of
java.realtime.RealtimeThread instead of
java.lang.Thread indicates the distinction. The first thread is created at the 4th RT priority level, and the second thread is created at the 6th RT priority level, as determined by the
getPriorityMin() method.
Listing 2. RT threads
import javax.realtime.*; class myRealtimeThreadClass extends javax.realtime.RealtimeThread { volatile static boolean Stop = false; // Primordial thread executes main() public static void main(String args[]) throws InterruptedException { // Create and start 2 threads myRealtimeThreadClass thread1 = new myRealtimeThreadClass(); // want 1st thread at 4th real-time priority thread1.setPriority(PriorityScheduler.getMinPriority(null)+ 4); myRealtimeThreadClass thread2 = new myRealtimeThreadClass(); // want 2nd thread at 6th real-time priority thread2.setPriority(PriorityScheduler.getMinPriority(null)+ 6); thread1.start(); // start 1st thread to execute run() thread2.start(); // start 2nd thread to execute run() // Sleep for 5 seconds, then tell the threads to terminate Thread.sleep(5*1000); Stop = true; } public void run() { // Created threads execute this method System.out.println("Created thread"); int count = 0; for (;Stop != true;) { // continue until asked to stop count++; // Thread.yield(); // yield to other thread } System.out.println("Thread terminates. Loop count is " + count); } }
The modified code in Listing 2 has a few problems. If the program is run in a uniprocessor environment, it never terminates and prints only the following:
Created thread
This result can be explained by the behavior of RT thread scheduling. The primordial thread remains a regular Java thread and runs with a non-RT (
SCHED_OTHER) policy. As soon as the primordial thread starts the first RT thread, the RT thread preempts the primordial thread and the RT thread runs indefinitely because it's not bound by time quanta nor does the thread block. After the primordial thread is preempted, it's never allowed to execute, so it never starts the second RT thread.
Thread.yield() has no effect on allowing the primordial thread to execute -- because yielding logically places the RT thread at the end of its run-queue -- but the thread scheduler dispatches this same thread again because it's the thread at the front of the run-queue with the highest priority.
The program also fails on a two-processor system. It prints the following:
Created thread Created thread
The primordial thread is allowed to create both RT threads. But after creating the second thread, the primordial thread is preempted and is never allowed to tell the threads to terminate because the two RT threads execute on the two processors and never block.
The program runs to completion and produces a result on a system with three or more processors.
RT code example that runs on a single processor
Listing 3 shows the code modified so that it runs correctly on a uniprocessor system. The
main() method's logic is moved to a "main" RT thread that has the 8th RT priority. This priority is higher than the priority given to either of the two other RT threads that the main RT thread creates. Having the highest RT priority allows this main RT thread to create the two RT threads successfully and also lets the main RT thread preempt the currently running thread when it wakes up from its five-second sleep.
Listing 3. Modified RT thread example
import javax.realtime.*; class myRealtimeThreadClass extends javax.realtime.RealtimeThread { volatile static boolean Stop = false; static class myRealtimeStartup extends javax.realtime.RealtimeThread { public void run() { // Create and start 2 threads myRealtimeThreadClass thread1 = new myRealtimeThreadClass(); // want 1st thread at 4th real-time priority thread1.setPriority(PriorityScheduler.getMinPriority(null)+ 4); myRealtimeThreadClass thread2 = new myRealtimeThreadClass(); // want 1st thread at 6th real-time priority thread2.setPriority(PriorityScheduler.getMinPriority(null)+ 6); thread1.start(); // start 1st thread to execute run() thread2.start(); // start 2nd thread to execute run() // Sleep for 5 seconds, then tell the threads to terminate try { Thread.sleep(5*1000); } catch (InterruptedException e) { } myRealtimeThreadClass.Stop = true; } } // Primordial thread creates real-time startup thread public static void main(String args[]) { myRealtimeStartup startThr = new myRealtimeStartup(); startThr.setPriority(PriorityScheduler.getMinPriority(null)+ 8); startThr.start(); } public void run() { // Created threads execute this method System.out.println("Created thread"); int count = 0; for (;Stop != true;) { // continue until asked to stop count++; // Thread.yield(); // yield to other thread } System.out.println("Thread terminates. Loop count is " + count); } }
When this program is run on a uniprocessor, it prints the following:
Created thread Thread terminates. Loop count is 32767955 Created thread Thread terminates. Loop count is 0
The program's output shows that all threads run and terminate, but only one of the two threads executes an iteration of the
for loop. This output is explained by considering the priorities of the RT threads. The main RT thread runs until it blocks by the call to
Thread.sleep(). The main RT thread creates the two RT threads, but only the second RT thread at the 6th RT priority is allowed to run while the main RT thread sleeps. This thread runs until the main RT thread wakes up from its sleep and tells the threads to terminate. Once the main RT thread has itself terminated, the thread at the 6th priority is allowed to execute and terminate. It does so and prints out the loop count with nonzero value. After this thread terminates, the thread at 4th RT priority is allowed to run, but it merely bypasses the
for loop because it has been directed to terminate. That thread prints out the zero loop count value before it terminates.
Threading considerations for RT applications
This section discusses features of RT threading that you need to take into account when porting applications to use RT threads or when writing new applications to exploit RT threading.
New extensions for RT threads
The RTSJ specifies facilities for creating RT threads to start at a specific or relative time. You can create a thread to run certain logic at specified time intervals or periods. You can define a thread to have an
AsynchronousEventHandler (AEH) execute (fire) when this logic does not complete within the specified period. You can also define limits on the type and amount of memory that a thread can consume such that an
OutOfMemoryError is thrown if the thread consumes more than that limit. These facilities are available only to RT threads, not to regular Java threads. You can find more information about these facilities in the RTSJ.
Thread.interrupt() and pending exceptions
Thread.interrupt() behavior is extended for RT threads. This API interrupts blocked threads as described in the JLS. This exception is also raised in a method that a user has explicitly marked as interruptible by adding the
Throws AsynchronouslyInterruptedException clause to the method declaration. The exception is also sticky to the thread in the sense that the user must explicitly clear the exception; otherwise it remains bound -- termed pending -- to the thread. If the user doesn't clear the exception, a thread can terminate with this sticky exception still bound. This error is benign if the thread terminates in the "normal" fashion but not in applications that do their own form of pooling of RT threads. That is, a thread could be returned to a pool with an
InterruptedException still bound. In this case, the code that does thread pooling should explicitly clear the exception; otherwise, the exception might be spuriously thrown when the pooled thread, with the bound exception, is reassigned.
Primordial thread and application dispatch logic
The primordial thread is always a regular Java thread -- not an RT thread. The first RT thread is always created by a regular Java thread. That RT thread would immediately preempt the regular Java thread if there were insufficient available processors to run both the RT thread and the regular Java thread simultaneously. Preemption could prevent the regular Java thread from creating further RT threads or other logic to get the application into an appropriately initialized state.
You can avoid this problem by performing application initialization from a high-priority RT thread. This technique might be required for applications or libraries that do their own form of thread pooling and thread dispatching. That is, thread-dispatch logic should be run either at high priority or within a high-priority thread. Appropriate priority selection for execution of thread-pooling logic can help prevent problems encountered in thread enqueueing and dequeueing.
Runaway threads
Regular Java threads execute with time quanta, and the dynamic priority adjustments the scheduler performs, based on CPU usage, allow all regular Java threads to execute eventually. In contrast, RT threads are not bound by time quanta, and the thread scheduler does not do any form of dynamic priority adjustments based on CPU usage. These differences in the scheduling policies between regular Java threads and RT threads create the chance that runaway RT threads can occur. Runaway RT threads can take control of the system and prevent any other applications from running, prevent users from signing on to the system, and so on.
During development and testing, one technique that can help lessen the impact of runaway threads is to set a limit on the amount of CPU a process can use. On Linux, limiting CPU consumption causes a runaway thread to be killed when it exhausts the CPU limit. Also, programs that monitor system state or provide system login should run at high RT priority so that the program is allowed to preempt the problematic threads.
Mapping from Java priorities to operating-system priorities
On Linux, the POSIX
SCHED_FIFO policy provides 99 RT priorities in the integer range of 1 to 99. From this system range, priorities 11 through 89 are used by the WebSphere VM, and a subset of this range is used to implement the 28 RTSJ priorities. The mapping of 28 RT Java priorities to this range of POSIX system priorities is described in IBM WebSphere Real Time documentation. But application code shouldn't make a dependence on this mapping and should rely only on the relative ordering, at the Java level, of the 28 RT priorities. This lets the JVM remap this range and provide improvements in future WebSphere Real Time releases.
Applications could use
SCHED_FIFO priority 1 or priority 90 to implement daemons or other RT processes if they require a RT priority above or below those used in WebSphere Real Time.
JNI AttachThread()
The Java Native Interface (JNI) lets you use the JNI
AttachThread() API to attach threads created in C code to a JVM, but the RTSJ does not make changes or provisions to the JNI interface for attaching RT threads. Accordingly, applications should avoid creating POSIX RT threads in C code that they intend to attach to the JVM. Instead, such RT threads should be created in the Java language.
Forked processes and RT priorities
A thread can fork another process. On Linux, the primordial thread of the forked process inherits the priority of the parent thread that forked it. If the forked process is a JVM, the primordial thread of the JVM is created with an RT priority. This would violate the order that regular Java threads, such as the primordial thread, have lower scheduling preference to RT threads. To prevent this situation, the JVM forces the primordial thread to have a non-RT priority -- that is, have a
SCHED_OTHER policy.
Thread.yield() yields execution only to a thread at the same priority and never yields execution to a thread with a higher or lower priority. Yielding only to a thread of the same priority means that
Thread.yield() is of questionable use in an RT application that uses more than one RT priority. You should avoid
Thread.yield() unless it's absolutely necessary.
javax.realtime.NoHeapRealtimeThread (NHRT) is another new thread type in the RTSJ that is a subclass of
javax.realtime.RealtimeThread. An NHRT has the same scheduling characteristics as RT threads as we've described them, except that an NHRT isn't preempted by GC and an NHRT can't read or write to the Java heap. NHRTs are an important aspect of the RTSJ and will be discussed in a later article in this series.
AsynchronousEventHandlers (AEHs) are new with the RTSJ and can be viewed as a form of RT thread that executes when an event occurs. For example, you can set an AEH to fire at a specific or relative time. AEHs also have the same scheduling characteristics as RT threads and come in heap and no-heap flavors.
Synchronization overview
Many Java applications use Java threading features directly, or the applications being developed use libraries that involve more than one thread. A primary concern in multithreaded programming is to make sure the program runs correctly -- thread safe -- in a system where multiple threads are executing. Making a program thread safe could require serializing access to data that is shared between more than one thread using synchronization primitives such as locks or atomic machine operations. Programmers of RT applications are often challenged to make the programs execute within certain time constraints. To meet the challenge, they may need to know implementation details, implications, and performance attributes of the components they're using.
The remainder of this article discusses aspects of the core synchronization primitives that the Java language provides, how these primitives change in the RTSJ, and some implications that RT programmers need to be aware of when they use these primitives.
Java language synchronization overview
The Java language provides three core synchronization primitives:
- Synchronized methods and blocks allow a thread to lock an object on entry and unlock the object on exit (to the method or block).
Object.wait()releases the object lock and the thread waits.
Object.notify()unblocks a thread
wait()ing on the object.
notifyAll()unblocks all waiters.
Threads doing
wait() and
notify() must currently have locked the object.
Lock contention occurs when a thread tries to lock an object that is already locked by another thread. When this happens, the thread failing to acquire the lock is put into a logical queue of lock contenders for the object. Similarly, several threads could have done
Object.wait() on the same object, and so there's a logical queue of waiters for the object. The JLS doesn't specify how these queues are managed, but the RTSJ does stipulate the behavior.
Priority-based synchronization queues
The spirit of the RTSJ is that all queues of threads are FIFO and priority based. Priority-based FIFO behavior -- as in the earlier synchronization example where the highest-priority thread is chosen to execute next -- also applies to the queues of lock contenders and lock waiters. From a logical viewpoint, there is a FIFO priority-based queue of lock contenders similar to the execution queue of threads waiting to execute. There's also a similar queue of lock waiters.
When a lock is released, the system chooses the thread from the front of the highest-priority queue of contenders to try to lock the object. Similarly, when a
notify() is done, the thread from the front of the highest-priority queue of waiters is unblocked from its wait. A lock release or lock
notify() operation is analogous to a scheduling dispatch operation in the sense that the thread at the head of the highest-priority queue is acted on.
To support priority-based synchronization, modifications needed to be made to RT Linux. Changes were also necessary to the VM in WebSphere Real Time to delegate to Linux the responsibility of selecting which thread is unblocked when a
notify() operation is performed.
Priority inversion and priority inheritance
Priority inversion is a condition where a high-priority thread is blocked on a lock held by a low-priority thread. A medium-priority thread might preempt the low-priority thread while it holds the lock and run in preference to the low-priority thread. The inversion of priorities delays both the low- and the high-priority thread from making progress. The delays caused by priority inversion could prevent critical deadlines from being met. This condition is shown in the first timeline of Figure 1.
Priority inheritance is a technique for avoiding priority inversion. Priority inheritance is mandated by the RTSJ. The idea behind priority inheritance is that at the point of lock contention, the lock holder's priority is boosted to that of the thread wishing to acquire the lock. The lock holder's priority is "deboosted" back to its base priority when it releases the lock. In the scenario just described, the low-priority thread runs at high priority when lock contention occurs until the point in time that it releases the lock. On the lock release, the high-priority thread locks the object and continues execution. The medium-priority thread is prevented from delaying the high-priority thread. The second timeline in Figure 1 shows how the locking behavior of the first timeline changes when priority inheritance is in effect.
Figure 1. Priority inversion and priority inheritance
It's possible that, at the point the high-priority thread tries to acquire the low-priority thread's lock, the low-priority thread itself is blocked on a different lock held by a another thread. In this case, the low-priority thread and that other thread are boosted. That is, priority inheritance could require priority boosting and deboosting of a group of threads.
Priority inheritance implementation
Priority inheritance is provided through Linux kernel functionality that is exported to user space through POSIX locking services. A solution entirely in user space is undesirable because:
- The Linux kernel can be preempted and is subject to priority inversion. Priority inheritance is also needed for certain system locks.
- Attempting a solution in user space causes difficult-to-solve race conditions.
- Priority boosting requires a kernel call anyway.
The POSIX lock type is a
pthread_mutex. A POSIX API for creating a
pthread_mutex lets the mutex implement the priority-inheritance protocol. There are POSIX services for locking a
pthread_mutex and unlocking a
pthread_mutex. These are the points where priority-inheritance support takes effect. Linux performs all locking in user space in cases without contention. When lock contention occurs, priority boosting and synchronization-queue management is done in kernel space.
The WebSphere VM uses the POSIX locking APIs to implement the core Java language synchronization primitives we described earlier and for priority-inheritance support. User-level C code can also use these POSIX services. At the point of a Java level lock operation, a unique
pthread_mutex is allocated and bound to a Java object using an atomic machine operation. At the point of a Java level unlock operation, the
pthread_mutex is unbound from the object using an atomic operation, provided there was no contention for the lock. With contention, a POSIX lock and unlock operation would trigger Linux kernel priority inheritance support to occur.
To help minimize mutex allocation and locking time, the JVM manages a global lock cache and a per-thread lock cache where each cache contains unallocated
pthread_mutexes. A mutex in the thread-specific cache is acquired from the global lock cache. Before it is put into the thread lock cache, the mutex is prelocked by the thread. Uncontested unlock operations return a locked mutex to the thread lock cache. The assumption here is that uncontested locking is the norm, and POSIX-level locking is both reduced and amortized by reusing prelocked mutexes.
The JVM itself has internal locks used to serialize access to critical JVM resources such as the thread list and the global lock cache. These locks are based on priority inheritance and are held for short time intervals.
Synchronization considerations for RT applications
This section covers some features of RT synchronization that can help developers porting applications to use RT threads or writing new applications to exploit RT threading.
Lock contention between regular Java threads and RT threads
An RT thread can be blocked on a lock held by a regular Java thread. When this happens, priority inheritance takes over so that the regular Java thread is priority boosted to the RT thread's priority for as long as it holds the lock. The regular Java thread inherits all the scheduling characteristics of an RT thread:
- The regular Java thread runs with
SCHED_FIFOpolicy and so the thread does not time slice.
- Dispatch and yielding happen from the RT run-queue of the boosted priority.
This behavior reverts to
SCHED_OTHER when the regular Java thread releases the lock. If either of the threads created in Listing 1 were to run while holding a lock required by an RT thread, that program would not terminate and would exhibit the same problems we described in Problematic code example using RT threads. Because this situation is possible, doing spin loops and yielding is not advisable for any threads executing within a real-time JVM.
Lock contention between NHRTs and RT threads
An NHRT could block on a lock held by an RT thread (or a regular Java thread for that matter). While the RT thread holds the lock, GC could preempt the RT and indirectly preempt the NHRT. The NHRT needs to wait until the RT is no longer preempted by GC and then release the lock before the NHRT has a chance to execute. Preemption of an NHRT by GC can be a serious problem if the NHRT is performing a time-critical function.
The deterministic garbage collector in WebSphere Real Time keeps pause times under one millisecond, making the NHRT preemption more deterministic. If such pauses are not tolerable, you could bypass the problem by avoiding lock sharing between NHRTs and RT threads. If locking is mandatory, you could consider having RT- and NHRT-specific resources and locks. For example, applications that implement thread pooling could consider separate pools and pool locks for NHRTs and RT threads.
Also, the
javax.realtime package provides the following:
WaitFreeReadQueueclass for the primary purpose of passing objects from an RT thread to NHRT.
WaitFreeWriteQueueclass for the primary purpose of passing objects from an NHRT to an RT thread.
These classes guarantee that an RT thread, which could be blocked by GC while performing a wait-free operation, won't hold a lock that an NHRT requires in performing a wait-free operation.
Synchronization in the javax.realtime package
javax.realtime methods are intentionally not synchronized because overheads in synchronization occur even when a lock is uncontested. If synchronization is required, the caller is responsible for wrapping the required
javax.realtime methods in synchronized methods or blocks. A programmer must consider adding such synchronization when the
java.realtime package's methods are used.
Synchronization in the core JLS packages
In contrast, core JLS services such as
java.util.Vector are already synchronized. Also, certain core JLS services can do some internal locking to serialize certain shared resources. Because of this synchronization, when using core JLS services, you must exercise care to avoid the problem of NHRT preemption by GC (see Lock contention between NHRTs and RT threads).
Uncontested locking performance
Benchmarking and instrumentation of non-RT applications have shown that locking is predominantly uncontested. Uncontested locking is also believed to be the predominant case in RT applications, particularly when existing components or libraries are reused. It can be desirable to have a small and deterministic cost for locking that is known to be uncontested but where synchronization directives are hard to avoid or remove.
As we described earlier, an uncontested lock operation involves some setup and an atomic machine instruction. An unlock operation involves an atomic machine operation. The setup for a lock operation involves allocation of a prelocked mutex. The allocation is considered the largest variable cost in an uncontested lock operation.
RealtimeSystem.setMaximumConcurrentLocks() can help control this variable cost.
RealtimeSystem.setMaximumConcurrentLocks(int numLocks) cause the VM in WebSphere Real Time to preallocate
numLocks mutexes to the global lock cache. The global lock cache feeds the per-thread lock caches. By using this
RealTimeSystem API, you can reduce the chance that lock initialization happens within a time-critical code region.
RealTimeSystem.getMaximumConcurrentLocks() can be used to help decide what number should be used in the
setMaximumConcurentLocks() call, but note that
getMaximumConcurrentLocks() gives lock usage at the point of the call, not the high-water mark. A future RTSJ version may provide an API to provide the high-water mark. Do not provide ridiculously large values for the value of
numLocks because the call to
setMaximimConcurrentLocks() could take an inordinate amount of time and memory to create that many locks. Also note that this API is defined to be JVM specific, so other JVMs might ignore the call or provide different behavior.
Contested locking performance
A thread can simultaneously hold more than one lock, and these locks might have been acquired in a certain order. The set of all such locking patterns forms a lock hierarchy. Priority inheritance can mean the boosting and deboosting of a group of threads. The number of threads in the group should be no larger than the depth of the deepest lock hierarchy possible in the system. By keeping lock hierarchies shallow, which translates to locking as few objects as possible, you can affect the maximum number of threads that need to be priority adjusted.
Times in synchronization operations
Object.wait(long timeout, int nanos) provides nanosecond granularity for a relative wait operation. The
HighResolutionTime.waitForObject() API is similar to
Object.wait() and provides relative and absolute times that can be specified with nanosecond granularity. In WebSphere Real Time, both APIs are implemented with underlying POSIX locking wait services. These underlying services provide, at best, microsecond granularity. When required, and for portability, the
getResolution() method of the
javax.realtime package's
Clock class should be used to retrieve the resolution for the executing platform.
The RTSJ extends and tightens threading and synchronization capabilities for the Java programmer through new RT classes and APIs in the
javax.realtime package. In WebSphere Real Time, these capabilities are implemented by the RT version of the Linux kernel, modifications to POSIX threading, and modifications to the JVM itself. The deeper understanding you now have of RTSJ threading and synchronization can help you avoid problems as you write and deploy RT applications.
Downloadable resources
Related topics
- Real-time Java series: Read the other parts in this series.
- The Java Language Specification, Third Edition: The JLS is the complete specification of the Java language's syntax and semantics.
- JSR 1: Real-time Specification for Java: You'll find the RTSJ at the Java Community Process site.
- "IBM WebSphere Real Time V1.0 delivers predictable response times using Java standards": Read the product announcement for WebSphere Real Time.
- WebSphere Real Time: WebSphere Real Time lets applications dependent on a precise response time take advantage of standard Java technology without sacrificing determinism.
- Real-time Java technology: Visit the authors' IBM alphaWorks research site to find cutting-edge technologies for real-time Java.
- Metronome: Learn more about Metronome, the GC technology incorporated in WebSphere Real Time.


text:
When it comes to managing type 2 diabetes, I believe that the quality of the food that you eat matters as much if not more than the quantity.
Although most people with type 2 diabetes are overweight or obese, many are not. That means simply reducing the number of calories will not be enough to manage your diabetes and also promote good health.
Click here to send Dr. Marie Savard your heath questions.
There are only three categories of foods: carbohydrates ("carbs"), fats, and proteins. Every food is made up of some combination of just those three macronutrients. There are also vitamins, minerals, and phytochemicals, which are also important for vital functions, but they are not foods — they do not provide energy. Carbohydrates, fats, and proteins are all necessary for the body to function properly. Any diet that tells you to totally avoid one of these three macronutrients cannot be healthy.
Here is what you need to eat to manage your type 2 diabetes. You may notice that what I recommend is very similar to the popular Mediterranean style diet.
Elite Carbohydrates
Contrary what you may have read, carbohydrates are actually good for people with type 2 diabetes — healthy carbohydrates, that is. These healthy or elite carbs not only help promote weight loss, they can also help lower the risk of heart disease and help you manage your diabetes. High-quality carbohydrates — the elite Carbs — are fruits, vegetables, legumes, and whole grains, all of which provide abundant amounts of vitamins, minerals, phytochemicals, and fiber, with little or no fat. What was called roughage in the past is known as fiber now, and it may be a patient with type 2 diabetes' best diet secret. Fiber , which occurs naturally only in plant-based foods, lowers your insulin response to food, helps lower your blood sugar, causes you to feel full sooner, and helps with your colon health as well.
Nuts are included, but only a handful a day. Nuts are chock full of fiber, healthy fat and protein and have been shown to improve insulin's function. Unfortunately they are full of calories so they need to be limited somewhat. Almonds and walnuts are especially good.
Elite Fats
Our bodies need certain high-quality fats to maintain the structure of cell membranes, regulate blood pressure, maintain the immune system, and other important functions.
Monounsaturated fats, found primarily in olive oil and canola oil, are among the healthiest fats. Monounsaturated fats seem to help reduce insulin resistance, making it especially valuable for managing type 2 diabetes. It also improves blood flow through the arteries, a sign that it may help fight atherosclerosis.
Polyunsaturated fats in the form of Omega-3 fatty acids are also important. Omega-3 fatty acids, the most beneficial of the fats, are found in many kinds of fish, shellfish, canola oil, soybeans, wheat germ, flaxseed, and walnuts. It is thought that they may help prevent heart attack, hypertension, and some forms of cancer, including breast cancer.
Trans fatty acids commonly found in margarine, cookies, and pastries are a man-made invention and are just plain dangerous. Look for the tell-tale signs of trans fatty acids in the package ingredients such as "partially hydrogenated oils" which is the fancy word for fats that have been chemically altered. And even foods marked "0" trans fats may have some partially hydrogenated oils which could be harmful if you ate many serving sizes.
Elite Proteins
Proteins provide the building blocks that allow us to repair damage in our bodies, build a strong immune system, make hormones and blood cells, develop muscle, and generally stay healthy. Protein is found in a wide variety of foods, including eggs, meat, poultry, fish, dairy products, whole grains, beans, and nuts. The best proteins, I call "elite proteins" are those that provide little or no saturated fat. These include plant sources of protein such as soybean products, kidney beans, chickpeas (garbanzo beans), pinto beans, rolled oats, lentils, nuts, egg whites, and whole wheat.
In addition to the quality of the food that you eat, if weight loss is also a goal, think quantity of food too. To lose inches around your waist and pounds on the scale faster, apply what I call the 25 percent solution. That means reduce your daily number of calories by no more than 25 percent. Research has shown that if you reduce calories much more, you will simply lower your metabolism and regain the weight faster when you suddenly stop restricting calories. Cutting back more will take weight off faster, but you'll just put it back on relatively quickly.
Here is a quick and easy summary of my diet and lifestyle tips to manage your diabetes. I call it "Dr. Marie's four F's" to managing type 2 Diabetes.
1. Food. High fiber, unprocessed, plant-based choices are chock full of antioxidants and phytochemicals and they slow down the dangerous glycemic or insulin response to sugar/sweets/white flour foods.
2. Fat. Healthy Omega 3's are plentiful in grass-fed animals, cold water fish, flax seed, and nuts. They boost your brain, heart health, reduce inflammation and help just about every cell in your body. Olive oil and canola oil are healthy too.
3. Fitness. Exercise and get at least seven hours of sleep for your body and spirit. You'll shrink your waist size, improve your blood sugar and banish stress all at the same time.
4. Fluids. Lots of water is great. Coffee in moderation is OK as well as one drink of alcohol a day. Freshly squeezed fruit juice is good, but be wary of sugar filled juice "drinks." Avoid sodas, preferably both those with sugar and those with artificial sweeteners. Both kinds promote weight and waist gain.
Additional Diet Tips
Think small. Sometimes even minor changes can have unexpectedly powerful results. Focus on the small changes that will make the biggest difference in your life. The people in a large diabetes prevention research study who cut their risk of diabetes in half by following diet and exercise recommendations lost an average of only two inches off their waists which translated to only about 5-7 percent of their body weight.
Eat breakfast every day. Many people who are trying to lose weight skip breakfast. They feel that it is easier just to run straight to work or get on with the tasks of the day than it is to think about a healthy breakfast. Plus, there's that myth that if you only eat two meals a day, you will eat one-third fewer calories, so you'll have to lose weight.
Studies have shown that people who eat breakfast are about half as likely to be obese than people who don't eat breakfast. Additional bonus: eating breakfast seems to help reduce insulin resistance, which means better managing your type 2 diabetes.

subset: commoncrawl


text:
The foramen ovale is an opening in the part of the heart that
separates the upper right and left chambers (atria). In a fetus, this opening
has a flap of tissue that acts like a one-way door—it allows blood to flow to the left side of the heart without going to the lungs,
and it is kept open by the pressure of the blood that passes through it.
Normally, when the baby is born and takes his or her first breath,
blood begins to flow through the lungs, and the foramen ovale closes within a
few days. Sometimes, this opening remains open (patent) and is called a patent foramen ovale. A patent foramen ovale is also called a PFO. A PFO happens in about 2 out of 10 people.
A patent foramen ovale is typically not treated and does not cause problems. But it might be treated if other heart defects are present or you had a stroke caused by a blood clot. Treatment includes a catheter procedure or surgery to close the opening in the heart.
Last Revised:
October 11, 2011
Healthwise Staff
Medical Review:
John Pope, MD - Pediatrics & Larry A. Latson, MD - Pediatric Cardiology
This information does not replace the advice of a doctor. Healthwise, Incorporated disclaims any warranty or liability for your use of this information. Your use of this information means that you agree to the Terms of Use. How this information was developed to help you make better health decisions.
To learn more visit Healthwise.org
© 1995-2012 Healthwise, Incorporated. Healthwise, Healthwise for every health decision, and the Healthwise logo are trademarks of Healthwise, Incorporated.


text:
Cooperatives Put People—and Democracy—to Work
How worker-owned businesses from Cleveland to Spain are nurturing life and jobs outside the corporate framework.
SHIFT CHANGE - Putting Democracy to Work - preview from Mark Dworkin on Vimeo
Shift Change—Putting Democracy to Work, a film by Melissa Young and Mark Dworkin about life outside the corporate framework, is slated for release in July 2012.
Examining cooperatives in both the United States and Spain, it documents the growing number of employee-owned businesses. At a time when many people are out of work, job security is not easily attainable, and big corporations are increasingly unpopular, cooperatives provide a way for people not only to make a living, but to be invested in their work like never before.
One of the poorest cities in the nation is reinvesting in itself with a model for a localized economy.
How an old business model is finding new relevance all over the world.
Mondragón Cooperative Corporation: Look who makes the profits.


text:
A good repair procedure helps the technician(s) get ready before arriving at the repair location. Suppose they just show up, look at the equipment, and then decide to take measurements. Back to the shop they go for a screwdriver and a meter. After a few iterations of this, they start going back and forth to get supplies and repair parts.
You want to avoid all that wasted walking. Include a section that details what the technicians will need to make that repair (recall that in Part 2 we addressed the lockout/tagout, safety, and environmental sections).
· Test equipment. Don't just say "meter" but list the appropriate meters, by model, for the energy level and/or work to be done.
· Power tools. Note if extension cords will be needed.
· Lighting. Note if these can use local receptacles or will need a generator for power.
· Hand tools. It's sufficient to say "electrician's pouch" rather than listing the typical items. But do note any special tools the electrician isn't likely to carry.
· Parts. Be sure to include fuses.
Support personnel might need to obtain some of these items while the techs complete other preparations. That's why you need this information in a separate section.


text:
What is this page?
This is a collection guide. It is a description of archival material held in the Special Collections Division,
J.Y. Joyner Library, East Carolina University. The materials described here are physically available in our
reading room. To see what's been digitized in this collection, click on the thumbnail at the top right of this page
or look for hyperlinks in the container list and/or the preliminary inventory.
Politics is a major topic of interest from the 1880s through 1900. Republican interests, patronage, conventions, nominations, and collaboration with the Populist party are discussed. Correspondence from Matthew Quay (1888) discusses the possibility of a recount after White's defeat for the Congressional election. John J. Mott was anxious to have White appointed collector of the Internal Revenue for N.C. (1889) and mentions party interests and state politics. Thomas Settle discusses the importance of patronage in Rockingham Co., N.C., to insure future Republican victories (1889). E.C. Duncan talks about his own recent victory notwithstanding the defection of the Populists (1896). A folder of political items includes an affidavit (1865) signed by White to protect the constitution and support laws concerning the emancipation of slaves, an excursion ticket (1889) for a Democratic party cruise "Up Salt River," N.C. House of Representatives Rules for the 1921 session, political cartoons, a draft of an act amending the N.C. Code defining the form of ballots (undated), tariff tracts (1888) in favor of protection, an undated brochure on the provisions of the Force Bill, and political essays and speeches. White's political career is also noted in some of the clippings.
Other aspects of White's career documented in less detail include his appointments as collector of Internal Revenue for the 4th District of North Carolina. There is some correspondence (1889) about appointments for deputy collectors and the need to resurvey because of illicit distilleries in Johnston and Harnett counties. A file of adjusted and supplemental accounts also includes endorsements for White as collector; schedules of records, books, and property that were turned over to him (1879); deputy collectors' bonds; and a receipt for spirits in the warehouse (1883). An assessment book (1868-1869, 1877-1882) notes the name of the assessor and the assessed, city or town, occupation or item assessed, the number in an abstract book, quantity of items, valuation, tax rate, and total tax. A file of tax receipts includes bridge tolls (1873-1876) turned over while White was chairman of the Perquimans County Board of Commissioners.
Education is a constant topic of family interest. Several of White's children attended Guilford College and there is much correspondence between college friends (1889-1920). A basketball game at Bryn Mawr is described (1894) as are trips to visit friends after graduation, weddings, and other activities of daily life. Belvidere Academy was supported by the family and in 1902 a subscription campaign for a new schoolhouse was run. Lists of former graduates and letters from them sending their subscriptions and news testify to the success of the project. White's first wife, Margaret, attended the Friends Boarding School (1852-1853) in Richmond, Indiana. A folder includes poems and notes from school friends. His second wife, Emma H. White, attended Earlham College Preparatory Class (1869-1870) in Indiana and a folder for Earlham includes programs and essays. Other items of educational interest are a high school commencement program (1877) from Knightstown, Indiana, and a certificate from Earlham College Preparatory Department (1891).
Temperance and prohibition were prominent family concerns. The Women's Christian Temperance Union (W.C.T.U.) minutes (1899-1902) contain the constitution and minutes of their first convention of the 1st District, held in Elizabeth City (1899). Emma H. White was president and Cora White was secretary. Reports from local unions in Bethel, Edenton, Belvidere, and surrounding communities are included. Plans of work, public meetings, and jails and almshouses are also mentioned. The Belvidere Auxiliary minutes note visiting schools, mothers' day meetings, reform schools, and accommodations for the insane (1899-1900). The minute book (1874-1903) for the Temperance Association of Perquimans and Chowan counties includes the constitution and notes meeting locations, membership and, from 1896, work with the W.C.T.U. Other materials include clippings, songs, speeches, handbills, publications, broadsides, and posters. Thomas J. Jarvis, Robert B. Glenn, Edwin Webb, J.Y. Joyner, and Charles B. Aycock all published in favor of prohibition. The W.C.T.U.
National Educator (1905) gives selections to be used in their medal contest and the catechism (1903, 1906) details their program. A statement before the N.C. House Committee on Education (undated) is included. Also of interest is a series of W.C.T.U. handbills on suffrage.
One particularly interesting file is that of Lucy White's monthly and annual welfare work reports for the mill towns of White Oak (1916-1917) and Proximity (1918-1929) in Guilford County, N.C. The monthly reports specify children's, mill girls', and women's classes, noting subject taught (normally sewing and cooking), the number in the class, and the average attending. By the mid 1920s, the reports also noted additional activities such as parties, P.T.A. meetings, banquets, neighborhood classes, and yard inspections. A sewing notebook indicates assignments by class group.
Religious material relates primarily to the Society of Friends and includes the proceedings (1906) of their tract association, lists of members of the 1902 home classes, a Friends Academy calendar (1874-1875), a program for the Indiana Yearly Meeting (1874), and some essays. There is also a Friends publication on prohibition. The "Little Folks Paper" (1892-1893), a Sunday School paper for children, is also included. One of the ledgers includes the costs to the yearly meeting trustees for setting up the meeting (1834-1835), while another notes expenses of the committee of the poor (1852-1853) and the building committee (1854).
Much of the early correspondence (1862-1906) is between family members and concerns land holdings in Indiana, Iowa, and North Carolina, discussing rentals, repairs, taxes, and sales. Additionally, deeds indicate land also held in Kansas, Illinois, and Missouri, including executor's releases. Other family topics are diverse. Lucy Haughton (1850) talks about schools in the Beech Grove, Indiana area and her own study of medicine. Elihu White writes to his father in 1862 from Connersville, Indiana, about the father's loan to his other son for a farm. White mentions some conscripts who had been delayed and then finally "skedatled." Lawton, Oklahoma, is described (1902) by a friend who moved there and Emma White's stepmother describes Mineral Wells, Texas (1909), and talks about prices, crops, and weather.
Financial records include a general store ledger for Woodville, N.C. (1830-1833) and Suttons Creek, N.C. (1834); a mill account ledger (1838-1843), which also includes flour, meal, general supplies, and apples sold; and two personal account books (1900-1923), which include notes of family births, deaths and marriages, visits, money loaned, purchases, farm accounts, and labor costs. A journal for the steamer
HARBINGER (1879-1894), home ported in Norfolk, Virginia, notes manifest locations, freight, commission and wharfage, and indicates transfers to the Winslow Line of the Norfolk Southern Railroad. Guano accounts are included for the years 1883-1888.
Advertising cards (1890-1893) include those for foods, cigarettes, soaps, perfumes, thread, and a variety of household products. Photographs are mainly of family members though there is one of the Piney Woods Meeting House. A prospectus (1894) for the Southern Cotton Mill in Roanoke Rapids, N.C., and correspondence detail plans of the Roanoke Rapids Power Company to build a canal and two large cotton mills. An oversize folder includes posters and broadsides related to prohibition; certificates; and issues of the
North Carolina White Ribbon (1908), the
Chowan Baptist (1906-1908), the
Contributor (1876), and
The North Carolinian (1898).
Elihu Anthony White (1824-1900) was a Quaker farmer and business leader from Belvidere, N.C. After serving as postmaster of Newby's Bridge (1858-1861), White was elected as a Republican to the N.C. Senate (1868-1870). He was justice of the peace in 1873 and served on the Perquimans County Board of Commissioners (1873-1878). In 1879 White was appointed collector of Internal Revenue by President Rutherford B. Hayes. He was a delegate to the Republican national conventions in 1884, 1888, and 1896. Also, in 1888, White was reappointed as collector by President Benjamin Harrison and in 1894 he became a member of the board of trustees of the University of North Carolina. In the mid 1890s, White became chairman of the Perquimans County Board of Education.
September 27, 1967, 53 items; Papers (1862-1898) of Elihu A. White, including correspondence, speeches, schedules, deeds, military orders from the Second Military District (1868), an act of relief of soldiers in the Civil War, political appointments, newspaper clippings, pamphlets, political cartoons, and a newspaper.
March 4, 1968, 15 items; Newspaper clippings relating to career of Elihu A. White.
April 23, 1979, 1 volume; Ledger (1852-1855).
September 23, 1981, 1 volume; Daybook (1869-1890).
August 25, 1982, 1 volume; Tax assessment book (1868-1869, 1877-1882).
September 26, 1983, 3 items; Letters of endorsements (1893), House Rules (1921), and directory of state and county officials (1922).
December 12, 1988, 2 volumes; Daybook (1900-1909) and photocopy of the
Guilford Collegian (1900).
March 29, 1989, 6 items; Certificates (1879-1889) and a sketch.
May 25, 1989, ca. 650 items and 6 volumes; Papers of Perquimans County, N.C., family, including correspondence (1850-1930); Temperance Society minutes (1875-1901), speeches, fliers, brochures, and other literature; mill village welfare worker's reports (1916-1929); ledgers (1830-1843); and miscellany. Deposited by Rev. Harold White, Belvidere, N.C.
Originally loaned by Rev. Harold WhiteLoan reaffirmed by Charles H. White, son of Rev. Harold White
No restrictions
Literary rights to specific documents are retained by the authors or their descendants in accordance with U.S. copyright law.
Elihu A. White Papers (#14), East Carolina Manuscript Collection, J. Y. Joyner Library, East Carolina University, Greenville, North Carolina, USA.
Processed by M. Boccaccio, May 1990
Encoded by Apex Data Services
This page is only for requesting materials that you wish to view in person in the Reading Room at Joyner Library.
It does not permit you to view the materials online or to request their photoduplication. If you would like to request
materials for photoduplication, please visit our Copying and Permissions page.
Manuscript collections and archival records may contain materials with sensitive or confidential information that is protected under federal or state right to privacy laws and regulations, the North Carolina Public Records Act (N.C.G.S. § 132 1 et seq.), and Article 7 of the North Carolina State Personnel Act (Privacy of State Employee Personnel Records, N.C.G.S. § 126-22 et seq.). Researchers are advised that the disclosure of certain information pertaining to identifiable living individuals represented in this collection, without the consent of those individuals, may have legal ramifications (e.g., a cause of action under common law for invasion of privacy may arise if facts concerning an individual's private life are published that would be deemed highly offensive to a reasonable person) for which East Carolina University assumes no responsibility.


text:
sunshine needed a new logo design and created a contest on 99designs.
A winner was selected from 124 designs submitted by 45 freelance designers.
We are a software company that is working worldwide with multiple firms that will use our product in the stock market.
Desired Color Scheme:
No pastels! Strong, darker colors! No orange.
Desired Style:
Ultra Modern
Accepted File Formats:
vector or high resolution .psd
This should give the impression of being a strong firm. Strong logos and colors that imply solidity. Please steer away from pastels! Any ideas involving celestial objects or celestial-inspired designs are welcome, but use caution actually placing a 5 point star in this... please try not to let it look grade-school!
The color grey should be in there... steel grey, dark greys, or both light and dark greys contrasting together. If you can think of another color to add to set the grey off, go for it!
Anything stock-market inspired is also welcome!
Find out how a design contest works or learn more about our logo design services.


text:
Portion For Rent. Location: I-8. Having 3 Bedrooms. 2 Tv lounge, 2 Kitchen, 2 D/D, 2 Car parking. Prime Location. "What could be better - This over-sized bedrooms, baths , move-in condition has gorgeous, sunny, open views from every window! From the moment you enter the gracious separate foyer you are met with light, views, and expansive space. The kitchen has been beautifully constructed with stunning cabinetry, stainless appliances, and granite counters, and leads to the separate spacious windowed dining room. Enjoy all the amenities the neighborhood has to offer from transportation shopping, restaurants, and movie theaters, to Park a few blocks away! . Please Contact Us AARZ.PK For More Details. "
Read More...
Property Web
Business Name:
Property Address:
I-8, Islamabad, Islamabad Capital Territory
Office Address:
Office No. 24, First Floor, I-8 Markaz, Islamabad, Islamabad Capital Territory
|Property ID: 87460
|Type: Lower Portion
|Status: Rent


text:
Mission & Values
The mission of Soka University of America is to foster a steady stream of global citizens committed to living a contributive life. - Daisaku Ikeda, Founder, SUA
Soka University is founded upon the Buddhist principles of peace, human rights and the sanctity of life. The curriculum is non-sectarian. Educational objectives are fostered at the university through the commitment to rigorous academic endeavors, free and open dialogue, and an appreciation for human diversity. Education is an integrating process in which students gain an awareness of the interdependence of themselves, others and the environment. Wisdom, courage and compassion - values treasured by the university -- do not exist in isolation. They emerge in individuals as they learn the importance of service to others, to the natural world around them, and to the great cause of peace and freedom.
University Mottos
- Be philosophers of a renaissance of life.
- Be world citizens in solidarity for peace.
- Be the pioneers of a global civilization.
University Principles
- Foster leaders of culture in the community.
- Foster leaders of humanism in society.
- Foster leaders of pacifism in the world.
- Foster leaders for the creative coexistence of nature and humanity.
Soka University of America (SUA) is an independent, non-profit, public-benefit, co-educational, comprehensive institution of higher learning. Founded on the Buddhist principles of peace, human rights and the sanctity of life, SUA is open to students of all nationalities and beliefs and is committed to diversity in its academic community.
SUA has a proud heritage. The SUA Graduate School opened in fall 1994 in Calabasas, CA. and the SUA campus in Aliso Viejo opened in fall 2001 to its first 120 freshmen students. In 2007 the Graduate School was transferred to Aliso Viejo. Currently the university has about 450 students. The student-faculty ratio is 8 to 1.
SUA is founded on the belief that student-centered education is the best way to promote peace and human rights by fostering a global humanistic perspective on the world in which we live. The university prepares students for graduate studies and the world of work in an increasingly diverse and global society.
Classrooms are centers of dialogue and discussion, emphasizing seminar course settings. Students have many opportunities to work in small teams in the classroom and with faculty on research projects, as well as with peers in residence hall learning activities. Advanced computing and networking capabilities are available in buildings and central outside gathering areas. All undergraduate students receive a laptop computer which is included intuition. All undergraduates also study a non-native language and spend a semester of their junior year abroad in a country where that language is spoken. Study abroad is included in tuition.
SUA currently offers a B.A. in Liberal Arts, with concentrations in Environmental Studies; Humanities; International Studies; and Social and Behavioral Sciences. SUA also offers an MA in Educational Leadership and Societal Change.


text:
Micro Melee
Paperback, 214 Pages
Price: $26.95
Prints in 3-5 business days
Micro Melee is a rules system for recreating company level engagements of WWII in scales of 6, 10, 12 and 15mm. The first 70 pages contain the rules. The balance of the book contains an appendix of 197 WWII armored fighting vehicle data sheets.
Ratings & ReviewsLog in to review this item
There are no reviews for the current version of this product
There are no reviews for previous versions of this product
Product Details
- Copyright
- Bennett P. Lacy (Standard Copyright License)
- Edition
- Fifth Edition
- Publisher
- Britton Publishers
- Published
- September 15, 2019
- Language
- English
- Pages
- 214
- Binding
- Perfect-bound Paperback
- Interior Ink
- Black & white
- Weight
- 1.46 lbs.
- Dimensions (inches)
- 8.5 wide x 11 tall
- Product ID
- 24247043
Your notification has been sent
Lulu Staff has been notified of a possible violation of the terms of our Membership Agreement. Our agents will determine if the content reported is inappropriate or not based on the guidelines provided and will then take action where needed.
Thank you for notifying us. We will email you with the results and/or actions taken as a result of the investigation if you chose to receive confirmation.
We were unable to complete your request.
We were unable to complete your request.
Listed In
More From
see more >
SOF Warrior Paperback:
SOF Warrior eBook:
Final Combat Paperback:
Final Combat eBook:
Micro Melee: Modern... Paperback:
Age Verification
The page you are attempting to access contains content that is not intended for underage readers.
Please verify your birth date to continue.


text:
Welcome to Nutmeg & Honeybee. This website is a creative space that explores art through different mediums while finding beauty in the simple pleasures of life. For me, those pleasures include embroidery art, florals, vegan baking, teaching, and connecting with other creative souls looking to express their story. You can check out some of my work for sale in the 'shop' tab of this website or by following along on Instagram. Check back for more workshop + shop updates.
All tagged gluten free


text:
News & Notes: Game 110
Monday, August 1, 2011 (7:05 p.m.) – Frontier Field
TV: Time Warner Cable SportsNet 13
Radio: WWKB AM 1520, bisons.com
Buffalo Bisons (46-63, 5th(-16.0), North)
RHP Chris Schwinden (6-5, 3.46)
Rochester Red Wings (43-65, 6th(-18.5), North)
RHP Andrew Baldwin (5-8, 5.80)
TODAY'S GAME: Tonight, the Bisons take on the Rochester Red Wings in the first game of a two-game series from Frontier Field (7:05 p.m.). The Herd has won three straight games, including a two-game sweep in Lehigh Valley over the weekend, to begin its season-long 10-game roadtrip. After Wednesday's off day, the Bisons will travel to Pawtucket and then Syracuse.
VS. THE WINGS: The Bisons are 7-5 against the Red Wings this season. The teams have split three series so far this season while the Herd collected a two-game sweep at Coca-Cola Field, July 14-15. Buffalo is 9-5 in their last 14 games at Frontier Field.
SCHWING AND MISS: RHP CHRIS SCHWINDEN makes his team-high 20th start tonight. The righty leads the Bisons with a 3.46ERA and is tied with LHP Pat Misch with six wins. Schwinden has struck out six or more in six straight starts and ranks seventh in the International League with 101 punchouts on the season. The righty did not earn a decision his last time out despite seven innings of two-run ball against the Yankees on July 27.
Mr. VP: INF VALENTINO PASCUCCI has driven in a run in four straight games and is tied with Gwinnett's Stefan Gartrell for the most RBI in the International League with 74. The slugger has 24RBI in only 18 games since the All-Star Break. Pascucci is now on pace for 102RBI for the season, which would be one short of Alex Ramirez's team record of 103 during the 1998 season.
HIT STREAKIN: INF VALENTINO PASCUCCI has hit in 12 straight games with a .378 (17-45) average and 13RBI since July 20. INF JOSH SATIN brings an eight-game streak into tonight's action and has hit .375 (12-32) since July 24. INF LUIS FIGUEROA now ranks seventh in the IL in average (.312) thanks to a seven-game hit streak since July 25 over which he has averaged .387 (12-31).
BISONS BITS: With his two-run double last night, LHP PAT MISCH became the first Bisons pitcher to drive in four runs in a season since RHP Rick Reed in 1991 (record is RHP Vicente Palacios, 6RBI, 1990)…The Bisons have won four straight games on two other occasions this season, including June 24-27…With 298 games played in his Bisons career, OF JESUS FELICIANO can become just the 10th player to reach 300 games in the team's modern era.
METS UPDATE: The Mets (55-53) lost to the Nationals, 3-2, yesterday afternoon. OF SCOTT HAIRSTON hit two home runs in the loss despite not starting the game for New York. Former Bisons LHP JON NIESE allowed just two runs in 5.1 innings but did not earn a decision. New York returns home to host the Marlins tonight at 7:10 p.m.


text:
Daphne Odjig
Canadian, b. 1919
Untitled, 1975
gouache on paper
60.8 x 47.6 cm
Collection of the Winnipeg Art Gallery; Gift of Dr. and Mrs. L.H. Kahane
Daphne Odjig was born on Manitoulin Island, Ontario, to a Potawatomi father and an English mother. She began making art seriously after World War II, when she moved to Vancouver. Untitled was painted in Manitoba, where she moved in 1963. The painting's recurring colour and fluid black "formlines" create a powerful, rhythmic image revealing Odjig's awareness of both Western artistic styles and themes of identity, family, and spirituality central to her First Nations world view. Living in Winnipeg reintroduced Odjig to the challenges facing many First Nations communities, but it also stimulated a reaffirmation of and reconnection with her Aboriginal roots. In 1974 she opened the first Native-run art gallery in Canada, the Warehouse Gallery, where she exhibited works by many of her contemporaries.
Gallery Hours
- Tuesday 11am-5pm
- Wednesday 11am-5pm
- Thursday 11am-5pm
- Friday 11am-9pm
- Saturday 11am-5pm
- Sunday 11am-5pm
- Closed Monday


text: The sweet-smelling, fluffy white fungus, Huntiella moniliformis, engaging in sexual reproduction in the lab. Author supplied March 11, 2018 Sex: birds do it, bees do it - and fungi do it too. Here's how, and why it matters Andi Wilson, University of Pretoria Understanding the sex lives of fungi can help in finding answers about disease control.


text:
Global Classic 7" Asian Chef's Knife
Easy, hassle-free returns online and in-store for eligible items.Learn More
Earn 2x Rewards4 That's 10% back in rewards when you use your Williams Sonoma Credit Card at Williams Sonoma 11/6 - 11/13.Apply Now Learn More
- Summary
Global's award-winning knives are made to the exacting standards of Japanese professional chefs. An ideal knife for mincing and dicing herbs and vegetables, the wide, lightweight blade that enables the chef to chop quickly, precisely and easily—with less fatigue.
- Stamped blade is made of exceptionally hard Cromova 18 high-carbon stainless steel, ice tempered and hardened to resist corrosion.
- Prominent 1/4" edge is visible to the naked eye and ground straight to a point rather than beveled resulting in impressive sharpness and edge retention.
- Stainless-steel handle is seamlessly constructed and textured for a good grip.
- Crafted to professional standards, this knife is lightweight yet perfectly balanced.
- Dimensions & More Info
- 7"-long blade.
- Made in Japan.
- Use & Care
- Always use caution when handling sharp objects.
- Avoid cutting on hard surfaces such as stone, metal or glass.
- It is not advisable to use any knife but a meat cleaver to cut through bone or frozen food, as the blade can be easily damaged.
- Hand-wash with warm water and a mild detergent. Rinse and dry immediately.
- Use the honing steel only when you feel the knife has lost some of its original sharpness, usually no sooner than six months after its first use. As you continue to use your Global knife, it will require more frequent honing. If you need to hone your knife more than once every two weeks, it is time to have it sharpened.
- Sharpen your knife at home using a whetstone or knife sharpener, or have it sharpened by a professional.
- Store knife in a safe place to protect its edge and prevent injury.
- Shipping
Shipping Information
UPS can deliver most in-stock items within 3–5 business days. UPS is unable to deliver to P.O. boxes.
Shipping Rates
The shipping rate varies depending on your order total and shipping destination. View Shipping Options and Charges.
Next Day Delivery
For an additional charge of $26 per address, we can expedite delivery to most destinations. This service is not available for some oversize items, items shipped directly from the supplier (including perishable and custom-manufactured items), out-of-stock items and items to be shipped outside the contiguous 48 states.
Orders received by 9:00 p.m. ET Monday through Thursday will arrive the next business day; orders placed Friday through Sunday will arrive on the following Tuesday.
Return Policy
At Williams Sonoma, we take great pride in the quality and craftsmanship of our products. Attention to design, materials, safety and construction are our priority. Upon receipt, please inspect your purchase and notify us of any damage; we will arrange for a prompt replacement.
If within 30 days, you are dissatisfied for any reason, you may return your purchase for a refund of the merchandise value. An original receipt or gift receipt is required for all returns and exchanges. Returns with a gift receipt will be refunded in the form of a Merchandise Credit for the amount indicated on the gift receipt. Returns with original receipt will be refunded in the original form of payment, cash and check refunds over $100 will be issued as a company check (may take 14 business days from time of request).
For all cutlery returns (knife sets, single knives, cutting boards, knife sharpeners and knife storage), please contact us at 888.922.4108 to initiate the return.
We cannot accept returns on monogrammed, personalized, special-order items, custom upholstery, food, items shipped direct from the vendor or on items damaged through normal wear and tear. Final sale items ending in .97 or .99 cannot be returned.
Made to Order and Final Sale Furniture items are non-returnable and cannot be cancelled once the order is placed.
For returns of items purchased from your Williams Sonoma Gift Registry, we will gladly provide a refund or exchange for the merchandise within 90 days of your event or within 90 days of purchase, whichever date is later. View Full Returns Policy.
- Free Knife Sharpening in Stores
Working with a sharp knife is safer, more effective and much less tiring than trying to cut and slice with a dull one. To ensure top performance, bring your favorite knife into your local store and one of our cutlery experts will give it a fresh, new edge using our precision equipment. The first knife is free; each additional knife is just $5.
Our stores also offer knife demonstrations to teach you the correct grip, positioning and basic knife techniques and can help you find the perfect cutlery for your needs – just ask a store associate for assistance.
- Price Match Guarantee
Williams Sonoma Price Match Guarantee
At Williams Sonoma, we're committed to bringing you the best quality at the best prices.
If you find a lower price on any of our products, we'll match it—guaranteed. Click here for details.
Customers Who Viewed This Item Also Viewed
Customers Who Bought This Item Also Bought
Rated 5 out of 5 by Sosiosh from Many Happy Years I've owned and used this knife for many, many years, and can't imagine trading it for anything else. It is beautifully balanced, lightweight (easy on the wrists), and so quick! I own the 5" knife as well, but this is my workhorse. The curve of the blade makes for fluid forward slicing of everything from spring onion to carrots to the initial thin slices of garlic on its way to mince-dom. And the curve works equally well for the last rocking of getting that mince down to where you need it. And, the thinness and sharpness of the blade helps it work remarkably well slicing roasts. I've kept it honed, and have never had to have it meet a whetstone, and it can still descend into a skinned tomato like nobody's business.Date published: 2016-11-30Rated 5 out of 5 by futurechef210 from my go to knife for important/delicate jobs this knife is the first of my growing high end knife collection. without a doubt i am a blade head through and through and this knife kills anything that you can buy at your average restaurant supply store of the high end knives however this one still knocks out a few such as henckels and wustoff simply by feel grip and engineering unlike most german steel knives this and other japanese knives have a thinner superior edges and retention which in turn cut so smoothly and dont drag and tear through the food your cutting even after years of use (and proper maintenance and proper knife handling skills) this remains trueDate published: 2012-06-27


text:
Chile's Bachelet returns to power on promise of reform
Issued on: Modified:
Socialist leader Michelle Bachelet was sworn in as Chilean president for a second time on Tuesday after a four-year hiatus from leading the country.
Amid prolonged pomp and ceremony, dignitaries watched the inauguration of Bachelet, who took over from conservative outgoing premier, Sebastian Pinera. Now starting her second term, Bachelet was Chile's first woman president when she first took office in 2006.
Bachelet, 62, faces an economic slowdown and student-led protests that have paralysed the country in recent years and will likely challenge her promise of profound social changes.
Isabel Allende, the daughter of former toppled president Salvador Allende and Chile's first-ever female Senate leader, placed the presidential sash on Bachelet's shoulder amid thunderous applause and cheers at the ceremony in Valparaiso.
"It's time to take this road that we committed to through our government programme; it's time to kick start these dreams towards a nation that is more just, developed, modern, tolerant and inclusive," Bachelet later told a cheering crowd of more than 5,000 people outside the presidential palace in Santiago de Chile.
"Chile has only one great adversary: inequality. And only together we'll be able to defeat it," she said.
High expectations
The election victory of Bachelet, a moderate socialist, followed promises to finance education reform with higher corporate taxes, improve health care, change the dictatorship-era constitution to make Congress more representative and reduce the vast wealth gap between rich and poor.
But some think Bachelet has raised expectations too far.
"She promised a lot of things, a lot of reforms, so people expect many things to happen," Patricio Navia, a Chilean political scientist at New York University, told AP.
"But the economic conditions have changed," he added. "The economy is not growing quite as fast and Bachelet is not going to have the leverage to introduce all the reforms."
During her first presidency from 2006 to 2010, Bachelet won praise for shepherding Chile through the global economic crisis. Although growth stumbled and unemployment rose, she used government reserves to help the poorest Chileans, and she enjoyed 84 percent approval when she left office.
Envy of Latin America
Chile is the world's top copper exporter, and its fast-growing economy, low unemployment and inflation have been the envy of the rest of Latin America.
But many Chileans say more of its wealth should be used to help reduce income inequality and make quality education accessible to everyone.
Many blame the 1973-90 dictatorship of General Augusto Pinochet, who overthrew Allende, for concentrating wealth and power. Pinochet privatised water resources and ended agrarian reforms. He also eliminated central control and funding of public schools.
Bachelet, the daughter of a general who died of torture after challenging Pinochet, became Chile's first female defence minister and president, then the first leader of the UN women's agency.
Her "New Majority" coalition welcomed Communists, street activists and former student leaders – some of which have become the country's youngest lawmakers – and won in December by the widest margin in eight decades of presidential elections.
Venezuela crisis lurking
Chile's economy thrived under Pinera, but metals prices have dropped and growth has slowed just as Bachelet hopes to take in about $8.2 billion in taxes from businesses to fund her education reform.
The inauguration was attended by most presidents from Latin America as well as US Vice President Joe Biden. But the unrest in Venezuela cast a shadow across the day.
Venezuelan President Nicolas Maduro cancelled plans to be at the swearing-in after Biden called the street protests in Venezuela "alarming" and said democratically elected leaders who rule as authoritarians damage their people and countries. Maduro sent his foreign minister, Elias Jaua, in his stead.
Argentine Foreign Minister Hector Timerman said on Tuesday that fellow ministers from the UNASUR group of South American nations will meet Wednesday in Santiago to hear what Jaua has to say about the Venezuelan government's claim that weeks of street protests have been fomented by "coup plotters". Bachelet has tried to straddle the divide.
"We are always going to try to find ways of assuring that human rights are truly guaranteed," she told local TV on Friday. "Neither does it seem proper to take violent actions seeking to destabilise a democratically elected government."
(FRANCE 24 with AP)


text:
I've been intrigued by Juleps lately.
The confluence of Derby Day and Cinqo de Mayo this year, allowed some interesting variations, including a Tequila Julep on the eGullet cocktail forums.
On the DrinkBoy forums, a person who calls themself "Theurbanbartender" documented an inspired sounding Pineapple Julep.
"In a julep cup take a hand full of fresh mint leaves-muddle gently then add a couple of chunks of macerated pineapple( pineapple chunks that have been soaking in sugar for a day or so) 20mls Pineapple cordial. Muddle this gently again only just to break down the pineapple chunks then add crushed ice and 25mls bourbon. I used Woodford Reserve but I think its always down to personal taste. Gently pull all ingredients up thru the ice in a lifting motion top up with more crushed ice and then add another 25mls bourbon follow the above and then garnish with a small forest of mint and a long slender pineapple stick two small straws and bob's your uncle and if your unlucky he's your aunt. Please dont lynch me ;)"
That also sounded really awesome.
I was thinking I might combine the ideas!
However, when I was waiting for the bus the other day, I noticed an hispanic gentleman eating what appeared to be pineapple in some sort of red chile sauce. I remembered that sweet and spice are not necessarily exclusive values in Latin culture.
Now I had an idea that I could get my teeth into. I would make a Julep-like drink; but, try to use ingredients Native to the New World!
Pineapple Tequila Thing
Prep Work:
1 Day before, peel and chop up a half a pineapple and put it in a quart container. Crush 2 tsp of allspice and add it to the container. Seed and wash 2 dried red chiles, (I used Chile Negros; but, anything Ancho-ish would be fine,) cut them in strips and add to the container. Dissolve 1 cup of sugar* and 1 cone of piloncillo in 1 cup of water and pour over the pineapple mixture. Shake to combine and let sit overnight.
Before you go to bed, put your large julep glass in the freezer.
The next day, strain off the liquid and reserve the pineapple. We'll call this "Spiced Pineapple Syrup".
Cocktail Proper:
1 oz spiced pineapple syrup
3 oz Blanco Tequila (Herradura Blanco)
Chopped Pineapple (I'm not sure how picky you are. You can either use the pineapple from the syrup or chop more fresh. The pineapple from the syrup will have small crunchy pieces of allspice and/or chili in it. Depending on your perspective, this might be bad or it might be good.)
6 sprigs mint**
Juice 2 key limes
Pineapple Spear
Mezcal for float (Don Amado, Reposado)
Take your julep glass out of the freezer. Add Spiced pineapple syrup to the glass and 3 sprigs mint still on stems, and a tablespoon or two of pineapple. Gently crush the pineapple, syrup and mint. Fill glass with crushed ice. Add 3 oz of blanco tequila and the juice of 2 key limes. Churn mixture to combine. Withdraw mint sprigs. Top up with crushed ice, and churn again. Float on a bit of mezcal, garnish with 3 mint sprigs, the pineapple spear, and stick in a straw.
Tasty! I don't know, if Bob's not your uncle, you might ask your Mom about Jose…
*OK, sugar isn't native to the New World. It's originally from Southern Asia. I was too lazy to run to the store and buy Agave Nectar. At least I used a type of Mexican raw sugar called piloncillo!
**Also, I don't believe mint is Native to the New World. I briefly considered Cilantro; but, I think that is from China. I considered a couple others; but, they were all too hard to find or obscure, so I went back to the traditional mint.
NOTE: I created this drink for a Mixology Monday a couple months ago.
I've since discovered, after reading this webpage:
The Secrets of Pisco Punch Revealed – The Lost Recipe
That my Pineapple Tequila Thing is strikingly close to the famous San Francisco Pisco Punch.
"LANNES' PlSCO PUNCH RECIPE
"1. Take a fresh pineapple. Cut it in squares about 1 by 1.5 inches. Put these squares of fresh pineapple in a bowl of gum syrup to soak overnight. That serves the double purpose of flavoring the gum syrup with the pineapple and soaking the pineapple, both of which are used afterwards in the Pisco Punch,
"2. In the morning mix in a big bowl the following: l/2 PINT (8 OZ.) OF THE GUM SYRUP, PINEAPPLE FLAVORED AS ABOVE 1 PINT (16 OZ.) DISTILLED WATER 3h PINT (10 OZ.) LEMON JUICE 1 BOTTLE (24 OZ.) PERUVIAN PISCO BRANDY
"Serve very cold but be careful not to keep the ice in too long because of dilution. Use 3 or 4 oz. punch glasses. Put one of the above squares of pineapple in each glass. Lemon juice or gum syrup may be added to taste."
Just bizarre! Even when I try to be creative, I discover that my ideas have been thought of before. Well, OK, they didn't serve it julep style or spice their pineapple-gomme syrup. Still!


text:
Your session will expire in seconds.Do you want to stay connected?
Welcome to Silverfish. This site uses cookies. Read our policy.
Trail riding can be tough on your gear. The ends of your cranks take a lot of abuse as the trail rushes underneath you and your bike. Protect your cranks from any damage with Race Face crank boots. Made from a durable Race Face proprietary plastic blend, leave no doubt and go with the originator in crank end protection. Wrap it up and protect the tips!
Silverfish UK Ltd. Units 3a-3c Woodacre Court, Saltash Parkway Industrial Estate, Burraton Road, Saltash, Cornwall, United Kingdom, PL12 6LY
Silverfish UK Ltd. (Registration No. 4075057).
Technical specifications are for guidance only and cannot be guaranteed accurate. All offers are subject to availability and while stocks last. Errors and omissions excepted. Silverfish UK Limited acts as a credit intermediary and only offers credit products for Close Brothers Retail Finance. Its registered office is: Close Brothers Group plc, 10 Crown Place, London EC2A 4FT. Credit is subject to application and status.


text:
The Excelsis integration enables users to search through multiple sections at once. In addition, Fact200 actually downloads the information and webpages from Excelsis so that you have your own mini-database of astronomy reviews to peruse through. It's ideal if you are constantly looking up or re-looking up equipment.
To use Fact200 with the Excelsis website, simply download and run Fact200 from here.
Next, visit the samples page here and click on the Amateur Astronomy link. It's important to run Fact200 before you do this in order to setup the file type associations.
You can either open the link directly, or first save the file to your computer and then open it. Either way, Fact200 will create a new library to perform Excelsis astronomy search in.
©2009 by Excelsis Consulting. All Rights Reserved. E-mail webmaster to report abuse, problems, or comments.


text:
Difference between revisions of "Publications Committee Minutes Annual, 2008"
|Line 1:
|Line 1:
Meeting Agenda

Meeting Agenda

June 29, 2008

June 29, 2008

Revision as of 20:43, 30 October 2008
Meeting Agenda
June 29, 2008
Marriott-Anaheim Gold Key 1/II
8 – 10 a.m.
Attending: Barb Mann (chair), James Jacobs (incoming chair, notes taker), Jill Moriarty, Chella Vaidyanathan, Wayne Strickland, Andrea Sevetson, Jim Church, Barbara Miller, Kristen Northrup, John Stevenson, Starr hoffman
Approval of minutes from Midwinter
Minutes approved
DttP Report
Andrea Sevetson: Dttp is going well. All is well. In January, there was a color ad. Color ads usually don't run because it's too expensive. ALA picked up the cost because it was their mistake. AS found that for an extra $125, there could be color ads. The vendors she talked with were interested in paying this extra cost.
Spring issue is up on GODORT wiki.
Andrea has explored interest in new editors. She has several possibilities. AS has done a wonderful job and is to be commended.
Notable Documents Report
Jim Church: Issue "Blogs, battles, and Bees" came out on time.
3 new appts need to be made: intl docs selector (a couple interested), state and local judge and a federal judge. Thanks to Jim Church for an excellent job done!
Other Committee updates
Old Business
- Morrison book publicity: Coupons for new book are being distributed. Morrison requested that proceeds from the book be split in 3rds for endowment, emerging leaders, GODORT digital publishing projects (occasional papers, DttP etc.). An ad in the next DttP will run. Announcement was sent to a variety of listservs. Idea to send out to journals to review. Thank you letter from GODORT sent to Andrea Morrison. Thanks Andrea!!
- DttP Editor: See report above.
- Google Groups: Approved.
- Occasional Papers: 3 possibilities currently: 1) Bill Sleeman's article. 2) Chella: bibliography on US and INTL docs resources on Latin America and the Caribbean. 3) Karen Russ, bibliography of 50 years after integration at Little Rock. PPM changes were sent to Valerie. It's important to give examples of the types of papers we're thinking of. James will announce occasional papers at membership meeting. Reminder that chair, chair elect and 2 others are current editors.
New Business
- No editor candidates so far (although see Andrea's note above). Perhaps it's time to look at making DttP a digital publication. More and more people are getting rid of print, it's indexed but not widely, first supplement got 1000 hits in the first few days.
- Discussion started about publishing DttP in a digital format. Discussion centered around access issues (print vs online), advertising and revenue. LITA and LAMA have moved to digital but are still exploring the issues with advertising. Committee agreed that it was an appropriate time to research this, but also agreed that the current DttP economic model is not currently broken.
Committee agreed that a DttP publication survey would be a good idea. Mark Philips (UNT) could put up a survey for the committee. AS will send questions from past surveys. Linda Johnson's membership survey could also be useful. What is DttP about? That is what the survey should get at. Survey questions will be put together on the publications google group.
- Oral Histories. Passed at Steering I Annual '08.
Still many questions about next steps and to whom responsibility now falls. Barbara Miller will check with Bill Sleeman/steering to see if publications committee is required
- Chella is currently a publications committee intern. James will get to Cass to recommend that Chella Vaidyanathan become a full member. We appreciate Chella's work as intern.
- GODORT blog
Committee was interested in starting one up. Question about what would be posted to a blog vs godort-l vs DttP. That question will be added to the survey. Agreed to put together a formal proposal for a GODORT blog including logistics (who, what, when, where hosted etc). James will put it up on google groups to hash out details of proposal.
Thanks to Barb for running the committee for the year! A job well done!!
Respectfully submitted,
James R. Jacobs