text:
|Allegro CL version 10.1
Unrevised from 10.0 to 10.1.
10.0 version
This document contains the following sections:1.0 Runtime analyzer Introduction
The runtime analyzer is a tool to make Lisp programs more efficient. Runtime analyzer information tells you which parts of the program run slowly or use a lot of space (thus increasing garbage collection). Once you know this, you can improve efficiency by optimizing (see compiling.htm) or by recoding.
The Runtime Analyzer works on all platforms. (Problems with the Runtime Analyzer on AMD 64 processors reported in earlier versions of this document, have been resolved. That processor is used by 64-bit Allegro CL on Linux and 64-bit Allegro CL on x86 Solaris.)
Allegro CL provides three runtime analysis tools for assisting users in determining where time is spent or space is used. Most powerful are the space and time analyzers which statistically sample a running program to determine which functions use the most time or which use the most space. The call-counting profiler keeps a count of the number of times a compiled function is actually called while a program is running.
Allegro Composer extends the space and time analyzers by providing a graphical display of the results as well as the ability to start and stop the profilers graphically. Without Allegro Composer, all the same information is gathered and reported but the information is printed to the terminal.
The Allegro CL Integrated Development Environment in Windows also provides a graphical display of runtime analyzer data and various menu commands for starting and stopping analysis. See the description on the Runtime Analyzer Results dialog in the IDE help file. The IDE additionally provides a Runtime Analyzer Control dialog which provides graphic tools for starting, suspending, and stopping profiles and for controlling what is profiled. The Runtime Analysis Graph dialog is described with the Runtime Analyzer Results dialog
We describe the four types of runtime analyzer below. Later sections describe how to use the runtime analyzer and how to interpret the results. Please note the following:
The time analyzer collects data by interrupting execution of the
Lisp periodically and recording the functions on the execution
stack. The variable
*granularity* controls how often
execution is interrupted. Its value is the integer number of machine
clock ticks between samples.
A machine clock tick occurs approximately every 0.01 seconds (the exact value is machine dependent). In that time, the machine will typically execute tens of thousands of machine instructions. The statistical nature of the time analyzer should therefore be evident. However, under reasonable assumptions concerning lack of interaction between execution of your program and machine clock ticks and with sufficient samples, the information gathered by the sampling process will closely mirror the actual behavior of the code which is executed.
The `reasonable assumptions' state that (1) there is no cycle in the program harmonic with the program interrupting time so that the interrupting times do provide a random sample of program execution and (2) if your program does several different things, enough time is spent on each to provide statistically significant results. Several thousand samples are statistically sufficient. Of course, functions where your code spends very little time may be missed altogether by the time analyzer. However, the purpose of the runtime analyzer is to assist you in making your code run faster, and functions which use little time are not important in achieving that result.
The space analyzer tries to identify the functions which use the most space. Like the time analyzer, the space analyzer is statistical but the method for sampling is quite different.
The time analyzer stops execution regularly and examines the stack. The space analyzer stops execution whenever a page of memory is allocated. The statistical nature of the space analyzer arises from the fact that the function which calls for a page of memory will not (typically) use it all. After the function which called for the page has completed, there may be sufficient room left on the page for the space requirements of the next function. Therefore, only the first function is charged with needing space even though both functions used the space.
The assumption of the space analyzer is that the requirement for new pages of memory occurs randomly and in proportion to the amount of space actually required by a function. So given a reasonably large sample, the functions that use large amounts of space will have proportionally large amounts of space attributed to them by the analyzer.
In Allegro CL, memory is organized into three kinds of objects: symbols, conses, and other. Both symbols and conses have a specific size and so a known number can fit on a page. Other Lisp objects require variable amounts of memory (depending on what information they contain). All objects other than symbols and conses are stored on other pages.
The space analyzer thus records information whenever one of the functions which allocate a new page of memory is requested. The request can come from the internal function _page_from_new (for symbols and conses) or from the function new_other (for other objects). These functions are deep in the system and are not typically user visible. On machines where this is possible, during analysis, hooks associated with those two functions stop execution when they are called and record information about what is on the stack. Note that because of the way stack linking is done on certain machines, you may not see the actual _page_from_new calls, but rather Lisp functions (such as cons) which trigger the calls. These analyses are harder to interpret, but the stack linking requirements make it impossible to list these calls with more accuracy. (The examples in the document are from platforms that do show _page_from_new.)
Note that the time macro also provides information on space used by the form evaluated. This information is quite accurate (in some cases, the total space used is more accurately reported by the time macro than by the space analyzer). Time does not provide a breakdown of what within a form caused space usage and that is what the space analyzer is designed to do.
The call-counting profiler is integrated with the space and time
analyzers. No special compilation is necessary for calls to a function
to be counted, but you must tell the system to keep counts by
specifying true values for the :count or
:count-list keyword arguments when the runtime
analyzer is started. (However, see
verify-funcalls-switch. funcall'ed functions in certain cases
in compiled code will not be counted if the call was compiled with
that compiler switch false.) Any function can be call-counted. The
count is exact, not statistical. The only `calls' that will be missed
are where a function is compiled inline and the inline code is
executed, and, on certain architectures, calls triggered by
funcall. Note that the overhead for counting calls can be significant,
and that overhead is recorded by the time analyzer. There is no space
overhead, so the space analyzer results are unaffected. Therefore, the
reported time usage is skewed by the call-counting overhead when a
time analysis also does call-counting. The time results are still
useful, but must be interpreted with care and a time-only analysis
should not be compared with a time and call-counting analysis.
Unless otherwise indicated, the symbols described in this section are in the profiler (nicknamed prof) package.
In order to do a runtime analysis, you need to start it and stop it. You
can start it with start-profiler and stop it with
stop-profiler or you
can use the macro with-profiling to cause the runtime analyzer
to be run while a specific body of code is executed. The variable
controls the maximum number of samples that will be taken. Data collection
will stop when that number of samples has been recorded even if
stop-profiler is not
called or the code specified to with-profiling has not completed.
Note that it is important to distinguish between starting and stopping data collection and suspending data collection. start-profiler and stop-profiler are the beginning and end of a data collection run. No data is collected before start-profiler is called and none can be collected after stop-profiler is called. Temporary suspension of data collection is done with the functions start-sampling and stop-sampling. On Windows using the Integrated Development Environment, commands on the Run menu can be used to start and stop data collection and sampling.
The macro with-profiling can be used to collect data on the evaluation of specific forms. The macro with-sampling similarly can be used to sample only as specific forms are evaluated.
Please note the following about time and space data collection.
prof::*sizefile-template* and
prof::*samplefile-template*, whose values are either
"/usr/tmp/sizes" and "/usr/tmp/sample" or
"/tmp/sizes" and "/tmp/sample". (The actual data
files have filenames longer than sizes and sample.) You may change the
values of these variables if the wrong or an inappropriate temporary
directory is specified. The values must be strings like
"<my-tmp-dir>/sizes" and
"<my-tmp-dir>/sample" where <my-tmp-dir> is the
absolute path of the directory you want to use.
You may see this message when collecting data. This section explains what it means. The reading of the C symbol table into lisp form has been enhanced to not only include symbols from the executable itself (which has itself shrunk to a very small size) but also any shared-libraries that the lisp uses, including the heart of the lisp itself. The function list-all-foreign-libraries lists those libraries whose symbols Allegro attempts to read in.
Sometimes, the shared-libraries do not have the necessary headers and sections that are needed for proper building of a C symbol table in lisp. In these cases, a profiler-error is given, for example:
USER(2): (prof:show-flat-profile) profiler error: couldn't find .text section profiler error: couldn't find .text section
In this case (on a Sparc Solaris 2.6) two libraries did not have .text sections, so no symbols are recorded for those two libraries.
The failure to find symbols is not fatal. The debugging tools that use the libraries are simply not able to give as complete information as if the symbols had been available. The same soft failure occurs when a symbol in a .so had been declared static (or in the case of Windows, any C symbol not explicitly DllExport-ed). The exact failure mode depends on the arrangement of the functions in memory; a function at one address whose symbol was not properly recorded will appear to be part of the next-lower-addressed function whose name was recorded.
The status of the data collecting can be determined at any time using the function profiler-status. Called with no arguments, it returns the status of the current profile. The status can be one of the following:
:inactive-- data collection has not yet started
:suspended-- data collection has started, but sampling is currently not being done
:sampling-- data collection has started and sampling is occurring
:saved-- data collection has been stopped, but as yet no analysis of saved data has occurred
:analyzed-- all data has been analyzed
A finalized analysis (profiler-status returns
:analyzed) can be saved using the macro save-current-profile. It takes a variable
name (i.e. a symbol) as an argument and the profile data is made the
value of that variable.
Saving an analysis with save-current-profile allows you to analyze
data at your leisure, running other analyses in the meantime. The
keyword argument
:current-profile to show-call-graph and show-flat-profile can take a
saved profile instead of the default (which is the currently running
or last run analysis) and display results using that data.
Fairly fine control is provided over the collection of data while
the data is being collected. Sampling can be started and stopped with
the functions start-sampling and stop-sampling. The macro
with-sampling can be used to sample just while specified forms are
evaluated. Note that data collection started with the function start-profiler may start
sampling immediately or may delay sampling (depending on
the value of the keyword
The variables
*maxsamples* and
*granularity* also control the behavior of
the runtime analyzer. The first puts a limit on the number of samples
Its initial value is
most-positive-fixnum. The
second specifies the time interval between time samples. The units are
clock ticks, an internal value usually about 1/100 of a second (during
which time thousands of machine instructions are executed). The space
analyzer, which is not statistical in the same way, ignores the value
When data is being collected, everything done in Lisp is sampled, including the runtime analyzer itself. The runtime analyzer overhead (for either space or time) is small. The runtime analyzer can be turned on and off (that is suspended and resumed) with the functions start-sampling and stop-sampling.
After data collection completes, the data is stored within Lisp. If you wish to analyze the data, you must do so before sampling for another analysis is started. (You can, however, begin an analysis of the collected data and save it for later detailed analysis). If after data is collected, collecting data for a new runtime analysis is started, the data collected by the previous runtime analysis will be lost.
As an example of how to use these functions, we show how to collect data on a single function foo that never calls itself embedded in a larger piece of code. Suppose we want to analyze foo alone, the steps are as follows:
1. Fwrap the function foo with the following form. (Fwrapping code is described in fwrappers-and-advice.htm.)(def-fwrapper timer-wrap (&rest args) (prog2 (prof:start-sampling) (call-next-fwrapper) (prof:stop-sampling))) (fwrap 'foo 'timer-fw1 'timer-wrap)
2. Start the runtime analyzer with start-profiler with nil as the value of the keyword
:start-sampling-p. This prepares the runtime analyzer to collect data without actually beginning sampling.
3. Run the code containing calls to foo.
4. Stop data collection when done.
It should be clear why foo cannot call itself: the fwrapper code placed around foo will cause data collection to stop when the embedded call to foo returns even though the original call is still being evaluated. If a function does call itself (or calls another function which calls it back), use the following code:
(defparameter *prof-depth* 0) (def-fwrapper timer-wrap-2 (&rest args) (prog2 (progn (incf *prof-depth*) (if (= 1 *prof-depth*) (prof:start-sampling))) (call-next-fwrapper) (decf *prof-depth*) (if (zerop *prof-depth*) (prof:stop-sampling)))) (fwrap 'foo 'timer-fw2 'timer-wrap-2)
Collecting data on more than one function is more complex, because of embedded calls. Unless you are sure that the functions you are interested in never call each other, you must use global variables as flags or semaphores as above to be sure that data collection is done exactly when you want.
This section describes the interaction between the runtime analyzer and the multiprocessing capabilities of Allegro Common Lisp. The multiprocessing facility is described in multiprocessing.htm. The runtime analyzer has the ability to collect data on all processes or just a selected set.
Data collection on processes can be controlled on a process by process
basis with the function mp:profile-process-p which returns
the value of the profile-process-p flag of an argument
process object. If that flag is
nil, samples
are not collected when the process is running. Setf can be used to
change the value of that flag on a process.
The operators start-profiler and with-profiling accept the keyword argument
:except-processes (on platforms that use OS threads,
Windows only in 7.0) or
(non-OS-threads paltforms) which allows another form of control over
which processes have data collected on them. By giving a list of
processes as the value of that argument, you can prohibit the runtime
analyzer from collecting samples for the given processes. The Process
Browser in Allegro Composer (on UNIX) provides a way to set this flag
with the mouse.
The runtime-analyzer has been enhanced to separate closure
calls. start-profiler
and with-profiling have
a new keyword called
:interpret-closures. When
:interpret-closures is
nil (the
default) the closures are not saved and analyzed separately so the
behavior is the same as in earlier releases.When
true, closures are saved and analyzed as separate
entries, even though they may use the same template
A function spec called
closure has been added
(see implementation.htm for
information on function specs). This is valid whenever analyzed
data exists and identifies the closures which the runtime analyzer has
seen. The function spec is
(prof:closure n)
where n is a small integer enumerating the closures in the
data. This allows the user to grab the closure object and to do a
on it without having to know what symbol holds its
fdefinition (sometimes this is very hard).
When flat analyses and call-graphs are reported, closures are
identified by
(prof:closure n), followed by the
printed representation of the closure object itself.
Space and time analysis results can be displayed graphically if you are running Allegro Composer (using an X window) but can only be printed to the terminal if you are not. Graphical display on UNIX is described in The window interface to the runtime analyzer of the Allegro Composer User Guide. Graphical display on Windows uses the Runtime Analyzer Results dialog. The system will display space or time data automatically according to what kind of data was collected.
See also Section 6.2.1 The disassemble-profile function for how to display profile data in a disassembly.
Note that you should not collect data for additional analyses once you have started to display results on the terminal. Only do another runtime analyzer run when your analysis is complete. Note too that you can save the results with save-current-profile.
You can look at the data in two ways: a flat analysis and a call-graph. A flat analysis shows the time or space information sorted by function from largest consumer of time or space to least consumer.
The call-graph format shows information about the callers and callees of each function grouped with the information about the function.
The two functions show-call-counts and list-call-counts report call-count results. The first prints the results and the second returns them in a list. (See the definitions of the functions for information on specifying an analysis other than the current one and controlling the number of functions about which information is printed.)
The function show-flat-profile prints a flat analysis to
*standard-output* (or another stream if you desire).
There is an example of a flat analysis output below.
The function show-call-graph allows you to examine which functions have been called. Here is how it works.
For each function, F, a call-graph shows the functions that called it (parents of F) and the functions that it called (children of F). Roughly speaking, a call-graph is the flat analysis display expanded to show parents and children. The display for function F is surrounded by dashed lines. F's display shows first information about the parents of F, then information about F itself, then information about F's children. (See the example later in this section.)
The following algorithm is used to find the parents of a function F. Each sample is examined and if F appears in the control stack, the function calling F is recorded as the parent. If F appears more than once in the control stack, all the different parents (callers) are recorded, but if the same caller calls F several times in the stack, only the oldest instance is recorded. The time spent in (or the space used by) F and its descendents due to calls by a particular parent is proportional to the ratio of the number of samples where this particular parent of F was found to the total number of samples.
The algorithm for finding children is as follows. Each sample is examined and if F is in the control stack, the function it calls is recorded as its child. If F appears more than once in the stack, each different child is recorded but if the same child appears more than once, only the oldest instance is recorded. The time spent in (or the space used by) a particular child and its descendents due to calls by F is proportional to the ratio of the number of samples where this particular child of the function F was found to the number of samples.
If there is a recursive entry in a call-graph, then the local % entry for that function will have an r after it. If there is a recursive entry, then time attributed to this entry may be counted twice because of recursion. For example, if bar calls baz calls foo calls baz, then foo and bar are parents of baz, and there will be two entries for parents of baz, corresponding to only 1 clock tick (sample). So the report shows two lines (one for foo and one for bar), but the time is double counted. Similarly for a child case: bar calls foo calls bar calls baz. Then foo and baz are both children of bar (reported on 2 separate lines in the report) corresponding to only 1 sample.
The output of a flat analysis and particularly of a call-graph may
be voluminous. In order to reduce the amount of data to a manageable
amount, the default display of either a flat analysis or a call-graph
suppresses some internal functions and packages. When a package is
hidden, functions named by symbols in the package are not
displayed. The functions and packages suppressed are in the lists
*hidden-functions* and
respectively. You can suppress display of extra functions by adding
them to the list that is the value of *hidden-functions*. You can
suppress the display of extra packages (that is, of functions named by
symbols in the packages) by adding them to the list that is the value
When functions are suppressed from the display, the runtime analyzer attributes any effects these functions might have had to the function that called them. So, assuming the calling function is itself not suppressed from the display, the calling function in the runtime analyzer display can be thought of as a kind of composite, made up of itself and the suppressed function(s) it called. Functions which the runtime analyzer records as calling hidden functions are indicated in the runtime analyzer display by prepending "..." to the function name.
In a call graph all directly called undisplayed functions are attributed to the caller. Such undisplayed functions may eventually directly or indirectly call displayed functions, which will be shown in the call graph as children of the original caller. I.e., if foo calls bar calls baz, and bar is suppressed, then foo will be displayed as "... foo" and baz will be shown as a child of foo. foo gets dots because it can be thought of as a composite of foo and bar (as we explained above).
Sometimes a called function and all its descendants may be suppressed (e.g., none of them are displayable), in which case the runtime analyzer display just uses "..." to indicate that there are completely suppressed cases.
You can further control the amount of analysis you see with the variables
The variable
*hidden-space-functions* lists
functions (mostly kernel functions named with strings rather than
symbols) whose suppression makes the space analyzer output more
understandable. The functions mostly actually allocate space requested
(directly or implicitly) by other functions presumably of more
Note several things about the display control variables we have just discussed.
*hidden-functions*, and
all to nil and setting both
*significance-threshold* and
*fractional-significance-threshold* to 0.0
results in all available detail from the run being displayed.
You can always reset the value of the five display control
*significance-threshold*, and
with the function reset-profiler-display-defaults.
The function disassemble-profile will print a disassembly of a specific function indicating the estimated time spent for each instruction. Calls to other functions are identified as jumps to subroutines (using hardware specific terminology). We remind you that the time data is statistical and so the time spent in particular instructions are estimates. The less time spent in a function overall, the worse the estimate.
The runtime analyzer emits headers similar to the following (the numbers are different of course) in the show-flat-profile or show-call-graph output:
Sampling stopped after 1181 samples taken for the time profiler. Sample represents 1.2 seconds of user+system CPU time (out of a total of 5.5).
In Virtual Threads Lisps (ie non-os-threads, non-smp) sampling is done on the basis of accumulated processor time in threads known to the Allegro CL implementation. The value "1181" is the number of times a Lisp thread accumulated sufficient processor time to qualify as a sample. The value "1.2" is a total sampling time calculated by multiplying the number of samples by the sampling granularity. The value "5.5" is the total user and system time used by the Lisp process during the sampling period. When this value is the same as the total sampling time, it is not included in the message.
The total user+system time can be larger than the total sampling time when there are other non-Lisp threads running in the process and multiple processors are available. Although Lisp code can use only one thread and processor at any moment, there may be system threads and foreign threads running and accumulating time in parallel with the Lisp thread.
Note that when a Lisp thread is waiting, it accumulates no time at all and thus does not appear in the profiler output.
This section gives examples of using the runtime analyzer. These examples were run on a Sun Solaris machine running the Solaris 2.7 operating system. The results might be quite different if run on a different platform. Further, optimization settings during compilation dramatically affect the results. You should not expect to see the results included here if you try the examples on your system.
The first example uses the time runtime analyzer. We will profile the following functions, which we define and compile.
(defun fact (x) (if (= x 1) 1 (* x (fact (- x 1))))) (defun bar (x) (dotimes (i 2000) (make-array x))) (defun foo (x) (fact x) (bar x)) (compile 'fact) (compile 'foo) (compile 'bar)
First we collect the data by evaluating the following form calling with-profiling:
(prof:with-profiling (:type :time) (foo 2000))
We display the flat analysis by evaluating the following form calling show-flat-profile:
That causes the following to be printed (the results you see may be different, of course):
Sampling stopped after 52 samples taken for the time profiler. Sample represents .3 seconds of processor time (out of a total of .3) Times below 1.0% will be suppressed. % % self total self total Function Time Cum. secs secs calls ms/call ms/call name 25.0 25.0 0.1 0.1 "bignum_multiply" 19.2 44.2 0.1 0.2 "make_svector_common" 19.2 63.5 0.1 0.1 "_hmul" 9.6 73.1 0.0 0.0 "checknslot" 5.8 78.8 0.0 0.0 "valid_lispstatic" 3.8 82.7 0.0 0.1 "rootscan_others" 3.8 86.5 0.0 0.0 "ochecknslot" 3.8 90.4 0.0 0.0 "cnoteroot" 1.9 92.3 0.0 0.0 "notelispstatic" 1.9 94.2 0.0 0.0 "scan_other_item" 1.9 96.2 0.0 0.0 "do_c_funcall" 1.9 98.1 0.0 0.0 "r_verify_other_ptr_new" 1.9 100.0 0.0 0.0 "checkcslot"
The first question you might have is where are fact
and foo, and why is so little time spent in
bar? (fact, foo,
and bar are the functions we defined at the beginning
of the example.) A flat analysis displays entries ordered by the
(estimated) time a function is at the top of the stack, not on the
stack. The three functions we defined call the low-level functions
listed to do their work and so themselves spend little time at the top
of the stack, so little that it falls below the default value of
*significance-threshold* (0.01, equivalent
to 1%) for fact and foo. If you
printed this display with the value of
*significance-threshold* 0.0, you would
see fact and foo (and quite a few
more functions) listed.
We can see from the output that most of the time is spent in the Lisp runtime-system functions bignum_multiply and make_svector_common. (We know they are runtime-system functions because they are named by strings.)
Now let us look at the call graph. We display it by evaluating the form calling show-call-graph:
Here is the call graph that is printed (the results you see may be different, of course):
Time profile of sampled pc values by function, children, and parents. Total times below 1.0% will be suppressed. Parent and child times less 2.0% of the node will be suppressed. Sampling stopped after 52 samples taken for the time profiler. Sample represents .3 seconds of processor time (out of a total of .3) % % Parent self total total local Function Time Time secs % Child 0.0 100.0 0.3 0.0 ... "start" 0.3 100.0 ... "start_reborn_lisp" ----------------------------------------------------- 0.3 100.0 ... "start" 0.0 100.0 0.3 0.0 ... "start_reborn_lisp" 0.3 100.0 ... #:start-lisp-execution-0 ----------------------------------------------------- 0.3 100.0 ... "start_reborn_lisp" 0.0 100.0 0.3 0.0 ... #:start-lisp-execution-0 0.3 100.0 ... eval ----------------------------------------------------- 0.3 100.0 ... #:start-lisp-execution-0 0.0 100.0 0.3 0.0 eval 0.3 100.0 unwind-protect ----------------------------------------------------- 0.3 100.0 eval 0.0 100.0 0.3 0.0 ... unwind-protect 0.2 73.1 foo 0.1 26.9 ... "make_svector" ----------------------------------------------------- 0.2 100.0 unwind-protect 0.0 73.1 0.2 0.0 ... foo 0.2 73.7 fact 0.1 26.3 bar ----------------------------------------------------- 0.2 100.0r fact 0.2 100.0r ... foo 0.0 53.8 0.2 0.0 fact 0.2 100.0r "integer_multiply" 0.2 100.0r fact ----------------------------------------------------- 0.2 100.0 fact 0.0 53.8 0.2 0.0 "integer_multiply" 0.1 64.3 "bignum_multiply" 0.1 35.7 "_hmul" ----------------------------------------------------- 0.1 58.3 ... unwind-protect 0.1 41.7 bar 0.0 46.2 0.2 0.0 "make_svector" 0.2 100.0 "make_svector_common" ----------------------------------------------------- 0.2 100.0 "make_svector" 19.2 46.2 0.2 41.7 "make_svector_common" 0.1 58.3 "new_other" ----------------------------------------------------- 0.1 73.7 "make_svector_common" 0.0 26.3 "newbignum" 0.0 36.5 0.1 0.0 "new_other" 0.1 100.0 "other_from_new" ----------------------------------------------------- 0.1 100.0 "new_other" 0.0 36.5 0.1 0.0 "other_from_new" 0.1 100.0 "scavenge" ----------------------------------------------------- 0.1 100.0 "other_from_new" 0.0 36.5 0.1 0.0 "scavenge" 0.1 100.0 "scavenge1" ----------------------------------------------------- 0.1 100.0 "scavenge" 0.0 36.5 0.1 0.0 "scavenge1" 0.1 68.4 "scan_rootset_entries" 0.0 10.5 "rootsweep_var" 0.0 10.5 "copycatchup_cons" 0.0 5.3 "scan_activestack" 0.0 5.3 "copycatchup_other" ----------------------------------------------------- 0.1 100.0 "integer_multiply" 25.0 34.6 0.1 72.2 "bignum_multiply" 0.0 27.8 "newbignum" ----------------------------------------------------- 0.1 100.0 "scavenge1" 0.0 25.0 0.1 0.0 "scan_rootset_entries" 0.1 76.9 "rootscan_others" 0.0 15.4 "cnoteroot" 0.0 7.7 "ochecknslot" ----------------------------------------------------- 0.1 100.0 foo 0.0 19.2 0.1 0.0 bar 0.1 100.0 "make_svector" ----------------------------------------------------- 0.1 100.0 "scan_rootset_entries" 3.8 19.2 0.1 20.0 "rootscan_others" 0.0 40.0 "ochecknslot" 0.0 20.0 "notelispstatic" 0.0 10.0 "valid_lispstatic" 0.0 10.0 "checkcslot" ----------------------------------------------------- 0.1 100.0 "integer_multiply" 19.2 19.2 0.1 100.0 "_hmul" ----------------------------------------------------- 0.0 80.0 "rootscan_others" 0.0 20.0 "scan_rootset_entries" 3.8 9.6 0.0 40.0 "ochecknslot" 0.0 60.0 "checknslot" ----------------------------------------------------- 0.0 60.0 "ochecknslot" 0.0 40.0 "copycatchup_cons" 9.6 9.6 0.0 100.0 "checknslot" ----------------------------------------------------- 0.0 100.0 "bignum_multiply" 0.0 9.6 0.0 0.0 "newbignum" 0.0 100.0 "new_other" ----------------------------------------------------- 0.0 66.7 "rootsweep_var" 0.0 33.3 "copycatchup_other" 1.9 5.8 0.0 33.3 "scan_other_item" 0.0 33.3 "scan_savedstack" 0.0 33.3 "rootsweep_structure" ----------------------------------------------------- 0.0 66.7 "rootscan_others" 0.0 33.3 "rootsweep_structure" 1.9 5.8 0.0 33.3 "notelispstatic" 0.0 66.7 "valid_lispstatic" ----------------------------------------------------- 0.0 66.7 "notelispstatic" 0.0 33.3 "rootscan_others" 5.8 5.8 0.0 100.0 "valid_lispstatic" ----------------------------------------------------- 0.0 100.0 "scavenge1" 0.0 3.8 0.0 0.0 "copycatchup_cons" 0.0 100.0 "checknslot" ----------------------------------------------------- 0.0 100.0 "scavenge1" 0.0 3.8 0.0 0.0 "rootsweep_var" 0.0 100.0 "scan_other_item" ----------------------------------------------------- 0.0 100.0 "scan_rootset_entries" 3.8 3.8 0.0 100.0 "cnoteroot" ----------------------------------------------------- 0.0 50.0 "scan_activestack" 0.0 50.0 "scan_savedstack" 0.0 3.8 0.0 0.0 "scan_stackspace" 0.0 50.0 "do_c_funcall" 0.0 50.0 "verified_funcall" ----------------------------------------------------- 0.0 100.0 "scavenge1" 0.0 1.9 0.0 0.0 "copycatchup_other" 0.0 100.0 "scan_other_item" ----------------------------------------------------- 0.0 100.0 "scan_other_item" 0.0 1.9 0.0 0.0 "rootsweep_structure" 0.0 100.0 "notelispstatic" ----------------------------------------------------- 0.0 100.0 "rootscan_others" 1.9 1.9 0.0 100.0 "checkcslot" ----------------------------------------------------- 0.0 100.0 "scan_other_item" 0.0 1.9 0.0 0.0 "scan_savedstack" 0.0 100.0 "scan_stackspace" ----------------------------------------------------- 0.0 100.0 "scan_stackspace" 0.0 1.9 0.0 0.0 "verified_funcall" 0.0 100.0 "verify" ----------------------------------------------------- 0.0 100.0 "verified_funcall" 0.0 1.9 0.0 0.0 "verify" 0.0 100.0 "r_verify" ----------------------------------------------------- 0.0 100.0 "verify" 0.0 1.9 0.0 0.0 "r_verify" 0.0 100.0 "r_verify_other_ptr_new" ----------------------------------------------------- 0.0 100.0 "r_verify" 1.9 1.9 0.0 100.0 "r_verify_other_ptr_new" ----------------------------------------------------- 0.0 100.0 "scavenge1" 0.0 1.9 0.0 0.0 "scan_activestack" 0.0 100.0 "scan_stackspace" ----------------------------------------------------- 0.0 100.0 "scan_stackspace" 1.9 1.9 0.0 100.0 "do_c_funcall" -----------------------------------------------------
Look at the entry for foo (sixth down). It tells us that foo spends much more time in fact (73.7%) than it does in bar (26.3%). Looking at the entry for fact, the "r" next to the local percent numbers indicate that this function has been called recursively. (The suspension points `...' mean that hidden functions called by foo are taking the time.)
To show call-counting, we call for a time analysis again but specify
:count 100 and
:count-list (list #'fact #'bar
#'make-array), so the call to with-profiling is
(prof:with-profiling (:type :time :count 100 :count-list (list #'fact #'bar #'make-array)) (foo 2000))
Here is the flat analysis produced by show-flat-profile and the printout of show-call-counts (somewhat abbreviated).
cl-user(23): (prof:show-flat-profile) Sampling stopped after 59 samples taken for the time profiler. Sample represents .3 seconds of processor time (out of a total of .3) Times below 1.0% will be suppressed. % % self total self total Function Time Cum. secs secs calls ms/call ms/call name 20.3 20.3 0.1 0.1 "bignum_multiply" 15.3 35.6 0.0 0.0 "_hmul" 13.6 49.2 0.0 0.2 "make_svector_common" 10.2 59.3 0.0 0.0 "rootscan_others" 8.5 67.8 0.0 0.0 "cnoteroot" 6.8 74.6 0.0 0.0 "checknslot" 6.8 81.4 0.0 0.0 "copynewother" 3.4 84.7 0.0 0.0 "copycatchup_other" 3.4 88.1 0.0 0.0 "valid_lispstatic" 1.7 89.8 0.0 0.0 "scan_other_item" 1.7 91.5 0.0 0.0 "copycatchup_structure" 1.7 93.2 0.0 0.0 "copycatchup_cons" 1.7 94.9 0.0 0.0 "scan_stackspace" 1.7 96.6 0.0 0.0 "notelispstatic" 1.7 98.3 0.0 0.0 "verify" 1.7 100.0 0.0 0.0 "ioctl" cl-user(24): (prof:show-call-counts) 3999 #<Function *_2op> 2000 #<Function fact> 2000 #<Function calc-array-size> 7 #<Function arglist> 7 #<Function autoloadp> 7 #<Function generic-function-p> 7 #<Function encapsulated-basic-definition> 7 #<Function process-finalizations> 7 #<Function pop-finalization> 7 #<Function length> 7 #<Function resident-function> 7 #<Function closure-has-arglist-p> 7 #<Closure Template Function default-gc-after-hook @ #x400ccd2> 7 #<Function gc-after> 6 #<Function %eval> 3 #<Function function-information> 3 #<Function fboundp> 3 #<Closure Template Function scan-keyword @ #x4029f82> 2 #<Function variable-information> 2 #<Function get_2op> 2 #<Function %invokes> 1 #<Function foo> 1 #<Function bar> 1 #<Function instance-write-1> [...] nil cl-user(25):
Note that the call counts are by function object, not function name, that the call-counting overhead in this case is not very significant -- see the comparable result without call-counting above -- (but in other cases it might be), and that runtime-system functions (named by strings in the flat analysis) are not counted.
We end with an example of a space analysis. We use the following code, which (1) uses a lot of space and (2) uses different types of space. Consider the following functions:
(defun foo (n) (let ((array (bar n))) (dotimes (i (* n 8000)) (setf (aref array i) (cons nil nil))))) (defun bar (n) (make-array (* n 8000))) (compile 'foo) (compile 'bar)
We assume these functions have been defined and compiled within Lisp. Note that bar creates an array (which will trigger calls to new_other) and foo does a lot of consing, which will trigger calls to _page_from_new. (On some platforms, the _page_from_new calls themselves do not show up in the report.)
We call these functions in a with-profiling form:
(prof:with-profiling (:type :space) (foo 1))
Before looking at the results, we set
*hidden-functions* to nil, so we can see
what system functions are actually allocating the space.
(setf prof:*hidden-functions* nil)
We print the results with show-flat-profile.
At first, we see foo and bar but no internal functions
(the suspension points `...' mean that functions called by foo and bar
are using the space). Then we set
*hidden-space-functions* to nil and we see
the runtime-system space functions actually called.
Sampling stopped after 12 samples taken for the space profiler. Sample represents 96.0 Kbytes of space allocated (out of a total of 96.0) Mem.s below 1.0% will be suppressed. % % self total self total Function Mem. Cum. Kbyte Kbyte calls by/call by/call name 66.7 66.7 64 96 ... foo 33.3 100.0 32 32 ... bar cl-user(32): (setq prof:*hidden-space-functions* nil) nil cl-user(33): (prof:show-flat-profile) Sampling stopped after 12 samples taken for the space profiler. Sample represents 96.0 Kbytes of space allocated (out of a total of 96.0) Mem.s below 1.0% will be suppressed. % % self total self total Function Mem. Cum. Kbyte Kbyte calls by/call by/call name 66.7 66.7 64 64 "page_from_new" 33.3 100.0 32 32 "new_other" cl-user(34):
The first thing to notice is that _page_from_new and new_other use all the space. This is not surprising since they actually allocate the space. Note that _page_from_new uses 64K (8,000 conses at eight bytes per cons) and new_other uses 32K (8,000 entries in an array using four bytes each). No other functions appear since all the space is allocated by these functions.
Now we look at a call graph by calling show-call-graph.
cl-user(34): (prof:show-call-graph) Space profile of sampled pc values by function, children, and parents. Total mem.s below 1.0% will be suppressed. Parent and child mem.s less 2.0% of the node will be suppressed. Sampling stopped after 12 samples taken for the space profiler. Sample represents 96.0 Kbytes of space allocated (out of a total of 96.0) % % Parent self total total local Function Mem. Mem. Kbyte % Child 0.0 100.0 96 0.0 "start" 96 100.0 "setupstack" ----------------------------------------------------- 96 100.0 "start" 0.0 100.0 96 0.0 "setupstack" 96 100.0 "cont_setstack" ----------------------------------------------------- 96 100.0 "setupstack" 0.0 100.0 96 0.0 "cont_setstack" 96 100.0 "start_reborn_lisp" ----------------------------------------------------- 96 100.0 "cont_setstack" 0.0 100.0 96 0.0 "start_reborn_lisp" 96 100.0 excl::start-reborn-lisp ----------------------------------------------------- 96 100.0 "start_reborn_lisp" 0.0 100.0 96 0.0 excl::start-reborn-lisp 96 100.0 excl::setup-required-stack-group-bindings ----------------------------------------------------- 96 100.0 excl::start-reborn-lisp 0.0 100.0 96 0.0 excl::setup-required-stack-group-bindings 96 100.0 #:start-lisp-execution-0 ----------------------------------------------------- 96 100.0 excl::setup-required-stack-group-bindings 0.0 100.0 96 0.0 #:start-lisp-execution-0 96 100.0 excl::start-lisp-execution ----------------------------------------------------- 96 100.0 #:start-lisp-execution-0 0.0 100.0 96 0.0 excl::start-lisp-execution 96 100.0 tpl:start-interactive-top-level ----------------------------------------------------- 96 100.0 excl::start-lisp-execution 0.0 100.0 96 0.0 tpl:start-interactive-top-level 96 100.0 "apply" ----------------------------------------------------- 96 100.0 tpl:start-interactive-top-level 0.0 100.0 96 0.0 "apply" 96 100.0 tpl:top-level-read-eval-print-loop ----------------------------------------------------- 96 100.0 "apply" 0.0 100.0 96 0.0 tpl:top-level-read-eval-print-loop 96 100.0 tpl::top-level-read-eval-print-loop1 ----------------------------------------------------- 96 100.0 tpl:top-level-read-eval-print-loop 0.0 100.0 96 0.0 tpl::top-level-read-eval-print-loop1 96 100.0 excl::read-eval-print-loop ----------------------------------------------------- 96 100.0 tpl::top-level-read-eval-print-loop1 0.0 100.0 96 0.0 excl::read-eval-print-loop 96 100.0 tpl::read-eval-print-one-command ----------------------------------------------------- 96 100.0 excl::read-eval-print-loop 0.0 100.0 96 0.0 tpl::read-eval-print-one-command 96 100.0 eval ----------------------------------------------------- 96 100.0 tpl::read-eval-print-one-command 0.0 100.0 96 0.0 eval 96 100.0 unwind-protect ----------------------------------------------------- 96 100.0 eval 0.0 100.0 96 0.0 unwind-protect 96 100.0 foo ----------------------------------------------------- 96 100.0 unwind-protect 0.0 100.0 96 0.0 foo 64 66.7 "cons" 32 33.3 bar ----------------------------------------------------- 64 100.0 foo 0.0 66.7 64 0.0 "cons" 64 100.0 "cons_from_new_page" ----------------------------------------------------- 64 100.0 "cons" 0.0 66.7 64 0.0 "cons_from_new_page" 64 100.0 "conspage_from_new" ----------------------------------------------------- 64 100.0 "cons_from_new_page" 0.0 66.7 64 0.0 "conspage_from_new" 64 100.0 "page_from_new" ----------------------------------------------------- 64 100.0 "conspage_from_new" 66.7 66.7 64 100.0 "page_from_new" ----------------------------------------------------- 32 100.0 foo 0.0 33.3 32 0.0 bar 32 100.0 "make_svector" ----------------------------------------------------- 32 100.0 bar 0.0 33.3 32 0.0 "make_svector" 32 100.0 "make_svector_common" ----------------------------------------------------- 32 100.0 "make_svector" 0.0 33.3 32 0.0 "make_svector_common" 32 100.0 "new_other" ----------------------------------------------------- 32 100.0 "make_svector_common" 33.3 33.3 32 100.0 "new_other" ----------------------------------------------------- cl-user(35):
The profiler emits the following headers in the show-flat-profile or show-call-graph output:
Sampling stopped after 1181 samples taken for the time profiler. Sample represents 1.2 seconds of user+system CPU time (out of a total of 5.5).
In Virtual Threads Lisps (ie non-os-threads, non-SMP) sampling is done on the basis of accumulated processor time in threads known to the Allegro CL implementation. The value "1181" is the number of times a Lisp thread accumulated sufficient processor time to qualify as a sample. The value "1.2" is a total sampling time calculated by multiplying the number of samples by the sampling granularity. The value "5.5" is the total user and system time used by the Lisp process during the sampling period. When this value is the same as the total sampling time, it is not included in the message.
The total user+system time can be larger than the total sampling time when there are other non-Lisp threads running in the process and multiple processors are available. Although Lisp code can use only one thread and processor at any moment, there may be system threads and foreign threads running and accumulating time in parallel with the Lisp thread.
Note that when a Lisp thread is waiting, it accumulates no time at all and thus does not appear in the profiler output.
Copyright (c) 1998-2017, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 10.0 page.
Created 2017.2.15.
|Allegro CL version 10.1
Unrevised from 10.0 to 10.1.
10.0 version


text:
Monday, January 9, 2012
the little dresses
These little dress paintings by Permanent Magenta on blocks of wood were my Christmas present from me to me.
As you can see, I've sprinkled them fetchingly among my dried hydrangeas and my china, to give the place a certain lovely eccentricity.
In fact, all recent visitors to the house have admired the dresses. Why be the odd one out? Bring on the glowing praise. I have been very ill (only somewhat very ill, no need for concern) for the past week and mostly unable to read your blog but I long to do so.
51 comments:
Welcome back in 2012, soon-to-be-well Mise. I like your little dresses too, but can you include some blurred technology in the background of the next post?ReplyDelete
Mise, I hope you feel better soon....ReplyDelete
I think they are really sweet. Perhaps you should post a snap of some of your husbands things....just to mix the pot a bit.
Hello MiseReplyDelete
Those are delightful little paintings and I love how you display them.
Scottish husband certainly knows how to get your attention, one pin cushion at a time.
Have a great week.
Helen xx
They are beautiful Mise. Sorry to hear you've been under the weather.ReplyDelete
Husband and I have much the same relationship with regards to football and hockey. I feign interest but can't seem to keep myself from yawning.
Hope you are back to your old self very soon.
Lovely, pretty frocks Mise. Sorry to hear you're unwell...I didn't think that happened in Blogtopia...but I will send you a posy of virtual get-well flowers to cheer you up. xxReplyDelete
Ahh...I think what you are is fashionably late - and really is that not preferable to being one of the masses who arrive on time....?ReplyDelete
I do hope you are on the mend, and able to enjoy those really rather pretty dresses perched amongst the dried hydrangeas and china.
Somewhat very ill is bad enough. I shall therefore be lavish in my praise of the little dresses, spectacular I think or maybe it is the way you display them, there you are starting to feel better already aren't you. Good to have you back xReplyDelete
My get well gift to you is Miss Flora McFlimsey by Mariana. She wears dresses just like those. Christmas Eve and Easter Bonnet are my favourites.ReplyDelete
That Tom's a bit cheeky isn't he? Sorry to hear you've not been feeling you're normal, sparkly self. The little dresses are, of course, divine. They make a lovely vignette when placed next to such lovely elements as hydrangeas and fine china.ReplyDelete
I can't help but wonder if you will be twitching your fingers to make dresses based on these for your beautiful daughters. Only they could do them justice.
Sending you some virtual chicken and matzo ball soup. Meredy xo
p.s. it just hasn't been the same without you:)
Welcome back, Mise! I'm sure there must be a prize for such a thing. If not, something is amiss in Blogtopia. Those are very sweet paintings by Permanent Magenta. Adorable! I hope they chase away the last vestiges of your illness.ReplyDelete
Happy New Year!ReplyDelete
Gadgets are far too unseemly for Blogtopia, you do well to avoid them.
You probably win the prize but I suspect the jury is still deliberating! Love your pretty and quirky art, and hope like Hades you're well again soon :)ReplyDelete
Love these adorable little dresses...glad you could gift yourself with them, especially if you've been So-so-Sick!!
Wishing you lots of Get Well Wishes.
There's no gift like a self gift, for who knows one better than ones' self?ReplyDelete
Is that English?
The dresses are adorable, you are as deliciously witty as ever and the gang's all here.
Looks like a good if late start to 2012.
xo Jane
Shall I make some soup? Perhaps a little broth to cure what ails you?ReplyDelete
The Chef was also ill for a time over the festive period and it only slowed us down to a nice fine crawl of lazy lumbering about with less rambunctious kids.
The little pieces of wood with dresses painted upon them are gorgeous, made only more gorgeous by the perfect placement, of course.
Welcome back Mise. You were hugely missed in Blogtopia.
Such pretty cheerful dresses/art. Welcome back!ReplyDelete
Adore your little dresses and the way they are artfully placed. Feel better soon! It is good of you to humor your hubby!ReplyDelete
Art by Karena
They remind me of the paper doll wardrobes I used to make endlessly as a girl. They just need little tabs on the shoulders.ReplyDelete
Here's to feeling somewhat very much better soon.
Dear problem page,ReplyDelete
I'm so glad you're back- I need to share with you my horror at Spurs Fan buying a cushion. Alone and Unaccompanied. Without Supervision. Now it's in the living room. It's got an Olympics logo. What am I to do?
p.s. Your art work is simply perfect. Good self gifting.
Oh how sweet the dresses are.... they would look lovely on the wall in our granddaughters room. We are working on the rooms for the grandchildren so when they visit they have wonderful rooms to call their own. Without them being so childlike that a adult would not stay there.ReplyDelete
the dresses are the prize and a lovely recompense to that dreaded lurgi , hope your feeling much betterReplyDelete
I am so glad that even in illness you remembered to get yourself a little pretty something for Christmas. It was the least you could do. I am also so glad that you have reminded me that I didn't! I wonder if Permanent Magenta makes plus size dresses for blockheads ...ReplyDelete
Dear Mise,ReplyDelete
I always think that it's a good idea to have a present from me to me at Christmas.....our son bought himself a present from him to him which was some piece of sound equipment or somesuch which will enhance the music of the London fireworks next year, if he does it again.
Wishing you and your lovely family a Happy, Healthy and Peaceful new Year filled with many magical moments and pinkness !! Much love. XXXX
- AnonymousJanuary 10, 2012 at 7:08 PM
I hope you are now fully recovered and able to entertain us again with your thoughtful and insightful posts ...... with or without blurred objects in the background (in one of those little coincidences in life, I have a photo with an out-of-focus background in today's post!!)ReplyDelete
I love the little dresses!!
Welcome back Mise and Happy New Year!ReplyDelete
Everything is a bit slower during this time of the year so no worries...It is indeed fashionable to be a tad late! Very understandable particularly when you are feeling not up to par...Hang in there...Spring will be here before we know it!
Sorry to hear that you have been unwell, but welcome back. Did anyone make soup for you?ReplyDelete
Those dress pictures are just divine, and placed so perfectly, like little rays of sunshine.ReplyDelete
I hope you're feeling much better. If you replace technology with fishing, you have written the gist of conversations in my home :-)
Not sure about the prize for last back, but you definitely get the prize for best dressed, or do I mean dressed most fetchingly ;)ReplyDelete
Hope you're now somewhat nearly better, if not altogether better and back perusing gadgetry in pursuit of cushions :D
Lucille, thank you, I hadn't heard of Miss Flora McFlimsey. I must have been a teen when the books were published, and unimpressed by charm.ReplyDelete
Flwrjane, that is surely English.
Speccy, would it work to buy (or MAKE?) a nice linen cushion cover for it, with crochet lace edging, and tell Spurs Fan that it needs to be covered so as to protect it from dust?
Mise you are much too young to remember Miss F McF the first time round she was published. Not alive even!ReplyDelete
quite quite gorgeaous!!ReplyDelete
This comment has been removed by the author.ReplyDelete
Getting purtyer every day... Look at that photo of you could you br any more adorable? I think not. Thanks Mise for your usual cynical spin and wickedly clever turn on things... All the very best for you and your in 2012ReplyDelete
Bloggersphere was not the same without you, Mise!ReplyDelete
I hope you are feeling better? I don't know about you but whe I am ailing I feel so sorry for myself! I suspect I am unbearable to be near...
Those party frocks are delicious. I particularly hanker after the first one.
Ooh really like those paintings Mise, very nice! Happy New Year btw! :-)ReplyDelete
Mise..I love presents from me to me! A woman after my own heart!!I always have a present like that under the tree at Christmas. This year it was a silver leather notebook!!! I love the dresses. SineadReplyDelete
They are charming. Sensible not to repeat the blue background for the one with the blue dress.ReplyDelete
I do hope you're feeling bright and sunny soon.
Too funny. Firstly welcome back and hope you are fully recovered from the illness. Totally agree on giving presents to yourself "To Me, from Me" is something I like to see on gift tags particularly. Your gifts to yourself and really lovely.And you are so right - never show too much intersest in technical gadgets, EVER. There's no coming back from that slipperly slope. Happy New Year. xReplyDelete
These paintings are delightful! I'd love to have these around my house :-)ReplyDelete
(and there should be a prize for last back!)
Sorry to hear of your ill health, good to see you on fine form again.ReplyDelete
Hope you are feeling better Mise.ReplyDelete
The dresses are very pretty.
Just got back from my summer holiday so I'm catching up on my favourite blogs
Happy New Year to you & all the best for 2012!
Sorry to hear you've been laid low Sweetie - hope Scottish Husband has been tending to your every whim. Do love those prints, better put a sticker on them so the daughters don't fight over them as they're moving you into your room at The Twilight Home For The Bewildered in 40 years time. One must be prepared for these things.ReplyDelete
Millie xx
Hello Mise:ReplyDelete
We have yet to make a real comeback, so the prize must be ours [what is the prize exactly?]but en passant as we are we had to say how much joy your little party frocks have given us.What exquisite miniature scenes of delight bound, we are sure to make anyone smile who glances in their direction.
As this is the year of the Diamond Jubilee, we think that there must be lots of party frocks and tiaras all round. And, as always, dear Mise, you set the trend. Where your little dresses lead, we mere mortals must follow.
Much joy and prosperity to the Mise household in 2012!!
Those sweet dresses have got to be helping in the healing process...how could they not?! They must bring loads of smiles, and that's always good for the immune system.ReplyDelete
Wishing you and your loved ones everything good and great in the New Year Mise!!
Health & Happiness...
xo J~
(I too try to avoid with all my might those special internet 'call-overs', though I don't always make the getaway! I do greatly admire your ability and fortitude at foot putting down very much!)
Sorry Mise, I somehow missed your entrance back on the blogging stage. Sorry you've been under the weather, at least you've got that out of the way for 2012. Love your little paintings, they look very happy.ReplyDelete
They're sooooooo sweet Mise - I remember wearing little party dresses just like those!!!ReplyDelete
Blurred vision must be a common female complaint where techno is concerned - I've no mind for such things at all.
Just give me the fru fru and I'm as happy as a bird!!
Wishing you all the New Year Blessings you're dreaming of - and much much more - Mise darling!
Live, laugh, love and "be happy and healthy" in 2012!
Sorry you have been ill, I hope you are feeling better. Those little dresses are enough to cheer anyone up, the are delightful. Love Linda xReplyDelete
Last night my Polish husband tried to get me to look up from my Very Important Braided Necklace Project to see the replay of football players. There was nothing blurry in the background except hundreds of people who evidently care about football.ReplyDelete
Your paintings are lovely. I will get up and look at them anytime.
they are SO cute.ReplyDelete
cheers to a happy new year. !!
Oh oh, Look! ME! I came for my dose of an orderly, stylish world where sense and sensibility are in perfect balance, and look! I am so pleased that you like the little paintings but-sorry-more pleased that Scottish husband does! Wow. I better get cracking on some vintage clockworks...ReplyDelete
Just found you. You make me laugh. Over and over again. Most likely you will never see this comment, it is so long past the posting, but those dresses reminded me of a book I read as a child and read to my children as well. I thought your pink pixie might like it too. The Hundred Dresses by Eleanor Estes. Have you heard of it before this?ReplyDelete

subset: commoncrawl


text:
Saturday, April 9, 2011
My New Web Site
The site will be home-base for my genealogy activities, including my speaking engagements (more to come, I hope!), a genealogy toolbox (my most-used online resources), links to my blogs and copies of my free eBooks (more of those to come as well!).
My site is in its infancy as I continue to tweak things. The site is hosted on Weebly.com. I've created many web sites over the years and this is, by far, the easiest to do! Everything is drag and drop and you don't need to know any coding! I highly recommend the site if you want a web presence for your genealogy hobby.
I'm off to Omaha this morning for the Greater Omaha Genealogical Society spring conference. I'll try to tweet or post some messages on Facebook throughout the day.
13 comments:
Took a peek at the new site and it looks great Susan! I've kept Weebly bookmarked ever since Jenny of Jenny-ology posted about her toolbox being there. Congrats on a good job!ReplyDelete
Thanks for the tip on Weebly....I am off to have a look at your new site.ReplyDelete
Good luck with your new website and many thanks for the recommendation for Weebly - I need something simple!ReplyDelete
Hi Susan! Your website looks great! The only suggestion I would make is that you go back and make all of your links "open in a new tab" instead of allowing them to navigate away from your site. I know that once I start looking at a website, one thing leads to another and I have to click "back" a gajillion times to get back to where I started. All in all, very nicely done!ReplyDelete
Good luck with the new website...ReplyDelete
You are such a wiz at getting the site up and running. Technology is your thing, and it's nice to have you to learn from.ReplyDelete
I love your new website! I have been using my blog sort of as a website, but probably need to have a separate website, so I'll have to take a look at Weebly. Seeing your Genealogy Toolbox inspires me to set up a separate page for one on my blog, which can be migrated to a website later.ReplyDelete
Thanks, everyone, for taking time to take a look. I don't have that much time invested in it yet - just wanted to try out Weebly after Thomas talked about it in the webinar.ReplyDelete
Jenny - thanks for the reminder on the "open in a new window." I had just done a cut-and-paste from the links on my blog. So THANKS for reminding to get that done! As I said, tweaking, tweaking ....!
Really, I appreciate you all indulging me by taking a look and offering your comments.
the new site is great Susan, Congrats! I have been wanting to start one myself, you have inspired me, thanks!ReplyDelete
It looks great!ReplyDelete
Great looking site! I love that you put your Genealogy Tool Kit on there.ReplyDelete
Thanks again to everyone who took a look and left comments. I've definitely used your suggestions!ReplyDelete
Wonderful family and cemetery pictures, Susan! The site really illustrates the breadth of your work.ReplyDelete


text:
© ® The Nobel Foundation
IPCC honoured with the 2007 Nobel Peace Prize
Phone: +41-22-730-8208/84 e-mail:
The United Nations Convention to Combat Desertification (UNCCD) defines desertification
as "land degradation in arid, semi-arid, and dry subhumid areas resulting
from various factors, including climatic variations and human activities"
(United Nations, 1994). Furthermore, UNCCD defines land degradation as a "reduction
or loss, in arid, semi-arid, and dry subhumid areas, of the biological or economic
productivity and complexity of rain-fed cropland, irrigated cropland, or range,
pasture, forest, and woodlands resulting from land uses or from a process or
combination of processes, including processes arising from human activities
and habitation patterns, such as: (i) soil erosion caused by wind and/or water;
(ii) deterioration of the physical, chemical, and biological or economic properties
of soil; and (iii) long-term loss of natural vegetation."
Arid, semi-arid, and dry subhumid areas include those lands where the ratio
of precipitation to potential evaporation (PET) ranges from 0.05 to 0.65. In
Africa, these conditions cover 13 million km2 (see Figure
10-9), or 43% of the continent's land areaon which 270 million
people, or 40% of the continent's population, live (UNDP, 1997). Areas
particularly at risk include the Sahela 3.5 million km2 band
of semi-arid lands stretching along the southern margin of the Sahara Desertand
some nations that consist entirely of drylands (e.g., Botswana and Eritrea).
The death of as many as 250,000 people in the Sahel drought of 1968-1973
(UNCOD, 1977) demonstrated the tragic human toll of desertification.
Desertification in Africa has reduced by 25% the potential
vegetative productivity of more than 7 million km2, or one-quarter
of the continent's land area (UNEP, 1997). Desertification consists more
of degradation of the productive capacity of patches well outside open-sand
deserts rather than the inexorable encroachment of open sand onto greenlands.
Arid lands can respond quickly to seasonal fluctuations. Indeed, analysis of
1980-1990 NDVI data to track the limit of vegetative growth along the Sahara-Sahel
margin revealed wide fluctuations: The 1990 limit of vegetative growth lay 130
km south of its 1980 position (Tucker et al., 1991).
Unfortunately, the relative importance of climatic (see Section
10.2.6.3) and anthropogenic (see Section 10.2.6.2)
factors in causing desertification remains unresolved. Some scientists have
judged that anthropogenic factors outweigh climatic factors (Depierre and Gillet,
1971; Lamprey, 1975; Le Houérou, 1989; Westing, 1994), though others
maintain that extended droughts remain the key factor (Mortimore, 1989; Hoffman
and Cowling, 1990; Tucker et al., 1991; Dodd, 1994). CO2-induced
climate change and desertification remain inextricably linked because of feedbacks
between land degradation and precipitation (see Section
Unsustainable agricultural practices, overgrazing, and deforestation constitute
the major anthropogenic factors among the forces that drive desertification.
Unsustainable agricultural practices include short rotation of export crops,
undisciplined use of fire, and removal of protective crop residues. Overgrazing
consists of running livestock at higher densities or shorter rotations than
an ecosystem sustainably can support. Finally, deforestation consists of permanent
clearing of closed-canopy forests and cutting of single trees outside forests.
Forest area in Africa decreased by approximately 37,000 km2 yr-1
from 1990 to 1995 (FAO, 1999a). UNEP (1997) attributes two-thirds of the area
already desertified in Africa to overgrazing and the remaining third to unsustainable
agricultural and forestry practices.
Population growth ultimately can drive desertification if it intensifies agrosylvopastoral
exploitation or if it increases the land area subjected to unsustainable agricultural
practices, overgrazing, or deforestation. The total population of Africa grew
from 220 million in 1950 to 750 million in 1998a rate of 2.5% yr-1
(United Nations, 1999). Increasing food, wood, and forage needs accompanying
this growth place an inordinate burden on the region's natural resources.
Table of contents
IPCC Homepage


text:
Photo Booth US offers the largest selection of photo booths for rent in California. We have it all: from the latest digital models to our restored original vintage black and white booths from the 50s. Our contemporary style features the latest photo booths with digital technology; our vintage photo booths are refurbished and upgraded with the latest digital cameras, featuring the original 4-pose photo strip.
Having a classic photo booth at your event offers you and your guests guaranteed fun and having those special, unforgettable moments captured forever with a photo.
Our vintage photo booths are fun for all ages and the photos make great party favors that your guests will be sure to remember. You can conveniently customize each photo to either black and white or color; from single pose to four sequence poses; to your chosen background; and then our photo booth will do the rest!
Our traditional photo booths have been seen at events throughout California: at weddings, high school grad nights, proms, reunions, bar/bat mitzvahs, corporate parties, trade shows, conventions and other fun events. Modern or vintage photo booth style offers the customer unique service and style to suite the needs of the event.
Photo Booth US provides service in California including San Francisco Bay Area, San Francisco, Oakland, San Jose, Monterey, Napa, Wine Country, Stockton, Sacramento, Central Valley, Lake Tahoe and other communities throughout California.
Please call us with any requests or comments. Our friendly staff at Photo Booth US will be glad to answer any of your questions. Thank you again for visiting Photo Booth US web site.


text:
Log In needed 2015 Ford Escape SE - Locally OwnedReport Ad
Price: $27,996
Stock Number: 166701
Interior Colour: Black
Engine: 4 Cylinder Engine
Factory warranty remaining. Comes fully loaded with options such as leather heated seats, navigation, moon roof, power liftgate and much much more. The Steve Marshall Ford Lincoln Sales Team is complete with knowledgeable and friendly personnel available to make sure your buying experience is both informative and exciting. The Service and Parts Teams use licensed, well trained technicians and state-of-the art equipment to ensure all the preowned vehicles are put through a tough 150++ point inspection to make certain the car, truck or SUV is mechanically sound and any repairs completed to make it safe to drive. Exceptional service from people who care. We create the best place to work by taking care of one another while having fun. We nurture this type of atmosphere so that it becomes second nature to take care of our guests beyond their expectations. Coming to a dealership shouldnt be stressful. We believe we can add automotive value and build relationships that last a life time. We want you to love our team and our dealership. When choosing where to buy your next vehicle, remember the values of our Steve Marshall Ford Lincoln Team : Ownership, Accountability, Responsibility. O.A.R.DL# 10401
Ad #28361661
PostedOctober 19, 2016
ExpiryNovember 18, 2016
DetailsCommercial Seller
CategoryAutos › Cars › SUVs
EditMy ad
PhoneNot available
|Last hour
|Last 24 hours


text:
Vaccines Gear Guide
Vaccines Gear Guide
He can also squeeze a pretty tasty tone from the new Roland GX amps. Learn how to play Bad Mood by the Vaccines and spot his swanky new Farida guitar.
Boss ME-70
Electro Harmonix Holy Grail Nano
Electro Harmonix POG 2
Boss TU-3 Tuner
Justin Speaks To Roland
Pete's Cymbal Setup
Pete says "In my experience, Zildjian are the best company to provide not only the cymbals of the best quality, but also the most variety of sounds to ensure I find the right cymbal for the job."
Pete's set-up is (left to right):
15" New Beat HiHats
18" K Dark Crash
22" K Custom Medium Ride


text:
Heritage 2/2018:3343, $1,920
LS Brown Collection
High Desert Collection (PCGS Set Registry)
Ron Guth: The 1940-S Nickel is a very common coin with hundreds of examples certified by PCGS at the MS-65 and MS-66 levels. Superb examples, on the other hand, are extremely rare. A high percentage of the certified Mint State survivors exhibit full steps, indicating good striking characteristics for this date/mintmark combination.
The finest examples certified by PCGS (as of January 2012) include a single MS-67 (non Full Steps) and 8 MS-67 Full Steps.
© 1999-2018 Collectors Universe NASDAQ: CLCT


text:
A Different Life
View video
Career timeline for psychiatry
View video
Job Board
See the latest jobs
See Publications
Order our leaflets
Place an order
In this 30-minute film Dr Henrietta
Bowden-Jones, Founder and Director of the National Problem Gambling
Clinic, talks to Owen Baily about his past experiences and problems
with gambling.
This leaflet is for:
In this leaflet you can find out about:
This is defined as gambling that disrupts or damages personal,
family or recreational pursuits.
Many of us like to place the odd bet or play
the lottery - but it's only a problem for about 9 people in
every 1000. However, a further 70 people out of every 1000 gamble
at risky levels that can become a problem in the future.
Across the world it seems to be common:
Answer 'yes' or
'no' to each of these 10 questions:
If you have answered 'yes'
You may gamble:
Or, you may have:
Problem gamblers are more likely than other people to experience
the following harms:
The first thing is to decide to get help
- you can then work out whether you are ready to stop or just
want to control your gambling better. Many people just want to
control their gambling, but then decide to stop completely.
Although there is no substitute for professional help, here are
some simple and practical measures to reduce gambling:
1. Limit the amount of money you spend
2. Reduce the amount of time and days that you
3. Don't view gambling as a way of making
4. Spend time doing other activities
All of the following provide free support
to help you cut down or stop gambling:
Research has shown that CBT can:
How does CBT work?
If you are a problem gambler, you will think differently from other
people about your betting. You will tend to believe that:
CBT is given in around 10 one-hour
sessions. The sessions focus on these ways of thinking, but
also on how you feel and behave when you want to bet or when you
are gambling. CBT helps you to work out more helpful ways of
thinking and behaving. A diary helps you to keep track of your
improvement. In the months following treatment, follow-up CBT
sessions in a group seem to help people stay away from gambling
How does CBT compare with other
treatments? We don't know yet - there have not been
enough large studies to be clear about this.
This is an approach which assumes that a
dependence on drink or gambling is a disease, and that the best
people to support you are those who have had similar experiences.
Regular meetings are held in which people can share the problems
they have had and the ways in which they have overcome them. They
also have a 'buddy' system, where each member has another member
whom they can contact if they feel that they are about to drink or
gamble again. The 12 Step Fellowship, Gamblers Anonymous, offers
meetings throughout the UK and many problem gamblers find these
meetings helpful. You may also need practical help:
No medication is licensed for
the treatment of problem gambling in the UK, but antidepressants can be
prescribed to help with low mood.
About a third of problem gamblers
will recover on their own, without treatment, and about 2 in 3
will continue to have problems, which tend to get worse.
Don't wait until life does not seem worth
living. If you get help, you will feel better and avoid many
problems with your life and health.
You can refer yourself by calling or emailing
the contacts below:
Road, London SW6 1NH; Tel: 020 7381 7722;
email: email@example.com.
Gamcare: Helpline:
0808 80 20 133
Living with a problem gambler
leaflet was produced by the RCPsych Public Education Editorial
Series Editor: Dr Philip Timms
Original Authors:
Expert review: Faculty of Addictions' Users
and Carers Group
Illustration by Lo Cole: www.locole.co.uk
This leaflet reflects the best available evidence available at
the time of writing.
Charity registration number (England and Wales) 228636 and in
Scotland SC038369.
Was this information useful? We'd love your feedback
If you don't have an account please
Click here to Register


text:
Hamilton-based enterprise quality control software company Sparta Systems announced Wednesday it has appointed Steven Ford as chief financial officer. In addition to his finance responsibilities, Ford also will manage legal, human resources, customer support and operations.
According to the announcement, prior to his role at Sparta Systems, Ford was chief financial officer at TradeCard, a global cloud computing firm with a presence in more than 90 countries. Previous to TradeCard, Ford was the executive vice president and chief financial officer for Innodata Isogen, a public company, where he helped to drive operational efficiencies leading to increased revenue and greater market capitalization.


text:
End Call: While in Wrapup state the other state buttons are not enabled to allow transition
From DocWiki
|Problem Summary
|While in Wrapup state, neither the Available/Ready nor the NotReady buttons are enabled to allow transition from the Wrapup state (IPCC only).
|Error Message
|Possible Cause
|This could happen if the application is waiting for Wrapup data before letting you leave the Wrapup state as will be the case if your Wrapup mode for this call is REQUIRED_WITH_DATA.
|Recommended Action
|Enter data via the Wrapup dialog, which should pop up after you hang up the call. If that is not available, you will have to wait until the configured "Wrapup Time" (set in the ICM Configuration Manager's Agent Desk Settings) has passed, after which you will automatically go to the Available/Ready or NotReady state.
|Release 7.5(x)
|Associated CDETS #


text:
Message Board
Carmen Martin Gaite Message Board
Talk about the novels, new and used books that Gaite has written!
Author Gaite's Book Reviews
The Back Room
A writer, based on the author herself, has no motivation nor inspiration lately. She receives an unexpected visit from a man in black, who claims to be a journalist with whom she had arranged an interview. He is a very ambiguous and disturbing character, whose name is never revealed and about whom we learn too little. They both engage in a lasting conversation which dominates the novel and submerges the protagonist into her likes and dislikes, but mos...


text:
Tuesday, September 30, 2008
Your 2008 AL Central Champs: Chicago White Sox
It's 10:30 now here in Chicago, and I must have seen the A.J. Pierzynski tag on Michael Cuddyer at least 25 times by now, and I plan on watching it at least 25 more times tonight.
What a prick.
It almost seems like you can see him say to Cuddyer "you're out" after showing him the ball. And I fucking love it.
You would be hard pressed to find a player more hated by every fan base in the Amercian League and here on the north side of town then Anthony John Pierzynski. AROD? Close, but no cigar. And it's the little things that he does that make me as a White Sox fan think of him as a complete prick but at the same time love him for what he does.
With Cuddyer at third, Danks threw a pitch in the dirt that A.J. lost track of for a mere second, but had the baseball I.Q. to try to fake Cuddyer out as though he had lost the ball. It's the little things that A.J. has done, from running to first after the "dropped" third strike in game 2 of the ALCS, and more recently him drawing the interference call against the Rays whom they will face Thursday in Tampa.
Looking back on the season, there's three things have have really stuck out as to how they got to the postseason:
- The maturation of Danks and Floyd
- The emergence of Quentin and Ramirez
- The veteran leadership of Thome and Konerko
First: Danks and Floyd. I'm not going to reiterate how they came over, because if you're a sox fan, and you're reading this blog...you should know. If you don't; put your cubs hat back on. Danks was shut down in September last year for scuffling so bad, and when the Sox traded Garcia to Floyd, you'd of thought they'd were having parades in the streets of Philly to get rid of Gavin. That just goes to show you this season what Don Cooper means to this staff. To turn Garcia, Garland, Contreras, Danks, Floyd all into pitchers whom you would rather not face when they're on.
Second: Quentin and Ramirez. Both of these guys were nowhere near the discussion of being apart of this team heading into the season. So what did they did do once given the chance to play everyday? Combine for 58 home runs and over 175 RBI's. Before Quentin broke his wrist, he was the leading MVP candidate for the AL, and while Longoria in my mind deserves the AL ROY, the Cuban Missile made it very close in the long run. Without these two, the end up tied with the Royals for 4th place if not worse.
Third: Thome and Konerko: Let's face it: they didn't do a whole lot when you look at he broad spectrum. HOWEVER, they made it happen when they needed to. Konerko started off decent enough until he hurt his hand and then his oblique, which made him powerless for a good two months. After he got back, he struggled mightly until the end of August when he helped J.D. get the team the AL Central lead up 2 and a half games. Thome? You saw what happened tonight.
This was a team that nobody predicted would do shit, and the same goes to the Minnesota Twins, who in my opinion should have been the winner of the division.
The coin flip rule is complete horse shit. The Twins were 10-8 versus the Sox, and this game should have been played in the house of horrors that is the Metrodome. I sure as shit will not complain, but if the circumstances were flipped, this is what I would bitching about.
Twins fans, if you're pissed, I completely understand.
That said: HAHAHAHAHAHAHAHAHAHAHA!!!!
I'm very excited for the playoffs starting on Thursday in another house of horrors that is the Trop, but at the same time; this is an awesome game to watch.
One of my friends texted me after the 5th inning ended that this was the most exciting game he had ever seen (sarcasm alert for retards). I texted back that it was very similar to game 4 of the '05 series that didn't have a run scored until the top of the 8th thanks to a J.D. single that scored Willie Harris.
Although the go ahead run was a 461-ft blast to center instead of a single to center, the end result remained the same with similar spectacular plays in the 9th.
Instead of Juan Uribe diving into the stands to record the second out of the inning, it was Brian Anderson making a great diving catch to end the game, capping the division that seemed so far gone after the 3 game sweep less then a week before.
I have no idea what Ozzie's pitching match-ups for the season will be, but here's my inebriated suggestion:
Game 1: Vazquez
Game 2: Buehrle
Game 3: Floyd
Game 4: Danks
Game 5: Buehrle
Vazquez has been pitching like a fuckface recently, but he has the freshest arm, and if you lose game 1, not a big deal. You'll still have your more consistent 3 ahead of him pitching the rest of the way. I would also have no problem with pitching Clayton Richard (aka Clay Dick) in game 1. Richard seems more likely to have a good 5 innings then Vazquez would given what we've seen lately.
For the first time in 102 years, the Cubs and White Sox will be participating in October, and while I don't really like the Cubs, I'll be watching both teams very closely. Part of me hates the Cubs, and the other part doesn't have a problem with them because so many of my friends are die hard Cubs fans.
I want my friends to get the feeling of winning a World Series, and the other part wants them to go to fall classic only to fall on their fucking face. It's a very fine line with the Cubs. But no matter what happens in the long run: this has been a very special summer in Chicago for the entire city.
May the best team win...and may the White Sox prevail.
14 comments:
You Chicago pussies. Good luck in the playoffs and enjoy your one year out of 20 that you make the playoffs. Your team is weak and will get smoked by the Rays. That was a good play by Gay J Pierzynski, too bad he's your best player.
- October 1, 2008 at 2:28 PM
- WuTangIsForThe Children said...
- The veteran leadership of Thome and Konerko
JD gets no love?
- October 3, 2008 at 7:10 PM
- Laser Hair Removal In Chicago said...
I wish I was at their games.. Seeing it on the Tv set wasnt really as exciting..
Being there with adrenaline fully pumped into your vains really tells a lot about how much love we really have for the game. I guess its in our hearts to feel the players pain, the players game, and as a fan hope to make it to fame.. :)
- November 25, 2008 at 3:13 PM
- May 27, 2009 at 2:06 AM
- May 27, 2009 at 2:06 AM
- Jason said...
You have a great sports blog. This is my first visit but I'm impressed. I have two sports blogs myself and I'd like to exchange links with you to spread some traffic around. Let me know if this is cool.
- November 14, 2009 at 11:37 PM
- オテモヤン said...
- February 4, 2010 at 5:31 PM
行萬里路勝讀萬卷書 ^^ 羨慕你哦!..................................................
- February 19, 2010 at 7:53 PM
- aa said...
- February 26, 2010 at 3:10 PM
- buchty said...
a professional manufacturing company.
plastic mold
rapid prototype
- March 5, 2010 at 3:40 AM
- buchty said...
a professional manufacturing company.
plastic mold
rapid prototype
- March 5, 2010 at 3:40 AM
A man who dares to atrophy bromide hour of time has not discovered the value of life.
- May 16, 2010 at 1:53 PM
We should be painstaking and discriminating in all the par'nesis we give. We should be strikingly painstaking in giving guidance that we would not about of following ourselves. Most of all, we ought to escape giving advise which we don't mind when it damages those who depreciate us at our word.
- May 25, 2010 at 8:10 AM
To be a noble human being is to have a make of openness to the in the seventh heaven, an ability to group aleatory things beyond your own control, that can govern you to be shattered in hugely outermost circumstances for which you were not to blame. That says something very important thither the get of the righteous compulsion: that it is based on a corporation in the up in the air and on a willingness to be exposed; it's based on being more like a spy than like a jewel, something somewhat tenuous, but whose acutely special handsomeness is inseparable from that fragility.
- June 23, 2010 at 9:08 AM


text:
Previous: [Last Call] Bargain, FINAL HOURS for VIP savings: extra 10% + 30% off
It's the holiday season, flash the below screen grabs to get 15% off one merchandise item, $1 off your favourite food item, $1 off your favourite drink and 3 for 2 drinks at Starbucks! Valid till 25 December 2018.
Here's your FREEdom to fly! 100,000 FREE Jetstar seats to over 20 destinations for travel on or after 2 Jan 2019 are now on SALE! Hurry and book now at jetstar.com/sg/en/deals/free-seats!
From 11-18 Nov, get a free Red Hot Spicy Peppers Burger when you grab the same burger ala carte or as an extra value meal!
Simply flash this coupon from your phone or the cut-out from this Sunday's Sunday Times to redeem this exclusive one-for-one offer. Hurry down to McDonald's restaurants after breakfast hours! Deal's while stocks last.


text:
IN STOCK NOW! TL Audio 5051 Mono Tube Voice Processor
The TL Audio 5051 Mono Tube Voice Processor provides the perfect front end for any system by offering a combined preamp, compressor, equaliser and noise gate all in one easy-to-use package, now with an optional digital output.
For news & offers: Join our mailing list Add us on Facebook Follow us on Twitter
The single channel voice processor format has become the accepted way of getting the most out of any sound source, and with the TL Audio 5051 if you'll get the best possible quality in your recordings.
The TL Audio 5051 compressor section is identical to that of the 5021 and includes hard/soft knee modes, and the four band equaliser section is modelled on that of the legendary TL Audio EQ-1 - yielding superb results instantly, with an improved optical gate for removing unwanted source noise. So whatever your source, let the 5051 unlock its true potential!
The 5051 features no less than six valve stages, supplied by three twin triode ECC83/12AX7A valves running from a stabilised 150V DC power supply. One valve stage is located in the preamp, one in the compressor gain control circuit, and four in the equaliser section.
Duffy onstage, using a TL Audio 5051 Valve Processor
The TL Audio 5051 is highly regarded in the music world, and several of the top studios and artists rely on it because of its warm tone. Singer sensation Duffy, is one of such artists. "She needed something to warm up her vocals and give a top sound, plus Duffy is VERY particular about her on stage sound. It needed to be warm, smooth and rich all at the same time, TL Audio seemed the obvious choice for me!" said Duffy's Monitor Engineer, Nikoma.
Now it's your turn to discover just how good the TL Audio 5051 is!
For more info, visit the TL Audio 5051 Mono Tube Voice Processor product page at Dolphin.
"I use the 5051 mainly for mono signals such as a lead vocal, bass lines and of course drums. The warmth and good presence that this machine generates is second to none. The style of music that I do requires edge and this is what I like about the 5051 because it's almost impossible for it to distort your music. Whether it's the EQ, compressor or the gate or all at the same time you can push it to a limit where other machines cant handle it" Curtis Lynch Jnr
"The 5051 has been a pleasure to work with. It blows away the mic amps on even the most expensive Midas desks and the compressor and EQ make it so much easier to get a natural sound for Kim's voice" Sean Vincent - Kim Wilde
"It really does have a sound and character that I find is missing in a lot of current audio products." Edwyn Collins (Orange Juice, solo and producer of bands such as The Cribs)
"The difference when you plug it in is like night and day." TW Watkins - Wyclef Jean
"The pre-amp on the 5051 was quiet and clean, both on microphone and instrument sources, and seemed to be of a higher quality than budget desk pre-amps. Turning up the input until the drive LED lit up gave a subtle difference to the sound, which adds to the flexibility of the unit....the compressor worked well while recording vocals, smoothing the level out nicely, being well behaved and polite and doing its job without fuss. There are many units of this type on the market now, with different specifications and price, and to be truly versatile a recording channel should have pre-amp, EQ and compression, and all three inputs - mic, line and instrument. The 5051 does have these, and has the added capability of subtly changing the sound by driving the valves. What's more, it's very reasonably priced." The Mix magazine review
"I would say that the 5051 is equivalent to a decent console mic preamp, and better than some, but then it goes beyond that, giving you the ability to push the valves and obtain a warmer, more present, more intimate sound from a good mic. It isn't an effect that is immediately obvious, but subtle and deceptively beneficial...this compressor is gentle and easy to use in an unobtrusive manner - although putting the EQ before the compressor can allow more exaggerated effects. This, indeed, is the kind of unit that you would find yourself using on every session and probably every mix too. The TL Audio 5051 is a great sounding, well featured product at a price that offers good value. I can't wait to hear the rest of the range!" Sound On Sound magazine review
"Although this is marketed as a voice processor, it acquits itself with elan on a variety of sources. I was particularly delighted with the sound achieved recording an alto sax using a Calrec 1050 microphone. The compressor is a good effect compressor - it squashes, squeezes and pumps to order, and is capable of reasonably subtle effects too. All in all, it is what one expects from a classic valve compressor... This is a toy which has bags of character, warmth and subtlety: the fabled characteristics of valve equipment. It is amazing that TL Audio have managed to manufacture and sell these products for such reasonable prices; they represent very good value for money indeed." Audio Media magazine review


text:
Thurston County Foreclosures
Olympia Foreclosures
Lacey Foreclosures
Tumwater Foreclosures
Yelm Foreclosures
Rochester Foreclosures
Thurston County Short Sales
Olympia Short Sales
Lacey Short Sales
Tumwater Short Sales
Yelm Short Sales
Rochester Short Sales
New Houses
under $250k
$225k - $250k
$200k - $225k
$175k - $200k
$150k - $175k
Under $150k
over $250k
$250k - $275k
$275k - $300k
$300k - $350k
$350k - $400k
$400k - $450k
$450k - $500k
Above $500k
Area Schools
Olympia School District
North Thurston School District
Tumwater School District
Yelm School District
Griffin School District
Rainier School District
Rochester School District
Tenino School District
Area Info
Area history
local parks
community events
current weather
Average Rainfall/Temp
Live Traffic Cam
the olympian newspaper
state government site
thurston county site
city websites
city profiles
Free Relocation Package
Relocation Assistance
Find a home!
First time home buyer
mortgage calculator
role of the mls
homeowner warranties
writing the offer
real estate glossary
Whats your home worth?
Getting the highest price
staging your home
the kitchen
types of listing contracts
the listing contract
winterizing your home
setting the sales price
Flowers add curb appeal
Contact Us
Neighborhood Map Search
Olympia Area
Lacey Area
Tumwater Area
Yelm Area
Rainier Area
Rainier Area
Home Search By School
Olympia School District
North Thurston Schools
Tumwater School District
Yelm School District
Rainieir School District
Rochester School District
Fort Stevens Elementary School Homes For Sale
School District
Elementary Schools
Fort Stevens Elem
Mckenna Elementary
Southworth Elem
Prairie Elementary
Middle Schools
Ridgeline Middle
Yelm Middle
High Schools
Yelm High
© 2006 - 2013 Alex Bautista , REALTOR | Thurston CountyReal Estate, Pierce County Real Estate, King County Real Estate | Licensed with Abbey Realty Inc


text:
For the first time in school history, the Newton High School boys' bowling team completed its league season undefeated. The Railers swept a triangular Tuesday at Play-Mor Lanes. Newton rolled a season-high team score of 2,541, followed by Salina Sacred Heart at 2,268 and Campus at 2,174. The Railer girls fell to Campus 2,154-1,899. Sacred Heart doesn't field a girls' team. "That was our best score of the year," Newton coach Keith Woolery said. "The boys are 4-0 in the league, and that's the first time they've ever done that. We had three boys roll a 600 and one who missed it by two pins. It was a good day all-around. We beat Sacred Heart, a team that beat us earlier this season." Newton claimed the top three series of the meet, led by Bryan Esau at 654. Austin Gronau was four pins back at 650. Gabe Serrano was third at 650. Jerrod Ashcraft of Newton had the high game of the day at 242, followed by Gronau at 236 and Serrano at 236. "Bryan did well at 654 and Austin was right behind him," Woolery said. "Jerrod was just two pins off a 600. This should give them a lot of confidence going into the league tournament." In the girls' competition, Emily Dull of Campus had the high series of 576, followed by Madison Taylor at 547. Newton's Melina Schrader was third at 533. Taylor rolled the high game of 220, followed by Dull with a 212 and a 197. "The girls struggled today," Woolery said. "That was their lowest score of the season. Everybody on the varsity seemed to be struggling." The Railer boys are 8-5 overall. The Railer girls are 6-5, 1-3 in AV-CTL I competition. Newton competes with Wichita Heights and Derby at 3:30 p.m. Thursday at Northrock Lanes, the site of the state tournament. Newton's final home meet is 3:30 p.m. Tuesday with Goddard and Goddard Eisenhower at Play-Mor Lanes. JUNIOR VARSITY — The Newton junior varsity boys won its meet at 1,888, followed by Campus at 1,721 and Sacred Heart at 1,078, Andrew Rikoff led Newton at 504. Rikoff had Newton's high game of 181. The Railer girls JV fell to Campus 1,545-1,481. Elyse Cash had Newton's high series of 396. Cash had Newton's high game of 150. "The girls' JV had one of their better series," Woolery said.
Varsity Girls CAMPUS (699-797-658—2,154) — Emily Dull 197-212-167—576, Brenna Burdick 127-177-150—454, Shanna Midder 187-136-177—445, Caele Shaffer 150-119-126—395, Madison Taylor 165-220-162—547, Alyssa Magee 144-188-179—511. NEWTON (613-654-632—1,899) — Melina Schrader 184-189-160—533, McKenzie Senn 135-156-180—471, Jordann Parks 158-155, 127—440, Taylor Perkins 102-1544-160—416, Kami Bostick 136-110-129—375, Lexi Pauls 135-128-132—395. Varsity Boys SALINA SACRED HEART (742-750-776—2,268) — Zach Sims 148-205-180—533, Ryan Franzen 172-149-173—494, Dallas Quinn 212-163-210—585, Tanner Clovis, 189-167-151—507, Matt Kuffler 169-215-213—597, Jerod Windholz 146-144-170—460. CAMPUS (737-744-693—2,174) — Zach Pratt 151-155-180—486, Jordan Chavez 160-147-135—442, Drake Slates 132-192-148—472, Clayton Gueterie 152-149-174—475, Avery Woelk 224-185-152—561, Sean Carman 201-212-187—600. NEWTON (888-861-792—2,541) — Bryan Esau 214-221-219—654, Gabe Serrano 196-232-187—615, Jerrod Ashcraft 242-187-169—598, Austin Gronau 236-221-193—650, Brogan Owens 144-167-156—467, Isaac Fitzgarrald 162-176-193—531. Junior Varsity Girls Campus 1,545, Newton 1,481 NEWTON — Elyse Cash 145-150-101—396, Jayden Stinchcomb 131-147-96—374, Mariah Casey 133-130-107—370, LeeAnne Moore 70-128-112—310, Christina Sledd 101-68-76—245. Junior Varsity Boys Newton 1,888, Campus 1,721, Salina Sacred Heart 1,078 NEWTON — Andrew Rikoff 181-155-168—504, Landon Cooper 156-147-130—433, Kohlby Ketchum 146-123-179—448, Ethan Cole 158-162-113—433, Kyler Sweely 159-144-136—439, Tyler League 99-133-143—375.


text:
Father's Day is just around the corner and what dad wouldn't want a brand new mobile phone as a thank you for all he does for the family? There are plenty of options out there to consider in the mobile phone category, but a recent entry to the competitive marketplace is the Nokia Lumia 900 Windows Phone, and it's definitely worth taking a look at.
Out of the box, the phone looks and feels substantial with a wider-than-iPhone screen. There is definitely heft to the phone, but turning it on and seeing the bright and vibrant interface coming to life makes the 4.3" screen size worth it. The home screen is a departure from the little app icons you find on an iPhone and instead greets you with takes a little getting used to with big, bold boxes that Nokia calls "live tiles." Users will immediately get a keen sense of how the phone works just by playing around with the touchscreen and easy-to-use interface.
As for some of the hardware features, the Nokia Lumia 900 comes with an 8 MP built-in camera with flash, a front-facing camera, 16 GB internal memory plus SkyDrive cloud storage, a headset jack, a Micro USB port and it runs the latest Windows platform on the 4G LTE network on AT&T, which makes it super fast. It also boasts a 7 hour-long battery.
The apps that come with the phone are pretty standard. Of course, there's email, web access, Facebook, Twitter, but also apps like Office Hub (for editing/viewing Office documents), ESPN ScoreCenter, Flixter, AT&T GPS Navigator and even Xbox LIVE, perfect for when dads want to finish their gaming from on-the-road. If dad is an entertainment junkie, he can watch the latest TV shows through the AT&T U-verse Mobile app which provides streaming content from shows like ESPN Classics, Grey's Anatomy, Cougar Town, Revenge and more (though the selection is limited), and pricing is additional per month. Many more additional apps are available for free or purchase directly on the phone from the Nokia app store.
With all the bells and whistles it comes with, calling the Nokia Lumia 900 phone just doesn't do it justice. The sleek design, amazing camera and cool apps are just a few features that make it a must-have accessory for any deserving dad.
Under contract, the Nokia Lumia 900 Windows Phone sells for $99.99 from AT&T and the full retail value of the phone is $449.99 without a contract. You can find more information on pricing here. The phone is available for purchase through your local AT&T store or online.
*One lucky Screen Play reader will be the winner of a brand new Nokia Lumia 900 Windows Phone + one month of free service, valued at more than $450!! Simply click here to enter to get a chance to win this amazing tech gadget for a special dad in your life.
The giveaway runs from Tuesday, June 5 – Tuesday, June 12.
If you have a product that you'd like considered for Screen Play, please contact firstname.lastname@example.com.


text:
Message Board
Cody Fowler Davis Message Board
Talk about the novels, new and used books that Davis has written!
Author Davis's Book Reviews
Green 61
Anderson Parker, a good-guy lawyer, is fired by his boss, Justin Cartwright, because he refuses to tamper with evidence. In an odd turn of events, Parker is hired to bring a corporation to justice after one of their employees kills three people (2 of them children) in a boating accident. Cartwright, of course, represents the corporation and does everything possible to suppress evidence, tamper with witnesses, and help his client escape paying a huge...