text:
There are a plethora of mechanisms and technologies surrounding concurrent programming -- Python has support for many of them. In this article we will explain, examine, and benchmark Python's threading support, and discuss the much maligned Global Interpreter Lock (GIL).
This is a reprint of a featured article I wrote for Python Magazine that was published in the December 2007 issue. This article assisted in inspiring me to write PEP 371.
For many years, and especially within the last year, there has been an ongoing discussion about the concepts of concurrent and parallel programming, and how Python as a language might fit into both of these. The discussion ranges from complaints about the global interpreter lock, to a discussion on the validity of threaded programming in general.
Blog posts, open letters, and articles beleaguer the fact that Python and other languages are not truly "concurrent" and can not scale to tens of cores on the modern processor. They all discuss the myriad selection of programming paradigms, solutions (both old and new) and comparisons to other languages.
Of special note, given that this is a Python magazine, is the discussion around the validity of Python within a highly parallel and concurrent environment, due to the current structure of the CPython interpreter, the global interpreter lock, and a lack of "Erlang-like" concurrency.
What is concurrency? That's an easy thing to answer. Concurrency, when applied to application/program logic, is the simultaneous execution of tasks. For the most part, these tasks interact and pass information to and from each other and the parent. Generally speaking, anything worth doing is, sooner or later, worth doing concurrently.
While concurrency defines the problem (or rather, the theory behind a solution), parallelism defines the implementation. Parallelism, when applied to applications, generally refers to the actual implementation of concurrent programming. Specifically, it refers to the simultaneous execution of tasks in such a way as to take advantage of multiple processors, multiple processor cores, or even multiple machines within a computing grid.
There are, as with all things in computing, a myriad selection of "solutions" or paradigms to address the challenges of both concurrent and parallel computing. These include options ranging from the focus of this article (standard threading or pthreads) to micro-threads, asynchronous programming (a la Twisted), process forking, et cetera. Some languages, like Erlang, eschew many of these to build the concept of concurrency and communication deep into the language itself, making it a fundamental truth and assumption.
Each one of these paradigms,technologies, or solutions has it's own pros, cons, and intricacies that have to be understood before you as a programmer can really choose one to use. Questions have to be answered:
- Do you need shared state?
- Do you need to scale across machines/clusters?
- Are you willing to use message-passing, IPC, or memory mapping?
Most people won't, or don't have to, answer these questions, as they will simply approach the problem with what is now the near ubiquitous solution to the concurrency "problem": Threads, and threaded programming.
A brief description of Threads
A Thread is simply an agent spawned by the application to perform work independent of the parent process. While the term Thread and threading have referred to the concept of spawning (forking) multiple processes, more frequently they refer specifically to a pthread, or a worker which is spawned by the parent process, and which shares that parent's resources.
Both processes and threads are created within a given programming language and then scheduled to run, either by the interpreter itself (commonly known as "green threads"), or by the operating system ("native threads"). Threads which are scheduled by the operating system are governed by the operating system's scheduler, which dictates many things. Among them is the usage and allocation of multiple processor resources for the execution of the child threads.
Now, what's the difference between a thread and a process which you can create if both are simply workers spawned by the parent and scheduled by the operating system or interpreter? Threads fundamentally differ from processes in that they are light weight and share memory. The term "light weight" refers to the up-front cost of performing the operating system level process creation (and the requirement of passing a large amount of information and state to the spawned process). Sharing memory speaks to one of the benefits of using threads over processes. Namely, threads can share state, objects, and other information with each other and the main thread of execution (this is normally called shared context). Threads, as they live within the space of a single process, share all of the parent's address space.
The very fact that threads share the same address space is one of their key and most lauded features. When a program spawns twenty threads, all twenty of those threads can have unfettered access to data within both themselves, each other, and the parent. This "simplifies" data sharing; everyone has everything.
With shared memory you sidestep most, if not all, of the inter-child communications questions and issues. The catch? You sacrifice your ability to easily jump from a single memory space on one machine to many machines (without a lot of work, that is).
Threads, just like processes, are designed to be passed off to the operating system scheduler, which dictates which CPU a given process is run on, when it is run on that CPU which means that not only do you gain shared memory with threads, you can leverage all of the local machine's resources (in theory) including multiple cores and/or CPUs.
Threads are also, as mentioned before, ubiquitous. Most modern languages, along with some of the old crusty ones like, say, C (I kid!) have support for threads. Java has the concurrency package, Ruby has the thread struct, Perl, well perl has some thing(s). C, C++, etc., they all support threads.
Another benefit of threaded programming, which is frequently understated, is organization and design. Take,for example, any system which follows the classical Producer/Consumer model, in which you have a group of producer threads which fill a shared queue with work items and the consumer threads work off of that shared queue, concurrently or asynchronously. Threads are a natural fit for this pattern because they lend themselves to the clear and clean encapsulation of logic for all of the objects, while also leveraging the shared nature of threads themselves via the work queue. This separation/encapsulation of logic (and duties) within threaded applications can frequently make them easier to read, maintain, and understand.
Great, right?
Well, not everything is happy-fun-time in Thread land. Many a great programmer has been stymied by the one thing that brought people running to Thread's dinner-table: Shared Memory. Take, for instance, the synchronization error.
Synchronization errors occur when you have two threads accessing a common mutable chunk of data, whether it's a function that in turn modifies or calls something else, or something like a shared dictionary where the two attempt to alter the same key at once (more on this later). Synchronization errors are generally hanging out behind the school smoking with... Race conditions! Take the example in Listing 1:
from threading import Thread
class myObject(object):
def __init__(self):
self._val = 1
def get(self):
return self._val
def increment(self):
self._val += 1
def t1(ob):
print 't1:', ob.get() == 2
def t2(ob):
print 't2:', ob.get() == 2
ob = myObject()
# Create two threads modifying the same ob instance
thread1 = Thread(target=t1, args=(ob,))
thread2 = Thread(target=t2, args=(ob,))
# Run the threads
The banality of the code notwithstanding, one of the two tests will always fail. This is because both threads are incrementing an unlocked, global value. This is a simple example of a synchronization error, one of the threads beats the other to access a shared resource, and the assertion fails. Errors such as this are common. Alarmingly so, given that when people begin exploring threaded programming, their first instinct is to share everything (whereas many concurrency solutions are referred to as "shared-nothing").
This banal example shows a fundamental truth when applied to threaded programming in general: with great shared memory comes great responsibility. It's so easy to have threads throwing around objects and data that programmers frequently over share. Threaded programming requires that the programmer be very, very mindful of what data needs to be shared amongst workers, how to protect (i.e. lock) that data so that you do not run into the dreaded race-condition (as the code above would) or the even more dreadful Deadlock.
A quick note for those of you unfamiliar with the concept: deadlocks occur when your application seizes up while any number of threads lock-up waiting for the other threads to free required resources, never to return. Deadlocks and synchronization errors in threaded applications are not only painful to debug, they're also insidious, hard to find, and easy to make.
The rise of threaded programming in modern languages really brings concurrent programs to everyone. They are the commoditization of concurrency and parallelism; everyone can (and sooner or later does) write a program with threads. The modern thread is the de facto concurrent programming solution to many modern programmers. They have truly become ubiquitous.
Everyone who writes applications (or even a simple script) will write an application that does more than one thing at once, whether it's calculating prime numbers or downloading pictures of cats on the internet. And sooner or later, they're being yelled at by their spouse to come to bed because they're up at 3 am and have been chasing synchronization issues for the past twelve hours. 3 am is also when deadlocks jump out of the closet and lock up your applications, right after your 3 month old spits up on your keyboard.
Python Thread Support
To quote the Python thread module documentation:
"The design of this module is loosely based on Java's threading model. However, where Java makes locks and condition variables basic behavior of every object, they are separate objects in Python. Python's Thread class supports a subset of the behavior of Java's Thread class. Currently, there are no priorities, no thread groups, and threads cannot be destroyed, stopped, suspended, resumed, or interrupted. The static methods of Java's Thread, when implemented, are mapped to module-level functions."
Python's thread support, obviously, is loosely based off of Java's (something many a Java-to-Python convert has been happy for, and stymied by). Python's thread implementation is very simple at it's core, and builds easily on the concept of individualized workers and shared state. It provides all of the threaded programming primitives: locks, semaphores, and all the normal goodies that come with a good threaded implementation.
Let's look at the simplest thread example:
from threading import Thread
def myfunc():
print "hello, world!"
thread1 = Thread(target=myfunc)
There, you've got a multi-threaded application in seven lines of code. This little script has two threads: the main thread, and the ''thread1'' object we created. Obviously, here, I'm not sharing anything. Heck, I'm hardly doing anything at all! What we are doing is simple: I am creating a new Thread object and passing it a function to run. We are then calling ''start()'', which sends the thread off to be executed. The ''join()'' method blocks the main application execution until the thread that we've called ''join()'' on exits, this prevents a generic "poll the thread until it is done" loop one might otherwise construct.
Python's library has "two" threading-related modules: thread and threading. Two is in quotation marks because really it's only got one that most people would care about, and that's threading. The threading module builds on the primitives from the thread module that we mentioned earlier. Threading is built using thread, and there are few, if any, reasons for most developers to use the thread module directly.
Let's take a moment to revisit the statement that Python's thread support is a Java-Like implementation. Let's set a basic Python example next to a simple Java example. First Java,
package com.demo.threads;
public class MyThread implements Runnable {
public void run() {
System.out.println("I am a thread!");
package com.demo.threads;
public class MyThreadDemo {
public static void main( String[] args ) {
MyThread foobar = new MyThread();
Thread1 = new Thread(foobar);
Now, let's do the same thing, with Python:
from threading import Thread
class MyThread(Thread):
def run(self):
print "I am a thread!"
foobar = MyThread()
As you can see, the two are not that far off (albeit the Python example is shorter). Both MyThread classes extend a superclass Runnable or Thread. These superclasses provide the basic interfaces which dictate that the object is a valid "thread object". In both cases, we can skip over defining the constructor for the object, as it's already been handled by the superclass (but we could make a new one if we wanted to).
Both MyThread objects have a common method, though: ''run()''. When making an object a thread this is the only method which really needs to be defined. Once a valid ''run()'' method has been defined, the object is now threadable. A thread object may have any number of methods, callbacks, decorators, etc. We have, in wandering around the Python Cheeseshop, seen some modules simply extend thread so that an object can support threaded implementations out of the box. The implementation that's provided may not be threaded itself.
Now, as mentioned before, synchronization errors plague threaded programs. Unless access to a shared resource has proper controls (locks) applied to it, multiple threads accessing the same resource will contend for that resource. Contention leads to deadlocks, deadlocks lead to suffering, and all that jazz.
Let's take a look at another simple example commonly used to explain threading -- the Bank example, in Listing 2. This is a simple thing really; the Bank is a shared object which is manipulated simultaneously by the threads we spawn. In this example, we spawn a Bank with 100 accounts, and a 1000 "dollar" balance. This means that the Bank should only ever contain $100,000. The bank accounts should never lose money, nor should they ever gain money above what was in the accounts to begin with.
Listing 2:
from threading import Thread
from operator import add
import random
class Bank(object):
def __init__(self, naccounts, ibalance):
self._naccounts = naccounts
self._ibalance = ibalance
self.accounts = []
for n in range(self._naccounts):
def size(self):
return len(self.accounts)
def getTotalBalance(self):
return reduce(add, self.accounts)
def transfer(self, name, afrom, ato, amount):
if self.accounts[afrom] < amount: return
self.accounts[afrom] -= amount
self.accounts[ato] += amount
print "%-9s %8.2f from %2d to %2d Balance: %10.2f" % \
(name, amount, afrom, ato, self.getTotalBalance())
class transfer(Thread):
def __init__(self, bank, afrom, maxamt):
self._bank = bank
self._afrom = afrom
self._maxamt = maxamt
def run(self):
for i in range(0, 3000):
ato = random.choice(range(b.size()))
amount = round((self._maxamt * random.random()), 2)
self._bank.transfer(self.getName(), self._afrom, ato, amount)
naccounts = 100
initial_balance = 1000
b = Bank(naccounts, initial_balance)
threads = []
for i in range(0, naccounts):
threads.append(transfer(b, i, 100))
for i in range(0, naccounts):
In the normal example, the ''for i in range(0, 3000):'' would be a ''while True:'', but we don't need forever, baby. Go ahead, run it. You'll notice something within a few thousand transactions: the Bank balance goes awry. It may not always happen, though. I've run this successfully four times in a row now with zero corruption. However, the fifth time is the charm:
... Thread-88 1.26 from 87 to 41 Balance: 100000.00 Thread-88 0.65 from 87 to 23 Balance: 100000.00 Thread-88 0.47 from 87 to 8 Balance: 100000.00 Thread-88 0.04 from 87 to 28 Balance: 100000.00 Thread-83 30.14 from 82 to 9 Balance: 99948.90 Thread-83 35.70 from 82 to 67 Balance: 99948.90 Thread-80 0.11 from 79 to 98 Balance: 99948.90 Thread-83 30.82 from 82 to 89 Balance: 99948.90 Thread-83 40.51 from 82 to 95 Balance: 99948.90 Thread-83 5.20 from 82 to 52 Balance: 99948.90 ...
That's the beauty of synchronization errors and race conditions. They won't always happen. They may not even happen fifty percent of the time. But they will happen. They good news? the fix is a few lines:
from threading import Thread, Lock
lock = Lock()
class bank(object):
def __init__(self, naccounts, ibalance):
def transfer(self, name, afrom, ato, amount):
if self.accounts[afrom] < amount: return
self.accounts[afrom] -= amount
self.accounts[ato] += amount
There. Problem fixed! See, Python, much like Java, allows the broken version of this example to have one thread performing the account decrement while another performs the increment. Both threads are in the same code block of the shared object at once, and while one has already decremented an account another thread may be decrementing the same account again.
Wait what? What did we do? I've added a Lock, one of those nice fundamentals that threading support needs. "Wrapping" a resource (whether it is a variable, method or some other object) in a lock as I've done above makes execution of that resource (in this case the accounts being modified) thread safe, which is to say multiple threads can be running, but only one can be modifying that particular resource at a time. In order to run the code, a thread has to first get the lock.
Locks and their management are the fix for the problem threading introduces when accessing shared memory and objects. But don't think all's well that ends well; lock management can also drive you bonkers.
So, Python has all of the nice bits of threading, right? Well, one thing a Java programmer might be missing is the magic of the ''synchronized'' keyword. In Java, the ''synchronized'' keyword, applied to a method or variable, turns access to that method, or modification of the variable, into an instantly thread safe action.
For example, the Java version of the transfer code:
public synchronized void transfer(int afrom,
int ato,
double amount) {
The ''synchronized'' keyword basically manages the locks and conditions automagically. When the method is entered, the lock is acquired. When it is exited, the lock is released. The good news for Python is that with decorators we can at least fudge out a synchronized keyword, so instead of peppering our code with lock calls, we can do this:
from threading import Lock
from __future__ import with_statement
def synchronized():
the_lock = Lock()
def fwrap(function):
def newFunction(*args, **kw):
with the_lock:
return function(*args, **kw)
return newFunction
return fwrap
def transfer(self, name, afrom, ato, amount):
if self.accounts[afrom] < amount: return
Now, in this code example we used a bit of Python 2.5: the ''with'' statement, which allows you to condense some amount of ''try''/''except''/''finally'' code via context managers. Since the inner workings of ''with'' are out of scope, take a look at PEP 343 (http://docs.python.org/whatsnew/pep-343.html).
For easy recipes with implementations of synchronized decorators see:
- http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/533135 and
- http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/502291
So, now that you've got all of the basic lock support, and magical decorators, and you've been warned to carefully think about what to share, all's fun and games and you're going to run off and promptly write an application with 1000 threads and do cool stuff, right? Well, there's something else you need to know about: the Global Interpreter Lock.
The Global Interpreter Lock
"Nevertheless, you're right the GIL is not as bad as you would initially think: you just have to undo the brainwashing you got from Windows and Java proponents who seem to consider threads as the only way to approach concurrent activities." Guido Van Rossum http://mail.python.org/pipermail/python-3000/2007-May/007414.html
This is the part of the article where we take some air out of your threaded sails. It's unfortunate this responsibility must be mine, but let us not dwell on it. First let me describe what the GIL is.
The GIL is an interpreter-level lock. This lock prevents execution of multiple threads at once in the Python interpreter. Each thread that wants to run must wait for the GIL to be released by the other thread, which means your multi-threaded Python application is essentially single threaded, right? Yes. Not exactly. Sort of.
CPython uses what's called "operating system" threads under the covers, which is to say each time a request to make a new thread is made, the interpreter actually calls into the operating system's libraries and kernel to generate a new thread. This is the same as Java, for example. So in memory you really do have multiple threads and normally the operating system controls which thread is scheduled to run. On a multiple processor machine, this means you could have many threads spread across multiple processors, all happily chugging away doing work.
However, while CPython does use operating system threads (in theory allowing multiple threads to execute within the interpreter simultaneously), the interpreter also forces the GIL to be acquired by a thread before it can access the interpreter and stack and can modify Python objects in memory all willy-nilly. The latter point is why the GIL exists: The GIL prevents simultaneous access to Python objects by multiple threads. But this does not save you (as illustrated by the Bank example) from being a lock-sensitive creature; you don't get a free ride. The GIL is there to protect the interpreters memory, not your sanity.
The GIL also keeps garbage collection (the reason you don't have to worry about memory management, you bum) working. It prevents one thread from decrementing the counters for an object and letting the object go into the ether while another object is working with that object. Python's garbage collection (deallocating unused objects to free memory) utilizes the concept of reference counting. This is where all references to a given object (integer, string or ''YourCat(object)'') are tracked. When the number of references reaches zero, the object is deleted. The GIL prevents any two threads from decrementing the reference count to any object to 0 while another thread is working on that object. Remember, only one thread can access a Python object at a time.
In reality, the CPython GIL is designed with an eye towards a simpler interpreter implementation and single threaded execution speed. It makes the maintenance of the interpreter (and by definition, the writing of extension modules) easier by removing the need to worry about many memory management and concurrency issues that otherwise might be problematic to maintainers and extension authors. It keeps the reference interpreter simple. It is not, ultimately, an "end user" feature unless you're writing C code for Python.
Python has had threading support, and the GIL, since as far back as version 1.5, so it's not new. In 1999 Greg Stein created a patch set for the interpreter that removed the GIL, but added granular locking around sensitive interpreter operations. This patch set had the direct effect of speeding up threaded execution, but made single threaded execution two times slower.
So you may be wondering, "if we have the GIL, and a thread must own it to execute within the interpreter, what decides if the GIL should be released?" Delicious byte code instructions. When a Python application is executed, it is compiled down to byte code, the actual instructions that the interpreter uses for execution of the application. Normally, byte code files end with a name like ".pyc" or ".pyo". A given line of a Python application might be a single byte code, while others, such as an import statement, may ultimately expand into many byte code instructions for the interpreter.
That all being said, the CPython interpreter, when working with pure Python code (more on this in a moment) will force the GIL to be released every hundred byte code instructions. This means that if you have a complex line of code like a complex math function that in reality acts as a single byte code the GIL will not be released for the period that that statement takes to run.
There is an exception though: C modules! C extension modules (and built in C modules) can be built in such a way that they release the GIL voluntarily and do their own magic. Take for instance the time module (''timemodule.c'' in the Python source tree). The ''sleep()'' function looks something like this:
In a C extension, the ''Py_BEGIN_ALLOW_THREADS'' and ''Py_END_ALLOW_THREADS'' macros signal the interpreter and basically state "hey, I'm entering some blocking operation, here's the GIL back" and "hey, I'm returning, I need the GIL". This means that anything in your application that uses a blocking I/O function (network/socket manipulation, file manipulation) or a thread-safe C extension (most of the built-in ones are) can "bypass" the GIL. This means you can get closer to having multiple threads running at concurrently.
Take for a moment, the ''timemodule.c'' code we pasted above. This means that if you have a threaded application, and want the GIL to be released regularly by your threads, you can call ''time.sleep(.0001)'' or some other tiny amount, and the GIL will be magically released, and your other thread(s) will run. Most application developers wouldn't like this solution, but it is a common "work around" for the GIL limitation.
There are other macros and a lot more details about the C API and the GIL. The newer macros ''PyGILState_STATE_Ensure'' and ''PyGILState_STATE_Release'' do all of the low level state and GIL manipulation for you. we recommend reading section 8.1 of the Python/C API Reference Manual. http://docs.python.org/api/threads.html
From a programming standpoint, the GIL is equivalent to wrapping all of your code in a ''synchronize'' keyword (without the memory safety). No two threads can run at once, they can only seem to via GIL acquisition/releasing tricks.
There are other ways to accelerate the GIL manipulation or avoid it:
- call ''time.sleep()'' - set ''sys.setcheckinterval()'' - run Python in optimized mode - dump process-intensive tasks into C-extensions - use the subprocess module to execute commands
The fact is, the GIL does prevent you as a programmer from using multiple CPUs simultaneously. Python as a language, however, does not. If the CPython interpreter had the GIL removed, the operating system's pthread system would be free to run everything in parallel. The GIL does not prevent a process from running on a different processor of a machine. It simply only allows one thread to run at once within the interpreter.
The real question you have to ask yourself is: does the GIL actually affect you and your application? Is it really harming you or is it simply a convenient excuse for people to dismiss Python? Let's examine code and numbers.
Benchmarking Python Threads
Let's get our hands dirty with more code. First, a word on these benchmarks: Benchmarks are handy excuses for people to get offended, or to tweak them to make an argument. I do not intend either of these with these numbers; run the code yourself and make your own assumptions.
All tests are being run on a MacBook Pro, 2.33 GHz Intel Core 2 Duo with 3GB of ram and a 7200 RPM hard drive running Leopard and CPython 2.5.1 from http://www.python.org. For the process tests, we're using the processing module, previously covered in this magazine. http://pypi.python.org/pypi/processing/
The following tests will call a given function one time, in one hundred loops. I then display the best of 100 calls. I cycle between a non-threaded iteration based call, a threaded call, and finally a processing module (fork and exec) call. I iterate each test for an increasing number of calls/threads. I will go through 1, 2, 4 and finally 8 calls/threads/processes.
Why are we adding process results into this? The answer is simple: we know in advance the GIL is going to penalize our execution, and using it sidesteps the GIL entirely, allowing us to see how fast execution could be.
For non-threaded execution, to keep things fair, we simply call the defined function sequentially the same number of times as threads/processes we would otherwise use. All examples use new-style classes to further even the playing field, although we skip explicit ''__init__()'' setup as it's not needed.
To keep things simple, I've delegated all of the timings in this to Python's timeit module. The timeit module is designed to benchmark pieces of Python code -- generally single statements. In our case however, it provides some nice facilities for looping over a given function a set number of times and returning to us the fastest run time.
You can see the timing execution script in Listing 3. In one argument, he script accepts a module to look into for ''function_to_run()'', so for each one we just save the example function to a file. It then iterates over the tests and displays the results. This setup allows us to swap out the test function easily.
Listing 3:
from threading import Thread
from processing import Process
class threads_object(Thread):
def run(self):
class nothreads_object(object):
def run(self):
class process_object(Process):
def run(self):
def non_threaded(num_iter):
funcs = []
for i in range(int(num_iter)):
for i in funcs:
def threaded(num_threads):
funcs = []
for i in range(int(num_threads)):
for i in funcs:
for i in funcs:
def processed(num_processes):
funcs = []
for i in range(int(num_processes)):
for i in funcs:
for i in funcs:
def show_results(func_name, results):
print "%-23s %4.6f seconds" % (func_name, results)
if __name__ == "__main__":
import sys
from timeit import Timer
repeat = 100
number = 1
num_threads = [ 1, 2, 4, 8 ]
if len(sys.argv) < 2:
print 'Usage: %s module_name' % sys.argv[0]
print ' where module_name contains a function_to_run function'
module_name = sys.argv[1]
if module_name.endswith('.py'):
module_name = module_name[:-3]
print 'Importing %s' % module_name
m = __import__(module_name)
function_to_run = m.function_to_run
print 'Starting tests'
for i in num_threads:
t = Timer("non_threaded(%s)" % i, "from __main__ import non_threaded")
best_result = min(t.repeat(repeat=repeat, number=number))
show_results("non_threaded (%s iters)" % i, best_result)
t = Timer("threaded(%s)" % i, "from __main__ import threaded")
best_result = min(t.repeat(repeat=repeat, number=number))
show_results("threaded (%s threads)" % i, best_result)
t = Timer("processed(%s)" % i, "from __main__ import processed")
best_result = min(t.repeat(repeat=repeat, number=number))
show_results("processes (%s procs)" % i, best_result)
print "\n",
print 'Iterations complete'
Test one establishes some baseline numbers by executing an empty function. This will show us the overhead associated with each of the mechanisms I am testing as applied to object creation and execution.
def function_to_run():
Results of the code above:
non_threaded (1 iters) 0.000003 seconds threaded (1 threads) 0.010256 seconds processes (1 procs) 0.004803 seconds non_threaded (2 iters) 0.000007 seconds threaded (2 threads) 0.020478 seconds processes (2 procs) 0.012630 seconds non_threaded (4 iters) 0.000010 seconds threaded (4 threads) 0.040831 seconds processes (4 procs) 0.010525 seconds non_threaded (8 iters) 0.000017 seconds threaded (8 threads) 0.080949 seconds processes (8 procs) 0.017513 seconds
So, we can see that we take a hit just to add the threads and process spawning to the calls. This is expected; besides the fact that Python is optimized for single threaded performance, the simple act of creating the threads and subprocesses adds an up-front cost. Look at the first group of results -- the threaded call has a much higher cost than the non-threaded version. Also of interest is the fact that the cost of adding threads/runs grows parallel to the number of threads added -- 8 threads taking 0.080949, 4 threads taking 0.040831, and so on.
Keep in mind that the point of adding threads is not to speed up initialization, but rather to add concurrency to the application. In a less contrived example, we might create a pool of threads once and reuse the workers, allowing us to split up a large data set and run the same function over different parts (a.k.a: the Producer/Consumer model). So while this is not the norm for concurrent applications, these tests are designed to be simple.
One common application of threaded (and non-threaded) programming is to do number crunching. Let's take a simple, brute force approach to doing Fibonacci number crunching, noting of course that we're not sharing state here. I am just trying to have two tasks generate a set number of Fibonacci numbers.
def function_to_run():
a, b = 0, 1
for i in range(100000):
a, b = b, a + b
Results of the code above:
non_threaded (1 iters) 0.276594 seconds threaded (1 threads) 0.280199 seconds processes (1 procs) 0.290740 seconds non_threaded (2 iters) 0.559094 seconds threaded (2 threads) 0.564981 seconds processes (2 procs) 0.299791 seconds non_threaded (4 iters) 1.117339 seconds threaded (4 threads) 1.133981 seconds processes (4 procs) 0.580096 seconds non_threaded (8 iters) 2.235245 seconds threaded (8 threads) 2.275226 seconds processes (8 procs) 1.159978 seconds
As you can see from this data, adding the additional threads doesn't buy us anything -- you would expect that the threaded examples would run in parallel -- but we can see that the threaded example runs at the same speed (slightly slower) than the single-threaded examples. Adding threads in this case actively harms us. The function executed is pure Python, and due to the simple overhead of creating the threads and the GIL, the threaded runs could never be faster than the single threaded or process-based examples. Again, remember that the GIL only allows one thread to be active in the interpreter at any given time.
Now, let's do an I/O-bound task, like reading 1000 1-kilobyte chunks off of ''/dev/urandom''!
def function_to_run():
fh = open("/dev/urandom", "rb")
for i in range(1000):
Results of the code above:
non_threaded (1 iters) 0.125532 seconds threaded (1 threads) 0.125908 seconds processes (1 procs) 0.140314 seconds non_threaded (2 iters) 0.251784 seconds threaded (2 threads) 0.250818 seconds processes (2 procs) 0.261338 seconds non_threaded (4 iters) 0.503835 seconds threaded (4 threads) 0.501558 seconds processes (4 procs) 0.511969 seconds non_threaded (8 iters) 1.006956 seconds threaded (8 threads) 1.003003 seconds processes (8 procs) 1.009011 seconds
We're starting to see threads pass by the single threaded approach with the file I/O task, but not by much. However, it is at least neck-and-neck with the single threaded implementation and faster than the processing example. The latter is an interesting point, too. This means that if you can "dodge" the GIL you can potentially hit process speeds.
Keep in mind that you would not really use threads like the benchmark script we've put together does. Generally speaking, you'd be appending things to a queue, taking them off, and doing other shared-state tasks. Having a bunch of threads off running the same function, while useful, is not a common use-case for a concurrent program, unless you're splitting up and processing large data sets.
For a quick final example let's look at the results when using the socket module. This is the module that all network I/O goes through, it's in C, and it's thread safe. To exclude network latency issues we will connect to another computer's Apache web server on the LAN (not optimized for load) and we'll use urllib2 instead of the raw socket library -- urllib2 uses the socket library under the covers. Grabbing URLs is a common enough use case, rather than just connecting to a socket over and over. I will also lower the count of the requests since, generally speaking, jackhammering your web server makes your web server the bottleneck. Given that this one is not tuned, we will keep it simple. All that is being pulled down from Apache is the default welcome-page.
def function_to_run():
import urllib
for i in range(10):
f = urllib.urlopen("http://10.0.1.197")
Results of the code above:
non_threaded (1 iters) 0.123033 seconds threaded (1 threads) 0.121244 seconds processes (1 procs) 0.141433 seconds non_threaded (2 iters) 0.250751 seconds threaded (2 threads) 0.223357 seconds processes (2 procs) 0.242443 seconds non_threaded (4 iters) 0.486189 seconds threaded (4 threads) 0.438107 seconds processes (4 procs) 0.448466 seconds non_threaded (8 iters) 0.986121 seconds threaded (8 threads) 0.881546 seconds processes (8 procs) 0.859714 seconds
Take a look at the last two sets of numbers, minus the processing examples:
non_threaded (4 iters) 0.486189 seconds threaded (4 threads) 0.438107 seconds non_threaded (8 iters) 0.986121 seconds threaded (8 threads) 0.881546 seconds
As you can see, doing I/O does, in fact, release the GIL. The threaded examples are obviously getting faster than the single-threaded execution. Given that most applications do perform a certain amount of I/O (most applications spend a large amount of their time in I/O) the GIL does not prevent users from creating multi-threaded applications that can act in a concurrent manner and add speed to their applications.
Does the GIL block those people who are working in pure Python from truly taking advantage of multiple cores? Simply put: Yes, it does. While threads themselves are a language construct, the interpreter is the gatekeeper to the mapping between threads and the OS. This is why Jython and IronPython have no GIL. It was simply not needed and left out of the implementation of the interpreter.
Obviously, based on the numbers above, switching to processes side-steps the entire GIL issue, allowing all of the children to run concurrently. It's something to think about and it's been pointed out quite a bit.
In Summary
Threaded programming is the concurrency solution for the "common" man, but the problems one runs into when delving into threaded programming are not for the faint of heart, and they are not easy to overcome. Threading is the first solution to the concurrency problem that many people run to when they first get the urge to begin doing tasks in parallel.
Python itself has good threading support, including all of the locking primitives, queues, events and semaphores. That's everything Java and many other languages have, including some higher-level "cool" thread things. Can CPython take advantage of multiple threads for concurrency? Yes, with caveats. The caveats applied hamper a particular segment of application developers for sure, but for most of us working in high I/O environments, CPython's thread system with the GIL works out fine. Even in those environments though, threads may not be the fastest option.
The GIL is something that's been debated, and continues to be debated amongst many. Some call it a feature, some call it a mistake. Some people will be quick to say that threaded programming is too difficult for a large swath of the population, and that, in and of itself is a true statement.
An important point to remember: The GIL is an interpreter issue. This means that, again, other interpreters, such as Jython and IronPython do not suffer the "penalty" of the GIL. In the same vein, there are a few people out there currently working with the Python code base to experiment with the removal of the GIL in the CPython interpreter.
Guido (the BDFL) has already expressed openness to accepting a patch set to the CPython tree that could optionally enable or disable the GIL or, if some enterprising individual wanted to, to implement the interpreter in such a way as to remove the GIL entirely without sacrificing single threaded performance.
There continues to be a large swath of people that state that threads are not a true solution to the concurrency problem, despite many hundreds of thousands of threaded applications currently in production. These people yearn for something cleaner, less prone to the dark and sordid synchronization problems too much shared-state brings to the table.
Threading is ubiquitous, but it is only a single solution for concurrency and we hope that this article helps you think about it's pitfalls, potential and its state in the Python language.
For more thoughts on the GIL, see Guido's blog (read the comments): http://www.artima.com/weblogs/index.jsp?blogger=guido
For another excellent comparison of threads/processes/etc., see the recent effbot posting on the Tim Bray wide finder project: http://effbot.org/zone/wide-finder.htm
Note, for a producer/consumer threading example, see the threading.py module's _test() method.


text:
Diploma of Public Safety (Human Source Management)
This qualification is not cleared for public access.
NOTE: Police specialist units of competency and qualifications are not included in this document; Police specialist units of competency and qualifications are confidential and should not be accessible in the public domain. Public access to these units of competency and qualifications has the potential to compromise Police operations and security as well as place members of the public and Police Officers at risk. These units and qualifications are contained in a separate document and are only available to persons authorised by the Australia New Zealand Policing Advisory Agency (ANZPAA) – via website contact

subset: commoncrawl


text:
Little Label, trading name of
Danish label VILA has scandi chic mastered. Inspired by global influences the collection presents the season's hottest prints, colours and textures with a feminine twist. Statement pieces include must- have girly dresses, gorgeous chunky knits, sleek blouses and flashes of faux fur layered back with clean lined outerwear.
Are you sure you want to navigate away from this site?
If you navigate away from this siteyou will lose your shopping bag and its contents.


text:
American gets 35 years for role in Mumbai attacks
CHICAGO An American was sentenced on Thursday to 35 years in prison for the key role he played in a 2008 terrorist attack on Mumbai that has been called India's 9/11.
David Coleman Headley's meticulous scouting missions facilitated the assault by 10 gunmen from a Pakistani-based militant group, which killed 160 people including children.
"I don't have any faith in Mr. Headley when he says he's a changed person and believes in the American way of life," said U.S. District Judge Harry Leinenweber in imposing the sentence, which was in the range of what prosecutors had requested for Headley's widespread cooperation.
The attackers arrived by boat on Nov. 26, 2008, carrying grenades and automatic weapons, and fanned out to hit multiple targets, crowded train station, a Jewish center and the landmark Taj Mahal Hotel. TV cameras captured much of the three-day rampage live.
Before Leinenweber imposed the sentence, a victim shot in the attack gave emotional testimony during the hearing Thursday morning. Linda Ragsdale, a Tennessee children's author, spoke through tears describing how she lost friends in the attacks and her own injuries. She said she was haunted by the sounds of people suffering and her recovery from the wounds continues.
"I know what a bullet can do to every part of the human body," she said. "I know the sound of life leaving a 13-year-old child. These are things I never needed to know, never needed to experience."
The attack heightened the strain in a historically antagonistic relationship between India and Pakistan, which have fought three major wars. Indian officials accuse Pakistani intelligence of helping to plan the assault an allegation Pakistan denies.
The maximum sentence Headley, 52, faced Thursday was life in prison. He agreed to cooperate and plead guilty in 2010 to 12 counts to avoid what would have been his maximum sentence: death. He also secured a promise not to be extradited to India.
Late year, India secretly hanged the lone surviving gunman, Mohammed Ajmal Kasab.
Citing what they described as valuable intelligence Headley provided authorities about terrorist networks since his arrest, prosecutors had asked for a relatively lenient sentence of between 30 and 35 years.
The charges included conspiracy to aid the Pakistani-based group, Lashkar-e-Taiba, or the Army of the Pure, that mounted the attacks, as well as conspiracy to commit murder in India, and aiding and abetting in the murder of six Americans.


text:
Duff Goldman had a "blast" making his new Food Network series — "I got to check out the country. They let me off the leash."
His new project is "Sugar High," a six-episode series debuting Aug. 8. The show sends Goldman and his motorcycle on a "cross-country trek to capture sweet secrets and tasty techniques … in the top dessert destinations around the country."
Sweets along the way include chilled bread pudding on the Venice Boardwalk in Los Angeles, tableside s'mores in Dallas, apple strudel in Chicago, lemon ginger mousse in Boston and traditional rice pudding in Philadelphia and Sno Ballz from the first-ever, shaved-ice machine in New Orleans.
"It's about the desserts. It's about the process. It's about the food," said Goldman, describing his new TV series. "But beyond that it's about the chefs and their stories. Pastry chefs are some of the most interesting people. Some of them are lawyers, and some of them are on work release."
Most of all, Goldman wanted "Sugar High" to be fun.
"The show is really funny," he said. "People are so afraid to not take themselves seriously. There's too much competition. Instead of chefs competing with each other, let's have fun."
Goldman thinks viewers will enjoy watching him hang out with his fellow pastry chefs and bakers.
"I'm surprised they let us keep in some of the jokes," Goldman said. "The crew has three Triple A hockey players on it, and we kept cracking them up."
"I don't have a host-y personality. I just go in and talk and react. I try to be as goofy and funny as possible."
For Goldman, "Sugar High" returns him to his passion. "I never lost my passion for pastries, but I think it definitely dimmed because I was concentrating on one thing.
"I rediscovered my love for pastries. This is the best job."
Bagby expansion
The Bagby Restaurant Group has released details about their two new restaurant concepts in the Bagby Building, along with the news that Christopher "Squints" Becker will be leaving the
Wine Market
to join its company as co-executive chef with Mark Davis.
The first, a contemporary bistro named
, and located adjacent to Bagby Pizza Company, is tentatively scheduled to open in late August.
TEN TEN, Bagby representative Jayson Fricke says, will offer "a warm urban setting with a contemporary American menu at affordable prices. It's a neighborhood café, elegant bistro and eclectic tavern all balanced into one beautiful and inviting space. The varied menu is crafted to fit any mood from casual bites to special occasion, making it the perfect place for a quick bite, intimate meal for fun gathering place with friends."
The opening date for the second restaurant, Fleet Street Kitchen, an open-kitchen, farm-to-table style will be announced later this summer.
When Becker leaves the Wine Market, he will be joining Davis, formerly of
The Woodfire
in Severna Park and
Baltimore Country Club
, who arrived at Bagby Restaurant Group last month. They will jointly direct the culinary elements of
Bagby Pizza Co.,
TEN TEN and
Fleet Street Kitchen
, according to a represenative for the company.
Reading the crab shells
There's still not any public hand-holding, but the attraction between Cordish Cos. and
Phillips Seafood
is obvious. Still, both sides have kept resolutely mum. Now, a city agency may have spilled the beans about their courtship. Proposed plans to renovate the Power Plant exterior for a new Phillips Seafood restaurant are on Thursday's agenda of the city's Urban Design and Architecture Review Panel.
The agenda item, which was first reported by The Daily Record, lists the developer as "Phillips" and the architect as the Baltimore-based "Design Collective."
Phillips announced it was ending its 31-year relationship with Harborplace last month, and since then, representatives of the seafood restaurant and the Cordish-operated Power Plant have steadfastly brushed aside talk of Phillips moving across the harbor into the old ESPN space in the Power Plant.
The panel's meeting, which members of the public are invited to observe, will be held at 12:30 p.m. on the eighth floor of the Benton Municipal building.
Vincent Rallo,
the endlessly ebullient owner of Rallo's Restaurant in Locust Point, died on July 7 at Gilchrist Hospice Care in Towson.
Rallo's stands at the gateway to Locust Point, which was unknown territory in the 1980s, when the settlement of Federal Hill began to spread to the south and west. Rallo's was the introduction to the area for many of newcomers, and Vincent Rallo was the first friendly face they saw.


text:
For a lot of new users, even with the excellent documentation available on the website, there's sometimes a degree of uncertainty when building Linuxsampler with optimization flags.
As a general guide to give users a chance the first time out, can fellow users who've optimized their machines, please post their HW configs, and the flags they used which gave the best results?
Please note any configurations posted are only a guide, and not meant to a definitive setting, or settings.
If we can keep this thread simple, with just settings, and any brief extras you had to consider when optimizing, it would be appreciated. (including whether you're running 32 or 64bit.)


text:
How do you take the concept of mobile marketing and make it both actionable and profitable? Driving Mobile Traffic: SEO & PPC, a panel at SES New York 2012 moderated by Angie Schottmuller (@aschottmuller), Founder, Interactive Artisan, tackled the marketplace today, mobile friendly websites, and PPC and SEO fundamentals specific to mobile marketing. Here's a recap of the information-packed session.
Why Mobile Matters
Jason Wells (@jasonrwells), CEO, ContactPoint, started by giving the audience a nice overview the mobile marketplace and important statistics and trends in adoption.
Why is it the right time to start moving forward in mobile marketing? We're at the beginning of the adoption curve for marketers but it is certainly starting to ramp up. It is at this point where the winners in their respective marketplaces will be decided.
Need mobile marketing stats? Wells' presentation didn't disappoint. Here is the short list:
- There are 6.8 billion people on the planet, 5.1 billion own a phone, and only 4.2 billion own a toothbrush (Unysis 2011)
- It takes on average 90 minutes to respond to email and only 90 seconds to respond to a text message (CTIA.org 2011)
- The percentage of mobile subscribers that own a smartphone has gone from 31 percent in January 2011 to 48 percent in January 2012 (Nielsen 2012)
- In the 18-34 year old age group, 80 percent of those that bought a phone in the past 3 months bought a smartphone (Nielsen 2012)
- 9 of 10 mobile searchers take action after a phone search (Google 2011)
- 7 of 10 mobile searchers take action within an hour (Mobile Marketer 2011)
- Google predicts mobile search will surpass desktop search at some point within or between 2014 and 2015
Addressing mobile PPC fundamentals, Wells outlined several core places to start.
- It's critical to set clearly defined goals (examples: lead generation, application download, buy now, phone call, in-store visit).
- Don't simply assume similarities with desktop search.
- Evaluate your websites landing pages to determine if they are mobile ready through testing on various devices and browsers (Android 2.x and iOS 3.x or later).
- Don't forget mobile analytics. Capture and report on device and browser information (and behaviors associated with them) to make future assessments.
Wells recommended setting up a separate mobile campaign from desktop campaign and noted that Google AdWords will syndicate on mobile to start (so you might want to prevent that from happening). Other key pieces of information on mobile campaign development:
- Bid for position 1 to 5 to be on Page 1 for mobile results but many searches will end up with only 1 to 3 ad messages on first page results.
- Leverage keyword misspellings and emphasize shorter keyword phrases.
- Start broad (match) to discover various mobile keyword phrases and then use negative keywords and phrase matches to optimize.
- Geo-target and take advantage of location awareness.
- Incorporate Day-Parting as desktop search "off-hours" become mobile search "on-hours".
- Sell the click more than ever as you need short ad copy for shorter attention spans.
- Mobile searchers are looking for "instant gratification" (call, buy, or download now) and want to see 1-click actions.
- The most common action in mobile is a phone call.
Remember that there are distinct differences between smartphones and tablets. You have to build site assets that tackle both.
Building a Site With Mobile Device Usage & SEO in Mind
Avi Wilensky (@aviw), CEO of Promediacorp, was up next and his presentation focused on mobile site optimization. Wilensky argued that the term "mobile SEO" was rather nebulous. There is no consensus on the definition. What is key for marketers is to get the user experience right, keep bounce rate down, and focus on site architecture and the consolidation of link equity.
A bad user experience leads to the searcher returning to search engine results.
While there is a significant debate on building mobile through the use of subdomains versus subdirectories versus completely different top level domains, the specific scenario will often dictate choice. For example, subdomains might be easiest to implement but run a risk, since search engines will see as two separate sites, which could divide link equity.
The biggest SEO issue regardless with mobile sites is in dealing with and mitigating divided link equity. Wilensky provided links discussing the major search engines positions on this.
- Google: One URL With Special Stylesheet Is Easy Mobile SEO
- Bing Takes Clear Stance On Mobile SEO: One URL
Wilensky indicated that Google may "resize, adjust, or convert images, text formatting and/or certain aspects of web page functionality", in an effort to show optimal mobile browser layouts (of sites) from traditional desktop-specific results. This is known as transcoding and Google has a full write-up and how to mitigate this through redirection.
Responsive Web Design
The big topic in the mobile development world is responsive web design, which is device agnostic, using the media query in CSS3 to detect the display size. Layout renders as a result of screen real estate available.
There are pros and cons to responsive web design to consider.
- Responsive web design (RWD) will not be an easy win on legacy sites.
- While RWD enables a single URL structure (maximum link equity) it can be tricky to implement.
- No server side redirection (faster) but for advanced mobile marketing, there may be a need to design with multiple screen sizes and orientations in mind.
- Fewer URLs and more crawl budget but not IE8 supported or with older versions of Firefox.
- One HTML page (less maintenance) but more calls and slower page load.
Finally, Wilensky made mention of a new smartphone Google Mobile bot looks at smart versus feature phones, not device type. New Googlebot improves UX by displaying the destination URL in the SERPs, decreases latency by avoiding mobile redirects.
The Cross-Over Between PPC & SEO in Mobile Marketing
Kerri Smith, Senior Innovation Lead for Mobile at iProspect, closed out the session with a presentation focused on the cross-over between PPC and SEO in mobile marketing. The first goal of the mobile SEO and PPC strategy? Own SERP real estate.
- 85 percent of visitors look at the top 2 AdWords results.
- 60 percent above the fold for organic listings whereas 16 percent (and lower) below the fold.
- When owning SERP real estate for keywords in mobile, viewing time is nearly double and improves brand awareness by 4 times.
Smith stressed the importance of knowing how to spot indexing problems. Are site variations appearing appropriately for various devices and sources? Another important recommendation was to ensure users are getting to the right locations (i.e., don't redirect mobile users to home page, redirect to the specific, applicable page).
Mobilizing the Advertising Experience
When developing mobile ads, Smith recommended to efficiently capturing traffic by offering users the experience that is most desirable to them. Take advantage of mobile specific ad units:
- The Must-Haves: Site Links (increase SOV & reduce the user click path with deep linking) and Offer Ads (increase CTR/decrease CPC and opportunity to connect online to offline)
- Location Extensions: Triggers if user is in proximity to location in both search and maps, increases relevancy & can be used to drive in-store traffic
- Bid by Distance: Bid boost around locations
- Click to Call: With click to call, give the user the choice and optimize to their best experience
Effectively keep traffic by optimizing the user experience to take advantage of device functionality and make sure to optimize for local search, click to call, and form optimization
Search Engine Optimization Tips for Local
It's important to focus (refocus?) on core SEO elements when optimizing for local. This includes:
- Title tags, meta keywords (suggests property specific location information)
- Image ALT tags (go beyond the basic "what is it" and use location-based ALTs)
- Update and ensure ongoing maintenance of location information to keep content fresh for mobile users
- Make the experience social by influencing the consumer consideration cycle by leveraging popular social media platforms (Bing – Facebook/Twitter, Google/Google+, Pinterest/Instagram, Foursquare Explore
- Allow active consumers to endorse your product & drive qualified traffic
"Users are in more control of the internet than ever. Empower them as best you can to gain their trust and learn from their feedback."
Related reading
Top trends to increase value for paid search spend
Kenneth Andrew of BingAds gives us tips for how to get more value from our paid search spend. Are you keeping up with these industry trends?
What can we learn from voice search in 2018?
A study by HigherVisibility on voice search over the past few years has revealed some interesting trends in the industry.
Google Ads 2019: What to look out for
2018 was an eventful year for Google Ads, and 2019 looks to bring even more changes. Here are the key things to expect this year.
Mobile search and video in 2019: How visible are you?
Most of our search activity is mobile now and most of our video viewing is too. How should this affect the way we approach SEO for our video content?


text:
In 1969, the wide-spanning Coronado Bridge opened, and today the bridge is as much a fixture of San Diego's landscape as the Pacific shoreline itself. Coronado is home to a large number of retired military personnel. Its streets are meticulously...View all details about Coronado
This information is deemed reliable but not guaranteed. You should rely on this information only to decide whether or not to further investigate a particular property. BEFORE MAKING ANY OTHER DECISION, YOU SHOULD PERSONALLY INVESTIGATE THE FACTS (e.g. square footage and lot size) with the assistance of an appropriate professional. You may use this information only to identify properties you may be interested in investigating further. All uses except for personal, non-commercial use in accordance with the foregoing purpose are prohibited. Redistribution or copying of this information, any photographs or video tours is strictly prohibited. This information is derived from the Internet Data Exchange (IDX) service provided by Sandicor®. Displayed property listings may be held by a brokerage firm other than the broker and/or agent responsible for this display. The information and any photographs and video tours and the compilation from which they are derived is protected by copyright. Compilation © 2019 Sandicor®, Inc.


text:
Fanatic AllWave LTD 9'0 SUP Board 2016
From: GBP £1899.00
The name say's it all! The AllWave range will give you a blast wherever you decide to take it. Available in seven sizes – from the snappy 7'11" to the floaty 9'8" – we guarantee unbeatable fun in all types of waves. It's easy-peasy surfing action with surprisingly radical performance attributes.
Design details
- Wide and compact outline for easy and balanced stance, paddling and surfing
- Maximum carving via the pulled down thin rails
- Hard release edges in the tail for direct acceleration and light feel, with softer rails in the nose for smooth surfing
- Lightly domed deck (more pronounced in the four bigger sizes) for maximum stability blending seamlessly into the thin rails
- Single concave entry, transitioning into a single / double concave mid section through to the tail enhancing speed and drive (three smaller sizes). Single concave entry, blending into a double concave V in the four bigger models for extra planning power, control and easy rail to rail turning
- Bottom and rail shape provide ultimate grip allowing for smaller fins
- Quad / Thruster Fin setup with five boxes in all LTD and smaller HRS versions
- Precision through CAD design
- Mastfoot insert for windsurfing option
Tech specs
Volume: 159 l
Width: 32"/ 81.3 cm
Length: 9'0"/ 274.3 cm
Weight*: 9.85 kg
Recommended User Weight: 85-95 kg
Fittings: 3 × AllWave 5" (Thruster Set) Honeycomb RTM; 5 × Futures Boxes
Mastfoot Insert: Yes
*Weight tolerances of ± 6% (HRS ± 8%, Pure ± 9%) possible


text:
Bella Pictures:
Schedule an appointment today to discover how beautiful your wedding can be.
View our Photographer's portfolios, our packages with pricing, and be entered into our FREE Wedding Giveaway!
Bella Pictures is proud to have photographed
beautiful weddings at
Marina Del Rey Marriott.
Click here to download the latest Flash Player.
Back to Marina Del Rey Marriott


text:
B&B S.Andrea
Bed & Breakfast Sant'Andrea is situated in an ancient palace ( XVI century ) in the heart of the historical centre of Orvieto. The B&B is an apartment restructured two years ago. It have rooms all with private bathroom. The apartment is at noble floor of the palace, it is quite, elegant and confortable with restored frescos and a room with a coffered ceiling all of the XVI century.
In the morning We prepare You a nice, rich and various breakfast for a beatiful day.
Check-in : any time
Check-out : 10.30-11.00 am
Payment ; cash at the arrival
Please advice about arrival.
Availability & RatesTo view availability and prices please select dates and click 'Update Dates'
B&B Facilities & Policies
- 24 Hour Reception
- Free Breakfast
- Credit Cards Not Accepted
- Free Internet Access
- Free WiFi
- Internet Access
- Luggage Storage
- Taxes included
Cancellation PolicyThis property has a 1 day cancellation policy. Failure to cancel within this time will result in a cancellation charge equal to the first night of your stay.
Must-Read Guesthouse InfoThis property has specific Terms & Conditions.
Check-in : any time
Check-out : 10.30-11.00 am
Payment ; cash at the arrival
Please advice about arrival.
DirectionsShow MapHide Map
B&B Sant'Andrea is near ( 20 mt. ) Republic's Square where is the Municipal House of the city. In the Square there is bus stop.
From rail way station You have to take Funicolare to Orvieto and bus to Republic's Square and in twenty minutes You are at the B&B.
Located Near
Orvieto, with its splendid monuments is certainly one of the most beautiful art of Italy.
On all the Duomo, the Pozzo di San Patrizio.
For an hour's drive you can reach the city of Rome, Florence, Viterbo and Perugia.


text:
… a Sign of Dark Matter or a Nearby Quasar?
There is a really interesting article over on Ars Technica about a
high-alitiude baloon flight in Antarctica has turned up very surprisng
results. Both of the main explanations are fascinating:
The straightforward explanation requires an unidentified astrophysical
object spitting out high-energy electrons in our neighborhood. The more
exotic solution suggests that dark matter particles enabled by the
existence of extra dimensions may be annihilating nearby. Either of these
options seems pretty exciting.
Thanks Mark!


text:
Totally Awesome Headband - Floral
Totally Awesome Headband - Floral
- UNIVERSAL FIT - FITS MOST HEADLAMPS - Our headbands are exactly one inch wide and will fit most major companies headlamps out there including Black Diamond, Petzl, Priceton Tech, Energizer and many others. Our universal headbands feature a slotted buckle system so that the elastic band can be removed for installation.
- GIVE YOUR HEADLAMP A PERSONAL TOUCH! - We found most headbands provided by major brands are simply boring. We want you to look good and feel good, not just see good. Our goal at Third Eye Headlamps is to provide the gear that you want to wear and don't want to take off. Our products find the balance between technicality, functionality, high quality, thoughtful design and aesthetics.
- DESIGN – Our headbands are designed in California by well-known artist/designer Sean Anderson. These beautiful straps take wearing a headlamp to the next level. You can wear your headlamp comfortably around your head or wrap around your wrist when you need some light or pull it down around your neck when you don't. Your technical gear doesn't have to be bland anymore, period.
- USES - Whether you are an accomplished outdoors person, avid traveler, camper, cyclist, mechanic, need a lamp for emergency situations, walking the dog at night, overnight music festivals (our lamps have a flashing red and white feature for impromptu dance parties by the way…) or you are grilling in the backyard, Third Eye Headlamps has you covered- and you'll look good doing it!
- MATERIAL - Besides being incredibly good-looking, our straps are made of the highest quality materials. They are rugged, durable and functional. The soft yet sturdy material makes wearing it almost unnoticeable. Because we are so confident in our products we offer a 30-day MONEY BACK GUARANTEE AND ONE YEAR WARRANTY. We've got you covered, no questions asked.
Add To Cart


text:
As We Fumble Along
After extensive research of all the baffling, exclamation point-riddled status updates I've been seeing on FB and Twitter, I've concluded that something either is happening, has happened, or will happen in the world of sports.
After a few wild guesses and a Magic 8-Ball consult, I've concluded that these happenings are "most likely" football-related.
This has me at a distinct disadvantage, since frankly I know about as much about football as I do that mysteriously emptied Reese's Chocolate Clusters bag on the kitchen counter. Which is to say absolutely nothing.
(Ok, that's not entirely true. I think I saw the cat sniffing the bag of chocolates earlier. So I'd definitely question her, John. Yeah.)
Still, I can guess that this frankenpoo butterfly with fuzzy monster wings is supposed to be a football:
And that this next one is probably a "football field" in some Wreckerator's wildest dream:
Besides, you don't have to know the game to realize that fecal footballs are really never a good idea:
Bakers, ever hear the expression, "Don't park your ass next to a thoroughbred?" Just curious.
Could be worse, though. It could have fecal footballs with urine-yellow icing and a big ol' dual-meaning inscription like "Go Team" on it. Not that anyone would ever do something that...
Oh, no.
Although now that I look at it, I'm actually kind of disappointed there isn't a "We're #1!" on it somewhere, or "Go long" or something with the word "pass" in it. Hehehe. Wow, I never realized there were so many potty puns in sports! That almost makes them slightly more interesting. (The puns - not the sports.)
Finally, here's one more design someone clearly didn't think all the way through:
Ok, let's be generous and assume the Wreckerator meant "Touchdown," but for some reason couldn't remember how to spell "down."
Even then, you know there are FB pics out there of a bunch of drunken guys posing with this cookie cake held in very, shall we say, strategic locations. Not good, bakers, not good.
Could Diana A., Marisa H., Sue B., Meryl, Julie M., & Jessica L. be the best Wreckporters ever? Signs point to yes.
- Related Wreckage: Score!
NOTE: For the one person out there wondering: yes, today's title is inspired by The Drowsy Chaperone. For the rest of you: that's a musical with two punny gangsters in it posing as pastry chefs. Need I say more?
NOTE from john: We are currently unable to publish your comments. You can still write them but we won't be able to put them up for a little bit. Our "Epcot" advisory is at Orange.


text:
EWG News and Analysis
The latest from EWG's staff of experts >>
In the news: Quote of the Day
Thursday, September 21, 2006
"It really shows how peer review has just turned into some form of pixie dust that is sprinkled over studies so that they can save companies money when they run into regulatory problems."
--Former EPA assistant administrator Lynn Goldman, and professor of public health at Johns Hopkins University, after reading RJ Reynolds Tobacco Co. documents bragging about the money saved from architecting an EPA study to squash regulation of a toxic fumigant.
From: "Journals feel pressure to adopt disclosure rules". Environmental Science & Technology, 20 Sep 2006
Key Issues:


text:
Organizational Assessment
Back to School
NCLB Update
Letter of Appeal
ACT Scores
Poor Role Models?
Quote to Note
Upcoming Events
Organizational Assessment
As part of the Department's annual organizational assessment, the Office of Communications and Outreach (OCO) is soliciting feedback from customers for each of its primary publications, including ED Review. This short, five-question survey should take no more than five minutes to complete and will remain confidential. Your participation is strongly encouraged; your responses enable OCO and the Department to serve you more effectively. For more information, please go to http://www.ed.gov/news/newsletters/edreview/.
Back to School
It's that special time of year! In preparation for the return to school, the federal government's web portal, USA.gov, has posted an impressive collection of web sites (http://www.usa.gov/Topics/Back_to_School.shtml), with resources for students, parents, and educators. In particular, browse the Census Bureau's annual Back to School feature (http://www.census.gov/Press-Release/www/releases/
archives/facts_for_features_special_editions/010218.html), which highlights customary statistics on students, teachers, and learning, as well as data concerning back to school shopping ($7.1 billion was spent at clothing stores in August 2006, surpassed only by November and December), lunchtime (10 billion apples were produced in the U.S. in 2006, half from the State of Washington), and the rewards of staying in school (with an advanced degree, the average annual earnings of workers 18 and older in 2005 was $79,946; with a bachelor's degree, $54,689; with solely a high school diploma, $29,448; without a diploma, $19,915). The Department's Institute of Education Sciences (IES) also issued selected Back to School statistics: http://nces.ed.gov/fastfacts/display.asp?id=372.
During Back to School, the Department is honoring 2007 American Stars of Teachingteachers who are improving student achievement (some of them nearing 100% proficiency!) and using innovative strategies to make a difference in the lives of their students. One American Star will be recognized in every state and the District of Columbia with surprise school visits. Nominations for 2008 American Stars will be accepted beginning in January. For more information, please go to http://www.ed.gov/teachers/how/tools/
NCLB Update
The Department has published Fiscal Year 2007 Title I allocations by school district. Under the No Child Left Behind Act, districts must use up to 20% of their Title I, Part A allocation to cover school choice-related transportation costs and pay for supplemental educational services. Districts have some discretion to determine the allocation of funds between the activities, but they must use at least one-quarter (5%) of the 20 percent "reservation" on each activity if there is demand for both. Also, for supplemental services, districts are required to pay the lesser of the actual cost of the services or an amount equal to the district's Title I, Part A allocation divided by the number of poor students in the district, as determined by Census Bureau estimates. For more information, please go to http://www.ed.gov/about/overview/budget/titlei/fy07/. (Note: Due to state-level adjustments of allocations, the actual amounts received by districts will be smaller than shown.)
Letter of Appeal
In a letter to colleges and universities, lenders, and loan guarantee agencies, Secretary Spellings asked for the voluntary adoption of the "principles" embodied in draft regulations the agency proposed in June. "Although the Department has published for public comment the proposed regulations on student loans (http://www.ed.gov/legislation/FedRegister/proprule/
2007-2/061207a.html), the final regulations will not take effect until July 1, 2008," she said. "I urge you to act nowto assure students and parents that we have their best interests at heart in providing competitive student loans." Specifically, she asks institutions to protect the borrower's choice of lenders, basing lists of preferred, recommended, or suggested lenders solely on the best interests of the student or parent borrowers (considering factors like interest rates, fees, and loan benefits provided by the lender to the borrower), and to not request or accept any payments or benefits from a lender in exchange for being included on a list. Similarly, she asks lenders to fully disclose any offers or promises made to be included on a list relating to the terms of the loans or services to borrowers and to not provide any payments or benefits to an institution or its employees in exchange for being included on a list. For more information, please go to http://ifap.ed.gov/eannouncements/attachments/
Also: Looking for higher education data? The Department's National Center for Education Statistics (NCES) recently unveiled "Differential Characteristics of Two-Year Postsecondary Institutions" (http://nces.ed.gov/pubsearch/pubsinfo.asp?pubid=2007164) and "Persistence and Attainment of 2003-04 Beginning Postsecondary Students: After Three Years (http://nces.ed.gov/pubsearch/pubsinfo.asp?pubid=2007169).
ACT Scores
The 2007 national average ACT composite score is 21.2 (on a scale of 1 to 36), up from 20.8 in 2003 and from 21.1 last year, even with a record number of test takers and a sizable increase in minority test takers. (Since 2003, the number of ACT-tested students has increased 11 percentage points, with African-American students up 18 points and Hispanic students up 23 points.) Scores improved on all four subject-area tests (English, math, reading, and science), and all racial/ethnic subgroupswith the exception of black graduates, whose composite score dropped one-tenth of a percentage pointposted an increase on their composite score. Nevertheless, the results suggest students must continue to take courses beyond minimum high school requirements to adequately prepare for college. In fact, just 15% of graduates who took Algebra I and II and geometry earned a score of 22 or higher on the math test (compared to 40% of graduates who also took trigonometry), while only one in five who took general science, biology, and chemistry earned a score of 24 or higher on the science test (compared to 40% of graduates who also took physics). (Students with these ACT scores have a high probability75%of earning a "C" or better and an even chance of earning a "B" or higher in college algebra and biology courses, respectively.) Among the Class of 2007, 51% of test takers reported taking ACT's recommended high school curriculum, with four years of English and three years of math (algebra or higher), science, and social studies. For more information, please go to http://www.act.org/news/data/07/. (The Secretary's statement is available at http://www.ed.gov/news/pressreleases/2007/08/08152007.html.)
Poor Role Models?
According to a new Associated Press-Ipsos poll, one in four adults (27%) have not read a single book in the last year. Moreover, on the whole, adults claimed to have read just four books within the past year. (The figure rises to seven books if adults who have not read any books are excluded.) Not surprisingly, some groups are more voracious readers than others: women read more than men, people over the age of 50 read more than younger adults, and college graduates read more than the less educated. The Bible and other religious texts were read by two-thirds of adults in the survey, followed by popular fiction, histories, biographies, mystery novels, and romance novels. Classical literature was named by fewer than 5% of readers. For more information, please go to http://www.ipsos-na.com/news/act_hit_cntr.cfm?id=3613
Quote to Note
"Computers, commerce, and the media link our world, but there is still no replacement for actually being thereliving someplace new, making new friends, and learning new rhythms of life. I'm a firm believer in the value of these experiences, so much so that I recently sent my daughter, Mary, to study in Latin America."
|Secretary of Education Margaret Spellings (8/22/07),
addressing college students in São Paulo, Brazil
Upcoming Events
Register today to join the U.S. Chamber of Commerce's Institute for a Competitive Workforce and over 400 leaders in business, education, workforce development, and policy at the annual Education and Workforce Summit, September 24-26 in Washington, D.C. The Department's Scott Hess, Chief of College and Career Transition Programs, will present at a workshop titled "Workforce Development Funding 101." Other sessions: "Redesigning Education in America," "The Economic Impact of Education" (featuring Federal Reserve Board Chairman Ben Bernanke), and "The Challenge of Aligning K-12 with Postsecondary and the Workforce." For more information, please go to http://www.uschamber.com/icw/strategies/icwsummit.htm.
Planning is underway for the Department's eighth annual International Education Week (November 12-16, coinciding with American Education Week). The week provides schools, colleges and universities, and communities the opportunity to promote and celebrate the benefits of international education worldwide. This year's theme is "International Education: Fostering Global Citizenship and Respect." Individuals and institutions are encouraged to join the IEW listserv and submit a report on planned IEW activities. For more information, please go to http://iew.state.gov/.
Next month, the Department will be exhibiting at the 22nd annual National Council of Negro Women's Black Family Reunion Celebration on the National Mall (September 8-9) and the Hispanic Engineering, Science, and Technology Week conference at the University of Texas-Pan American (September 24-29). If you are attending either of these events, please stop by the Department's booth.
Credits, Subscribe & Unsubscribe
Please feel free to contact the Office of Communications and Outreach with any questions:
Director, Intergovernmental AffairsRogers Johnson, (202) 401-0026, email@example.com
Deputy DirectorMarcie Ridgway, (202) 401-6359, firstname.lastname@example.com
Program AnalystAdam Honeysett, (202) 401-3003, firstname.lastname@example.com
To be added or removed from distribution, or submit comments (we welcome your feedback!), please contact Adam Honeysett. Or, visit http://www.ed.gov/news/newsletters/edreview/index.html.
This newsletter contains hypertext links to information created and maintained by other public and private organizations. These links are provided for the user's convenience. The U.S. Department of Education does not control or guarantee the accuracy, relevance, timeliness, or completeness of this outside information. Furthermore, the inclusion of links is not intended to reflect their importance, nor is it intended to endorse any views expressed, or products or services offered, on these sites, or the organizations sponsoring the sites.


text:
Modern definitely has to do with fitting in the space you need to live in, in whatever space you have to build a home (even if it's tiny). That seems to be the case of the Shadow House, a modern home squeezed in between older homes in North London, designed by Liddicoat & Goldhill in 2011. Another awesome element to this house? Their great, great material choices.
Seen best in that photo above with the four different materials showcased, they just made really rich, simple modern material choices that created a layered feeling in the space though there aren't a lot of furnishings. That mix of plywood and marble in the kitchen is so brilliant. "The Shadow House is a new build private house in Camden, North London. It has won a 2011 RIBA Award, Best small house of the year award at the British Homes Award 2011, received a commendation at the 2011 NLA Awards and was longlisted for the Manser Medal. We carried out the entire project ourselves, from finding the site, through planning, design, construction and manufacture of the fittings, fixtures and furniture."
[ via : blog2modern ]


text:
/*! jQuery UI - v1.8.20 - 2012-04-30
* https://github.com/jquery/jquery-ui
* Includes: jquery.ui.progressbar.css
* Copyright (c) 2012 AUTHORS.txt; Licensed MIT */
.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


text:
Climate change education can feel like a balancing act between two extremes. Activities using data and graphs, crucial for evidence-based learning, often don't personally resonate, while those featuring polar bears on melting icebergs and sea turtles with plastic in their stomachs can feel emotionally manipulative and overly reductionist.
NCSE Teacher Ambassador Sarah Ott engages her community in an Earth Day-inspired mural project that aims to ensure climate change is part of normal, everyday conversation in her Georgia city.
An unexpected role that many NCSE Teacher Ambassadors take on is that of expert witness. They are experts on teaching climate change and evolution and on dealing with doubts—and sometimes challenges—in their communities. This makes them perfect targets for reporters who contact NCSE looking for teachers in the trenches they can talk to about climate change and evolution education.
Ten new NCSE Teacher Ambassadors will be gathering together in March to revise lessons and plan their work with local colleagues. They represent talented, accomplished professionals teaching climate change in areas of the country where that can sometimes prove to be ideologically controversial.
John Cook knows a thing or two about climate change misconceptions and he's on a mission to help teachers and students leverage those misconceptions into fruitful, engaging, evidence-based learning opportunities.
NCSE's Executive Director Ann Reid looks back at the organization's accomplishments in 2018, and looks ahead to what's coming in 2019.
NCSE Director of Teacher Suppport Brad Hoge explains the rationale behind our misconceptions-based approach to climate and evolution education.
Watch as Ann Reid delivers a talk at Clemson University: "Capturing a Killer, Capturing the Imagination: The Power of Bringing Real Evidence into the Science Classroom."
Renowned climate scientist Michael E. Mann and author and illustrator Megan Herbert provide insight into their new children's book about climate change, The Tantrum That Saved the World.
The Tantrum that Saved the World, a children's book about climate change written by Michael E. Mann and Megan Herbert, is reviewed by a fifth grade teacher and her students.
National Center for Science Education, Inc.
1904 Franklin Street, Suite 600
Oakland, CA 94612
fax: 510-788-7971
For Reporters | Store | Events


text:
The Importance of Being Earnest (comedy)
*8 p.m. Friday and Saturday and Dec. 13-14; 2 p.m. Dec. 8.
*Lower level of Sangamon Hall South, Lincoln Land Community College, 5250 Shepherd Road
*$12 general admission, $10 students and senior citizens, available in advance at 786-2762, or at the door.
The world of steampunk meets the Victorian era in Lincoln Land Community College Theatre's presentation of the Oscar Wilde comedy "The Importance of Being Earnest" opening Friday at the Springfield campus.
Director Mark Hardiman says that steampunk is a modern, whimsical view of what would happen if instead of going to a gas-and-electric technology, the world stayed with steam and clockworks, as were being developed in the 1800s.
"And what would happen in sort of an alternate universal if we just sort of moved that forward," says Hardiman, LLCC assistant professor of theatre.
"That enables us to actually set this in the present with people who are presumably involved and engaged in the whole culture of steampunk."
"The Importance of Being Earnest" presents a comedy of mistaken identities when two wealthy men living in 1890s England use the same pseudonym "Ernest." Things get complicated when two women fall in love with whom they believe is only one "Ernest."
LLCC often casts a mix of students and community members. But this show features an all-LLCC cast.
"We like to usually mix them (students and community members), but this semester, I had more than enough students to cast the show," Hardiman said.
"Part of what I do when I pick shows is I look at what students are available to do the upcoming show and who needs to work on what. I cast it very much like the way you cast a repertory company. I look at the skill set of the people that I have with me, and I do what I can to offer opportunities for them to enhance their skill set."
Amy Cantrall — who plays the role of Cecily Cardew, who is a ward of one of the play's protagonists, Jack — says she's had a lot of challenges in her role.
"The accent was a big one, and I'm still working on it," says Cantrall, a sophomore majoring in English with a minor in theatre. "Also, the way she has to take authority. I'm a little quieter onstage as compared to other actors, so Mark had to tell me to own the stage and be more confident in my character."
Cecily, who is obsessed with the name "Ernest," is an exciting character, Cantrall says.
"She's bubbly and has childish dreams about her love interest (whom she's never met), Ernest, and that makes it so amusing to play her. She's got a big imagination," Cantrall says.
The rigid Miss Prism, Cecily's governess, is played by Katie Steinhour. Acting very proper while being very absentminded are among the best things about her role, Steinhour says. But there are challenges.
"During certain parts, it was hard for me to figure out what it is she needed to do when she wasn't talking," says Steinhour, who has one semester to complete before graduation and is majoring in administrative assistant/office professional.
"I would read through the script scenes before and after the ones I am in to see what she would be doing during those scenes.
Physical steampunk
One of the biggest challenges is getting students to physically understand the culture the play comes from, Hardiman says, which requires incorporating period-type movement and dialect.
"Trying to get them up to the quickness and rhythm of the English dialect that the play is written in (is) a significant challenge, and they're doing amazingly well at it," Hardiman says.
"The Importance of Being Earnest" is more like farce than period comedy, Hardiman says. So, basing the production in steampunk gives it opportunities in terms of physical comedy.
"It can be a little broader, which serves our space very well," Hardiman says. "We basically do everything in a giant — well, it used to be the auto garage, and it's pretty much still the auto garage. That works well with the whole steampunk concept because we've got pipes and things like that. It looks very industrial."
Hardiman says the comedy presents itself so people can see who they truly are through triviality.
"People who are coming to it and have an idea about how the show should be really kind of need to prepare themselves for a very goofy version of this show," Hardiman says.
Cantrall and Steinhour hope audiences come away with a laugh.
"I hope they walk away thinking, 'That was really good. What else is out there that I'm missing out on?'" Cantrall says.
Contact Tamara Browning: 788-1534, email@example.com, twitter.com/tambrowningSJR


text:
Upcoming Events
Exclusive Content
Please sign in or create an account to access the exclusive member contentSign InCreate an accountView Membership Benefits
This content is exclusive to USGA Members. If you are not a USGA Member but would like to learn more about how you can support the USGA, click below:View Membership BenefitsVerify Your Membership
Your Membership has expired! Renew your Membership today to restore your access to the Member Clubhouse - your source for exclusive content, special offers and invitationsRenew your Membership


text:
Talks between Blackburn Rovers and Kevin MacDonald continued on Friday over a new managerial set-up at Ewood Park.
MacDonald left Aston Villa in the summer but is still being paid the remainder of his contract, which is due to run until next summer. With that in mind, he will seek a longer deal at Blackburn than simply until the end of this season.
Another element is the appointment of Alex McLeish at Nottingham Forest; McLeish and MacDonald worked together for a spell at Villa, although there is no suggestion of that alliance being re-formed.
Blackburn's plan after the sacking of Henning Berg is believed to be the appointment of a coaching team rather than a manager with assistants. MacDonald first caught Blackburn's attention when speaking to the club about being a coach under Berg.
Shebby Singh, Blackburn's global adviser, dismissed suggestions that he and Judan Ali – a coach with experience limited to youth and amateur level and star of the Bollywood football movie Dhan Dhana Dhan Goal – are likely to be handed the job.
Singh said: "No, no – he's a guest of the club and, no, there's been no appointments, there's been no signings. None at all. That's rumour and speculation at the end of the day, what can I say? Please, I am serious now, no it's not true.
"We've got capable people. This club is well run, we've got proper people. Gary Bowyer has been reserve team and under-21 manager for two years, he's been at the club for eight years.
"Terry McPhillips, Tony Grant [both youth coaches] – these are great guys. They've been working so hard behind the scenes and people don't realise all the good work that they've put in. So nothing of that sort [Singh and Ali taking training], it's been business as usual."
Balaji Rao, a director of the Venky's group which owns Blackburn, was quoted in India saying that an appointment of a manager with "Premier League experience" was imminent.
But Singh said: "I can safely say that is not true because I was on the phone with him. I've been on the phone with him all morning and no, it's not true. Someone's just decided to be mischievous about it so, no, it's not true."
This article was written by Ewan Murray, for The Guardian on Friday 28th December 2012 18.25 Europe/London
guardian.co.uk © Guardian News and Media Limited 2010
image: © supermoving
Have something to tell us about this article?


text:
Energy Efficiency, Rediscovered
The Cup will occur at a delicate time for South Africa's energy moguls. Eskom, the national utility, has warned that power cuts, which have plunged thousands of households into darkness on many occasions over the last three years and cost businesses millions, could continue right through to 2010. There is a real possibility that these shortages will disrupt the matches and broadcasts during high-demand periods. "Eskom's power system will remain tight over the next five years with an increased likelihood of power interruptions. This trend is set to continue at least until the first new coal-fired base load power station is commissioned in 2011," the utility reported last year.
Eskom's customers are getting used to it. At times, they have been forced, reluctantly, to adopt an energy-saving mindset, turning off electric equipment at the wall, avoiding use of washing machines during peak hours, and baking less. But the utility is still in a difficult position. South Africa's total demand for energy is increasing faster every year than its supply, and is projected to double within the next 10 years. New capacity investment is expensive. So, under pressure from the government, Eskom has had to open itself to energy-saving initiatives and renewable energy measures such as solar water heating. "Eskom had in the past refused to admit any link between solar water heating and the blackouts, but has now finally acknowledged it," says consultant Glynn Morris of the South African energy consulting group Agama Energy. Probably one of the first utilities in the world turning to renewable energy as a result of supply problems rather than government-mandated targets, Eskom in 2007 pledged US$200 million over the next five years in support of a solar water heating roll-out as part of its energy-saving initiatives, which help finance new equipment for customers.


text:
hello everyone. I am trying to become America's hottest Coach.
But i need your help!!!!
Please Submit this Info ( Copy Paste and Email to firstname.lastname@example.com )
William Vazquez also known as CoachV to his students, was born and raised in New York City. He got his start in tennis at an early age through the NYC Parks & Rec Youth Summer Tennis Program, Arthur Ashe's (NJTL) National Junior Tennis League, the New York Junior Tennis League and the Harlem Junior Tennis Program. Through these Grassroots programs he was able to develop his skills and gain a deep passion for tennis. Loving tennis so much, he decided to help others reach their goals and developed a "holistic tennis system" to maximize his students playing potential and bring fun to the game. I Trained under the following people.
* Tom Blake Head Tennis pro at HJTP & father to Touring Professional James Blake.
* Colin Dibley ATP's former fastest server in the world.
* Karen Buchholz: Olympics' tennis committee member, WTA tour player, trainer and Director of Harlem JTP, Director at large USTA Eastern.
* Gus Alcayaga: Director of the Tennis for NYJTL, Junior Development Director of Forrest Hills Tennis Club in LIC, Coach of the Winning National 2010 USTA Junior Team Tennis Advance Division, ATP Touring Professional, Practice Partner of Andre Agassi & CoachV's Current Tennis Mentor/Coach.
Views: 1208
Replies to This Discussion
You got my support and vote. Best wishes and good luck. Coach Dudley
Make sure to email it in! thanks Coach Dudley!
I sent the email without the pictures. Good luck, V!
well i will see....... I hope to get something even runner up would be great!
You seem to be a cool guy, I sent it out and BCC'd you. Let me know if I didn't do it right!
thanks Kevin everything helps!
Chopped, sliced, cooked, and eaten, CoachV. Now just waiting for digestion.
Thanks Joe B for voting me in!
hi world I still need many more votes! please reply here after you send in the info thanks!
OK I need as Many Submissions as i can get until June 22nd!
i need at least 300 submissions before june 22nd to win the competition. please post here if you have submitted me... thanks!
OK , I have till the 22nd, I need more votes PLEASE!!!! 136 views Keep it growing!!!!
© 2019 Created by Mark / The Mayor. Powered by


text:
Meet Coco, a three-month-old pit bull from Sacramento who's currently recovering from an at-home "ear cropping," a practice that's only allowed to be carried out by a licensed veterinarian. It's often administered to pits under cruel and painful makeshift circumstances so they don't bleed during a dogfight.
Luckily, Coco is recovering in his foster home, who reports that he's "coming out of his shell," and is almost ready for a forever home.


text:
Let's Just Stick with "Happy Falker Satherhood"
We here at Cake Wrecks would like to wish all of you dads out there the happiest of Father's Days this weekend.
Just as soon as we figure out how.
Of course, getting the inscription right is only half the battle:
(Also, you've got to love the not-so-subtle "Making of Me" "rug" there. Way to acknowledge the paternal contribution, Wreckerators!)
Now, kids, when ordering your Daddy a cake, try to emphasize his positive qualities.
Carrie G., Erin H., Brady M., Ro W., Vangie B., Elisabeth K., & Katie, you've made your dads proud today. Unless, of course, you've never managed to measure up to his expectations, and he just doesn't understand you. In that case, this probably hasn't made much difference either way.