| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
bzip2
This chapter contains a copy of the bzip2
man page,
and nothing else.
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] NAME
bzip2
,bunzip2
- a block-sorting file compressor, v1.0.2bzcat
- decompresses files to stdoutbzip2recover
- recovers data from damaged bzip2 files
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] SYNOPSIS
bzip2
[ -cdfkqstvzVL123456789 ] [ filenames ... ]bunzip2
[ -fkvsVL ] [ filenames ... ]bzcat
[ -s ] [ filenames ... ]bzip2recover
filename
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] DESCRIPTION
bzip2
compresses files using the Burrows-Wheeler block sorting text compression algorithm, and Huffman coding. Compression is generally considerably better than that achieved by more conventional LZ77/LZ78-based compressors, and approaches the performance of the PPM family of statistical compressors.The command-line options are deliberately very similar to those of GNU
gzip
, but they are not identical.
bzip2
expects a list of file names to accompany the command-line flags. Each file is replaced by a compressed version of itself, with the nameoriginal_name.bz2
. Each compressed file has the same modification date, permissions, and, when possible, ownership as the corresponding original, so that these properties can be correctly restored at decompression time. File name handling is naive in the sense that there is no mechanism for preserving original file names, permissions, ownerships or dates in filesystems which lack these concepts, or have serious file name length restrictions, such as MS-DOS.
bzip2
andbunzip2
will by default not overwrite existing files. If you want this to happen, specify the-f
flag.If no file names are specified,
bzip2
compresses from standard input to standard output. In this case,bzip2
will decline to write compressed output to a terminal, as this would be entirely incomprehensible and therefore pointless.
bunzip2
(orbzip2 -d
) decompresses all specified files. Files which were not created bybzip2
will be detected and ignored, and a warning issued.bzip2
attempts to guess the filename for the decompressed file from that of the compressed file as follows:If the file does not end in one of the recognised endings,
filename.bz2
becomesfilename
filename.bz
becomesfilename
filename.tbz2
becomesfilename.tar
filename.tbz
becomesfilename.tar
anyothername
becomesanyothername.out
.bz2
,.bz
,.tbz2
or.tbz
,bzip2
complains that it cannot guess the name of the original file, and uses the original name with.out
appended.As with compression, supplying no filenames causes decompression from standard input to standard output.
bunzip2
will correctly decompress a file which is the concatenation of two or more compressed files. The result is the concatenation of the corresponding uncompressed files. Integrity testing (-t
) of concatenated compressed files is also supported.You can also compress or decompress files to the standard output by giving the
-c
flag. Multiple files may be compressed and decompressed like this. The resulting outputs are fed sequentially to stdout. Compression of multiple files in this manner generates a stream containing multiple compressed file representations. Such a stream can be decompressed correctly only bybzip2
version 0.9.0 or later. Earlier versions ofbzip2
will stop after decompressing the first file in the stream.
bzcat
(orbzip2 -dc
) decompresses all specified files to the standard output.
bzip2
will read arguments from the environment variablesBZIP2
andBZIP
, in that order, and will process them before any arguments read from the command line. This gives a convenient way to supply default arguments.Compression is always performed, even if the compressed file is slightly larger than the original. Files of less than about one hundred bytes tend to get larger, since the compression mechanism has a constant overhead in the region of 50 bytes. Random data (including the output of most file compressors) is coded at about 8.05 bits per byte, giving an expansion of around 0.5%.
As a self-check for your protection,
bzip2
uses 32-bit CRCs to make sure that the decompressed version of a file is identical to the original. This guards against corruption of the compressed data, and against undetected bugs inbzip2
(hopefully very unlikely). The chances of data corruption going undetected is microscopic, about one chance in four billion for each file processed. Be aware, though, that the check occurs upon decompression, so it can only tell you that something is wrong. It can't help you recover the original uncompressed data. You can usebzip2recover
to try to recover data from damaged files.Return values: 0 for a normal exit, 1 for environmental problems (file not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt compressed file, 3 for an internal consistency error (eg, bug) which caused
bzip2
to panic.
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] OPTIONS
-c --stdout
- Compress or decompress to standard output.
-d --decompress
- Force decompression.
bzip2
,bunzip2
andbzcat
are really the same program, and the decision about what actions to take is done on the basis of which name is used. This flag overrides that mechanism, and forces bzip2 to decompress.-z --compress
- The complement to
-d
: forces compression, regardless of the invokation name.-t --test
- Check integrity of the specified file(s), but don't decompress them. This really performs a trial decompression and throws away the result.
-f --force
- Force overwrite of output files. Normally,
bzip2
will not overwrite existing output files. Also forcesbzip2
to break hard links to files, which it otherwise wouldn't do.
bzip2
normally declines to decompress files which don't have the correct magic header bytes. If forced (-f
), however, it will pass such files through unmodified. This is how GNUgzip
behaves.-k --keep
- Keep (don't delete) input files during compression or decompression.
-s --small
- Reduce memory usage, for compression, decompression and testing. Files are decompressed and tested using a modified algorithm which only requires 2.5 bytes per block byte. This means any file can be decompressed in 2300k of memory, albeit at about half the normal speed.
During compression,
-s
selects a block size of 200k, which limits memory use to around the same figure, at the expense of your compression ratio. In short, if your machine is low on memory (8 megabytes or less), use -s for everything. See MEMORY MANAGEMENT below.-q --quiet
- Suppress non-essential warning messages. Messages pertaining to I/O errors and other critical events will not be suppressed.
-v --verbose
- Verbose mode -- show the compression ratio for each file processed. Further
-v
's increase the verbosity level, spewing out lots of information which is primarily of interest for diagnostic purposes.-L --license -V --version
- Display the software version, license terms and conditions.
-1 (or --fast) to -9 (or --best)
- Set the block size to 100 k, 200 k .. 900 k when compressing. Has no effect when decompressing. See MEMORY MANAGEMENT below. The
--fast
and--best
aliases are primarily for GNUgzip
compatibility. In particular,--fast
doesn't make things significantly faster. And--best
merely selects the default behaviour.--
- Treats all subsequent arguments as file names, even if they start with a dash. This is so you can handle files with names beginning with a dash, for example:
bzip2 -- -myfilename
.--repetitive-fast
--repetitive-best
- These flags are redundant in versions 0.9.5 and above. They provided some coarse control over the behaviour of the sorting algorithm in earlier versions, which was sometimes useful. 0.9.5 and above have an improved algorithm which renders these flags irrelevant.
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] MEMORY MANAGEMENT
bzip2
compresses large files in blocks. The block size affects both the compression ratio achieved, and the amount of memory needed for compression and decompression. The flags-1
through-9
specify the block size to be 100,000 bytes through 900,000 bytes (the default) respectively. At decompression time, the block size used for compression is read from the header of the compressed file, andbunzip2
then allocates itself just enough memory to decompress the file. Since block sizes are stored in compressed files, it follows that the flags-1
to-9
are irrelevant to and so ignored during decompression.Compression and decompression requirements, in bytes, can be estimated as:
Larger block sizes give rapidly diminishing marginal returns. Most of the compression comes from the first two or three hundred k of block size, a fact worth bearing in mind when using
Compression: 400k + ( 8 x block size ) Decompression: 100k + ( 4 x block size ), or 100k + ( 2.5 x block size )bzip2
on small machines. It is also important to appreciate that the decompression memory requirement is set at compression time by the choice of block size.For files compressed with the default 900k block size,
bunzip2
will require about 3700 kbytes to decompress. To support decompression of any file on a 4 megabyte machine,bunzip2
has an option to decompress using approximately half this amount of memory, about 2300 kbytes. Decompression speed is also halved, so you should use this option only where necessary. The relevant flag is-s
.In general, try and use the largest block size memory constraints allow, since that maximises the compression achieved. Compression and decompression speed are virtually unaffected by block size.
Another significant point applies to files which fit in a single block -- that means most files you'd encounter using a large block size. The amount of real memory touched is proportional to the size of the file, since the file is smaller than a block. For example, compressing a file 20,000 bytes long with the flag
-9
will cause the compressor to allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 kbytes of it. Similarly, the decompressor will allocate 3700k but only touch 100k + 20000 * 4 = 180 kbytes.Here is a table which summarises the maximum memory usage for different block sizes. Also recorded is the total compressed size for 14 files of the Calgary Text Compression Corpus totalling 3,141,622 bytes. This column gives some feel for how compression varies with block size. These figures tend to understate the advantage of larger block sizes for larger files, since the Corpus is dominated by smaller files.
Compress Decompress Decompress Corpus Flag usage usage -s usage Size -1 1200k 500k 350k 914704 -2 2000k 900k 600k 877703 -3 2800k 1300k 850k 860338 -4 3600k 1700k 1100k 846899 -5 4400k 2100k 1350k 845160 -6 5200k 2500k 1600k 838626 -7 6100k 2900k 1850k 834096 -8 6800k 3300k 2100k 828642 -9 7600k 3700k 2350k 828642
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] RECOVERING DATA FROM DAMAGED FILES
bzip2
compresses files in blocks, usually 900kbytes long. Each block is handled independently. If a media or transmission error causes a multi-block.bz2
file to become damaged, it may be possible to recover data from the undamaged blocks in the file.The compressed representation of each block is delimited by a 48-bit pattern, which makes it possible to find the block boundaries with reasonable certainty. Each block also carries its own 32-bit CRC, so damaged blocks can be distinguished from undamaged ones.
bzip2recover
is a simple program whose purpose is to search for blocks in.bz2
files, and write each block out into its own.bz2
file. You can then usebzip2 -t
to test the integrity of the resulting files, and decompress those which are undamaged.
bzip2recover
takes a single argument, the name of the damaged file, and writes a number of filesrec00001file.bz2
,rec00002file.bz2
, etc, containing the extracted blocks. The output filenames are designed so that the use of wildcards in subsequent processing -- for example,bzip2 -dc rec*file.bz2 > recovered_data
-- processes the files in the correct order.
bzip2recover
should be of most use dealing with large.bz2
files, as these will contain many blocks. It is clearly futile to use it on damaged single-block files, since a damaged block cannot be recovered. If you wish to minimise any potential data loss through media or transmission errors, you might consider compressing with a smaller block size.
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] PERFORMANCE NOTES
The sorting phase of compression gathers together similar strings in the file. Because of this, files containing very long runs of repeated symbols, like "aabaabaabaab ..." (repeated several hundred times) may compress more slowly than normal. Versions 0.9.5 and above fare much better than previous versions in this respect. The ratio between worst-case and average-case compression time is in the region of 10:1. For previous versions, this figure was more like 100:1. You can use the
-vvvv
option to monitor progress in great detail, if you want.Decompression speed is unaffected by these phenomena.
bzip2
usually allocates several megabytes of memory to operate in, and then charges all over it in a fairly random fashion. This means that performance, both for compressing and decompressing, is largely determined by the speed at which your machine can service cache misses. Because of this, small changes to the code to reduce the miss rate have been observed to give disproportionately large performance improvements. I imaginebzip2
will perform best on machines with very large caches.
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] CAVEATS
I/O error messages are not as helpful as they could be.
bzip2
tries hard to detect I/O errors and exit cleanly, but the details of what the problem is sometimes seem rather misleading.This manual page pertains to version 1.0.2 of
bzip2
. Compressed data created by this version is entirely forwards and backwards compatible with the previous public releases, versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0 and 1.0.1, but with the following exception: 0.9.0 and above can correctly decompress multiple concatenated compressed files. 0.1pl2 cannot do this; it will stop after decompressing just the first file in the stream.
bzip2recover
versions prior to this one, 1.0.2, used 32-bit integers to represent bit positions in compressed files, so it could not handle compressed files more than 512 megabytes long. Version 1.0.2 and above uses 64-bit ints on some platforms which support them (GNU supported targets, and Windows). To establish whether or notbzip2recover
was built with such a limitation, run it without arguments. In any event you can build yourself an unlimited version if you can recompile it withMaybeUInt64
set to be an unsigned 64-bit integer.
[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ] AUTHOR
Julian<EMAIL_ADDRESS>.
http://sources.redhat.com/bzip2
The ideas embodied in
bzip2
are due to (at least) the following people: Michael Burrows and David Wheeler (for the block sorting transformation), David Wheeler (again, for the Huffman coder), Peter Fenwick (for the structured coding model in the originalbzip
, and many refinements), and Alistair Moffat, Radford Neal and Ian Witten (for the arithmetic coder in the originalbzip
). I am much indebted for their help, support and advice. See the manual in the source distribution for pointers to sources of documentation. Christian von Roques encouraged me to look for faster sorting algorithms, so as to speed up compression. Bela Lubkin encouraged me to improve the worst-case compression performance. Thebz*
scripts are derived from those of GNUgzip
. Many people sent patches, helped with portability problems, lent machines, gave advice and were generally helpful.
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |


Engineer's Hub
Home
Services
Gallery
Blogs
About Us
Login
Sign Up
Join Us
Subscribe Engineer's Hub For Latest Updates
About Us
Register Here
Show Password
Register As
Student
Faculty


R/RcppExports.R
edges_coords.Rd
Given a graph, vertices' positions and sizes, calculates the absolute positions of the endpoints of the edges considering the plot's aspect ratio.
edges_coords(graph, toa, x, y, vertex_cex, undirected = TRUE, no_contemporary = TRUE, dev = as.numeric(c()), ran = as.numeric(c()), curved = as.logical(c()))
| graph | A square matrix of size \(n\). Adjacency matrix. |
|---|---|
| toa | Integer vector of size \(n\). Times of adoption. |
| x | Numeric vector of size \(n\). x-coordinta of vertices. |
| y | Numeric vector of size \(n\). y-coordinta of vertices. |
| vertex_cex | Numeric vector of size \(n\). Vertices' sizes in terms
of the x-axis (see |
| undirected | Logical scalar. Whether the graph is undirected or not. |
| no_contemporary | Logical scalar. Whether to return (compute) edges' coordiantes for vertices with the same time of adoption (see details). |
| dev | Numeric vector of size 2. Height and width of the device (see details). |
| ran | Numeric vector of size 2. Range of the x and y axis (see details). |
| curved | Logical vector. |
A numeric matrix of size \(m\times 5\) with the following columns:
Edge origin
Edge target
Relative angle between (x0,y0)
and (x1,y1)
in terms
of radians
In order to make the plot's visualization more appealing, this function provides a straight forward way of computing the tips of the edges considering the aspect ratio of the axes range. In particular, the following corrections are made at the moment of calculating the egdes coords:
Instead of using the actual distance between ego and alter, a relative one is calculated as follows $$d'=\left[(x_0-x_1)^2 + (y_0' - y_1')^2\right]^\frac{1}{2}$$ where \(% y_i'=y_i\times\frac{\max x - \min x}{\max y - \min y} \)
Then, for the relative elevation angle, alpha
, the relative distance \(d'\)
is used, \(\alpha'=\arccos\left( (x_0 - x_1)/d' \right)\)
Finally, the edge's endpoint's (alter) coordinates are computed as follows: $$% x_1' = x_1 + \cos(\alpha')\times v_1$$ $$% y_1' = y_1 -+ \sin(\alpha')\times v_1 \times\frac{\max y - \min y}{\max x - \min x} $$ Where \(v_1\) is alter's size in terms of the x-axis, and the sign of the second term in \(y_1'\) is negative iff \(y_0 < y_1\).
The same process (with sign inverted) is applied to the edge starting piont.
The resulting values, \(x_1',y_1'\) can be used with the function
arrows
. This is the workhorse function used in plot_threshold
.
The dev
argument provides a reference to rescale the plot accordingly
to the device, and former, considering the size of the margins as well (this
can be easily fetched via par("pin")
, plot area in inches).
On the other hand, ran
provides a reference for the adjustment
according to the range of the data, this is range(x)[2] - range(x)[1]
and range(y)[2] - range(y)[1]
respectively.
# -------------------------------------------------------------------------- data(medInnovationsDiffNet) library(sna)#>#> #>#>#> #>#>#>#> #> #> #> #> #> #> #>#>#> #> #> #># Computing coordinates set.seed(79) coords <- sna::gplot(as.matrix(medInnovationsDiffNet$graph[[1]]))# Getting edge coordinates vcex <- rep(1.5, nnodes(medInnovationsDiffNet)) ecoords <- edges_coords( medInnovationsDiffNet$graph[[1]], diffnet.toa(medInnovationsDiffNet), x = coords[,1], y = coords[,2], vertex_cex = vcex, dev = par("pin") ) ecoords <- as.data.frame(ecoords) # Plotting symbols(coords[,1], coords[,2], circles=vcex, inches=FALSE, xaxs="i", yaxs="i")


Calendar
FullCalendar is a jQuery plugin that provides a full-sized, drag & drop event calendar like the one below. It uses AJAX to fetch events on-the-fly and is easily configured to use your own feed format. It is visually customizable with a rich API.Draggable categories
Generic
Home
Job
Off-site work
To Do
Cancelled


I meet Ani at the club. The music, minimalist techno in one room and anthemic electronica in the other, is pumping out of a state of the art sound system. I am bathed in texture. I haven't been out dancing in months, and I've come properly equipped.  I find Ani on the dancefloor and we navigate closer to where Donato Dozzy is spinning records, dancing as we watch him.
'So, do you want anything?'
Ani considers and calls into my ear over the loud music. 'What do you have?'
'Well...I brought options. You could take eighteen milligrams of 2c-b, or fifteen milligrams of 4-AcO-DMT, or 25 milligrams of one of my personal favorites - 4-HO-MiPT. I also brought some speed.'
A wealth of options. Ani seems a bit dazzled as to which direction to choose. Singular experiences, combinations, the warmth of tryptamine consciousness or the neural electricity that phenethylamines bring. Or, just an upper to keep going. The party goes until six AM - at least, so we think for now.
Ani decides to wait before taking anything, and because I don't really feel like tripping alone, I decide to wait too. The speed is burning hard through my pocket, because I did not sleep well the night before and I feel lethargic. Still, I opt for sobriety. We bounce from one room to the other and then Ani suggests we go out to her car to smoke.
We talk about Krishnamurti and Joseph Cambell while she rolls a joint. I've missed her. I fumble through the two small containers in my pocket and fish out a 15mg capsule of 4-AcO-DMT. That's my choice for the night. We get out of the car and walk around the block to smoke the joint. I'm holding the capsule the whole time. Back in the club, I slip it back into my pocket and continue dancing.
Every once in a while, I get an itch to take something. But the itch is really the most interesting aspect of the thoughts in which it swims. I parse through the thoughts. I attack the itch, and then I embrace it. This is kind of awkward, being in a dark room filled with bodies and attitudes and everybody dancing. There is a lot of raw sexuality, attractive men behaving like boys and rubbing against one another, sensuous women carrying themselves with an air of erotic unattainability, a lot of people on cocaine or ketamine, their stern faces looking at me with a lot of judgment in their eyes. I am dressed in lighter colors, have a smile plastered on my face - always, drugs are not at all necessary - and my hair is wild and fuzzy and free. They have an idea of what dancing to techno should be, and I am sure I do not fit in.
But of course, though there is an 'in' crowd here, I am failing at life by turning myself and Ani into 'us' and everyone else into 'them.' God, but this is awkward, and psychedelic drugs would really help me deal with that. I would perceive the oneness that suffuses all life, it would render these aggressive and combative tendencies in others laughable in the face of the unity that permeates all things. It seems attractive to take something. It also seems too easy.
 Which is a shame - dancing is sweet release for me, and I dance hard on drugs and have ecstatic spiritual experiences of oneness with my body. Tonight? I'm just kind of tired. I dance, or I watch. I'm horny. Many different bodies are bumping up against me here and there. We step outside and we smoke another joint. I get insanely high this time, and when we get back it is actually a bit too much. It is then that we find out the party does not end at six AM.
We receive wristbands to an afterparty in the upstairs loft where a DJ I absolutely love, Derek Plaslaiko, is spinning until noon. This changes everything. What to take?
The 2c-b?
Or 4-AcO-DMT, my first instinct?
Or...4-HO-MiPT dancing through the sunrise through a kaleidoscope of raw rainbow sexuality. That does sound lovely.
And of course, whichever, with about 40mg of racemic amphetamine paste, some speed, is going to just really carry me all lovely-like.
We get upstairs to the loft, see friends we haven't seen for hours. They are tripping hilariously hard on LSD and channeling Hunter S. Thompson caricatures through their warm selves and cartoon glasses. It is great to see them and I am eager to join them in their construct of reality.
Ani turns to me. 'You know,' she says. 'I do have a lot to do tomorrow. Would you want to just go home now?'
It really doesn't take more than a split second to make a decision. It's 6:30 AM and I have plans later that night for dinner with a girl I am very excited to get to know. I don't want to be a zombie when I see her.
'Sure, let's go.'
At the exit, our coats half-zipped, Ani pauses.
'Aaahhh. I don't know.  What do you think?'
Though we have been at the club together all night, in a way I have remained passive and let Ani drive. I want her to drive now. Her car. To my house.
'I think I'd rather go home, actually.'
Because we are spirit brother and spirit sister til we die, whatever I say I decide is fine, and Ani is totally cool with going home.  Then I undress. I empty out my pocket full of molecules, my simple but dazzling array of opportunities for neurochemical enhancement. Outside, the sun is rising and orange-yellow rays are searing through my window-blinds. I feel pretty fantastic.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Contains several plotting functions such as barplots, scatterplots, heatmaps, as well as functions to combine plots and assist in the creation of these plots. These functions will give users great ease of use and customization options in broad use for biomedical applications, as well as general purpose plotting. Each of the functions also provides valid default settings to make plotting data more efficient and producing high quality plots with standard colour schemes simpler. All functions within this package are capable of producing plots that are of the quality to be presented in scientific publications and journals.
| Version: | 5.9.2 |
| Depends: | R (≥ 3.0.2), lattice (≥ 0.20-27), latticeExtra (≥ 0.6-26), cluster (≥ 1.14.4), hexbin (≥ 1.26.3), grid |
| Imports: | gtable, e1071, tools, gridExtra, MASS (≥ 7.3-29) |
| Suggests: | Cairo (≥ 1.5-1), knitr |
| Published: | 2018-04-23 |
| Author: | Paul Boutros [aut, cre], Jennifer Aguiar [ctb], Ontario Institute for Cancer Research [cph], The R Core Team [cph], The R Foundation [cph], Robert Gentleman [ctb], Ross Ihaka [ctb] |
| Maintainer: | Paul Boutros <Paul.Boutros at oicr.on.ca> |
| License: | GPL-2 |
| NeedsCompilation: | yes |
| Materials: | NEWS |
| CRAN checks: | BoutrosLab.plotting.general results |
| Reference manual: | BoutrosLab.plotting.general.pdf |
| Vignettes: |
Plotting guide using BoutrosLab.plotting.general |
| Package source: | BoutrosLab.plotting.general_5.9.2.tar.gz |
| Windows binaries: | r-devel: BoutrosLab.plotting.general_5.9.2.zip, r-release: BoutrosLab.plotting.general_5.9.2.zip, r-oldrel: BoutrosLab.plotting.general_5.9.2.zip |
| OS X binaries: | r-release: BoutrosLab.plotting.general_5.9.2.tgz, r-oldrel: BoutrosLab.plotting.general_5.9.2.tgz |
Please use the canonical form https://CRAN.R-project.org/package=BoutrosLab.plotting.general to link to this page.


| 1 | package fr.sii.ogham.testing.assertion.email; | |
| 2 | ||
| 3 | import static fr.sii.ogham.testing.assertion.AssertionHelper.assertThat; | |
| 4 | import static fr.sii.ogham.testing.assertion.OghamAssertions.usingContext; | |
| 5 | ||
| 6 | import java.util.ArrayList; | |
| 7 | import java.util.List; | |
| 8 | ||
| 9 | import javax.mail.internet.InternetAddress; | |
| 10 | ||
| 11 | import org.hamcrest.Matcher; | |
| 12 | ||
| 13 | import fr.sii.ogham.testing.assertion.HasParent; | |
| 14 | ||
| 15 | public class AddressListAssert
 extends HasParent
 { | |
| 16 | /** | |
| 17 | * The list of addresses that will be used for assertions | |
| 18 | */ | |
| 19 | private List<AddressesWithContext> actual; | |
| 20 | ||
| 21 | public AddressListAssert(List<AddressesWithContext> actual, P parent) { | |
| 22 | super(parent); | |
| 23 | this.actual = actual; | |
| 24 | } | |
| 25 | ||
| 26 | /** | |
| 27 | * Make assertions on the email addresses (without personal). | |
| 28 | * | |
| 29 | *
 | |
| 30 | * Email address parts can be checked independently: | |
| 31 | *
 | |
| 32 | *
address<EMAIL_ADDRESS>| |
| 33 | *
personal: "Recipient Name"
 | |
| 34 | *
textual: {@code "Recipient Name<EMAIL_ADDRESS>| |
| 35 | *
 | |
| 36 | * | |
| 37 | *
 | |
| 38 | * .receivedMessages().message(0).to() | |
| 39 | * .address(hasItems("recipient@sii.fr")) | |
| 40 | *
 | |
| 41 | * | |
| 42 | * Will check if the list of recipient email addresses of the first message | |
| 43 | * contains exactly<EMAIL_ADDRESS>| |
| 44 | * | |
| 45 | *
 | |
| 46 | * .receivedMessages().every().to() | |
| 47 | * .address(hasItems("recipient@sii.fr")) | |
| 48 | *
 | |
| 49 | * | |
| 50 | * Will check if the list of recipient email addresses of every message | |
| 51 | * contains exactly<EMAIL_ADDRESS>| |
| 52 | * | |
| 53 | * @param matcher | |
| 54 | * the assertion to apply on the email addresses | |
| 55 | * @return the fluent API for chaining assertions on received message(s) | |
| 56 | */ | |
| 57 | public AddressListAssert
 address(Matcher<? super Iterable<String>> matcher) { | |
| 58 | String desc = "email addresses of '${fieldName}' field of message ${messageIndex}"; | |
| 59 | for (AddressesWithContext addresses : actual) { | |
| 60 | List<String> addressesStr = new ArrayList<>(); | |
| 61 | for (InternetAddress address : addresses.getAddresses()) { | |
| 62 | addressesStr.add(address.getAddress()); | |
| 63 | } | |
| 64 |
3
1. address : removed call to fr/sii/ogham/testing/assertion/AssertionHelper::assertThat → NO_COVERAGE 2. address : removed call to fr/sii/ogham/testing/assertion/AssertionHelper::assertThat → SURVIVED 3. address : removed call to fr/sii/ogham/testing/assertion/AssertionHelper::assertThat → SURVIVED |
assertThat(addressesStr, usingContext(desc, addresses, matcher)); |
| 65 | } | |
| 66 |
3
1. address : replaced return value with null for fr/sii/ogham/testing/assertion/email/AddressListAssert::address → NO_COVERAGE 2. address : replaced return value with null for fr/sii/ogham/testing/assertion/email/AddressListAssert::address → KILLED 3. address : replaced return value with null for fr/sii/ogham/testing/assertion/email/AddressListAssert::address → KILLED |
return this; |
| 67 | } | |
| 68 | ||
| 69 | /** | |
| 70 | * Make assertions on the email addresses (textual form). | |
| 71 | * | |
| 72 | *
 | |
| 73 | * Email address parts can be checked independently: | |
| 74 | *
 | |
| 75 | *
address<EMAIL_ADDRESS>| |
| 76 | *
personal: "Recipient Name"
 | |
| 77 | *
textual: {@code "Recipient Name<EMAIL_ADDRESS>| |
| 78 | *
 | |
| 79 | * | |
| 80 | *
 | |
| 81 | * .receivedMessages().message(0).to() | |
| 82 | * .textual(hasItems("Recipient Name <recipient@sii.fr>")) | |
| 83 | *
 | |
| 84 | * | |
| 85 | * Will check if the list of recipient email addresses (personal with | |
| 86 | * address) of the first message contains exactly {@code "Recipient Name | |
| 87 | *<EMAIL_ADDRESS>| |
| 88 | * | |
| 89 | *
 | |
| 90 | * .receivedMessages().every().to() | |
| 91 | * .textual(hasItems("Recipient Name <recipient@sii.fr>")) | |
| 92 | *
 | |
| 93 | * | |
| 94 | * Will check if the list of recipient email addresses (personal with | |
| 95 | * address) of every message contains exactly {@code "Recipient Name | |
| 96 | *<EMAIL_ADDRESS>| |
| 97 | * | |
| 98 | * @param matcher | |
| 99 | * the assertion to apply on the email addresses | |
| 100 | * @return the fluent API for chaining assertions on received message(s) | |
| 101 | */ | |
| 102 | public AddressListAssert
 textual(Matcher<? super Iterable<String>> matcher) { | |
| 103 | String desc = "textual addresses of '${fieldName}' field of message ${messageIndex}"; | |
| 104 | for (AddressesWithContext addresses : actual) { | |
| 105 | List<String> addressesStr = new ArrayList<>(); | |
| 106 | for (InternetAddress address : addresses.getAddresses()) { | |
| 107 | addressesStr.add(address.toString()); | |
| 108 | } | |
| 109 |
1
1. textual : removed call to fr/sii/ogham/testing/assertion/AssertionHelper::assertThat → NO_COVERAGE |
assertThat(addressesStr, usingContext(desc, addresses, matcher)); |
| 110 | } | |
| 111 |
1
1. textual : replaced return value with null for fr/sii/ogham/testing/assertion/email/AddressListAssert::textual → NO_COVERAGE |
return this; |
| 112 | } | |
| 113 | ||
| 114 | /** | |
| 115 | * Make assertions on the email address types. | |
| 116 | * | |
| 117 | *
 | |
| 118 | * .receivedMessages().message(0).to() | |
| 119 | * .type(hasItems("rfc822")) | |
| 120 | *
 | |
| 121 | * | |
| 122 | * Will check if the list of recipient email address types of the first | |
| 123 | * message contains exactly "rfc822". | |
| 124 | * | |
| 125 | *
 | |
| 126 | * .receivedMessages().every().to() | |
| 127 | * .type(hasItems("rfc822")) | |
| 128 | *
 | |
| 129 | * | |
| 130 | * Will check if the list of recipient email address types of every message | |
| 131 | * contains exactly "rfc822". | |
| 132 | * | |
| 133 | * @param matcher | |
| 134 | * the assertion to apply on the email addresses | |
| 135 | * @return the fluent API for chaining assertions on received message(s) | |
| 136 | */ | |
| 137 | public AddressListAssert
 type(Matcher<? super Iterable<String>> matcher) { | |
| 138 | String desc = "address types of '${fieldName}' field of message ${messageIndex}"; | |
| 139 | for (AddressesWithContext addresses : actual) { | |
| 140 | List<String> addressesStr = new ArrayList<>(); | |
| 141 | for (InternetAddress address : addresses.getAddresses()) { | |
| 142 | addressesStr.add(address.getType()); | |
| 143 | } | |
| 144 |
1
1. type : removed call to fr/sii/ogham/testing/assertion/AssertionHelper::assertThat → NO_COVERAGE |
assertThat(addressesStr, usingContext(desc, addresses, matcher)); |
| 145 | } | |
| 146 |
1
1. type : replaced return value with null for fr/sii/ogham/testing/assertion/email/AddressListAssert::type → NO_COVERAGE |
return this; |
| 147 | } | |
| 148 | ||
| 149 | /** | |
| 150 | * Make assertions on the email addresses (personal information only). | |
| 151 | * | |
| 152 | *
 | |
| 153 | * Email address parts can be checked independently: | |
| 154 | *
 | |
| 155 | *
address<EMAIL_ADDRESS>| |
| 156 | *
personal: "Recipient Name"
 | |
| 157 | *
textual: {@code "Recipient Name<EMAIL_ADDRESS>| |
| 158 | *
 | |
| 159 | * | |
| 160 | *
 | |
| 161 | * .receivedMessages().message(0).to() | |
| 162 | * .personal(hasItems("Recipient Name")) | |
| 163 | *
 | |
| 164 | * | |
| 165 | * Will check if the list of recipient email addresses (personal | |
| 166 | * information) of the first message contains exactly "Recipient Name". | |
| 167 | * | |
| 168 | *
 | |
| 169 | * .receivedMessages().every().to() | |
| 170 | * .personal(hasItems("Recipient Name")) | |
| 171 | *
 | |
| 172 | * | |
| 173 | * Will check if the list of recipient email addresses (personal | |
| 174 | * information) of every message contains exactly "Recipient Name". | |
| 175 | * | |
| 176 | * @param matcher | |
| 177 | * the assertion to apply on the email addresses | |
| 178 | * @return the fluent API for chaining assertions on received message(s) | |
| 179 | */ | |
| 180 | public AddressListAssert
 personal(Matcher<? super Iterable<String>> matcher) { | |
| 181 | String desc = "personal of '${fieldName}' field of message ${messageIndex}"; | |
| 182 | for (AddressesWithContext addresses : actual) { | |
| 183 | List<String> addressesStr = new ArrayList<>(); | |
| 184 | for (InternetAddress address : addresses.getAddresses()) { | |
| 185 | addressesStr.add(address.getPersonal()); | |
| 186 | } | |
| 187 |
2
1. personal : removed call to fr/sii/ogham/testing/assertion/AssertionHelper::assertThat → NO_COVERAGE 2. personal : removed call to fr/sii/ogham/testing/assertion/AssertionHelper::assertThat → SURVIVED |
assertThat(addressesStr, usingContext(desc, addresses, matcher)); |
| 188 | } | |
| 189 |
2
1. personal : replaced return value with null for fr/sii/ogham/testing/assertion/email/AddressListAssert::personal → NO_COVERAGE 2. personal : replaced return value with null for fr/sii/ogham/testing/assertion/email/AddressListAssert::personal → KILLED |
return this; |
| 190 | } | |
| 191 | ||
| 192 | } | |
Mutations | ||
| 64 |
1.1 2.2 3.3 |
|
| 66 |
1.1 2.2 3.3 |
|
| 109 |
1.1 |
|
| 111 |
1.1 |
|
| 144 |
1.1 |
|
| 146 |
1.1 |
|
| 187 |
1.1 2.2 |
|
| 189 |
1.1 2.2 |


Intro to ada
I found
wiki
article that says this about Ada Lovelace...
Augusta Ada King, Countess of Lovelace (née Byron; 10 December 1815 – 27 November 1852) was an English mathematician and writer, chiefly known for her work on Charles Babbage's early mechanical general-purpose computer, the Analytical Engine. Her notes on the engine include what is recognised as the first algorithm intended to be carried out by a machine. As a result, she is often regarded as the first computer programmer.


|
London, UK Career InterestsI trained with Oracle Consulting UK as a graduate (1997) and since then have enjoyed working with Oracle technologies, in development and product administration. I enjoy staying abreast of the Oracle products and broader industry trends, and am enthusiastic about computer science.<<<<<<< HEAD Since 2013 I have developed a compelling interest in DLT/blockchain, permissioned and permissonless ledgers, smart contracts, and the distributed technologies which new consensus protocols enable. I am keen to engage in London-based projects which might interface Oracle and existing infrastructures with the new distributed ledger paradigm. ======= I London-based and am particularly interested in roles in DevOps, bespoke automation, data engineering and AI. I also have a keen interest in DLT/blockchain, permissioned and permissonless ledgers, smart contracts, distributed consensus protocols and the paradigms they enable. >>>>>>> c1ecfff5751af0aff3d92b348f3e32d4072b292a |
Core skills
-
Languages: Python, Jython, shell script (bash/ksh), PL/SQL, SQL, TSQL, JavaScript, Solidity, PHP, VBA
-
Tools: Linux, MySQL, git, JIRA, AWS, Delphix, Docker, Remix/Ganache/Truffle, Excel, TOAD, Apache, Octave
-
Oracle Middleware: OMW with SOA (OSB, OER, OSR), WebCenter Portal, ODI, OBIEE, Identity and Access Management
-
Oracle Database: Grid Infrastructure, RMAN backup and recovery, SQL and instance performance tuning, MTS, high availability TAF and Oracle Net, advanced replication parallel query/DML, DataGuard, Flashback, PL/SQL, compression, partitioning, ASM, Delphix data virtualisation/TDM
Projects and Roles
Study period, blockchain and distributed ledger (Oct 2017 – Nov 2018)
A career/study break to study blockchain, distributed systems, and DLT-enabled technologies: IPFS, crypto-economic consensus approaches (Proof of Work/Nakamoto consensus, Proof of Stake, dPOS), Ethereum (Solidity, Remix/Ganache/Truffle, Web3.js), cryptographic primitives, Layer 2 protocols (Lighting, Plasma), HyperLedger (Fabric), zk-snarks / Zokrates.
Conferences/programmes: Breaking Bitcoin, Paris (Sept 2017); 9984 Summit (BigChain DB), Berlin (Oct 2017); Hackers Congress HCPP17, Prague (Oct 2017); Ethereum Devcon3, Cancun (Nov 2017); North American Blockchain Conference, Miami (Jan 2018); Consensus, NYC (May 2018); Layer 2 Summit, MIT Boston (May 2018), ConsenSys Academy summer 2018 certified blockchain developer programme.
Royal Bank of Scotland (Apr 2013 – Sept 2017)
Bespoke tooling: designed and build a custom extensible framework for automated environment control, monitoring, and deployment (Python, Jython, PL/SQL, shell script).
System provisioning: designed and built an automated environment cloning solution, integrated with Delphix data virtualisation/TDM (Python, Jython, PL/SQL, shell script).
DevOps tooling: BMC BladgeLogic and Release Automation, and Delphix data virtualisation / TDM - configuration, support, implementation Docker container proof of concept for Oracle FMW.
Middleware product installation architecture: designed and implemented an architectural model to capture infrastructure requirements and naming standards for all OMW products, to model the requirements for all environments and use as a basis for automated environment provisioning. Modelled in Excel to dynamically render environment requirements - file systems (mounts/exports/type/size), databases (clusters/service names), IP addresses and sockets, load-balancing requirements, firewall rules, Linux parameters (users/groups/server configuration), AD groups, FMW naming (domains, VIPs, managed servers).
Installation and support for SOA, OFSAA, ODI (ETL), OBIEE, OBIA (DAC and Informatica ETL), WebCenter, IAM, Hyperion DRM.
OFSAA: installation, upgrade, cloning. OFSSAI 7.3.5 with LRM, FTP, ALM, GLRECON, BASEL
Performance tuning: Oracle Business Intelligence Big Data system (database and JVM analysis).
Alpha International (Sept 2012 – Apr 2013)
Data architecture (pro-bono): SQL Server data migration from Integra to BlackBaud Raiser’s Edge and a for custom CRM application.
Motability Operations project (Nov 2010 – June 2012)
- Oracle EBS 12.0.6 to 12.1.3 Upgrade
- FMW 11g: Oracle Middleware 11g with SOA, OSB, OER/OSR, UCM, BAM, OBIEE
- Oracle 10g to <IP_ADDRESS> RAC Upgrade, OEL 5.4 Linux
Project DBA technical lead (team of five): planned the upgrade of EBS 12.0.6 to 12.1.3 (with OSSO 10g migration to 11g OAM), 10g RDBMS upgrade to <IP_ADDRESS>, with <IP_ADDRESS> Grid Infrastructure; and planned and implemented SOA, UCM, OBIEE (upgraded 10-11g), OER; high-availability clustering, file system, housekeeping, network, bespoke management tools, and performance tuning.
Study period (Sept 2010 - Oct 2010)
A short career break to take certifications and follow computer science interests: Berkely CS61c, computer architecture (hardware/software interface), and the industry transition from single to multi-core; the limitations of frequency scaling in uni-core systems.
Balfour Beatty PLC (Feb 2010 – Sept 2010)
- Oracle Beehive 2.0
- Oracle 11gR2 RDBMS, RAC with Grid Infrastructure and ASM, on Linux
- Oracle Applications <IP_ADDRESS>
Installed 11gR2 Grid Infrastructure, ASM and RAC database clusters. Applied 11g Advanced Compression (OTLP) to the E-Business suite reducing the database size by 50% and with some performance improvements gained from reduced disk operations. 10gR2 to <IP_ADDRESS> EBS Database upgrade. Installation of Oracle Beehive 2.0 and Beehive UDS integration with Oracle OID.
Clifford Chance LLP (Jan 2005 – Feb 2010)
Clifford Chance is the world’s leading law firm with offices in 20 countries.
- Oracle Applications <IP_ADDRESS>
- Oracle 10g RAC with Oracle Collaboration Suite
- Oracle EPM - Hyperion Planning, Essbase, BIPlus, Hyperion Business Rules
- Oracle 10gR2, HP-UX 11, HDS and NetApp Storage
- Keystone Professional, 10gAS Forms and Reports
Oracle Applications upgrade 11.5.8 to <IP_ADDRESS>, with HP-UX to Sun Solaris platform migration; patching, environment cloning; Oracle Applications was integrated with Portal and Keystone Professional using OID and SSO. Oracle Applications Interconnect (OAI) hub used for message translation of data feeds from into Oracle Applications. Database upgrade 9i to 10gR2. ASM administration. Custom shell and PL/SQL scripts for key system event monitoring, integrated with HP OpenView alerting.
Installed Oracle Hyperion 9.3.1 (BIPlus, EAS, Hyperion Planning, HBR), using Apache Tomcat. Implemented Hyperion Planning JVMs scale-out across multiple tiers. Upgraded Hyperion Planning and Essbase. Migrated installation from Tomcat, to Oracle 10gAS. Supported the Hyperion business team for application support and cloning.
Implemented Grid Control OMS <IP_ADDRESS> and Agents: Grid target templating, metric and policy configuration, user-defined metrics, custom reporting. HA Grid configuration. Instance and SQL performance tuning, ADDM and AWR analysis, Grid advisors, platform problem detection.
Supported a 10gR2 RAC HA tera-scale (10TB) database, running Oracle Collaboration Suite with 8000 users and a Data-Guarded Physical Standby database. Designed and implemented ILM through table partitioning and archive read-only tablespaces. The ILM solution greatly reduced the footprint of RMAN tape backups. CRS configuration with HA TAF database services.
Designed and implemented RMAN backup and recovery strategy across the Oracle estate; RMAN scripting, tape and disk throughput performance tuning, daily backup recoverability reports, FRA database image copy maintenance. Integrated with DataProtector and NetBackup.
Personal Interests
Rowing, cycling (long distance and racing), Streetbank.com, Blockchain/DLT technologies, Machine Learning (regression, gradient descent), personal community website project (LAMP stack, JQuery, 50k members), piano, guitar.
Certifications
- TOGAF 9.1 (Foundation and Certified, level 2)
- PRINCE2 (Foundation and Practitioner)
- Oracle 11gR2 Administrator Certified Professional
- Oracle 11gR2 Performance Tuning Certified Expert
- Oracle 10gR2 RAC Certified Expert
- Oracle R12 Applications DBA Certified Professional
- MS SQL Server 2008 Database Developer, MCTS
Oracle University ID 0C0892125
Prometric ID SR7055406
PRINCE2 P2R/757481
Education
BSc Industrial Management 2(i), Nottingham Trent University (1990 – 1994) A broad-based degree which included aspects of computer science, accounting, business decision making, economics, marketing, manufacturing, and mechanical and electrical engineering.


"SITTING "the attitude generally assumed in Palestine by those who were engaged in any kind of work. “The carpenter saws, planes, and hews with his hand-adze, sitting on the ground or upon the plank he is planning. The washerwoman sits by the tub; and, in a word, no one stands when it is possible to sit. Shopkeepers always sit, and Levi sitting at the receipt of custom (Matthew 9:9) is the exact way to state the case.”, Thomson, Land and Book.
"SITTING "the attitude generally assumed in Palestine by those who were engaged in any kind of work. “The carpenter saws, planes, and hews with his hand-adze, sitting on the ground or upon the plank he is planning. The washerwoman sits by the tub; and, in a word, no one stands when it is possible to sit. Shopkeepers always sit, and Levi sitting at the receipt of custom (Matthew 9:9) is the exact way to state the case.”, Thomson, Land and Book.


The main core behind my current projects design, is for my want of improving the environtment. I am hoping that the work I do can at least make a small change.
This is shown in the "Natural Nature Blog" project as I was attempting to remind people to be safe while camping.
Designed using wordpress and own HTML/CSS knowledge.
Was made to improve awareness for the environment.
Close ProjectKeeper was desgined with the main thought of "will the user be able to understand this?"
Tried to design it as simple as possible; Because I've been taught, and learned through experiance, that tough controls will make me not want to use it anymore.
In the completion of the project it feel like I was able to reach the goal of having people understand. Was proved with many user testers.
Close ProjectUser interface design or user interface engineering is the design of user interfaces for machines and software, such as computers, home appliances, mobile devices, and other electronic devices, with the focus on maximizing usability and the user experience.
Close ProjectKeeper was desgined with the main thought of "will the user be able to understand this?"
Tried to design it as simple as possible; Because I've been taught, and learned through experiance, that tough controls will make me not want to use it anymore.
Close Project


unar archive- Extract an archive to the specified directory:
unar -o path/to/directory archive- Force overwrite if files to be unpacked already exist:
unar -f archive- Force rename if files to be unpacked already exist:
unar -r archive- Force skip if files to be unpacked already exist:
unar -s archive


The room Egwene had been given, on the same gallery with Nynaeve and Elayne, was little different from Nynaeve’s. Her bed was a trifle wider, her table a little smaller. Her bit of rug had flowers instead of scrolls. That was all. After the novices’ quarters, it seemed like a room in a palace, but when the three of them gathered there late that night, Egwene wished she were back in the novice galleries, with no ring on her finger and no bands on her dress. The others looked as nervous as she felt.
They had worked in the kitchens for two more meals, and in between tried to puzzle out the meaning of what they had found in the storeroom. Was it a trap, or an attempt to divert the search? Did the Amyrlin know of the things, and if she did, why had she not mentioned them? Talking provided no answers, and the Amyrlin never appeared so they could ask her.
Verin had come into the kitchens after the midday meal, blinking as if she were not sure why she was there. When she saw Egwene and the other two on their knees among the cauldrons and kettles, she looked surprised for a moment, then walked over and asked, loud enough for anyone to hear, “Have you found anything?”
 Her blue eyes seemed to take up her entire face.
“Nothing but grease and sweat, Aes Sedai,” Nynaeve said. The tug she gave her braid left a smear of greasy soap suds on her dark hair, and she grimaced.
Verin nodded as if that were the answer she had been seeking. “Well, keep looking.” She peered around the kitchen again, frowning as though puzzled to find herself there, and left.
Alanna came to the kitchens after midday, too, collecting a bowl of big green gooseberries and a pitcher of wine, and Elaida, then Sheriam, appeared after supper, and Anaiya, too.
Alanna had asked Egwene if she wanted to know more of the Green Ajah, inquired when they were going to get on with their studies. Just because the Accepted chose their own lessons and pace did not mean they were not supposed to do any at all. The first few weeks would be bad, of course, but they had to choose, or the choosing would be done for them.
Elaida merely stood for a time, stern-faced and staring at them, hands on her hips, and Sheriam did the same in almost the identical pose. Anaiya stood the same way, but her look was more concerned. Until she saw them glancing at her. Then her face became a match for Elaida’s and Sheriam’s before her.
None of those visits meant anything that Egwene could see. The Mistress of Novices certainly had reason to check on them, as well as on the novices working in the kitchens, and Elaida had reason to keep an eye on the Daughter-Heir of Andor. Egwene tried not to think of the Aes Sedai’s interest in Rand. As for Alanna, she was not the only Aes Sedai who came for a tray to take back to her rooms rather than eat with the others. Half the sisters in the Tower were too busy for meals, too busy to take the time to summon a servant to fetch a tray. And Anaiya . . . ? Anaiya could well be concerned for her Dreamer. Not that she would do anything to ease a punishment set by the Amyrlin Seat herself. That could have been Anaiya’s reason for coming. It could have been.
Hanging her dress in the wardrobe, Egwene told herself once again that even Verin’s slip could have been perfectly ordinary; the Brown sister was often absentminded. If it was a slip. Sitting on the edge of her bed, she pulled up her shift and began rolling down her stockings. She was almost beginning to dislike white as much as she did gray.
Nynaeve stood in front of the fireplace with Egwene’s pouch in one hand, tugging her braid. Elayne sat by the table, making nervous conversation.
“Green Ajah,” the golden-haired woman said for what Egwene thought must be the twentieth time since midday. “I might choose Green Ajah myself, Egwene. Then I can have three or four Warders, perhaps marry one of them. Who better for Prince Consort of Andor than a Warder? Unless it is . . . ” She trailed off, blushing.
Egwene felt a pang of jealousy she thought she had put down long ago, and sympathy mixed with it. Light, how can I be jealous when I cannot look at Galad without shivering and feeling as if I am melting, both at the same time? Rand was mine, but no more. I wish I could give him to you, Elayne, but he is not for either of us, I think. It may be all well and good for the Daughter-Heir to marry a commoner, as long as he’s an Andorman, but not to marry the Dragon Reborn. She let the stockings fall on the floor, telling herself there were more important things to worry about tonight than neatness. “I am ready, Nynaeve.”
Nynaeve handed her the pouch, and a long, thin strip of leather. “Perhaps it will work for more than one at once. I could . . . go with you, perhaps.”
Emptying the stone ring onto her palm, Egwene threaded the leather strip through it, then tied it around her neck. The stripes and flecks of blue and brown and red seemed more vivid against the white of her shift. “And leave Elayne to watch over the both of us alone? When the Black Ajah may know us?”
“I can do it,” Elayne said stoutly. “Or let me go with you, and Nynaeve can keep guard. She is the strongest of us, when she’s angry, and if there is need for a guard, you can be sure she will be.”
Egwene shook her head. “What if it won’t work for two? What if two of us trying makes it not work at all? We would not even know till we woke up, and then we’ve wasted the night. We cannot waste even one if we are to catch up. We’re too far behind them already.” They were valid reasons, and she believed them, but there was another, closer to her heart. “Besides, I’ll feel better knowing both of you are watching over me, in case . . . ”
She did not want to say it. In case someone came while she was asleep. The Gray Men. The Black Ajah. Any one of the things that had turned the White Tower from a place of safety to a dark woods full of pits and snares. Something coming in while she lay there helpless. Their faces showed they understood.
As she stretched herself out on the bed and plumped a feather pillow behind her head, Elayne moved the chairs, one to either side of the bed. Nynaeve snuffed the candles one by one, then, in the dark, sat in one of the chairs. Elayne took the other.
Egwene closed her eyes and tried to think sleepy thoughts, but she was too conscious of the thing lying between her breasts. Far more conscious than of any soreness remaining from her visit to Sheriam’s study. The ring seemed to weigh as much as a brick, now, and thoughts of home and quiet pools of water all slid apart with remembrance of it. Of Tel’aran’rhiod. The Unseen World. The World of Dreams. Waiting just the other side of sleep.
Nynaeve began to hum softly. Egwene recognized a nameless, wordless tune her mother used to hum to her when she was little. When she was lying in bed, in her own room, with a fluffy pillow, and warm blankets, and the mingled smells of rose oil and baking from her mother, and . . . Rand, are you all right? Perrin? Who was she? Sleep came.
She stood among rolling hills quilted with wildflowers and dotted with small thickets of leafy trees in the hollows and on the crests. Butterflies floated above the blossoms, wings flashing yellow and blue and green, and two larks sang to each other nearby. Just enough fluffy white clouds drifted in a soft blue sky, and the breeze held that delicate balance between cool and warm that came only a few special days in spring. It was a day too perfect to be anything but a dream.
She looked at her dress, and laughed delightedly. Exactly her favorite shade of sky-blue silk, slashed with white in the skirt—that changed to green as she frowned momentarily—sewn with rows of tiny pearls down the sleeves and across the bosom. She stuck out a foot just to peek at the toe of a velvet slipper. The only jarring note was the twisted ring of multicolored stone hanging around her neck on a leather cord.
She took the ring in her hand and gasped. It felt as light as a feather. If she tossed it up, she was sure it would drift away like thistle down. Somehow, she did not feel afraid of it any longer. She tucked it inside the neck of her dress to get it out of the way.
“So this is Verin’s Tel’aran’rhiod,” she said. “Corianin Nedeal’s World of Dreams. It does not look dangerous to me.” But Verin had said it was. Black Ajah or not, Egwene did not see how any Aes Sedai could tell a lie right out. She could be mistaken. But she did not believe Verin was.
Just to see if she could, she opened herself to the One Power. Saidar filled her. Even here, it was present. She channeled the flow lightly, delicately, directed it into the breeze, swirling butterflies into fluttering spirals of color, into circles linked with circles.
Abruptly she let it go. The butterflies settled back, unconcerned by their brief adventure. Myrddraal and some other Shadowspawn could sense someone channeling. Looking around, she could not imagine such things in that place, but just because she could not imagine them did not mean they were not there. And the Black Ajah had all those ter’angreal studied by Corianin Nedeal. It was a sickening reminder of why she was there.
“At least I know I can channel,” she muttered. “I’m not learning anything standing here. Perhaps if I look around . . .  She was an innkeeper’s daughter; she was sure it was an inn. There was not a sound, and all the doors along the hall were shut tight. Just as she wondered who was behind the plain wooden door in front of her, it swung silently open.
The room within was bare, and cold wind moaned through open windows, stirring old ash on the hearth.  A large, shaggy-haired young man sat leaning back against the pillar in only his smallclothes, head lolling as if asleep. A massive black chain ran around the pillar and across his chest, the ends gripped in his clenched hands. Asleep or not, his heavy muscles strained to hold that chain tight, to prison himself against the pillar.
“Perrin?” she said wonderingly. She stepped into the room. “Perrin, what’s the matter with you? Perrin!” The dog uncurled itself and stood.
It was not a dog, but a wolf, all black and gray, lips curling back from glistening white teeth, yellow eyes regarding her as they might have a mouse. A mouse it meant to eat.
Egwene stepped back hastily into the hall in spite of herself. “Perrin! Wake up! There’s a wolf!” Verin had said what happened here was real, and showed the scar to prove it. The wolf’s teeth looked as big as knives. “Perrin, wake up! Tell it I’m a friend!” She embraced saidar. The wolf stalked nearer.
Perrin’s head came up; his eyes opened drowsily. Two sets of yellow eyes regarded her. The wolf gathered himself. “Hopper,” Perrin shouted, “no! Egwene!”
The door swung shut before her face, and total darkness enveloped her.
She could not see, but she felt sweat beading on her forehead. Not from heat. Light, where am I? I don’t like this place. I want to wake up!
A whirring sound, and she jumped before she recognized a cricket. A frog gave a bass croak in the darkness, and a chorus answered it. As her eyes adapted, she dimly made out trees all around her. Clouds blanketed the stars, and the moon was a thin sliver.
Off to her right through the woods was another glow, flickering. A campfire.
She considered a moment before moving. Wanting to wake up had not been enough to take her way from Tel’aran’rhiod, and she still had not found out anything useful. And she had not been hurt in any way. So far, she thought, shivering. But she had no idea who—or what—was at that campfire. It could be Myrddraal. Besides, I’m not dressed for running around in the forest. It was the last thought that decided her; she prided herself on knowing when she was being foolish.
Taking a deep breath, she gathered up her silken skirts and crept closer. She might not have Nynaeve’s skill at woodcraft, but she knew enough to avoid stepping on dead twigs. At last she peered carefully around the trunk of an old oak at the campfire.
The only one there was a tall young man, sitting and staring into the flames. Rand. Those flames did not burn wood. They did not burn anything that she could see. The fire danced above a bare patch of ground. She did not think they even scorched the soil.
Before she could move, Rand raised his head. She was surprised to see he was smoking a pipe, a thin ribbon of tabac smoke lifting from the bowl. He looked tired, so very tired.
“Who’s out there?” he demanded loudly. “You’ve rustled enough leaves to wake the dead, so you might as well show yourself.”
Egwene’s lips compressed, but she stepped out. I did not! “It’s me, Rand. Do not be afraid. It is a dream. I must be in your dreams.”
He was on his feet so suddenly that she stopped dead. He seemed in some way larger than she remembered. And a touch dangerous. Perhaps more than a touch. His blue-gray eyes seemed to burn like frozen fire.
“Do you think I don’t know it is a dream?” he sneered. “I know that makes it no less real.” He stared angrily out into the darkness as if looking for someone. “How long will you try?” he shouted at the night. “How many faces will you send? My mother, my father, now her! Pretty girls won’t tempt me with a kiss, not even one I know! I deny you, Father of Lies! I deny you!”
“Rand,” she said uncertainly. “It’s Egwene. I am Egwene.”
There was a sword in his hands, suddenly, out of nowhere. Its blade was worked out of a single flame, slightly curved and graven with a heron. “My mother gave me honeycake,” he said in a tight voice, “with the smell of poison rank on it. My father had a knife for my ribs. She—she offered kisses, and more.” Sweat slicked his face; his stare seemed enough to set her afire. “What do you bring?”
“You are going to listen to me, Rand al’Thor, if I have to sit on you.” She gathered saidar, channeled the flows to make the air hold him in a net.
The sword spun in his hands, roaring like an open furnace.
She grunted and staggered; it felt as if a rope stretched too tight had broken and snapped back into her.
Rand laughed. “I learn, you see. When it works . . . ” He grimaced and started toward her. “I could stand any face but that one. Not her face, burn you!” The sword flashed out.
Egwene fled.
She was not sure what it was she did, or how, but she found herself back among the rolling hills under a sunny sky, with larks singing and butterflies playing. She drew a deep, shuddering breath.
I’ve learned . . . What? That the Dark One is still after Rand? I knew that already. That maybe the Dark One wants to kill him? That’s different. Unless maybe he’s gone mad already, and does not know what he is saying. Light, why couldn’t I help him? Oh, Light, Rand!
She took another long breath to calm herself. “The only way to help him is to gentle him,” she muttered. “As well go ahead and kill him.” Her stomach twisted and knotted. “I’ll never do that. Never!”
A redbird had perched on a cloudberry bush nearby, crest lifting as it tilted its head to watch her cautiously. She addressed the bird.
The redbird took wing as she stepped toward the bush. It was still a flash of crimson as she took the next step, vanished into a thicket she took a third.
She stopped and fished the stone ring on its cord out of the front of her dress. Why was it not changing? Everything had changed so fast up till now that she could hardly catch her breath. Why not now? Unless there was some answer right here? She looked around uncertainly. The wildflowers taunted her, and the larksong mocked her. This place seemed too much of her own making.
Determined, she tightened her hand around the ter’angreal. “Take me where I need to be.”  It was stone, after all; Earth should give her some feeling for it. “Do it. Take me where I need to be.” Once again she embraced saidar, fed a trickle of the One Power into the ring. She knew it did not need any flow of Power directed at it to work, and she did not try to do anything to it. Only to give it more of the Power to use. “Take me to where I can find an answer. I need to know what the Black Ajah wants. Take me to the answer.”
“Well, you’ve found your way at last, child. All sorts of answers here.”
Egwene’s eyes snapped open. She stood in a great hall, its vast domed ceiling supported by a forest of massive redstone columns. And hanging in midair was a sword of crystal, gleaming and sparkling as it slowly revolved. She was not certain, but she thought it might be the sword Rand had been reaching for in that dream. That other dream. This all felt so real, she had to keep reminding herself it was a dream, too.
An old woman stepped out of the shadows of the column, bent and hobbling with a stick. Ugly did not begin to describe her. She had a bony, pointed chin, an even bonier, sharper nose, and it seemed there were more warts growing hairs on her face than there was face.
“Who are you?” Egwene said. The only people she had seen so far in Tel’aran’rhiod were those she already knew, but she did not think she could have forgotten this poor old woman.
“Just poor old Silvie, my Lady,” the old woman cackled. At the same time she managed a stoop that might have been meant for a curtsy, or possibly a cringe. “You know poor old Silvie, my Lady. Served your family faithfully all these years. Does this old face still frighten you? Don’t let it, my Lady. It serves me, when I need it, as good as a prettier.”
“Of course, it does,” Egwene said. “It’s a strong face. A good face.” She hoped the woman believed it. Whoever this Silvie was, she seemed to think she knew Egwene. Perhaps she knew answers, too. “Silvie, you said something about finding answers here.”
“Oh, you’ve come to the right place for answers, my Lady. The Heart of the Stone is full of answers. And secrets. The High Lords would not be pleased to see us here, my Lady. Oh, no. None but the High Lords enter here. And servants, of course.” She gave a sly, screeching laugh. “The High Lords don’t sweep and mop. But who sees a servant?”
“What kind of secrets?”
But Silvie was hobbling toward the crystal sword. “Plots,” she said as if to herself. “All of them pretending to serve the Great Lord, and all the while plotting and planning to regain what they lost. Each one thinking he or she is the only one plotting. Ishamael is a fool!”
“What?” Egwene said sharply. “What did you say about Ishamael?”
The old woman turned to present a crooked, ingratiating smile. “Just a thing poor folks say, my Lady. It turns the Forsaken’s power, calling them fools. Makes you feel good, and safe.  Try it, my Lady. Say, Ba’alzamon is a fool!”
Egwene’s lips twitched on the edge of a smile. “Ba’alzamon is a fool! You are right, Silvie.” It actually did feel good, laughing at the Dark One. The old woman chuckled. The sword revolved just beyond her shoulder. “Silvie, what is that?”
“Callandor, my Lady. You know that, don’t you? The Sword That Cannot Be Touched.”  Silvie grinned wider. “The Sword That Is Not a Sword, though there’s precious few knows what it is. But none can touch it save one. They saw to that, who put it here. The Dragon Reborn will hold Callandor one day, and prove to the world he’s the Dragon by doing it. The first proof, anyway. Lews Therin come back for all the world to see, and grovel before. Ah, the High Lords don’t like having it here. They like nothing to do with the Power. They’d rid themselves of it, if they could. If they could. I suppose there’s others would take it, if they could. What wouldn’t one of the Forsaken give, to hold Callandor?”
Egwene stared at the sparkling sword. If the Prophecies of the Dragon were true, if Rand was the Dragon as Moiraine claimed, he would wield it one day, though from the rest of what she knew of the Prophecies concerning Callandor, she could not see how it could ever come to be. But if there’s a way to take it, maybe the Black Ajah knows how. If they know it, I can figure it out.
Cautiously, she reached out with the Power, probing at whatever held and shielded the sword. Her probe touched—something—and stopped. She could sense which of the Five Powers had been used here. Air, and Fire, and Spirit. She could trace the intricate weave made by saidar, set with a strength that amazed her. There were gaps in that weave, spaces where her probe should slide through. When she tried, it was like fighting the strongest part of the weave head on. It hit her then, what she was trying to force a way through, and she let her probe vanish. Half that wall had been woven using saidar; the other half, the part she could not sense or touch, had been made with saidin. That was not it, exactly—the wall was all of one piece—but it was close enough. A stone wall stops a blind woman as surely as one who can see it.
Footsteps echoed in the distance. Boots.
Egwene could not tell how many there were, or from which direction they were coming, but Silvie gave a start and immediately stared off among the columns. “He’s coming to stare at it again,” she muttered. “Awake or asleep, he wants . . . ” She seemed to remember Egwene, and put on a worried smile. “You must leave, now, my Lady. He mustn’t find you here, or even know you’ve been.”
Egwene was already backing in among the columns, and Silvie followed, flapping her hands and waving her stick. “I am going, Silvie. I just have to remember the way.” She fingered the stone ring. “Take me back to the hills.” Nothing happened: She channeled a hairlike flow to the ring. “Take me back to the hills.” The redstone columns still surrounded her. The boots were closer, close enough not to be swallowed in their own echoes anymore.
“You don’t know the way out,” Sylvie said flatly, then went on in a near whisper, ingratiating and mocking at once, an old retainer who felt she could take liberties. “Oh, my Lady, this is a dangerous place to come into, if you don’t know the way out. Come, let poor old Silvie take you out.  She wrapped both arms around Egwene, urging her further from the sword. Not that Egwene needed much urging. The boots had stopped; he—whoever he was—was probably gazing at Callandor.
“Just show me the way,” Egwene whispered back. “Or tell me. There’s no need to push.” The old woman’s fingers had somehow gotten tangled around the stone ring. “Don’t touch that, Silvie.”
“Safe in your bed.”
Pain annihilated the world.
With a throat-wrenching shriek, Egwene sat up in the dark, sweat rolling down her face. For a moment she had no idea where she was, and did not care. “Oh, Light,” she moaned, “that hurt. Oh, Light, that hurt!” She ran her hands over herself, sure her skin must be scored or wealed to make such a burning, but she could not find a mark.
“We are here,” Nynaeve’s voice said from the darkness. “We’re here, Egwene.”
Egwene threw herself toward the voice and wrapped her arms around Nynaeve’s neck in sheer relief. “Oh, Light, I’m back. Light, I’m back.”
“Elayne,” Nynaeve said.
In a few moments one of the candles was giving a small light. Elayne paused with the candle in hand and the spill she had lit with flint and steel in the other. Then she smiled, and every candle in the room burst into flame. She stopped at the washstand and came back to the bed with a cool, damp cloth to wash Egwene’s face.
“Was it bad?” she asked worriedly. “You never stirred. You never mumbled. We did not know whether to wake you or not.”
Hurriedly, Egwene fumbled the leather cord from around her neck and hurled it and the stone ring across the room. “Next time,” she panted, “we decide on a time, and you wake me after it. Wake me if you have to stick my head in a basin of water!” She had not realized that she had decided there would be a next time.  Would you do it twice just because you’d done it once and didn’t die?
Yet it was more than a matter of proving to herself that she was not afraid. She was afraid, and knew it. But so long as the Black Ajah had those ter’angreal Corianin had studied, she would have to keep going back. She was sure the answer to why they wanted them lay in Tel’aran’rhiod. If she could find answers about the Black Ajah there perhaps other answers, too, if half what she had been told about Dreaming were true—she had to go back. “But not tonight,” she said softly. “Not yet.”
“What happened?” Nynaeve asked. “What did you . . . dream?”
Egwene lay back on the bed and told them. Of it all, the only thing she left out was about Perrin talking to the wolf. She left the wolf out altogether. She felt a little guilty about keeping secrets from Elayne and Nynaeve, but it was Perrin’s secret to tell, when and if he chose, not hers. The rest she gave them word for word, describing everything. When she was done, she felt emptied.
“Aside from being tired,” Elayne said, “did he look hurt? Egwene, I cannot believe he would ever hurt you. I cannot believe he would.”
“Rand,” Nynaeve said dryly, “will have to look after himself awhile longer.” Elayne blushed; she looked pretty doing it. Egwene realized that Elayne looked pretty doing anything, even crying, or scrubbing pots. “Callandor,” Nynaeve continued. “The Heart of the Stone. That was marked on the plan. I think we know where the Black Ajah is.”
Elayne had regained her poise. “It does not change the trap,” she said. “If it is not a diversion, it is a trap.”
Nynaeve smiled grimly. “The best way to catch whoever set a trap is to spring it and wait for him to come. Or her, in this instance.”
“You mean go to Tear?” Egwene said, and Nynaeve nodded.
“The Amyrlin has cut us loose, it seems. We make our own decisions, remember? At least we know the Black Ajah is in Tear, and we know who to look for there. Here, all we can do is sit and stew in our own suspicions of everybody, wonder if there is another Gray Man out there. I would rather be the hound than the rabbit.”
“I have to write to my mother,” Elayne said. When she saw the looks they gave her, her voice became defensive. “I have already vanished once without her knowing where I was. If I do it again . . . You do not know Mother’s temper. She could send Gareth Bryne and the whole army against Tar Valon. Or hunting after us.”
“You could stay here,” Egwene said.
“No. I will not let you two go alone. And I won’t stay here wondering if the sister teaching me is a Darkfriend, or if the next Gray Man will come after me.” She gave a small laugh. “I will not work in the kitchens while you two are off adventuring, either. I just have to tell my mother than I am out of the Tower on the Amyrlin’s orders, so she won’t become furious if she hears rumors. I do not have to tell her where we are going, or why.”
“You surely had better not,” Nynaeve said. “She very likely would come after you if she knew about the Black Ajah. For that matter, you can’t know how many hands your letter will pass through before it reaches her, or what eyes might read it. Best not to say anything you don’t mind anyone knowing.”
“That’s another thing.” Elayne sighed. “The Amyrlin does not know I am one of you. I have to find some way to send it with no chance of her seeing it.”
“I will have to think on that.” Nynaeve’s brows furrowed. “Perhaps once we’re on our way. You could leave it at Aringill on the way downriver, if we have time to find someone there going to Caemlyn. A sight of one of those papers the Amyrlin gave us might convince somebody. We will have to hope they work on ship captains, too, unless one of you has more coin than I have.” Elayne shook her head dolefully.
Egwene did not even bother. What money they had possessed had all gone on the journey from Toman Head, except for a few coppers each. “When . . . ” She had to stop and clear her throat. “When do we leave? Tonight?”
Nynaeve looked as if she were considering it for a moment, but then she shook her head. “You need sleep, after . . . ” Her gesture took in the stone ring lying where it had bounced off the wall. “We will give the Amyrlin one more chance to seek us out. When we finish with breakfast, you both pack what you want to take, but keep it light. We have to leave the Tower without anyone noticing, remember. If the Amyrlin doesn’t reach us by midday, I mean to be on a trading ship, shoving that paper down the captain’s throat if need be, before Prime sounds. How does that sound to you two?”
“It sounds excellent,” Elayne said firmly, and Egwene said, “Tonight or tomorrow, the sooner the better, as far as I can see.” She wished she sounded as confident as Elayne.
“Then we had best get some sleep.”
“Nynaeve,” Egwene said in a small voice, “I . . . I don’t want to be alone tonight.” It pained her to make that admission.
“I don’t, either,” Elayne said. “I keep thinking about the Soulless. I do not know why, but they frighten me even more than the Black Ajah.”
“I suppose,” Nynaeve said slowly, “I don’t really want to be alone, myself.” She eyed the bed where Egwene lay. “That looks big enough for three, if everybody keeps her elbows to herself.”
Later, when they were shifting about trying to find a way to lie that did not feel so crowded, Nynaeve suddenly laughed.
“What is it?” Egwene asked. “You are not that ticklish.”
“I just thought of someone who’d be happy to carry Elayne’s letter for her. Happy to leave Tar Valon, too. In fact, I’d bet on it.”


Scalability problems can be solved using many approaches. This document describes Vitess’ approach to address these problems.
When deciding to shard or break databases up into smaller parts, it’s tempting to break them just enough that they fit in one machine. In the industry, it’s common to run only one MySQL instance per host.
Vitess recommends that instances be broken up to be even smaller, and not to shy away from running multiple instances per host. The net resource usage would be about the same. But the manageability greatly improves when MySQL instances are small. There is the complication of keeping track of ports, and separating the paths for the MySQL instances. However, everything else becomes simpler once this hurdle is crossed.
There are fewer lock contentions to worry about, replication is a lot happier, production impact of outages become smaller, backups and restores run faster, and a lot more secondary advantages can be realized. For example, you can shuffle instances around to get better machine or rack diversity leading to even smaller production impact on outages, and improved resource usage.
Although Vitess is designed to run in the cloud, it is entirely possible to run it on baremetal configs, and many users still do. If deploying in a cloud, the assignment of servers and ports is abstracted away from the administrator. On baremetal, the operator still has these responsibilities.
We provide sample configs to help you get started on Kubernetes since it's the most similar to Borg (the predecessor to Kubernetes on which Vitess now runs in YouTube). If you're more familiar with alternatives like Mesos, Swarm, Nomad, or DC/OS, we'd welcome your contribution of sample configs for Vitess.
These orchestration systems typically use containers to isolate small instances so they can be efficiently packed onto machines without contention on ports, paths, or compute resources. Then an automated scheduler does the job of shuffling instances around for failure resilience and optimum utilization.
Traditional data storage software treated data as durable as soon as it was flushed to disk. However, this approach is impractical in today’s world of commodity hardware. Such an approach also does not address disaster scenarios.
The new approach to durability is achieved by copying the data to multiple machines, and even geographical locations. This form of durability addresses the modern concerns of device failures and disasters.
Many of the workflows in Vitess have been built with this approach in mind. For example, turning on semi-sync replication is highly recommended. This allows Vitess to failover to a new replica when a master goes down, with no data loss. Vitess also recommends that you avoid recovering a crashed database. Instead, create a fresh one from a recent backup and let it catch up.
Relying on replication also allows you to loosen some of the disk-based durability settings. For example, you can turn off sync_binlog, which greatly reduces the number of IOPS to the disk thereby increasing effective throughput.
Before sharding or moving tables to different keyspaces, the application needs to be verified (or changed) such that it can tolerate the following changes:
Single shard transactions continue to remain ACID, just like MySQL supports it.
If there are read-only code paths that can tolerate slightly stale data, the queries should be sent to REPLICA tablets for OLTP, and RDONLY tablets for OLAP workloads. This allows you to scale your read traffic more easily, and gives you the ability to distribute them geographically.
This tradeoff allows for better throughput at the expense of stale or possible inconsistent reads, since the reads may be lagging behind the master, as data changes (and possibly with varying lag on different shards). To mitigate this, VTGates are capable of monitoring replica lag and can be configured to avoid serving data from instances that are lagging beyond X seconds.
For true snapshot, the queries must be sent to the master within a transaction. For read-after-write consistency, reading from the master without a transaction is sufficient.
To summarize, these are the various levels of consistency supported:
As for atomicity, the following levels are supported:
Vitess doesn’t support multi-master setup. It has alternate ways of addressing most of the use cases that are typically solved by multi-master:
There are two main ways to access the data for offline data processing (as opposed to online web or direct access to the live data): sending queries to rdonly servers, or using a Map Reduce framework.
These are regular queries, but they can consume a lot of data. Typically, the streaming APIs are used, to consume large quantities of data.
These queries are just sent to the rdonly servers (also known as batch servers). They can take as much resources as they want without affecting live traffic.
Vitess supports MapReduce access to the data. Vitess provides a Hadoop connector, that can also be used with Apache Spark. See the Hadoop package documentation for more information.
With a MapReduce framework, Vitess does not support very complicated queries. In part because it would be difficult and not very efficient, but also because the MapReduce frameworks are usually very good at data processing. So instead of doing very complex SQL queries and have processed results, it is recommended to just dump the input data out of Vitess (with simple select statements), and process it with a MapReduce pipeline.
Vitess is meant to run in multiple data centers / regions / cells. In this part, we'll use cell as a set of servers that are very close together, and share the same regional availability.
A cell typically contains a set of tablets, a vtgate pool, and app servers that use the Vitess cluster. With Vitess, all components can be configured and brought up as needed:
Note Vitess uses local-cell data first, and is very resilient to any cell going down (most of our processes handle that case gracefully).
Vitess is a highly available service, and Vitess itself needs to store a small amount of metadata very reliably. For that purpose, Vitess needs a highly available and consistent data store.
Lock servers were built for this exact purpose, and Vitess needs one such cluster to be setup to run smoothly. Vitess can be customized to utilize any lock server, and by default it supports Zookeeper, etcd and Consul. We call this component Topology Service.
As Vitess is meant to run in multiple data centers / regions (called cells below), it relies on two different lock servers:
This separation is key to higher reliability. A single cell going bad is never critical for Vitess, as the global instance is configured to survive it, and other cells can take over the production traffic. The global instance can be unavailable for minutes and not affect serving at all (it would affect VSchema changes for instance, but these are not critical, they can wait for the global instance to be back).
If Vitess is only running in one cell, both global and local instances can share the same lock service instance. It is always possible to split them later when expanding to multiple cells.
The most stressful part of running a production system is the situation where one is trying to troubleshoot an ongoing outage. You have to be able to get to the root cause quickly and find the correct remedy. This is one area where monitoring becomes critical and Vitess has been battle-tested. A large number of internal state variables and counters are continuously exported by Vitess through the /debug/vars and other URLs. There’s also work underway to integrate with third party monitoring tools like Prometheus.
Vitess errs on the side of over-reporting, but you can be picky about which of these variables you want to monitor. It’s important and recommended to plot graphs of this data because it’s easy to spot the timing and magnitude of a change. It’s also essential to set up various threshold-based alerts that can be used to proactively prevent outages.
Vitess provides binaries and scripts to make unit testing of the application code very easy. With these tools, we recommend to unit test all the application features if possible.
A production environment for a Vitess cluster involves a topology service, multiple database instances, a vtgate pool and at least one vtctld process, possibly in multiple data centers. The vttest library uses the vtcombo binary to combine all the Vitess processes into just one. The various databases are also combined into a single MySQL instance (using different database names for each shard). The database schema is initialized at startup. The (optional) VSchema is also initialized at startup.
A few things to consider:
Although Vitess strives to minimize the app changes required to scale, there are some important considerations for application queries.
Since vitess represents a combined view of all MySQL instances, there are some operations it cannot reasonably perform in a backward compatible manner. For example:
SET GLOBAL
SHOW
However, Vitess allows you to target a single MySQL instance through
an extended syntax of the USE
statement. If so, it will
allow you to execute some of these statements as pass-through.
If your application previously connected to master or replica instances through different hosts and ports, those parts will have to be changed to connect to a single load-balanced IP.
Instead, the database type will be specified as part of the
db name. For example, to connect to a master, you would specify
the dbname as db@master
. For a replica, it would be
db@replica
.
A sharded Vitess is not 100% backward compatible with MySQL. Some queries that used to work will cease to work. It’s important that you run all your queries on a sharded test environment -- see the Development workflow section above -- to make sure none will fail on production.
Our goal is to expand query support based on the needs of users. If you encounter an important construct that isn't supported, please create or comment on an existing feature request so we know how to prioritize.


{% extends "layout.html" %} {% block title %}Home{% endblock %} {% block content %}
This website will ask you a series of questions about the history of World War One, then show you how you did by displaying the correct answers along with what you entered.


-
Jessica White
Re: Long time no see!
Hey, Kim! So glad to hear from you
12:45AM
-
Alison Rhee
Re: Long time no see!
Hey, Kim! So glad to hear from you
12:45AM
-
Jessica White
Re: Long time no see!
Hey, Kim! So glad to hear from you
12:45AM
-
Alison Rhee
Re: Long time no see!
Hey, Kim! So glad to hear from you
12:45AM
-
Jessica White
Re: Long time no see!
Hey, Kim! So glad to hear from you
12:45AM
-
Alison Rhee
Re: Long time no see!
Hey, Kim! So glad to hear from you
12:45AM
-
Jessica White
Re: Long time no see!
Hey, Kim! So glad to hear from you
12:45AM
-
Alison Rhee
Re: Long time no see!
Hey, Kim! So glad to hear from you
12:45AM


Carillon Updater
You need JavaScript enabled to update stream metadata
Title:
Composer:
Live:
Update
Clear
Stream metadata updated!


Imagine a world without Google! While it’s ubiquitous today with services that span every aspect of lives, it all began as a search engine which brough the world to us, one search at a time. When the Internet first began, and in early days of World Wide Web, there was no way to search for anything. You had to know what you wanted and where it was and then know how to get it!
Some of the most iconic tech companies tried to do Search, but no one managed to “crack the code”, figure it out, until Google came along. A pair of 20 somethings succeeded where many, some of the brightest minds in the industry, had failed.
To understand how Internet search works, we have to go way back, before even Google. The roots of Search can be found at Stanford University. While going to Stanford Jerry Yang and David Filo they hit on an idea that would become the basis for what used to be America’s best known businesses, Yahoo! When they couldn’t find out UpToDate sports information to use in their basketball league, they decided to build a directory which show users where to find stuff they were looking for on the Internet.
At the dawn of the Internet, no one was using it for business or commerce. One school of thought was that Internet was the new “media” and media had always been supported by advertisement. The founders of Yahoo! faced a serious dilemma. Placing advertisements on their website risked alienating their users. But they had already been funded by the venture capitalists and there wasn’t another means to make money on their new site. Late in 1995, Yahoo began taking banner ads. And the users didn’t seem to care! Their user base kept increasing. Yahoo! had shown how to make money on the Internet. The boom had begun!
Yahoo’s primary competition was Excite. They had developed a better technology which, instead of websites catalogued and sorted by humans, Excite was doing it by pure software. It crawled the web for the search that the user typed and found pages matching it. It was rudimentary form of what Internet Search as it exists today.
By 1997, the web was exploding, and the sites were busy redeveloping themselves as Portals, places filled with technology designed to keep users within the platform, for the benefit of advertisers. In the race to make money, however, the companies lost track of why the users were coming to their portals in the first place. To Search for something! Most of the search results came up to be sites wanting to sell you something rather than real results.
The world was primed for Google! Two Stanford University students, Sergei Brin and Larry Page. Larry had the genius insight into Search that helped launch Google. The insight though, was really simple. The Internet was running a popularity contest on it’s own content and the number of times a page was linked by other sites was an indicator how useful or relevant it was. So, all you had to do was to count the links to know which one was at the top.
Launched on Stanford’s website, founders struggled with the growing popularity of their genius, yet simple innovation. Their popularity almost brought the Stanford internet down, so the university administrators made them move it off campus. They started working with Vinod Khosla, the founder of Sun Microsystems, who introduced them to Excite. Excite was at the time bitterly competing with Yahoo and coming up short. The CTO at Excite, after a demo by Google Founders, took the idea to Excite’s CEO but they were ambivalent. Excite thought that Search was generic, and they could do it just as well as Google. It wasn’t just Excite who failed to see the potential though, every Search company did just that.
In frustration, Page and Brin, sought out David Cheriton, a professor at Stanford and a serial entrepreneur. He introduced them to Andy Bechtolsheim. He was so excited for the idea that after a first demo, wrote a check on the spot. Soon, they were able to raise additional funds from other investors and were soon in business.
After deciding against the beaten path and deciding not to have banner ads on their product at all, Google had to figure out a business model in the Search business. They found salvation in the form of Bill Gross, the founder of IdeaLab that was concentrating on the concept of web advertising. Gross’ idea was simple, to personalize the ads based on what the user was searching on! Basically, use the search engine as a basic market research tool. Use what the user was searching on to build a profile on them and then use it to target the advertising. Instead of random ads that don’t make sense, these ads would be relevant, personalized and also have better chance of generating interactions with the user, which will help refine the profile even more. Gross launched a site called overture.com based on the idea and it was instantly successful.
Overture.com came to the attention of Google founders, who saw it as an answer to their business model quandry. After unsuccessful meetings to link the two companies together, Google release Adwords, which was very similar to the Keywords concept used by Bill Gross and Overture.com in their operation. After suing Google about the similarity of the concept, both sides settled out of court and decided to work together. Google would tweak Gross’ idea in important ways, such as separating search results and ads which resulted in a better user experience.
And so, the foundation of Internet Search was laid, one that would be supposedly equitable to both the advertisers and users alike.


Download This Plugin
Back To jQueryScript.Net
jQuery countTo Plugin Examples
How many licks to the center of a Tootsie Pop?
Restart
What is Earth's radius?
Restart
miles
Start the countdown...
Restart
Lift-off in
Earth's Gravity
Restart
m/s
2
To infinity...and beyond!
Restart


| H1 |
Attitude positively affects insect-food purchase intention |
Supported |
| H2 |
Subjective norms positively affect insect-food purchase intention |
Not supported |
| H3 |
Perceived behavioral control positively affects insect-food purchase intention |
Supported |
| H4 |
Environmental concerns positively affect insect-food purchase intention |
Not supported |
| H5 |
Food neophobia will negatively affect purchase intention toward insect food |
Supported |


Book an appointment
Our advisers are available throughout the country for face-to-face and online video appointments.
You'll work with an adviser to find out what your goals are and to explore different ways of achieving them. Your discussion is private and confidential. You can make follow-up appointments if you need to.
If you're 19 or over you can use this service.