text:
Multithreaded applications are part and parcel of day-to-day commercial application. It would be difficult to imagine any full fledged application running commercially that is not multithreaded. Applications must use the multithreaded approach to improve on the performance of the application or systems. However, most beautiful things in life do not come without a price. Likewise, if the multithreaded feature needs to be used by the application, then it comes with a set of issues, such as deadlocks, race conditions, incorrect behavior of threads, etc. To overcome these issues, the OS provides a set of tools like Mutex, semaphores, signals and barriers that are handy in solving multithreaded multiprocessed issues. This article discusses one of these tool, semaphores, and provides some insight about them.
Semaphores can be thought of as simple counters that indicate the status of a resource. This counter is a protected variable and cannot be accessed by the user directly. The shield to this variable is provided by none other than the kernel. The usage of this semaphore variable is simple. If counter is greater that 0, then the resource is available, and if the counter is 0 or less, then that resource is busy or being used by someone else. This simple mechanism helps in synchronizing multithreaded and multiprocess based applications. Semaphores were invented and proposed by Edsger Dijkstra, and still used in operating systems today for synchronization purposes. The same mechanism is now available for application developers too. Its one of the most important aspects of interprocess communication.
Semaphores can be either binary or counting, depending on the number of shared resources. If a single shared resource is used, then we would require just one semaphore for synchronization purposes. In that case, the semaphore is referred as a binary semaphore. In all other cases, where the number of resources shared across users are greater than one, you would use multiple semaphores, in which case they are referred as counting semaphores.
Semaphores basically implement two kinds of operations. One to wait on the semaphore variable and another that signals the semaphore variable. Since semaphores are nothing but a counter, the following algorithm depicts these two semaphore operations:
Assume :
s is the semaphore variable
W(s) denotes waiting on the semaphore
P(s) means signaling the availability of semaphore
Algorithm :
W(s) while (s<=0) { //do nothing } s=s-1; P(s) s=s+1;
From the above algorithm, it could be easily understood that waiting on a semaphore does nothing more than decreasing the semaphore counter by 1. Signaling the semaphore is exactly the opposite, increasing the semaphore counter by 1.
Let's see some of the structures and functions that are used internally by the Linux kernel to implement the functionality of semaphores. Semaphores use the following two structures internally :
struct semaphore { atomic_t count; int sleepers; wait_queue_head_t wait; } struct rw_semaphore { _s32 activity spinlock_t wait_lock; struct list_head wait_list; };
This structure, however has undergone some change in the latest kernels. It has been included with additional member variables as shown below:
struct rw_semaphore { signed long count; #define RWSEM_UNLOCKED_VALUE 0x00000000 #define RWSEM_ACTIVE_BIAS 0x00000001 #define RWSEM_ACTIVE_MASK 0x0000ffff #define RWSEM_WAITING_BIAS (-0x00010000) #define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) spinlock_t wait_lock; struct list_head wait_list; #if RWSEM_DEBUG int debug; #endif };
The basic functions that implement the semaphore operation at the kernel level can be found under the
/asm/semaphore.h and
/asm/rwsem.h header files:
__down(struct semaphore *): This function checks to see if the semaphore is greater than zero. If so, it decrements the semaphore count and returns. If not, it sleeps and tries again later.
__up(struct semaphore *): This function increments the semaphore count, thus awakening any process waiting on the semaphore.
__down_trylock(struct semaphore *): This function checks to see if the semaphore is available. If not, then the function would return and is thus categorized as a non-blocking function.
__down_interruptible(struct semaphore *): The action of this function is similar to
__down with a difference, it can be interrupted by a signal. Should it be interrupted by a signal, it would return
-EINTR. The
__down version blocks signals while running.
__down_read (locks the semaphore for reading),
__down_write (locks the semaphore for writing) ,
__up_read (frees the semaphore after reading), and
__up_write (frees the semaphore after writing) permit more that one reader to access a protected resource, but only one writer to update.
The current Unix environment comes with two types of semaphores: System V and POSIX. In general, the older Unix-based systems uses the System V version and the current Linux-based systems use the POSIX version. However, the general behavior and technology of semaphores does not change irrespective of the version used. Let's look at the interfaces, and how they work on these two different versions of semaphores.
The interface and usage of System V semaphores is cluttered with unnecessary complications. For example, the semaphore created is not just a single counter (value) but rather a set of semaphore counters (values). This introduces the concept that the semaphore object created consists of 0 to n semaphores in a set with an identical semaphore ID. The function that achieves this is:
int semget(key_t key, int nsems, int semflg);
IPC_CREAT: Creates a new semaphore if the key does not already exist.
IPC_EXCL: If the key exists, it will cause the function to fail.
key_t, could have any meaningful value as provided by the user or programmer or generated by the
ftok() call. However, System V semaphores provide a different key, which is identified by
IPC_PRIVATE. When this key is used, every time a
semget() call is made, it creates a new set of semaphores identified by the semaphore ID. The following code snippet shows how to create a new semaphore at every call of the
semget function.
{ int semid; semid=semget(IPC_PRIVATE, 1,IPC_CREAT); if (semid<0) { perror("Semaphore creation failed Reason:"); } }
NOTE: Actually
IPC_PRIVATE is defined as
((__key_t) 0). This can be found under the header file
Once a semaphore is created, System V semaphores require that those semaphores that were created in a set be initialized. Creation and initialization of semaphore is not an atomic operation, and initialization needs to be done separately by the user. The function that does this is:
int semctl(int semid, int semnum, int cmd, ...);
SETVAL . For other values please refer to the man pages.
Depending on what the chosen "cmd" requires, a fourth argument could be also passed--type
union semun--but this is an optional argument. To use this structure, the user must explicitly define it as follows:
union semun { int val; struct semid_ds *buf; ushort *array; } arg;
The following code snippet sets the first semaphore of the set identified by the semaphore
semid to value 1.
{ semun init; init.val = 1; int i = semctl(semid, 1, SETVAL, init); }
Once a semaphore is created and initialized, the user is ready to perform operations on this set of semaphores. Again, the interface used for performing operations, like locking or unlocking of semaphores, is not straight-forward. It requires a certain amount of instructions to be written before calling the following function, which will carry out the desired operation on a semaphore.
int semop(int semid, struct sembuf *sops, size_t nsops);
struct sembuf { ushort sem_num; /* identifies which semaphore in the set */ short sem_op; /* could be positive,negative or zero */ short sem_flg; /*coud be IPC_NOWAIT ,SEM_UNDO*/ };
NOTE: If the
SEM_UNDO flag is specified, the kernel resets the value of the semaphore by reversing all effects of previous operations when the program terminates.
sem_op member of struct sembuf is an important variable that locks and unlocks the semaphore. It can take the following values, which determines the kind of operation to be performed on the semaphore.
sem_op is zero:
sem_op is positive value
sem_op value.
sem_op is negative value
sem_op value.
You can see from the above
sem_op values that positive values correspond to releasing a semaphore and negative values correspond to a locking semaphore. NOTE: The value of the semaphore never goes below zero.
The most important operation, after creating, initializing, and operating on semaphores, is the cleaning up the semaphores and their memories. This should happen in cleanup handlers or in destructors, while exiting out of code normally, or while exiting the application abnormally. If this is not done, then the application would, at some point, not find enough semaphores to work with because they are defined system-wide in System V-based implementations.
The following snippet cleans up a semaphore set identified by semid
{ int ret = semctl(semid,0,IPC_RMID); //removing the 0th semaphore in the set }
IPC_RMID flag here signifies the type of operation that needs to be carried out on the semaphore identified by
The following working example uses these concepts:
<u>File: sysvsem_demo.c</u> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <stdio.h> //create user defined semun for initializing the semaphores void *Thread1(void *arg) { int semid; semid = (int)arg; //in order to perform the operations on semaphore // first need to define the sembuf object struct sembuf op1,op2; //operation for 0th semaphore op1.sem_num = 0; //signifies 0th semaphore op1.sem_op = -1; //reduce the semaphore count to lock op1.sem_flg = 0; //wait till we get lock on semaphore //operation for 1th semaphore op2.sem_num = 1; //signifies 0th semaphore op2.sem_op = -1; //reduce the semaphore count to lock op2.sem_flg = 0; //wait till we get lock on semaphore //locking the 0th semaphore if (semop(semid,&op1,1) == -1) { perror("Thread1:semop failure Reason:"); exit(-1); } else fprintf(stderr,"Thread1:Successfully locked 0th semaphore\n"); //lock the 1th semaphore if (semop(semid,&op2,1) == -1) { perror("Thread1:semop failure Reason:"); exit(-1); } else fprintf(stderr,"Thread1:Successfully locked 1th semaphore\n"); //release the 0th semaphore op1.sem_num = 0; //signifies 0th semaphore op1.sem_op = 1; //reduce the semaphore count to lock op1.sem_flg = 0; //wait till we get lock on semaphore if (semop(semid,&op1,1) == -1) { perror("Thread1:semop failure Reason:"); exit(-1); } else fprintf(stderr,"Thread1:Successfully unlocked 0th semaphore\n"); //release the 1th semaphore op2.sem_num = 1; //signifies 0th semaphore op2.sem_op = 1; //reduce the semaphore count to lock op2.sem_flg = 0; //wait till we get lock on semaphore if (semop(semid,&op2,1) == -1) { perror("Thread1:semop failure Reason:"); exit(-1); } else fprintf(stderr,"Thread1:Successfully unlocked 1th semaphore\n"); } void *Thread2(void *arg) { int semid; semid = (int)arg; //in order to perform the operations on semaphore // first need to define the sembuf object struct sembuf op1,op2; //operation for 0th semaphore op1.sem_num = 0; //signifies 0th semaphore op1.sem_op = -1; //reduce the semaphore count to lock op1.sem_flg = 0; //wait till we get lock on semaphore //operation for 1th semaphore op2.sem_num = 1; //signifies 0th semaphore op2.sem_op = -1; //reduce the semaphore count to lock op2.sem_flg = 0; //wait till we get lock on semaphore //lock the 0th semaphore if (semop(semid,&op1,1) == -1) { perror("Reason:"); exit(-1); } else fprintf(stderr,"Thread2:Successfully locked 0th semaphore\n"); //lock the 1th semaphore if (semop(semid,&op2,1) == -1) { perror("Reason:"); exit(-1); } else fprintf(stderr,"Thread2:Successfully locked 1th semaphore\n"); //release 0th semaphore op1.sem_num = 0; //signifies 0th semaphore op1.sem_op = 1; //reduce the semaphore count to lock op1.sem_flg = 0; //wait till we get lock on semaphore if (semop(semid,&op1,1) == -1) { perror("Reason:"); exit(-1); } else fprintf(stderr,"Thread2:Successfully unlocked 0th semaphore\n"); //release the 1th semaphore op2.sem_num = 1; //signifies 0th semaphore op2.sem_op = 1; //reduce the semaphore count to lock op2.sem_flg = 0; //wait till we get lock on semaphore if (semop(semid,&op2,1) == -1) { perror("Reason:"); exit(-1); } else fprintf(stderr,"Thread2:Successfully unlocked 1th semaphore\n"); } int main() { pthread_t tid1,tid2; int semid; //create user defined semun for initializing the semaphores typedef union semun { int val; struct semid_ds *buf; ushort * array; }semun_t; semun_t arg; semun_t arg1; //creating semaphore object with two semaphore in a set //viz 0th & 1th semaphore semid = semget(IPC_PRIVATE,2,0666|IPC_CREAT); if(semid<0) { perror("semget failed Reason:"); exit(-1); } //initialize 0th semaphore in the set to value 1 arg.val = 1; if ( semctl(semid,0,SETVAL,arg)<0 ) { perror("semctl failure Reason:"); exit(-1); } //initialize 1th semaphore in the set to value 1 arg1.val = 1; if( semctl(semid,1,SETVAL,arg1)<0 ) { perror("semctl failure Reason: "); exit(-1); } //create two threads to work on these semaphores if(pthread_create(&tid1, NULL,Thread1, semid)) { printf("\n ERROR creating thread 1"); exit(1); } if(pthread_create(&tid2, NULL,Thread2, semid) ) { printf("\n ERROR creating thread 2"); exit(1); } //waiting on these threads to complete pthread_join(tid1, NULL); pthread_join(tid2, NULL); //once done clear the semaphore set if (semctl(semid, 1, IPC_RMID ) == -1 ) { perror("semctl failure while clearing Reason:"); exit(-1); } //exit the main threads pthread_exit(NULL); return 0; }
NOTE: System V semaphores are controlled by the user, but can be a problem to the developer is the permissions on the semaphore. The structure that maintains this information is
struct semid_ds.
struct semid_ds { struct ipc_perm sem_per; /* operation's permission structure */ struct sem * sem_base; /* pointer to first sem in a set */ ushort sem_nsems; /* number of sem in a set */ time_t sem_otime; /*time of last semop */ time_t sem_ctime; /* time of last change */ };
For every set of semaphores in the system, the kernel maintains a structure of information that is defined in
sys/ipc.h. To get the details of the semaphore set shown above, the
IPC_STAT flag is used and a pointer to structure
semid_ds is passed. The member variable that gets and sets the permissions is
sem_per. Let's see a simple example:
#include <pthread.h> #include <stdio.h> #include <semaphore.h> #include <sys/sem.h> int main() { int semid; struct semid_ds status; semid = semget(( key_t )0x20,10,IPC_CREAT|0666); if(semid == -1) { perror("sem creation failed:Reason"); exit(0); } //get the permission details semctl(semid,0,IPC_STAT,&status); printf("owners uid is %u\n",status.sem_perm.uid); printf("group uid is %u\n",status.sem_perm.gid); printf("Access mode is %c\n",status.sem_perm.mode); //set the permissions details status.sem_perm.uid = 102; status.sem_perm.gid = 102; status.sem_perm.mode = 0444; semctl(semid,0,IPC_SET,&status); return 1; }
Note that the setting of permission is only allowed if the new permission set is a subset of the original permission, and not a superset.
The potential learning curve of System V semaphores is much higher when compared to POSIX semaphores. This will be more understandable after you go through this section and compare it to what you learned in the previous section.
To start with, POSIX comes with simple semantics for creating, initializing, and performing operations on semaphores. They provide an efficient way to handle interprocess communication. POSIX comes with two kinds of semaphores: named and unnamed semaphores.
If you look in the man pages, you'll see that a named semaphore is identified by a name, like a System V semaphore, and, similarly, the semaphores have kernel persistence. This implies that these semaphores, like System V, are system-wide and limited to the number that can be active at any one time. The advantage of named semaphores is that they provide synchronization between unrelated process and related process as well as between threads.
A named semaphore is created by calling following function:
sem_t *sem_open(const char *name, int oflag, mode_t mode , int value);
O_CREAT for creating a semaphore (or with
O_EXCL if you want the call to fail if it already exists).
A single call creates the semaphore, initializes it, and sets permissions on it, which is quite different from the way System V semaphores act. It is much cleaner and more atomic in nature. Another difference is that the System V semaphore identifies itself by means of type int (similar to a fd returned from
open()), whereas the
sem_open function returns type
sem_t, which acts as an identifier for the POSIX semaphores.
From here on, operations will only be performed on semaphores. The semantics for locking semaphores is:
int sem_wait(sem_t *sem);
This call locks the semaphore if the semaphore count is greater than zero. After locking the semaphore, the count is reduced by 1. If the semaphore count is zero, the call blocks.
The semantics for unlocking a semaphore is:
int sem_post(sem_t *sem);
This call increases the semaphore count by 1 and then returns.
Once you're done using a semaphore, it is important to destroy it. To do this, make sure that all the references to the named semaphore are closed by calling the
sem_close() function, then just before the exit or within the exit handler call
sem_unlink() to remove the semaphore from the system. Note that
sem_unlink() would not have any effect if any of the processes or threads reference the semaphore.
Again, according to the man pages, an unnamed semaphore is placed in a region of memory that is shared between multiple threads (a thread-shared semaphore) or processes (a process-shared semaphore). A thread-shared semaphore is placed in a region where only threads of an process share them, for example a global variable. A process-shared semaphore is placed in a region where different processes can share them, for example something like a shared memory region. An unnamed semaphore provides synchronization between threads and between related processes and are process-based semaphores.
The unnamed semaphore does not need to use the
sem_open call. Instead this one call is replaced by the following two instructions:
{ sem_t semid; int sem_init(sem_t *sem, int pshared, unsigned value); }
Once the semaphore is initialized, the programmer is ready to operate on the semaphore, which is of type
sem_t. The operations to lock and unlock the semaphore remains as shown previously:
sem_wait(sem_t *sem) and
sem_post(sem_t *sem). To delete a unnamed semaphore, just call the
sem_destroy function.
The last section of this article has a simple worker-consumer demo that has been developed by using a POSIX semaphore.
There are a number of differences between System V and POSIX semaphores.
The advantage of semaphores over other synchronization mechanisms is that they can be used to synchronize two related or unrelated processes trying to access the same resource.
The processes are said to be related if the new process is created from within an existing process, which ends up in duplicating the resources of the creating process. Such processes are called related processes. The following example shows how the related processes are synchronized.
#include <semaphore.h> #include <stdio.h> #include <errno.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> int main(int argc, char **argv) { int fd, i,count=0,nloop=10,zero=0,*ptr; sem_t mutex; //open a file and map it into memory fd = open("log.txt",O_RDWR|O_CREAT,S_IRWXU); write(fd,&zero,sizeof(int)); ptr = mmap(NULL,sizeof(int),PROT_READ |PROT_WRITE,MAP_SHARED,fd,0); close(fd); /* create, initialize semaphore */ if( sem_init(&mutex,1,1) < 0) { perror("semaphore initilization"); exit(0); } if (fork() == 0) { /* child process*/ for (i = 0; i < nloop; i++) { sem_wait(&mutex); printf("child: %d\n", (*ptr)++); sem_post(&mutex); } exit(0); } /* back to parent process */ for (i = 0; i < nloop; i++) { sem_wait(&mutex); printf("parent: %d\n", (*ptr)++); sem_post(&mutex); } exit(0); }
In this example, the related process access a common piece of memory, which is synchronized.
Processes are said to be unrelated if the two processes are unknown to each other and no relationship exists between them. For example, instances of two different programs are unrelated process. If such programs try to access a shared resource, a semaphore could be used to synchronize their access. The following source code demonstrates this:
<u>File1: server.c </u> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include <semaphore.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define SHMSZ 27 char SEM_NAME[]= "vik"; int main() { char ch; int shmid; key_t key; char *shm,*s; sem_t *mutex; //name the shared memory segment key = 1000; //create & initialize semaphore mutex = sem_open(SEM_NAME,O_CREAT,0644,1); if(mutex == SEM_FAILED) { perror("unable to create semaphore"); sem_unlink(SEM_NAME); exit(-1); } //create the shared memory segment with this key shmid = shmget(key,SHMSZ,IPC_CREAT|0666); if(shmid<0) { perror("failure in shmget"); exit(-1); } //attach this segment to virtual memory shm = shmat(shmid,NULL,0); //start writing into memory s = shm; for(ch='A';ch<='Z';ch++) { sem_wait(mutex); *s++ = ch; sem_post(mutex); } //the below loop could be replaced by binary semaphore while(*shm != '*') { sleep(1); } sem_close(mutex); sem_unlink(SEM_NAME); shmctl(shmid, IPC_RMID, 0); _exit(0); }
<u>File 2: client.c</u> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include <semaphore.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define SHMSZ 27 char SEM_NAME[]= "vik"; int main() { char ch; int shmid; key_t key; char *shm,*s; sem_t *mutex; //name the shared memory segment key = 1000; //create & initialize existing semaphore mutex = sem_open(SEM_NAME,0,0644,0); if(mutex == SEM_FAILED) { perror("reader:unable to execute semaphore"); sem_close(mutex); exit(-1); } //create the shared memory segment with this key shmid = shmget(key,SHMSZ,0666); if(shmid<0) { perror("reader:failure in shmget"); exit(-1); } //attach this segment to virtual memory shm = shmat(shmid,NULL,0); //start reading s = shm; for(s=shm;*s!=NULL;s++) { sem_wait(mutex); putchar(*s); sem_post(mutex); } //once done signal exiting of reader:This can be replaced by another semaphore *shm = '*'; sem_close(mutex); shmctl(shmid, IPC_RMID, 0); exit(0); }
The above executables (client and server) demonstrate how semaphore could be used between completely different processes.
In addition to the applications shown above, semaphores can be used cooperatively to access a resource. Please note that a semaphore is not a Mutex. A Mutex allows serial access to a resource, whereas semaphores, in addition to allowing serial access, could also be used to access resources in parallel. For example, consider resource R being accessed by n number of users. When using a Mutex, we would need a Mutex "m" to lock and unlock the resource, thus allowing only one user at a time to use the resource R. In contrast, semaphores can allow n number of users to synchronously access the resource R. The best common example could be the Toilet Example.
Another advantage of semaphores is in situations where the developer would need to restrict the number of times an executable can execute or be mapped in memory. Let's see a simple example:
#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <stdio.h> #include <errno.h> #define KEY 0x100 typedef union semun { int val; struct semid_ds *st; ushort * array; }semun_t; int main() { int semid,count; struct sembuf op; semid = semget((key_t)KEY,10,0666|IPC_CREAT); if(semid==-1) { perror("error in creating semaphore, Reason:"); exit(-1); } count = semctl(semid,0,GETVAL); if(count>2) { printf("Cannot execute Process anymore\n"); _exit(1); } //get the semaphore and proceed ahead op.sem_num = 0; //signifies 0th semaphore op.sem_op = 1; //reduce the semaphore count to lock op.sem_flg = 0; //wait till we get lock on semaphore if( semop(semid,&op,1)==-1) { perror("semop failed : Reason"); if(errno==EAGAIN) printf("Max allowed process exceeded\n"); } //start the actual work here sleep(10); return 1; }
After reading though the material above, some pretty clear distinctions should have emerged. However, I'd like to reiterate those differences again here, along with some other noticeable differences between semaphore and Mutex.
sem_post() function.
The worker-consumer problem is an age old scenario that has been used to justify the importance of semaphores. Let's see a traditional worker-consumer problem and its simple solution. The scenario presented here is not too complex.
There are two processes: Producer and Consumer. The Producer inserts information into the data area; while the Consumer removes information from the same area. There must be enough space for the Producer to insert information into the data area. The Producer's sole function is to insert data into the data area. Similarly, the Consumer's sole function is to remove information from the data area. In short, the Producer relies on the Consumer to make space in the data-area so that it may insert more information, while the Consumer relies on the Producer to insert information into the data area so that it may remove that information.
To develop this scenario, a mechanism is required to allow the Producer and Consumer to communicate, so they know when it is safe to attempt to write or read information from the data area. The mechanism that is used to do this is a semaphore.
In the below sample code , the data area is defined as
char buffer[BUFF_SIZE] and buffer size is
#define BUFF_SIZE 4. Both Producer and Consumer access this data area. The data area's limit size is 4. POSIX semaphores are being used for signaling.
#include <pthread.h> #include <stdio.h> #include <semaphore.h> #define BUFF_SIZE 4 #define FULL 0 #define EMPTY 0 char buffer[BUFF_SIZE]; int nextIn = 0; int nextOut = 0; sem_t empty_sem_mutex; //producer semaphore sem_t full_sem_mutex; //consumer semaphore void Put(char item) { int value; sem_wait(&empty_sem_mutex); //get the mutex to fill the buffer buffer[nextIn] = item; nextIn = (nextIn + 1) % BUFF_SIZE; printf("Producing %c ...nextIn %d..Ascii=%d\n",item,nextIn,item); if(nextIn==FULL) { sem_post(&full_sem_mutex); sleep(1); } sem_post(&empty_sem_mutex); } void * Producer() { int i; for(i = 0; i < 10; i++) { Put((char)('A'+ i % 26)); } } void Get() { int item; sem_wait(&full_sem_mutex); // gain the mutex to consume from buffer item = buffer[nextOut]; nextOut = (nextOut + 1) % BUFF_SIZE; printf("\t...Consuming %c ...nextOut %d..Ascii=%d\n",item,nextOut,item); if(nextOut==EMPTY) //its empty { sleep(1); } sem_post(&full_sem_mutex); } void * Consumer() { int i; for(i = 0; i < 10; i++) { Get(); } } int main() { pthread_t ptid,ctid; //initialize the semaphores sem_init(&empty_sem_mutex,0,1); sem_init(&full_sem_mutex,0,0); //creating producer and consumer threads if(pthread_create(&ptid, NULL,Producer, NULL)) { printf("\n ERROR creating thread 1"); exit(1); } if(pthread_create(&ctid, NULL,Consumer, NULL)) { printf("\n ERROR creating thread 2"); exit(1); } if(pthread_join(ptid, NULL)) /* wait for the producer to finish */ { printf("\n ERROR joining thread"); exit(1); } if(pthread_join(ctid, NULL)) /* wait for consumer to finish */ { printf("\n ERROR joining thread"); exit(1); } sem_destroy(&empty_sem_mutex); sem_destroy(&full_sem_mutex); //exit the main thread pthread_exit(NULL); return 1; }
We've explored the possibilities of different varieties of semaphores, as well as the differences between semaphores and Mutex. This specific knowledge could be helpful to developers in migration between System V and POSIX semaphores and when deciding whether to use Mutex or semaphores. For further details on the APIs used in the above example, refer to relevant the man pages.
Linux man pages
Linux Kernel Documentation
Vikram Shukla has more than seven and a half years experience in development and design using object-oriented languages, currently works as a consultant for Logic Planet in New Jersey.
Return to ONJava.com.
Copyright © 2009 O'Reilly Media, Inc.


text:
Is The NRA Right? Should We Have Armed Guards In Every School?
Probably not, but they deserve a lot of credit for suggesting a plausible solution to a problem. Gun control absolutely, unconditionally will not stop another Adam Lanza. In fact, some advocates of gun control are even publicly admitting that.
That being said, the idea put forth most often on the Right since the shooting, arming teachers, isn't a very good one either. This isn't Israel, where military service is mandatory. A lot of teachers have no experience with guns, no desire to learn and in all fairness, they signed up to teach, not to be security guards. Yes, getting rid of "gun free school" zones and giving teachers incentives to carry guns isn't a bad idea, but it's not a comprehensive solution to the problem.
Putting a security guard in every school wouldn't be an ideal way to handle the problem either. It would be expensive, killers could target the security guards first or alternately, they could just move on to softer targets like day care centers or playgrounds.
This is why it's ultimately futile to try to "solve" this problem. The only real fix for it would be to put armed guards EVERYWHERE and it's just not worth it. Part of being a conservative is realizing that there isn't a handy solution to every problem that can be fixed by the government passing a new law.
This is one of those problems. That being said, kudos to the NRA for at least making a good faith effort to offer up a real world solution to a difficult issue. There's not enough of that happening in D.C.
Also see...
Even though my father, brother, uncles and grandfather were in the military, I seldom handled guns growing up. That's because unlike many of the other people in my family, I've...Read More
John Hawkins
Related Articles
DC Proves Gun Control Laws Work…For Criminals
Over at the Washington Times, they have an absolutely devastating editorial up about the impact of gun control laws on
GREAT VIDEO: This Aussie LOVES Guns, And I Like This Aussie
Australian Steve Lee says he likes guns. He like 'em so much he made this music video. He likes guns
Luntz Misleads With New Gun Poll
Pollster Frank Luntz is trying to hawk his new poll on gun laws commissioned by the left-wing group Mayors Against

subset: commoncrawl


text:
Browse by Artist
|Artist: Bassano, Jacopo (Jacopo da Ponte) 1 of 2
|Previous | Next
Portrait of a Lady, after 1570
Jacopo Bassano (Jacopo da Ponte)Italian, 1510-1592
Oil on canvas
31 x 25-3/4 in. (78.7 x 65.4 cm)
The Norton Simon Foundation
© The Norton Simon Foundation
Not on view
The attribution of this charming portrait has variously been given to Paolo Veronese (1528–1588), Jacopo Bassano, or his son Leandro (1557–1622), all of whom were born and worked in the Veneto region surrounding Venice. Most scholars have been inclined to assume that this is a product of one or the other of the two Bassanos, given the solidity of the sitter, as well as the realism of the portrayal here. If the author of the painting is in fact Jacopo, whose superlative masterwork Flight into Egypt hangs in the Museum's Renaissance gallery, then it is a rare example of this genre, as very few portraits by Jacopo's hand have been documented.
This painting was previously in the Edward Cheney (d. 1884) collections of Venice and Badger Hall in Shropshire. It was then in the Robert H. Benson collection by 1894, where it remained until it was sold to Duveen Brothers in 1927. Its frame was made by Ferruccio Vannoni, an artist and carver working in Florence who Duveen's Paris office employed in the 1930s to create appropriate period frames for their stock.
View Provenance
|Artist: Bassano, Jacopo (Jacopo da Ponte) 1 of 2
|Previous | Next


text:
Sautéed Pork Chops with Cranberries
Makes 4 servings
Getting started Equipment you will need: small bowl (2), cutting board/knife, large skillet, serving plate, aluminum foil, spoon (3) Do right away when you get home: Action steps 1 & 2
1/4 tsp. dried thyme leaves
1/8 tsp. salt
1/8 tsp. black pepper
4 boneless pork loin chops (4 to 5 ounces each)
2/3 cup cranberry juice cocktail
2 1/2 Tbsp. honey
1/4 cup onion
1 cup cranberries, thawed
1/8 tsp. salt
1/8 tsp. black pepper
1/2 Tbsp. honey
1. Mix thyme, salt, and pepper in a small bowl. Trim fat off pork chops and sprinkle both sides of chops with thyme mixture.
2. Stir juice and honey in a small bowl; set aside. Chop onion. Chop cranberries into coarse pieces.
3. Heat skillet over medium-high heat. Add chops and cook for 2 to 3 minutes on each side until browned. Push chops to one side of pan. Add onion to empty half of pan; cook and stir for 1 to 2 minutes until browned. Pour half of juice mixture into pan. Add cranberries. Reduce heat to medium and cook, turning the chops occasionally, for 2 to 4 minutes until cooked through. Transfer chops to plate and cover with foil to keep warm.
4. Add remaining juice to pan. Increase heat to high and cook for 2 minutes until mixture reduces to form a syrupy sauce. Season with salt, pepper, and honey to taste. Spoon sauce over chops; serve.
Suggested Side Items: Mashed potatoes and side salad
Tips: To save time chopping cranberries, place whole berries in a food processor or blender and pulse a few times until they are coarsely chopped. Orange juice can be substituted for the cranberry juice cocktail.
Shopping list: 4 boneless pork loin chops (4 to 5 oz. each) 1 onion Fresh cranberries Cranberry juice cocktail


text:
Shabbat Morning Services at 9:00 a.m. followed by Kiddush Lunch and Lecture at 11: 30 a.m.
Subscribe To our E-Newsletter
Love and Religion, a four-session workshop created by Marion L. Usher, Ph.D., for newly married or seriously dating interfaith couples to talk about how to have religious traditions in their lives together. The meetings are a combination of in person and online video conferencing. Couples enjoy getting to know other couples experiencing similar issues. For more information contact [email protected]. The four-session workshop begins March 2014 — register today!
Subscribe To our E-Newsletter


text:
Tag Archives: local
Gales seeks a school board seat
By Steve Marschke
News-Ledger Editor
What can Katherine Gales bring to the local school board?
"At the top of the list is research," she answered. "That's what I do first if I don't know something. I'm going to learn about it, especially if I'm going to be held responsible for making a decision about it. I'll take my experience and I might take other persons' opinions, but I'm going to go to the Internet and I'm going to Google it, and I'm going to find out exactly what it is."
Gales, 50, told the News-Ledger that doing the background work is a key part of a school board member's job.
"It's important for the school board member to understand what's going on in that area, so they can make a decision," she explained. "You have to be up on current events. . . and you can be affected by anything coming into the district. If I don't know about a certain community, it's my obligation to get a good understanding or recuse myself from decision-making in that area."
Gales has been working for the state Department of Education since 1997. She is now an executive assistant at the downtown Sacramento office. She serves as a "branch level office manager," she said.
Gales said that one reason she took the job was to figure out why different schools taught different ways – a realization that came from comparing her own education at an "old school" in the Monterey area to her daughter's campuses in Natomas and New York.
[adrotate group="7″] Gales grew up in an Army family and moved around, but she went to high school in Monterey, at a campus with large classrooms that were well equipped for science, home economics and so forth.
"When (my daughter) got into junior high, it was different from what I experienced in junior high," said Gales. "That made me get even more involved. . . In home economics, we had kitchens in our classrooms. . . I compared that to my daughter's school (in Sacramento), and they had portables."
Working into her adulthood, Gales earned a pair of degrees from the University of Phoenix.
"I have a bachelor's in business management and a masters in management," she reported.
She did not marry her daughter's father, but both parents were involved in the now-grown daughter's life. For the past three years, Gales has lived in West Sacramento with her daughter and her seven-year old grandson, who attends school in Washington Unified School District. Gales also has several nieces and nephews in town, also going to West Sacramento public schools.
She's running against four other candidates for one available spot on the ballot for school board, in a special election March 5.
How does she think the current school board is doing?
"I've attended the local school board meetings since December," Gales answered. "They seem to work fine. Over two or three meetings, I think they're working through what they need to do. As far as what I saw, they're doing pretty much what they need to do and what I would do. I don't know what goes on in closed session."
How good is the local district?
"They're about as good as they can be at this time, but anything can be improved and be better. That's what I can contribute."
How well are the schools doing in standardized test scores?
"I know Bridgeway Island (Elementary School) did pretty good on the API and Southport was second," she answered. "The others came behind them. Test scores are important, but I'm focused on what's coming down the pipeline (from the state board of education)."
New curriculum standards and new tests are on their way, she said.
Fiscally, Gales thinks the district is in good shape.
And she said she would consider new charter schools on a "case by case" basis. What would it take for a new charter school to get her approval as a board member?
"You have to be productive, and you have to follow the requirements of the law, first and foremost," said Gales.
She was asked what kinds of challenges she sees in WUSD's future.
"I think the main thing sticking out in my mind is that it's very important for them to be diverse in their workforce," answered Gales. "All staff should closely mirror the national average. . . In West Sacramento, we may not have a really high level of ethnicity in one area or the other, but (students) should be exposed to at least the top three or four (ethnic groups) that most people are exposed to on a regular basis."
"I don't know that we have any African-American teachers."
Gales also said she wants to see better conflict-resolution in local schools.
"When my daughter went to school in New York for a year, they had a program set up," she explained. "It was called peer mock court or peer court, where the kids actually could go to court if they had a dispute or something. They could discuss the issue in front of a body of peers or administrators, to get to the core of a problem before a decision was made for discipline."
"I don't know if that's even done here, but it doesn't seem like they have any kind of structure set up to deal with discipline. A lot of times, it seems like it's just decided by the principal and teacher – I'm not sure, I really can't speak on it."
Gales was attracted to run in this race because the timing was right to become active in the community, she said. She saw news about the special election on Mayor Cabaldon's Facebook page. She hasn't, though, obtained endorsements from him or any of the school board or city council members.
But, as she added by email after the interview:
"What I have received is support from friends and family including, but not limited to, friends in the Sikh community and my church at the Calvary Christian Center."
Editor's note: Five people are running for one vacant seat on the Washington Unified School District Board of Trustees. A winner will be chosen in a special, all-mail ballot in West Sacramento on March 5.
Katherine Gales, profiled above, is one of the five.
The News-Ledger newspaper is presenting an interview with each of these five candidates. The series will conclude in our print edition on Feb. 27.
Do you like what you see here?
You can support local journalism, support this website, and see all the News-Ledger's articles every week! Subscribe to the News-Ledge newspaper. It's only $20 per year within West Sacramento – once a week, delivered to your mailbox.
You can even try it for free for two months if you live in West Sacramento. Just send your name and mailing address to email@example.com (offer open to new subscribers in West Sacramento ZIP codes 95691 & 95605).
Copyright News-Ledger 2013
Food give-away in West Sac
The Yolo County food bank will distribute free food to eligible West Sacramento and Clarksburg residents on Feb. 19. The schedule includes distribution from 9-10 a.m. at the West Sacramento County building, 500 Jefferson Blvd.; 10:30-11:15 a.m. at Trinity Presbyterian, 1500 Park Blvd.; 11-noon at Yolo Housing Authority, 685 Lighthouse Dr.; and noon-1 at Clarksburg Firehouse.
Please bring a bag, and attend only one site. For information, call (530) 668-0690.
Copyright News-Ledger 2013
Sobriety checkpoint Saturday night
The West Sacramento Police Department announced today it will conduct a sobriety checkpoint and driver's license check from Saturday at 7 p.m. until 3 a.m. The department typically does not announce the precise location of the checkpoint in advance.".
"The deterrent effect of DUI checkpoints is a proven resource in reducing the number of persons killed and injured in alcohol or drug involved crashes," said a press statement from Lieutenant Tod Sockman of the West Sacramento Police Department. "Research shows that crashes involving alcohol drop by an average of 20 percent when well-publicized checkpoints are conducted often enough."
[adrotate group="9″] Officers will be contacting drivers passing through the checkpoint for signs of alcohol and/or drug impairment. Officers will also check drivers for proper licensing and will strive to delay motorists only momentarily, he added. When possible, specially trained officers will be available to evaluate those suspected of drug-impaired driving. Drivers caught driving impaired can expect jail, license suspension, and insurance increases, as well as fines, fees, DUI classes, other expenses that can exceed $10,000.
Copyright News-Ledger 2013
CEO of Yolo's courts will retire
Yolo Superior Court announced today the retirement of James B. Perry, Court Executive Officer. He will retire May 1, 2013.
"It has been my honor to work with the best group of judges in the state and a truly remarkable staff. I have enjoyed my time serving the people of Yolo County and the state," commented Perry in a Yolo Superior Court press release.
The press statement credited Perry with stabilizing funding levels, developing one of the first written succession plans for court staff, and successfully advocating for additional judgeships and staff. He helped guide the court through state funding for site acquisition and construction plans for the new Yolo Superior Courthouse expected to be complete in 2015, the statement continued. Perry held key roles on Judicial Branch Committees and Task Forces to include the Domestic Violence Task Force, Facilities Task Force, and the Budget Working Group.
Perry will leave Yolo Superior Court with 10 years of service at his post; a total of 20 years with the Judicial Branch and 43 years of public service.
Copyright News-Ledger 2013
Nguyen: 'average' district can improve
News-Ledger's interviews with candidates in the March 5 special school board election continue this week with local businessman Linh Nguyen —
By Steve Marschke
News-Ledger Editor
With a background in computer engineering and in business, Southport's Linh Nguyen believes one of the best ways to start attacking any problem is to measure it. And he believes the measurements are clear for Washington Unified School District:
"Statistically, we are average," Nguyen told the News-Ledger.
Student test scores often have a strong link to a community's economic level. Look at them both if you want to judge how a school district is doing, he said.
"If we can say that economically, we're a '5,' but what we're achieving is a '7' or '8' out of 10, then that's excellent. But if we're economically a '5' and we're achieving at a '5,' that's just okay."
West Sacramento's school district is scoring at about 760 on the API tests, he said, which is about "average" for a place with an "average" socioeconomic level.
Nguyen (pronounced with the "ng" sound followed by "wen," in one syllable) hopes to earn a seat on the local school board next month and help change that.
"That reflection is on the board – that's where the buck stops," he said. "City-wise, you can see there are a lot of successful projects that have been implemented – whether it's (new developments like) the River Cats, Nugget, Home Depot or Ikea. They didn't let the 'average' or 'below average' hold them back. The school district needs to do the same."
[adrotate group="7″] "As a person who runs my own company, I understand what you need to do when you govern a multi-million dollar entity. We need to define a clear vision. We need to lay out a clear plan of what we're going to do. We need to always follow up on the plan."
Nguyen, 40, currently works at home, managing his investment portfolio. His wife is a part-time pharmacist, and the couple has three young kids – the oldest two of which are at Bridgeway Island Elementary School.
"I graduated from UC Davis in computer science engineering," he explained. "I went back to Silicon Valley and my first job was at Genentech. I worked mostly in high-tech. After we saved some money, we started our own consulting company. But running a company is very intensive, and we were having our first kid. We decided to move to West Sacramento, which is a very good place to raise kids."
Having two children in the public elementary school and another headed that way has generated some concerns, said Nguyen.
"I think I'm in the same shoes as a lot of parents," he said. "My kids are in first and third grade. I can see the future coming for them. High school is coming."
One friend typifies his concern:
"When I told him I was running for the board, the first thing he said is, 'Great, I'll support you.' The second thing he said was, 'At this point, I wouldn't let my kid go to River City High School.' The sad fact is that (the friend himself) went to River City High School, and his wife went to River City High School – not the new campus, but the old one. Something like that speaks volumes about how people perceive the high school."
Nguyen is concerned by the numbers – and RCHS is higher than the state in some statistics, like expulsion rates, he said.
Between that and issues like bullying and campus security, "I don't feel my kid is safe to go to this high school" right now, said Nguyen.
How do you fix that?
Nguyen believes that the first step is to identify the problems facing WUSD, whether they be test scores or campus safety.
"I would like the (school) board to acknowledge the problems," he said. "That's the first step in solving a problem. Secondly, I would like to know how we are going to measure the issues – for example, what percentage of the kids are leaving the district (to go to school elsewhere)? If we can first do a measurement on that, we can improve it. We don't (now) have a way to measure that. Just anecdotal evidence."
Nguyen says he has been to several school board meetings and seen others on cable TV.
"I see a lot of positive coming from the board we now have," he said. "We could do much better. We have 7.000-plus students in the district. We have an obligation to help these 7,000-plus kids to achieve, to reach their full potential."
He added that, fiscally, the board is "doing okay with what we have." And with Proposition 30 passing and bringing more stability to school funding, and with the economy finally improving, he expected the school's financial climate to start getting better.
How does he feel about charter schools?
Nguyen said he would examine them on a "case by case" basis.
"I'm not encumbered by a political agenda. . . If someone comes to me and asks about a charter school for our district, I would say, 'show me the empirical evidence.' When we make a change like that, there's going to be a financial cost. The research has to support (a need for the charter school)."
Nguyen thinks that voters should look at the time commitment of being a school board member when they weigh their decision of whom to elect.
"One of the basic elements (of the job) is that you have to be willing to put in the time," he said. "If you look at our city council, they have 22 subcommittees, reaching out to the schools, the River Cats, the port, to Sacramento County. Board-wise, we're not reaching out to other districts around us. We're not reaching out to resources we have. We're not reaching out to UC Davis or Sacramento State."
"If the board was functioning at an excellent level, we would have a direct path where Sacramento State and Davis and vocational programs would come here and work with the kids, and explain why some subject is important. We want to engage a kid, whether they are going to be a mechanic or an engineer or something."
With a background in management and in science, Nguyen believes he can help the board do this.
What does he see as a board member's job duties?
"One of the requirements is that we need a board that's passionate," he answered. "Statistically and empirical data-wise, we're average. That's a result of our economics. To be successful, we have to be innovative."
Has Nguyen been endorsed by the mayor or by school board members?
"Purposely, I've tried not to coincide with the political side," he answered. "I call it the political machine. I don't want to reach out there, because I want to be independent. The first thing is that the school board is for the kids. The second thing is, it's for the kids. And the third thing is, it's for the kids."
Nguyen's prior involvement in the community include helping to coach youth soccer, baseball and basketball in the elementary school and city leagues. He also helps with the local Cub Scout troop.
The candidate said he is funding his school board campaign with "mostly my own money," and is also walking precincts.
[Editor's note: after this interview was published, the candidate notified the News-Ledger that he had picked up endorsements from former WUSD school board members Ardeene Westvik, Dave Farmer and Ed Hocking.]
Do you like what you see here?
You can support local journalism, support this website, and see all the News-Ledger's articles every week! Subscribe to the News-Ledge newspaper. It's only $20 per year within West Sacramento – once a week, delivered to your mailbox.
You can even try it for free for two months if you live in West Sacramento. Just send your name and mailing address to email@example.com (offer open to new subscribers in West Sacramento ZIP codes 95691 &
Copyright News-Ledger 2013
Southport: the trouble with beavers
City's trapper has so far caught five of the pesky mammals
By Steve Marschke
News-Ledger Editor
"It comes in waves," reports Dena Kirtley, the City of West Sacramento's urban forest manager. "It has probably been about three years."
But now, they're back:
"About a month ago, one of my crew noticed some trees that he thought were chopped down with an axe. On further inspection, we discovered it had been beavers."
The animals have been active "for probably six or eight weeks" in the Bridgeway Lakes area of Southport, chopping down trees. Their preferred species is willow. The animals – perhaps a family – probably came in from the Sacramento River.
"There's a canal that belongs to Reclamation District 900, just east of Otis Road, south of Marshall," said Kirtley, who is managing the city's response. "That's pretty much where Bridgeway Lakes begins. That canal runs under the road."
"They've taken out several trees at Cherokee in Bridgeway Lakes, and gone around the corner behind some houses and taken out some more."
Why do the beavers want to gnaw down willow trees in particular?
"They eat the bark and leaves off the portion that falls into the lake," answered Kirtley. "Their intent is to make the trees reachable so they can get to the bark and leaves."
The felled trees aren't immediately being removed by the city.
"We leave the trees where they are, so the beavers don't down more trees," said Kirtley.
You might call that an official policy of "Leave it to Beaver."
If the animals can't get at willow trees, they will settle for other species, like live oak, she added.
How many animals are there?
"We're hoping less than 10," she said. "They move in from the river through the ag canals. It's like a little highway."
So far, there has been no problem with beaver dams as a threat to drainage.
The city's response to the beaver infestation was to show the state Department of Fish and Game that it was taking adequate tree-protection measures, and then get a permit to hire a trapper. Parks workers have tried to protect over 100 area trees with chicken wire – a questionable strategy, allowed Kirtley, because the beavers can always just "move on down the line" to unprotected trees.
A trapper has thus far caught five of the animals. When pressed, Kirtley admitted delicately that the animals are not live-caught. They're killed by the traps.
[adrotate group="7″] "It's illegal to transport them," she said. "Nobody else wants them. They would just be somebody else's problem, and we are in an urban area. It's a delicate subject. I've had people ask me what happens to the beavers."
Kirtley said the animals can build aquatic lodges, but they also burrow into riverbanks – and "we think we found one of their nests." The trapping doesn't seem to be over.
The good news is that the downed trees will probably rise again.
"Once we think we've alleviated the beaver problem, we will remove the felled trees," said Kirtley. "We'll make a nice, clean cut below the damage, and the trees will re-sprout and we'll have new trees."
Do you like what you see here?
You can support local journalism, support this website, and see all the News-Ledger's articles every week! Subscribe to the News-Ledge newspaper. It's only $20 per year within West Sacramento – once a week, delivered to your mailbox.
You can even try it for free for two months if you live in West Sacramento. Just send your name and mailing address to email@example.com (offer open to new subscribers in West Sacramento ZIP codes 95691 & 95605).
Copyright News-Ledger 2013
Latest News-Ledger 'Police Log'
News items below are collected from police dispatchers' notes and arrest reports. The information in them has often not been verified beyond the initial reports. The News-Ledger publishes this feature weekly in our print edition. Look for the special offer at the bottom to subscribe.
Jan., 30, 5:09 a.m.
Staff at a Woodland crisis shelter said a man who told them he lived at a particular West Capitol Avenue motel had phoned them several times, becoming upset. The man said "he had a gun and was going to go to Woodland and shoot (the caller)."
Jan. 30, 6:01 a.m.
A woman said her boyfriend had left his '69 Chevy pickup truck warming up in her Madrone Avenue driveway with the keys in it. The pickup left without him.
Jan. 30, 11:55 a.m.
Copper parts were stolen from two air conditioning units at Alyce Norman Elementary School. The loss was valued at $6,000.
Jan. 30, 12:16 p.m.
A resident of West Capitol discovered the theft of "hundreds worth of old records" from a backyard shed. It was unknown when the theft occurred.
Jan. 30, 12:58 p.m.
A witness reported a beating happening at a Stone Blvd. park: "a subject with a metal bat or pipe in the parking lot (was) beating on on somebody in the lot. . . the subject was down."
Jan. 30, 3:31 p.m.
During a vehicle burglary on Jan., 15, someone took a checkbook and some shoes – leaving behind a laptop and other valuables, during an incident at a Harbor Blvd. restaurant parking lot. The victim has learned that a stolen check made out for $60 had since been digitally altered and cashed for $2,500. The person whose name was on the check was not currently on scene.
Jan. 30, 4:11 p.m.
A two-vehicle accident was reported at Jefferson and Lake Washington boulevards. A baby was injured.
Jan. 30, 4:20 a.m.
A car parked on Summerfield Drive was found burglarized and ransacked.
Jan. 31, 4:55 a.m.
A woman reported she was in an argument with a Cummins Way neighbor. The argument was sparked after the second woman's dog was found chasing the first woman's chickens, which were roaming loose outside.
Jan. 31, 8:31 a.m.
A parent came to the police lobby. A son's bike had been stolen from the River City High School campus, and the suspect was caught on video.
Jan. 31, 8:43 a.m.
The police school resource officer was requested by a parent whose son was being bullied at Westmore Oaks.
Jan. 31, 9:16 a.m.
A car on Teal Drive was found burglarized. Gone was $5,000 worth of jewelry donated toward a fundraising walk against cancer.
Jan. 31, 9:19 a.m.
Gas was discovered stolen from a car on Clarendon Street.
Jan. 31, 9:52 a.m.
A citizen came to the police lobby to ask "how to legally put up campaign signs."
Jan. 31, 10:21 a.m.
A witness said a man was now hiding in some bushes near a Riverpoint Court store. The suspect "was trying to open car doors earlier, and pretended to be on the phone when (the caller) asked him to leave."
Jan. 31, 6:51 p.m.
A caller reported a case of road rage. The caller "was cut off, and followed home by a man in an unknown-color sedan."
Feb. 1, 2:46 a.m.
A drunk driver drove up onto a sidewalk on Topaz Road.
Feb. 1, 4:16 a.m.
A man and a woman just walked out of a Harbor Boulevard restaurant without paying their $30 tab. The caller "is the only one at the restaurant, and can't leave" to follow them on foot.
Feb. 1, 5:20 a.m.
An injured kitten was found near the staff entrance to an Embarcadero Drive business. The county animal services division was requested.
Feb. 1, 8:23 a.m.
An auto parts store on Jefferson Boulevard reported that a man in his 20s, possibly homeless, had tried to buy merchandise with a counterfeit $20 bill. He left on bike.
Feb. 1, 9:03 a.m.
A car was found burglarized on Janet Drive. Gone were a GPS system and registration papers.
Feb. 1, 10:13 a.m.
A man in his 30s was reported to have tried to pass a fake $20 bill at a store on the 3000-block of West Capitol. The suspect was now standing outside the establishment.
Feb. 1, 3:50 p.m.
A citizen said there were "100 juveniles in a standoff" that might turn into a fight near Glide and West Capitol.
Feb. 1, 5:49 p.m.
A Tortola Road man said he was in an argument with his landlady. He "is moving out in the morning and has paid his rent in full, (but) the landlady wants him out tonight and has put his belongings in the trunk of her car." An officer was requested to mediate.
Feb. 1, 6:54 p.m.
A witness said there men were taking things from a Sandypoint Court construction lot, and putting them into the trunk of a beige Chevy Malibu.
Feb. 1, 11:09 p.m.
A citizen reported that a "bunch of vehicles (are) doing burnouts in the street and driving recklessly" near Park Boulevard and Lakeview Drive. The cars included a black Mustang and a blue and white Ford pickup.
Feb. 2, 1:45 a.m.
A neighbor reported that three men had arrived in two cars on Carolina Avenue – and had urinated on the sidewalk. They were also smoking marijuana, and were now heading to a nearby house.
Feb. 2, 2:25 a.m.
A woman on Michigan Blvd. reported the "strong smell of something burning or melting," but she refused to evacuate because she was "unable to get her husband out of the bedroom." Police and fire were dispatched.
Feb. 2, 6:37 a.m.
A Chevy Silverado was repossessed from Twitchell Island Road.
Feb. 2, 8:53 a.m.
A security camera was stolen from a mobilehome park on West Capitol during the night. The thief might have been caught on video.
Feb. 2, 10:24 a.m.
A Sacramento Avenue mobile home resident reported being in a verbal dispute with a plumber. The plumber was now "yelling and threatening" the resident.
Feb. 2, 11:49 a.m.
A citizen told police that there was a man around 60 years old near Riverbank Road, who "appears to be setting up camp on the levee."
Feb. 2, 3:23 p.m.
An Acura hit a cyclist at West Capitol and Merkley avenues.
Feb. 2, 3:54 p.m.
A Casselman Drive resident reported that someone stole a dog about 30 minutes earlier.
Feb. 2, 6:55 p.m.
A caller reported that he just bought a Chevrolet Trailblazer from a Westacre Road man for $4,700.
But when driving the Chevy away, its axle started coming off.
The man returned to get a refund, but the seller refused.
Feb. 2, 8:43 p.m.
A 6th Street man said his children, age 49 and 21, were trying to break into his car because he wouldn't give them the keys.
Feb. 2, 10:16 p.m.
A fire with 10-foot flames was reported at 4th and C streets.
[adrotate group="10″] Feb. 2, 10:36 p.m.
An Ikea Court restaurant said a couple of men dining at the place were "acting weird (and) really antsy." The caller "thinks they are getting ready to do a 'dine and dash.' (fleeing without paying their bill)."
Feb. 2, 9:44 p.m.
An officer stopped a car for a code violation on Bryte Avenue. In the driver's seat was a 19-year old Water Street man who appeared drunk and had a suspended license. There was an open bottle of Hennesey whiskey on the floor.
The driver measured legally drunk with 0.8 percent blood alcohol. He was arrested.
Feb. 2, 11:44 a.m.
An officer pulled a 24-year old driver over at Maple Street and Michigan Blvd. The man had two arrest warrants. While searching him during the arrest, the officer located "two fixed blade knives concealed on his belt and metal knuckles," and also some marijuana in the man's pants pocket.
Feb. 2, 4:09 p.m.
An officer saw a man in a Jefferson Blvd. parking lot whom he recognized as a subject with a felony theft warrant.
With other police, the officer detained the suspect and searched him.
"I discovered a small metal container in his right coin pocket," reported the officer. "Upon opening this container I noted there was approximately six small plastic baggies and three contained a white crystal-like substance inside. Per training and experience, I could tell this was methamphetamine."
The substance later tested positive as meth. The man was also found with two glass pipes he admitted having used to smoke the drug, and a six-inch knife in his backpack. He went to jail.
Feb. 3, 12:03 a.m.
A citizen reported "seven teenage boys walking up and down Venice, banging on things as they walk by."
Feb. 3, 3:30 a.m.
A Twitchell Island Road resident said two subjects had just tried to break into the house. A screen door was found off.
The resident saw one subject – a man in black pants and a 'hoodie' – and heard a second suspect.
Feb. 3, 4:18 a.m.
A man reported that after eating in a Harbor Boulevard restaurant, he went outside "he saw his silver Mercedes keyed all over." He had a possible suspect in mind.
Feb. 3, 8:52 a.m.
A caller reported an incident the prior night at a C Street market:
A car pulled up and a man got out and "hit him two times in the head with his fist and took (the victim's) phone and his wallet."
Feb. 3, 10:17 a.m.
A domestic violence incident was reported on Rockrose Road.
Feb. 3, 12:26 p.m.
A "brindle pit bull" dog was seen "limping and wandering in and out of the street." It was unknown if the dog was aggressive.
Feb. 3, 1:19 p.m.
A suicide threat was reported in the north part of the city.
Feb. 3, 2:24 p.m.
Someone stole a washer and dryer from the side of a house on Bonaire Road.
Feb. 3, 5:08 p.m.
A citizen reported that there was a bicyclist down in the street at West Capitol and Walnut, unconscious.
It was "unknown what happened — no one hit the bicyclist."
Feb. 3, 7:42 p.m.
A man reported that two suspects shot at his car as he drove past West Capitol and Harbor.
Feb. 3, 7:58 p.m.
Police received several reports of fireworks being set off near Golden Gate Drive and Oakland bay Drive. They also received one report of several rifle and handgun shots being heard near Ballena Bay Road.
Feb. 3, 9:52 p.m.
A witness said there were about four or five drunk people at 6th Street and the railroad tracks, and "they keep jumping in front of the trains as they pass by. . . They have already dodged two trains."
Do you like what you see here?
You can support local journalism, support this website, and see all the News-Ledger's articles every week! Subscribe to the News-Ledge newspaper. It's only $20 per year within West Sacramento – once a week, delivered to your mailbox.
You can even try it for free for two months if you live in West Sacramento. Just send your name and mailing address to firstname.lastname@example.com (offer open to new subscribers in West Sacramento ZIP codes 95691 & 95605).
Copyright News-Ledger 2013


text:
Buy for£9.53(2 items)
Written by Guest on 29.04.2011 at 20:59
Epitomizes pretty much everything I hate about modern "gothic" metal: ridiculous silly childish lyrics, cheesy choruses, cheesy chugga-chug riffing, cheesy vocals, shallow songs. Not just an example of stagnation, but of regression too. One of the worst albums of the year I've heard so far, along with Sirenia's latest (and hopefully last) release. So yeah, thanks for nothing, Crapteria.


text:
Harvest Tablecloth
Photo Storage Box
Oven Rack Guards
Pot Mover
Get Up & Go Cane
Ceramic Gift Bag Ornament
Monogram Door Mat
Seeded birdhouse feeds and shelters all at once! This fun wooden birdhouse is covered with specially selected premium birdseed that appeals to chickadees, finches, sparrows, cardinals and a variety of other birds. When done, birds can nest inside. Accented with a bright red cardinal and bow. Exclusively available at Fresh Finds! It makes a thoughtful gift for nature lovers! 7"W x 6½"H x 5½"D.
Follow Fresh Finds!
Copyright 2016. Fresh Finds, LLC /
All Rights Reserved. Privacy Policy
Message from Fresh Finds
Fresh Finds
We are now accepting PayPal as a form of payment. For those of you unfamiliar
with PayPal, it is a Web-based service that enables you to pay an online
merchant without revealing your financial information. We've added this payment
option to better meet your expressed needs for confidence, control, convenience
and choice in your payment methods.
Learn more
about PayPal and decide if you would like to set up a PayPal account.
Thanks for visiting our Web site - come back soon!
Close Window


text:
Now at a special price, you'd be crazy not to buy one (or maybe 10?!) of these! Our full range of Rampage ramps and grind rails can be found HERE.
- Length - 99 CM
- Width -62 CM
- Height - 30 CM
- Weight Limit - 90Kg's
SAFETY INFORMATION- A Helmet and Pads should always be worn when using ramps. Please see our protection section.


text:
The concept of relationship is very broad and complex. In our model, personal relationships refer to close connections between people, formed by emotional bonds and interactions. These bonds often grow from and are strengthened by mutual experiences.
Relationships are not static; they are continually evolving, and to fully enjoy and benefit from them we need skills, information, inspiration, practice, and social support [2]. In our model there are three kinds of personal relationships:
The concept of "family" is an essential component in any discussion of relationships, but this varies greatly from person to person. The Bureau of the Census defines family as "two or more persons who are related by birth, marriage, or adoption and who live together as one household." But many people have family they don't live with or to whom they are not bonded by love, and the roles of family vary across cultures as well as throughout your own lifetime. Some typical characteristics of a family are support, mutual trust, regular interactions, shared beliefs and values, security, and a sense of community.
Although the concept of "family" is one of the oldest in human nature, its definition has evolved considerably in the past three decades. Non-traditional family structures and roles can provide as much comfort and support as traditional forms.
A friendship can be thought of as a close tie between two people that is often built upon mutual experiences, shared interests, proximity, and emotional bonding. Friends are able to turn to each other in times of need. Nicholas Christakis and James Fowler, social-network researchers and authors of the book Connected, find that the average person has about six close ties—though some have more, and many have only one or none.
Note that online friends don't count toward close ties—research indicates that a large online network isn't nearly as powerful as having a few close, real-life friends.
Romantic partnerships, including marriage, are close relationships formed between two people that are built upon affection, trust, intimacy, and romantic love. We usually experience this kind of relationship with only one person at a time.
[1] http://www.takingcharge.csh.umn.edu/sites/default/files/images/thumbnails/Emotions4.jpg
[2] http://www.takingcharge.csh.umn.edu/glossary/3#term37
[3] http://www.census.gov/hhes/families/about/
[4] http://www.nber.org/papers/w18690.pdf
[5] http://www.takingcharge.csh.umn.edu/our-experts/karen-lawson-md
[6] http://www.takingcharge.csh.umn.edu/our-experts/kate-hathaway-phd
[7] http://www.takingcharge.csh.umn.edu/activities/basic-rights-relationship


text:
Find flights to Toronto
Discover one of Canada's most vibrant cities and with our flights taking just over seven hours from London, Toronto is the perfect escape for a holiday.
Flights to Toronto
from: NOK4273 return from: Oslo, Mar 2017Book
The price you see first is the price you'll see last.
Low price finder and low initial deposits.
Online control over every detail
Fly with British Airways and enjoy award-winning service, excellent value for money and no hidden charges:
Discover one of Canada's most vibrant cities and with our flights taking just over seven hours from London, Toronto is the perfect escape for a holiday.
from: NOK4273 return from: Oslo, Mar 2017Book
Fly to Toronto from London with British Airways and discover one of Canada's most vibrant cities. With unique neighbourhoods and an international community of residents who call it home, it's no surprise Toronto has a thriving cultural scene.
A busy schedule of festivals is complimented by a diverse selection of museums and art galleries along with more modern attractions like the staggering CN Tower. And with our flights taking just over seven hours from London, Toronto is the perfect escape for a holiday.
When you fly to Toronto with British Airways, you'll be touching down on Canadian soil in just 7 hours. Once on board, you can relax in comfort and you'll find yourself descending towards your destination in no time.
Enjoy the comfort of award winning service when you fly direct from London to Toronto with British Airways. Keep your trip as convenient as possible with our free advance seat selection service, a 23kg checked baggage allowance as standard and the option to check in online, on your mobile or over the phone. Once on-board, sit back and relax with our complimentary food and bar service and the latest in-flight entertainment, getting your Toronto trip off to a flying start.
Once you touch down at Pearson International Airport, downtown Toronto is easily reached by both taxi and public transport. Regular buses run from the terminal to locations around the Greater Toronto Area, while the Toronto Airport Express departs every 30 minutes between the airport and six central locations in downtown Toronto. Taxis and car rental outlets are also available at the airport.
Toronto has a varied climate, and experiences all four seasons. The summer months are known to be hot and humid - temperatures often rise above 30 degrees.
Find out useful information about the airports we fly from and check which terminal your flight departs from.Airport Information
View our flight schedule to check the flight frequency and journey time. Find the departure time that suits you.When we fly
Find out everything you need to know about taking baggage with you on flights with British Airways and our partners.Baggage Essentials


text:
am in canberra, in the great land of aus just wondering, whom out there have experienced big changes in the normal weather patterns. its very strange here at the moment. but what is also strange, is no one wants to talk about it. its like they are ignoring it!
we are experiencing snow on our mountains, when at this time of year, the weather is bordering "just tolerable" we are supposed to be hitting summer and summer here usual ranges around the 30-35 degree mark, not the minuses, we have major storms and flooding in the top end, we are getting loads of rain in the middle of aus, in the alice, when it doesnt generally rain a lot there, as its a desert!!!
we recently finished a lot of planting in our garden, as it was a new place and very thread bare on the old plants, we now, even though a lot of these plants are only young, seem to continually have flowers.... even during winter! we have a tree that looks like its heading into autum right now, and this tree has always been very healthy, jeez there is just so much.
is there anyone else out there that seems to be experiencing this type of thing!


text:
Find a Ford Specialist or cheap Ford Mechanic in Stretford with Who Can Fix My Car.
Enter your registration to compare prices and reviews today. Get your competitive, local, quotes now!
Find a Ford Specialist or cheap Ford Mechanic in Stretford with Who Can Fix My Car.
The mechanic arrived nice and early on Saturday morning. He replaced the brake discs and pads on my car, in what seemed like a short time, despite the freezing weather outside. I am very satisfied with the work carried out and my car feels a lot safer to drive now.
Very nice guy. Sorted everything out and threw in a free service too. Would highly recommend.
Great service, Great mechanic very friendly had a good laugh and answered all questions i had, I will be using this mechanic again for a full service.
Great work, friendly guy. He really helped us out when stuck and on a Sunday too. Went above and beyond and would absolutely recommend him to anyone
Brilliant service all round. Very quick to respond, fixed my car in no time and even gave my car a winter health check. Highly recommended.
Did a good job on clutch very happy with Sarah who helped sort job out only downside is communication on the day of collection as no one answered phones leaving me to start looking for another garage but overall a good job and happy with the service!!
Unfortunately they never came to collect my car as arranged, didn't reply to my messages or calls for 2 days and then offered no apology when I finally contacted them. If there was an issue somebody should have contacted me to arrange an alternative time and it would mean I didn't have to waste a whole weekend over this. Very disappointing customer service and makes me wonder if a site such as this is worth using!
Highly recommended!! Lovely people and so helpful and the advice given was great. Unlike most garages these were there to help me not to get money out of me and I carnt thank them enough will definitely be using this garage in the future!!
Gave us a very good price for the work we had done. Took longer than they said initially but it was a big job. Happy with the work.
Excellent service from Manchester Car Care. Fast low priced quote. Work undertaken very quickly. Very helpful customer service. Very satisfied and would recommend. Will use again
Lee was quick and efficient at doing the job, I'd be happy to recommend.
Great service and very reasonably priced. Very handy having the garage come to you instead of trying to find time to visit the garage etc. Would def recommend.
Very efficient and easy to deal with. Very upfront about work needed. Actual price came in £120 under estimate
Great, speedy, honest service
Really easy to deal with, friendly, and good communication throughout. Good quote for the job needed doing and very convenient with it being a mobile mechanic as came to my workplace. Would definitely use again.
Top job
This garage were very helpful and do not over price I would defiantly use them again
Very good people to deal. Cist considerably more than expected, as other things needed to be done. But good service and after sales. Definitely recommend them.
Really quickly.thanks
Service started off great - Sadly ended in disappointment Am still awaiting 3 bumper clips to be returned to me as these were not put back on front bumper and so bumper is now loose. this is the only garage to remove my bumper to drop the sub-frame to replace clutch - have contacted garage several times and they keep advising me they will be in touch and I am still waiting.... I have been more than patient and reasonable and I shall allow Superb Motors a further 48 hours to return or replace the clips before the car is then taken to BMW for a quotation for replacements which will be then supplied to Superb Motors
Problem dealt with at a reasonable price and excellent customer service
Great service, friendly and very well priced. Would absolutely use this garage again.
Great fast service. Thank you so much :). Did the clutch and new battery.
Excellent value for money. Full diagnostic check done free of charge. So as it was a Sunday when I took my vehicle in I left a good tip
great fast nice cheap price
The lady that was in touch with me was very helpful and attentive and that's why I selected this garage. Plus, collection and delivery service and a complimentary car wash and internal vac. Hope the actual car service is as good as the administration of the young lady I dealt with, we shall see !!
Very pleased with service and communication. would highly recommend. I would deftly use them again.
Good service .but hard to find Friendy people
Car drives absolutely fine again, can't thank them enough. Fantastic, friendly service and was a fraction of the price charged by the big garages. Would highly recommend and will be using again in the future. Thanks again.
Great service, no hassle at all would use again!


text:
Surajkund Crafts Mela, Haryana
In order to promote the traditional Indian Handicrafts, a delightful handloom and handicrafts fair is held annually at Surajkund, on the outskirts of Delhi. Over 400 skilled artisans from all over the country display the rich crafts tradition of India in a typical rural setting. Cultural programmes and rural cuisine are also part of this colourful fair, held from 1 to 15 February.


text:
In order to better serve the West Virginia University community of students and staff, the Office of the University Registrar is proud to offer a complete listing of courses that are offered for enrollment. There is also a complete list of available courses.
Follow this link for the Schedule of Classes search.
- STAR WEB Registration
- Extended Learning Locations
- General Education Curriculum (GEC) Effective with the beginning of the Fall Semester, 2005, for all matriculating students.
- Web-based/Online courses
- The WVU Bookstore
- The PSC Bookstore
- The WVUIT Bookstore
- See the Course Legend for course code explanations including building codes and course restriction codes.


text:
Despite the recent turmoil of the past several weeks, it appears that the Western economy continues to gradually level out. Moving forward, capacity is likely to be a key differentiator. Businesses large and small have grown accustomed to getting more from fewer resources, but that will eventually change. In preparation for this shift, operations and supply chain managers are looking at their available financial, fixed-asset, and human resources and asking, "Is this going to be enough to survive?"
I was interested to read a recent Wall Street Journal story on Bremen Castings, a family-owned foundry and machine shop in Indiana. Executives at this business had embarked on a high-risk program of expansion, but, after yet another downturn, were uncertain how to proceed. Despite the recession, company leaders knew that ultimate success would depend on positioning their organization with the right technological edge. So they sat down and talked about where they are now, how customer needs may have changed, where they see demand going, and if that demand will be consistent with past expectations.
As the article explains, the proposed expansion would increase Bremen Castings' capacity for melting metals and "require obtaining another $5 million bank loan ... as the second phase of a $10 million investment, the largest in the company's 72-year history."
President JB Brown called the development a gamble, but also added, "God forbid the market goes crazy and we're doing nothing."
The author pointed out that, despite strong competition from lower-cost Chinese producers, some local customers are willing to pay Bremen Castings more in order to benefit from nimble performance, smaller orders that avoid big inventories, and less outsourcing-related risk. In this way, the company created value and filled a niche that just may make the difference.
Bremen Castings is not alone here. Numerous organizations are refining their business models and strategizing to become the onshore or nearshore supplier of choice for their customers. Many believe that China eventually will price itself out of its current position. With the value of the yuan increasing, US states offering incentives, and unions and workers granting concessions in order to get back to work, perhaps it's only a matter of time before China's and the United States' net labor costs converge.
In other news
How APICS Operations Management Now relates to you
Operations management is everywhere. Today, operations management professionals have unprecedented impacts on the global economy. Consider these questions and how today's edition of APICS Operations Management Now relates to you and your career.
Type the code from the image


text: Kauffman Foundation and Khan Academy Launch Entrepreneurship Interview Series Release Date: 9/25/2013 Media Contacts: Rose Levy, 212-319-3451 x641, firstname.lastname@example.com, Goldin Solutions Barbara Pruitt, 816-932-1288, email@example.com, Kauffman Foundation Charlotte Koeniger, firstname.lastname@example.com, Khan Academy Kauffman Foundation and Khan Academy Launch Entrepreneurship Interview Series Richard Branson, Marc Ecko among successful founders who share insights, advice and their secrets to startup success on Khan Academy (KANSAS CITY, Mo.) Sept. 25, 2013 – Graffiti was the inspiration for one founder who became a fashion mogul and serial entrepreneur. A popular feature film taught another founder an important lesson about entrepreneurship. Poor service planted the seed for an innovative global airline for an entrepreneur who now runs several successful companies. Personal lessons and insights from accomplished entrepreneurs are the basis of a new Khan Academy online interview series introduced today by the Ewing Marion Kauffman Foundation. The series represents the first entrepreneurship content to be added to the Academy's vast collection of free online educational tutorials and learning resources, potentially inspiring its 6 million student users a month. "The Kauffman Foundation is honored to work with Khan Academy on this vital work. The Academy is the embodiment of what is possible when an entrepreneurial mindset is applied to a great need or opportunity in the market, thereby disrupting everything we thought we knew about education," said Thom Ruhe, vice president of Entrepreneurship at the Kauffman Foundation, a private foundation dedicated to improving education and advancing entrepreneurship. "Khan Academy users will learn how they too can apply their knowledge to solve problems, just as the entrepreneurs in the series have." Presented in a conversational format with accompanying illustrations, the 20 videos featuring nine entrepreneurs sharing their experiences include a range of tips, anecdotes and personal characteristics, such as being fearless and thinking big. "Khan Academy provides students with foundational elements necessary to become innovators and entrepreneurs," says Sal Khan, founder and executive director of Khan Academy. "We offer lessons and project-based learning tutorials in a wide variety of subjects. We are excited to now partner with the Kauffman Foundation to add inspirational lessons from some of the world's leading entrepreneurs. Kauffman's entrepreneurship interview series illuminates the subtle lessons that can't be conveyed in textbooks." The entrepreneurs featured in the new interview series are: - Ben Milne, CEO of Dwolla - Danny O'Neill, president of The Roasterie - Giles Shih, president and CEO of BioResource International - Lara Morgan, founder of Pacific Direct - Marc Ecko, founder of Ecko Unlimited - Philip Rosedale, founder and chairman of Second Life and founder of Coffee and Power - Richard Branson, chairman of the Virgin Group - T.A. McCann, founder and CEO of Gist - Zach Kaplan, CEO of Inventables The Kauffman Foundation will add new content featuring more entrepreneurs in the near future. The Kauffman/Khan entrepreneurship interview series are available on either the Khan Academy website or the Entrepreneurship.org website. To see the videos, go to: - Khan Academy - Entrepreneurship.org/Khan About Khan Academy Khan Academy is a 501(c)3 non-profit with a mission of providing a free world-class education for anyone, anywhere. Khan Academy provides free online educational materials (e.g., practice exercises, instructional videos, dashboard analytics, teacher tools) that support personalized education for users of all ages in a scalable way. In the last two years, the organization has delivered over 300 million lessons and 1.3 billion exercise problems. Currently it has 6 million users per month and over 3 million exercise problems completed each day. Khan Academy covers subjects from basic Math to college level Biology and Art History. For more information visit www.khanacademy.org.


text:
Colette Chandelier, Bronze
- Online Only
- Vendor Shipped
- Unlimited Flat Rate Delivery
- Summary
Designed by Thomas O'Brien, this stately chandelier derives its delicate, flowing silhouette from fluid curves of slender brass tubing. Classic paper shades surround the bulbs on each graceful candelabra arm, creating evocative lighting for a dining space or foyer.
- Elegant eight-arm chandelier with slender, graceful curves.
- Crafted of brass with an Oiled Bronze finish.
- Paper shades soften and warm the light.
- Indoor use only.
- Hardwire only; professional installation recommended.
- Dimensions & More Info
- Chandelier: 36" diam., 27 high.
- Height overall: 32" (can be adjusted to 27" high by removing one rod).
- Ceiling plate: 5.25" diam, 2.25" high.
- Cord: 12'L clear
- Shades (8): 5.5" diam., 6" high.
- Uses 8 candelabra bulbs, up to 40W with shades, up to 60W without shades (bulbs not included).
- UL-certified.
- Product weight: 24 lb.
- This product is intended for use in the United States and Canada and is built to United States electrical standards.
- Made in China.
- Use & Care
- Wipe the fixture with a soft dry cloth.
- Avoid the use of all cleaners and abrasives, especially ammonia-based cleaners.
- To preserve the gleaming finish on the silverplated chandelier, use a mild silver polish.
- Dust the shade lightly with a feather duster or light cloth.
- Do not exceed maximum wattage.
- Shipping
Shipping Information
Please allow up to 2 to 4 weeks for delivery. Item arrives by our in-home White-Glove Delivery service. With in-home White-Glove Delivery, the item is brought into your home. Hardwiring and assembly are required, professional installation is recommended. Because we recommend professional assembly and installation for all of our chandeliers, these items will be delivered to the room of your choice. Delivery is by appointment, Monday – Saturday; our delivery service will call to arrange a day. Available in the 48 contiguous states. Please call 888.922.4108 for additional assistance.
Shipping Rates
With Unlimited Flat Rate Furniture & Freight Delivery, an unlimited number of eligible furniture and select non-furniture items in your order can be delivered for a single flat rate. The exact shipping charges, listed below, are based on our shipping location and will be applied in the Checkout Payment & Review page.
Local $159
Regional $259
National $399
Return Policy
Our products are designed with your comfort and style in mind.
Made to Order and Final Sale Furniture items are non-returnable. Once the order is placed it cannot be cancelled or returned.
Monogrammed orders cannot be cancelled or returned.
Final sale items ending in .97 or .99 cannot be returned.
Should your item arrive damaged or with a defect, please contact us at 888.922.4108 within 7 days so that we may arrange for a replacement. Frames and springs are warranted to be free of manufacturing defects for the product's life, subject to the following conditions: warranty applies only to original owner and normal residential use. Defects resulting from negligence, abuse or use in a commercial, hospitality or other non-residential setting are not covered. For warranty service, call 888.922.4108.
All other items (with the exception of those marked as Final Sale) may be returned within 30 days of receipt for a refund of merchandise only. View Full Return Policy.
Also in this Collection
Colette Chandelier, Polished Silver
- Online Only
- Unlimited Flat Rate Delivery


text:
Can you picture it? How about our next reason?
No. 2: Think about your images
You've done due diligence on your Facebook photo albums.
You've untagged yourself in those college party photos where you're double fisting red cups. You've threatened your friends until they agreed to take down the evidence of that embarrassing weekend in Vegas. You even deleted a few ill-advised profile pictures. So any sketchy photos should be well hidden from everyone, right?
Sure. That is, until you go to a bachelorette party with that one photo-happy friend who must post all photos from the day before she goes to bed so she won't have trouble sleeping. Or you don't notice your prolific mobile uploader friend pull out his cell phone camera once you're a few Irish Carbombs in at the St. Patrick's Day party.
By the time you untag yourself in new photos or beg your friends to take them down, the damage will already be done. Those photos are in your newsfeed and on your boss's computer screen.
Last up, if you want to respect your boss, heed our last warning ...
No. 1: Try respecting a guy with a lamp shade on his head
If there's one thing worse than your boss being able to see what you did Saturday night, it's the reverse: Having your boss's personal photos burn a permanent image into your brain.
Do you really need to see photos of your boss and his bar buddies drinking and dancing the night away? Or the home glamour shots she tried to take that look more sad than fab?
At one time, getting your hands on a photo like that could elicit a snicker and admiration from co-workers. But now that every detail of every photo is readily available to everyone online, it can just get sad.
You're boss is someone you're supposed to respect on a professional level. That can get a lot tougher when he's trying to lead a serious meeting on Monday and you can think about nothing but that wild photo he posted over the weekend.
Distributed by Internet Broadcasting. This material may not be published, broadcast, rewritten or redistributed.


text:
|Back to Main Print This Page Email to a Friend
Nikolsky sign is a skin finding in which the top layers of the skin slip away from the lower layers when slightly rubbed.
Your doctor or nurse may use a pencil eraser to test for Nikolsky sign. The eraser is placed on your skin and gently twirled back and forth.
If the test result is positive, a blister will form in the area, usually within minutes.
A positive result is usually a sign of a blistering skin condition. People with a positive sign have loose skin that slips free from the underlying layers when rubbed. The area beneath is pink and moist, and usually very tender.
Call your health care provider if you or your child develop painful loosening, redness, and blistering of the skin, which you do not know the cause of (for example, a skin burn).
The conditions associated with Nikolsky sign are serious. Some people need to be admitted to the hospital. You will be asked about your medical history and given a physical examination. You may be given fluid and antibiotics through a vein (intravenously).
Treatment will depend on the cause of the condition.
Pasternack MS, Swartz MN. Cellulitis, necrotizing fasciitis, and subcutaneous tissue infections. In: Mandell GL, Bennett JE, Dolin R, eds. Mandell, Douglas, and Bennett's Principles and Practice of Infectious Diseases. 7th ed. Philadelphia, Pa: Elsevier Churchill Livingstone; 2009:chap 90.
Schumann-Gable N. Dermatology. In: Custer JW, Rau RE, eds. The Harriet Lane Handbook. 18th ed. Philadelphia, Pa: Elsevier Mosby; 2009:chap 8.


text:
Cafeteria Host/Hostess
|Midwestern Regional Medical Center
|Zion, Illinois
|335007 Culinary Service-Enviro Serv
|Shift Hours / Days:
|1st shift
|Hours / Pay Period:
|Position ID:
|Job Function:
|Support Services
Greets and seats patients/customers in the dining room. Assist patients in wheel chairs and those needing assistance carrying their trays. Will place meal orders for patients/customers that can not stand in line. Assist guests to available seating the dining room and private dining room. Will stock and replenish beverages, paper supplies, condiments, salad bar, and maintain the freshness of the salad bar. Clean and sanitize tables and chairs in the dining area. Maintain the cleanliness of the fountain and beverage areas in the dining room. Keep floors clean and free of debris in the dining room. Will assist where needed during down times. Follows HACCP guidelines.
Minimum Qualifications:
Ability to read, comprehend, and follow written and oral instructions and recipes.
High school diploma
Ability to perform simple math calculations
Ability to function as a team player~
If you are a previous applicant, please log in below to access your account. Once logged in you can apply to additional positions, update your information, or view your active applications.Click Here


text:
Elkins hopes to add three police officers
The Elkins Police Department has openings for three new police officers, including a vacancy created by the resignation of a probationary officer who had been placed on administrative leave and was being investigated by the West Virginia State Police.
At Thursday's Elkins City Council meeting, Elkins Police Chief H.R. White said about 30 applications had been received for Saturday's Civil Service exam, which he hopes will provide suitable candidates for three full-time officer positions.
After the meeting, White said one of the vacancies came about with the resignation of the probationary officer.
White placed Christopher Boatwright, 19, on administrative leave in December.
"The Elkins Police Department placed an officer on administrative leave over an issue for which the department has zero tolerance, and we are conducting an internal investigation on the issue," White told The Inter-Mountain in December.
The Elkins Detachment of the West Virginia State Police confirmed in December there was an ongoing investigation involving an EPD member, but could provide no further information.
– During Thursday's meeting, White also told council his department may obtain a second canine officer this year.
"A businessman in town is very willing to give us money for another dog," White said, adding he is looking into the possibility.
– Also during Thursday's meeting, City of Elkins Operations Manager Bob Pingley told council more than 1.2 million gallons of water were lost in Wednesday's water main break near Davis Memorial Hospital.
"That translates to a half day's pumping of water," Pingley said, adding that parts of Elkins lost water pressure after the break.
Pingley said the city hopes to lift the boil water advisory today in effect for residents in 2nd Ward, 3rd Ward and 4th Ward beginning on Sycamore Street, including the area north of Sycamore Street, Crystal Springs and Highland Park.
Officials are waiting for water samples to be analyzed before they can give the "all clear" signal, Pingley said. The samples have been sent to a laboratory in Clarksburg, the lab closest to Elkins, he said.
– Pingley also addressed rumors that "fracking water" from Marcellus shale natural gas production has been dumped at the Elkins wastewater treatment plant.
"We're really strictly regulated on what we accept and process over there," Pingley said. "Marcellus shale byproducts are definitely not on that list. In fact, at this point there are no wastewater plants in the state of West Virginia that are accepting fracking byproducts. They did a pilot program in Clarksburg but that was not successful so they closed that down."
Pingley said the trucks seen allegedly dumping the fracking byproducts were actually city trucks dumping leachate from the city landfill.
"We are permitted to do that," Pingley said, adding that during winter months as many as six to eight trucks a day dump the leachate at the plant.
"As far as us ever accepting (fracking byproducts), the DEP (state Department of Environmental Protection) would line us up against the wall and shoot us if we started doing that, if the EPA (federal Environmental Protection Agency) didn't get us first," Pingley said.
– Among the building permits approved at Thursday's meeting was a demolition permit to tear down the Elkins Corporate Center, which locals often unofficially refer to as the "Taj Mahal."
The permit states the cost of tearing down the three-story building will be $20,000. Last March local businessman Craig Phillips paid $420,000 for the visually striking building and its 3.67-acre plot at 388 Beverly Pike. No businesses have been located in the building for several years.