Original by Ravishankar Mosur (Ravi<EMAIL_ADDRESS>Maintained by Ravi and Kevin A. Lenzo<EMAIL_ADDRESS>School of Computer Science
Carnegie Mellon University
Copyright (c) 1997-2005 Carnegie Mellon University.
Sphinx2 consists of a set of libraries that include core speech recognition functions as well as auxiliary ones such as low-level audio capture. The libraries are written in C and have been compiled on several Unix platforms (Linux, DEC Alpha, Sun Sparc, HPs) and Pentium/PentiumPro PCs running WindowsXP, WindowsNT or Windows95. A number of demo applications based on this recognition engine are also provided.
Several features specifically intended for developing real applications have been included in Sphinx2. For example, many aspects of the decoder can be reconfigured at run time. New language models can be loaded or switched dynamically. Similarly, new words and pronunciations can be added. The audio input data can be automatically logged to files for any future analysis.
The rest of this document is structured as follows:
The following is a very brief description of each model. (For those unfamiliar
with these topics or with Sphinx, a somewhat longer description, and the
associated Sphinx terminology, is in the html documentation for the Sphinx3 decoder,
available from CMU Sphinx
at SourceForge.)
The dictionary can be modified at run time. New words and their pronunciations can be added to the lexicon in between utterances. (An utterance is the unit of decoding; see Section The Recognition Engine below.) There is no mechanism for removing a word from the lexicon.
In addition to ordinary words, a set of noise or filler words can
be specified by the application, by placing them in a corresponding dictionary
(indicated by the -ndictfn
argument). Sphinx2 also
automatically added the silence word SIL
, with the
silence phone as its pronunciation, to the set
of filler words. A filler dictionary is not required, but the silence word is
always added.
The significance of filler words is that they can occur anywhere
in the utterance, transparent to the language model (see below).
Finally, Sphinx2 also adds the distinguished begin-sentence and end-sentence symbols,
<s>
and </s>
,
to the vocabulary. These words must be present in any N-gram language model
(see below).
-mdeffn
argument for a
a Sphinx3-format continuous density model definition file. If present,
continuous model decoding is assumed. Otherwise, the decoder looks for
semi-continuous acoustic models.
The decoder has to be initialized with one acoustic model. It is not possible to load multiple models and switch between them dynamically at run time.
Note: The current implementation does not include any speed optimizations to the continuous density model evaluation functions. Hence, applications using continuous density models may be restricted to small vocabulary or small model configurations if they are to run in real time.
.vec
and .var
files in the directory specified by the -cbdir
argument),
.ccode
,
.d2code
, .p3code
,
and .xcode
files, in the directory specified
by the -hmmdir
argument),
.chmm
files, in the directory specified by the
-hmmdirlist
argument).
Note: the Sphinx acoustic model trainer actually generates Sphinx3 format acoustic models, which consist of four files: means, variances, mixture weights and transition matrices. They have to be converted to Sphinx2 format using utilities provided with the trainer.
The semi-continuous model files generated by the trainer have model parameter values in 32-bit format. Sphinx2 memory requirements can be reduced considerably by combining all the mixture weights files into a single, compressed senone dump file that uses 8-bit parameter values. See Section Building 8-Bit Senone Dump Files for details.
Given the acoustic model and a pronunciation dictionary,
there is also an associated mapping information that defines the senone
mapping for each triphone state encountered in the dictionary.
For semi-continuous models, this information is available in
.phone
and .map
files
(specified by -phnfn
and
-mapfn
arguments). These two files are also
generated by utilities in the Sphinx trainer package, based on a corresponding
Sphinx3-format model definition file.
-mdeffn
argument is specified, continuous density
models are assumed. This argument specifies a Sphinx3 format model
definition file, containing triphone-state to senone mapping information.
There is no need to convert this file into .phone
and .map
files, unlike in the case of
semi-continuous models.
However, in the current implementation, the decoder does internally generate
.phone
and .map
files from the model definition file. It writes them to a directory specified
by the -kbdumpdir
argument. Applications may
save the generated files, and specify them as input in subsequent decoder runs.
To summarize, if the -mdeffn
argument is specified,
the decoder assumes continuous density models.
If the -phnfn
and -mapfn
arguments are not specified, the decoder automatically generates
.phone
and .map
files
in the -kbdumpdir
directory, and reads them back in.
If the -phnfn
and -mapfn
are specified, on the other hand, the decoder does not generate new
.phone
and .map
files. Instead, it simply reads in the files specified by these arguments, with
the assumption that they are compatible with the model definition file.
As for the continuous density acoustic models themselves, the decoder can directly
read in the means, variances and
mixture weights files generated by the Sphinx3 trainer, without any
format conversion. The transition matrices file does, however, have to
be converted to Sphinx2 format (.chmm
files).
There are a few restrictions on the structure of continuous density acoustic models that the Sphinx2 decoder can handle:
1s_12c_12d_3p_12dd
feature type in the Sphinx3
trainer).
-lmfn
argument is unnamed; it has the empty string as its name.
The active vocabulary during the decoding of an utterance is the set of words that is present in both the pronunciation dictionary and the currently active LM. The decoder is incapable of recognizing any word outside the active vocabulary.
Any new word added to the dictionary is also automatically added as a unigram to the unnamed N-gram language model. (This is a HACK. There ought to be a mechanism for adding a word to a specified language model. Currently the only way to accomplish this is to delete a currently loaded language model, create a new model with the new word, and load it. This is also the case with FSGs; there is no way to dynamically modify a loaded FSG.)
As mentioned earlier, an N-gram language model must include the begin-sentence
and end-sentence symbols, <s>
and
</s>
.
Filler words are transparent to any language model,
N-gram or finite state. That is, the decoder can transparently try to insert
them anywhere in the utterance, but they don't exist as far as the language model
is concerned.
Large N-gram LMs load very slowly. The delay can be avoided by providing a binary dump version of LM files along with the original LMs. The Sphinx2 decoder can automatically create LM dump files for large N-gram LMs, which can be used in subsequent decoder runs. (See Section Building LM Dump Files.)
Note that the current implementation of finite-state grammars, or FSGs, is not the most efficient. In particular, transitions are represented using a full NxN matrix, where N is the number of states. Hence, FSGs containing several thousands of states may run inefficiently.
No LM is required for operation in allphone or forced alignment recognition modes.
uttproc_begin_utt
and the next
uttproc_end_utt
; see further below.)
An utterance can be up to a minute long. In practice, most applications would
typically treat a sentence or a phrase as an utterance, which would be much
shorter than the maximum of 60 sec.
Details of the Sphinx2 recognition engine (with N-gram models) can be found in
Ravishankar's Ph.D
thesis.
As we shall see below, none of the core decoder API functions directly accesses any audio device. Rather, the application is responsible for collecting audio data to be decoded. This gives applications the freedom to decode audio data originating at any source at all---standard audio devices, pre-recorded files, data received from a remote location over a socket connection, etc. Since most applications ultimately need to access common audio devices and to perform some form of silence filtering to detect speech/no-speech conditions, the two additional modules are provided as a convenience.
(NOTE: The APIs often use int32
and int16
types, which are basically 32-bit and
16-bit integer types. Similarly, uint32
and
uint16
are the unsigned versions.)
include/ad.h
.
ad_open:
|
Opens an audio device for recording. Returns a handle to the opened device. (Currently 8KHz or 16KHz mono, 16-bit PCM only.) |
ad_start_rec:
|
Starts recording on the audio device associated with the specified handle. |
ad_read:
|
Reads up to a specified number of samples into a given buffer. It returns the number of samples actually read, which may be less than the number requested. In particular it may return 0 samples if no data is available. Most operating systems have a limited amount of internal buffering (at most a few seconds) for audio devices. Hence, this function must be called frequently enough to avoid buffer overflow. |
ad_stop_rec:
|
Stops recording. (However, the system may still have internally buffered data remaining to be read.) |
ad_close:
|
Closes the audio device associated with the specified audio handle. |
examples/adrec.c
and examples/adpow.c
for two examples demonstrating the use of the above functions.
A similar set of playback functions are provided (currently implemented only on PC/Windows platforms):
ad_open_play:
|
Opens an audio device for playback. Returns a handle to the opened device. (Currently 8KHz or 16KHz mono, 16-bit PCM only.) |
ad_start_play:
|
Starts playback on the device associated with the given handle. |
ad_write:
|
Sends a buffer of samples for playback. The function may accept fewer than the samples provided, depending on available internal buffers. It returns the number of samples actually accepted. The application must provide data sufficiently rapidly to avoid breaks in playback. |
ad_stop_play:
|
End of playback. Playback is continued until all buffered data has been consumed. |
ad_close_play:
|
Closes the audio device associated with the specified handle. |
ad_mu2li
for converting 8-bit mu-law samples into
16-bit linear PCM samples.
See examples/adplay.c
for an example that plays back audio samples from a given input file.
The implementation of the audio API for various platforms is contained in
analog-to-digital library for the given architecture.
The silence filtering module is interposed between the raw audio input source
and the application. The application calls the function
cont_ad_read
instead of directly reading the raw A/D
input source.
cont_ad_read
returns only those segments of
input audio that it determines to be non-silence. Additional timestamp information
is provided to inform the application about silence regions that have been dropped.
The complete continuous listening API is defined in
include/cont_ad.h
and is summarized below:
cont_ad_init:
|
Associates a new continuous listening module instance with a specified raw A/D
handle and a corresponding read function pointer. E.g., these
may be the handle returned by ad_open and function
ad_read described above.
|
cont_ad_calib:
|
Calibrates the background silence level by reading the raw audio for a few seconds.
It should be done once immediately after cont_ad_init ,
and after any environmental change.
|
cont_ad_read:
|
Reads and returns the next available block of non-silence data in a given buffer.
(Uses the read function and handle supplied to
cont_ad_init to obtain the raw A/D data.) More details
are provided below.
|
cont_ad_reset:
|
Flushes any data buffered inside the module. Useful for discarding accumulated, but unprocessed speech. |
cont_ad_get_params:
|
Returns the current values of a number of parameters that determine the functioning of the silence/speech detection module. |
cont_ad_set_params:
|
Sets a number of parameters that determine the functioning of the silence/speech detection module. Useful for fine-tuning its performance. |
cont_ad_set_thresh:
|
Useful for adjusting the silence and speech thresholds. (It's preferable to use
cont_ad_set_params for this purpose.)
|
cont_ad_detach:
|
Detaches the specified continuous listening module from its currently associated audio device. |
cont_ad_attach:
|
Attaches the specified continuous listening module to the specified audio device.
(Similar to cont_ad_init , but without the need to
calibrate the audio device. The existing parameter values are used instead of
being reset to default values.)
|
cont_ad_close:
|
Closes the continuous listening module. |
cont_ad_read
function
are in order.
Operationally, every call to cont_ad_read
causes the
module to read the associated raw A/D source (as much data as possible and available),
scan it for speech (non-silence) segments and enqueue them internally. It returns
the first available segment of speech data, if any. In addition to returning
non-silence data, the function also updates a couple of parameters that may be of
interest to the application:
siglvl
member variable of the
cont_ad_t
structure returned by
cont_ad_init()
.
cont_ad_read()
call. This is in
the read_ts
member variable of the
cont_ad_t
structure.
cont_ad_read
, the timestamp is 100000 and 116000,
respectively, the application can determine that 1 sec (16000 samples) of silence
have been gobbled up between the two calls.
Silence regions aren't chopped off completely. About 50-100ms worth of silence is preserved at either end of a speech segment and passed on to the application.
Finally, the continuous listener won't concatenate speech segments separated by
silence. That is, the data returned by a single call to
cont_ad_read
will not span raw audio separated by
silence that has been gobbled up.
cont_ad_read
must be called frequently enough to avoid
loss of input data owing to buffer overflow. The application is responsible for
turning actual recording on and off, if applicable. In particular, it must ensure
that recording is on during calibration and normal operation.
See examples/cont_adseg.c
for an example that uses the continuous listening module to segment live audio input
into separate utterances. Similarly,
examples/cont_fileseg.c
segments a given pre-recorded file containing audio data into utterances.
include/fbs.h
for further
details.
The two functions pertaining to initialization and final cleanup are:
fbs_init:
|
Initializes the decoder. The input arguments (in the form of the common
command line argument list argc,argv ) specify the
input databases (acoustic, lexical, and language models) and various other
decoder configuration options. (See Arguments Reference.)
If batch-mode processing is indicated
(see -ctlfn
option below) it happens as part of this initialization.
|
fbs_end:
|
Cleans up the internals of the decoder, such as printing summaries and closing log files, before the application exits. |
Sphinx2 applications can use the following functions to decode speech into text,
one utterance at a time:
uttproc_begin_utt:
|
Begins decoding the next utterance. The application can assign an id string to it. If not, one is automatically created and assigned. |
uttproc_rawdata:
|
Processes (decodes) the next chunk of raw A/D data in the current utterance. This can be non-blocking, in which case much of the data may be simply queued internally for later processing. Note that only single-channel (mono) 16-bit linear PCM-encoded samples can be processed. |
uttproc_cepdata:
|
This is an alternative to uttproc_rawdata if the
application wishes to decode cepstrum data instead of raw A/D data.
|
uttproc_end_utt:
|
Indicates that all the speech data for the current utterance has been provided to the decoder. |
uttproc_result:
|
Finishes processing internally queued up data and returns the final recognition result string. It can also be non-blocking, in which case it may return after processing only some of the internally queued up data. |
uttproc_result_seg:
|
Like uttproc_result , but returns additional information
for each word in the result, such as time segmentation (measured in 10msec frames),
acoustic and language model scores, etc. (See structure search_hyp_t
in file include/fbs.h .)
One can use either this function or uttproc_result to
finish decoding, but not both.
|
uttproc_partial_result:
|
This function can be used to obtain the most up-to-date partial result while utterance decoding is in progress. This may be useful, for example, in providing feedback to the user. |
uttproc_partial_result_seg:
|
Like uttproc_partial_result , but returns word
segmentation information (measured in 10msec frames) instead of the recognition
string.
|
uttproc_abort_utt:
|
This is an alternative to uttproc_end_utt that
terminates the current utterance. No further recognition results can be obtained for it.
|
search_get_alt:
|
Returns N-best hypotheses for the utterance. Currently, this does not work with
finite state grammars.
(See further details in include/fbs.h ).
|
uttproc_result
allows the application to respond
to user-interface events in real-time.
The application code fragment for decoding one utterance typically looks as follows:
uttproc_begin_utt (....) while (not end of utterance) { /* indicated externally, somehow */ read any available A/D data; /* possibly 0 length */ uttproc_rawdata (A/D data read above, non-blocking); } uttproc_end_utt (); uttproc_result (...., blocking);See several demo applications in the directory
examples/
for some variations.
Multiple, named LMs can be resident with the decoder module, either read in during initialization, or dynamically at run time. However, exactly one LM must be selected and active for decoding any given utterance. As mentioned earlier, the active vocabulary for each utterance is given by the intersection of the pronunciation dictionary and the currently active LM. The following functions allow the application to control language modelling related aspects of the decoder:
lm_read:
|
Reads in a new N-gram language model from a given file,
and associates it with a given string name. The application needs this function
only if it needs to create and load LMs dynamically at run time, rather than
at initialization via the -lmfn command line
argument.
|
lm_delete:
|
Deletes the N-gram LM with the given string name from the decoder repertory. |
uttproc_set_lm:
|
Tells the decoder to switch the active grammar to the N-gram LM with
the given string name. Subsequent utterances are decoded with this grammar,
until the next uttproc_set_lm or
uttproc_set_fsg operation.
This function can only be invoked between utterances, not in the midst of one.
|
uttproc_set_context:
|
Sets a two-word history for the next utterance to be decoded, giving its first words additional context that can be exploited by the LM. (Useful only with N-gram LMs.) |
uttproc_load_fsgfile:
|
Loads the given finite-state grammar (FSG) file into the system and returns the
string name associated with the FSG. (Unlike the N-gram LM, the string name
is contained in the FSG file.) The application needs this function only
if it needs to create and load FSGs dynamically at run time, rather than
at initialization via the -fsgfn or
-fsgctlfn command line arguments.
|
uttproc_load_fsg:
|
Similar to uttproc_load_fsgfile , but the input
FSG is provided in the form of an s2_fsg_t data
structure (see include/fbs.h ), instead of a file.
|
uttproc_set_fsg:
|
Tells the decoder to switch the active grammar to the FSG with
the given string name. Subsequent utterances are decoded with this grammar,
until the next uttproc_set_fsg or
uttproc_set_lm operation.
This function can only be invoked between utterances, not in the midst of one.
|
uttproc_del_fsg:
|
Deletes the FSG with the given string name from the decoder repertory. |
The raw input data for each utterance and/or the cepstrum data derived from it
can be logged to specified directories:
uttproc_set_rawlogdir:
|
Specifies the directory to which utterance audio data should be logged. An
utterance is logged to file <id>.raw, where <id> is the string
ID assigned to utterance by uttproc_begin_utt .
|
uttproc_set_mfclogdir:
|
Specifies the directory to which utterance cepstrum data should be logged. Like A/D files above, an utterance is logged to file <id>.mfc. |
uttproc_get_uttid:
|
Retrieves the utterance ID string for the current or most recent utterance. Useful for locating the logged A/D data and cepstrum files, for example. |
In addition, the decoder configuration includes a number of parameters that can
be tuned for a given application to give optimum performance. They
are set at initialization time via command-line style arguments (during the
fbs_init
call. The parameters determine
various aspects of the decoder, such as beam pruning thresholds,
the relative weights of acoustic and language model scores, etc. They are
covered in more detail in Section Arguments Reference
below.
-allphone
flag is TRUE
. In this mode, no
language model should be provided; i.e., the -lmfn
,
-lmctlfn
, -fsgfn
and
-fsgctlfn
arguments should be omitted. A phone
transition probability matrix can be specified using the
-phonetpfn
argument.
In addition, the API for allphone decoding includes a single function that supports recognition from pre-recorded files:
uttproc_allphone_file:
|
Performs allphone recognition on the given file and returns the resulting phone
segmentation. The input file can contain either audio data, or cepstrum data.
The -adcin argument, and any related ones, should
be set accordingly. (See arguments reference below.)
|
-lmfn
,
-lmctlfn
, -fsgfn
and
-fsgctlfn
arguments should be omitted.
The set of utterances (speech data) is given by
the -ctlfn
argument, as usual.
(See arguments reference below.) In addition,
the corresponding transcripts should be given
in a parallel file, which should be the -tactlfn
argument. The first line of this file
should contain just the string *align_all*
.
This should be followed by the transcripts for all the utterances to be
aligned, one line per utterance, in the same order as in
the -ctlfn
file.
The transcripts must not include any utterance ID.
Alignments at the word, phone and state levels can be obtained by setting the flags
-taword
, -taphone
, and
-tastate
individually to
TRUE
or FALSE
. Alignments
are written to stdout (the log file).
examples:
sphinx2_ptt:
demonstrates an application in which the user explicitly indicates the start and
end of each utterance using the <RETURN
> keyboard key.
(On WindowsNT/Windows95 systems, the ending <RETURN
> is not
used. Instead, the utterance is terminated after a fixed duration.)
sphinx2_continuous:
demonstrates the interaction of continuous listening and decoding. An endless
audio input stream is automatically segmented into utterances using the continuous
listening module, and the utterances are decoded. The timestamps returned by the
continuous listening module are used to locate gaps in speech data of at least 1 sec,
thus marking the utterance boundaries.
sh autogen.sh
if necessary (not necessary if you are using the Sphinx2 release package)
./configure
./configure --prefix=[path_to_install_dir]
if you do not want to install Sphinx2 in the default location
make
make test
make install
To compile Sphinx2 libraries on Windows platforms:
.\sphinx2.dsw
onto Microsoft Visual C++ 6.0 or better.
sphinx2_continuous
, minimally
Start
" -> "Run
" and type cmd
), cd
to the location where you installed sphinx2 (e.g., c:\sphinx2-0.5
)
cd .\win32\batch
.
sphinx2-test.bat
MS Visual Studio will build the executables under
.\bin\Release
or
.\bin\Debug
(depending on the setting
you choose on MS Visual Studio), and the libraries under
.\lib\Release
or
.\lib\Build
.
In a successful installation, the test produces the recognition result GO FORWARD TEN METERS
fbs_init(int argc, char *argv[])
defined in
include/fbs.h
.
(Applications built around the Sphinx2 libraries, of course, can have additional
arguments.) Many arguments, such as the input model databases, must be
specified by the user. We cover the more important ones below (the remaining
have reasonable default values):
| Flag | Description | Default |
|---|---|---|
-lmfn
|
Optional DARPA format N-gram LM file with the empty string as its name. | None. |
-lmctlfn
|
Optional control file with a list of N-gram LM files and associated string names (one line per entry). This is how multiple LMs can be loaded during initialization. | None. |
-kbdumpdir
|
Optional directory containing precompiled binary versions of N-gram LM files
(see Building LM Dump Files). Also, directory in
which Sphinx2 format map and phone files are
created if -mdeffn is specified but
-phnfn and -mapfn
are omitted.
|
None. |
-fsgfn
|
Optional finite state grammar file. | None. |
-fsgctlfn
|
Optional control file with a list of FSG grammar filenames. One line per entry. Blank
and comment lines (beginning with a # char) are allowed.
This is how multiple FSGs can be loaded during initialization.
|
None. |
-fsgusealtpron
|
Whether the decoder should expand a transition in an FSG to include all the alternative pronunciations of the associated word. |
TRUE
|
-fsgusefiller
|
Whether the decoder should insert a filler word (self-loop) transition automatically at every state. |
TRUE
|
-dictfn
|
Main pronunciation dictionary file. | None. |
-oovdictfn
|
Optional out-of-vocabulary (OOV) pronunciation dictionary. These are added to the
unnamed LM (read from -lmfn file) with unigram
probability given by -oovugprob .
|
None. |
-ndictfn
|
Optional "noise" words pronunciation dictionary. Noise words are not part of any LM and, like silence, can be inserted transparently anywhere in the utterance. | None. |
-phnfn -mapfn
|
Phone and map files with senone mapping information for the given dictionary and
acoustic model. Can be omitted for continuous models (i.e., if
-mdeffn is specified).
|
None. |
-cbdir
|
Directory containing Sphinx-2 format semi-continuous acoustic model codebook
files (.vec and .var
files).
|
None. |
-hmmdir
|
Directory containing Sphinx-2 format semi-continuous acoustic model senone
weights files (.ccode ,
.d2code , .p3code ,
and .xcode files).
|
None. |
-hmmdirlist
|
Directory containing Sphinx2-format acoustic model transition matrices files
(.chmm files). (For both semi-continuous and
continuous density models.)
|
None. |
-sendumpfn -8bsen
|
Optional 8-bit senone mixture weights file created from the 32-bit mixture weights
files (see Building 8-Bit Senone Dump Files).
-8bsen should be TRUE if
the 8-bit senones are used.
|
None. |
-mdeffn
|
Sphinx3 format model definition file for continuous density models. | None. |
-meanfn -varfn -mixwfn
|
Sphinx3 format acoustic model files: means, variances and senone mixture weights.
(The transition matrices file has to be converted to Sphinx2 format and specified
via the -hmmdirlist argument.)
|
None. |
-varfloor
|
Floor for variance values in the -varfn file.
Smaller variance values are raised to this floor.
|
0.0001 |
-mixwfloor
|
Floor for mixture weight values in the -mixwfn file.
Smaller values are raised to this floor.
|
0.0000001 |
-phonetpfn
|
Phone transition probability (actually counts) matrix input file, for use
as a "language model" in allphone recognition mode. (Also see associated
arguments -ptplw and
-uptpwt .)
|
None. |
| Flag | Description | Default |
|---|---|---|
-ctlfn -ctloffset -ctlcount
|
Batch-mode control file listing utterance files (without their file-extension)
to decode. -ctloffset is the number of initial
utterances in the file to be skipped, and -ctlcount
the number to be processed (after the skip, if any).
-ctlfn must not be specified for live-mode or
application-driven operation.
|
None 0 All |
-datadir |
If the control file (-ctlfn argument) entries are relative pathnames, an optional directory prefix for them may be specified using this argument. | None |
-allphone |
Should be TRUE to configure the recognition engine for
allphone mode operation.
|
FALSE
|
-tactlfn |
Input transcript file, parallel to the control file (-ctlfn )
in forced alignment mode.
|
None |
-adcin -adcext -adchdr -adcendian
|
In batch mode, -adcin selects A/D
(TRUE ) or cepstrum input data
(FALSE ).
If TRUE , -adcext
is the file extension to be appended to names listed in the
-ctlfn argument file,
-adchdr the number of bytes of header in each
input file, and -adcendian their byte ordering:
0 for big-endian, 1 for little-endian. With these flags, most A/D data file
formats can be processed directly.
|
FALSE raw 0 1 |
-normmean -nmprior
|
Cepstral mean normalization (CMN) option. If -nmprior
is FALSE , CMN computed on current utterance only
(usually batch mode), otherwise based on past history (live mode).
|
TRUE FALSE
|
-compress -compressprior
|
Silence deletion (within decoder, not related to continuous
listening). If -compressprior is
FALSE , based on current utterance statistics
(batch mode), otherwise based on past history (live mode).
-compress should be
FALSE if continuous listening is used.
|
FALSE FALSE
|
-agcmax -agcemax
|
Automatic gain control (AGC) option. In batch mode only
-agcmax should be TRUE ,
and in live mode only -agcemax .
|
FALSE FALSE
|
-live
|
Forces some live mode flags: -nmprior
-compressprior and
-agcemax to TRUE
if any AGC is on.
|
FALSE
|
-samp
|
Sampling rate; must be 8000 or 16000. |
16000
|
-fwdflat
|
Run flat-lexical Viterbi search after tree-structured pass (for better
accuracy). Usually FALSE in live mode.
|
TRUE
|
-bestpath
|
Run global best path search over Viterbi search word lattice output (for better accuracy). |
TRUE
|
-compallsen
|
Compute all senones, whether active or inactive, in each frame. |
FALSE
|
-latsize
|
Word lattice entries to be allocated. Longer sentences need larger lattices. | 50000 |
-fsgbfs
|
If FALSE , backtrace from state with best path score,
instead of from FSG final state. (FSG mode only.)
|
TRUE
|
| Flag | Description | Default |
|---|---|---|
-top
|
Number of codewords computed per frame. Usually, narrowed to 1 in live mode. | 4 |
-beam -npbeam
|
Main pruning thresholds for tree search. Usually narrowed down to 2e-6 in live mode. |
1e-6 1e-6 |
-lpbeam
|
Additional pruning threshold for transitions to leaf nodes of lexical tree. Usually narrowed down to 2e-5 in live mode. | 1e-5 |
-lponlybeam -nwbeam
|
Yet more pruning thresholds for leaf nodes and exits from lexical tree. Usually narrowed down to 5e-4 in live mode. |
3e-4 3e-4 |
-maxwpf |
Maximum number of words, ranked according to score, that can be recognized and entered in the Viterbi history in each frame. Essentially, an absolute pruning parameter complementing the beam pruning parameter. (Not used in FSG mode.) | Infinity |
-maxhmmpf |
Absolute pruning threshold. Maximum number of HMMs to keep active in each frame (approx.). Implemented only in FSG mode. | Infinity |
-fwdflatbeam -fwdflatnwbeam
|
Main and word-exit pruning thresholds for the optional, flat lexical Viterbi search. |
1e-8 3e-4 |
-topsenfrm -topsenthresh
|
No. of lookahead frames for predicting active base phones. (If <=1, all base phones
assumed to be active every frame.) -topsenthresh is
log(pruning threshold) applied to raw senone scores to determine active phones in each
frame.
|
1 -60000 |
| Flag | Description | Default |
|---|---|---|
-langwt -fwdflatlw -rescorelw
|
Language weights applied during lexical tree Viterbi search, flat-structured Viterbi search, and global word lattice search, respectively. |
6.5 8.5 9.5 |
-ugwt
|
Unigram weight for interpolating unigram probabilities with uniform distribution. Typically in the range 0.5-0.8. | 1.0 |
-inspen -silpen -fillpen
|
Word insertion penalty or probability (for words in the LM),
insertion penalty for the silence word, and
insertion penalty for noise words (from -ndictfn file) if any.
|
0.65 0.005 1e-8 |
-oovugprob
|
Unigram probability (logprob) for OOV words from
-oovdictfn file, if any.
|
-4.5 |
-ascrscale
|
Scaling of acoustic scores (continuous density acoustic models only). Raw acoustic scores are first scaled down (i.e., shifted down) by so many bits. | 0 (no scaling) |
-ptplw
|
Phone transition language weight applied to phone transition
probability matrix (see -phonetpfn argument).
|
5.0 |
-uptpwt
|
Linear interpolation constant, for interpolating phone transition probabilities
between uniform and those specified by the
-phonetpfn argument. Values closer to 1.0 weight
uniform distribution more, closer to 0.0 weight it less.
|
0.001 |
| Flag | Description | Default |
|---|---|---|
-matchfn
|
Filename to which final recognition string for each utterance written. (Old format, word-id at the end.) | None |
-matchsegfn
|
Like -matchfn , but contains word segmentation
info: startframe #frames word...
(New format, word-id at the beginning.)
|
None |
-partial
|
If greater than 0, print any available partial hypothesis to stdout every so many frames. | 0 |
-partialseg
|
Like -partial , but include segmentation
information for each word in the partial hypothesis.
|
0 |
-reportpron
|
Causes word pronunciation to be included in output files. |
FALSE
|
-rawlogdir
|
If specified, logs raw A/D input samples for each utterance to the indicated directory. (One file per utterance, named <uttid>.raw.) | None |
-mfclogdir
|
If specified, logs cepstrum data for each utterance to the indicated directory. (One file per utterance, named <uttid>.mfc.) | None |
-dumplatdir
|
If specified, dumps word lattice for each utterance to a file in this directory. The filename is created from the utterance ID. | None |
-logfn
|
Filename to which decoder logging information is written. | stdout/stderr |
-backtrace
|
Includes detailed word backtrace information in log file. |
TRUE
|
-nbest
|
No. of N-best hypotheses to be produced. Currently, this flag is only useful in batch
mode. But an application can always directly invoke
search_get_alt to obtain them.
Also, the current implementation is lacking in some details (e.g., in returning
detailed scores).
|
0 |
-nbestdir
|
Directory to which N-best files written (one/utterance). | Current dir. |
-nbestseg
|
If FALSE, nbest hypotheses files contain only the word sequence for each alternative. But, if TRUE, each word also includes segmentation and confidence score information. |
FALSE
|
-phoneconf
|
Writes a form of phoneme scores for the utterance to the logfile. Mainly for diagnostics purposes. |
FALSE
|
-pscr2lat
|
Write a phoneme lattice for the utterance to the logfile, i.e., the top-scoring phonemes per frame. Mainly for diagnostics purposes. |
FALSE
|
-taword -taphone -tastate
|
Whether word, phone, and state alignment output should be produced when running in forced alignment mode. |
TRUE TRUE FALSE
|
Finally, one of the arguments can be:
-argfile
filename.
This causes additional arguments to be read in from the given
file. Lines beginning with the '#'
character in this file are ignored.
Recursive -argfile
specifications are not allowed.
| Use 8-bit senone dump file. | |
| A/D input file byte-ordering. | |
| A/D input file extension. | |
| No. bytes of header in A/D input file. | |
| Input file contains A/D samples or cepstra (TRUE/FALSE). | |
| Compute AGC (max C0 normalized to 0; estimated, live mode). | |
| Compute AGC (max C0 normalized to 0 based on current utterance). | |
| Arguments file. | |
| Acoustic scores scaling for continuous density models. | |
| Provide detailed backtrace in log file. | |
| Main pruning beamwidth. | |
| Run global best path algorithm on word lattice. | |
| Directory containing semi-continuous acoustic model codebook files. | |
| Compute all senones. | |
| Remove silence frames (based on C0 statistics). | |
| Remove silence frames (based on C0 statistics from prior history). | |
| No. of utterances to decode in batch mode. | |
| Control file listing utterances to decode in batch mode. | |
| No. of initial utterances to be skipped from control file. | |
| Directory prefix for control file entries. | |
| Main pronunciation dictionary. | |
| Directory for dumping word lattices. | |
| Noise word penalty (probability). | |
| Control file listing several FSG files to be loaded at initialization. | |
| Finite state grammar file to be loaded at initialization time. | |
| Consider alternative pronunciations for every FSG transition. | |
| Add a filler self-loop transition at every FSG state. | |
| Run flat-lexical Viterbi search. | |
| Main beam width for flat search. | |
| Language weight for flat search. | |
| Word-exit beam width for flat search. | |
| Directory containing semi-continuous senone mixture weights files. | |
| Directory containing semi-continuous HMM transition matrices files. | |
| Word insertion penalty (probability). | |
| Directory containing LM dump files. | |
| Language weight for lexical tree search. | |
| Size of word lattice to be allocated. | |
| Live mode. | |
| Control file listing named language model files to be loaded at initialization. | |
| Unnamed language model file to load at initialization. | |
| Output log file. | |
| Transition to last phone beam width. | |
| Last phone internal beam width. | |
| Senone mapping file. | |
| Output match file. | |
| Output match file with word segmentation. | |
| Max HMMs to keep active per frame (absolute pruning, approx.). | |
| Max words to be recognized per frame (absolute pruning). | |
| Model definition file for continuous density acoustic model. | |
| Continuous density acoustic model Gaussian means file. | |
| Directory for logging cepstrum data for each utterance. | |
| Floor value for continuous density senone mixture weights. | |
| Continuous density acoustic model senone mixture weights file. | |
| No. of N-best hypotheses to be produced/utterance. | |
| Directory for writing N-best hypotheses files. | |
| Whether to include segmentation for each nbest hypothesis word | |
| Noise words dictionary. | |
| Cepstral mean normalization based on prior utterances statistics. | |
| Cepstral mean normalization. | |
| Next phone beam width for tree search. | |
| Word-exit beam width for tree search. | |
| Out-of-vocabulary words pronunciation dictionary. | |
| Unigram probability for OOV words. | |
| Frequency of partial hypothesis reporting. | |
| Frequency of partial hypothesis (with segmentation) reporting. | |
| Phone file (senone mapping information). | |
| Whether to generate phone segmentation and scores. | |
| Whether to output a phone lattice. | |
| Directory for logging A/D data for each utterance. | |
| Show actual word pronunciation in output match files. | |
| Language weight for best path search. | |
| Input audio sampling rate(16000/8000). | |
| (8-bit) Senone dump file. | |
| Silence word penalty (probability). | |
| Forced alignment transcript file. | |
| Whether phone-level alignment information should be output. | |
| Whether state-level alignment information should be output. | |
| Whether word-level alignment information should be output. | |
| No. of top codewords to evaluate in each frame. | |
| No. of frames to lookahead to determine active base phones. | |
| Pruning threshold applied to determine active base phones. | |
| Unigram weight for interpolating unigram probability with uniform probability. | |
| Floor value for continuous density Gaussian variance values. | |
| Continuous density acoustic model Gaussian variances file. |
include/fbs.h
carefully, in order to find out more.
-beam
-npbeam
-lpbeam
-lponlybeam
,
and
-nwbeam
uniformly by a factor >1.
-maxwpf
(Ngram mode), or
-maxhmmpf
(FSG mode). Statistics
on the number of active HMMs and words hypothesized are written to the log file
(the -logfn
argument), which can be examined to
estimate reasonable values for these parameters.
-top
from 4 to 2 or 1.
-topsenfrm
>1,
and adjusting the corresponding pruning beamwidth
-topsenthresh
.
The former can be set, for example, to 4, and the latter between -60000 and -80000.
(Threshold values closer to 0 provide tigther pruning.)
-compallsen
.
When -top
is 1,
it is generally more efficient to compute all senones, but not when
-top
is 4. However,
when using very small vocabularies of just tens of words, it is preferable to
compute only the active senones, regardless of the value of
-top
. (But if
-topsenfrm
>1,
all senones are computed anyway.)
When using continuous density models, the tuning parameters can be quite different
from those for semi-continuous models. In particular, the dynamic range of
acoustic scores is usually larger, hence the language-weight
(-langwt
argument) probably needs to be increased.
All the pruning thresholds (-beam
,
-npbeam
, -nwbeam
,
-lpbeam
, -lponlybeam
,
-fwdflatbeam
and
-fwdflatnwbeam
) have to be lowered as well.
It is preferable to disable phone lookahead (i.e., not specifying the
-topsen
argument), since phone lookahead requires
the evaluation of all senones every frame, which is expensive for continuous
density models.
Finally, to reduce the problem of integer overflow caused by the larger dynamic
range of scores, an acoustic scaling parameter
(-ascrscale
argument) has been added. This
parameter specifies the number of bits by which raw acoustic likelihoods are
scaled down. For instance, a value of 1 implies that raw acoustic scores are
halved, thus compressing the dynamic range. (Unfortunately, this usually
requires further tuning of language-weight and pruning threshold parameters.)
LM dump files can be created by either a standalone program
examples/lm3g2dmp.c
or the decoder. The standalone version can be compiled from the
examples
directory.
The program takes two arguments, the LM source file and a directory in which the
dump file is to be created. It reads the header from the original LM file to determine
the size of the LM. It then forms the binary dump file name by appending a
.DMP
extension to the LM file name. This file
is written to the second (directory) argument. (NOTE: The dump
file must not already exist!!)
Any version of the decoder can also automatically create binary "dump" files
similar to the standalone version described above. It first looks for the
dump file in the directory given by the
-kbdumpdir
argument. If the dump file is present it reads it and ignores the rest of the
original LM file. Otherwise, it reads the LM file and creates a dump file in the
-kbdumpdir
directory so that it can be used in subsequent decoder runs.
The decoder does not create dump files for small LMs that have fewer than an
internally defined number of bigrams and trigrams.
-hmmdir
argument.) However, they can be
clustered down to 8-bits for memory efficiency, without loss of recognition
accuracy. The clustering is carried out by an offline process as follows:
-sendumpfn
flag set to the temporary file name,
the -8bsen
flag set to
FALSE
, and omitting the
-lmfn
argument.
The decoder can be killed after it creates the 32-bit senone dump file, which happens
during the initialization and is announced in the log output.
/afs/cs/project/plus-2/s2/Sphinx2/bin/alpha/pdf32to8b 32bit-file 8bit-file
pdf32to8b
is the temporary 32-bit dump file created above, and the second argument is the
8-bit output file.
-sendumpfn
argument to the decoder with the -8bsen
argument set to TRUE
.
An FSG file looks as follows:
FSG_BEGIN [<fsgname>] NUM_STATES <#states> START_STATE <start-state> FINAL_STATE <final-state> TRANSITION <from-state> <to-state> <prob> [<word-string>] TRANSITION <from-state> <to-state> <prob> [<word-string>] ... (any number of state transitions) FSG_END
The FSG spec begins with the line containing the keyword FSG_BEGIN. (All
preceding lines are comments.)
It may have an optional FSG name string. If no name is present, the FSG
has the empty string as its name.
Following the FSG_BEGIN declaration is the number of states in the FSG,
the start state, and the final state, each on a separate line.
States are numbered in the range [0 .. <#states>-1].
These are then followed by all the state transitions, in no particular order,
and each transition on a separate line. The FSG specification is ended
by the FSG_END line.
The keywords NUM_STATES
,
START_STATE
,
FINAL_STATE
, and
TRANSITION
, can be abbreviated to
N
,
S
,
F
, and
T
, respectively.
A transition specifies the source state, the destination state, the prior probability of the transition being taken, and it optionally emits a word. If no word emission is specified, it is an epsilon or null transition. If a transition emits a word that is not in the pronunciation lexicon, the transition is simply ignored.
Note that the decoder automatically adds filler word transitions (such as
the silence word) at every state (i.e., from a state to itself; assuming the
-fsgusefiller
argument is
TRUE
). This is the principal mechanism for
transparently allowing optional silences to occur in between any two words
in any sentence allowed by the FSG.
Comment lines can also be embedded anywhere in the file.
Any line that begins with the #
character is
treated as a comment line. Blank lines are also allowed anywhere in the file.
-phonetpfn
argument,
is actually a counts file, indicating the frequency with which
transitions between any pair of phonemes take place. This information can be
easily obtained from some suitable training text. Each line in the file
specifies a source phoneme, a destination phoneme, and the associated count
for transitions from the former to the latter. Comment lines are allowed,
indicated by a #
character in the first column.


This project template is the basis of an expansion board for the 1802/Mini microcomputer based on the CDP1802 processor.
This base project includes a PCB edge defined as the same size as the 1802/Mini Processor PCB with an expansion header and mounting holes placed correctly to align the two boards.
The board outline looks like the following:
(c)2021 David Madole


Did you ever stop to think. and forget to start again?
As A.A Milne said. Some people talk to animals. Not many listen though. That's the problem.
Some people talk to animals. Not many listen though. That's the problem.


emacs hints
Getting started if you've never used emacs before
If you want to use emacs to create and edit a new file (let’s call it hello.cpp), then on a terminal, type:
$ emacs hello.cpp
Once emacs is open, you can start editing the file immediately. To move around, use the arrow keys.
emacs commands usually take the form C-x C-c. This means press and hold the control key while pressing the x key, then next press and hold the control key while pressing the c key. In contrast, the command C-x 1 means press and hold the control and x keys, then release both and then press the 1 key.
Some useful commands are:
- C-x C-c closes emacs
- C-x C-s saves the current file
- C-x 1 closes all other panes except the current one (you can use this close the help panel)
- C-g at any point in a command will cancel the command
- C-k "kills" or cuts the current line, and C-y "yanks" or pastes the line back at the cursor location


class PseudoDispatcherError : Throwable
Thrown when errors occur during assembly.
Todo
split this into AssemblerUserError and AssemblerError
<init> |
PseudoDispatcherError(msg: String? = null) PseudoDispatcherError(errorLine: Int, e: Throwable) |
line |
var line: Int? |
toString |
fun toString(): String |


Awal Suleman, the pitch invader, has been granted bail
by Adu SarpeahAwal Suleman, the pitch invader who got on to the Cape Coast pitch while the Black Stars of Ghana were playing against South Africa has been granted bail by the Cape Coast Police.
The bail conditions remains unclear but the Central Regional RFA boss Mr Robert Duncan was instrumental in acquiring the bail for the accused. Nonetheless,the Police are making efforts to process him before the law court.
READ ALSO:-– 6 facts about the young man who invaded the pitch during Ghana – South Africa match
As a reminder, Awal Suleman stepped onto the pitch around the 84th minute of Ghana’s game with the Bafana Bafana of South Africa. It’s however worth knowing that Awal Suleman is a student nurse and a final year student of the Nalerigu Nursing Training School.


Loading...
Director of the Smart Kids, served from 1972 to 1977.
Four members of the Presbyterian Church of the local area opened the Smart Kids on January 29, 1962, with 14 children. These 4 parents wanted to create a safe, nurturing place for their young preschool age children to play. Little did they know that the little preschool would grow to educate thousands of children and become a pillar in the community and beyond! It became possible thanks to Christopher Smith, a teacher here at the time, which was hired as director in February 1972, after Bella Coughlin and Ann Johnson. Over Christopher's appointment as the director, the school grew in leaps and bounds expanding to 180-230 children enrolled per year that became a great achievement for Smart Kids.
As enrollment increased, more classrooms were added including one classroom in the lower building for a total of 5 classrooms. In 1980, afternoon classes were added so the schedule was 8:30 - 11:30 am and 12:00 - 3:00 pm, with an extended day on either end of the day. With very few nursery schools in the area, the classes were full with a long waiting list.
The teachers at the Smart Kids have always been a consistent source of education, expertise, love and encouragement. Several teachers have been teaching here for 26-32 years and have formed lifelong friendships. This tradition was established by our third director, Christopher Smith. Today, all teachers in our team are highly educated in early childhood education and continue to gain information in this field. We are a close-knit family committed and dedicated to providing the best possible preschool program! It is our life's work!
Our approach to learning makes all the difference, and the research shows it!
Little minds are wide open and ready to learn, and we have a unique way of encouraging children to become life-long learners. A recent study of 5000 Smart Kids children using the nationally-recognized BRIGANCE Early Childhood Screens III found that our students are exceeding expectations on their assessments. all this became possible thanks to teachers and families cooperation.
Teachers are at the heart of any program at Smart Kids and are selected for their educational background and experience in early childhood education. Teachers must have the ability to create a safe, nurturing atmosphere in the classroom. All teachers and staff meet the State requirements for working with children in a preschool/child care environment. Continuing professional development is standard so teachers are up-to-date on child development and are part of creating a high-quality learning environment for young children.
Families are critical partners in children's learning. The home-school connection includes progress meetings with teachers and online access to information about current lessons, interactive books and videos, classroom activities, and relevant resources about child development. Families are encouraged to take an active part in their child's education.


User Friendly
Lorem ipsum dolor sit amet, consectetur adipisicing typesting industry text.
lorem ipsum dolor sit amet, consectetur adipisicing elit. Esse unde blanditiis nostrum mollitia aliquam sed. Numquam ipsum unde repellendus similique autem non ab quibusdam enim provident distinctio! Fugit tenetur, iusto.
features
Lorem ipsum dolor sit amet, consectetur adipisicing typesting industry text.
Lorem ipsum dolor sit amet, consectetur adipisicing typesting industry text.
Lorem ipsum dolor sit amet, consectetur adipisicing typesting industry text.
Lorem ipsum dolor sit amet, consectetur adipisicing typesting industry text.
Lorem ipsum dolor sit amet, consectetur adipisicing typesting industry text.
Lorem ipsum dolor sit amet, consectetur adipisicing typesting industry text.
How It Works?
Appropriately implement one-to-one catalysts for change vis-a-vis wireless catalysts for change. Enthusiastically architect adaptive e-tailers after sustainable total linkage.
Read MoreUpdate
Appropriately implement one-to-one catalysts for change vis-a-vis wireless catalysts for change. Enthusiastically architect adaptive e-tailers after sustainable total linkage.
Read MoreScreenshots
Team
UX Consultant
Web Developer
UI/UX Designer
Digital Marketer
Pricing
Team
UX Consultant
Web Developer
Team
UX Consultant
Web Developer
Screenshots


Pydoop applications are run via the pydoop submit command. To start, you will need a working Hadoop cluster. If you don’t have one available, you can bring up a single-node Hadoop cluster on your machine – see the Hadoop web site for instructions.
If your applications is contained in a single (local) file named wc.py, with an entry point called __main__ (see Writing Full-Featured Applications) you can run it as follows:
pydoop submit --upload-file-to-cache wc.py wc input output
where input (file or directory) and output (directory) are HDFS paths. Note that the output directory will not be overwritten: instead, an error will be generated if it already exists when you launch the program.
If your entry point has a different name, specify it via --entry-point.
The following table shows command line options for pydoop submit:
| Short | Long | Meaning |
|---|---|---|
| --num-reducers | Number of reduce tasks. Specify 0 to only perform map phase | |
| --no-override-home | Don’t set the script’s HOME directory to the $HOME in your environment. Hadoop will set it to the value of the ‘mapreduce.admin.user.home.dir’ property | |
| --no-override-env | Use the default PATH, LD_LIBRARY_PATH and PYTHONPATH, instead of copying them from the submitting client node | |
| --no-override-ld-path | Use the default LD_LIBRARY_PATH instead of copying it from the submitting client node | |
| --no-override-pypath | Use the default PYTHONPATH instead of copying it from the submitting client node | |
| --no-override-path | Use the default PATH instead of copying it from the submitting client node | |
| --set-env | Set environment variables for the tasks. If a variable is set to ‘’, it will not be overridden by Pydoop. | |
| -D | Set a Hadoop property, e.g., -D mapred.compress.map.output=true | |
| --python-zip | Additional python zip file | |
| --upload-file-to-cache | Upload and add this file to the distributed cache. | |
| --upload-archive-to-cache | Upload and add this archive file to the distributed cache. | |
| --log-level | Logging level | |
| --job-name | name of the job | |
| --python-program | python executable that should be used by the wrapper | |
| --pretend | Do not actually submit a job, print the generated config settings and the command line that would be invoked | |
| --hadoop-conf | Hadoop configuration file | |
| --disable-property-name-conversion | Do not adapt property names to the hadoop version used. | |
| --mrv1 | Force Pydoop to use MRv1, even if MRv2 is available. The InputFormat and OutputFormat classes must be MRv1-compliant | |
| --local-fs | Use a patched pipes submitter to sidestep a Hadoop security bug triggered when using local file systems | |
| --do-not-use-java-record-reader | Disable java RecordReader | |
| --do-not-use-java-record-writer | Disable java RecordWriter | |
| --input-format | java classname of InputFormat. Default value depends on the mapreduce version used | |
| --output-format | java classname of OutputFormat. Default value depends on the mapreduce version used | |
| --job-conf | Set a Hadoop property, e.g., mapreduce.compress.map.output=true | |
| --libjars | Additional comma-separated list of jar files | |
| --cache-file | Add this HDFS file to the distributed cache as a file. | |
| --cache-archive | Add this HDFS archive file to the distributed cacheas an archive. | |
| --entry-point | Explicitly execute MODULE.ENTRY_POINT() in the launcher script. | |
| --avro-input | Avro input mode (key, value or both) | |
| --avro-output | Avro output mode (key, value or both) |
When working on a shared cluster where you don’t have root access, you might have a lot of software installed in non-standard locations, such as your home directory. Since non-interactive ssh connections do not usually preserve your environment, you might lose some essential setting like LD_LIBRARY_PATH.
For this reason, by default pydoop submit copies some environment variables to the driver script that launches the job on Hadoop. If this behavior is not desired, you can disable it via the --no-override-env command line option.


Public Member Functions | |
| (NSString *) | - stringWithObject: |
| Return JSON representation (or fragment) for the given object. | |
Properties | |
| NSArray * | errorTrace |
| Return an error trace, or nil if there was no errors. | |
| NSUInteger | maxDepth |
| The maximum recursing depth. | |
| NSUInteger | maxDepth |
| The maximum recursing depth. |
NSNumber instances created with the +initWithBool: method are converted into the JSON boolean "true" and "false" values, and vice versa. Any other NSNumber instances are converted to a JSON number the way you would expect.
| - (NSString*) stringWithObject: | (id) | value |
Returns a string containing JSON representation of the passed in value, or nil on error. If nil is returned and error
is not NULL, *error
can be interrogated to find the cause of the error.
| value | any instance that can be represented as a JSON fragment |
- (NSArray*) errorTrace [read, copy, inherited] |
Note that this method returns the trace of the last method that failed. You need to check the return value of the call you're making to figure out if the call actually failed, before you know call this method.
- (NSUInteger) maxDepth [read, write, assign, inherited] |
Defaults to 512. If the input is nested deeper than this the input will be deemed to be malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can turn off this security feature by setting the maxDepth value to 0.
- (NSUInteger) maxDepth [read, write, assign, inherited] |
Defaults to 512. If the input is nested deeper than this the input will be deemed to be malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can turn off this security feature by setting the maxDepth value to 0.


I've been here before
But always hit the floor
I've spent a lifetime running
And I always get away
But with you I'm feeling something
That makes me want to stay
I'm prepared for this
I never shoot to miss
But I feel like a storm is coming
If I'm gonna make it through the day
Then there's no more use in running
This is something I gotta face
If I risk it all
Could you break my fall?
How do I live? How do I breathe?
When you're not here I'm suffocating
I want to feel love, run through my blood
Tell me is this where I give it all up?
For you I have to risk it all
'Cause the writing's on the wall
A million shards of glass
That haunt me from my past
As the stars begin to gather
And the light begins to fade
When all hope begins to shatter
Know that I won't be afraid
If I risk it all
Could you break my fall?
How do I live? How do I breathe?
When you're not here I'm suffocating
I want to feel love, run through my blood
Tell me is this where I give it all up?
For you I have to risk it all
'Cause the writing's on the wall
The writing's on the wall
How do I live? How do I breathe?
When you're not here I'm suffocating
I want to feel love, run through my blood
Tell me is this where I give it all up?
How do I live? How do I breathe?
When you're not here I'm suffocating
I want to feel love, run through my blood
Tell me is this where I give it all up?
For you I have to risk it all
'Cause the writing's on the wall
Comments


Extensions/Apps API Owners
API
Owners
Notes
{{#entry:owners.apis}}
{{entry.apiName}}
{{?entry.owners}} {{#owner:entry.owners}}
{{owner.username}}
{{^owner.last}}, {{/owner.last}} {{/entry.owners}} {{:}}
No owners.
{{/entry.owners}}
{{entry.notes}}
{{/owners.apis}}


Inspired by the modernist graphic design movement which rose to popularity in the 1950's, this framework was built from the ground up with the twelve-column grid system in mind. This is, quite possibly, the worlds most pretentious front-end css framework. (Eat it Tyler Brûlé).
Chocolate is an homage to the modernist graphic design movement which rose to popularity in the 1950's. This framework was built from the ground up with the twelve-column grid system in mind. More information can be found here
Chocolate is a responsive CSS framework which is not only lightweight and highly customizable, but also very simple to use. Built on top of SASS, chocolate ships as standard CSS but can also be compiled from source.
Chocolate can be installed using the Bower package manager via terminal. Run this command in terminal and let Bower work it's magic.
bower install chocolate
The simplest and fastest way to get started is to include the style CSS file in your project. Just add this file to the head of your html file.
And, if you'd like, you can also clone the GitHub repo via terminal. Chocolate is a work in progress, please feel free to contribute to the project.
Monocle ipsum dolor sit amet boeing 787 artisanal bureaux ut handsome airport. Gaggenau first-class tempor boulevard tote bag eu wardrobe cupidatat Asia-Pacific mollit Baggu. Id hand-crafted ryokan, exclusive remarkable sophisticated boulevard nulla conversation essential laborum.
Grids are good for the soul - R
Button sizes can be applied to any button style. Just append the size class btnLarge
, btnSmall
orbtnBlock
Images are responsive to their parent wrapper. In this case a five col
grid layout.
A border can be added to every image by applying the .border
class.
Filters can be applied to any image. Simply append the .greyscale
class. Greyscale images revert to full color on :hover
Append the .disco
and .round
classes
| Colour | Hex | RGBA |
|---|---|---|
| Primary | #F4F4EC | (123,123,123) |
| Secondary | #F4B603 | (123,123,123) |
The .circleIcon
class can be used as a wrapper for text as well as iconFonts. Other helper classes, such as .success
can also be applied
Alternate .circleIconAlt
icons with helper classes applied. Similar to buttons.


{{#block "title" }}
Admin
{{/block }}
{{#block "styles" }} {{/block }}
NodeAdmin
You have 0 new notifications.
See all notifications.
Profile
Logout
{{#block "content" }} {{/block }}
{{#block "scripts" }} {{/block }}


This big commercial port is geared to dealing primarily with commercial vessels, so visiting yachts might find it more convenient to clear in at nearby Lucaya, Sunrise or Xanadu Marinas.
Be very street-wise here. The crime rate is high (not only for theft), so take care where you walk, especially at night, and secure all your property as best you can. Locking your boat securely at night and when away from it is a must, as is locking your dinghy and outboard when tied to the boat and ashore at a dinghy dock.
Review main Bahamas Clearance information.
If you need to enter the harbour, first contact the Port Authority on VHF Ch.16.
Freeport Harbour itself is a commercial harbour with no place for yachts except in an emergency. The marinas to the east (Xanadu Beach, Sunrise and Port Lucaya) provide a more comfortable port of call.
The Lucaya area is a big development, after Nassau probably the biggest in the Bahamas. If you like hustle and commerce you’ll find much to your liking.


MY Website
This is my website for my blog. I disclose my life, my perspectives, my personally identifiable information, my leisure, etc.
You can also get in touch with me here either through e-mail, social media or contact number.
My posts can be read free of charge.


Toll in Philippine quakes climbs to 21
by AFPThe death toll in two powerful quakes that struck the southern Philippines in the past week has risen to 21, authorities said Sunday, as survivors struggled to access food and water.
The 6.6-magnitude and 6.5-magnitude quakes hit the island of Mindanao two days apart, destroying buildings and displacing tens of thousands of residents.
Some villagers staying under tents near a highway were begging for help from passing motorists, carrying placards asking for food and water, TV footage showed.
Rescuers had found more bodies, many crushed by falling debris and landslides caused by the violent shaking, the national disaster council said.
The quakes also left 432 residents injured with two people still missing, it added.
Thursday's big quake was the third since mid-October in the Mindanao region, which makes up a third of the Philippines.
Temporary shelters have been set up to house more than 20,000 displaced individuals -- many already there since the first quake struck on October 16, leaving seven people dead.
On Sunday, rescuers continued their evacuation of families whose houses were endangered by landslides, while several residents trapped in mountainous villages had been airlifted to safety.
The government said aid has reached affected communities and instructed people sleeping near the road to go to evacuation centres for help.
The Philippines suffers regular tremors as part of the Pacific "Ring of Fire", an arc of intense seismic activity that stretches from Japan through Southeast Asia and across the Pacific basin.


Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:


VAR rules out Chelsea winner in eight-goal thriller against nine-man Ajax
Chelsea came from three goals down to snatch a 4-4 draw from a roller-coaster Champions League encounter with Ajax.
Frank Lampard’s side scored two own-goals and two penalties while Ajax had two players sent off on a chaotic night at Stamford Bridge.
Having trailed 4-1, the Blues battled back to level the scores and then Cesar Azpilicueta thought he had scored a winner, only for VAR to step in.
Nevertheless, a point from a breathless match keeps Chelsea firmly in the race to qualify from Group H.
Chelsea’s 1-0 win in Amsterdam last month had put them in control of the group but Ajax looked set to wrest it back following a lightning start.
Ajax fans were barred from attending following crowd trouble during their win over Valencia, although that did not stop hundreds from travelling to west London anyway.
The few that did make it in were celebrating inside two minutes, only to be silenced 60 seconds later in a breakneck opening.
Ziyech’s swirling free-kick flew over Kepa and hit the inside of the post, before smacking the Brazilian keeper full in the face and bouncing into the net.
It was a freakish goal but Ziyech’s delivery was superb, and for the third time in little more than half an hour Chelsea’s inability to defend crosses had cost them.
Things got even bleaker for the Blues 10 minutes into the second half. Ziyech found Donny Van de Beek in the area and the midfielder was given the time and space to turn and fizz a low shot past Kepa.
Chelsea reduced the deficit to two again when Pulisic’s cross was prodded towards goal by Abraham and Azpilicueta made sure at the far post.
Then in another crazy 60 seconds Daley Blind was shown a second yellow card for fouling Abraham and Joel Veltman followed him down the tunnel for handling Callum Hudson-Odoi’s shot.
Stamford Bridge was rocking as Jorginho rolled in his second penalty of the night, and it was pandemonium moments later when sub Reece James lashed home from a corner to equalise.
VAR then ruled out Azpilicueta’s dramatic late ‘winner’, spotting a handball among the pinball in the Ajax box, and visiting keeper Andre Onana denied Michy Batshuayi at the death as the Dutch champions held on.
READ MORE
Guardiola borrows phrase from Klopp as he bids to draw line under Mane row


MyProfile
None
Vegetarian
Vegan
Gluten Free
None
Select preference
Click here and check our vegetarian diet
Click here and check our vegan diet
Click here and check our glutenFree diet
Notification Switch
Off
On
Logout


|
Xenomai
3.0.4
|
Functions | |
| int | a4l_sys_open (const char *fname) |
| Open an Analogy device. More... | |
| int | a4l_sys_close (int fd) |
| Close an Analogy device. More... | |
| int | a4l_sys_read (int fd, void *buf, size_t nbyte) |
| Read from an Analogy device. More... | |
| int | a4l_sys_write (int fd, void *buf, size_t nbyte) |
| Write to an Analogy device. More... | |
| int a4l_sys_close | ( | int | fd | ) |
Close an Analogy device.
| [in] | fd | File descriptor as returned by a4l_sys_open() |
Referenced by a4l_close(), and a4l_open().
| int a4l_sys_open | ( | const char * | fname | ) |
Open an Analogy device.
| [in] | fname | Device name |
Referenced by a4l_open().
| int a4l_sys_read | ( | int | fd, |
| void * | buf, | ||
| size_t | nbyte | ||
| ) |
Read from an Analogy device.
The function a4l_read() is only useful for acquisition configured through an Analogy command.
| [in] | fd | File descriptor as returned by a4l_sys_open() |
| [out] | buf | Input buffer |
| [in] | nbyte | Number of bytes to read |
| int a4l_sys_write | ( | int | fd, |
| void * | buf, | ||
| size_t | nbyte | ||
| ) |
Write to an Analogy device.
The function a4l_write() is only useful for acquisition configured through an Analogy command.
| [in] | fd | File descriptor as returned by a4l_sys_open() |
| [in] | buf | Output buffer |
| [in] | nbyte | Number of bytes to write |


Yan (Peter) Li / Sep 2015
https://github.microstrategy.com/pages/yali/web-performance-and-future
View online
http://<IP_ADDRESS>/velocity/pdf
Download PDF
|
Hope it helps!
| Frontend | + | Backend |
| Year | Requests | Avg. Transfer Size | Growth |
|---|---|---|---|
| 12/17/2010 | 82 | 655 KB | N/A |
| 12/15/2011 | 90 | 810 KB | 24% |
| 12/15/2012 | 99 | 1163 KB | 44% |
| 12/15/2013 | 112 | 1607 KB | 38% |
| 12/15/2014 | 117 | 1834 KB | 14% |
| 08/15/2015 | 128 | 2008 KB | 9% |
| Site | Requests | Size | Time |
|---|---|---|---|
| www.163.com | 434 | 3.6 MB | 1.7 min |
| www.taobao.com | 116 | 1.3 MB | 40.35 s |
| www.jd.com | 79 | 1.6 MB | 1.2 min |
| www.microsoft.com | 76 | 2.2 MB | 16.79 s |
| www.microstrategy.com | 81 | 1.1 MB | 37.29 s |
| Desktop | Mobile | |||
|---|---|---|---|---|
| Data rate | Latency | G | Data rate | Latency |
| 10 Mbps 100 Mbps 1 Gbps |
65-145 ms | 2G | 100-400 Kbps | 300-1000 ms |
| 3G | 0.5-1 Mbps | 100-500 ms | ||
| 4G | 1-50 Mbps | <100 ms |
http://www.webperformancetoday.com/2012/04/02/mobile-versus-desktop-latency/
http://chimera.labs.oreilly.com/books/1230000000545/ch07.html#_brief_history_of_the_g_8217_s
What rules/best practices do you know?
| redirections | DNS | TCP | request response |
rendering |
| minimize redirection |
reduce lookups |
image spriting minify |
caching domain sharding |
css on top js at bottom |
Similar graph: http://www.w3.org/TR/navigation-timing/#processing-model
| redirections | DNS | TCP | request response |
rendering |
| minimize redirection |
<meta http-equiv="refresh" content="5; url=http://example.com/">
window.location.reload(true); // document.location?
window.location.replace("http://www.z.cn");
window.location.assign("http://www.z.cn");
window.location.href = "http://www.z.cn";
window.location = "http://www.z.cn";
window.history.forward();
window.history.back();
window.history.go(-1);
| redirections | DNS | TCP | request response |
rendering |
| reduce lookups |
chrome://histograms/DNS.ResolveSuccess
<link rel="dns-prefetch" href="www.microstrategy.com">
Hint browser to pre-resolve these names
Supported: Chrome, Firefox, Safari, IE9+
| redirections | DNS | TCP | request response |
rendering |
| image spriting minify |
| Host A | -----SYN-----> | Host B |
| <---SYN ACK--- | ||
| -----ACK-----> |
Tuning initcwnd for optimum performance
Linux TCP/IP tuning for scalability (tcp_slow_start_after_idle)
| redirections | DNS | TCP | request response |
rendering |
| caching domain sharding |
Caching Tutorial by Mark Nottingham
Check your pages with REDbot
| Browser | 2(1999) simultaneous connections 6-8(2010) simultaneous connections | Domain |
http://www.mobify.com/blog/domain-sharding-bad-news-mobile-performance/
<link rel="prefetch" href="next-page.css">
<link rel="subresource" href="critical.js">
| redirections | DNS | TCP | request response |
rendering |
| css on top js at bottom |
http://www.smashingmagazine.com/2015/08/understanding-critical-css/
Alva Cheung
“Load non-critical features asynchronously”
<link rel="prerender" href="http://www.microstrategy.com">
Initiate background pre-render of entire page
Supported: Chrome, Firefox
Why care?
| Static Web Pages | Interactive |
|---|---|
|
|
|
Speed up runtime method binding by remembering the results of a previous method lookup directly at the call site
function addTwoThings(thing1, thing2) {
return thing1 + thing2;
}
addTwoThings(1, 2);
addTwoThings(100, 200); /* fast */
addTwoThings('a', 'b'); /* slow */
function Dog(name) {
this.name = name;
}
var dog1 = new Dog('Jim'); /* hidden class C1 */
var dog2 = new Dog('Bin'); /* hidden class C2 */
dog2.gender = 'male';
onresize, onscroll...etc
var $div = $('#content')
var elements = ['a', 'b', 'c', 'd'];
for(var i=0,l=elements.length; i<l; i++) {
$div.append(elements[i]);
}
var $div = $('#content')
var elements = ['a', 'b', 'c', 'd'];
for(var i=0,l=elements.length; i<l; i++) {
// one line of evilness
var a = $(window).scrollTop;
$div.append(elements[i]);
}
.class ul li a { color: blue; }
border-radius; box-shadow; transform,filter; :nth-child; position:fixed;
*; [disabled]; [type="text"]
| Request | Response | |
|---|---|---|
| HTTP/2 Client | HTTP/1.1 Server | HTTP/2 Server |
|
|
|
HTTP + SSL/TLS = HTTPS
Equally Important!
“TLS has exactly one performance problem: it is not used widely enough.
Everything else can be optimized.”
Dive deeper: YouTube - Is TLS Fast Yet?
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
Strict-Transport-Security: max-age=10886400; includeSubDomains
Browser remembers (for specified max-age period) that it should automatically request HTTPS resources for this site and its subdomains.
HSTS eliminates HTTP --> HTTPS redirects.
Web Development Reading List: https://wdrl.info/
WeChat ID: peterleepersonal


QueryStreams
New in 2.4.0
A QueryStream provides a ReadStream interface for Queries. The Stream interface allows us to simply "plug-in" to other Node streams such as http responses and write streams so everything "just works" out of the box.
Model.where('created').gte(twoWeeksAgo).stream().pipe(writeStream);
This api provides a more natural node-like api than than what is presently available with the Query#each method.
var stream = Model.find().stream();
stream.on('data', function (doc) {
if (somethingHappened) {
this.pause()
var self = this
return bakeSomePizza(function () {
self.resume()
})
}
res.write(doc)
})
stream.on('error', function (err) {
// handle err
})
stream.on('close', function () {
// all done
})
QueryStreams can be pause
d and resume
d like you’d expect which allows us to stop streaming while waiting for other processes to complete for example.
QueryStreams also manage the underlying Cursors better than what we had in Query#each
such that after the QueryStream has completed, whether due to an error, reaching the end of the cursor, or being manually destroyed, the internal Cursor is properly cleaned up.
Events
data
The data
event emits a Mongoose Document as its only argument.
stream.on('data', function (doc) { });
error
Emitted if an error occurs while streaming documents. This event will fire before the close
event.
close
Emitted when the stream reaches the end of the cursor, or an error occurs, or the stream is manually destroy
ed. After this event, no more events will be emitted.
Properties
QueryStream.readable
Boolean, tells us if the stream is readable or not. true
by default, false
after calling destroy
or an error occurs or the stream is closed.
var stream = Model.find().stream();
stream.readable // true
QueryStream.paused
Boolean, tells us if the stream is currently paused.
var stream = Model.find().stream()
stream.paused // false
stream.pause()
stream.paused // true
Methods
QueryStream#pause
Pauses the stream. data
events will stop until resume()
is
called.
stream.pause();
QuerySteam#resume
Resumes the QueryStream.
stream.resume()
QueryStream#destroy
Destroys the stream. No more events will be emitted after
calling this method.
stream.destroy([err])
If the optional err
argument is passed, an error
event will be emitted with the err
before close
is emitted.
QueryStream#pipe
pipe
s the QueryStream into another WritableStream. This method is inherited from Stream.
Model.find().stream().pipe(writeStream [, options]);
This could be particularily useful if you are, for example, setting up an API for a service and want to stream out the docs based on some criteria. We could first pipe the QueryStream into a sort of filter that formats the stream as an array before passing on the document to an http response.
var format = new ArrayFormatter;
Events.find().stream().pipe(format).pipe(res);
As long as ArrayFormat
implements the WriteStream API we can stream large formatted result sets out to the client. See this gist for a hacked example.


This is a lightweight jQeury plugin with Bootstrap style that can be used to create a table tree that can be expanded and collapsed.
Please include the bootstrap.min.css,and make sure the bootstrap.min.css behide it.
 <link rel="stylesheet" href="bootstrap.min.css"> <link rel="stylesheet" href="src/bootstrap.tableTree.css">
To use tableTree, you’ll need to make sure both the tableTree and jQuery scripts are included. If you’ve already got jQuery (you can test by opening your JavaScript console and typing !!window.jQuery — if it says true, you have jQuery), you don’t need to add the first line.

Before create a table tree,it just needs a container to load the table.

We’ve been through so much together, and I’m pleased to say the finish line is near. Our journey is almost over, just one more thing left to do. The JavaScript is on the right (make sure to put it in a script tag, and change #table to whatever your table’s element is).
$(function() { $('#table').tableTree({ data: dataList, //json formatted table data titles: titles, //header data }); });
Although it’s lightweight, table-tree comes with a range of options to customise your table. Here’s the default options provided. You can add, remove, or completely skip out the options object. It’s up to you.
$(function() { $('#table').tableTree({ data: dataList, //json formatted table data titles: titles, //header text headerSetting: { //Header style settings background-color: "#99CCCC",//Background color of the header font-size: "16px", //The text size of the header color: "#ffffff" //The text color of the header }, cellSetting: { //Cell style settings color: "#4b5f72", //The text color of the Cell font-size: "16px" //The text size of the Cell }, oddRowBgColor: "#f7fafa", //Odd line of background color evenRowBgColor: "#ffffff", //Even line of background color expanded: function(node) { //A callback function when a row is expanded console.log('expanded'); console.log(node); }, collapsed: function(node) {//A callback function when a row is folded console.log('collapsed'); console.log(node); } }); });


Open Data
Hyper Island Singapore Edition
Edward Ocampo-Gooding
Daniel Beauchamp
Canada, eh?
Ottawa
Lumberjacks
Beavers
Maple Syrup
Open Data Ottawa
Open Data
WTF?
Open Data is...
Freely Accessible
And
Machine Readable
(and free to distribute/modify)
Mmmm...raw data
Mmmm...raw data on a map
Ottawatrash.ca
Stumble safely
Dog park finder
Fix my street
Don't Eat.at
Expense Visualizer
Proracunski Kalkulator
MBTA Visualizations
Artisanal Data
By
@lukec
Artisanal Data
By
@lukec
Artisanal Data
By
@lukec
Artisanal Data
By
@lukec
Sweet music
Sweet music
Where is this data?
Cities
National Governments
Intl' Organizations
In Space
You
Open Street Maps
How about in Ottawa?
Run a Hackfest
Why do cities release data?
Let's discuss
Why do companies release data?
Let's discuss
Case study:
Underperforming mine in Ontario, Canada. Cost of acquiring an oz. of gold = $360, and the annual production ate is 53,000 oz.
Goldcorp releases geographic data about the mine, and hold a $500K contest for people to find gold
The winner is a company in Australia. Of the top 5 locations they found, Goldcorp struck gold at 4 of them.
Now the mine produces gold at $59 an ounce, and it produces 504,000 oz. a year.
(http://www.fastcompany.com/44917/he-struck-gold-net-really)
Case study: Kaggle
Dangers of Open Data
Let's discuss


First Decline
Help Me Pick New Logo Through 3 April 2016!
I am in the process of running a logo design contest on 99designs and have created a poll with 6 of the best logo designs I've received. I would love for you to vote on the logo design. It only takes a minute.
Like Sci-Fi? Read My New Online Fiction Series.
Do you like Sci-Fi? While I finish up my next novel, I have started an online fiction series called Forbearance. Picking up from the canteen scene in Bellicose, we meet Keius Minjen, a postal marine, as he tries to survive the battle planet Guna to exact revenge and one day liberate his homeland.
Sign-up if you want me to send you news about upcoming installments of Forbearance or my other writings.
%TOC%
—–+ StarSystems/EpsilonIndi – Chronology/FirstDecline
—–++ A World Divided (2800-2985)
Von Brenan’s World was, by the end of the Chronology/FirstExpanse, a thriving colony. Largely self-sufficient, it was exporting large quantities of refined metals and minerals. It had a population of nearly 800,000 people, some 92% of which lived in the balmy equatorial regions.
When Chronology/HyperspaceVortices first started causing trouble, the StarSystems/EpsilonIndi system was hit very hard. As starships became more infrequent, money became scarce. In 2811, a series of severe crop failures (due to a very nasty local virus) created major food shortages. Many were forced to start experimenting with the local lifeforms, the most complex being little more than bacterial mats. Nearly 100,000 colonists died of starvation and poisoning before the few edible organisms were discovered.
The divide between the equatorial Hawkinian peoples and their hardier, more self-sufficient Coldblood neighbors became permanent during this early part of the Chronology/FirstDecline. A confederation of settlements in the higher latitudes of the Northern Hemisphere officially declared their independence in 2819. The Isaactown administration, still reeling from the crop failure and ensuing famine of 2811 could do little.
For the next century the population of Van Brenen’s world dwindled to about 600,000 people. Contact with Earth diminished to the point where the average of only one ship every ten years made it through. One thing that was maintained during this darkest period was technology. With a good supply of natural resources, the equatorial colonists managed, if not always very easily, to hang on to key technologies, particularly medicinal and computational.
During the 2900s the population finally began to rebound, and by 2950, Von Brenen’s World was up to 1.2 million. A growing population put demands upon agriculture and living space, and slowly Hawkinians began moving into some of the deeper valleys in the higher latitudes, thus bringing renewed conflict with the Coldbloods.
—–++ The Coldblood Wars (2985-3004)
Leaders on both sides tried to keep hostilities at a minimum, but it was only a matter of time. In 2985, a group of Coldblood prospectors, angry over Hawkinians homesteads being built in a small valley they had been using for generations, killed the settlers. The outrage among the equatorial population was too much, and the Isaactown government collapsed, felled in a bloodless coupe by General Anton Devries, who vowed revenge. Thus began the First Coldblood War (2985-2996), which ended in a ceasefire that amounted to little more than a stalemate.
The Second Coldblood War (2999-3004) saw the smaller but more skilled Coldblood forces wreak great devestation on the agriculture base of Hawkinian society, risking mass starvation once again. In the end, however, the Coldbloods simply did not have the numbers or the equipment, and despite their early successes, they were ultimately defeated, signing an official surrender in 3004. It was of little credit to the Hawkinians that they swept into many Coldblood settlements, destroying them and driving the defeated peoples to the Cold Side of Van Brenen’s World, but such was the mood of the Hawkinian populace that no other outcome was possible.
—–++ The Empire of the Devries (3004-3520)
Now Isaactown was the center of a vast empire, and General Devries, buoyed by his great successes, was able to swiftly bring down the last vestiges of the old democratic system, naming himself Emperor Simon I. He and his descendants would rule much of Von Brenen’s world for the next five centuries.
While Von Brenen’s World may have been cut off from Earth and the other colonies, under the stable (if not always kindly) rule of the Devries, the Hawkinians took full advantage of the lands wrested from the Coldbloods, and turned the moon into a rather impressive industrial complex. The Empire of the Devries resembled in many details the old Corporations of the Chronology/EmergenceEra, with the Emperor as a CEO and President of the Board. Society became highly stratified, with proficiency tests given during the teenage years determining not only one’s occupation, but whether one would enter the elites, the middle class or be relegated to the common laborers.
By 3150, the first explorations of the rest of the Epsilon Indi system began, though Von Brenen’s World was sufficiently mineral rich that other than research stations on some of the minor moons and planets, there was little to be gained. Never the less, the Devries were keen to keep a toehold in space, and set up a number of permanent outposts on other bodies in the Epsilon Indi system.
For the remaining Coldbloods, now eeking out an existence on the harsh Cold Side of Von Brenen’s World, none of this meant very much. They became a secretive, fearful people, losing much of their technology, though they remained skillful enough in breeding that they managed to turn a few varieties of algae and bacteria into a nutritous food source. Still, despite all the difficulties of their life, their populations too begin to grow, largely unknown to people on the other side of the moon.
In time, of course, even the Empire of Devries, as successful as it its early years had been, began to descend into a cruel police state. The later Devries were all too often a combination of incompetence, corruptability and intense paranoia. Political prisoners, along with many criminals, were sent to the Cold Side, and though many died, those that remained often escaped the horrific gulags and began to swell the Coldbloods not only with strong workers, but also scientists, engineers, technicians and even a few scholars.
Though the Devries maintained an iron grip on much of their empire, opposition began to grow. Secret organizations sprouted up, sabotage of industry and assassinations of high-level functionaries (not to mention a few kinsmen of the Emperors) increased.
Much worse for the Devries were the secret contacts that Coldblood clans began making with various opposition groups beginning around 3490. The Coldbloods, now in possession of hundreds of skilled engineers and technicians, and sitting atop some of the most resource-rich regions on the entire moon, created networks to smuggle in weapons and explosives. In 3487, the next step was taken when they formed a tribal confederation under the High Chieftain Karl Bloodbeard. By the time the Devries fully understood that their old enemies were back, it was too late.
—–++ The Fall of the Empire of the Devries (3520-3542)
Beginning in 3520, provincial governments began declaring independence from the Devries. Though individually incapable of facing off against the resources of the Empire, together they began to undermine the control of the Devries. Unable to fight all the rebel provinces at once, the Emperor Charles III Devries-Say’ed (r.3501-3542) instead concentrated on the most important and left the others, thinking that in time they would have little choice but to return.
Unfortunately for the rebel provinces, they soon learned that the Coldblood confederation was not nearly as altruistic as they had thought. They invaded the provinces, seized control and imprisoned or executed anyone in the provincial governments that stood in their way, or even looked like they would stand in their way. Now with a bulwark, open warfare between the Coldbloods and the Devries began in earnest, with the first battles being fought in 3531.
For the Devries, there was little hope. They had so alienated their subjects that many took up arms against them. Still, the war lasted eleven years, and at least two million people died. In 3541, Isaactown, oldest and most beautiful city on Von Brenen’s World was besieged by an army personally lead by Karl Bloodbeard, and in 3542, tiring of a long siege, the Coldblood High Chieftain simply ordered the city razed. At least 800,000 people died, though Emperor Charles III Devries-Say’ed was not among them. He, his immediate family, a few distaff relatives and some ministers fled Von Brenen’s World in a spacecraft. The Empire of the Devries had finally fallen.
—–++ The Karlian Empire and the Rise of the Octarchy (3542-3800)
Karl Bloodbeard moved quickly to establish himself as Emperor. Various offshoots of the Devries family were publicly tried and executed. The so-called Karlian Empire was, in fact, much better than the Empire of the Devries. The remnants of the old bureaucracy were given their old jobs back, though under Karl’s closest relatives and allies’ watchful eyes. The Karlian Empire was initially modeled on the Coldblood clan system, but ultimately became a hybrid of the Devries more centrally controlled system and the looser clan model.
Unfortunately, Karl Bloodbeard’s heirs were not as capable. His son, Heinrich (3558-3575) was more interested in his veritable harem of women, and left the empire to be ruled by his clan chieftains, who were becoming terribly corrupt. Karl’s grandson, Karl II (3575-3600), was an actual mental deficient, not to mention something of a psychopath, whose reputation for enjoying the severe torture of prisoners became so black that in 3600 the clan chiefs had him assassinated.
This gave the provinces, some with Coldblood clan chiefs as governors, all the excuse they needed. They declared Karl II’s murderers traitors, refused to recognize his two sons as heirs to the throne, and declared the Empire defunct. Briefly they joined in the Von Brenan’s World Confederation, under a council made up of the governors, but that lasted less than two years. By 3620, the old empire had split into eight states, the Octarchy. Unity was now all but impossible, and the populations of the states were too weary from war and incompetence to let any empire-building ruler stand.
For the next two centuries, the Octarchy remained relatively stable. Border wars were not uncommon, though they rarely threatened the existence of any state. A mixture of governments could be found; from monarchies (the states dominated by old Karlian clan chieftains were in this category) to democracies and even a couple of dictatorships. There was little technological development during this period, though interplanetary space travel was maintained, but not nearly at the levels of the Empire of the Devries. Treaties assured that space would not be armed, and military might was concentrated in atmospheric fighters, land forces and navies.
The Octarchy represented two centuries of relative peace and prosperity. The Coldbloods and the Hawkinians were finally rejoined, and the various states of the Octarchy in fact began to actively settle the Cold Side, seeing as it was the only territory with minimal claims. Those Coldblood clans that had not taken part in the Karlian takeover in the 36th century found themselves forced to either flee to the most inhospitable regions.