wash
helps you deal with all your remote or cloud-native infrastructure using the UNIX-y patterns and tools you already know and love.
Introduction
wash
aims to:
- make navigating stuff like servers, containers, or APIs as easy as navigating a local filesystem
- make scripting across your new-fangled infrastructure as easy as writing a local shell script
- render into text that which can be rendered into text (cuz text is a universal interface!) for easy viewing, editing, and UNIXy slicing-and-dicing
- build equivalents of basic, UNIX tools to support the above goals (but reuse existing ones if they work!)
- let you easily extend the system in whatever language you want
- be extremely simple to get up-and-running; if it takes you more than a few minutes, let us know!
Exploring, understanding, and inspecting modern infrastructure should be simple and straightforward. Whether it’s containers, VMs, network devices, IoT stuff, or anything in between…they all have different ways of enumerating what you have, getting a stream of output, running commands, etc. Every vendor has its own tools and APIs that expose these features, each one different, each one bespoke. Thus, they are difficult to compose together to solve higher-level problems. And that’s no fun at all!
UNIX’s philosophy and abstractions have worked for decades. They’re pretty good, and more importantly, they’re familiar to millions of people. wash
intends to apply those same philosophies and abstractions to modern, distributed infrastructure.
Getting started
wash
is distributed as a single binary, and the only prerequisite is libfuse
. Thus, getting going is pretty simple:
- Download the
wash
binary for your platform - Install
libfuse
, if you haven’t already- E.g. on MacOS using homebrew:
brew cask install osxfuse
- E.g. on CentOS:
yum install fuse fuse-libs
- E.g. on Ubuntu:
apt-get install fuse
- E.g. on MacOS using homebrew:
- Start the server
./wash server wash-root-dir
At this point, if you haven’t already, you should fire up some resources that wash
can actually introspect. Otherwise, as Han Solo would say, “this is going to be a real short trip”. So fire up some Docker containers, create some EC2 instances, toss some files into S3, launch a Kubernetes pod, etc.
For more of a guided tour that includes spinning up some resources wash
can talk to, check out our docker compose
example.
Once the server is up, you can use vanilla ls
, cd
, etc. to explore wash-root-dir
. You can then start experimenting with wash
subcommands, like wash ls
and wash tail
, to navigate that filesystem in a more wash
-optimized way.
When you’re done, make sure there are no processes still using wash-root-dir
, and you can just Ctrl-C
the server.
Current features
wash
does a lot already, with more to come:
- presents a FUSE filesystem hierarchy for all of your resources, letting you navigate them in normal, filesystem-y ways
- preserves history of all executed commands, facilitating debugging
- serves up an HTTP API for everything
- caches information, for better performance
We’ve implemented a number of handy wash
subcommands:
wash ls
- a version ofls
that uses our API to enhance directory listings withwash
-specific info- e.g. show you what primitives are supported for each resource
wash meta
- emits a resource’s metadata to standard outwash exec
- uses theexec
primitive to let you invoke commands against resourceswash find
- find resources using powerful selection predicates (WIP)wash tail -f
- follow updates to resources that support thestream
primitive as well as normal fileswash ps
- lists running processes on indicated compute instances that support theexec
primitivewash history
- lists all activity throughwash
;wash history <id>
can be used to view logs for a specific activitywash clear
- clears cached data for a subhierarchy rooted at the supplied path sowash
will re-request it
Core plugins (and we’re adding more all the time):
docker
- containers and volumes
- found from the local socket or via
DOCKER
environment variables - supports streaming, and remote command execution
kubernetes
- pods, containers, and persistent volume claims
- uses contexts from
~/.kube/config
- supports streaming, and remote command execution
- supports listing of volume contents
aws
- EC2 and S3
- uses
AWS_SHARED_CREDENTIALS_FILE
environment variable or$HOME/.aws/credentials
andAWS_CONFIG_FILE
environment variable or$HOME/.aws/config
to find profiles and configure the SDK - IAM roles are supported when configured as described here. Note that currently
region
will also need to be specified with the profile. - if using MFA,
wash
will prompt for it on standard input. Credentials are valid for 1 hour. They are cached underwash/aws-credentials
in your user cache directory so they can be re-used across server restarts.wash
may have to re-prompt for a new MFA token in response to navigating thewash
environment to authorize a new session. - supports streaming, and remote command execution via
ssh
or AWS-SSM - supports full metadata for S3 content
wash
supports the following primitives for resources it knows about, where appropriate:
list
- lets you ask any resource what’s contained inside of it, and what primitives it supports.- e.g. listing a Kubernetes pod returns its constituent containers
read
- lets you read the contents of a given resource- e.g. represent an EC2 instance’s console output as a regular file you can open in a regular editor
stream
- gives you streaming-read access to a resource- e.g. to let you follow a container’s output as its running
exec
- lets you execute a command against a resource- e.g. run a shell command inside a container, or on an EC2 vm, or on a routerOS device, etc.
- these are all available programmatically via the API, or on the CLI via
wash
subcommands
wash
allows for easy creation of out-of-process plugins using any language you want, frombash
togo
or anything in-between!wash
handles the plugin lifecycle. it invokes your plugin with a certain calling convention; all you have to do is supply the business logic- users interact with external plugins the exact same way as core plugins; they are first-class citizens
For more information about future direction, see our Roadmap!
Contributing
There are tons of ways to get involved with wash
, whether or not you’re a programmer!
Come and hang out with us on Slack! Feel free to ask questions, answer questions from other folks, or just lurk. Come and talk to us about things about modern infra you find complex or infuriating, or what your favorite hacking movie scenes are, or the best monospaced font.
Have something cool that you’d like connect up to
wash
? We’d love to hear your ideas, and help you figure out how to do it!  Design some
wash
-related artwork or a logo, and we’ll see about putting it into the rotation for the site!Are you an old skool command-line gearhead with, like, opinions about how things should work on a command line? We’d love your help figuring out how the shell experience for
wash
should work. How can our unixywash
subcommands behave better? Are there new subcommands we should build? What colors and formatting should we use forwash ls
? If we implementedwash fortune
, what quotes should be in there?!Did you script something cool that usees
wash
under the hood? Please let us know, and how we can help!Can you sling HTML, or Markdown? This site is built using Hugo, and the source is in our github repo. We’d love help documenting stuff!
Did you give a talk or presentation on
wash
? Give us the link, so we can help promote it!
Come check us out on github, and in particular check out the contribution guidelines and the code of conduct.


Toggle navigation
Chris Cioffi
About
Resume
Portfolio
Chris Cioffi. reporter.


Suppose our task is to factor an integer \(N\) with \(d\) decimal digits. The brute force algorithm goes through all primes \(p\) up to \(\sqrt{N}\) and checks whether \(p\) divides \(N\). In the worst case, this would take time roughly \(\sqrt{N}\) which is exponential in the number of digits \(d\). A more efficient algorithm known as the quadratic sieve attempts to construct integers \(a,b\) such that \(a^2-b^2\) is a multiple of \(N\). Once such \(a,b\) are found, one checks whether \(a\pm b\) have common factors with \(N\). The quadratic sieve method has asymptotic runtime exponential in \(\sqrt{d}\). The most efficient classical factoring algorithm known as general number field sieve achieves an asymptotic runtime exponential in \(d^{1/3}\). The exponential runtime scaling limits applicability of the classical factoring algorithms to numbers with a few hundred digits with the world record being \(d=232\) (which took roughly 2,000 CPU years). In contrast, Shor’s factoring algorithm has runtime polynomial in \(d\). The version of the algorithm described below due to Alexey Kitaev requires roughly \(10d\) qubits and has runtime roughly \(d^3\).
** **
It has been known to mathematicians since 1970’s that factoring becomes easy if one can solve another hard problem: find a period of the modular exponential function. The period finding problem is defined as follows. Given integers \(N\) and \(a\), find the smallest positive integer \(r\) such that \(a^r-1\) is a multiple of \(N\). The number \(r\) is called the period of \(a\) modulo \(N\). Recall that in modular arithmetics the remainder of a division \(a/N\) is called the value of \(a\) modulo \(N\) and denoted \(a\pmod{N}\). For example, \(1=16=91 \pmod{15}\). Thus the period of \(a\) modulo \(N\) is the smallest positive integer \(r\) such that \(a^r=1{\pmod N}\). For example, suppose \(N=15\) and \(a=7\). Then
that is, \(7\) has period \(4\) modulo \(15\). Note that computing the higher powers of \(7\) would give rise to a periodic sequence: \(7^{x+4}=7^x\pmod{15}\) for any integer \(x\). Thus \(r=4\) is the period of the modular exponential function \(7^x\). In general the period finding problem is well-defined if \(N\) and \(a\) are co-prime (have no common factors).
Assume for a moment that we are given a period finding machine that takes as input co-prime integers \(N,a\) and outputs the period of \(a\) modulo \(N\). Let us show how to use the machine to find all prime factors of \(N\). For simplicity, assume that \(N\) has only two distinct prime factors:
First, pick a random integer \(a\) between \(2\) and \(N-1\) and compute the greatest common divisor gcd:math:(N,a). This can be done very efficiently using Euclid’s algorithm. If we are lucky, \(N\) and \(a\) have some common prime factors in which case gcd:math:(N,a) equals \(p_1\) or \(p_2\), so we are done. From now on let us assume that gcd:math:(N,a)=1, that is, \(N\) and \(a\) are co-prime. Let \(r\) be the period of \(a\) modulo \(N\) computed by the machine. Repeat the above steps with different random choices of \(a\) until \(r\) is even. It can be shown that a significant fraction of all integers \(a\) has even period, see Table 1 for examples, so on average one needs only a few repetitions. At this point we have found some pair \(r,a\) such that \(r\) is even and \(r\) is the smallest integer such that \(a^r-1\) is a multiple of \(N\). Let us use the identity
Suppose we are given co-prime integers \(a,N\). Our goal is compute the period of \(a\) modulo \(N\), that is, the smallest positive integer \(r\) such that \(a^r=1\pmod{N}\). The basic idea is to construct a unitary operator \(U_a\) that implements the modular multiplication function \(x\to ax \pmod{N}\). It can be shown that eigenvalues of \(U_a\) are closely related to the period of \(a\). Namely, each eigenvalue of \(U_a\) has a form \(e^{i\phi}\), where \(\phi=2\pi k/r\) for some integer \(k\). Furthermore, as we saw in the previous section, eigenvalues of certain unitary operators can be measured efficiently using the phase estimation algorithm. Unfortunately, inferring \(r\) from the measured eigenvalues of \(U_a\) is only possible if the eigenvalues are measured exactly (or with an exponentially small precision). For example, factoring a 1,000-digit number would require measuring the eigenvalue of \(U_a\) with a precision \(10^{-2000}\). Such accuracy cannot be achieved by a direct application of the phase estimation algorithm as this would require too large pointer system. Here comes the main trick: we shall estimate the eigenvalue of \(U_a\) by applying the phase estimation algorithm to a family of unitary operators \(U_b\) with \(b=a,a^2,a^4,a^8\) etc. We stop at \(b=a^{2^p}\) with \(2^p\approx N^2\). Why does it work? The first observation is that all operators \(U_b\) are integer powers of \(U_a\). Namely, if \(b=a^t\) then \(U_b=(U_a)^t\). This implies that the operators \(U_b\) have the same eigenvectors. In particular, eigenvalues of the entire family \(U_b\) can be measured simultaneously. Second, implementing \(U_b\) is as easy as implementing \(U_a\) - one just need to precompute the powers \(b=a,a^2,a^4,a^8,\ldots \pmod{N}\) by the repeated squaring method. Finally, even if the eigenvalues of \(U_b\) are measured with a poor precision (say 10%), each squaring of \(a\) reduces the error in the estimated eigenvalue of \(U_a\) by a factor \(1/2\). Indeed, consider an eigenvector of \(U_a\) with an eigenvalue \(e^{i\phi}\). If \(b=a^2\) then the eigenvalue of \(U_b\) is \(e^{2i\phi}\). If \(b=a^4\) then the eigenvalue of \(U_b\) is \(e^{4i\phi}\) etc. Thus we can estimate \(\phi,2\phi,4\phi,\ldots,2^p\phi\) with a constant precision (say 10%). We shall see that this is enough to estimate \(\phi\) with a precision roughly \(2^{-p}\). For example, one can achieve a precision \(10^{-2000}\) by a sequence of less than \(10^6\) lousy measurements of \(U_b\) with an error 10%. Furthermore, it can be shown that estimating a few randomly picked eigenvalues \(\phi=2\pi k/r\) with a precision less than \(1/N^2\) is enough to determine the period \(r\) exactly (the idea is to find the best rational approximation to the estimate of \(k/r\) using continued fractions).
In order to use the phase estimation algorithm we need to construct a quantum circuit implementing the modular multiplication operator. By analogy with classical algorithms that can link standard library functions, a quantum algorithm is allowed to call classical subroutines, for example a subroutine for computing the modular multiplication. Importantly, before such classical subroutines are incorporated into a quantum circuit, they must be transformed into a reversible form.More precisely, a quantum algorithm can call a classical subroutine only if it is compiled into a sequence of reversible logical gates such as CNOT or Toffoli gate (in particular, the number of input and output wires in each gate must be the same). The subroutine is allowed to use a scratch memory similar to local variables used by the standard library functions. However, once the subroutine is completed, the scratch memory must be totally clean (say, all zeros). The reason is that a quantum algorithm operates on coherent superpositions of different classical states. Leaving information about the inputs or the outputs in the scratch memory could potentially destroy quantum coherence and prevent the algorithm from seeing interference between different states. Since the notion of reversible classical circuits plays an important role in the Shor’s algorithm and many other quantum algorithms, below we briefly discuss methods for constructing such circuits.
At this point the circuit is reversible as a whole, but its individual gates are still irreversible. The next step is to transform each gate into a reversible form. Consider as an example the AND gate with input wires \(a,b\) and output wire \(c\) such that \(c=a\wedge b\). Let us define its reversible version R-AND. One of the output wires of R-AND must carry the output bit \(c\) of the standard AND gate. To avoid losing information, R-AND must have at least two other output wires (note that in the case \(c=0\) there are three possible input strings: \(ab=00,01,10\)). The simplest version of R-AND has three input wires and three output wires as shown below.
Here \(d\) is a dummy input wire and \(\oplus\) denotes XOR operation (addition modulo two). The gate expects to receive inputs with \(d=0\) in which case \(c=a\wedge b\). If \(d=1\) then the output data bit if flipped. Note that all inputs of R-AND can be computed from its outputs since \(d=c\oplus (a\wedge b)\). Thus R-AND indeed acts reversibly (technically, R-AND realizes a permutation on the set of 3-bit strings). Note also that R-AND coincides with the Toffoli gate. The same construction can be applied to any other gate with two input wires and one output wire. Namely, if a gate F computes some Boolean function \(c=F(a,b)\) then its reversible version R-F would map inputs \(a,b,d\) to outputs \(a,b,c\) where \(c=d\oplus F(a,b)\), see below. Note that applying R-F twice implements the identity gate, that is, R-F coincides with its own inverse.
Suppose the original circuit is described by a sequence of \(L\) gates \(F_1,\ldots,F_L\). Replace each gate \(F_i\) by its reversible version \(G_i=R\)-\(F_i\) constructed above. We shall connect the dummy input wire of \(G_i\) and its output wire \(c\) to the \(i\)-th bit of the scratch memory such that the gate always receives inputs with \(d=0\). The new circuit has \(n+L\) input and \(n+L\) output wires and is composed from reversible \(3\)-bit gates. The final state generated by the circuit can be written as \(x,g(x),f(x)\), where \(f(x)\) is the final answer stored in the output register somewhere within the scratch memory and \(g(x)\) represents ``garbage” (intermediate data). Here we assumed that the scratch memory is initially clean (all zeros). Thus we have constructed a reversible circuit that maps \(x,0^L\) to \(x,g(x),f(x)\). The final step is to get rid of the garbage \(g(x)\) without erasing any information (which would render the circuit irreversible). A solution is to copy the answer \(f(x)\) to a clean ancillary register of \(m\) bits and then ``uncompute” \(f(x)\) by applying the circuit backwards in time. Below we sketch how this works.
Ignoring for simplicity all ancillary bits that are initialized and returned in the zero state, we obtained a reversible circuit on \(n+m\) bits that maps input strings \(x,y\) to output strings \(x,y\oplus f(x)\). In the special case when the \(f(x)\) is invertible one can use similar tricks to construct a reversible circuit that maps input strings \(x\) to output strings \(f(x)\). In practice, one would never use the method described above since it requires too large scratch memory. Several optimization techniques for constructing reversible circuits have been proposed (such as uncomputing partial results more often and reusing scratch memory bits).
Suppose now that \(f(x)=ax\pmod{N}\) is the modular multiplication function. Let \(n\) be the number of binary digits in \(N\). Using \(n\)-bit strings to represent integers modulo \(N\), one can implement \(f(x)\) by a classical circuit \(U_a\) composed of 3-bit reversible gates with \(n\) input and output wires, as described above. The circuit \(U_a\) may also use ancillary bits that are initialized and returned in the 0 state. The state-of-the-art implementation would require roughly \(n^2\) gates and roughly \(2n\) ancillary bits. For simplicity, below we shall often ignore the ancillary bits. Let us convert \(U_a\) to a quantum circuit by replacing each classical gate with its quantum counterpart. This is possible because, by construction, each gate of \(U_a\) implements some permutation on the set of input bit strings \(000,001,\ldots,111\). The corresponding quantum gate implements the same permutation on the set of basis states \(|000\rangle,|001\rangle,\ldots,|111\rangle\). We obtained a quantum circuit \(U_a\) acting on a register of \(n\) qubits that maps a basis state \(|x\rangle\) to \(|f(x)\rangle\). An example for \(f(x)=7x\pmod{15}\) is shown below. Period finding algorithm requires modular multiplication circuits \(U_b\) for \(b=a,a^2,a^4,\ldots,a^{2^p} \pmod{N}\), where \(2^p\approx N^2\).
This quantum circuit implements \(U_7\) (see Markov and Saeedi 2012)
Let \(U=U_a\) be the modular multiplication operator. At this point we know how to construct a quantum circuit implementing \(U\) as well as repeated squares of \(U\) such as \(U^2,U^4,U^8\), etc. We also know that eigenvalues of \(U\) reveal information about the period of \(a\) modulo \(N\). The final step is to measure the eigenvalues. For that we shall need a controlled version of \(U\). A controlled unitary operator is a quantum analogue of classical conditional statements such as if-then-else. We already saw examples of controlled quantum gatesearlier in the tutorial. In general, suppose \(U\) is a quantum circuit acting on \(n\) qubits. A controlled version of \(U\) is a unitary operator acting on a larger system control+target, where control is a single qubit and target is a register of \(n\) qubits. Controlled-\(U\) applies \(U\) to the target register if the control qubit is \(|1\rangle\) state and does nothing if the control qubit is \(|0\rangle\).
Below we focus on what happens with the control qubit only (keeping in mind that it is part of the larger system control+target). We shall measure the eigenvalue \(e^{i\phi}\) using a pair of phase estimation circuits shown below.
We have not explained yet how to initialize the target register in the eigenvector of \(U\). Fortunately, all eigenvectors are equally good for our purposes: we are not interested in any particular eigenvalue but rather want to measure a random eigenvalue drawn from the uniform distribution. Thus one can initialize the target register in an arbitrary state that has equal weight on each eigenvector of \(U\). For example, one can choose the initial state as the basis vector \(|0\ldots01\rangle\) encoding the integer \(x=1\).


Metasploit
PowerSploit
[Pyrasite](https://github.com/lmacken/pyrasite) Inject code into running python processes
Priv Esc-ish
https://securityxploded.com/remote-dll-injector.php
https://github.com/fdiskyou/injectAllTheThings
https://github.com/clymb3r/PowerShell/tree/master/Invoke-ReflectivePEInjection
https://clymb3r.wordpress.com/2013/04/06/reflective-dll-injection-with-powershell/ | great primer
MSF: /post/windows/manage/reflective_dll_inject
PowerSploit: invoke-DLLInjection
[AtomBombing](https://github.com/BreakingMalwareResearch/atom-bombing)
[DoubleAgent](https://github.com/Cybellum/DoubleAgent)
[Syringe](https://github.com/securestate/syringe)


{% extends "base.html" %} {% block header_title %}Merging affiliation ID {{ affiliation.pk }}{% endblock %} {% block content %} {% load static %} {% load crispy_forms_tags %}
You're about to merge this affiliation:
This will reassign the following authorships to the new affiliaiton:
Choose the affiliaiton to reassign all these authorships to:


Toggle navigation
FAQ
SHOWROOM
SIGN IN
SIGN UP
personal Profile
Company Profile
ACT
NSW
NT
QLD
SA
VIC
WA
Comment
By creating an account, you agree our
terms.
Already a member? Sign in here.
Terms and Conditions
×
The content of your modal.


Pakistan won't back out from its friendship with China: Asad Umar | Pakistan - Geo.tv
by Web DeskISLAMABAD: Pakistan will not back out of its friendship with China, said Federal Minister for Planning, Development and Reforms Asad Umar, on Saturday.
The federal minister was addressing a press conference where he said that Pakistan will not be caught up in a fight between two other entities.
"A lot of conspiracies have taken place against CPEC," he said, referring to the energy corridor that links Pakistan's Gwadar port to th Xinjiang province in China.
Umar said that Pakistan was 'going from roads to industries' in the CPEC project.
China says it will never push Pakistan to repay debt on time
Chinese envoy Yao Jing on Friday rejected US Acting Assistant Secretary of State for South Asia Alice Wells’ recent statement regarding the China–Pakistan Economic Corridor (CPEC), saying that Beijing will never force Islamabad to make timely payments of its debt, unlike the International Monetary Fund (IMF).
"If Pakistan is in need, China would never ask it to repay its loans in time," while on the other hand the International Monetary Fund, mainly governed by the West, is strict in its repayment system," said Jing, the Chinese ambassador to Pakistan, during his address to the 5th CPEC Media Forum in Islamabad.
He asked where Washington was in 2013 when Pakistan faced a shortfall of energy, and why it did not invest in Pakistan’s power sector despite knowing the country’s dire need for electricity.


Download as an image
Colors
Scale
URL:
Use
Write the URL of a bitsy game here. Works best with raw github data. You can get some at the
bitsy archive
!


Policy should define daily security procedures.
Daily procedures should be clearly defined so that people can carry them out consistently and in a timely fashion.
Examine the information security documentation to make sure it includes clear definitions of daily operating procedures that cover all applicable PCI DSS requirements. The following procedures should be defined:
Document the procedures for each of the daily tasks that must be performed within your company and include them in your information security policy. The exact definitions should be specific to your company. Train the staff that corresponds to each procedure to ensure a consistent and timely execution of each task.


# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
In this notebook, you will create a recommendation engine using Spark and Elasticsearch. Using some movie rating data, you will train a collaborative filtering model in Spark and export the trained model to Elasticsearch. Once exported, you can test your recommendations by querying Elasticsearch and displaying the results.
The notebook assumes you have installed Elasticsearch, the Elasticsearch vector-scoring plugin, Apache Spark and the Elasticsearch Spark connector detailed in the setup steps.
Optional:
In order to display the images in the recommendation demo, you will need to access The Movie Database API. Please follow the instructions to get an API key.
You will work through the following steps
ml-latest-small.zip
file and unzip it to a suitable location on your system.The folder should contain a number of CSV files. We will be using the following files:
ratings.csv
- movie rating datalinks.csv
- external database ids for each moviemovies.csv
- movie title and genres# first import a few utility methods that we'll use later on
from IPython.display import Image, HTML, display
# check PySpark is running
spark
# change the path below to point to the correct base folder
PATH_TO_DATA = "/Users/nick/workspace/datasets/ml-latest-small"
# PATH_TO_DATA = "FOLDER/ml-latest-small"
Ratings
The ratings data consists of around 100,000 ratings given by users to movies. Each row of the DataFrame
consists of a userId
, movieId
and timestamp
for the event, together with the rating
given by the user to the movie
# load ratings data
ratings = spark.read.csv(PATH_TO_DATA + "/ratings.csv", header=True, inferSchema=True)
ratings.cache()
print("Number of ratings: %i" % ratings.count())
print("Sample of ratings:")
ratings.show(5)
You will see that the timestamp
field is a UNIX timestamp in seconds. Elasticsearch takes timestamps in milliseconds, so we'll use some DataFrame
operations to convert the timestamps into milliseconds.
ratings = ratings.select(
ratings.userId, ratings.movieId, ratings.rating, (ratings.timestamp.cast("long") * 1000).alias("timestamp"))
ratings.show(5)
Movies
The file movies.csv
contains the movieId
, title
and genres
for each movie. As you can see, the genres
field is a bit tricky to use, as the genres are in the form of one string delimited by the |
character: Adventure|Animation|Children|Comedy|Fantasy
.
# load raw data from CSV
raw_movies = spark.read.csv(PATH_TO_DATA + "/movies.csv", header=True, inferSchema=True)
print("Raw movie data:")
raw_movies.show(5, truncate=False)
Let's create a DataFrame
user-defined function (UDF) to extract this delimited string into a list of genres.
from pyspark.sql.functions import udf
from pyspark.sql.types import *
# define a UDF to convert the raw genres string to an array of genres and lowercase
extract_genres = udf(lambda x: x.lower().split("|"), ArrayType(StringType()))
# test it out
raw_movies.select("movieId", "title", extract_genres("genres").alias("genres")).show(5, False)
Ok, that looks better!
You may also notice that the movie titles contain the year of release. It would be useful to have that as a field in our search index for filtering results (say we want to filter our recommendations to include only more recent movies).
Let's create a UDF to extract the release year from the title using a Python regular expression.
import re
# define a UDF to extract the release year from the title, and return the new title and year in a struct type
def extract_year_fn(title):
result = re.search("\(\d{4}\)", title)
try:
if result:
group = result.group()
year = group[1:-1]
start_pos = result.start()
title = title[:start_pos-1]
return (title, year)
else:
return (title, 1970)
except:
print(title)
extract_year = udf(extract_year_fn,\
StructType([StructField("title", StringType(), True),\
StructField("release_date", StringType(), True)]))
# test out our function
s = "Jumanji (1995)"
extract_year_fn(s)
Ok the function works! Let's create a new DataFrame
with the cleaned-up titles, release dates and genres of our movies.
movies = raw_movies.select(
"movieId", extract_year("title").title.alias("title"),\
extract_year("title").release_date.alias("release_date"),\
extract_genres("genres").alias("genres"))
print("Cleaned movie data:")
movies.show(5, truncate=False)
Next, we will join the links.csv
data to movies
so that we have an id for The Movie Database corresponding to each movie. We can use this id to retrieve movie poster images when displaying our recommendations later.
link_data = spark.read.csv(PATH_TO_DATA + "/links.csv", header=True, inferSchema=True)
# join movies with links to get TMDB id
movie_data = movies.join(link_data, movies.movieId == link_data.movieId)\
.select(movies.movieId, movies.title, movies.release_date, movies.genres, link_data.tmdbId)
num_movies = movie_data.count()
print("Cleaned movie data with tmdbId links:")
movie_data.show(5, truncate=False)
Optional
Run the below two cells to test your access to TMDb API. You should see the Toy Story movie poster displayed inline.
To install the Python package run
pip install tmdbsimple
try:
import tmdbsimple as tmdb
#tmdb.API_KEY = 'YOUR_API_KEY'
tmdb.API_KEY = '6a1cf3f01fd70e17b5393ef1ba162909'
print("Successfully imported tmdbsimple!")
except ModuleNotFoundError:
print("Cannot import tmdbsimple, no movie posters will be displayed!")
# base URL for TMDB poster images
IMAGE_URL = 'https://image.tmdb.org/t/p/w500'
def display_poster(movie_id):
movie_info = tmdb.Movies(movie_id).info()
movie_poster_url = IMAGE_URL + movie_info['poster_path']
display(Image(movie_poster_url, width=200))
movie_id = movie_data.first().tmdbId
display_poster(movie_id)
Now that you have your dataset processed and prepared, you will load it into Elasticsearch.
Note: for the purposes of this demo notebook we have started with an existing example dataset and will load that into Elasticsearch. In practice you may write your event data as well as user and item metadata from your application directly into Elasticsearch.
First test that your Elasticsearch instance is running and you can connect to it using the Python Elasticsearch client.
from elasticsearch import Elasticsearch
# test your ES instance is running
es = Elasticsearch()
es.info(pretty=True)
Create an Elasticsearch index with mappings for users, movies and rating events
In Elasticsearch, an "index" is roughly similar to a "database", while a "document type" is roughly similar to a "table" in that database. The schema for a document type is called an index mapping.
While Elasticsearch supports dynamic mapping, it's advisable to specify the mapping explicitly at index creating if you know what your data looks like.
For the purposes of your recommendation engine, this is also necessary so that we can specify a custom analyzer for the field that will hold our recommendation "model" (that is, the factor vectors). This will ensure the vector-scoring plugin will work correctly.
References:
Optional
If you are re-running the notebook and have previously created the
demo
index in Elasticsearch, you should first delete it by un-commenting and running the next cell, before running the index creation cell that follows.
# es.indices.delete(index="demo")
Now you're ready to create your index.
create_index = {
"settings": {
"analysis": {
"analyzer": {
"payload_analyzer": {
"type": "custom",
"tokenizer":"whitespace",
"filter":"delimited_payload_filter"
}
}
}
},
"mappings": {
"ratings": {
"properties": {
"timestamp": {
"type": "date"
},
"userId": {
"type": "integer"
},
"movieId": {
"type": "integer"
},
"rating": {
"type": "double"
}
}
},
"users": {
"properties": {
"userId": {
"type": "integer"
},
"@model": {
"properties": {
"factor": {
"type": "text",
"term_vector": "with_positions_offsets_payloads",
"analyzer" : "payload_analyzer"
},
"version": {
"type": "keyword"
},
"timestamp": {
"type": "date"
}
}
}
}
},
"movies": {
"properties": {
"movieId": {
"type": "integer"
},
"tmdbId": {
"type": "keyword"
},
"genres": {
"type": "keyword"
},
# sdgfdfg
"release_date": {
"type": "date",
"format": "year"
},
"@model": {
"properties": {
"factor": {
"type": "text",
"term_vector": "with_positions_offsets_payloads",
"analyzer" : "payload_analyzer"
},
"version": {
"type": "keyword"
},
"timestamp": {
"type": "date"
}
}
}
}
}
}
}
# create index with the settings & mappings above
es.indices.create(index="demo", body=create_index)
Load Ratings and Movies DataFrames into Elasticsearch
First you will write the ratings data to Elasticsearch. Notice that you can simply use the Spark Elasticsearch connector to write a DataFrame
with the native Spark datasource API by specifying format("es")
# write ratings data
ratings.write.format("es").save("demo/ratings")
# check write went ok
print("Dataframe count: %d" % ratings.count())
print("ES index count: %d" % es.count(index="demo", doc_type="ratings")['count'])
# test things out by retrieving a few rating event documents from Elasticsearch
es.search(index="demo", doc_type="ratings", q="*", size=3)
Since you've indexed the rating event data into Elasticsearch, you can use all the capabilities of a search engine to query the data. For example, you could count the number of ratings events in a given date range using Elasticsearch's date math in a query string:
es.count(index="demo", doc_type="ratings", q="timestamp:[2016-01-01 TO 2016-02-01]")
Next write the movie metadata
# write movie data, specifying the DataFrame column to use as the id mapping
movie_data.write.format("es").option("es.mapping.id", "movieId").save("demo/movies")
# check load went ok
print("Movie DF count: %d" % movie_data.count())
print("ES index count: %d" % es.count(index="demo", doc_type="movies")['count'])
Again you can harness the power of search to query the movie metadata:
# test things out by searching for movies containing "matrix" in the title
es.search(index="demo", doc_type="movies", q="title:matrix", size=3)
[TBC]
ratings_from_es = spark.read.format("es").load("demo/ratings")
ratings_from_es.show(5)
from pyspark.ml.recommendation import ALS
from pyspark.sql.functions import col
als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", regParam=0.1, rank=10, seed=42)
model = als.fit(ratings_from_es)
model.userFactors.show(5)
model.itemFactors.show(5)
[TBC]
from pyspark.sql.types import *
from pyspark.sql.functions import udf, lit, current_timestamp, unix_timestamp
def convert_vector(x):
'''Convert a list or numpy array to delimited token filter format'''
return " ".join(["%s|%s" % (i, v) for i, v in enumerate(x)])
def reverse_convert(s):
'''Convert a delimited token filter format string back to list format'''
return [float(f.split("|")[1]) for f in s.split(" ")]
def vector_to_struct(x, version, ts):
'''Convert a vector to a SparkSQL Struct with string-format vector and version fields'''
return (convert_vector(x), version, ts)
vector_struct = udf(vector_to_struct, \
StructType([StructField("factor", StringType(), True), \
StructField("version", StringType(), True),\
StructField("timestamp", LongType(), True)]))
# test out the vector conversion function
test_vec = model.userFactors.select("features").first().features
print(test_vec)
print()
print(convert_vector(test_vec))
ver = model.uid
ts = unix_timestamp(current_timestamp())
movie_vectors = model.itemFactors.select("id", vector_struct("features", lit(ver), ts).alias("@model"))
movie_vectors.select("id"<EMAIL_ADDRESS><EMAIL_ADDRESS>"@model.timestamp").show(5)
user_vectors = model.userFactors.select("id", vector_struct("features", lit(ver), ts).alias("@model"))
user_vectors.select("id"<EMAIL_ADDRESS><EMAIL_ADDRESS>"@model.timestamp").show(5)
# write data to ES, use:
# - "id" as the column to map to ES movie id
# - "update" write mode for ES
# - "append" write mode for Spark
movie_vectors.write.format("es") \
.option("es.mapping.id", "id") \
.option("es.write.operation", "update") \
.save("demo/movies", mode="append")
user_vectors.write.format("es") \
.option("es.mapping.id", "id") \
.option("es.write.operation", "index") \
.save("demo/users", mode="append")
You can search for a movie to see if the model factor vector was written correctly. You should see a '@model': {'factor': '0|...
field in the returned movie document.
# search for a particular sci-fi movie
es.search(index="demo", doc_type="movies", q="star wars phantom menace", size=1)['hits']['hits'][0]
First, you will need to create a few utility functions for:
from IPython.display import Image, HTML, display
def get_poster_url(id):
"""Fetch movie poster image URL from TMDb API given a tmdbId"""
IMAGE_URL = 'https://image.tmdb.org/t/p/w500'
try:
import tmdbsimple as tmdb
movie = tmdb.Movies(id).info()
poster_url = IMAGE_URL + movie['poster_path'] if 'poster_path' in movie and movie['poster_path'] is not None else ""
return poster_url
except ModuleNotFoundError:
return "NA"
def fn_query(query_vec, q="*", cosine=False):
"""
Construct an Elasticsearch function score query.
The query takes as parameters:
- the field in the candidate document that contains the factor vector
- the query vector
- a flag indicating whether to use dot product or cosine similarity (normalized dot product) for scores
The query vector passed in will be the user factor vector (if generating recommended movies for a user)
or movie factor vector (if generating similar movies for a given movie)
"""
return {
"query": {
"function_score": {
"query" : {
"query_string": {
"query": q
}
},
"script_score": {
"script": {
"inline": "payload_vector_score",
"lang": "native",
"params": {
"field"<EMAIL_ADDRESS>"vector": query_vec,
"cosine" : cosine
}
}
},
"boost_mode": "replace"
}
}
}
def get_similar(the_id, q="*", num=10, index="demo", dt="movies"):
"""
Given a movie id, execute the recommendation function score query to find similar movies, ranked by cosine similarity
"""
response = es.get(index=index, doc_type=dt, id=the_id)
src = response['_source']
if '@model' in src and 'factor' in src['@model']:
raw_vec = src['@model']['factor']
# our script actually uses the list form for the query vector and handles conversion internally
query_vec = reverse_convert(raw_vec)
q = fn_query(query_vec, q=q, cosine=True)
results = es.search(index, dt, body=q)
hits = results['hits']['hits']
return src, hits[1:num+1]
def get_user_recs(the_id, q="*", num=10, index="demo"):
"""
Given a user id, execute the recommendation function score query to find top movies, ranked by predicted rating
"""
response = es.get(index=index, doc_type="users", id=the_id)
src = response['_source']
if '@model' in src and 'factor' in src['@model']:
raw_vec = src['@model']['factor']
# our script actually uses the list form for the query vector and handles conversion internally
query_vec = reverse_convert(raw_vec)
q = fn_query(query_vec, q=q, cosine=False)
results = es.search(index, "movies", body=q)
hits = results['hits']['hits']
return src, hits
def display_similar(the_id, q="*", num=10, index="demo", dt="movies"):
"""
Display query movie, together with similar movies and similarity scores, in a table
"""
movie, recs = get_similar(the_id, q, num, index, dt)
# display query
q_im_url = get_poster_url(movie['tmdbId'])
if q_im_url == "NA":
display(HTML("Cannot import tmdbsimple, no movie posters will be displayed!"))
display(HTML("
Get similar movies for:
"))
display(HTML("
%s
" % movie['title']))
if q_im_url != "NA":
display(Image(q_im_url, width=200))
display(HTML("
"))
display(HTML("
People who liked this movie also liked these:
"))
sim_html = "
"
i = 0
for rec in recs:
r_im_url = get_poster_url(rec['_source']['tmdbId'])
r_score = rec['_score']
r_title = rec['_source']['title']
sim_html += "
%s

%2.3f
	" % (r_title, r_im_url, r_score)
i += 1
if i % 5 == 0:
sim_html += "

"
sim_html += "

"
display(HTML(sim_html))
Now, you're ready to generate some recommendations.
To start, you can find movies that are similar to a given movie. This similarity score is computed from the model factor vectors for each movie. The ALS model we trained earlier is a collaborative filtering model, so the similarity between movie vectors is based on the rating co-occurrence of the movies. In other words, two movies that tend to be rated highly by a user will tend to be more similar.
Using this similarity we can show recommendations along the lines of people who liked this movie also liked these.
display_similar(2628, num=5)
So we see that people who like Star Wars also like other sci-fi movies.
Note since we are using a very small dataset, results while decent may not be as intuitive as those for the same model trained on the larger version of the MovieLens dataset.
Now you will see the power and flexibility that comes from using a search engine to generate recommendations. Elasticsearch allows you to tweak the results returned by the recommendation query using any standard search query or filter - from free text search through to filters based on time and geo-location (or any other piece of metadata you can think of).
For example, perhaps you want to remove any movies with "trek" in the title from the recommendations. You can do this by simply passing a valid Elasticsearch query string to the recommendation function.
display_similar(2628, num=5, q="title:(NOT trek)")
Or you may want to ensure that only valid children's movies are shown to young viewers.
display_similar(1, num=5, q="genres:children")
Feel free to check out the documentation for the Elasticsearch query string query and play around with the various queries you can construct by passing in a query string as q
in the recommendation function above!


I
am
T
Home
Welcome! I'm Talanda, better known as T.
Coming Soon
In the meantime... check out my:
CSUMB Portfolio
or
Grad Site


intervals
¶
Intervals : Core operations on intervals.
This modules contains methods for basic operations on intervals for conversions from logarithmic into linear spaces, a list of reference epimoric intervals and a method for setting the unit be used.
>>> set_unit("savart")
Unit is now set to : savart
>>> dias(3/2.)
176.09125905568123
>>> set_unit("cent")
Unit is now set to : cent
>>> dias(3/2.)
701.95500086538743
You can also get the closest epimoric reference interval to an interval in the current unit, and the difference. If we are using the savart units :
>>> intervalles.get_inter_ref(300)
('300.00', '2/1', '-', '1.03')
>>> intervalles.get_inter_ref(303)
('303.00', '2/1', '+', '1.97')
-
music22.diastema.intervals.
convert_ref
()[source]¶ Convert all the reference interval set by the global variable inter from ratios to a linear space.
-
music22.diastema.intervals.
dias
(y)[source]¶ Convert the given interval (as ratio) to the global chosen unit. Default is savart.
-
music22.diastema.intervals.
get_inter_ref
(x)[source]¶ Look for the closest epimoric interval
x : an interval in Savart/Centy : the closest interval from The Interval List Int()


The ias-align attribute has the form ias-align="[H_ALIGN] [V_ALIGN]?" where H_ALIGN is one of [start, center, end] and V_ALIGN is one of [top, center, bottom] and V_ALIGN is optional. The default is ias-align="start top". start and end depend on the layout of the containing element. The default and when nested under [dir="ltr"], start is on the left and end is on the right. When nested under [dir="rtl"], start is on the right and end is on the left.


In this project, we collected tweets on selected topics from states of New Jersey, California for 3 weeks using Python Tweepy. Weather data was obtained from Wunderground website. Using Pandas, we tried to see if the weather correlates with the activities or tweets posted about certain activities. The activites we chose to pursue were - working out, going out, eating, shopping. In California, due to same weather throughout the duration, there was no much correlation but New Jersey showed a promising correlation. We then tried to apply machine learning algorithms such as Linear Regression to predict the number of tweets on a particular activity based on weather. The project report, code are available in GitHub if you wish to dig deeper into the details.
| Course | Data Science |
| GitHub | https://github.com/anishgrandhi/Weather-and-People-Moods-Actions |
| Technologies | Python |
The App Store and Play store pages were collected for a period of 5 months. We scraped the information on ratings, app size from the web pages. We explored the data using exploratory techniques and applied machine learning algorithms to try and predict a rating in the future. This project enabled us to understand how machine learning algorithms work at a basic level. The codes and the project report are available on GitHub.
| Course | Data Science |
| GitHub | https://github.com/anishgrandhi/Pokemon-Go-Analytics |
| Technologies/Concepts | Python, Machine Learning |
A dataset on diabetic patients was obtained from UCI Machine Learning Repository. We performed data cleaning on the data to remove columns with missing data or fill gaps in data. Using Weka software, we tried a number of machine learning algorithms such as Random Forest, NaiveBayes, Linear Regression, K-means clustering to predict if a patient is readmitted into a hospital based on his health information.
| Course | Data Mining |
| Concept | Data Mining, Machine Learning |
We took a dataset that has information on the performance of math exam taken by Non-STEM students before and after playing an action video game. We conducted statistical analysis (ANOVA) to check whether there is any difference if the students played an action video game. Out of curiosity, we also wanted to find out if gender played any role in the difference of scores. To find out we performed ANOVA and Linear Regression Analysis on the data set using SPSS. We concluded based on the results obtained in SPSS.
| Course | Advanced Statistical Methods |
| Concepts | Statistics |
Developed an weather client application using 'Open Weather Map' API. It gives out weather report of that city and also a suggestion based on weather conditions in that place when we input a city name.
| Details | Personal Project |
| GitHub | https://github.com/anishgrandhi/Weather-Report |
| Technologies | HTML, CSS, Javascript |
A simple project to place markers of volcanoes on world map using Folium package in python. Reference - https://www.udemy.com/the-python-mega-course/ The python file executes and creates a HTML file in the local folder.
| Details | Personal Project (Learning) |
| GitHub | https://github.com/anishgrandhi/Maps-on-Web-using-Folium |
| Technologies | Python |


fun getReusable(): ReusableGenericStatement
Gives a reference to a reusable statement object. This allows clients to avoid the (small) lookup overhead for a frequently-used statement.
Usage:
val intParam = Parameter(Types.sqlInt)
var r = ""
val stmt = (db.statement() + "SELECT " + TestTable.testName + " FROM " + TestTable +
" WHERE " + TestTable.id + "=" + intParam).getReusable()
stmt run { generic ->
generic[intParam] = testRow
generic.resultHandler = { execOK, stmt ->
assert(execOK)
val found = rs.next()
assert(found)
val rs = stmt.resultSet
r = rs.getString(1)
}
}
Throws IllegalStateException if this statement is not cacheable.


LinkedIn
LinkedIn
LinkedIn
Paulo Diniz
Blog
Blog
Github
Eddie Dolan
LinkedIn
Blog
Blog
Jonah Nisenson
Github
Github
Github
Eric Liu
Eric's Favorite Tree
Jonah's Favorite Tree
Eddie's Favorite Tree
Paulo's Favorite Tree
We speak for the trees


Amway
Nutrilite Vitamin B Dual-Action ...
Description
Amway Nutrilite Vitamin B Dual-Action
*** NEW *** SEALED BRAND NEW!
Product Overview
120 tablets
B vitamins help fight fatigue*
Fight fatigue before it hits with all eight essential B vitamins packed into a single dual-action, bi-layer tablet. Just one tablet delivers up to eight hours* of energy support.
*This statement has not been evaluated by the Food and Drug Administration. This product is not intended to diagnose, treat, cure, or prevent any disease.
Recommended use: 1 Use(s) per day
Description
Nutrilite™ Vitamin B Dual-Action is packed with all eight essential B vitamins in a bi-layer tablet, so your body gets the vitamin B it needs, when it needs it. First, one side delivers a quick and complete release of two B vitamins to help you start strong. Then, the other side releases six more B vitamins steadily for eight hours.*
Benefits
Nutrilite™ Vitamin B Dual-Action contains natural spirulina grown on a Nutricert™ certified aqua farm.
- B vitamins are used by the body to produce energy and help fight fatigue.*
- Provides eight hours* of energy support in one easy-to-swallow tablet.
- Contributes to energy-yielding metabolism.
- Does not contain caffeine.
- Gentle on the stomach.
*This statement has not been evaluated by the Food and Drug Administration. This product is not intended to diagnose, treat, cure, or prevent any disease.
Advisories
Children under 12 years of age, pregnant women or nursing mothers, or anyone with a medical condition should consult with a physician before using this product. Keep out of reach of children.
Do not chew or cut the tablet. Chewing or cutting the tablet will negate benefits of the dual-action feature.
Frequently Asked Questions
Do not chew or cut the tablet. Chewing or cutting the tablet will negate benefits of the dual-action feature.
Take one tablet daily, at any time, with or without a meal. What is the science and technology behind Nutrilite™ Vitamin B Dual-Action? Nutrilite™ Vitamin B Dual-Action has been designed to offer an effective, efficient, and more convenient way to get eight essential B vitamins in a spirulina-based formula. The instant release technology in one layer allows the body to access vitamins B2 and B12 quickly and completely, for best absorption. The remaining six B vitamins in the other layer are released slowly and steadily through the gut for efficient transport into the body.
Where do the B vitamins come from?
Many of the B vitamins are sourced from spirulina, a type of blue-green algae. Spirulina is cultured and harvested at a partner facility located in the Sonoran Desert near the Salton Sea in southern California. They are masters of aquatic agriculture, who have passed a rigorous Nutricert™ certification audit. Nutricert™ is our exclusive certification that ensures that sustainable environmental and agricultural practices – consistent with Nutrilite™ values and quality standards – are followed in the cultivation and production of botanicals used to make ingredients intended for Nutrilite™ supplements. These practices set Nutrilite™ Vitamin B Dual-Action apart.
What does bi-layer mean?
The term bi-layer simply refers to the unique, physical structure of the vitamin B tablet. There are two distinct layers: a dark green layer for instant release of two of the B vitamins and a light green layer for the extended release of the remaining six B vitamins.
What does dual-action mean?
The term dual-action refers to the combination of two technologies in one tablet. The dark green layer is the instant release layer that completely releases two B vitamins within a one-hour period immediately after taking. The light green layer is the extended release layer that releases six B vitamins during an eight-hour period.
Is this product all-natural?
No. In addition to using natural spirulina, Nutrilite™ Vitamin B Dual-Action contains synthetic B vitamins to deliver target nutrient levels and ensure consistent potency throughout shelf life. In this way, it leverages the best of nature and the best of science.
Is the product organic?
No, the entire formula is not organic. However, the key botanical used in the product – spirulina – is grown and harvested on a Nutricert™ certified partner farm.
More Information
Nutrilite™ Vitamin B Dual-Action provides all eight essential B vitamins for a full eight hours giving you the right amount of B vitamins at the right time. B vitamins help you fight fatigue* by releasing energy from fats, carbohydrates, and proteins in your food.
Many of the important B vitamins found in Nutrilite™ Vitamin B Dual-Action are sourced from natural spirulina grown on a Nutricert™ certified aqua farm.
*This statement has not been evaluated by the Food and Drug Administration. This product is not intended to diagnose, treat, cure, or prevent any disease.
Frequently Bought Together
Payment
We accept PayPal Only. All major credit cards are accepted through secure payment processor PayPal.
Shipping
PLEASE READ!!!
Feel Safe to Buy with us read our Feedback is our business!!!
Shipping out in next business day if you choose on weekend
Excludes: Alaska/Hawaii, APO/FPO, US Protectorates, South America, Puerto Rico, PO Box ARE NOT AVAILABLE!!!!!
It usually takes 2 - 3 days of handling time. For orders within the US it takes 5 - 7 business days maximum after handling.
When can you expect your order? Allow at least 2 to 3 days for tracking number to post.
When I know, you will know.
If you want cancel order we can do only before shipping...
Purchase Terms and Conditions
- Your order will be processed within 1 business day after receipt of cleared payment.
- We Only Provide Shipping to the 48 Contiguous United States.
- We are unable to ship PO Box.
- We do not combine shipping.
- 30 days in order to get your money back or item exchange*, buyer pays return shipping.
- Buyers Pay for Return Shipping Cost.
- All emails will be answered within 1 business day. If you do not receive our reply, please kindly re-sent your e-mail, and we will reply to you as soon as possible.
- All items sold by us are being described to the best of our abilities, as accurate as possible, and with utmost conscientiousness on our part. However, to avoid any potential oversights, I respectfully request your assistance in helping us to make this a mutually satisfactory transaction by Thoroughly reviewing item description and photos, and asking all questions Prior To Bidding.
- Please Note that size and color representation are subject to manufacturing variance and may not be exact. Also note that monitor settings may vary from computer to computer and may distort actual colors.
- Before you report any problem to Ebay wait for our answer.
- If there is something let you unsatisfy, please do not leave negative or neutral feedback we will try best to solve your problem and ensure your requirement.
- Please leave POSITIVE FEEDBACK after receiving the product


class WiseFyLock
A class used to synchronize logic.
See Also
WiseFy.getWiseFyLock
Author Patches
Since 3.0


|
Generated by JDiff |
||||||||
| PREV PACKAGE NEXT PACKAGE FRAMES NO FRAMES |
This file contains all the changes in documentation in the packagecom.google.inject
as colored differences. Deletions are shownlike this, and additions are shown like this.
If no deletions or additions are shown in an entry, the HTML tags will be what has changed. The new HTML tags are shown in the differences. If no documentation existed, and then some was added in a later version, this change is noted in the appropriate class pages of differences, but the change is not shown on this page. Only changes in existing text are shown here. Similarly, documentation which was inherited from another class or interface is not shown here.
Note that an HTML error in the new documentation may cause the display of other documentation changes to be presented incorrectly. For instance, failure to close a <code> tag will cause all subsequent paragraphs to be displayed differently.
Binds method interceptor[s] to methods matched by class and method matchers. A method is eligible for interception if:@param classMatcher matches classes the interceptor should apply to. For example: {@code only(Runnable.class)}. @param methodMatcher matches methods the interceptor should apply to. For example: {@code annotatedWith(Transactional.class)}. @param interceptors to bind. The interceptors are called in the order they are given.
- Guice created the instance the method is on
- Neither the enclosing type nor the method is final
- And the method is package-private, protected, or public
Creates an injector for the given set of modules. This is equivalent to calling .createInjector(Stage, Iterable) with Stage.DEVELOPMENT. @throws CreationException if one or more errors occur during injector creationClass Guice, Injector createInjector(Module[])
Creates an injector for the given set of modules. This is equivalent to calling .createInjector(Stage, Module...) with Stage.DEVELOPMENT. @throws CreationException if one or more errors occur during injector construction
Annotates members of your implementation class (constructors, methods and fields) into which the Injector should inject values. The Injector fulfills injection requests for:In all cases, a member can be injected regardless of its Java access specifier (private, default, protected, public). @author<EMAIL_ADDRESS>(Bob Lee)
- Every instance it constructs. The class being constructed must have exactly one of its constructors marked with {@code @Inject} or must have a constructor taking no parameters. The Injector then proceeds to perform
methodfield andfieldmethod injections.- Pre-constructed instances passed to Injector.injectMembers, com.google.inject.binder.LinkedBindingBuilder.toInstance(Object) and com.google.inject.binder.LinkedBindingBuilder.toProvider(javax.inject.Provider). In this case all constructors are, of course, ignored.
- Static fields and methods of classes which any Module has specifically requested static injection for, using Binder.requestStaticInjection.
Returns true if this key has annotation attributes.Class Key, Key<T> ofType(Class<T>)@since 3.0
Returns a new key of the specified type with the same annotation as this key.Class Key, Key<?> ofType(Type)@since 3.0
Returns a new key of the specified type with the same annotation as this key.Class Key, Key<T> ofType(TypeLiteral<T>)@since 3.0
Returns a new key of the specified type with the same annotation as this key.Class Key, Key<T> withoutAttributes()@since 3.0
Returns this key without annotation attributes, i.e. with only the annotation type.@since 3.0
Annotates methods of a Module to create a provider method binding. The method's return type is bound toit'sits returned value. Guice will pass dependencies to the method as parameters. @author<EMAIL_ADDRESS>(Bob Lee) @since 2.0


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |
@Retention(value=RUNTIME) @Target(value=FIELD) public @interface XMLField
Indicates a field within an IceSoap POJO that is to be automatically set from
an XML object - accepts an absolute or relative XPath to map the field to an
XML text element. Note that this can take the form of an absolute XPath or a
relative XPath - relative XPaths are relative to the XPath defined in the
XMLObject
annotation of the class the annotated field belongs to.
Use with no arguments to make the annotated object take the value of the tag
specified in the XMLObject
annotation of the enclosing class.
| Optional Element Summary | |
|---|---|
String |
dateFormat
The format to use for parsing this field, if it's a date - in the same format as is used for SimpleDateFormat . |
Class<? extends Processor> |
processor
The processor to use for this field - entirely optional. |
String |
value
The XPath of the field, as a String. |
public abstract String value
public abstract String dateFormat
SimpleDateFormat
. Defaults to ISO date
(yyyy-MM-dd).
public abstract Class<? extends Processor> processor
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |


Bonucci extends Juventus contract until 2024
TURIN, Italy (AP) - Defender Leonardo Bonucci has extended his contract at Juventus, tying him to the Italian champion until 2024.
Juventus announced the extension on Tuesday but did not give financial details of his contract.
Bonucci first joined Juventus in 2010 but spent the 2017-2018 season at AC Milan after a 40-million-euro ($45 million) transfer amid reports of a dressing room spat.
The Italy defender returned to Juventus in 2018, in swap deal with Mattia Caldara, and penned a five-year deal.
The 32-year-old Bonucci has won seven Serie A titles and three Italian Cups with Juventus. He has made almost 100 appearances for Italy, captaining the Azzurri on 10 occasions.
More AP soccer: https://apnews.com/Soccer and https://twitter.com/AP_Sports
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


We use Github for the source code of the Firefox Add-on SDK (aka Jetpack). We use Bugzilla to track bugs and feature development. These two systems do not play nicely together.
One especially annoying aspect of the workflow we use for the Add-on SDK is that it's a pain to submit a change in a way that satisfies both the Github and Bugzilla workflows. On Github you need to create a branch for your change, push it to Github, then go the page for the branch and submit a "pull request", informing the forkees that you have changes you'd like merged into the main repository. On Bugzilla, the typical process is to attach a diff of your changes to a bug, and request review from a specific person.
Atul Varma improved things with a great idea: Submit an HTML file as a bug attachment, which points to the pull-request page on Github. He added a feature to Pybugzilla that, given a pull-request URL and bug id, would generate the HTML file and submit it as an attachment to the bug. We now had something that was attached to a bug, that a reviewer could r+ or r-, making it easy for anyone following along to know where things were at, while allowing the code review itself to be done inline on Github.
However, using the tool isn't easy. You have to do your development work, then go to the Github page to make the pull request, then go back to the command line to construct the correct invocation of the command, then back to the Bugzilla page to request review from someone.
So I wrote an add-on to reduce the number of steps. With the Github Bugzilla Tweaks add-on, there's now a button the Github pull-request page that allows you to submit the request as an attachment on a bug in one-click:
To make it work, just title your pull request starting with "bug ######", replacing # with the bug id from Bugzilla. The add-on logs into Bugzilla with the stored credentials found in the Firefox password manager.


{% extends "global/Page.html" %} {% load otree static %} {% block title %} Results {% endblock %} {% block content %}
In this round, each other player on average catches {{participant.vars.other_choice}}, you decided to catch {{participant.vars.condi_choice}} according to the conditional decision you chose for this round. Thus the results for this round are:
Your catch is {{participant.vars.condi_choice}}.
Your group's total catch is {{ tot_cho }}.
At the end of this round, each individual gets an extra fish catch of {{ extra_share }}.
Your profit in this round is therefore {{ ls_profit }}.


A flexible and evolutive component library framework has been proposed to derive short chemical mechanisms with only the necessary kinetics for the desired surrogate mixture. Figure showd the chemical model developed our earlier works reorganized into this framework. A script to extract a chemical mechanism for a surrogate mixture, the kinetics of whose individual components are described in this parent chemical mechanism, is available under the tab publications
Ignition delay times of JP-8/Jet-A fuels at stoichiometric fuel/air equivalence ratios: Symbols - experimental data from several sources. Simulations are performed by representing the real jet fuel as a surrogate containing 30.3% n-dodecane, 21.2% m-xylene, and 48.5% methylcyclohexane (mole %). The kinetics of this surrogate mixture are extracted from a multi-component reaction mechanism using the component library approach.


{% load static %}
Personal Album
Create One !
Logout
Welcome to Personal Diary Guest
A sample application which helps you re-imagine your good album days.
Personal Diary
{% for img in image_list %}
{% endfor %}
THE END
>


Word finder AND replacer
Sentence:
Find word:
Replace with:
Boom
Awesome! Here is your modified output!


GLOBAL WARMING FACTSHEET
The Greenhouse Effect
The greenhouse effect is unquestionably real and helps to regulate the temperature of our planet. It is essential for life on Earth and is one of Earth's natural processes. It is the result of heat absorption by certain gases in the atmosphere (called greenhouse gases because they effectively 'trap' heat in the lower atmosphere) and re-radiation downward of some of that heat. Water vapor is the most abundant greenhouse gas, followed by carbon dioxide and other trace gases. Without a natural greenhouse effect, the temperature of the Earth would be about zero degrees F (-18°C) instead of its present 57°F (14°C). So, the concern is not with the fact that we have a greenhouse effect, but whether human activities are leading to an enhancement of the greenhouse effect by the emission of greenhouse gases through fossil fuel combustion and deforestation.
Increase of Greenhouse Gases
Human activity has been increasing the concentration of greenhouse gases in the atmosphere (mostly carbon dioxide from combustion of coal, oil, and gas; plus a few other trace gases). There is no scientific debate on this point. Pre-industrial levels of carbon dioxide (prior to the start of the Industrial Revolution) were about 280 parts per million by volume (ppmv), and current levels are greater than 380 ppmv and increasing at a rate of 1.9 ppm yr-1 since 2000. The global concentration of CO2 in our atmosphere today far exceeds the natural range over the last 650,000 years of 180 to 300 ppmv. According to the IPCC Special Report on Emission Scenarios (SRES), by the end of the 21st century, we could expect to see carbon dioxide concentrations of anywhere from 490 to 1260 ppm (75-350% above the pre-industrial concentration).
Conditions in Historical Context
Paleoclimatic data are critical for enabling us to extend our knowledge of climatic variability beyond what is measured by modern instruments. Many natural phenomena are climate dependent (such as the growth rate of a tree for example), and as such, provide natural 'archives' of climate information. Some useful paleoclimate data can be found in sources as diverse as tree rings, ice cores, corals, lake sediments (including fossil insects and pollen data), speleothems (stalactites etc), and ocean sediments. Some of these, including ice cores and tree rings provide us also with a chronology due to the nature of how they are formed, and so high resolution climate reconstruction is possible in these cases. However, there is not a comprehensive 'network' of paleoclimate data as there is with instrumental coverage, so global climate reconstructions are often difficult to obtain. Nevertheless, combining different types of paleoclimate records enables us to gain a near-global picture of climate changes in the distant past. For Northern Hemisphere temperature, recent decades appear to be the warmest since at least about 1000AD, and the warming since the late 19th century is unprecedented over the last 1000 years. Older data are insufficient to provide reliable hemispheric temperature estimates. Ice core data suggest that the 20th century has been warm in many parts of the globe, but also that the significance of the warming varies geographically, when viewed in the context of climate variations of the last millennium. Large and rapid climatic changes affecting the atmospheric and oceanic circulation and temperature, and the hydrological cycle, occurred during the last ice age and during the transition towards the present Holocene period (which began about 10,000 years ago). Based on the incomplete evidence available, the projected change of 3 to 7°F (1.5 - 4°C) over the next century would be unprecedented in comparison with the best available records from the last several thousand years.
Global Temperatures
Global surface temperatures have increased about 0.74°C (plus or minus 0.18°C) since the late–19th century, and the linear trend for the past 50 years of 0.13°C (plus or minus 0.03°C) per decade is nearly twice that for the past 100 years. The warming has not been globally uniform. Some areas (including parts of the southeastern U.S. and parts of the North Atlantic) have, in fact, cooled slightly over the last century. The recent warmth has been greatest over North America and Eurasia between 40 and 70°N. Lastly, seven of the eight warmest years on record have occurred since 2001 and the 10 warmest years have all occurred since 1995. Recent analyses of temperature trends in the lower and mid- troposphere (between about 2,500 and 26,000 ft.) using both satellite and radiosonde (weather balloon) data show warming rates that are similar to those observed for surface air temperatures. These warming rates are consistent with their uncertainties and these analyses reconcile a discrepancy between warming rates noted on the IPCC Third Assessment Report (U.S. Climate Change Science Plan Synthesis and Assessment Report 1.1).
Climate Variability and Extremes
Examination of changes in climate extremes requires long-term daily or even hourly data sets which until recently have been scarce for many parts of the globe. However these data sets have become more widely available allowing research into changes in temperature and precipitation extremes on global and regional scales. Global changes in temperature extremes include decreases in the number of unusually cold days and nights and increases in the number of unusually warm days and nights. Other observed changes include lengthening of the growing season, and decreases in the number of frost days. Global temperature extremes have been found to exhibit no significant trend in interannual variability, but several studies suggest a significant decrease in intra-annual variability. There has been a clear trend to fewer extremely low minimum temperatures in several widely-separated areas in recent decades. Widespread significant changes in extreme high temperature events have not been observed. There is some indication of a decrease in day-to-day temperature variability in recent decades.In areas where a drought or excessive wetness usually accompanies an El Niño or La Niña, these dry or wet spells have been more intense in recent years. Further, there is some evidence for increasing drought worldwide, however in the U.S. there is no evidence for increasing drought. In some areas where overall precipitation has increased (ie. the mid-high northern latitudes), there is evidence of increases in the heavy and extreme precipitation events. Even in areas such as eastern Asia, it has been found that extreme precipitation events have increased despite total precipitation remaining constant or even decreasing somewhat. This is related to a decrease in the frequency of precipitation in this region.
A BIG THANK YOU to NOAA for the content for this page. If you want to learn more about Global Warming please visit the National Oceanic and Atmospheric Administration HERE.
Here you can create your own checklist, of ways you can reduce YOUR carbon footprint. This list should be customized to your lifestyle.
| To Do | ||
|---|---|---|
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
Global warming is the term used to describe a gradual increase in the average temperature of the Earth's atmosphere and its oceans, a change that is believed to be permanently changing the Earth’s climate.
-
star
Reduce Fossil Fuel Use
There are two ways to reduce fossil fuel use: Use less energy, or use alternative, nonpolluting energy sources like solar and wind power. At home, this translates to saving electricity by using energy-efficient appliances and compact fluorescent light bulbs, as well as reducing gasoline use and buying green power from your electricity provider, if available.
-
star
Plant Trees
Because carbon dioxide is the most important greenhouse gas, planting trees and other plants can slow or stop global warming. Deforestation of rain forests is a large contributor to global warming and CO2 emissions, but planting new trees, even in your own backyard, can help to offset this.
-
star
Reduce Waste
Decomposing waste in landfills produces methane and other greenhouse gases. Waste also requires energy to manufacture in the first place. Reducing your consumption patterns and reusing items whenever possible minimizes your carbon footprint, since fewer new items need to be made. Recycling metal, plastic, glass and paper lowers greenhouse gas emissions, since recycled items take far less energy to manufacture than items produced from scratch.
-
star
Conserve Water
Cities consume significant amounts of energy when purifying and distributing water, which contributes to greenhouse gas emissions. Saving water reduces the amount of energy used. At home, turn off water immediately whenever you're not using it, and repair or replace leaky faucets and toilets. In your yard, landscape with plants and grasses that require less water, and capture rainwater in barrels for irrigating.
If you would like to follow me on Github or just check out some of the projects I've done. Click here for my Github for IT_202.
My name is Alexandra Dyla, and I'm currently a student at the University of Illinois Chicago. I've been working toward my degree in Computer Engineering. My expected graduation is May 2017. Some of my interests include computer architecture, networking, and computer systems.


9 August 2007
Four new cases of polio have been confirmed from Luanda and Benguela provinces in Angola. The most recent case had onset of paralysis on 8 July.
This brings the total number of cases, in Angola, in 2007 to 10. The next Nationwide Immunization Day (NID) will be held on 31 August.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/conditionally.20run.20.22check.20.2E.2E.2E.20scripts.22.20tasks.20on.20travis.3F.html ---
Hi @Simon Hudon, I think the new travis tasks are slowing things down in an unfortunate way. Two of my PRs are at the moment sitting at yellow; travis has successfully checked all the proofs, but hasn't got around to spinning up the check install scripts tasks.
Is there some way we can only initiate them if something changed in the scripts directory?
The problem isn't that checking the install scripts is slow, but that travis is waiting to allocate a VM to check them in.
I think there are three things we can try here.
1. get Travis to not make redundant builds for PRs and pushes
2. collapse the four checks for scripts into 2 checks
3. disable those checks when the scripts don't change
I've talked to the Travis team about 1. and the change is in the pipeline
I can look into 2. tomorrow
I have no idea how to do 3. or if it's possible.
Great! No worries if it turns out to be too much work.
I think 1. will make a nice difference. Also, I've noticed today that Travis' workload was pretty heavy and it wasn't allocating many VMs for mathlib
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


Here is a list of SEP applications for your police jurisdiction. Applications older than two months are not shown. If you need to access this information please contact LCRB.
Click Assign to add an application to your My Jobs list. You may sort applications by clicking on the column headings below.


Python Tkinter MenuThe Menu widget is used to create various types of menus (top level, pull down, and pop up) in the python application. The top-level menus are the one which is displayed just under the title bar of the parent window. We need to create a new instance of the Menu widget and add various commands to it by using the add() method. The syntax to use the Menu widget is given below. SyntaxA list of possible options is given below.
MethodsThe Menu widget contains the following methods.
Creating a top level menuA top-level menu can be created by instantiating the Menu widget and adding the menu items to the menu. Example 1Output: Clicking the hello Menubutton will print the hello on the console while clicking the Quit Menubutton will make an exit from the python application. Example 2Output:
Next TopicPython Tkinter Message
|
Python Tkinter MenuThe Menu widget is used to create various types of menus (top level, pull down, and pop up) in the python application. The top-level menus are the one which is displayed just under the title bar of the parent window. We need to create a new instance of the Menu widget and add various commands to it by using the add() method. The syntax to use the Menu widget is given below. SyntaxA list of possible options is given below.
MethodsThe Menu widget contains the following methods.
Creating a top level menuA top-level menu can be created by instantiating the Menu widget and adding the menu items to the menu. Example 1Output: Clicking the hello Menubutton will print the hello on the console while clicking the Quit Menubutton will make an exit from the python application. Example 2Output:
Next TopicPython Tkinter Message
|
Python Tkinter MenuThe Menu widget is used to create various types of menus (top level, pull down, and pop up) in the python application. The top-level menus are the one which is displayed just under the title bar of the parent window. We need to create a new instance of the Menu widget and add various commands to it by using the add() method. The syntax to use the Menu widget is given below. SyntaxA list of possible options is given below.
MethodsThe Menu widget contains the following methods.
Creating a top level menuA top-level menu can be created by instantiating the Menu widget and adding the menu items to the menu. Example 1Output: Clicking the hello Menubutton will print the hello on the console while clicking the Quit Menubutton will make an exit from the python application. Example 2Output:
Next TopicPython Tkinter Message
|
Python Tkinter MenuThe Menu widget is used to create various types of menus (top level, pull down, and pop up) in the python application. The top-level menus are the one which is displayed just under the title bar of the parent window. We need to create a new instance of the Menu widget and add various commands to it by using the add() method. The syntax to use the Menu widget is given below. SyntaxA list of possible options is given below.
MethodsThe Menu widget contains the following methods.
Creating a top level menuA top-level menu can be created by instantiating the Menu widget and adding the menu items to the menu. Example 1Output: Clicking the hello Menubutton will print the hello on the console while clicking the Quit Menubutton will make an exit from the python application. Example 2Output:
Next TopicPython Tkinter Message
|


Open overview.html for the markup | Images are taken from: JS Course by Jonas Schmedtmann
Up until now, we have used JavaScript in the old school way. But now, we will learn how to use JavaScript
in a modern (ES6) way.
Modern JS is not more about the language itself. It's about the ecosystem/environment we write our JS
code in. We still write the exact same JS, but we use it together with a set of tools that make it easier
and better to work with. The foundation of all these tools is Node JS and the NPM (Node Package Manager) Ecosystem where we can find all kinds of third party open source tools,
libraries & frameworks (ex: stuff like REACT & ANGULAR, Lodash & jQuery, etc) needed for modern web
development. We also have development tools for task automation, automatic browser reloading or to
compile JavaScript down to ES5.
In order to use/install these tools, we need some kind of tool to install and manage them, and that's
where the NPM comes into the picture. npm
is a simple command line interface that allows to
manage web development tools easily. Also, npm
also allows us to write scripts to use our
development tools automatically.
Another tool that we use in Modern JS is called Babel. In order to convert cutting edge JS
code like ES6, ES7, or ES8 (which together are simply called "ESNext") down to ES5, so if all browsers
are capable of parsing our code, for that, we use Babel. In a couple of years this might not be
necessary, but for now, this is an important step in the process of modern web development.
Next, we will use ES6 modules, in order to make our code modular and easier to maintain, by separating
different parts of our app/project into different files. ES6 makes this separation of parts in the app
into different files implementing something known as modules. The problem with these modules is that
right now the browsers do not support this functionality yet. So, we have to bundle these modules
together into a single file, using something called a module bundler. The most popular module bundler out
there is Webpack. Webpack can actually do much more than just bundling modules. Some of the
features of Webpack are Code Splitting, Loading many types of assets like sass or images, decreasing our
JavaScript bundle size using an algorithm called "tree shaking" and many more.
Babel and Webpack are NPM Packages. The easiest way to run these packages is by
using something known as "NPM Scripts", which allows us to run all these tools automatically and easily
in our command line interface.
The image above is a quick illustration of the explanation given till now.


imexam.connect Module¶
This is the main controlling class, it allows the user to connect to (at least) ds9 and the imexamine classes
imexam.imexamine Module¶
This class implements IRAF/imexamine type capabilities
However, the power of this class is that it is essential a library of plotting and analysis routines which can be directed towards any viewer. It can also be used without connecting to any viewer since the calls take only data,x,y information. This means that given a data array and a list of x,y positions you can creates plots without havin to interact with the viewers.
Users can also register a custom function with the class and have it available for use in either case.
The plots which are made are fully customizable
imexam.ds9_viewer Module¶
This class supports communication with DS9 through the XPA
Some code in this class was adapted from pysao, which can be found at https://github.com/leejjoon/pysao. Specifically this package used the existing Cython implementation to the XPA and extended the calls to the other available XPA executables so that more functionality is added. The same information is available here:
http://hea-www.harvard.edu/RD/xpa/client.html#xpaopen
Using Cython will allow for broader development of the code and produce faster runtimes for large datasets with repeated calls to the display manager.
XPA is licensed under LGPL, help can be found here: http://hea-www.cfa.harvard.edu/saord/xpa/help.html
The current XPA can be downloaded from here: http://hea-www.harvard.edu/saord/xpa/
DS9 also supports the SAMP protocol, but that has not been fully implemented in this package. http://ds9.si.edu/doc/ref/samp.html
imexam.ginga_viewer Module¶
This class supports communication with a Ginga-based viewer.
- For default key and mouse shortcuts in a Ginga window, see:
- https://ginga.readthedocs.org/en/latest/quickref.html
Classes¶
ginga ([exam, close_on_del, logger, port, ...]) |
A ginga-based viewer that uses an HTML5 window in the browser. |
ginga_general ([exam, close_on_del, logger, port]) |
A base class which controls all interactions between the user and the |


This study aims to find out if API unit tests can provide good usage examples, and if so, what prevents developers from finding and using those examples. The results of an experiment we performed with two groups of developers showed that unit tests can be very helpful, especially when the task is complicated and involves multiple classes and methods. Well-written tests proved to be a good source of examples, but finding the relevant examples using the standard tools might be very difficult. We propose to supplement the standard API documentation with relevant examples taken from the unit tests. To further improve the learnability of the API, presentation of the documentation and examples has to be tailored in a way that separates or hides advanced usage scenarios from the commonly used ones.


Changelog
--
##Latest
--
version:0.91
date: 2-6-2017
--
Table Of Contents (WIP), Docs, Strapless Menu Fixes, other various code fixes.
version:0.9
date: 2-6-2017
--
materials > components:
- lots of arranging components into new directories,
- moved project-specific materials to 'projects' directory;
docs:
- began parsing out contents of Strapless Explained;
views:
- added materials.html,
- projects.html,
fabricator:
version: 0.2
date: 2-3-2017
--
Compressed Images, More Docs, Markdown Helper
assets/toolkit:
- images: replaced large pngs with compressed jpg,
- styles: added padding to inline code;
docs:
- added changelog
- further additions and improvments of straplessExplained;
materials, views:
- using button as an example, began setting up a method to only show relevant components, depending on the layout;
gulpfile, helpers:
- removed bad code,
- added markdown helper, to easily populate text content areas without writing HTML;
editorconfig: set trim_trailing_whitespace=true;
package.json: updated description name from Brianstrap to Strapless
version: 0.1
date: 2-1-2017
--
Documentation, Tutorials, Fixes
assets/fabricator:
- fixes to code appearance;
assets/toolkit:
- images: added 3 images for strapless documentation,
- styles: updated blockquote, fixed responsive styles;
- fixed the accordion, for use in the sidenav; modifed buttonBar to add Strapless nav items (for a tutorial on how to do this);
- modifed hero for unique strapless styles;
- fixes to .styleguide class (migrating general code to own partials);
src/data:
- added data to dynamically generate strapless elements, and for a Tutorial (and so I could get a stronger handle on YAML and Handlebars;
src/docs:
- updates and additions -
- converting old html to markdown
- fixing widths and titles
- added tutorials on building a layout, installing strapless, explaining strapless, modifying partials, building a new component (table of contents - a WIP), and a few other notes.
src/materials:
- modifed heros and tabs_ButtonBar for strapless,
- modified button to attempt to only display certain items depending on context (WIP);
- typography: created Metadata material;
- materials/structures: added strapless_Heros element;
src/views:
- modified layouts for strapless appearance rendering;
- modifed docs.html
- created views/strapless/intro.html (should delete) and views/strapless.html;
- modifed templates;


Meet the amazing team behind 2FIT
Our Team leader:
Abdullah AlSawalmeh
26 years old, with M.Sc. degree in Mechatronics engineering. Abdullah is passionate about learning more about programming and he already has a great knowledge in Python programming language.
Team Member:
Ayman Naif
25 years old, with B.Sc. degree in Electrical engineering. He worked as freelancer designer and video editor before joining our team. Ayman is enthusiastic about learning programming and having new experiences.
Team Member:
Hala Khamayseh
25 years old, Hala has a B.Sc. degree in Translation. She has an experience in customer services with great interpersonal skills. Having high hopes of being a web developer that promotes quality services.
Team Member:
Umamah Mahmoud
27 years old, with a B.Sc. degree in Architecture. Umamah has a previous experience in multiple fields of design, dealing with advanced softwares is what's pushing her curiosity towards the world of programming.


Christian Critic's Movie Parables - http://www.christiancritic.com
DUDLEY DO-RIGHT ** out of **** stars ====================
Directed by: Hugh Wilson Starring: Brendan Fraser Sarah Jessica Parker Alfred Molina Eric Idle Alex Rocco Written by: Hugh Wilson Rated: PG for cartoon violence Scripture Psalms 73:12-19 Psalms 52:3-7
Brendan Fraser (GEORGE OF THE JUNGLE) continues his string of cartoon characters by taking on the role of the world's most recognizable Canadian Royal Mountie. But he should have gone for the voice. Seeing DUDLEY DO-RIGHT without hearing the nasally pompous tones of Bill Scott (who also did the voice of BULWINKLE) is like trying to listen to ALVIN AND THE CHIPMUNKS' voices at regular speed. It just isn't that funny.
With none the wit of Jay Ward's 1969 original animated source, the filmmakers who bring us the live action DUDLEY DO-RIGHT resort to sight gags and slapstick. It sometimes works, it mostly doesn't. This film's Do-Right is more of a "doofus."
 His boyhood chum, Snidley Whiplash, had a different dream. He wanted to be a bad guy so he could have all the bad guy kind of fun.
Living in the Canadian town of Semi-Happy Valley, both Dudley and Snidely attain their respective goals, opposing as they may be. Caught in the middle is the fair Nell Fenwick who must divide her affections betwixt them.
After Whiplash drives off all the residents of Semi-Happy Valley, he peppers the rocks and streams with gold buckshot in order to force a phony "Gold Rush." Since he now owns the entire town, the onrush of fortune seekers is making him a fortune, turning him into a "respectable" business man. Why, he's even started to add color to his wardrobe. Dudley, on the other hand, is losing everything. His job, his uniform, his horse... With the spiritual help of Eric Idle (SPLITTING HEIRS), Dudley must learn to do bad so he can get back to doing right.
The story is a disappointment to anyone who remembers the adult intelligence and wit of Jay Ward's animated shows which combined with a childlike innocence that made them very appealing to all ages. However, children will probably enjoy this new version with all its the pratfalls and broad physical humor. Preceding the movie is a newly produced animated FRACTURED FAIRY TALE that is reminiscent of Jay Ward's work. Written by Bill Scott, it is clever enough for us to yearn for a higher quality feature film to follow it.
Mr. Fraser has the gentle naiveté needed for the role but there's an essential quality missing from his characterization and thus from the movie. The animated Dudley had a single-mindedness that bordered on the absurd. That element wasn't captured here which weakened the integrity of the character.
Sarah Jessica Parker (MARS ATTACKS) isn't given much to do as Nell Fenwick. Hers is a romantic decision rather than a PERILS OF PAULINE DILEMMA. Alex Rocco (JUST WRITE) has some funny moments as the chief of a native tribe of Indians (the Kumquat nation) who perform their cultural dances (ALA RIVERDANCE) for the tourists.
Alfred Molina's (CELEBRITY) Snidely Whiplash does the memory of Hans Conried, who originated the voice, proud. Adopting a sniveling, cartoon-evil voice and dressed in a black cape, stove pipe hat, and of course, the trademark curled wax mustache, he looks and sounds like Hercule Poirot's evil twin brother. Mr. Molina is having great fun playing the bad guy.
In fact, as Whiplash says, "Up until the end, being the bad guy is the best job in the world." In the end, of course, good triumphs and bad is vanquished. It's a bit of an unusual lesson to learn but we can see this truth reflected all around us. So often in life, it appears that bad men prosper.
"Behold, these are the ungodly, who prosper in the world; they increase in riches. When I thought to know this, it was too painful for me; Until I went into the sanctuary of God; then understood I their end." Psalms 73:12, 16-17 [KJV]
Their end is not pretty. Regardless of the appearances of prosperity that evildoers may have attained in this world, they are left with nothing. In contrast, those that have lived righteous lives, believing God to meet their needs and working heartily as unto the Lord, are rewarded both in this lifetime and in the life that is to come. Knowing and believing this makes our decisions between good and evil that much easier.
Michael Elliott August 1999 http://www.christiancritic.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews