C++ Toolchain with Taint Analysis
Clang comes with a set of tools known as sanitizers that provide a runtime verification of common problems such as memory issues and undefined behavior. An interesting and a not well-known one is DfSan, a dataflow sanitizer. The name does not really reveal the true purpose: the library brings a compiler pass and runtime to implement taint analysis1. The main purpose is to taint specific memory regions and automatically propagate taint labels to other locations in memory that are affected by originally tainted regions. Taint labels are stored separately, in a so-called shadow memory, and compiler pass instruments codes with taint propagation. Thus, it is possible for every variable in a program to detect which values have affected it. The analysis is not only fully inter-procedural but it is completely memory agnostic, which is a common issue for static compiler analyses. The sanitizer implements data-flow tainting, the most common way of propagating labels:
void f(int * x)
{
// Taint label input_parameter detected in y!
int y = *x;
do_something_important(y);
}
int input_parameter = 1;
taint(&input_parameter, "input_parameter");
int x = input_parameter * 10;
f(&x);
As a sidenote, we notice that variables can be affected through control-flow decision as well:
int m, n;
taint(&m, "m");
taint(&n, "n");
int sum = 0;
// sum is m * n
// sum should have both `m` and `n` as taint labels
for(int i = 0; i < m; ++i)
sum += n;
The feature of control-flow tainting2 has not been implemented in DfSan yet.
To be fully precise, DfSan needs to instrument all library functions by propagating taint labels across function arguments and return values. As a result, it creates a wrapper function for each function found in the program. When handling functions that cannot be instrumented, e.g. library functions for which only declaration is available, the function will be considered as potentially problematic unless dfsan is notified through an ABI blacklist that this function does not write into user-accessible memory. For such function there can be no taint propagation or the taint label of return value from the function is overapproximated as a combination of taint labels in all input variables.
To make sure that we cover everything, we have to instrument all libraries used by the program, including the standard C++ library.
Goal
The main goal is to assemble a complete C++ toolchain with a support for dataflow (taint) analysis. According to Clang documentation3, the complete pipeline includes not only a compiler, but a linker, language standard library implementation and a runtime library. First, we’re going to build Clang with compiler runtime. Afterwards, we’re going to use the new build of clang to prepare sanitized build of libc++. Finally, we build libunwind, the library implementing stack unwinding which is necessary for exception handling, and assemble the toolchain in a Docker image to form a single distribution of a C++ dfsan pipeline. To demonstrate the tool usability for HPC software, we’re going to take a look on builds with OpenMP and MPI.
Shared libraries
Static libraries are prefered for dfsan to avoid issues with memory mappings. However, statical link of libraries might lead to serious issues when a specific library is linked more than once. For example, an application might link both OpenMP and a library already using OpenMP, leading to a scenario where two OpenMP runtimes are present. That could have catastrophic effects on the performance but it’s not something that we should worry about when trying to instrument an application4.
Using DfSan
Dfsan might produce a huge number of warnings related on uninstrumented functions.
It’s quite benefitial to look through the log at least. Although a significant part
of libc is uninstrumented and sqrt
computing square root is marked as functional, implying
that taint label of return value is infered from labels of input arguments,
the cubic root function cbrt
is marked only as uninstrumented
.
Afterwards it’s better to disable the output log entirely with the environment
variable:
DFSAN_OPTIONS=warn_unimplemented=0
Build Clang with sanitizers
First, we need to get LLVM and clang with the support to sanitizers - we’re going to use dataflow sanitizer (dfsan). There are three ways to achieve that:
- get prebuilt packages via APT for Debian-based systems: https://apt.llvm.org/
- build from sources, starting with cloning the repository and switching to branch corresponding to selected release
- download sources or prebuilt binaries from sources. The important part is we need to build Clang with compiler-rt since the latter provides sanitizers.
The build itself is quite straightforward as long as all projects
are placed together, just like in a clone from directory, or in a common directory
i.e. with directories clang
and compiler-rt
along LLVM
. The CMake configuration
with sanitizers and in release mode is as follows:
cmake -DLLVM_TARGETS_TO_BUILD="X86"\
&& -DLLVM_ENABLE_PROJECTS="clang;compiler-rt"\
&& -DCMAKE_BUILD_TYPE=Release\
&& -DCMAKE_INSTALL_PREFIX=/path/to/install\
&& /path/to/llvm
We can use dataflow sanitizer to propagate taint labels in a dataflow manner! We do a sanity check by running a shortened version of the simple example from docs:
#include <sanitizer/dfsan_interface.h>
#include <assert.h>
int main(void)
{
int i = 1;
dfsan_label i_label = dfsan_create_label("i", 0);
dfsan_set_label(i_label, &i, sizeof(i));
int j = 2;
dfsan_label j_label = dfsan_create_label("j", 0);
dfsan_set_label(j_label, &j, sizeof(j));
int test = i + j;
dfsan_label test_label = dfsan_read_label(&test, sizeof(test));
assert(dfsan_has_label(test_label, i_label));
assert(dfsan_has_label(test_label, j_label));
return 0;
}
Which can be built with just a single additional compiler flag:
export PATH=/install/path/bin:$PATH
# make sure we use the correct version
which clang++
clang++ -fsanitize=dataflow dfsan_test.cpp -o dfsan_test.exe
./dfsan_test.exe
The Docker image with the complete build is available as mcopik/clang-dfsan:clang-${VERSION}
.
C++ Standard Library
We want to build both libcxx and libcxxabi
to provide a fully sanitized standard library implementation that can be used
by C++ applications. The libraries are easily built as a part of LLVM tree by
selectin LLVM projects libcxx
and libcxxabi
, similarly to the previous setup.
However, this requires generation of targets for the entire LLVM project and
we can’t easily reuse previous build step because compiler flags are now different.
Fortunately, the libraries support a standalone build although it is a bit more complicated
due to a cyclic dependency: libcxx
requires libcxxabi
whereas libcxxabi
requires existence of libcxx
headers. The most generic approach would be to build libcxx
against a different ABI,
such as libstdc++
, build libcxxabi
and then finally rebuild libcxx
with a proper
ABI. But we can take a shortcut here since libcxxabi
requires only headers
from the other library, and for that reason we don’t need a full build.
First, let’s create a static build of libcxxabi
cmake -G "Ninja"\
-DCMAKE_BUILD_TYPE=MinSizeRel\
-DCMAKE_INSTALL_PREFIX=/path/to/install\
-DCMAKE_C_COMPILER=clang\
-DCMAKE_CXX_COMPILER=clang++\
-DCMAKE_C_FLAGS=-fsanitize=dataflow\
-DCMAKE_CXX_FLAGS=-fsanitize=dataflow\
-DLLVM_PATH=/path/to/llvm/install\
-DLIBCXXABI_ENABLE_SHARED=NO\
-DLIBCXXABI_LIBCXX_PATH=../libcxx\
../libcxxabi
This will create a single static library file lib/libc++abi.a
. Then, we can
get a libc++. In addition, we can use the experimental option LIBCXX_ENABLE_STATIC_ABI_LIBRARY
to link the contents of libcxxabi
with our static copy of libcxx
. This simplifies
further usage since libc++abi.a
does not have to be specified every time as link-time
dependency.
cmake -G "Ninja"\
-DCMAKE_BUILD_TYPE=MinSizeRel\
-DCMAKE_INSTALL_PREFIX=/opt/llvm\
-DCMAKE_C_COMPILER=clang\
-DCMAKE_CXX_COMPILER=clang++\
-DCMAKE_C_FLAGS=-fsanitize=dataflow\
-DCMAKE_CXX_FLAGS=-fsanitize=dataflow\
-DLIBCXX_ENABLE_SHARED=OFF\
-DLIBCXX_CXX_ABI=libcxxabi\
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON\
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=../libcxxabi/include/\
-DLIBCXX_CXX_ABI_LIBRARY_PATH=../build_libcxxabi/lib/\
../libcxx
Afterwards we should only libc++.a
in the ${INSTALL}/lib
directory. Let’s do a simple sanity check to verify that our new build works
correctly:
#include <vector>
#include <numeric>
#include <cassert>
#include <sanitizer/dfsan_interface.h>
int main(void)
{
int i = 1;
dfsan_label i_label = dfsan_create_label("i", 0);
dfsan_set_label(i_label, &i, sizeof(i));
int j = 2;
dfsan_label j_label = dfsan_create_label("j", 0);
dfsan_set_label(j_label, &j, sizeof(j));
std::vector<int> vec{1, 2, i};
dfsan_label test_label = dfsan_read_label(&vec.at(2), sizeof(int));
assert(dfsan_has_label(test_label, i_label));
int test = std::accumulate(vec.begin(), vec.end(), j);
test_label = dfsan_read_label(&test, sizeof(test));
assert(dfsan_has_label(test_label, i_label));
assert(dfsan_has_label(test_label, j_label));
return 0;
}
To build this, we need to specify in clang arguments that libc++
should be used.
Furthermore, we need to provide include and library directories to libc++, unless
the standard library was installed in the same directory tree as clang.
In such case, the compiler will be able to pick up paths automatically. The link
with libc++abi
is unnecesary when libraries were merged in the last build step.
clang++ -I /path/to/libc++/installation/include/c++/v1\
-fsanitize=dataflow\
-L /path/to/libc++/installation/lib\
-Wl,--start-group,-lc++abi\
-stdlib=libc++ dfsan_test.cpp\
-o dfsan_test.exe
The Docker image with the complete build is available as `mcopik/clang-dfsan:libcxx-${VERSION}.
Complete Toolchain
Finally, we can assemble a complete C++ toolchain. In addition to standard C++ library, the compilation workflow has several dependencies such as linker, runtime library or implementation of exceptions. One could use standard, widely-used and easily available tools or try to build a pure LLVM pipeline.
GCC
The required packages on a Ubuntu-based distro are binutils for standard GNU linker ld, libc-dev for standard C library and libgcc-${VERSION}-dev to provide runtime library and stack unwinder. Atomics require additional libraries2.
Clang
On Debian-based distributions, I recommend to use libc-6-dev since it’s perfectly compatible with clang programs. The necessary runtime functions are already provided with compiler-rt. Common alternatives to GNU ld linker are GNU gold or LLVM lld.
Again, the Docker image with the complete build is available as mcopik/clang-dfsan:dfsan-${VERSION}
.
It comes with two wrappers, clang-dfsan
and clang++-dfsan
, that include
flags necessary to enable dataflow sanitization and link against dedicated build
of libc++
.
OpenMP
LLVM has a separate implementation of OpenMP, a widely-used library for multithreading
and shared-memory parallelism. The build steps are similar to other project, with minor
differences. First, an additional CMake parameter LIBOMP_ENABLE_SHARED=Off
is
used to enforce building a static library. Second, there are several functions that cannot be instrumented because their
implementations are provided only in assembly. On Linux, these functions are provided in runtime/src/z_Linux_asm.S
and dfsan blacklist has to be updated:
fun:__kmp_x86_cpuid=uninstrumented
fun:__kmp_x86_cpuid=discard
fun:__kmp_store_x87_fpu_control_word=uninstrumented
fun:__kmp_store_x87_fpu_control_word=discard
fun:__kmp_load_x87_fpu_control_word=uninstrumented
fun:__kmp_load_x87_fpu_control_word=discard
fun:__kmp_clear_x87_fpu_status_word=uninstrumented
fun:__kmp_clear_x87_fpu_status_word=functional
fun:__kmp_hardware_timestamp=uninstrumented
fun:__kmp_hardware_timestamp=discard
fun:__kmp_fork_call=uninstrumented
fun:__kmp_fork_call=functional
fun:__kmp_serialized_parallel=uninstrumented
fun:__kmp_serialized_parallel=functional
fun:__kmp_invoke_microtask=uninstrumented
fun:__kmp_invoke_microtask=functional
The library can be build similarly to the previous step:
cmake -G "Ninja"\
-DCMAKE_BUILD_TYPE=MinSizeRel\
-DCMAKE_INSTALL_PREFIX=/opt/llvm\
-DCMAKE_C_COMPILER=clang\
-DCMAKE_CXX_COMPILER=clang++\
-DCMAKE_C_FLAGS="-fsanitize=dataflow -fsanitize-blacklist=/dfsan_abilist.txt"\
-DCMAKE_CXX_FLAGS="-fsanitize=dataflow -fsanitize-blacklist=/dfsan_abilist.txt"\
-DLIBCXX_ENABLE_SHARED=OFF\
-DLIBCXX_CXX_ABI=libcxxabi\
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON\
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=../libcxxabi/include/\
-DLIBCXX_CXX_ABI_LIBRARY_PATH=../build_libcxxabi/lib/\
../libcxx
Finally, we can try to compile a program parallelized with OpenMP by adding the
flags -I/path/to/openmp/include -fopenmp /path/to/openmp/lib/libiomp5.a
.
#include <vector>
#include <numeric>
#include <cassert>
#include <omp.h>
#include <sanitizer/dfsan_interface.h>
int main(void)
{
int m = 1;
dfsan_label m_label = dfsan_create_label("m", 0);
dfsan_set_label(m_label, &m, sizeof(m));
int n = 100;
#pragma omp parallel
{
int * sum = new int[omp_get_num_threads()];
#pragma omp for
for(int i = 0; i < n; ++i)
sum[omp_get_thread_num()] += m;
dfsan_label test_label = dfsan_read_label(&sum[omp_get_thread_num()], sizeof(int));
assert(dfsan_has_label(test_label, m_label));
delete[] sum;
}
return 0;
}
MPI
The MPI can be compiled with dfsan support, an example of build for OpenMPI:
CC=${CLANG} CFLAGS="-fsanitize=dataflow"\
&& ${OPENMPI_DIR}/configure\
&& --enable-static=yes\
&& --enable-shared=false
Compiling the library requires additional blacklist update because small assembly functions are used during the configuration to test the compiler:
fun:gsym_test_func=uninstrumented
Apart from that change, the compilation should work seamlessly. C++ compiler should be unnecessary because C++ bindings are deprecated and not built by default
An entirely different question is if instrumenting MPI is even necessary? MPI operations tend to overwrite memory content with data received from network and it requires an additional library to handle label propagation through MPI messages. Furthermore, using a dedicated build prevents from running the program on a supercomputer. Thus, a better option might be to simply put MPI functions in the blacklist.


A great many Waba applications expect the window size to be 160x160, not including the border and decorations. However, Waba for the Newton applications (like WabaCE apps) can have all sorts of arbitrary window sizes -- just specify the size you want in the /w and /h flags in the Java version of Exegen.
Internationalization is severely broken on most versions of Waba. But not on Waba for the Newton, which should Just Work. If you discover any difficulty in drawing expected Unicode characters or inputting them, please let us know.
Newton drawing has a lot of overhead. In order to speed things up, Waba for the Newton calls its :DoDrawing() method every time it receives an event, and leaves the method after the event is completed. This on occasion causes the odd Waba application to not draw quite right. If so, you can turn off this efficiency feature by unchecking "Faster Drawing" in the app's preference panel. Also, some poorly-written Waba applications assume that they have total control of the screen and that another window will never obscure part of their application. Thus they don't properly redraw when the obscuring window is moved or closed. If you can stand the efficiency hit and extra memory consumption, some of this can be alleviated by turning on "Buffer" in the app's preferences panel. Sorry 'bout that.
In ordinary Waba, you have to package into your app all the classes you use except for those in the standard waba.* distribution. This is not the case on the Newton. Waba for the Newton has the concept of shared libraries of classes which register themselves globally on the Newton machine. When a virtual machine needs classes, it first checks with the application for the classes. If the application doesn't have a class, then the virtual machine starts going through the libraries looking for it. Only after exhausting all the libraries does the virtual machine issue an error. The idea behind this is that it makes applications significantly smaller, as they all share a central repository of common classes.
Unlike standard Waba, the methods Object.equals(...), Object.toString(...), and Object.hashCode() are additionally supported.
Unlike standard Waba, the methods String.equals(...) and String.hashCode() are additionally supported.
Callback is part of the NSWabaAPI, a package which allows Waba developers to access practically any feature of NewtonScript or the underlying Newton system. Callback in particular implements wrappers for Waba methods which can be used as NewtonScript callback functions.
NS is part of the NSWabaAPI, a package which allows Waba developers to access practically any feature of NewtonScript or the underlying Newton system. NS gives auxillary access to basic Newton mechanisms.
Ref is part of the NSWabaAPI, a package which allows Waba developers to access practically any feature of NewtonScript or the underlying Newton system. Ref is the class which represents NewtonScript objects, everything from integers to strings to arrays, frames, and functions.
Waba developers aren't very careful about their font choices -- they typically pick Helvetica 12pt, which they think for some reason means "the PalmOS font" (PalmOS's font is closer to Helvetica 8pt). Other lazy Waba programmers have done other nasty Font stuff. As such, we've had to hack the Newton implementation of Font. Here's how we've got it set up presently:
Unlike in normal Waba, you can also specify additional Newton styles beyond Plain and Bold. You may specify a combination of any of the following styles by adding their respective values: Bold=1, Italic=2, Underline=4, Outline=8, Superscript=128, Subscript=256.
Sean is proposing a replacement for the Font object which makes it less susceptible to bad programming style on behalf of non-Newton Waba developers.
The method Graphics.copyRect(...) is only supported if you turn on "Buffer" in the application's preferences panel.
The method Image.setPixels(...) is not presently supported. Also: bugs in the Newton's quickdraw code may make it difficult to draw a grayscale image without the Newton insisting on converting it to black-and-white. We welcome your testing of this issue -- we've not nailed down exactly the problem yet. Contact Sean about this.
The method Sound.beep() is supported, though it can be turned off by setting "Mute" in the app's preferences. The method Sound.tone(...) is not presently supported. We have written the code for this method for the MP2x00 and eMate, but bugs in the Newton's synchronous synthesizer code make it impossible to use without the Newton leaking memory and eventually hanging. So presently the SoundTone method has been stubbed out, sorry.
SoundClip is not presently supported.
Waba catalogs are ordinary Newton soups, and are saved with the Newton symbol waba:uniqueSym:name, where name is the name requested by the Waba application, and uniqueSym is its unique symbol. Typically the unique symbol is waba:foo, where foo is the executable file name specified by the Exegen application. Yes, that means that "waba" appears twice in the symbol. :-)
The method Catalog.addRecord(...) is not handled quite as specified in Catalog.java. On the Newton you cannot easily specify the order in which soup (catalog) entries are added; you can only do tricks like this with indices. So the Newton's implementation of addRecord() adds a record to somewhere in the catalog, but not necessarily to the end.
Newton soups do not have shared or exclusive locks. Thus the Newton implementation of the method Catalog.setRecordPos(...) ignores any locking or unlocking.
The maximum legal record size in Waba for the Newton is presently 30,000. Sean is proposing some fixes for Waba's Catalog specification.
File is not supported and we do not intend to support it in the future.
The current Serial implementation, written in pure C++, is thanks to Paul Guyot. Sean has identified some crashers in the code, but it basically works at this point, very impressive! Contact Paul with any bug reports. You may also contact Sean Luke, but please contact Paul as well. Some specifics:
Serial Port Number: 0 means the default port depending on your machine. This is almost certainly the external serial port. 1 to 7 means the seven serial ports selectors defined in the documentation:
1 - External Serial 'extr' (SCC channel 0) 2 - Built In IR 'infr' (SCC channel 1) 3 - Built In Modem 'mdem' (SCC channel 2) 4 - PCMCIA Slot 1 'slt1' 5 - PCMCIA Slot 2 'slt2' 6 - PCMCIA Any Slot 'slot' 7 - Built In Extra 'tblt' (SCC channel 3 ?)
Anything other integer value is passed directly to the Newton endpoint. For example, if you provide 0x65787472 ('extr' ), you'll have the external serial port. This feature was added by Paul to make it possible for people to add new low-level serial port facilities in the future. If you specify a value outside the 0...7 range and it does not correspond to a specific serial port, then the Serial instance will start closed and you will not be allowed to write to it.
Serial port speed: The speed is the numerical value in bits per seconds as in Waba for PalmOS. The Newton APIs defines speed from 300 bps to 230400 bps. As is the case for PalmOS, if you set your bits per seconds value to 0, Waba for the Newton will default to 9600 bps. For the low-level Newton hackers out there, any value outside the 300...230400 range is passed directly to the endpoint. Hence, if you put 1, you'll get external clock special speed. Please note that there is no way to use external clock divisor.
Socket is not yet supported. Steve Weyer has written a NewtonScript-based socket implementation; however it is not yet in the Waba distribution, and Steve thinks it's too slow and is hoping that Paul Guyot will be able to make some small changes to his C++ Serial code and get sockets working. Paul's pretty busy right now with his ATA driver so we don't know if that's gonna happen any time soon.
Waba's stream has blocking reads and writes, which can cause no end of frustration for Socket and Serial programs (the Newton needs asynchronous callbacks, which are generally incompatible with blocking reads and writes). If you do not get all the data you had asked for on a read, try setting a timer, releasing control of the event loop, and requesting another read again when the timer fires. Additionally, there's no way to tell if you've reached EOF or if it's some other error! Sean is proposing some fixes for Waba's Stream specification along these lines.
Waba for the Newton adds two methods to the Waba spec designed to assist in dynamic class loading: Vm.getClassName(...) and Vm.makeInstance().
Additionally, Vm.setDeviceAutoOff(...) is not supported, Vm.exec(...) launches an application without terminating the Waba process, Vm.getPlatform(...) returns NewtonOS, Vm.isColor() returns false for black-and-white Newtons regardless, and true for grayscale Newtons only if "Gray" is turned on in the application's preferences panel.
Welcome is never used in Waba for the Newton; its function is performed instead by the About panel.


Press ready to start or wait for players to join
TRIVIA
Multiplayer winner earns 1 extra stream pass
Who plays the character Logan?
A
Michael Fassbender
B
Patrick Stewart
C
Hugh Jackman
+100 pts
Player Wins!
0
Player 1
Player 2
Player 3
Player 3
0
Player 1
0
Player 2
0
Player 3
0
Player 4
0 players ready
5


Support to make the implementation of Hibernate 2 {@link net.sf.hibernate.UserType UserTypes} easy for value types that follow our value vernacular.
To persist objects emulating values using Hibernate, they have to be mapped to columns in a {@link java.sql.PreparedStatement SQL update query} and from columns in a {@link java.sql.ResultSet SQL result set}. In Hibernate 2, this is done through {@link net.sf.hibernate.UserType UserTypes}, which have to be registered in the Hibernate config files. This package adds support to make the implementation of such {@link net.sf.hibernate.UserType UserTypes} easy for value types that follow our value vernacular, at least up to a point.
Note that, since Hibernate 2 is an older version of Hibernate, this package is to be considered legacy. It is not further developed. More support can be found in other packages for more recent versions of Hibernate.


34
Taste and See That the LORD Is Good
OF DAVID, WHEN HE CHANGED HIS BEHAVIOR BEFORE ABIMELECH, SO THAT HE DROVE HIM OUT, AND HE WENT AWAY.
1 I will bless the LORD at all times;
his praise shall continually be in my mouth.
2 My soul makes its boast in the LORD;
let the humble hear and be glad.
3 Oh, magnify the LORD with me,
and let us exalt his name together!
4 I sought the LORD, and he answered me
and delivered me from all my fears.
5 Those who look to him are radiant,
and their faces shall never be ashamed.
6 This poor man cried, and the LORD heard him
and saved him out of all his troubles.
7 The angel of the LORD encamps
around those who fear him, and delivers them.
8 Oh, taste and see that the LORD is good!
Blessed is the man who takes refuge in him!
9 Oh, fear the LORD, you his saints,
for those who fear him have no lack!
10 The young lions suffer want and hunger;
but those who seek the LORD lack no good thing.
11 Come, O children, listen to me;
I will teach you the fear of the LORD.
12 What man is there who desires life
and loves many days, that he may see good?
13 Keep your tongue from evil
and your lips from speaking deceit.
14 Turn away from evil and do good;
seek peace and pursue it.
15 The eyes of the LORD are toward the righteous
and his ears toward their cry.
16 The face of the LORD is against those who do evil,
to cut off the memory of them from the earth.
17 When the righteous cry for help, the LORD hears
and delivers them out of all their troubles.
18 The LORD is near to the brokenhearted
and saves the crushed in spirit.
19 Many are the afflictions of the righteous,
but the LORD delivers him out of them all.
20 He keeps all his bones;
not one of them is broken.
21 Affliction will slay the wicked,
and those who hate the righteous will be condemned.
22 The LORD redeems the life of his servants;
none of those who take refuge in him will be condemned.


Data structures are an integral part of using and understanding any computer language, and Ruby is no exception. To the uninitiated, Arrays and Hashes can be rather confusing given their many similarities. But Arrays and Hashes are completely accessible once we understand their key features and what makes each unique.
Arrays are ordered, integer-indexed collections of any object. They can contain anything from strings, to integers, to floats, to boolean values. Below is an example of an array.
our_array = ["corgis", 21, 16.34, true]
When we say arrays are ordered, that means that when and where each element is placed is significant, and will represent their index (or how we'll access them at a later time). When we say arrays are integer-indexed this means they can be accessed by their corresponding index number (e.g. the first object has index value 0). And when we say arrays are collections of any object, this means they can contain any object type, as previously noted.
Enough theory, let's see concrete examples! To create an array, we could use the literal notation of our_array = Array.new
and then proceed to add elements by doing our_array[0] = "corgis"
our_array[1] = 21
, and so on, but that's not incredibly efficient. Instead let's instantiate (a fancy word for create) the array AND assign objects to the array in one fell swoop. This can be done by typing our_array = ["corgis", 21, 16.34, true]
. Now not only has the array been created, but we've also added 4 elements to the array!
Manipulating and accessing objects is just as simple. Keeping in mind that the first element in an array is referred to as having the index 0, we can 'puts' the first object by typing puts our_array[0]
. This will output a string of the first (or 0-indexed) object in our array, "corgis". How about if we want to output the fourth element? Subtract one from four, and then we'll type puts our_array[3]
, which will output "true".
Hashes (often referred to as dictionaries in other languages) are collections of unique keys and their values. So whereas arrays are indexed by ascending numbers beginning at 0, hashes can be indexed by strings or symbols (more on these later). Keep in mind that all keys must be unique, whereas values can repeat. Let's now recreate our array as a hash with some more pertinent information!
First, we'll instantiate our hash by typing favorites_hash = { "dog" => "corgi", "integer" => 21, "float" => 16.34, "boolean" => true }
. Now instead of accessing "corgi" by using index 0, we would use the index "dog" like so: favorites_hash["dog"]
. This would then return "corgi". How fun! Note how we used the hash rocket '=>' to associate a key with a value.
Regarding when we should use an array relative to a hash, that is a value judgement. Arrays may be better utilized when order is significant, and a string as a key wouldn't be appropriate (e.g. top 5 bands ever). A hash may be better utilized when we'll want to access given values by calling a symbol or string corresponding to it (e.g. animal_names = { "cat" => "Boots", "dog" => "Rover", "rabbit" => "Bugs" }
).


My life is very adventurous!
This page is only updated every 10 minutes, so there is no need to continually hit "refresh".


--- layout: snippet title: "Page progress bar" permalink: /examples/progress/page-progress/ sitemap: false ---


S. Marwan, T.W. Price, M. Chi, and T. Barnes. “Immediate Data-Driven Positive Feedback Increases Engagement on Programming Homework for Novices.” Educational Data Mining in Computer Science Education (CSEDM) Workshop @ EDM’20 (short paper)
S.Marwan, G. Gao, S. Fisk, T.W. Price, and T. Barnes. “Adaptive Immediate Feedback Can Improve Novice Programming Engagement and Intention to Persist in Computer Science”. In the sixteenth annual ACM International Computing Education Research (ICER), 2020. (22.7% acceptance rate; 27/119 full papers)
S. Marwan, A. Dombe, T.W. Price, “Unproductive Help-seeking in Programming: What it is and How to Address it” ITiCSE’20 – Proceedings of the 2020 ACM Conference on Innovation and Technology in Computer Science Education. (27.6% acceptance rate; 72/261 full papers)
S. Marwan, J. J. Williams, T.W. Price. “An Evaluation of the Impact of Automated Programming Hints on Performance and Learning.” International Computing Education Research Conference (ICER). 2019. (20.4% acceptance rate; 28/137 full papers).
S. Marwan, N. Lytle, J. J. Williams, T. W. Price. "The Impact of Adding Textual Explanations to Next-step Hints in a Novice Programming Environment". Proceedings of the 24th Annual ACM Conference on Innovation and Technology in Computer Science Education (ITiCSE). 2019. (28% acceptance rate; 67/243 full papers).
Y. Shi, K. Shah, W. Wang, S. Marwan, P. Penmetsa, T. Price, “Toward Semi-Automatic Misconception Discovery Using Code Embeddings”. Accepted in International Conference on Learning Analytics and Knowledge (LAK), 2021. (short paper; 31.6% acceptance rate) [forthcoming].
G.Gao, S.Marwan, and T.W. Price. “Early Performance Prediction using Interpretable Patterns in Programming Process Data”. Accepted in SIGCSE Technical Symposium, 2021. [forthcoming].
P. Shabrina, S. Marwan, M. Chi, T.W. Price, and T. Barnes. “The Impact of Data-driven Positive Programming Feedback: When it Helps, What Happens when it Goes Wrong, and How Students Respond” Educational Data Mining in Computer Science Education (CSEDM) Workshop @ EDM’20 (24% acceptance rate; 4/17 full papers)
T.W. Price, S. Marwan, M. Winters, J.J. Williams, “An Evaluation of Data-driven Programming Hints in a Classroom Setting.” International Conference on Artificial Intelligence in Education (AIED). 2020. (short paper)
Y. Mao, S. Marwan, T.W. Price, T. Barnes, M. Chi, “What Time is It? Student Modeling Needs to Know.” Proceedings of the International Conference on Educational Data Mining (EDM) 2020. (30.6% acceptance rate; 30/98 papers)
W. Wang, Y. Rao, R. Zhi, S. Marwan, G. Gao, T.W. Price, “Step Tutor: Supporting Students through Step-by-Step Example-Based Feedback.” Proceedings of the 2020 ACM Conference on Innovation and Technology in Computer Science Education. (27.6% acceptance rate; 72/261 full papers)
T.W. Price, J.J. Williams, J. Solyst, S. Marwan, “Engaging Students with Instructor Solutions in Online Programming Homework.” Proceedings of the 2020 CHI Conference on Human Factors in Computing Systems. 2020. (24.3% acceptance rate; 760/3126 papers)
R. Zhi, S. Marwan, Y. Dong, N. Lytle, T.W. Price, T. Barnes. “Toward Data-Driven Example Feedback for Novice Programming.” Proceedings of the International Conference on Educational Data Mining (EDM). 2019. (22.5% acceptance rate for full papers). [Paper], [Presentation]
Dong, Y., S. Marwan, V. Cateté, T. Barnes and T. W. Price. “Defining Tinkering Behavior in Open-ended Block-based Programming Assignments". ACM Special Interest Group on Computer Science Education (SIGCSE), 2019.
Zhi, R., T. W. Price, S. Marwan, A. Milliken, T. Barnes and M. Chi. “Exploring the Impact of Worked Examples in a Novice Programming Environment.” ACM Special Interest Group on Computer Science Education (SIGCSE). 2019.
T. W. Price, J. J. Williams, S. Marwan."A Comparison of Two Designs for Automated Programming Hints". Companion Proceedings 9th International Conference on Learning Analytics & Knowledge (LAK19). 2019.
S. Marwan, A.Shawish, K.Nagaty, “DNA-Based Cryptographic Methods for Data Hiding in DNA Media”, BioSystems, ELSEVIER 150, pp. 110-118, 2016.
S. Marwan, A.Shawish, K.Nagaty, “An Enhanced DNA-based Steganography Technique with a Higher Hiding Capacity”, International Conference on Bioinformatics Models, Methods and Algorithms, BIOSTEC 2015.


I am an experienced data scientist and developer who has led several data based projects from establishing data infrastructure up to the model building and analysis. I have worked in both early-stage startups and research environments, requiring a high level of autonomy. With both development experience, and an understanding of business objectives, I can effectively communicate my work and integrate it into a larger project. I am a curious and quick learner, eager to apply and expand my data skills in a dynamic work environment.


HTTP
Cordova / Phonegap plugin for communicating with HTTP servers. Supports iOS and Android.
Advantages over Javascript requests:
- Background threading - all requests are done in a background thread
- SSL Pinning
Repo: https://github.com/wymsee/cordova-HTTP
Installation
- Install the Cordova and Ionic Native plugins:
$ ionic cordova plugin add cordova-plugin-http $ npm install --save @ionic-native/http
- Add this plugin to your app's module
Supported platforms
- Android
- iOS
Usage
import { HTTP } from '@ionic-native/http';
constructor(private http: HTTP) { }
...
this.http.get('http://ionic.io', {}, {})
.then(data => {
console.log(data.status);
console.log(data.data); // data received by server
console.log(data.headers);
})
.catch(error => {
console.log(error.status);
console.log(error.error); // error message as string
console.log(error.headers);
});
Instance Members
getBasicAuthHeader(username, password)
This returns an object representing a basic HTTP Authorization header of the form.
| Param | Type | Details |
|---|---|---|
| username |
string
|
Username |
| password |
string
|
Password |
Returns: Object
an object representing a basic HTTP Authorization header of the form {‘Authorization’: ‘Basic base64encodedusernameandpassword’}
useBasicAuth(username, password)
This sets up all future requests to use Basic HTTP authentication with the given username and password.
| Param | Type | Details |
|---|---|---|
| username |
string
|
Username |
| password |
string
|
Password |
setHeader(header, value)
Set a header for all future requests. Takes a header and a value.
| Param | Type | Details |
|---|---|---|
| header |
string
|
The name of the header |
| value |
string
|
The value of the header |
enableSSLPinning(enable)
Enable or disable SSL Pinning. This defaults to false.
To use SSL pinning you must include at least one .cer SSL certificate in your app project. You can pin to your server certificate or to one of the issuing CA certificates. For ios include your certificate in the root level of your bundle (just add the .cer file to your project/target at the root level). For android include your certificate in your project’s platforms/android/assets folder. In both cases all .cer files found will be loaded automatically. If you only have a .pem certificate see this stackoverflow answer. You want to convert it to a DER encoded certificate with a .cer extension.
As an alternative, you can store your .cer files in the www/certificates folder.
| Param | Type | Details |
|---|---|---|
| enable |
boolean
|
Set to true to enable |
Returns: Promise<void>
returns a promise that will resolve on success, and reject on failure
acceptAllCerts(accept)
Accept all SSL certificates. Or disabled accepting all certificates. Defaults to false.
| Param | Type | Details |
|---|---|---|
| accept |
boolean
|
Set to true to accept |
Returns: Promise<void>
returns a promise that will resolve on success, and reject on failure
validateDomainName(validate)
Whether or not to validate the domain name in the certificate. This defaults to true.
| Param | Type | Details |
|---|---|---|
| validate |
boolean
|
Set to true to validate |
Returns: Promise<void>
returns a promise that will resolve on success, and reject on failure
post(url, body, headers)
Make a POST request
| Param | Type | Details |
|---|---|---|
| url |
string
|
The url to send the request to |
| body |
Object
|
The body of the request |
| headers |
Object
|
The headers to set for this request |
Returns: Promise<HTTPResponse>
returns a promise that resolve on success, and reject on failure
get(url, parameters, headers)
| Param | Type | Details |
|---|---|---|
| url |
string
|
The url to send the request to |
| parameters |
Object
|
Parameters to send with the request |
| headers |
Object
|
The headers to set for this request |
Returns: Promise<HTTPResponse>
returns a promise that resolve on success, and reject on failure
uploadFile(url, body, headers, filePath, name)
| Param | Type | Details |
|---|---|---|
| url |
string
|
The url to send the request to |
| body |
Object
|
The body of the request |
| headers |
Object
|
The headers to set for this request |
| filePath |
string
|
The local path of the file to upload |
| name |
string
|
The name of the parameter to pass the file along as |
Returns: Promise<HTTPResponse>
returns a promise that resolve on success, and reject on failure
downloadFile(url, body, headers, filePath)
| Param | Type | Details |
|---|---|---|
| url |
string
|
The url to send the request to |
| body |
Object
|
The body of the request |
| headers |
Object
|
The headers to set for this request |
| filePath |
string
|
The path to donwload the file to, including the file name. |
Returns: Promise<HTTPResponse>
returns a promise that resolve on success, and reject on failure
HTTPResponse
| Param | Type | Details |
|---|---|---|
| status |
number
|
The status number of the response |
| data |
any
|
The data that is in the response. This property usually exists when a promise returned by a request method resolves. (optional) |
| headers |
any
|
The headers of the response |
| error |
string
|
Error response from the server. This property usually exists when a promise returned by a request method rejects. (optional) |


Complexity is conserved.
You can hide it.
You can abstract it.
You can defer dealing with it.
But, you cannot get rid of it.
[1]
Some irreducible complexity is there in the problem space,
and eventually,
that complexity must be represented in the solution space.
[2]
While the complexity of the problem space is conserved,
a good tool does not add unneeded complexity.
What does this mean?
Hum does have notations - but they are designed to be as natural as we could make them. The notations provide a regimen for organizing knowledge. But the regimen is as simple as we could make it.
The most esoteric notation in Hum is the mark-up notation used to advise the user interface actors. We have attempted to keep the mark-up notation minimal but adequate. Hopefully, this might be hidden from view some day when a WYSIWYG editor will obviate the need for people to know this notation.
[1] We deliberately ignore situations where people have created a self-inflicted complexity in the problem space and that complexity might be removed from the problem space by process re-engineering or policy reform. Consider, for example, the (USA) federal tax code.
[2] The principle is that the solution designers must acknowledge and represent whatever complexity exists in the problem space.


Public Types | |
| enum | IC_CATEGORY { IC_KEY = 1, IC_KEYREF = 2, IC_UNIQUE = 3 } |
Public Member Functions | |
Constructors | |
| XSIDCDefinition (IdentityConstraint *const identityConstraint, XSIDCDefinition *const keyIC, XSAnnotation *const headAnnot, StringList *const stringList, XSModel *const xsModel, MemoryManager *const manager=XMLPlatformUtils::fgMemoryManager) | |
| The default constructor. | |
Destructor | |
| ~XSIDCDefinition () | |
overridden XSXSObject methods | |
| const XMLCh * | getName () const |
The name of type NCName of this declaration as defined in XML Namespaces. | |
| const XMLCh * | getNamespace () |
The [target namespace] of this object, or null if it is unspecified. | |
| XSNamespaceItem * | getNamespaceItem () |
| A namespace schema information item corresponding to the target namespace of the component, if it's globally declared; or null otherwise. | |
XSIDCDefinition methods | |
| IC_CATEGORY | getCategory () const |
| [identity-constraint category]: one of IC_KEY, IC_KEYREF or IC_UNIQUE. | |
| const XMLCh * | getSelectorStr () |
| [selector]: a restricted XPath expression. | |
| StringList * | getFieldStrs () |
| [fields]: a non-empty list of restricted XPath ([XPath]) expressions. | |
| XSIDCDefinition * | getRefKey () const |
| [referenced key]: required if [identity-constraint category] is IC_KEYREF, forbidden otherwise (when an identity-constraint definition with [ identity-constraint category] equal to IC_KEY or IC_UNIQUE). | |
| XSAnnotationList * | getAnnotations () |
| A set of [annotations]. | |
Protected Attributes | |
| IdentityConstraint * | fIdentityConstraint |
| XSIDCDefinition * | fKey |
| StringList * | fStringList |
| XSAnnotationList * | fXSAnnotationList |
| XSIDCDefinition::XSIDCDefinition | ( | IdentityConstraint *const | identityConstraint, | |
| XSIDCDefinition *const | keyIC, | |||
| XSAnnotation *const | headAnnot, | |||
| StringList *const | stringList, | |||
| XSModel *const | xsModel, | |||
| MemoryManager *const | manager = XMLPlatformUtils::fgMemoryManager | |||
| ) |
The default constructor.
| identityConstraint | ||
| keyIC | ||
| headAnnot | ||
| stringList | ||
| xsModel | ||
| manager | The configurable memory manager |
| XSIDCDefinition::~XSIDCDefinition | ( | ) |
| const XMLCh* XSIDCDefinition::getName | ( | ) | const [virtual] |
The name of type NCName
of this declaration as defined in XML Namespaces.
Reimplemented from XSObject.
| const XMLCh* XSIDCDefinition::getNamespace | ( | ) | [virtual] |
| XSNamespaceItem* XSIDCDefinition::getNamespaceItem | ( | ) | [virtual] |
A namespace schema information item corresponding to the target namespace of the component, if it's globally declared; or null otherwise.
Reimplemented from XSObject.
| IC_CATEGORY XSIDCDefinition::getCategory | ( | ) | const |
[identity-constraint category]: one of IC_KEY, IC_KEYREF or IC_UNIQUE.
| const XMLCh* XSIDCDefinition::getSelectorStr | ( | ) |
[selector]: a restricted XPath expression.
| StringList * XSIDCDefinition::getFieldStrs | ( | ) |
| XSIDCDefinition * XSIDCDefinition::getRefKey | ( | ) | const |
[referenced key]: required if [identity-constraint category] is IC_KEYREF, forbidden otherwise (when an identity-constraint definition with [ identity-constraint category] equal to IC_KEY or IC_UNIQUE).
References fKey.
| XSAnnotationList* XSIDCDefinition::getAnnotations | ( | ) |
A set of [annotations].
IdentityConstraint* XSIDCDefinition::fIdentityConstraint [protected] |
XSIDCDefinition* XSIDCDefinition::fKey [protected] |
Referenced by getRefKey().
StringList* XSIDCDefinition::fStringList [protected] |
Referenced by getFieldStrs().
XSAnnotationList* XSIDCDefinition::fXSAnnotationList [protected] |


Namespace Bifrost.Execution
Classes
AppDomainAssemblyProvider
Represents an implementation of ICanProvideAssemblies that provides assemblies from the current System._AppDomain
Assemblies
Represents a IAssemblies
AssemblyComparer
Represents a comparer for comparing assemblies, typically used in Distinct()
AssemblyFilters
Represents an implementation of IAssemblyFilters
AssemblyInfo
Represents the information about assemblies
AssemblyProvider
Represents an implementation of IAssemblyProvider
AssemblySpecifiers
Represents an implementation of IAssemblySpecifiers
AssemblyUtility
Represents an implementation of IAssemblyUtility
BaseConvention
Defines a base abstract class for Binding conventions for any IContainer
BindingConventionManager
Represents a IBindingConventionManager
CannotInvokeMethodBecauseTargetIsNotAlive
Exception that is thrown when a target is not alive in a weak reference
ContractToImplementorsMap
Represents an implementation of IContractToImplementorsMap
DefaultAssemblySpecifier
Represents a default ICanSpecifyAssemblies
DefaultCallContext
Represents a ICallContext
DefaultConvention
Represents a IBindingConvention that will apply default conventions
Dispatcher
Represents a IDispatcher
DispatcherManager
Represents a manager for managing the dispatcher in an application
ExecutionContext
Represents a IExecutionContext
ExecutionContextDetailsPopulator
Represents a IExecutionContextDetailsPopulator
ExecutionContextFactory
Represents a IExecutionContextFactory
ExecutionContextManager
Represents a IExecutionContextManager
FileSystem
Represents an implementation of IFileSystem
FileSystemAssemblyProvider
Represents an implementation of ICanProvideAssemblies that is capable of discovering assembly files from the directory in which the application resides
HashCodeHelper
Provides useful methods for dealing with HashCodes
IgnoreDefaultConventionAttribute
Indicates that a class is Singleton and should be treated as such for any factory creating an instance of a class marked with this
InstancesOf<T>
Represents an implementation of IInstancesOf<T>
InvalidSignatureException
Exception that is thrown when signature of a method does not match how it is called. Typically used when dynamically invoking a WeakDelegate
MultipleApplicationsFoundException
The exception that is thrown if multiple
MultipleTypesFoundException
The exception that is thrown when multiple types are found and not allowed
Promise
Represents a a well defined continuable object that is typically used with operations that are asynchronous or potentially asynchronous in nature.
ReadOnlyObjectException
The exception that is thrown when an object is read only and one is writing to it
SingletonAttribute
Indicates that a class is Singleton and should be treated as such for any factory creating an instance of a class marked with this
TypeDiscoverer
Represents a ITypeDiscoverer
Uses the current AppDomain / Deployment and discoveres all types loaded
TypeFinder
Represents an implementation of ITypeFinder
TypeImporter
Represents a ITypeImporter
UnableToResolveTypeByName
Exception that is thrown when a type is not possible to be resolved by its name
WeakDelegate
Represents a delegate that is weakly referenced - non obtrusive for the garbage collector
WriteOnceExpandoObject
Represents an ExpandoObject that can only have values assigned to during creation. Similar to System.Dynamic.ExpandoObject, members are dynamic and can be added on the fly
Interfaces
IAssemblies
Defines a locator for locating assemblies for current application
IAssemblyFilters
Defines a system for filtering assemblies
IAssemblyProvider
Defines a system that can provide
IAssemblySpecifiers
Defines a system that knows about
IAssemblyUtility
Defines a utility to work with
IBindingConvention
Defines the basic functionality for a convention that can be applied to bindings for a IContainer.
IBindingConventionManager
Defines a manager for binding conventions
ICallContext
Defines a thread safe context for the current callpath
ICanPopulateExecutionContextDetails
Defines a visitor that takes part in populating all the details for the IExecutionContext.
ICanProvideAssemblies
Defines a system that can provide assemblies
ICanSpecifyAssemblies
Specifies what assemblies to include
IContainer
Defines a container for resolving types
IContractToImplementorsMap
Defines a system that handles the relationship between contracts and their implementors
IDispatcher
Defines a dispatcher to be used for checking for thread access on the UI thread and invoking things in the UI thread
IExecutionContext
Defines the execution context in which things are within For instance, any commands coming into the system will be in the context of an execution context
IExecutionContextDetailsPopulator
Defines a system for populating a IExecutionContext
IExecutionContextFactory
Defines a factory for creating IExecutionContext instances
IExecutionContextManager
Defines a manager for managing IExecutionContext
IFileSystem
Defines functionality for accessing the filesystem
IInstancesOf<T>
Defines something that can discover types and give instance of these types when enumerated over
ITypeDiscoverer
Discovers types based upon basetypes
ITypeFinder
Defines a system that is capable of finding types based on base types
ITypeImporter
Defines a container for importing types.
Enums
BindingLifecycle
Scope for activation
Delegates
AssemblyAdded
Gets called when an assembly is added
ExecutionContextPopulator
Represents the method that gets called when an IExecutionContext can be populated


You should understand plain old antiderivatives and derivatives for this text, i.e.:
You may have noticed that the quadratic-root and cubic-extrema equations differ by only two numbers:
| \[x = {-b \pm \sqrt{b^2-{\color{orange}4}ac} \over {\color{orange}2}a}\] | \[x = {-b \pm \sqrt{b^2-{\color{orange}3}ac} \over {\color{orange}3}a}\] |
| \[x = {-b \pm \sqrt{b^2-{\color{orange}{8 \over 3}}ac} \over {\color{orange}4}a}\] | \[x = {-b \pm \sqrt{b^2-{\color{orange}{5 \over 2}}ac} \over {\color{orange}5}a}\] |
We need to keep track of the degree associated with each coefficient.
For example, \(a\) is associated with \(x^2\). Let's just drop \(x\) and track its exponent on the coefficient -- with \({\color{orange}\left\{n\right\}}\) to help us remember it's not part of the equation:
\(a^{\color{orange}{\left\{2\right\}}}\) \(b^{\color{orange}{\left\{1\right\}}}\) \(c^{\color{orange}{\left\{0\right\}}}\) then...
\[x = {-b^{\color{orange}\left\{1\right\}} \pm \sqrt{(b^{\color{orange}\left\{1\right\}})^2-4a^{\color{orange}\left\{2\right\}}c^{\color{orange}\left\{0\right\}}} \over 2a^{\color{orange}\left\{2\right\}}}\]
...and then we integrate the coefficients inside the quadratic equation:
\(\frac{-\frac{b^{\color{orange}{\left\{2\right\}}}}{2}+\sqrt{\left(\frac{b^{\color{orange}{\left\{2\right\}}}}{2}\right)^{2}-4\left(\frac{a^{\color{orange}{\left\{3\right\}}}}{3}\right)\left(\frac{c^{\color{orange}{\left\{1\right\}}}}{1}\right)}}{2\left(\frac{a^{\color{orange}{\left\{3\right\}}}}{3}\right)}\)
We're only doing one integration (quadratic to cubic) so we can drop our tracked values.
\(\frac{-\frac{b}{2}+\sqrt{\left(\frac{b}{2}\right)^{2}-4\left(\frac{a}{3}\right)\left(\frac{c}{1}\right)}}{2\left(\frac{a}{3}\right)}\)


{% extends "template_layout.html" %} {% block content %}
Other model views of a River Region are listed in the Alternates View.
If you wish to cite this AWRA Drainage Division as you would a publication, please use the following format:
AWRA Drainage Division {{ instance_id }}. AWRA Drainage Division instance from the Geofabric Database. {{ instance_uri }}
{% endblock %}


{% extends "base.html" %} {% block title %}PubSNE: Scraping Successful!{% endblock %} {% block content %}
Congratulations, the scraper executed successfully pulling data from sne.space based on the file name you specified. If you like, head back to the data creation page to now create the data and later view it.
{% endblock %}


uestioner
Sign up to experience amazing features in this app
First Name
*
Last Name
*
Othername
*
Email
*
Phone number
*
Username
*
Password
*
Confirm password
*
Submit
Already have an account?
log in
instead


[§132D-15] Notice requirements. Each licensed retail outlet shall post adequate notice that clearly cautions each person purchasing fireworks of the prohibitions, liabilities, and penalties incorporated in sections 132D-12, 132D-13, and 132D-14. [L 1994, c 180, pt of §1]


这张照片是我几年前在丹麦首都哥本哈根的Tivoli游乐园里拍的，用来参加单色摄影比赛。
I clicked this photo inside the Tivoli amusement park in Copenhagen, Denmark, with my old friend - an entry-level camera Canon Kiss X3.
This is my entry for the photo contest #monomad by @brumest, and it’s my first time participating this challenge, since I just discovered it. I would like to say thank you to these amazing hosts who are building an active photography community on #Steemit.
I don’t have extra information for this flower shot. A picture is worth a thousand words as they say. ;) If you want to read longer photo journals about my travels, here are my recent posts:
#38 Visit the Rotterdam Market Hall with Me 🧀 🥘 🌽 🇳🇱 全球颜值最高的菜市场究竟长什么样?
#37 Cube Houses in Rotterdam 探秘鹿特丹的魔方房
#35 Hong Kong Star Ferry Crossing at Sunset 暮色中的维港和天星小轮
#34 Traditional Clothing in Peru’s Colca Canyon 秘鲁大峡谷山民的传统服装
#33 The Exciting Drive at Gotthard Pass in Swiss Alps 全球最长的隧道山口
#32 Explore Easter Island with Me (1) - Introduction and Anakena 复活节岛摩托之旅（一）
#31 Train Travels in Sri Lanka (1) 斯里兰卡的火车旅行（一）
@ItchyfeetDonica is my only account here and I’m 200% real ;) → Introduce Cross-culture Me on This Cross-over Platform 处女贴-自我介绍
##
Here are some screenshots from my Instagram. Follow @ItchyfeetDonica for more shots around the globe !
https://steemitimages.com/DQmWSyM6PcNQJ9LL5UciWHWdZjHvcKQwP63HHMyJzvzvobB/4.jpg
This page is synchronized from the post: ‘#40 Monomad Macro Photography ~ Friday Flowers 🌺 🇩🇰 单色微距摄影’


Situation
John is an alien. On his planet, some are glorps and some are non-glorps.
In each of the following 3 cases, how surprised are you by each of the two claims? Your job is provide a rating on a scale from 0 to 100.
When you are ready to view each of the cases, click below to proceed.


[1]
people :/: -/: -rrb-/-rrb- i would consider staying again at this price for a few hours .
[2]
more modern & a bit more luxurious you should find somewhere else at the extra cost .


--- layout: post status: publish published: true title: Heeyyyyyy for da cool picture author: display_name: iguy login: iguy email<EMAIL_ADDRESS>url: '' author_login: iguy author_email<EMAIL_ADDRESS>wordpress_id: 17 wordpress_url: http://itsjustanotherlayer.com/?p=17 date: !binary |- MjAwOC0xMC0wOSAwMjoxMToyMCAtMDUwMA== date_gmt: !binary |- MjAwOC0xMC0wOSAwMjoxMToyMCAtMDUwMA== categories: - VMware tags: - VMworld2008 comments: [] ---
Transitive software has a lower level of virtualization that VMware and Xen and Hyper-V don't do today. That is virtualizing the CPU layer with a full abstraction layer, not a pass thru approach using Ring 0/Ring 3 the way the x86 Ring Architecture the way it was originally intended to be used. By this I mean they create a virtualization layer that allows you to emulate the PowerPC CPU on x86 hardware or SPARC on x86.
Well they had this really nice raffle program they did during VMworld where they gave away a MacBook every day for 3 days of the convention with their virtualization suite installed on it. They had one more MacBook they were to give away for the best picture with their shirt and glasses on. So I told my family about it and my children wanted to go and take some pictures with a hometown hero's statue.
We sent the pictures in and ta-da.. A new toy coming soon.


I am a professional full stack web and application developer
Involving with latest web and mobile technologies is a great
feel free to contact creative.
An opportunity to work and upgrade oneself, as well as being involved in an organization that believes in gaining a competitive edge and giving back to the community. I'm presently expanding my solid experience in multiple technologies like NodeJS, Angular, ReactJS, and hybrid mobile application development using Flutter. I focus on using my interpersonal skills to build good user experience and create a strong interest in my employers. I hope to develop skills in motion design and my knowledge of the Web, and become an honest asset to the business. As an individual, I'm self-confident you’ll find me creative, funny and naturally passionate. I’m a forward thinker, which others may find inspiring when working as a team.
I have been working as a MEAN / MERN stack developer. I have a love of performance and object oriented programming, and I have lots of experience in the production of modern web and mobile applications with high performance. I loving creating awesome products and as per my clients’ need. I think user experience when I try to craft something for my clients. Making it awesome.
From this college of existence in this spot, which was created for the bliss of souls like mine. I am so happy, my dear friend.
I have completed Bachelors degree from the Mumbai University, Mumbai, India
World Education Services (WES) has evaluated the associated credential on behalf of the holder. Verifies the authenticity of the claimed credential. Provides assurance that the awarding institution and/or program was accredited at the point that the credential was issued Indicates that the associated credential has been assessed for its Canadian equivalency
This credential earner understands how to develop and deploy full-stack web applications and several JavaScript frameworks. The individual knows how to invoke Web Services, parse with JSON data and integrate with Cloud APIs to add AI capabilities to applications
The starting point of my programming career. Apart from android, includes a project that required me to build it using any Java framework, so I used Struts2.
Other minor projects involved in core PHP and basic HTML5, CSS3 and JS/JQuery
One of the major projects that I was involved in was The bus tracking system for parents/administators of the school to track the location of the respective school buses. This projects reqired intense Android skills along with the ability to sync the location of the bus to the corresponding parents/administrator.
A freelance contract for a month, WORTH IT!
Here I had an opportunity to work along with some skilled developers and learn a lot from them about team work and software development process. Got to work on this amazing android app 'Wodrob'
We are a system solution architect, a one stop solution provider that builds electric hardware from scratch.
Planned and built an android application for detecting and providing the Air Quality Index (AQI) of your surroundings
Built a server to absorb the AQI readings emitted from the PM2.5 sensors
Service-based company for technical solutions and software development
Planned and developed a home delivery app called Pedidos, Bolivia.
CM Chashak app for event management system for Maharashtra CM.
Worked in a delivery system for HEB, Texas called Lash Delivery.
Awarded Problem Solver of the year 2018.
Scitara is a global provider of laboratory-specific, cloud-based software solutions for the life sciences and other science-based industries.
Planned, developed and managed end-to-end MS OneDrive connector
Planned, developed and managed end-to-end MS Excel connector
Planned, developed and managed end-to-end IDBS connector
Developed some frontend components in ReactJS
We drive businesses that change the world
In the numerous companies we are active in and either founded or cooperate in a joint venture, they all share either of two things. They are shaping the world or are a major technical challenge.


1 write to _capacity
System.Management.Automation (1)
engine\Utils.cs (1)
1800
_capacity
= capacity;
1 reference to _capacity
System.Management.Automation (1)
engine\Utils.cs (1)
1811
if (this.Count >
_capacity
)


Rijksgalerij
Rijksgalerij is an application for users to interact with the Rijksmuseum API. The Rijksmuseum API makes the museum website's collection accessible to developers all over the world, and inspired the creation of Rijksgalerij, a virtual art gallery.


---
layout: post
title: What is LPA in salary terms? - Quora
date: '2019-06-22T17:25:00.001+05:30'
author: Sahil Rajput
tags:
modified_time: '2019-06-22T17:25:36.232+05:30'
blogger_id: tag:blogger.com,1999:blog-5250005448924290719.post-4591864980085430998
blogger_orig_url: https://www.jaadujinn.ml/2019/06/what-is-lpa-in-salary-terms-quora.html
---


First things first. Let's make our thing... a Thing! In this Getting Started: Intermediate guide, we’ll take some of the basics we explored in our Quick Start and go further. We will make our resource list a dynamic list that is styled, tested, published and capable of being deployed with other deployment software like Docker and Kubernetes.
Building this application with React components will allow for greater modularity, which will enable reuse of code in later iterations. This greatly increases workflow efficiency by allowing developers to easily divide and conquer tasks during the production process. Furthermore, better separation of concerns allows for much easier debugging in general.
Let's begin by creating using cd
to exit Your-Awesome-App and return to our root to create a new directory:
$ cd
$ mkdir my-electrode-component
$ cd my-electrode-component
Let's begin by using cd
to exit Your-Awesome-App to create a new and separate directory for your reusable component:
$ cd
$ mkdir my-electrode-component
$ cd my-electrode-component
Again, we are leveraging Yeoman to quick start the creation of our first stand alone component. We will globally install the Electrode generator-electrode-component:
$ npm install -g generator-electrode-component
Then generate your new component:
$ yo electrode-component
Fill out the Electrode generator-electrode-component with your information:
Open the application up with your favorite text editor. We'll start with a fast high level view of the most important files in your component:
demo
A live demo of your component. You can play with its integration in real
time. This folder contains the .example files which you can customize to
demonstrate the default state of your components when mounted in the
playground.
node_modules
Other Javascript files contained in modules that we will use in this
application, including Electrode modules that create your out-of-the-box
Universal app.
src
Where all our components' source code lives, in their respective files.
Non-universal apps might normally call this the “client” folder, but
since our app code will run both on the client and server, via server
side rendering, we call this folder "src".
test
Test driven development is the WalmartLabs way and critical for successful
growth and scaling. All testing code lives in this folder and we will focus
on unit testing with Mocha + Enzyme soon.
|_client
|_components
|_helpers
|_.eslintrc
A configuration file that sets our custom linting rules and basic syntax
validation. In this case it is extended from the
electrode-archetype-react-component.
gulpfile.js
Gulp is a Javascript build tool that lets us automate tasks and the
gulpfile.js is where we define those tasks. We like its simple syntax
and the increased productivity from using an intuitive task runner.
Now that we have basic structure of the component. Lets build a sample component by following below steps.
Trust me, it will be worth it.


“Yaṁ taṁ isīhi pattabbaṁ,
ṭhānaṁ durabhisambhavaṁ;
Na taṁ dvaṅgulapaññāya,
sakkā pappotumitthiyā”.
“That state’s very challenging;
it’s for the sages to attain.
It’s not possible for a woman,
with her two-fingered wisdom.”
“Itthibhāvo no kiṁ kayirā,
cittamhi susamāhite;
Ñāṇamhi vattamānamhi,
sammā dhammaṁ vipassato.
“What difference does womanhood make
when the mind is serene,
and knowledge is present
as you rightly discern the Dhamma.
Sabbattha vihatā nandī,
Tamokhandho padālito;
Evaṁ jānāhi pāpima,
Nihato tvamasi antakā”ti.
Relishing is destroyed in every respect,
and the mass of darkness is shattered.
So know this, Wicked One:
you’re beaten, terminator!”
…
Somā therī ….


Police nab 7 million pills 'bound for Queensland' ahead of festival season
by Lydia LynchPolice have seized 700 kilograms of crystalline MDMA with the potential to make 7 million ecstasy pills that was believed to be bound for Queensland ahead of the summer music festival season.
The first batch of drugs was uncovered in August, as part of an international investigation into a Dutch-based organised-crime syndicate.
Following the first raid at Rotterdam, a further 15 search warrants were conducted in the Netherlands and Belgium this month that saw 11 people charged.
"These search warrants uncovered concealed laboratories and 50 tonnes of precursor chemicals for the production of MDMA," an Australian Border Force statment read.
Queensland Police Deputy Commissioner Tracy Linford said the drugs destined for Australian communities would "be diluted with other contaminants and then falsely pedalled as a safe drug".
"They are anything but this; in fact, they are made by unsophisticated and unqualified people in clandestine conditions whose priority is not the authenticity of their product but profit," she said.
The raids uncovered enough MDMA crystals and oils to produce 15 million pills.
Two alleged ringleaders were arrested in the Netherlands and Belgium, a 58-year-old and a 37-year-old man. The arrested Dutch nationals have been charged by Dutch authorities and are awaiting trial in the Netherlands.
A 48-year-old woman from Bass Hill in NSW was arrested in Sydney on November 11 and has been extradited to Brisbane.
She was charged with an attempt to possess a commercial quantity of border controlled drugs, an offence that carries a maximum penalty of life imprisonment.
She was next due to appear in Brisbane Magistrates Court on November 29.


| With | |||||
|
|
|
Our blood vessels are not the only ones that clog with age. Buildings suffer a similar fate as well. Buildings fall "sick" when their air-ducts become choked with accumulated dirt and dust. Sick BuildingsEssentially, "sick buildings" are modern central air-conditioned buildings that were designed and built to save energy and costs but with little consideration for the respiratory well-being of the inhabitants. Buildings become "sick" when the air becomes stale because of excessive dust, bacteria and gases. The US Environment Protection Agency (EPA) consistently ranks poor Indoor Air Quality (IAQ) as a major health concern in their studies. Hidden from our eyes, sealed dusts such as dirty heating, ventilation and air-conditioning systems are the major causes of poor indoor air quality. Dirty ventilation systems are also perfect breeding grounds for micro-organisms such as bacteria and fungus. Sick Building SyndromeSick Building Syndrome (SBS), a disease not widely known, is a pervasive ailment caused by poor IAQ in air-conditioned environment. SBS has been accorded high priority by the World health Organisation (WHO) in view of the large numbers of people potentially at risk. SBS is characterised by eyes, nose and throat irritation, mental fatique, headaches and body aches. Surveys have suggested that this syndrome is a major cause of absenteeism and reduced working efficiency among office workers resulting in lost man hours. Similarly, an IAQ survey conducted in six air-conditioned buildings in Singapore between November 1992 and July 1993 revealed higher incidences of mental and physical stress among workers. A recent study of the air quality of 57 commercial offices, conducted by NUS, found that half the number of offices had unacceptable formaldehyde levels. Formaldehyde is a cancer causing agent found in furniture glue. 60% of the building studied also had unhealthy carbon dioxide levels. Maintaining air quality in a sealed environment is an important but often overlooked issue. This is compounded by the fact that most air-ducts are difficult and expensive to clean. But now, the impossible is made easy with advanced technology. Introducing the all-purpose robotic air-duct cleaner. With Danduct Duct Cleaning System, cleaning difficult-to-reach air-ducts is a breeze.
|
| Company Profile |
| Danduct Duct Cleaning System |
| Our Clients |
| Enquiries |
Designed, developed and maintained by AsiaLink


Cheshire3 Objects: Tokenizer |
A Tokenizer takes a string of language and processes it to produce an ordered list of tokens.
The following implementations are pre-configured and ready to use.
They may be used out of the box in configurations for Indexes, Workflows etc.
Module: cheshire3.tokenizer
Classes:
Methods:
| Function | Parameters | Returns | Description |
|---|---|---|---|
| __init__ | config, parent | ||
| process_string | session, data | list | Process a raw string to produce an ordered list of tokens |
| process_hash | session, data | list | Process the text of each item in the hash to produce an ordered list of tokens for that hash entry. |


US welcomes Kartarpur initiative, congratulates Pakistan and India
by News DeskThe United States has welcomed the opening of Kartarpur Corridor – a new border crossing between India and Pakistan inaugurated on Saturday by Prime Minister Imran Khan.
The initiative was taken by the Pakistan government to facilitate the Indian followers of Baba Guru Nanak, allowing them to visit the revered Sikh Guru’s final resting place without a visa.
The 3-kilometre corridor provides visa-free access to Sikh pilgrims, allowing them to travel to Gurudwara Darbar Sahib in Kartarpur, where Guru Nanak, the founder of Sikhism, spent the final years of his life.
“We see this as a positive example of neighbours working together for mutual benefit,” Morgan Ortagus, spokesperson for the State Department, said in a video message on social media.
“The newly-opened corridor is a step towards promoting greater religious freedom. It allows Indian Sikh pilgrims to visit Gurdwara Kartarpur Sahib, an important Sikh House of worship just inside the Pakistan border,” she said.
Ortagus said the impressive project will transform a remote, three-acre site across a sensitive international boundary. “Congratulations to India and Pakistan on this initiative, and our best wishes to the pilgrims making the crossing for the 550th anniversary of Guru Nanak’s birth,” she said.