| Book of Mormon |
Annotations |
|
Chapter 1
|
|
|
1 Behold, it came to pass that I, Omni, being commanded by
my father, Jarom, that I should write somewhat upon these plates, to preserve
our genealogy—
|
|
|
2 Wherefore, in my days, I would that ye should know that
I fought much with the sword to preserve my people, the Nephites, from
falling into the hands of their enemies, the Lamanites. But behold, I of
myself am a wicked man, and I have not kept the statutes and the commandments
of the Lord as I ought to have done.
|
|
|
3 And it came to pass that two hundred and seventy and six
years had passed away, and we had many seasons of peace; and we had many
seasons of serious war and bloodshed. Yea, and in fine, two hundred and
eighty and two years had passed away, and I had kept these plates according
to the commandments of my fathers; and I conferred them upon my son Amaron.
And I make an end.
|
|
|
4 And now I, Amaron, write the things whatsoever I write,
which are few, in the book of my father.
|
|
|
5 Behold, it came to pass that three hundred and twenty
years had passed away, and the more wicked part of the Nephites were
destroyed.
|
|
|
6 For the Lord would not suffer, after he had led them out
of the land of Jerusalem and kept and preserved them from falling into the
hands of their enemies, yea, he would not suffer that the words should not be
verified, which he spake unto our fathers, saying that: Inasmuch as ye will
not keep my commandments ye shall not prosper in the land.
|
|
|
7 Wherefore, the Lord did visit them in great judgment;
nevertheless, he did spare the righteous that they should not perish, but did
deliver them out of the hands of their enemies.
|
|
|
8 And it came to pass that I did deliver the plates unto
my brother Chemish.
|
|
|
9 Now I, Chemish, write what few things I write, in the
same book with my brother; for behold, I saw the last which he wrote, that he
wrote it with his own hand; and he wrote it in the day that he delivered them
unto me. And after this manner we keep the records, for it is according to
the commandments of our fathers. And I make an end.
|
|
|
10 Behold, I, Abinadom, am the son of Chemish. Behold, it
came to pass that I saw much war and contention between my people, the
Nephites, and the Lamanites; and I, with my own sword, have taken the lives
of many of the Lamanites in the defence of my brethren.
|
|
|
11 And behold, the record of this people is engraven upon
plates which is had by the kings, according to the generations; and I know of
no revelation save that which has been written, neither prophecy; wherefore,
that which is sufficient is written. And I make an end.
|
|
|
12 Behold, I am Amaleki, the son of Abinadom. Behold, I
will speak unto you somewhat concerning Mosiah, who was made king over the
land of Zarahemla; for behold, he being warned of the Lord that he should
flee out of the land of Nephi, and as many as would hearken unto the voice of
the Lord should also depart out of the land with him, into the wilderness—
|
|
|
13 And it came to pass that he did according as the Lord
had commanded him. And they departed out of the land into the wilderness, as
many as would hearken unto the voice of the Lord; and they were led by many
preachings and prophesyings. And they were admonished continually by the word
of God; and they were led by the power of his arm, through the wilderness
until they came down into the land which is called the land of Zarahemla.
|
|
|
14 And they discovered a people, who were called the
people of Zarahemla. Now, there was great rejoicing among the people of
Zarahemla; and also Zarahemla did rejoice exceedingly, because the Lord had
sent the people of Mosiah with the plates of brass which contained the record
of the Jews.
|
|
|
15 Behold, it came to pass that Mosiah discovered that the
people of Zarahemla came out from Jerusalem at the time that Zedekiah, king
of Judah, was carried away captive into Babylon.
|
|
|
16 And they journeyed in the wilderness, and were brought
by the hand of the Lord across the great waters, into the land where Mosiah
discovered them; and they had dwelt there from that time forth.
|
|
|
17 And at the time that Mosiah discovered them, they
had become exceedingly numerous. Nevertheless, they had had many wars and serious
contentions, and had fallen by the sword from time to time; and their
language had become corrupted; and they had brought no records with them; and
they denied the being of their Creator; and Mosiah, nor the people of Mosiah,
could understand them.
|
The people of Zarahemla is another group that left the Old
World near 600 BCE. Let’s generously assume they came to the new world as a
group of 100 (maybe three or so times as large as Lehi’s group). The chapter
summary points out that at this point it could be as late as 133 BCE, so as
long as almost 500 years after the people of Zarahemla came to the Americas.
Assuming their population doubled every hundred years (a very generous
assumption considering they had left civilization to settle a new land “and had
fallen by the sword from time to time”). At that rate, they would have had a
population of 3,000 people given these assumptions.
This tells us that like Lehi’s descendants the people of
Zarahemla had swords. The only pre-Columbian weapon I can find that was
similar to a sword was the macuahuitl which was made with a plank of wood
similar in shape to a cricket bat with obsidian blades mounted on the edges.
It is similar enough to a sword that it is often referred to as the Aztec
sword.
However, the macuahuitl does not seem to fit the Book of
Mormon time frame. “Some groups of Central Mexico, principally in the
transition between the Early and the Late Post-Classic, probably
developed this weapon” (emphasis added, Dr. Marco Antonio Cervera Obregón,
“The macuahuitl: an innovative weapon of the Late Post-Classic in
Mesoamerica”, Arms & Armour, Vol.3, Nov. 2, 2006, p. 146, article from a research journal).
The Post-Classic period is between 900 CE and the Spanish conquest.
|
|
18 But it came to pass that Mosiah caused that they should
be taught in his language. And it came to pass that after they were taught in
the language of Mosiah, Zarahemla gave a genealogy of his fathers, according
to his memory; and they are written, but not in these plates.
|
|
|
19 And it came to pass that the people of Zarahemla, and
of Mosiah, did unite together; and Mosiah was appointed to be their king.
|
|
|
20 And it came to pass in the days of Mosiah, there was a
large stone brought unto him with engravings on it; and he did interpret the
engravings by the gift and power of God.
|
Notice how engravings were brought to Mosiah for
interpretation. They did not take the engravings to a scholar, but to a seer.
Contrast this with some of the papyri associated with the Book of Abraham and
the Book of Joseph. When these papyri were rediscovered in 1966 and given to
the LDS Church, the prophets, seers, and revelators gave no interpretations
of the writing. Instead, they gave it to scholars like Hugh Nibley to
interpret. Why? Why do we have seers if they are not using this gift as
described in Mosiah 8:13-17? Why have the seers not told us whether the
existing papyri have the Book of Joseph on them?
|
|
21 And they gave an account of one Coriantumr, and the
slain of his people. And Coriantumr was discovered by the people of
Zarahemla; and he dwelt with them for the space of nine moons.
|
|
|
22 It also spake a few words concerning his fathers. And
his first parents came out from the tower, at the time the Lord confounded
the language of the people; and the severity of the Lord fell upon them
according to his judgments, which are just; and their bones lay scattered in
the land northward.
|
This declares the Tower of Babel account a literal and
factual event. If true, this would mean that until about 4,200 years ago
(according to Bible chronologies I’ve seen including those at
www.churchofjesuschrist.org) there was only one language on the earth, then
at the Tower of Babel event, all languages were confounded (except for the
Jaredites). This is not compatible with what we know about the evolution of
language. (See also the second paragraph to the Introduction to the Book of
Mormon, Mosiah 28:17, Helaman 6:28, Ether 1:33)
|
|
23 Behold, I, Amaleki, was born in the days of Mosiah; and
I have lived to see his death; and Benjamin, his son, reigneth in his stead.
|
|
|
24 And behold, I have seen, in the days of king Benjamin,
a serious war and much bloodshed between the Nephites and the Lamanites. But
behold, the Nephites did obtain much advantage over them; yea, insomuch that
king Benjamin did drive them out of the land of Zarahemla.
|
|
|
25 And it came to pass that I began to be old; and, having
no seed, and knowing king Benjamin to be a just man before the Lord,
wherefore, I shall deliver up these plates unto him, exhorting all men to
come unto God, the Holy One of Israel, and believe in prophesying, and in
revelations, and in the ministering of angels, and in the gift of speaking
with tongues, and in the gift of interpreting languages, and in all things
which are good; for there is nothing which is good save it comes from the
Lord: and that which is evil cometh from the devil.
|
|
|
26 And now, my beloved brethren, I would that ye should
come unto Christ, who is the Holy One of Israel, and partake of his
salvation, and the power of his redemption. Yea, come unto him, and offer
your whole souls as an offering unto him, and continue in fasting and
praying, and endure to the end; and as the Lord liveth ye will be saved.
|
|
|
27 And now I would speak somewhat concerning a certain
number who went up into the wilderness to return to the land of Nephi; for
there was a large number who were desirous to possess the land of their
inheritance.
|
|
|
28 Wherefore, they went up into the wilderness. And their
leader being a strong and mighty man, and a stiffnecked man, wherefore he
caused a contention among them; and they were all slain, save fifty, in the
wilderness, and they returned again to the land of Zarahemla.
|
|
|
29 And it came to pass that they also took others to a
considerable number, and took their journey again into the wilderness.
|
|
|
30 And I, Amaleki, had a brother, who also went with them;
and I have not since known concerning them. And I am about to lie down in my
grave; and these plates are full. And I make an end of my speaking.
|
|


public abstract class SampleModel extends Object
Subclasses of SampleModel specify the types of samples they can represent (e.g. unsigned 8-bit byte, signed 16-bit short, etc.) and may specify how the samples are organized in memory. In the Java 2D(tm) API, built-in image processing operators may not operate on all possible sample types, but generally will work for unsigned integral samples of 16 bits or less. Some operators support a wider variety of sample types.
A collection of pixels is represented as a Raster, which consists of a DataBuffer and a SampleModel. The SampleModel allows access to samples in the DataBuffer and may provide low-level information that a programmer can use to directly manipulate samples and pixels in the DataBuffer.
This class is generally a fall back method for dealing with images. More efficient code will cast the SampleModel to the appropriate subclass and extract the information needed to directly manipulate pixels in the DataBuffer.
| Modifier and Type | Field and Description |
|---|---|
protected int |
dataType
Data type of the DataBuffer storing the pixel data.
|
protected int |
height
Height in pixels of the region of image data that this SampleModel
describes.
|
protected int |
numBands
Number of bands of the image data that this SampleModel describes.
|
protected int |
width
Width in pixels of the region of image data that this SampleModel
describes.
|
| Constructor and Description |
|---|
SampleModel(int dataType,
int w,
int h,
int numBands)
Constructs a SampleModel with the specified parameters.
|
| Modifier and Type | Method and Description |
|---|---|
abstract SampleModel |
createCompatibleSampleModel(int w,
int h)
Creates a SampleModel which describes data in this SampleModel's
format, but with a different width and height.
|
abstract DataBuffer |
createDataBuffer()
Creates a DataBuffer that corresponds to this SampleModel.
|
abstract SampleModel |
createSubsetSampleModel(int[] bands)
Creates a new SampleModel
with a subset of the bands of this
SampleModel.
|
Object |
getDataElements(int x,
int y,
int w,
int h,
Object obj,
DataBuffer data)
Returns the pixel data for the specified rectangle of pixels in a
primitive array of type TransferType.
|
abstract Object |
getDataElements(int x,
int y,
Object obj,
DataBuffer data)
Returns data for a single pixel in a primitive array of type
TransferType.
|
int |
getDataType()
Returns the data type of the DataBuffer storing the pixel data.
|
int |
getHeight()
Returns the height in pixels.
|
int |
getNumBands()
Returns the total number of bands of image data.
|
abstract int |
getNumDataElements()
Returns the number of data elements needed to transfer a pixel
via the getDataElements and setDataElements methods.
|
double[] |
getPixel(int x,
int y,
double[] dArray,
DataBuffer data)
Returns the samples for the specified pixel in an array of double.
|
float[] |
getPixel(int x,
int y,
float[] fArray,
DataBuffer data)
Returns the samples for the specified pixel in an array of float.
|
int[] |
getPixel(int x,
int y,
int[] iArray,
DataBuffer data)
Returns the samples for a specified pixel in an int array,
one sample per array element.
|
double[] |
getPixels(int x,
int y,
int w,
int h,
double[] dArray,
DataBuffer data)
Returns all samples for a rectangle of pixels in a double
array, one sample per array element.
|
float[] |
getPixels(int x,
int y,
int w,
int h,
float[] fArray,
DataBuffer data)
Returns all samples for a rectangle of pixels in a float
array, one sample per array element.
|
int[] |
getPixels(int x,
int y,
int w,
int h,
int[] iArray,
DataBuffer data)
Returns all samples for a rectangle of pixels in an
int array, one sample per array element.
|
abstract int |
getSample(int x,
int y,
int b,
DataBuffer data)
Returns the sample in a specified band for the pixel located
at (x,y) as an int.
|
double |
getSampleDouble(int x,
int y,
int b,
DataBuffer data)
Returns the sample in a specified band
for a pixel located at (x,y) as a double.
|
float |
getSampleFloat(int x,
int y,
int b,
DataBuffer data)
Returns the sample in a specified band
for the pixel located at (x,y) as a float.
|
double[] |
getSamples(int x,
int y,
int w,
int h,
int b,
double[] dArray,
DataBuffer data)
Returns the samples for a specified band for a specified rectangle
of pixels in a double array, one sample per array element.
|
float[] |
getSamples(int x,
int y,
int w,
int h,
int b,
float[] fArray,
DataBuffer data)
Returns the samples for a specified band for the specified rectangle
of pixels in a float array, one sample per array element.
|
int[] |
getSamples(int x,
int y,
int w,
int h,
int b,
int[] iArray,
DataBuffer data)
Returns the samples for a specified band for the specified rectangle
of pixels in an int array, one sample per array element.
|
abstract int[] |
getSampleSize()
Returns the size in bits of samples for all bands.
|
abstract int |
getSampleSize(int band)
Returns the size in bits of samples for the specified band.
|
int |
getTransferType()
Returns the TransferType used to transfer pixels via the
getDataElements and setDataElements methods.
|
int |
getWidth()
Returns the width in pixels.
|
void |
setDataElements(int x,
int y,
int w,
int h,
Object obj,
DataBuffer data)
Sets the data for a rectangle of pixels in the specified DataBuffer
from a primitive array of type TransferType.
|
abstract void |
setDataElements(int x,
int y,
Object obj,
DataBuffer data)
Sets the data for a single pixel in the specified DataBuffer from a
primitive array of type TransferType.
|
void |
setPixel(int x,
int y,
double[] dArray,
DataBuffer data)
Sets a pixel in the DataBuffer using a double array of samples
for input.
|
void |
setPixel(int x,
int y,
float[] fArray,
DataBuffer data)
Sets a pixel in the DataBuffer using a float array of samples for input.
|
void |
setPixel(int x,
int y,
int[] iArray,
DataBuffer data)
Sets a pixel in the DataBuffer using an int array of samples for input.
|
void |
setPixels(int x,
int y,
int w,
int h,
double[] dArray,
DataBuffer data)
Sets all samples for a rectangle of pixels from a double array
containing one sample per array element.
|
void |
setPixels(int x,
int y,
int w,
int h,
float[] fArray,
DataBuffer data)
Sets all samples for a rectangle of pixels from a float array containing
one sample per array element.
|
void |
setPixels(int x,
int y,
int w,
int h,
int[] iArray,
DataBuffer data)
Sets all samples for a rectangle of pixels from an int array containing
one sample per array element.
|
void |
setSample(int x,
int y,
int b,
double s,
DataBuffer data)
Sets a sample in the specified band for the pixel located at (x,y)
in the DataBuffer using a double for input.
|
void |
setSample(int x,
int y,
int b,
float s,
DataBuffer data)
Sets a sample in the specified band for the pixel located at (x,y)
in the DataBuffer using a float for input.
|
abstract void |
setSample(int x,
int y,
int b,
int s,
DataBuffer data)
Sets a sample in the specified band for the pixel located at (x,y)
in the DataBuffer using an int for input.
|
void |
setSamples(int x,
int y,
int w,
int h,
int b,
double[] dArray,
DataBuffer data)
Sets the samples in the specified band for the specified rectangle
of pixels from a double array containing one sample per array element.
|
void |
setSamples(int x,
int y,
int w,
int h,
int b,
float[] fArray,
DataBuffer data)
Sets the samples in the specified band for the specified rectangle
of pixels from a float array containing one sample per array element.
|
void |
setSamples(int x,
int y,
int w,
int h,
int b,
int[] iArray,
DataBuffer data)
Sets the samples in the specified band for the specified rectangle
of pixels from an int array containing one sample per array element.
|
protected int width
protected int height
protected int numBands
protected int dataType
DataBuffer
public SampleModel(int dataType, int w, int h, int numBands)
dataType
- The data type of the DataBuffer storing the pixel data.w
- The width (in pixels) of the region of image data.h
- The height (in pixels) of the region of image data.numBands
- The number of bands of the image data.IllegalArgumentException
- if w
or h
is not greater than 0IllegalArgumentException
- if the product of w
and h
is greater than
Integer.MAX_VALUE
IllegalArgumentException
- if dataType
is not
one of the supported data typespublic final int getWidth()
SampleModel
describes.public final int getHeight()
SampleModel
describes.public final int getNumBands()
SampleModel
describes.public abstract int getNumDataElements()
getDataElements(int, int, Object, DataBuffer)
,
getDataElements(int, int, int, int, Object, DataBuffer)
,
setDataElements(int, int, Object, DataBuffer)
,
setDataElements(int, int, int, int, Object, DataBuffer)
,
getTransferType()
public final int getDataType()
public int getTransferType()
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
x
- The X coordinate of the pixel locationy
- The Y coordinate of the pixel locationiArray
- If non-null, returns the samples in this arraydata
- The DataBuffer containing the image dataNullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if iArray is too small to hold the output.setPixel(int, int, int[], DataBuffer)
public abstract Object getDataElements(int x, int y, Object obj, DataBuffer data)
The following code illustrates transferring data for one pixel from
DataBuffer db1
, whose storage layout is described by
SampleModel sm1
, to DataBuffer db2
, whose
storage layout is described by SampleModel sm2
.
The transfer will generally be more efficient than using
getPixel/setPixel.
SampleModel sm1, sm2; DataBuffer db1, db2; sm2.setDataElements(x, y, sm1.getDataElements(x, y, null, db1), db2);Using getDataElements/setDataElements to transfer between two DataBuffer/SampleModel pairs is legitimate if the SampleModels have the same number of bands, corresponding bands have the same number of bits per sample, and the TransferTypes are the same.
If obj is non-null, it should be a primitive array of type TransferType. Otherwise, a ClassCastException is thrown. An ArrayIndexOutOfBoundsException may be thrown if the coordinates are not in bounds, or if obj is non-null and is not large enough to hold the pixel data.
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.obj
- If non-null, a primitive array in which to return
the pixel data.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if obj is too small to hold the output.getNumDataElements()
,
getTransferType()
,
DataBuffer
,
setDataElements(int, int, Object, DataBuffer)
public Object getDataElements(int x, int y, int w, int h, Object obj, DataBuffer data)
The following code illustrates transferring data for a rectangular
region of pixels from
DataBuffer db1
, whose storage layout is described by
SampleModel sm1
, to DataBuffer db2
, whose
storage layout is described by SampleModel sm2
.
The transfer will generally be more efficient than using
getPixels/setPixels.
SampleModel sm1, sm2; DataBuffer db1, db2; sm2.setDataElements(x, y, w, h, sm1.getDataElements(x, y, w, h, null, db1), db2);Using getDataElements/setDataElements to transfer between two DataBuffer/SampleModel pairs is legitimate if the SampleModels have the same number of bands, corresponding bands have the same number of bits per sample, and the TransferTypes are the same.
If obj is non-null, it should be a primitive array of type TransferType. Otherwise, a ClassCastException is thrown. An ArrayIndexOutOfBoundsException may be thrown if the coordinates are not in bounds, or if obj is non-null and is not large enough to hold the pixel data.
x
- The minimum X coordinate of the pixel rectangle.y
- The minimum Y coordinate of the pixel rectangle.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.obj
- If non-null, a primitive array in which to return
the pixel data.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if obj is too small to hold the output.getNumDataElements()
,
getTransferType()
,
setDataElements(int, int, int, int, Object, DataBuffer)
,
DataBuffer
public abstract void setDataElements(int x, int y, Object obj, DataBuffer data)
The following code illustrates transferring data for one pixel from
DataBuffer db1
, whose storage layout is described by
SampleModel sm1
, to DataBuffer db2
, whose
storage layout is described by SampleModel sm2
.
The transfer will generally be more efficient than using
getPixel/setPixel.
SampleModel sm1, sm2; DataBuffer db1, db2; sm2.setDataElements(x, y, sm1.getDataElements(x, y, null, db1), db2);Using getDataElements/setDataElements to transfer between two DataBuffer/SampleModel pairs is legitimate if the SampleModels have the same number of bands, corresponding bands have the same number of bits per sample, and the TransferTypes are the same.
obj must be a primitive array of type TransferType. Otherwise, a ClassCastException is thrown. An ArrayIndexOutOfBoundsException may be thrown if the coordinates are not in bounds, or if obj is not large enough to hold the pixel data.
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.obj
- A primitive array containing pixel data.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if obj is too small to hold the input.getNumDataElements()
,
getTransferType()
,
getDataElements(int, int, Object, DataBuffer)
,
DataBuffer
public void setDataElements(int x, int y, int w, int h, Object obj, DataBuffer data)
The following code illustrates transferring data for a rectangular
region of pixels from
DataBuffer db1
, whose storage layout is described by
SampleModel sm1
, to DataBuffer db2
, whose
storage layout is described by SampleModel sm2
.
The transfer will generally be more efficient than using
getPixels/setPixels.
SampleModel sm1, sm2; DataBuffer db1, db2; sm2.setDataElements(x, y, w, h, sm1.getDataElements(x, y, w, h, null, db1), db2);Using getDataElements/setDataElements to transfer between two DataBuffer/SampleModel pairs is legitimate if the SampleModels have the same number of bands, corresponding bands have the same number of bits per sample, and the TransferTypes are the same.
obj must be a primitive array of type TransferType. Otherwise, a ClassCastException is thrown. An ArrayIndexOutOfBoundsException may be thrown if the coordinates are not in bounds, or if obj is not large enough to hold the pixel data.
x
- The minimum X coordinate of the pixel rectangle.y
- The minimum Y coordinate of the pixel rectangle.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.obj
- A primitive array containing pixel data.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if obj is too small to hold the input.getNumDataElements()
,
getTransferType()
,
getDataElements(int, int, int, int, Object, DataBuffer)
,
DataBuffer
public float[] getPixel(int x, int y, float[] fArray, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.fArray
- If non-null, returns the samples in this array.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if fArray is too small to hold the output.setPixel(int, int, float[], DataBuffer)
public double[] getPixel(int x, int y, double[] dArray, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.dArray
- If non-null, returns the samples in this array.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if dArray is too small to hold the output.setPixel(int, int, double[], DataBuffer)
public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.iArray
- If non-null, returns the samples in this array.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if iArray is too small to hold the output.setPixels(int, int, int, int, int[], DataBuffer)
public float[] getPixels(int x, int y, int w, int h, float[] fArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.fArray
- If non-null, returns the samples in this array.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if fArray is too small to hold the output.setPixels(int, int, int, int, float[], DataBuffer)
public double[] getPixels(int x, int y, int w, int h, double[] dArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.dArray
- If non-null, returns the samples in this array.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if dArray is too small to hold the output.setPixels(int, int, int, int, double[], DataBuffer)
public abstract int getSample(int x, int y, int b, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.b
- The band to return.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds.setSample(int, int, int, int, DataBuffer)
public float getSampleFloat(int x, int y, int b, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.b
- The band to return.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds.public double getSampleDouble(int x, int y, int b, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.b
- The band to return.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds.public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.b
- The band to return.iArray
- If non-null, returns the samples in this array.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds, or if iArray is too small to
hold the output.setSamples(int, int, int, int, int, int[], DataBuffer)
public float[] getSamples(int x, int y, int w, int h, int b, float[] fArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.b
- The band to return.fArray
- If non-null, returns the samples in this array.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds, or if fArray is too small to
hold the output.setSamples(int, int, int, int, int, float[], DataBuffer)
public double[] getSamples(int x, int y, int w, int h, int b, double[] dArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.b
- The band to return.dArray
- If non-null, returns the samples in this array.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds, or if dArray is too small to
hold the output.setSamples(int, int, int, int, int, double[], DataBuffer)
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.iArray
- The input samples in an int array.data
- The DataBuffer containing the image data.NullPointerException
- if iArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if iArray is too small to hold the input.getPixel(int, int, int[], DataBuffer)
public void setPixel(int x, int y, float[] fArray, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.fArray
- The input samples in a float array.data
- The DataBuffer containing the image data.NullPointerException
- if fArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if fArray is too small to hold the input.getPixel(int, int, float[], DataBuffer)
public void setPixel(int x, int y, double[] dArray, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.dArray
- The input samples in a double array.data
- The DataBuffer containing the image data.NullPointerException
- if dArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if fArray is too small to hold the input.getPixel(int, int, double[], DataBuffer)
public void setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.iArray
- The input samples in an int array.data
- The DataBuffer containing the image data.NullPointerException
- if iArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if iArray is too small to hold the input.getPixels(int, int, int, int, int[], DataBuffer)
public void setPixels(int x, int y, int w, int h, float[] fArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.fArray
- The input samples in a float array.data
- The DataBuffer containing the image data.NullPointerException
- if fArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if fArray is too small to hold the input.getPixels(int, int, int, int, float[], DataBuffer)
public void setPixels(int x, int y, int w, int h, double[] dArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.dArray
- The input samples in a double array.data
- The DataBuffer containing the image data.NullPointerException
- if dArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates are
not in bounds, or if dArray is too small to hold the input.getPixels(int, int, int, int, double[], DataBuffer)
public abstract void setSample(int x, int y, int b, int s, DataBuffer data)
x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.b
- The band to set.s
- The input sample as an int.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds.getSample(int, int, int, DataBuffer)
public void setSample(int x, int y, int b, float s, DataBuffer data)
setSample(int, int, int, DataBuffer)
method using
that int value.
ArrayIndexOutOfBoundsException may be thrown if the coordinates are
not in bounds.x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.b
- The band to set.s
- The input sample as a float.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds.getSample(int, int, int, DataBuffer)
public void setSample(int x, int y, int b, double s, DataBuffer data)
setSample(int, int, int, DataBuffer)
method using
that int value.
ArrayIndexOutOfBoundsException may be thrown if the coordinates are
not in bounds.x
- The X coordinate of the pixel location.y
- The Y coordinate of the pixel location.b
- The band to set.s
- The input sample as a double.data
- The DataBuffer containing the image data.NullPointerException
- if data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds.getSample(int, int, int, DataBuffer)
public void setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.b
- The band to set.iArray
- The input samples in an int array.data
- The DataBuffer containing the image data.NullPointerException
- if iArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds, or if iArray is too small to
hold the input.getSamples(int, int, int, int, int, int[], DataBuffer)
public void setSamples(int x, int y, int w, int h, int b, float[] fArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.b
- The band to set.fArray
- The input samples in a float array.data
- The DataBuffer containing the image data.NullPointerException
- if fArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds, or if fArray is too small to
hold the input.getSamples(int, int, int, int, int, float[], DataBuffer)
public void setSamples(int x, int y, int w, int h, int b, double[] dArray, DataBuffer data)
x
- The X coordinate of the upper left pixel location.y
- The Y coordinate of the upper left pixel location.w
- The width of the pixel rectangle.h
- The height of the pixel rectangle.b
- The band to set.dArray
- The input samples in a double array.data
- The DataBuffer containing the image data.NullPointerException
- if dArray or data is null.ArrayIndexOutOfBoundsException
- if the coordinates or
the band index are not in bounds, or if dArray is too small to
hold the input.getSamples(int, int, int, int, int, double[], DataBuffer)
public abstract SampleModel createCompatibleSampleModel(int w, int h)
w
- the width of the image datah
- the height of the image dataSampleModel
describing the same image
data as this SampleModel
, but with a
different size.public abstract SampleModel createSubsetSampleModel(int[] bands)
bands
- the subset of bands of this SampleModel
SampleModel
with a subset of bands of this
SampleModel
.public abstract DataBuffer createDataBuffer()
DataBuffer
corresponding to this
SampleModel
.public abstract int[] getSampleSize()
public abstract int getSampleSize(int band)
band
- the specified bandDracula Javadoc Sample, Made with Allan Im.


 Secrets can be Passwords, Certificates or even RSA Public/private Keypairs." %}
{% endblock %}


Django is a widely used Python web application framework with a "batteries-included" philosophy. The principle behind batteries-included is that the common functionality for building web applications should come with the framework instead of as separate libraries.
For example, authentication, URL routing, a templating system, an object-relational mapper, and database schema migrations (as of version 1.7) are all included with the Django framework. Compare that included functionality to the Flask framework which requires a separate library such as Flask-Login to perform user authentication.
The batteries-included and extensibility philosophies are simply two different ways to tackle framework building. Neither philosophy is inherently better than the other.
The Django project's stability, performance and community have grown tremendously over the past decade since the framework's creation. Detailed tutorials and best practices are readily available on the web and in books. The framework continues to add significant new functionality such as database migrations with each release.
I highly recommend the Django framework as a starting place for new Python web developers because the official documentation and tutorials are some of the best anywhere in software development. Many cities also have Django-specific groups such as Django District, Django Boston and San Francisco Django so new developers can get help when they are stuck.
There's some debate on whether learning Python by using Django is a bad idea. However, that criticism is invalid if you take the time to learn the Python syntax and language semantics first before diving into web development.
Tango with Django is an extensive set of free introductions to using the most popular Python web framework. Several current developers said this book really helped them get over the initial framework learning curve.
2 Scoops of Django by Daniel Greenfeld and Audrey Roy is well worth the price of admission if you're serious about learning how to correctly develop Django websites.
Effective Django is another free introduction to the web framework.
Test-Driven Development with Python focuses on web development using Django and JavaScript. This book uses the development of a website using the Django web framework as a real world example of how to perform test-driven development (TDD). There is also coverage of NoSQL, websockets and asynchronous responses. The book can be read online for free or purchased in hard copy via O'Reilly.
The Django subreddit often has links to the latest resources for learning Django and is also a good spot to ask questions about it.
Lincoln Loop wrote a Django Best Practices guide for the community.
Steve Losh wrote an incredibly detailed Django Advice guide.
Lightweight Django has several nice examples for breaking Django into smaller simplier components.
The Definitive Guide to Django Deployment explains the architecture of the resulting set up and includes Chef scripts to automate the deployment.
Deploying a Django app on Amazon EC2 instance is a detailed walkthrough for deploying an example Django app to Amazon Web Services.
This step-by-step guide for Django shows how to transmit data via AJAX with JQuery.
Deploying Django on AWS is another walkthrough for deploying Django to AWS.
django-awesome is a curated list of Django libraries and resources.
Starting a Django Project answers the question, “How do I set up a Django (1.5, 1.6, or /1.7) project from scratch?”
The recommended Django project layout is helpful for developers new to Django to understand how to structure the directories and files within apps for projects.
The Django Request-Response Cycle explains what happens when you visit a webpage generated by Django.
Using Amazon S3 to Store your Django Site's Static and Media Files is a well written guide to a question commonly asked about static and media file serving.
Kate Heddleston and I gave a talk at DjangoCon 2014 called Choose Your Own Django Deployment Adventure which walked through many of the scenarios you'd face when deploying your first Django website.
GoDjango screencasts and tutorials are free short videos for learning how to build Django applications.
Getting Started with Django is a series of video tutorials for the framework.
The videos and slides from Django: Under the Hood 2014 are from Django core commiters and provide insight into the ORM, internationalization, templates and other topics.
DjangoCon US videos from
2014,
2013,
2012,
2011, as well as
earlier US and DjangoCon EU conferences are
all available free of charge.
Paul Hallett wrote a detailed Django 1.7 app upgrade guide on the Twilio blog from his experience working with the django-twilio package.
Designing Django's Migrations covers Django 1.7's new migrations from the main programmer of South and now Django's built-in migrations, Andrew Godwin.
Real Python's migrations primer explores the difference between South's migrations and the built-in Django 1.7 migrations as well as how you use them.
Andrew Pinkham's "Upgrading to Django 1.7" series is great learning material for understanding what's changed in this major release and how to adapt your Django project. Part 1, part 2 and part 3 and part 4 are now all available to read.
Integerating Front End Tools with Django is a good post to read for figuring out how to use Gulp for handling front end tools in development and production Django sites.
Getting Started with Django Rest Framework and AngularJS is a very detailed introduction to Djangular with example code.
Building Web Applications with Django and AngularJS is a very detailed guide for using Django as an API layer and AngularJS as the MVC front end in the browser.
This end to end web app with Django-Rest-Framework & AngularJS part 1 tutorial along with part 2, part 3 and part 4 creates an example blog application with Djangular. There is also a corresponding GitHub repo for the project code.
The Django ORM works well for simple and medium-complexity database operations. However, there are often complaints that the ORM makes complex queries much more complicated than writing straight SQL or using SQLAlchemy.
It's technically possible to drop down to SQL but it ties the queries to a specific database implementation. The ORM is coupled closely with Django so replacing the default ORM with SQLAlchemy is currently a hack workaround. Note though that some of the Django core committers believe it is only a matter of time before the default ORM is replaced with SQLAlchemy. It will be a large effort to get that working though so it's likely to come in Django 1.9 or later.
Since the majority of Django projects are tied to the default ORM, it's best to read up on advanced use cases and tools for doing your best work within the existing framework.
Django models, encapsulation and data integrity is a detailed article by Tom Christie on encapsulating Django models for data integrity.
Django Debug Toolbar is a powerful Django ORM database query inspection tool. Highly recommended during development to ensure you're writing reasonable query code. Django Silk is another inspection tool and has capabilities to do more than just SQL inspection.
Making a specific Django app faster is a Django performance blog post with some tips on measuring performance and optimizing based on the measured results.
Why I Hate the Django ORM is Alex Gaynor's overview of the bad designs decisions, some of which he made, while building the Django ORM.
Going Beyond Django ORM with Postgres is specific to using PostgreSQL with Django.
Migrating a Django app from MySQL to PostgreSQL is a quick look at how to move from MySQL to PostgreSQL. However, my guess is that any Django app that's been running for awhile on one relational database will require a lot more work to port over to another backend even with the power of the ORM.
Django Model Descriptors discusses and shows how to incorporate business logic into Django models to reduce complexity from the views and make the code easier to reuse across separate views.
Txt 2 React is a full Django web app that allows audiences to text in during a presentation with feedback or questions.
Openduty is a website status checking and alert system similar to PagerDuty.
Courtside is a pick up sports web application written and maintained by the author of PyCoder's Weekly.
These two Django Interactive Voice Response (IVR) system web application repositorities part 1 and part 2 show you how to build a really cool Django application. There's also an accompanying blog post with detailed explanations of each step.
Taiga is a project management tool built with Django as the backend and AngularJS as the front end.
Caktus Group's Django project template is Django 1.6+ ready.
Cookiecutter Django is a project template from Daniel Greenfeld, for use with Audrey Roy's Cookiecutter. Heroku deployment-ready.
Two Scoops Django project template is also from the PyDanny and Audrey Roy. This one provides a quick scaffold described in the Two Scoops of Django book.
Install Django on your local development machine.
Work through the initial "polls" tutorial.
Build a few more simple applications using the tutorial resources found in the "Django resources" section.
Start coding your own Django project with help from the official documentation and resource links below. You'll make plenty of mistakes which is critical on your path to learning the right way to build applications.
Read 2 Scoops of Django to understand Django best practices and learn better ways of building Django web applications.
Move on to the deployment section to get your Django project on the web.


an object-oriented computer programming language commonly used to create interactive effects within web browsers.
Operators
is a special symbols performing specific operations on one, two or three operands and then returning a result. The operators are classified and listed according to precedence order. Java operators are generally used to manipulate primitive data types.
Variables
Something that stores a single data value that can be changed later.
Variable naming conventions
Always use the same naming convention for all your code. For example: Variable and function names written as camelCase.
Functions
A function is a JavaScript procedure—a set of statements that performs a task or calculates a value.
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript


Vocabulary for InformationSensitivity
Description
Default Scheme: NHS Data Dictionary InformationSensitivity
Assigned OID: 2.16.840.1.1138<IP_ADDRESS>.<IP_ADDRESS>
This item indicates the nature of any sensitivity information with regard to a Service User record on PDS.
Values:
Version: | 01 |
Date: | 25th June 2004 |
Code | Description | Note |
Y | Stop noted | This is a value from NSTS. |
B | Business reason | This value acts as a health warning on the data. |
S | Sensitive |
|


Click the buttons to create and delete row(s) for the table.
Users Table
Jack
Black
20
Jamie
Janson
94
Mary
Todd
67
Create row
Delete row


IMU2OSC Help
IMU2OSC Usage
How to use the IMU2OSC utility
Bluetooth Setup
Setting up your x-IMU with Bluetooth


The following description illustrates the user flow of the issuer service (company UI) as well as the verifier service (hotel UI).
Company UI
Issue Corporate Credential:
- 1.) Open the URL in your browser.
- 2.) Enter username and password
-
3.) Next, click on "manage invitations" on the homepage.
-
4.) You will then be redirected to the list of created invitations. To create a new invitation, click on "create invitation".
-
5.) Enter your test data in the free text fields on the right side. (please fill in all fields). Then confirm with "submit".
-
6.)  Open the .eml file and scan the QR code with the ID Wallet app on your smartphone.
Hotel UI
- Open the URL in your browser.
- Enter username and password
-
Select a desk.
-
Now click on "show QR Code". Leave this page open.
- Then open the Wallet app on your smartphone and follow the steps described there.
- Switch back to the browser and the view of the employee at the reception. There please go to "show data". There you will find the new guest with whom you have just answered the request.
- Select this guest and confirm with "check-in guest". You will then be redirected to the details page of the guest and can see the credentials data of the guest there.
Hotel Administrator
- Open the URL in your browser.
- Enter username and password.
-
You will now see the hotels you have created. You can add, edit or delete new hotels. By clicking on the hotel button (right side) you will always return to this page.
-
By clicking on "add new" you can add another hotel to your list.
After you have assigned a name, confirm the entry with "save" so that another hotel is added to the list. -
Furthermore, you can manage your desks of the respective hotel in this view (add, edit and delete). Clicking on "add desk" opens a modal in which you can add another desk.
-
Furthermore, you can maintain the list of employees of your hotels. To do this, click on the employee icon on the right side. You will get to the list of your employees and can now add, edit or delete new employees.
- By clicking on "add new" you can add an employee to your list in order to grant this person access to the system. With "save" you confirm your entry and grant this person access to the system. Afterwards you only have to distribute username and password to the person (e.g. via company email).


{% extends 'admin/master.html' %} {% block body %} {{ super() }}
Here you can install a theme for your Wiki.
Return to theme selection.
The theme must be uploaded as a zip file.
Here you can select a theme for your Wiki.
or install a new one.


about me
Hey - I am Edafe Oghenefego, candidate for HNG Internship.
Age : 23
Qualification : BSC Computer Science
School : University of Port Harcourt
Languages : PHP, HTML, CSS
Click to view my stage1 taskHey - I am Edafe Oghenefego, candidate for HNG Internship.
Age : 23
Qualification : BSC Computer Science
School : University of Port Harcourt
Languages : PHP, HTML, CSS
Click to view my stage1 task


Solution and project files are provided for building under Visual Studio. QuickFIX supports Visual Studio 7 (2003), Visual Studio 8 (2005), Visual Studio 9 (2008) and Visual Studio 10 (2010). The solution files provided for these versions are quickfix_vs7.dsw, quickfix_vs8.sln, quickfix_vs9.sln, and quickfix_vs10.sln respectively.
Simply open the appropriate solution file and do a batch build of all the projects. This will create lib\quickfix.lib and lib\debug\quickfix.lib which can be linked into your applications. The header files will also be copied to the include directory.
Since windows does not have a standard system for storing header and library files, you should organize them however best suits your build environment. Leaving them in the lib and include directories they are placed into by the build is one option.
Compile time options are controlled from the config_windows.h file in the src
directory. The following options are supported:
#define HAVE_STLPORT 1
Compile with stlport instead of standard visual c++ STL implementation.
#define HAVE_JAVA 1
Compiles JNI wrappers for QuickFIX library, allowing you to access QuickFIX from java.
#define HAVE_ODBC 1
Compiles ODBC support into QuickFIX.
#define HAVE_MYSQL 1
Compiles MySQL support into QuickFIX. If you enable this option, the mysql include and
library directories must be in the Visual Studio search paths.
#define HAVE_POSTGRESQL 1
Compiles PostgreSQL support into QuickFIX. If you enable this option, the postgres include and
library directories must be in the Visual Studio search paths.
#define HAVE_LIBXML 1
Compile and link XML parsing code against the libxml library instead of the default MSXML3.
#define ENABLE_CALLSTACK 1
Tells QuickFIX to keep track of a C++ callstack that will be printed out in the event of a the process crashing. Only use this when trying to track down a repeatable problem.
QuickFIX comes with a .NET wrapper written in managed C++. This enables any CLR based language (i.e., C#, VB.NET) to access QuickFIX.
The instruction for building under .NET are the same as the instructions for windows listed above. In addition to the quickfix lib files, DLLs named quickfix_net.dll and quickfix_net_messages.dll will be placed into your lib and lib\debug directories.
The QuickFIX JNI wrapper for Java has been deprecated. It is now recommended that you use QuickFIX/J, a native port of the QuickFIX engine. For those of you using the JNI interface, quickfixj.jar has been provided for your convenience.
QuickFIX uses GNU autotools (autoconf, automake, and libtool) in conjunction with make to build on unix systems. If you also want to reuse our makefiles for developing your own application, you will find it useful. Also note that if your version of gcc does not come with sstream, you will need to download it from the link above and put it in the correct include directory. Also please note for Solaris you must use GNU make, the make that comes with Solaris will not work.
Building under *nix requires two steps. First, in the root quickfix directory, type ./configure This will probe your system to find out what functionality it supports for use in determining how to build QuickFIX. After ./configure completes succesfully, simply type make to build. If you run into problems running configure, you may need to run the ./bootstrap script first.
There are some options you can pass to ./configure to enable compile time features.
These are:
--with-java - Build the Java examples against QuickFIX/J. JAVA_HOME will be used to find Java.
--with-python=<include directory> - Build the Python API. Use directory which contains python headers.
--with-ruby - Build the Ruby API. Ruby interpreter in your path will be used.
--with-mysql=<base directory> - Compile in mysql support
--with-postgresql=<base directory> - Compile in postgresql support
--with-stlport=<base directory> - Compile with stlport instead of
standard gcc STL implementation (recommended for multiprocessor machines running gcc 2.95.x)
--enable-callstack - Display C++ call stack after abnormal termination. Only use this when trying to track down a repeatable problem.
If you are using the SUNPro compiler, you will need to set the following environment variables:
CC=<full path to SUNPro CC binary>
CFLAGS=-g -xs
CXX=<full path to SUNPro CC binary>
CXXFLAGS=-g -xs
LD=<full path to SUNPro CC binary>
LDFLAGS=-g -xs -lCstd
AR=<full path to SUNPro CC binary>
AR_FLAGS=-g -xs -xar -o
After succesfully building QuickFIX, you should run make install as root. This will place the library libquickfix.so and the quickfix header files into the appropriate directories. If you do not have root access, you can also run configure with the --prefix=<base directory> option, where the base directory is some directory which your account has write access. note: under Mac OS X, the library is named called libquickfix.dylib


| device package |
comment |
|---|---|
| Activ8rLives Body Analyser com.activ8rlives.mobile |
executing attacks on traffic to reveal that most of the messages are not authenticated at all; also passwords are transmitted in clear text registered and collected data; measurement captured aggregated from teststeps |
| FitBit aria com.fitbit.FitbitMobile |
captured data and viewed in dashboard; single measurement only aggregated from teststeps |
| HAPI Connected Scale com.hapiconnect |
replay tampering and injection tested test run to collect data from app only; registered, paired and executed measurements; on device firewall was limitting data collection to app only aggregated from teststeps |
| iChoice S1 com.medm.medmwt.diary |
ran some attacks against the data in transmission dawith firewall activated registered, paired and collected data aggregated from teststeps |
| Thomson TBS705 com.stabxtom.thomson |
tried to tamper with traffic by manipulating requests and stealing the session to use it to inject further measurements; however data couldnt be synchroniyed back into the application (even after deleting all app data the app doesnt intially download all dataa from server; previous measurements are simply lost collected data with firewall on device activated aggregated from teststeps |
| Withings WS-30 com.withings.wiscale2 |
recorded registration and measurements with active firewall aggregated from teststeps tampered with data and executed some replay attacks; data is not validated and can cause server errors if weight to high |
| iChoice S1 com.medm.ichoice.diary |
created data and inspected traffic |
| test step | rating | desc | Activ8rLives Body Analyser com.activ8rlives.mobile |
FitBit aria com.fitbit.FitbitMobile |
HAPI Connected Scale com.hapiconnect |
iChoice S1 com.medm.medmwt.diary |
Thomson TBS705 com.stabxtom.thomson |
Withings WS-30 com.withings.wiscale2 |
iChoice S1 com.medm.ichoice.diary |
|---|---|---|---|---|---|---|---|---|---|
| av1_inject | vulnerable: 1 / not vulnerable: 0 | inject new data to the stream |
1 requests with new measurements are not authenticated and measurements are mapped by userid; so as soon as one finds out a user ID measurements can be happily inserted |
1 possible based on reverse engineering the transfer protocol |
1 injection is possible with reconstructing the signature value.. all required values can be read from the communication stream |
1 injection is only possible as long as the user provides an authenticated session |
1 injection is possible |
1 possible as long as scale has session and this can be used |
1 possible since records just come with UUID and the auth token seems to be valid for quite some time |
| av1_replay | vulnerable: 1 / not vulnerable: 0 | finding some way to replay information to the server |
1 replaying of messages is easliy possible but will replace the existing record for a day as only one record per day can exist |
1 replay possible and will create new entries on online platform; entry time is based on time when measurement got sent to the server |
0 simple replay is not possible due to client side generated signatures |
0 replay is not possible as every record comes with a separate uuid |
1 replay attacks are perfectly possible even with stolen session ID.. however the generated data seems to be unaccessible to the user |
1 replay attacks are possible within the same session session is requested based on a once which is used to generate a hash the server is able to use that hash to identify the user and sends user information including a valid session key |
0 no; UUID defeats a simple replay attack |
| av1_ssl | not using SSL: 1 / using SSL: 0 | is using SSL |
0 using SSL |
0 using ssl |
1 no SSL |
0 using SSL |
1 no SSL |
0 using SSL |
0 yes |
| av1_ssl_forg | vulnerable: 1 / not vulnerable: 0 | secure and correct implementation of communication encryption |
1 working - username and password in message body clear text |
0 not working |
1 no SSL usage |
0 not working |
1 working - username in clear text, mobile id and password somehow encrypted or obfuscated |
0 not working |
1 yes, trustmanager issue |
| av1_ssl_forg_ca | vulnerable: 1 / not vulnerable: 0 | in addition to data_com_ssl_forg the trusted CA certificate is installed |
1 working as without CA certificate |
1 working |
1 NO SSL - username in cleartext and password somehow encrypted or obfuscated |
0 not working |
1 NO SSL |
1 working |
1 vulnerable as for other |
| av1_tamper | not vulnerable: 0 / upper limit e.g. weight: 1 / no limit or validation: 2 | tampering the data before it can reach the server defeating input validation |
2 tampering with the weight data is possible a weight up to 99999999 kg can be entered; beyond that the server will respond with an error |
1 no limit possible but crc16 error detection code has to be recalculated for the full message; see python script which will allow to forge some messages |
2 possible at any point in time |
1 records can be changed but still the max weight is validated and limited to 300kg |
2 data can be easily changed and is happily accepted by the server |
2 data can be changed and apparently the server is not validating the data so that unplausible data can be entered tried to change the user ID so that the data would be inserted into a different account -> that however was not successful |
1 changes possible within the limits of up to 300 kg |
| 6.0 | 4.0 | 6.0 | 2.0 | 7.0 | 5.0 | 4.0 |
| device package |
comment |
|---|---|
| Activ8rLives Body Analyser com.activ8rlives.mobile |
used some basic app functions to generate data |
| FitBit aria com.fitbit.FitbitMobile |
investigating application data |
| HAPI Connected Scale com.hapiconnect |
investigating the device |
| iChoice S1 com.medm.medmwt.diary |
looking for data leakage |
| Thomson TBS705 com.stabxtom.thomson |
found way too much information in the device logs |
| Withings WS-30 com.withings.wiscale2 |
run the app to synchronize and export app data to disk for further investigation |
| iChoice S1 com.medm.ichoice.diary |
using app for a while |
| test step | rating | desc | Activ8rLives Body Analyser com.activ8rlives.mobile |
FitBit aria com.fitbit.FitbitMobile |
HAPI Connected Scale com.hapiconnect |
iChoice S1 com.medm.medmwt.diary |
Thomson TBS705 com.stabxtom.thomson |
Withings WS-30 com.withings.wiscale2 |
iChoice S1 com.medm.ichoice.diary |
|---|---|---|---|---|---|---|---|---|---|
| av2_export_backup | data not encrypted: 2 / data in backup encrypted: 1 / no data stored: 0 | data is being backed up using the android backup command |
0 no data in backup found |
2 database not encrypted and shared prefs in clear text |
2 database unencrypted, password in clear text in shared prefs, |
1 sqlite databases not encrypted; shared preferences are obscured and encrypted |
2 backup contains unencrypted database which includes all information from measurements to device information / information on session and any credentials can be picked up from the shared prefs folder |
2 database is available and data can be read in clear text |
2 data in caches but unencrypted |
| av2_export_logging | information available: 1 / no information: 0 | investigate the Android log for unencrypted information |
0 no suspicious data in logging information |
0 no information in log file |
1 logging contains detailed information on every single request send to the server |
0 no information leaked in logcat |
1 logcat shows detailed logs with even some information on the recorded data and partly http traces bluetooth connection management is shown in full including MAC addresses which are logged and saved |
0 no information written to logcat |
0 no additional logging information |
| 0.0 | 2.0 | 3.0 | 1.0 | 3.0 | 2.0 | 2.0 |
| device package |
comment |
|---|---|
| Activ8rLives Body Analyser com.activ8rlives.mobile |
setting up user account and checking password policies |
| FitBit aria com.fitbit.FitbitMobile |
registered although web page failed; registration was redirected to web browser; no registration from within mobile application possible paired scale again and configured wifi ; this time better timing with phone packet capture while it is connected to the scale investigating the app and collecting data |
| HAPI Connected Scale com.hapiconnect |
registered user and setup app change passwords and analysed traffic |
| iChoice S1 com.medm.medmwt.diary |
registered user and provided some basic data |
| Thomson TBS705 com.stabxtom.thomson |
ran regestration test steps paired the scale with the app tried some input validations, injection, tampering by manually adding data check the password change process and turns out that an attacker can change the victims password at any point in time after the victim opened the app and the attacker was listening to the traffic and hence able to steal the current password hash password change via email link on not secure website |
| Withings WS-30 com.withings.wiscale2 |
setting up the withings scale and saw some weird input validations (details in test cases) some manual entry added and uploaded to withings server aggregated from teststeps password change and export tests |
| iChoice S1 com.medm.ichoice.diary |
registered user and investigated app collected data |
| test step | rating | desc | Activ8rLives Body Analyser com.activ8rlives.mobile |
FitBit aria com.fitbit.FitbitMobile |
HAPI Connected Scale com.hapiconnect |
iChoice S1 com.medm.medmwt.diary |
Thomson TBS705 com.stabxtom.thomson |
Withings WS-30 com.withings.wiscale2 |
iChoice S1 com.medm.ichoice.diary |
|---|---|---|---|---|---|---|---|---|---|
| av3_code_comment | informational | any comment on the code |
app crashing with Android 6.0.1 so reverting back to Android 6 also App is Xamarin based and running in Monodroid VM on Android which is some C style based implementation |
tbd tbd |
passwords are just hased with MD5 no salt; after re login signature looks suspicious as no password is transmitted - seems to be generated based on current time, previous access token and some generat random number; but all this information is available to an attacker |
code is somewhat supprinsingly just a few lines and decompiled code doesn't show all the information hence something must have been applied to the code also certificate pinning is implemented and had to be removed in order to run further tests |
code shows many different frameworks and addons integrated with the solution (also see addons table) the app itself shows less possibilities to make actually use of these frameworks and addons the password seems to be MD5 hashed but since the communication is not encrypted and the hash is not randomiyed that is pointless, simply use the hash value to execute anything |
tbd |
java coding with native dependencies |
| av3_data_coll | informational | data collected and send by the mobile app |
normal data collection of pictures and other details on the phone |
weight can be entered and other fitness data |
not possible to enter data manually |
manual input only and photo capture to set profile picture |
as mentioned app collecteds weight data but also sends phone identifier to china |
added entry manually to be uploaded to server API with server seems to be different from the scales API query parameters instead of body but everything is SSL encrypted some input validation inside the mobile application is done; manual entries are possible; no othe seems to be transmitted |
weight can be entered manually and is limited to 300 |
| av3_data_leakage | no data leaked: 0 / complies with privacy policy: 1 / data leaked beyond privacy policy: 2 | identifiable for the user or the phone that is being collected |
2 xamarin framework is sending the android device id home and is tracking different events such as network change from wifi to lte, application startup and a full device fingerprint including attributes such aus screensize, resolution, network, model, memroy, cpu count, android version, client version, app installed |
0 device fingerprinting and application usage tracking but without any personal data ; all data is being send to mixpanel.com |
2 no SSL implemented so data can easily be read; in addition passwords are just MD5 hased without salts what makes them vulnerable to rainbow table lookups; full personal information including email address, password, date of birth, weight and height can be read |
1 as far as captured no data was being leaked |
2 !! advertising librariy Umeng detected.. library is sending a full device fingerprint including IMEI and MAC (where it cant retrieve the MAC because of Android 6 changes) /n password (encrypted) and email send over unencrypted network; password seems to be some kind of 16byte hash.. tried a few tools to get the pattern and repoduce it but so far without success reveals full details during pairing as serial numbers, device hardware version, software version and some specific password are sent unencryted |
1 none |
0 no leakage identified |
| av3_data_wipe | unsecure feature: 1 / secure feature: 0 | can data be wiped from the mobile application |
1 no possibility to wipe data from inside the app |
1 no feature |
1 not possible from within the app |
1 no data wipe option |
1 no data wipe from within the app only be using the system settings; also no possibility to delete data from the server and hard to contact them as there is no email received or any information inside the app leading to a contact address |
1 no possibility to wipe data from app or from device, no way to delete account |
1 no option |
| av3_export_cloud | unsecure feature: 1 / secure feature: 0 | data being exported somewhere into the cloud (dropbox et al) |
n/a n/a |
n/a no export possible |
n/a screenshots can be exported which show some graph with weight overview |
n/a n/a |
n/a no possibility |
n/a no export option in app |
n/a n/a |
| av3_export_sdcard | unsecure feature: 1 / secure feature: 0 | can data be exported to SD card or other locations on device and is that data encrypted |
n/a n/a |
n/a no export possible |
n/a n/a |
n/a n/a |
n/a no option |
n/a no export option |
n/a n/a |
| av3_export_social | unsecure feature: 1 / secure feature: 0 | export variants to social media and data encryption while exporting |
n/a n/a |
0 connection to facebook possible but for information only |
0 screenshot of the graph can be shared with any 3rd party app |
n/a n/a |
0 twitter, facebook and email but none of them worked |
n/a sharing is just inviting and as such possible to gmail, drive, bluetooth and android beam |
n/a n/a |
| av3_pwd_change_freq | no period or frequency: 2 / either one: 1 / both: 0 | password change period (must) and frequency (can) |
n/a can't change password from within the app |
n/a n/a |
2 nothing enforced |
n/a n/a |
2 no password change policy or frequency enforced |
2 n/a |
n/a n/a |
| av3_pwd_change_policy | no policy: 0 / min characters: 1 / mixed charsets: 2 | password policy enforced on password change |
n/a n/a |
n/a n/a |
1 min 6 characters |
n/a n/a |
1 password policy is just 6 characters only and nothing else |
n/a n/a |
n/a n/a |
| av3_pwd_change_reuse | yes, unlimited: 0 / no, but history can be bypassed (see change freq): 1 / no without limitation: 2 | can a password be reused and how much difference is required |
n/a n/a |
n/a n/a |
1 last password can't be reused |
n/a n/a |
2 passwords can be reused at any point in time how often ever the user wants to |
n/a n/a |
n/a n/a |
| av3_reg_acc_verif | none: 2 / email account verification: 1 / two factor authentication 0 | email account verification or two factor authentication |
2 received no email on account verification / registration |
n/a n/a |
2 not at all |
2 no - but received email with pointers to privacy statements and similar stuff |
2 no verification email received |
2 there is no trace of account verification not even a single email was received assumption that this might be solution dependent as the withings watch caused a lot of spam in the inbox |
2 received registration confirmation email |
| av3_reg_data_input | informational | Specifies the data fields and types which are required as inputs |
weight, height, waistline, birthdate and bio data, fitness goal and setps towards the goal basic validation on weight, height and waistline |
n/a n/a |
username, email, weight and height, and password |
only email address and password mandatory; name, birth date and height can be entered later from within the app |
email, password, name, gender, name, birthday, height, weight, waistline, picture |
select scale n email and password n firstname, lastname, birthdate, height, weight |
name, email, gender optionally later weight, height and profile picture |
| av3_reg_data_validation | data not validated: 1 / data is validated: 0 | Comments on data validation during user registration: weight, heitght, email... |
0 basic validation on weight, height and waistline |
n/a n/a |
0 weight and height only |
0 height and weight are limited; no other validation |
0 limited values for weight, height, waistline, age |
0 email adress is validated n password provided A n very high weights are not allowed 600lb but weird error message n height is accepted at 3m |
1 limited to 300 height and weight |
| av3_reg_pripol_link | no link or information: 1 / link available: 0 | link to privacy policy or any kind of information on such topic |
0 link to terms and conditions plus acceptance of terms and conditions is required to use the app |
n/a n/a |
1 no explicit link visible |
1 not visible during registration but linked from within the app |
1 no link to privacy policy apparent |
0 link to privacy policy is provided http://www.withings.com/uk/en/legal also terms and conditions but both links are pointing to the same webpage1 |
1 no link visible |
| av3_reg_pwd_policy | no policy: 2 / min characters: 1 / mixed charsets: 0 | is a password policy enforced |
2 no password policy as registration with a simple A was possible |
n/a n/a |
1 min 6 characters |
1 min 6 character |
1 6-16 characters |
2 no hint to any kind of password policy could be found |
1 min 6 characters |
| 7.0 | 1.0 | 11.0 | 6.0 | 12.0 | 8.0 | 6.0 |
| device package |
comment |
|---|---|
| Activ8rLives Body Analyser com.activ8rlives.mobile |
leakage of data to xamarin |
| FitBit aria com.fitbit.FitbitMobile |
no data being leaked |
| HAPI Connected Scale com.hapiconnect |
investigating data leakage |
| iChoice S1 com.medm.medmwt.diary |
no data leakage found |
| Thomson TBS705 com.stabxtom.thomson |
data leakage to third party investigated |
| Withings WS-30 com.withings.wiscale2 |
data leakage |
| iChoice S1 com.medm.ichoice.diary |
no leakage observed |
| test step | rating | desc | Activ8rLives Body Analyser com.activ8rlives.mobile |
FitBit aria com.fitbit.FitbitMobile |
HAPI Connected Scale com.hapiconnect |
iChoice S1 com.medm.medmwt.diary |
Thomson TBS705 com.stabxtom.thomson |
Withings WS-30 com.withings.wiscale2 |
iChoice S1 com.medm.ichoice.diary |
|---|---|---|---|---|---|---|---|---|---|
| av4_data_leakage | no data leaked: 0 / complies with privacy policy: 1 / data leaked beyond privacy policy: 2 | data leakage to third party services |
1 detailled data on the device is leaked to xamarin servers; this data can be used for fingerprinting and shouldn't be collected; there are other device identifiers that can be used /n pictures taken are uploaded to an image service and not to their own servers |
0 no data being leaked so far |
1 no data leakage apparent |
0 no data leakage to third party on recor d |
1 data is being leaked to advertising companies; data includes phone identifier information |
0 no data being leaked |
0 no leakage observed |
| 1.0 | 0.0 | 1.0 | 0.0 | 1.0 | 0.0 | 0.0 |
| device package |
comment |
|---|---|
| Activ8rLives Body Analyser com.activ8rlives.mobile |
connected scale and did some measurements |
| FitBit aria com.fitbit.FitbitMobile |
some measurements with the scale captured firmware being send to the scale measurements with increasing weight from 75.9, 76.0 to 76.1 |
| HAPI Connected Scale com.hapiconnect |
paired scale but the app ended up in some loop sending the same request infintely running pairing and data collection test cases |
| iChoice S1 com.medm.medmwt.diary |
paired device and did some measurements |
| Thomson TBS705 com.stabxtom.thomson |
collected some data by weighting and sending data to web server |
| Withings WS-30 com.withings.wiscale2 |
first tried to setup scale using bluetooth but didnt work; then tried via wifi and would work; traffic from scale to withings webserver is http only; possibly can be exploited for replay attacks as well; maybe firmware update will defeat the http vulnerability as the scale partly communicates via https collected data from scale and successfully uploaded to withings; added a new user within the same account, but withings offers as well to associate the same scale with different accounts; replay attacks are likely to be successful manipulated request for firmware and got link to update.. firmware can be downloaded |
| iChoice S1 com.medm.ichoice.diary |
collected data from scale |
| test step | rating | desc | Activ8rLives Body Analyser com.activ8rlives.mobile |
FitBit aria com.fitbit.FitbitMobile |
HAPI Connected Scale com.hapiconnect |
iChoice S1 com.medm.medmwt.diary |
Thomson TBS705 com.stabxtom.thomson |
Withings WS-30 com.withings.wiscale2 |
iChoice S1 com.medm.ichoice.diary |
|---|---|---|---|---|---|---|---|---|---|
| av5_data_coll | informational | characteristics of data collected by the sensor |
collecting data from scale and transferring it immediately without any user interact the webservice |
data is being collected as weight and bodyfat; data can be assigned to a user immediatley after that user has been synchronised to the scale |
weight is collected and uploaded; as far as seen no other data is added |
collects data from scale as expected and save's on device; after some time it will be synchronized to the server |
collecting weight information just as expected |
data is being transmitted via http only scale is able to display the weather of the day other then that it just collects a measurements with a UNIX timestamp and the weight in g this a JSON document being posted to the server also location information is send to the scale and used by it; this communication is encrypted |
measurement just as expected; can be tampered and injection possible as long as auth token is valid |
| av5_pairing_process | informational | pairing process between sensor and phone |
no pairing process as such as the scale doesn't authenticate itself with the app but communicates anonymously |
pairing is initiated from the web page where the user has to login to a account; after obtaining a registration credentials for the scale, the scale is started to expose a wifi hotspot and then one has to connect to the scales hotspot to configure it; this is done by selecting a wifi network it should connect to and providing relevant login credentials; however these credentials are transmitted in clear text and hence leaked during the login process; the scale is then linked to the users account and can send data to that account |
pairing process is without real device pairing using a passcode or something |
pairing comes again without real bluetooth pairing.. interestingly the device asks for location access rather than bluetooth access permission |
no real pairing |
pairing is possible via bluetooth to the phone; it requires an authentication and is persisted; thereafter the scale is able to communicate via wifi or bluetooth with the server |
no real pairing process |
| av5_swfw_update | vulnerable: 1 / not vulnerable: 0 | update cycle related issues |
1 app to server communication doesn't show any hint regarding a firmware version for the scale |
0 firmware is queried from scale after uploading new measurements; firmware can be updated on a regular basis |
1 communication between app and server doesn't show any hint of information on possible firmware updates |
1 no version information exchanged between app and server |
1 scale sends its version on registration to the server but doesn't expect any updates |
0 scale asks server if any firmware update is available and provides the currently installed version intercepting this request and changing the firmware yields a link to an update send by server |
1 no software or firmware update cycle |
| 1.0 | 0.0 | 1.0 | 1.0 | 1.0 | 0.0 | 1.0 |
| device package |
comment |
|---|---|
| Activ8rLives Body Analyser com.activ8rlives.mobile |
basic ellaboration of the web page user registration via web page |
| FitBit aria com.fitbit.FitbitMobile |
gathered data on web page; attention: wlan SSID is mentioned on web page |
| HAPI Connected Scale com.hapiconnect |
data input tests and testing manipulation investigated web page |
| iChoice S1 com.medm.medmwt.diary |
explored web access tested for csrf vulnerability |
| Thomson TBS705 com.stabxtom.thomson |
no web page found which would come with the solution |
| Withings WS-30 com.withings.wiscale2 |
investigate if account can be delete with spoofed information --> account can't be deleted with stolen session id from unencrypted sensor device communication |
| iChoice S1 com.medm.ichoice.diary |
registered and researched web interface |
| test step | rating | desc | Activ8rLives Body Analyser com.activ8rlives.mobile |
FitBit aria com.fitbit.FitbitMobile |
HAPI Connected Scale com.hapiconnect |
iChoice S1 com.medm.medmwt.diary |
Thomson TBS705 com.stabxtom.thomson |
Withings WS-30 com.withings.wiscale2 |
iChoice S1 com.medm.ichoice.diary |
|---|---|---|---|---|---|---|---|---|---|
| av6_csrf | vulnerable: 1 / not vulnerable: 0 | basic CSRF attack |
1 csrf token are not renewed after request so that if an attacker manages to steal one of them he is able to send requests for the duration of the session; csrf token is correctly bound to the session |
0 ouath and csrf tokens protect |
0 tested on password change and found that websites protects against CSRF |
0 not vulnerable.. is using authenticity tokens for requests |
n/a n/a |
0 protected |
|
| av6_data_input | data not validated: 1 / data is validated: 0 | data input via web UI and validation |
0 data is limited to max 300kg |
0 weight data and other measurement data can be entered on web page |
1 data is not validated since unreasonably high measurements can be entered |
1 data is not validated but sanitized |
n/a n/a |
0 limited |
|
| av6_data_wipe | insecure feature: 1 / secure feature: 0 | wipe and delete data from the web account |
1 data wipe is not available from the web page; the policy mentions two mail addresses one for deactivation and one for deletion of which none worked; email send to again another mail address and waiting for response -> even worse managed to send an email from a different email account to delete another account |
0 no feature implemented but possible per email request; sender email has to be the account email |
0 no option |
0 account deletion possible |
n/a n/a |
0 account can be deleted but has 7 days period before they claim that data will actually be removed from their systems |
|
| av6_export_cloud | insecure feature: 1 / secure feature: 0 | data being exported somewhere into the cloud (dropbox et al) |
n/a no export options |
n/a n/a |
n/a n/a |
n/a n/a |
n/a n/a |
n/a n/a |
|
| av6_export_disk | insecure feature: 1 / secure feature: 0 | can data be exported to SD card or other locations on device and is that data encrypted |
0 excel document can be exported and data within that document is unencrypted |
0 your data belongs to you - comment and download via htt |
n/a n/a |
0 download as csv or html page |
n/a n/a |
0 only after account deletion data can be downloaded |
|
| av6_export_social | insecure feature: 1 / secure feature: 0 | export variants to social media and data encryption while exporting |
n/a no social sharing other than the web platforms own sharing is implemented; carer can be invited and also practitioners and clinics can get access; however that feature was not working |
0 social sharing possible but with detailled privacy settings |
0 facebook, twitter |
n/a only within the same platform |
n/a n/a |
n/a no hint that data can be shared online |
|
| av6_pri_pol | no link or information: 1 / link available: 0 | pirvacy poclicy linked and available |
0 the privacy policy is linked from the web page |
0 accessible from the page footer area where it is linked |
0 link in footer but not very visible |
0 linked on web page |
n/a n/a |
0 visibly linked from web interface |
|
| av6_pwd_change_freq | no period or frequency: 2 / either one: 1 / both: 0 | password change period (must) and frequency (can) |
2 not implemented |
2 no frequency defined |
2 none |
2 none |
n/a n/a |
2 no frequency enforced |
|
| av6_pwd_change_policy | no policy: 2 / min characters: 1 / mixed charsets: 0 | password policy enforced on password change |
2 none |
1 min 8 characters |
1 6 characters |
1 min 6 characters |
n/a n/a |
1 min 6 char; any char no type enforcement |
|
| av6_pwd_change_reuse | yes, unlimited: 0 / no, but history can be bypassed (see change freq): 1 / no without limitation: 2 | can a password be reused and how much difference is required |
2 none |
2 unlimited reuse |
2 unlimited |
2 not limited |
n/a n/a |
2 unlimited reuse |
|
| av6_reg_acc_verif | none: 2 / email account verification: 1 / two factor authentication 0 | email account verification or two factor authentication |
2 none |
1 account verification per email send but not enforced |
2 no |
1 no.. just email with confirmation that account has been created |
n/a n/a |
2 no verification |
|
| av6_reg_data_input | informational | Specifies the data fields and types which are required as inputs |
same as app |
mail, name, dob, weight (limited), height (limited) |
name, email, date of birth, goals |
same as app |
n/a n/a |
same as mobile app |
|
| av6_reg_data_validation | data not validated: 1 / data is validated: 0 | Comments on data validation during user registration: weight, heitght, email... |
0 same as app: only medical data |
0 sanitized and validated |
1 no |
0 same as app |
n/a n/a |
0 some data validation for height and weight |
|
| av6_reg_pripol_link | no link or information: 1 / link available: 0 | link to privacy policy or any kind of information on such topic |
1 not visible but very hidden in footer |
0 privacy policy link is available and has to be acknowledged; in addition hint that data is transferred to the US |
1 not visible but very hidden in footer |
0 visible in registration form |
n/a n/a |
0 yes |
|
| av6_reg_pwd_policy | no policy: 2 / min characters: 1 / mixed charsets: 0 | is a password policy enforced |
2 no |
1 min 8 character |
1 min 6 characters |
1 min 6 characters |
n/a n/a |
1 min 6 char |
|
| av6_sql_injection | vulnerable: 1 / not vulnerable: 0 | inject sql queries to learn information from the server |
0 protects against basic sql injection |
0 not possible |
0 no |
0 not possible |
n/a n/a |
0 not possible |
|
| av6_xss | vulnerable: 1 / not vulnerable: 0 | basic xss attacks on the web page with a select statement |
0 not successful for password field and manual entries |
0 oauth and csrf token protect |
0 no |
0 not possible |
n/a n/a |
0 not possible |
|
| 13.0 | 7.0 | 11.0 | 8.0 | 0.0 | 8.0 | None |
| device package | comment |
| com.fitbit.FitbitMobile FitBit aria |
pairing works as described via wifi and connecting to the scale directly; scale communicates via unencrypted wifi connection with the fitbit server and sends information to them; scale and protocol have been researched by others and fitbit has already improved on their weaknesses a lot |
| com.stabxtom.thomson Thomson TBS705 |
measurements from the scale are first inserted into the database and then synchronized to a server (data center); however once the data has been synchronized to that server it is not any longer accessible for the user; the app after reset does not load the already collected data initially |
| com.withings.wiscale2 Withings WS-30 |
scale can connect via wifi and bluetooth wifi option enables scale to communicate with withings immediately wifi option is using http only phone is loading data from webservice scale is set up via bluetooth, this way it is provided with parameter |


Before Change
print()
for op in Operator.inheritors():
print("Assert that the TPOT {} classifier matches the output of the sklearn counterpart ... ".format(op.sklearn_class.__name__), end="")
if not isinstance(op, Classifier):
continue
After Change
clf = op._merge_with_default_params(op.preprocess_args(*args))
clf.fit(training_features, training_classes)
all_features = training_testing_data.drop(non_feature_columns, axis=1).values
check_array_equal.description = ("Assert that the TPOT {} operator matches "
"the output of the sklearn counterpart".


Constructor
new exports(controllers)
Instantiates express callbacks, database, middlewares and controllers.
Parameters:
| Name | Type | Description |
|---|---|---|
controllers |
- Source:
Members
(static, readonly) MISSING_NICKNAME :string
Enum for common expected errors.
Type:
- string
- Source:
(static, readonly) NO_USER :string
Enum for common expected errors.
Type:
- string
- Source:
(static, readonly) UNAUTHORIZED :number
Enum for standard http response codes.
Type:
- number
- Source:
(static, readonly) UNAUTHORIZED :number
Enum for standard http response codes.
Type:
- number
- Source:
(async) create
Associates a nickname to a list of songs and persist it on the database.
Edge case forbidding a duplicate nickname after a quick query.
- Source:
(async) drop
Drops the user collection.
- Source:
(async) process
Process the entire user collection, selects TOP5 list accordingly to frequency of votes. Also returns a user list regarding
contribution. Contribution points are earned by matching one or more songs that are associated with an user
with one or more songs that are contained by the TOP5 list.
Edge case for an empty query.
- Source:
Methods
DB()
Standard initialization and connSection of MongoDB with Mongoose and events listener for exceptions and messages.
- Source:
Listens to Events:
- event:{
MongoDB} http MongoDB object events
DB()
Standard initialization and connection of MongoDB with Mongoose and events listener for exceptions and messages.
- Source:
Listens to Events:
- event:{
MongoDB} http MongoDB object events
init()
Instantiates the process route.
- Source:
init()
Instantiates the create and drop routes.
- Source:
initControllers()
Loop through and initializes all controllers of the application.
- Source:
initControllers()
Loop through and initializes all controllers of the application.
- Source:
initMiddlewares()
Initializes middlewares: cors and body parser.
- Source:
initMiddlewares()
Initializes middlewares: DDoS protection module, cors and body parsers.
- Source:
listen()
Listens in the desired port.
- Source:
Listens to Events:
- event:{Request} Express http request.
listen()
Listens in the desired port.
- Source:
Listens to Events:
- event:{Request} Express http request.


@main("Welcome") {
Welcome to Smart Campus. You have been successfully registered in our service. Please use the slide bar and click on Live Events to see the events around you.


Response to Ayres, Norman and Wolfe
01 Feb 2012Response to Ayres and Sweller, "The Split Attention Principle in Multimedia Learning"
Paul Ayres and John Sweller apply the split-attention principle to the design of multimedia instruction, asserting that it is "important to avoid formats that require learners to split their attention between, and mentally integrate, multiple sources of information" (135). This assertion is based on the theory of cognitive load, which refers to the amount of information the brain is able to process at any given point in time. The greater the number of sources of information in multimedia design, the higher the cognitive load required to understand it. An "extraneous" cognitive load, as Ayres and Sweller diagnose it, hinders the learning process by requiring users to split their attention and "mentally integrate the multiple sources of information" (135). As such, it is often necessary for the designer of a piece of multimedia instruction to do as much as possible to present the multiple sources of information in an integrated format.
With practice and expertise, the brain can be taught to expedite the process of piecing together disparate sources of information without need for additional visual aids, such as the algebra student being able to readily identify angle measures of a given shape. But for the novice learner, "substantial cognitive resources will need to be devoted to splitting attention between the disparate sources of information and mentally integrating them" (137). As a way to lessen the cognitive load, then, designers can employ visual cues or "referrents" that help integrate multiple sources of information. Other ways to help learners piece together multiple information sources is what Ayers and Sweller call the "dual mode" of multimedia design, which refers to the use of two different sensory cues, usually sight and sound, to lessen the cognitive load.
Response to Donald Norman, The Design of Everyday Things
In The Design of Everyday Things, Donald Norman looks at the design of familiar items to explain how to construct effective visual aids. At the heart of all user-friendly designs, Norman asserts, lies two fundamental components: a good "conceptual model" and a logical "visible structure" (13). An effective conceptual model should allow us to predict the outcome of our actions by explaining how an item works in a theoretical manner. Ideally, conceptual models should be as simple as possible, but the presiding imperative must always be accuracy and clarity of explanation. The item itself must also employ a logical visual structure, including the intuitive use of what Norman calls affordances, constraints and mappings. It should be clear to the eye from visual cues what an item can do (its affordances), what it can't do (its constraints) and how to connect the various parts together to perform an operation (mapping).
Response to Wolfe, Visual Search
Jeremy M. Wolfe lays out the basic principles of visual search, shedding light on the often unconscious ways our brains process sensory information based upon certain visual cues. Perhaps most importantly, Wolfe defines the basic structural features of visual search, including color, orientation, motion, size and scale. While many such basic features may appear obvious, Wolfe goes a step further in pointing out the various psychological factors that can come into play in our processing of visual information. For example, in keeping with Plato's idea of forms, Wolfe asserts that an object is more than just the sum of its parts; it is an object in its own right. As soon as attention arrives, Wolfe contends, "an object is not seen as collections of features. It is an object having certain featural attributes." An object carries with it certain mental associations that change the way users perceive it.