There is really no excuse not to write tests!
Automatic testing of software during development is probably the most important Quality Assurance measure. Tests can validate the final system, which is nice for your users. However, most (Prolog) developers forget that it is not just a burden during development.
Tests are written in pure Prolog and enclosed within the directives
begin_tests/1,2
and end_tests/1.
They can be embedded inside a normal source module, or be placed in a
separate test-file that loads the files to be tested. Code inside a test
box is normal Prolog code. The entry points are defined by rules using
the head test(Name)
or
test(Name, Options)
, where Name is a ground term
and
Options is a list describing additional properties of the
test. Here is a very simple example:
:- begin_tests(lists). :- use_module(library(lists)). test(reverse) :- reverse([a,b], [b,a]). :- end_tests(lists).
The optional second argument of the test-head defines additional processing options. Defined options are:
fixme(Fixme)
.blocked(Reason)
, but the test it executed
anyway. If it fails, a -
is printed instead of
the .
character. If it passes a +
and if it passes with a choicepoint, !
. A
summary is printed at the end of the test run and the goal
test_report(fixme)
can be used to get details.setup
option. The only difference is that failure of a condition skips the
test and is considered an error when using the setup
option.create_file(Tmp) :- tmp_file(plunit, Tmp), open(Tmp, write, Out), write(Out, 'hello(World).\n'), close(Out). test(read, [ setup(create_file(Tmp)), cleanup(delete_file(Tmp)) ]) :- read_file_to_terms(Tmp, Terms, []), Term = hello(_).
cleanup
option to create and destroy the required
execution environment.name (forall bindings =
<vars> )
,
where
<vars> indicates the bindings of variables in Generator.A1-A2 == v1-v2
test(copy, [ true(Copy =@= hello(X,X)) ]) :- copy_term(hello(Y,Y), Copy).
true(AnswerTerm Cmp Value)
if Cmp
is one of the comparison operators given above.subsumes_chk(Error, Generated)
. I.e. the generated error
must be more specific than the specified Error.error(Error, _Context)
. See throws
for details.true(AnswerTerm Cmp Values)
, but used for
non-deterministic predicates. Each element is compared using Cmp.
Order matters. For example:
test(or, all(X == [1,2])) :- ( X = 1 ; X = 2 ).
all(AnswerTerm Cmp Instances)
, but before
testing both the bindings of AnswerTerm and Instances
are sorted using
sort/2. This
removes duplicates and places both sets in the same order.2The
result is only well-defined of Cmp is ==
.rational_trees
or finite_trees
. STO programs
are not portable between different kinds of terms. Only programs not
subject to occurs-check (NSTO) are portable3See
7.3.3 of ISO/IEC 13211-1 PROLOG: Part 1 - General Core, for a detailed
discussion of STO and NSTO. Fortunately, most practical
programs are NSTO. Writing tests that are STO is still useful to ensure
the robustness of a predicate. In case sto4 and sto5 below, an infinite
list (a rational tree) is created prior to calling the actual predicate.
Ideally, such cases produce a type error or fail silently.
test(sto1, [sto(rational_trees)]) :- X=s(X). test(sto2, [sto(finite_trees),fail]) :- X=s(X). test(sto3, [sto(rational_trees), fail]) :- X=s(X), fail. test(sto4, [sto(rational_trees),error(type_error(list,L))]) :- L = [_|L], length(L,_). test(sto5, [sto(rational_trees),fail]) :- L = [_|L], length(L,3).
Programs that depend on STO cases tend to be inefficient, even incorrect, are hard to understand and debug, and terminate poorly. It is therefore advisable to avoid STO programs whenever possible.
SWI's Prolog flag occurs_check must not be modified within plunit tests.
begin_tests(Name, [])
.Defined options are:
The test-body is ordinary Prolog code. Without any options, the body
must be designed to succeed deterministically. Any other result
is considered a failure. One of the options fail
, true
,
throws
, all
or set
can be used to
specify a different expected result. See section
2 for details. In this section we illustrate typical test-scenarios
by testing SWI-Prolog built-in and library predicates.
Deterministic predicates are predicates that must succeed exactly once and, for well behaved predicates, leave no choicepoints. Typically they have zero or more input- and zero or more output arguments. The test goal supplies proper values for the input arguments and verifies the output arguments. Verification can use test-options or be explicit in the body. The tests in the example below are equivalent.
test(add) :- A is 1 + 2, A =:= 3. test(add, [true(A =:= 3)]) :- A is 1 + 2.
The test engine verifies that the test-body does not leave a choicepoint. We illustrate that using the test below:
test(member) :- member(b, [a,b,c]).
Although this test succeeds, member/2 leaves a choicepoint which is reported by the test subsystem. To make the test silent, use one of the alternatives below.
test(member) :- member(b, [a,b,c]), !. test(member, [nondet]) :- member(b, [a,b,c]).
Semi-deterministic predicates are predicates that either fail or
succeed exactly once and, for well behaved predicates, leave no
choicepoints. Testing such predicates is the same as testing
deterministic predicates. Negative tests must be specified using the
option
fail
or by negating the body using \+/1
.
test(is_set) :- \+ is_set([a,a]). test(is_set, [fail]) :- is_set([a,a]).
Non-deterministic predicates succeed zero or more times. Their
results are tested either using findall/3
or setof/3
followed by a value-check or using the all
or set
options. The following are equivalent tests:
test(member) :- findall(X, member(X, [a,b,c]), Xs), Xs == [a,b,c]. test(member, all(X == [a,b,c])) :- member(X, [a,b,c]).
Error-conditions are tested using the option throws(Error)
or by wrapping the test in a catch/3.
The following tests are equivalent:
test(div0) :- catch(A is 1/0, error(E, _), true), E =@= evaluation_error(zero_divisor). test(div0, [error(evaluation_error(zero_divisor))]) :- A is 1/0.
PlUnit is designed to cooperate with the assertion/1 test provided by library(debug).4This integration was suggested by Günter Kniesel. If an assertion fails in the context of a test, the test framework reports this and considers the test failed, but does not trap the debugger. Using assertion/1 in the test-body is attractive for two scenarios:
Below is a simple example, showing two failing assertions. The first line of the failure message gives the test. The second reports the location of the assertion.5If known. The location is determined by analysing the stack. The second failure shows a case where this does not work because last-call optimization has already removed the context of the test-body. If the assertion call originates from a different file this is reported appropriately. The last line gives the actually failed goal.
:- begin_tests(test). test(a) :- A is 2^3, assertion(float(A)), assertion(A == 9). :- end_tests(test).
?- run_tests. % PL-Unit: test ERROR: /home/jan/src/pl-devel/linux/t.pl:5: test a: assertion at line 7 failed Assertion: float(8) ERROR: /home/jan/src/pl-devel/linux/t.pl:5: test a: assertion failed Assertion: 8==9 . done % 2 assertions failed
Test-units can be embedded in normal Prolog source-files.
Alternatively, tests for a source-file can be placed in another file
alongside the file to be tested. Test files use the extension .plt
.
The predicate
load_test_files/1
can load all files that are related to source-files loaded into the
current project.
At any time, the tests can be executed by loading the program and running run_tests/0 or run_tests(+Unit).
?- gtrace, run_tests(lists:member).
To identify nonterminating tests, interrupt the looping process with Control-C. The test name and location will be displayed.
Most applications do not want the test-suite to end up in the final application. There are several ways to achieve this. One is to place all tests in separate files and not to load the tests when creating the production environment. Alternatively, use the directive below before loading the application.
:- set_test_options([load(never)]).
never
,
everything between begin_tests/1
and end_tests/1
is simply ignored. When always
, tests are always loaded.
Finally, when using the default value normal
, tests are
loaded if the code is not compiled with optimisation turned on.manual
, tests can only
be run using run_tests/0
or run_tests/1.
Using make
, tests will be run for reloaded files, but not
for files loaded the first time. Using
make(all)
make/0
will run all test-suites, not only those that belong to files that are
reloaded.true
(default is false
), send
informational messages using the `silent' level. In practice this means
there is no output except for errors.true
(default false
), assume tests are
not subject to occurs check (non-STO) and verify this if the Prolog
implementation supports testing this.
.plt
test-files that belong to the currently loaded
sources.fixme
, providing
details on how the fixme-flagged tests proceeded.
Prolog is an interactive environment. Where users of non-interactive systems tend to write tests as code, Prolog developers tend to run queries interactively during development. This interactive testing is generally faster, but the disadvantage is that the tests are lost at the end of the session. The test-wizard tries to combine the advantages. It collects toplevel queries and saves them to a specified file. Later, it extracts these queries from the file and locates the predicates that are tested by the queries. It runs the query and creates a test clause from the query.
Auto-generating test cases is experimentally supported through the
library library(test_wizard)
. We briefly introduce the
functionality using examples. First step is to log the queries into a
file. This is accomplished with the commands below. Queries.pl
is the name in which to store all queries. The user can choose any
filename for this purpose. Multiple Prolog instances can share the same
name, as data is appended to this file and write is properly locked to
avoid file corruption.
:- use_module(library(test_wizard)). :- set_prolog_flag(log_query_file, 'Queries.pl').
Next, we will illustrate using the library by testing the predicates
from library library(lists)
. To generate test cases we just
make calls on the terminal. Note that all queries are recorded and the
system will select the appropriate ones when generating the test unit
for a particular module.
?- member(b, [a,b]). Yes ?- reverse([a,b], [b|A]). A = [a] ; No
Now we can generate the test-cases for the module list using make_tests/3:
?- make_tests(lists, 'Queries.pl', current_output). :- begin_tests(lists). test(member, [nondet]) :- member(b, [a, b]). test(reverse, [true(A==[a])]) :- reverse([a, b], [b|A]). :- end_tests(lists).
An important aspect of tests is to know which parts of program is
used (covered) by the tests. An experimental analysis is
provided by the library library(test_cover)
.
We illustrate this here using CHAT, a natural language question and answer application by David H.D. Warren and Fernando C.N. Pereira.
1 ?- show_coverage(test_chat). Chat Natural Language Question Answering Test ... ================================================================== Coverage by File ================================================================== File Clauses %Cov %Fail ================================================================== /staff/jan/lib/prolog/chat/xgrun.pl 5 100.0 0.0 /staff/jan/lib/prolog/chat/newg.pl 186 89.2 18.3 /staff/jan/lib/prolog/chat/clotab.pl 28 89.3 0.0 /staff/jan/lib/prolog/chat/newdic.pl 275 35.6 0.0 /staff/jan/lib/prolog/chat/slots.pl 128 74.2 1.6 /staff/jan/lib/prolog/chat/scopes.pl 132 70.5 3.0 /staff/jan/lib/prolog/chat/templa.pl 67 55.2 1.5 /staff/jan/lib/prolog/chat/qplan.pl 106 75.5 0.9 /staff/jan/lib/prolog/chat/talkr.pl 60 20.0 1.7 /staff/jan/lib/prolog/chat/ndtabl.pl 42 59.5 0.0 /staff/jan/lib/prolog/chat/aggreg.pl 47 48.9 2.1 /staff/jan/lib/prolog/chat/world0.pl 131 71.8 1.5 /staff/jan/lib/prolog/chat/rivers.pl 41 100.0 0.0 /staff/jan/lib/prolog/chat/cities.pl 76 43.4 0.0 /staff/jan/lib/prolog/chat/countr.pl 156 100.0 0.0 /staff/jan/lib/prolog/chat/contai.pl 334 100.0 0.0 /staff/jan/lib/prolog/chat/border.pl 857 98.6 0.0 /staff/jan/lib/prolog/chat/chattop.pl 139 43.9 0.7 ==================================================================
Using ?- show_coverage(run_tests).
, this library
currently only shows some rough quality measure for test-suite. Later
versions should provide a report to the developer identifying which
clauses are covered, not covered and always failed.
One of the reasons to have tests is to simplify migrating code between Prolog implementations. Unfortunately creating a portable test-suite implies a poor integration into the development environment. Luckily, the specification of the test-system proposed here can be ported quite easily to most Prolog systems sufficiently compatible to SWI-Prolog to consider porting your application. Most important is to have support for term_expansion/2.
In the current system, test units are compiled into sub-modules of the module in which they appear. Few Prolog systems allow for sub-modules and therefore ports may have to fall-back to inject the code in the surrounding module. This implies that support predicates used inside the test unit should not conflict with predicates of the module being tested.
The directory of plunit.pl
and swi.pl
must
be in the
library
search-path. With PLUNITDIR replaced accordingly,
add the following into your .sicstusrc
or sicstus.ini
.
:- set_prolog_flag(language, iso). % for maximal compatibility library_directory('PLUNITDIR').
The current version runs under SICStus 3. Open issues:
plunit.pl
. Both coverage analysis and the test
generation wizard currently require SWI-Prolog.
load
option normal
is the same as always
.
Use set_test_options(load, never)
to avoid loading the test
suites.
run
option is not supported.
There are two approaches for testing. In one extreme the tests are written using declarations dealing with setup, cleanup, running and testing the result. In the other extreme a test is simply a Prolog goal that is supposed to succeed. We have chosen to allow for any mixture of these approaches. Written down as test/1 we opt for the simple succeeding goal approach. Using options to the test the user can choose for a more declarative specification. The user can mix both approaches.
The body of the test appears at the position of a clause-body. This simplifies identification of the test body and ensures proper layout and colouring support from the editor without the need for explicit support of the unit test module. Only clauses of test/1 and test/2 may be marked as non-called in environments that perform cross-referencing.


⭐Contribute a profile of any Nigeria president from 1960 till date ⭐
Star
🔗 How to contribute
🔍 List of Nigeria Presidents
Sort by latest
Sort by old


CREATE NEW DISH
Name
empty field!
must be a number
Price
Select Category...
FIRST COURSE
SIDE DISHES
BEVERAGES
DESSERTS
Category
Available Formats
Extra
Description / price
This field is required
Must be a valid number
Save New Dish


(InstaGrap 개발) 코드 채점 프로그램 개발 보고서
by 줌코딩
InstaGraP이란?
인스타그랩은 Instant Programming Assignment Program으로 백준과 프로그래머스와 같은 채점프로그램이다. 이것은 OS에서 배운 Process, Multithread programming, signal, server-client communication 등등을 실제로 구현해볼 수 있는 기회이다. 코드를 제출하는 자(submitter), 코드를 받고 채점거리를 주는 자(Instagrapd), 실제로 코드를 컴파일하고 결과를 확인해주는 자(worker) 을 이용해서 만들었다. ㅎㅎ 아래는 결과 이미지와 보고서이다.
구현 모습
아래 사진들은 구현된 채점 모습이다. UI는 따로 구축하지 않은 점 양해해주길 바랍니당ㅎㅎ
왼쪽이 Worker이고, 중간이 Instagrapd, 오른쪽이 Submitter이다.
컴파일 에러가 있는 코드 제출 시
런타임 에러가 있는 코드 제출 시
채점 시간(3초) 초과 시
에러 없는 코드 제출 시(해당 코드의 Output도 맞는 경우)
보고서
1. Introduction
1.1 The popularity of the Instant Grading Program
If you are a student majoring in Computer Science(CS), you must have heard about Baekjoon or Programmers. They are very popular among CS students as the understanding of Algorithms and Data Structure has been highly valued by many companies. Basically, what the program does is giving a computer problem with certain inputs and make users to make a solution generating certain outputs.
1.2 Motivation for InstaGrap
As we discussed about intercommunication among processes, multiprocessing and multithreading, developing the instant grading program seems to be a good chance to understand what we have learn by actual implementation.
2. Knowledge needed for InstaGrap
2.1 Process Communication
There are two kinds of communication between processes. One is within the process which is, InterProcess Communication(IPC). When a parent process creates a child process, communication between them might be needed. To enable the interaction, shared memory and message passing are used. There is another kind of communication, which happens in client-server process. This can be done using sockets and pipes. A socket is defined as an endpoint for communication. A communication between a pair of applications consists of a pair of sockets, one at each end of communication channel. Pipes provide a relatively simple ways for processes to communicate with one one another. Ordinary pipes allow communication between parent and child processes, while named pipes permit unrelated processes to communicate.
2.2 Multiprocessing and Multithreading
A process is a program in execution. Operating systems provide a mechanism for one process to create new child processes which enables multiprocessing. The parent process can wait for its children to terminate or parent and child processes can execute concurrently. A thread is a flow of control within a process. A multithreaded process can have several different flows of control within a single process. Using multiple threads, the program can have multiple benefits such as increased responsiveness to the user, resource sharing within the process, economy, and scalability factors. By utilizing multiple threads and processes, a program can have many benefits. However, there can be some issues asides from the benefits. It is important to schedule the processes and threads well and make their memory access correct.
2.3 Standard I/O
These are standard streams for input, output, and error output. By default, standard input is read from the keyboard, while standard output and standard error are printed to the screen. To be more precise, stdin, stdout, and stderr are stream pointers available to access the standard streams. These pointers can be used as argument to functions. Typical examples are getchar and putchar. They use stdin and stdout respectively.
3. InstaGrap Implementation
3.1 The Program Overview
This program is to grade a given C file from the user(submitter). When a user gives a C file and user information, the administrator(instagrapd) starts grading with various inputs. The administrator gives tasks to worker to do execution of the code and receives the result from the worker. When the grading is all over, the submitter receives the result.
3.2 Communication Between Processes
There needs to have communication between processes. As each Processes are in remoted places, the communication should not be made by files or IPC methods. For each communication, TCP socket communication. Even though it is slower than the UDP communication, it is more reliable to use TCP socket communication as it checks the connection is successfully made.
Fig 1. The Overall Communication among Processes
However, the cost for the communication is highly expensive for the socket communication. This is because the socket continues to sit and wait for messages to come. Therefore, this program repeats creating and closing the connection between the processes.
3.2.1 between submitter and instagrapd
For the communication between submitter and instagrapd, there are two communications. The first is for giving the student information(the student ID and the password) and the target c file. Once the connection is made and message is successfully delivered, the connection is closed without waiting. The second communication is for checking the result is ready. By giving the student ID and the password, submitter frequently communicate with instagrapd to check whether the result is ready or not. When instagrapd receives the information, it checks whether the grading is done by using check_user_table().(This will be explained in the latter part.) If the grading result is ready, it returns the results to submitter. Otherwise, it tells submitter to wait and close the connection again.
3.2.2 between instagrapd and worker
The communication between instagrapd and worker is made with sockets either. instagrapd sends the code and one standard input(stdin). After worker finishes grading, it returns the grading result back to the instagrapd and closes the connection.
3.2.3 How to send the multiple data in TCP
To send data to each to one another with multiple data, the data has been put into one single string (char*) and used ‘@’ to indicate where to trim. When the data is get to each process, the data is parsed using strtok().
3.3 Inside submitter
submitter receives the data by the arguments. First, it sends the code and the student information to instagrapd. After then, it frequently creates the connection with instagrapd and receives the result back and print.
3.4 Inside instagrapd
When it is started, it creates a port for the submitters to connect. As the connection is made, it creates a child process to handle the communication within the connection and goes back to the listening. When thecode is received from submitter, it makes a connection to worker. Then, it gives worker a stdin file and the code for 10 times. Whenever, submitter makes a connection to instagrapd, it checks the user table to see whether the grading result is ready.
3.4.1 How to store the grading result from worker
As it has to send the code and receive the grading results from worker for the amount of testcases, instagrapd should store the grading result to somewhere. For this, a file named by the student ID is created. and continuously the grading result is accumulated.
3.4.2 Handling Multiple Users
There are global variables to handle multiple users. In instagrapd, arrays for id, password, and finished exist. The array named finished contains information about whether the result is ready or not. When the student information is given, the data is put to empty space for id and pw array.
int id[100]; char pw[100][20]; int finished[100];
As submitter’s request received, it checks whether the ID and the password exist and are correct by check_user_table(). If it is correct, it gets the index according to the id and see finished[index]’s value. If it is 1, the id, pw, finished for the index are all initialized, and returns the accumulated grading result back to submitter. If it is 0, it sends submitter “wait.”
3.5 Inside worker
worker is to compile and run the given source code with the standard input and returns the result to instagrapd. The parent process create child process and run in a synchronous manner.
Fig 2. worker’s process family
3.5.1 How to compile and check
To compile “gcc” command has to be executed. For this, I have used execl. When this function is called, a control is given to the execl process and the termination is made inside the process. Therefore, we have to create a child process to compile. As seen in figure 2, you create a child process. In child process, the parent process waits until the child1 process is over. If there is a compiled file named “test,” the compile succeeds, otherwise the parent process returns the build fail message.
3.5.2 How to execute the compiled file with stdin
As the file named “test” created, the execution with the stdin to create an output starts. To do so, the child process number 2 is created to run the execution. By using freopen, stdin, stdout and stderr file can be decided. All of them work as a real standard input. When the error is detected, it gives error message to the stderr file. If there is no error, then the stdout file will have the result. It returns the result back to the file.
freopen(“input.in”, “r”, stdin); freopen(“output.out”, “w”, stdout); freopen(“error.out”, “a+”, stderr); execl(“test”, 0, (char *) NULL); exit(0);
4. Issues to Discuss
4.1 The Issue of Multithreading and Data size
As it deals with multiple users, and worker has to work at least 10 times per user with different standard input, there has been a possibility of using multithreads. However, we failed to implement multithreading because the data we send to worker gets to big. Sometimes, the testcase input to send to worker is greater than 6 million bytes. We had trouble handling more than one input because of the size. To send multiple data to worker there should be a better way to handle enormously large input data. Moreover, if we can use ThreadPool, it seems to be able to save wasted for creating the process.
4.2 The issue of Pipe
As mentioned above, we used alarm signal to deal with a problem with a run time of more than or same as 3 seconds. Because the process that the alarm signal receives is terminated, we used fork() to create the child process and it handles alarm signal before terminated. Since the child process handles alarm signal, parent process cannot know whether run time exceeds 3 seconds or not. We need a data transfer between parent process and child process. We judged that the pipe was completely suitable to meet our needs. However, we suffered a series of endless debugging. We also saw many memory-related errors that we have never seen since we majored in computer science. It was meaningful, but we found an alternative plan. If we have a chance, I want to implement it using a pipe.
5. GuideLine for this program
5.1 Commands for this program
5.1.1 Submitter Command
./submitter -n
-
Ex. ./submitter -n <IP_ADDRESS>:8090 -u 21500670 -k 12345678 submit.c
5.1.2 Instagrapd Command
./instagrapd -p
-
Ex. ./instagrapd -p 8090 -w <IP_ADDRESS>:8091 ./testcase
5.1.3 Worker Command
./worker -p
Ex. ./worker -p 8091
5.2 How to Use Makefile
- make : you can make instagradp, submitter, worker objects
- make clean : clear everything.
InstaGraP을 마치며..
음… 뭐랄까 진짜 재밌게 할 수 있을거 같았는데 시간이 따라주지 않아서 제대로 끝마치지 못한 것 같아 너무 아쉽다.
그래도 짧은 시간동안 내가 할 수 있는 최선을 다했고 재밌었다. 이제 막 배운 Process, Thread, Signal, 프로세스간의 통신을 실제로 구현해보면서 참 많이 배웠다, OS를 완전 잘 공부했는지는 모르겠지만 물어보면 아 나 그거 해보긴 했어요! 라고 말할 수 있을 것 같다 ㅎㅎ 잘 가랏! 안녀엉~
Subscribe via RSS


Remote Object Proxy
The remote object implementation is a mechanism that enables an local object to control an other object on an other server. Each call method on the local object will do a network call to get information or execute operations on the remote object.
What is remote object proxy ?
A remote object is based on an interface. The remote interface defines the API that a consumer can call. This interface must be implemented both by the client and the RPC server.
Adapters
ZendFramework's RPC components (XmlRpc, JsonRpc & Soap) can be used easily with the remote object. You will need to require the one you need via composer, though:
$ php composer.phar require zendframework/zend-xmlrpc:2.*
$ php composer.phar require zendframework/zend-json:2.*
$ php composer.phar require zendframework/zend-soap:2.*
ProxyManager comes with 3 adapters:
ProxyManager\Factory\RemoteObject\Adapter\XmlRpc
ProxyManager\Factory\RemoteObject\Adapter\JsonRpc
ProxyManager\Factory\RemoteObject\Adapter\Soap
Usage examples
RPC server side code (xmlrpc.php
in your local webroot):
interface FooServiceInterface
{
public function foo();
}
class Foo implements FooServiceInterface
{
/**
* Foo function
* @return string
*/
public function foo()
{
return 'bar remote';
}
}
$server = new Zend\XmlRpc\Server();
$server->setClass('Foo', 'FooServiceInterface'); // my FooServiceInterface implementation
$server->handle();
Client side code (proxy) :
interface FooServiceInterface
{
public function foo();
}
$factory = new \ProxyManager\Factory\RemoteObjectFactory(
new \ProxyManager\Factory\RemoteObject\Adapter\XmlRpc(
new \Zend\XmlRpc\Client('https://localhost/xmlrpc.php')
)
);
$proxy = $factory->createProxy('FooServiceInterface');
var_dump($proxy->foo()); // "bar remote"
Implementing custom adapters
Your adapters must implement ProxyManager\Factory\RemoteObject\AdapterInterface
:
interface AdapterInterface
{
/**
* Call remote object
*
* @param string $wrappedClass
* @param string $method
* @param array $params
*
* @return mixed
*/
public function call($wrappedClass, $method, array $params = array());
}
It is very easy to create your own implementation (for RESTful web services, for example). Simply pass your own adapter instance to your factory at construction time
Tuning performance for production


Security Features
Encryption, SSL secure communication, authentication, and authorization features help to secure the distributed system.
Security features include:
- A single security interface for all components. The single authentication and authorization mechanism simplifies the security implementation. It views and interacts with all components in a consistent manner.
- System-wide role-based access control. Roles regiment authorized operations requested by the various components.
- SSL communication. Allows configuration of connections to be SSL-based, rather than plain socket connections. You can enable SSL separately for peer-to-peer, client, JMX, gateway senders and receivers, and HTTP connections.
- Post processing of region data. Return values for operations that return region values may be formatted.
Overview
An authentication and authorization mechanism forms the core of the internal security of the distributed system. Communications may be further protected by enabling SSL for data in transit.
Authentication verifies the identity of communicating components,
leading to control over participation.
The variety of participants include peer members, servers,
clients, originators of JMX operations, Pulse,
gateway senders and receivers representing WAN members of the system,
and commands arriving from gfsh
on behalf of system users
or administrators.
Connection requests trigger the invocation of an authentication callback. This special-purpose callback is written as part of the application, and it attempts to authenticate the requester by whatever algorithm it chooses. The result is either a returned principal representing the requester’s authenticated identity or an exception indicating that the requester has not been authenticated. The principal becomes part of any request for operations, which go through the authorization process.
Given authentication, isolation and access to cache data and system state can be further protected by implementing the authorization mechanism, also implemented as a special-purpose callback as part of the application. For example, the protection may be to permit only certain system administrators to start and stop servers. The authority to do this needs to be limited to specific verified accounts, preventing those without the authorization. An implementation of the authorization callback will require that an authenticate identity accompanies all requests to the system, and that the system maintains a representation of which identities are permitted to complete which actions or cache commands.


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
Heat the sesame oil in a large frying pan or wok. Add the beef to the pan and stir fry for 1-2 minutes until coloured on all sides. Add the garlic and ginger and stir well. Add the vegetables and stir fry for another minute or until the beef is cooked to your liking.
As soon as the beef is cooked, add the five-spice powder, sesame seeds and lime juice, stir and remove from the heat.
To serve, season with salt and/or soy sauce and divide among four plates.


General election 2019: Farage says Brexit Party candidates offered jobs to quit
Brexit Party leader Nigel Farage has claimed the Conservatives offered his candidates jobs and peerages to try to get them to stand down.
Mr Farage also said his candidates received "thousands of phone calls and emails" trying to get them to withdraw ahead of next month's election.
He made the claims shortly after candidate nominations closed before the 12 December poll.
The Tories denied offering Brexit Party candidates jobs or peerages.
Mr Farage has confirmed his candidates will not contest seats won by the Tories at the 2017 general election, but will stand candidates against the party elsewhere.
Conservative figures have urged his party not to run in Labour-held marginal constituencies, fearing his candidates could divide the Brexit-backing vote.
In a video posted on Twitter, Mr Farage said that he, along with eight "senior figures" in his party, had been offered peerages to stand down.
He said the offer had been made by people "deep inside Number 10 Downing Street" - although he did not think Prime Minister Boris Johnson was involved.
"As you can imagine, I said I do not want, and I will never have, anything to do with this kind of behaviour," he said.
A Tory source has told the BBC the Brexit Party candidate in Peterborough was offered an unpaid role in education in the hope it would convince him to stand aside.
Mike Greene is standing for the party in the Cambridgeshire constituency, which Labour held narrowly at a by-election in June.
It is understood friends of Mr Greene had indicated that the role could be enough of an inducement.
Mr Greene's team confirmed the offer of a role had been made to him, but said their candidate would definitely be running.
'Calls, emails and threats'
Mr Farage also later said his candidates had been "subjected to thousands of phone calls, and emails and threats all over the country" to get them to stand aside.
He said candidates had been offered jobs "in the negotiating team, jobs in government departments and hints at peerages too".
A spokesperson for the Conservative Party said: "We don't do electoral pacts - our pact is with the British people."
"The only way to get Brexit done and unleash Britain's potential is to vote for your local Conservative candidate".
Speaking on BBC Question Time, Conservative party chairman James Cleverly said allegations that his party has offered peerages were "completely unfounded".
"There are a number of people who went to the Brexit Party, who had been up until very, very recently Conservatives," he said.
"I have no doubt that Conservatives will have spoken to people they know locally and said 'if you genuinely want to deliver Brexit, the only way of doing that is with a Conservative majority government'.
"I have no doubt conversations like that have been happening up and down the country."
 Nigel Farage has asked for one for months. We said no."
Labour party chairman Ian Lavery said: "It looks like Boris Johnson is trying to stitch-up this election by offering jobs to Brexit party candidates to get them to stand down.
"This gives a whiff of the corrupt way the establishment works. We can't allow the Tories to run the country a minute longer. It's time for real change."
Liberal Democrat deputy leader Ed Davey said the Conservative Party had seen a "hard-right takeover" that "has now been endorsed by both Trump and Farage".
"As Nigel Farage has admitted, the Liberal Democrats are the only party at this election that can take seats from the Conservatives, stop Brexit and build a brighter future," he added.


All block I/O functions are coroutines...
... as well as some QMP commands (e.g. Block Jobs)
Coroutine *qemu_coroutine_new(void)
{
/* [...] */
arg.p = co;
makecontext(&uc, (void (*)(void))coroutine_trampoline,
2, arg.i[0], arg.i[1]);
/* swapcontext() in, siglongjmp() back out */
if (!sigsetjmp(old_env, 0)) {
swapcontext(&old_uc, &uc);
}
return &co->base;
}
/*
* we want to use bottom half because we want to make sure the below
* sequence of events.
*
* 1. Yield the coroutine in the QEMU thread.
* 2. Submit the coroutine to a worker thread.
* 3. Enter the coroutine in the worker thread.
* we cannot swap step 1 and 2, because that would imply worker thread
* can enter coroutine while step1 is still running
*/
#define v9fs_co_run_in_worker(code_block) \
do { \
QEMUBH *co_bh; \
co_bh = qemu_bh_new(co_run_in_worker_bh, \
qemu_coroutine_self()); \
qemu_bh_schedule(co_bh); \
/* \
* yield in qemu thread and re-enter back \
* in worker thread \
*/ \
qemu_coroutine_yield(); \
qemu_bh_delete(co_bh); \
code_block; \
/* re-enter back to qemu thread */ \
qemu_coroutine_yield(); \
} while (0)


Cisco-IOS-XR-crypto-mibs-ipsecflowmon-cfg API API Reference
API generated from<EMAIL_ADDRESS>API Endpoint
http://{Controller-IP}:{Controller-Port}/restconf/config/network-topology:network-topology/topology/topology-netconf/node/inetri/yang-ext:mount/
URL '/' code: %2F
Schemes: http
Version: 1.0.0
Leaf Color Code:
Key  Mandatory  OptionalPaths
IP-SEC - Update
Update operation of resource: ip-sec
ip-secbody object
200 OK
Successful operation
400 Bad Request
Internal Error
Response Content-Types: application/json
IP-SEC - Create
Create operation of resource: ip-sec
ip-secbody object
200 OK
Successful operation
400 Bad Request
Internal Error
Response Content-Types: application/json
IP-SEC - Delete
Delete operation of resource: ip-sec
200 OK
Successful operation
400 Bad Request
Internal Error
Response Content-Types: application/json
IP-SEC - Retrieve
Retrieve operation of resource: ip-sec
200 OK
Successful operation
400 Bad Request
Internal Error
ISAKMP - Update
Update operation of resource: isakmp
isakmpbody object
200 OK
Successful operation
400 Bad Request
Internal Error
Response Content-Types: application/json
ISAKMP - Create
Create operation of resource: isakmp
isakmpbody object
200 OK
Successful operation
400 Bad Request
Internal Error
Response Content-Types: application/json
ISAKMP - Delete
Delete operation of resource: isakmp
200 OK
Successful operation
400 Bad Request
Internal Error
Response Content-Types: application/json
ISAKMP - Retrieve
Retrieve operation of resource: isakmp
200 OK
Successful operation
400 Bad Request
Internal Error


Kim, JJ., McFarlane, T., Tully, S., and Wong, WWL.
Lenvatinib versus sorafenib as first-line treatment of unresectable hepatocellular carcinoma in Canada: a cost-utility analysis (In Preparation).
Tully, S., Feng, Z., Grindrod, K., McFarlane, T., Chan, KKW., William W. L. Wong, WWL.,
Impact of increasing wait times on overall mortality of Chimeric Antigen Receptor T-Cell Therapy in large B-cell lymphoma: A discrete event simulation model. (In Preparation).
Tully, S., Sonnenberg, P., Mercer, C., Baussano, I.,
National Survey of Sexual Attitudes and Lifestyles: Sexual mixing by age, and the association between age-difference between partners and risk of HPV infection. (In Preparation).


What insights will you uncover today?
Click on your Apps
below to find out:
Information shown in your dashboards will indicate a time stamp of the last update.Talk to your administrator if there is information that you need to view with a different update frequency.
Users can access reports based upon roles. If you need to view additional insights, contact your adminstrator for access.If you have a suggestion for how to improve an existing report, send us your idea to<EMAIL_ADDRESS>System Administrators are able to add new users. Contact your administrator if you know of someone who needs access.
Proskriptive offers a series of Apps that provide actionable information to support the multiple needs of healthcare organizations. For additional information or to demo these apps, contact your System Administrator or email info@proskriptive.com.


After the birth of Holy Mother Sri Sarada Devi, who is worshipped as Holy Mother, the spiritual consort of Sri Ramakrishna, the village began to show signs of prosperity which was not so much in evidence before her advent. The main source of irrigation of the nearby cultivable lands is the big lake called 'Aher' or 'Mother's Tank' or 'Mayer Dighi'; where the visitors and the village-folks take their bath and get refreshed. It is said that the Holy Mother in her girlhood used to cut grass for cows in neck-deep water from this very tank. At present water is supplied to this reservoir from the river Amodar by means of an electric pump and is used for the irrigation of the surrounding fields. There is another tank called 'Barujjey Pukur' (i.e. Banerji's tank) which lies on the south-eastern corner of this village and is surrounded with palmyra trees.
Sri Sarada Devi was born in this village in 1853.[4] This village with its sacred traditions has become a holy place of pilgrimage, particularly among followers of Sri Ramakrishna. On one occasion, the Holy Mother, after touching the dust of this place with her forehead, remarked, One's own mother and the land of birth are even far superior to Heaven.


--- layout: base ---
{{ site.compass.tagline }}
Loves educational technology, material design, oxford commas, and personal finance.


new BindFactory(view, data, debug)
Creates new Bind object or reuses one if it already
exists for a givien view
Parameters:
| Name | Type | Description |
|---|---|---|
view |
string | DOM scope. |
data |
object | Model data to be bound to view. |
debug |
bool | Debug mode. Default is false. |
Methods
(static) build(view, data, debug)
Creates a new Bind object or uses an existing one
Parameters:
| Name | Type | Description |
|---|---|---|
view |
string | DOM scope. |
data |
object | Model data to be bound to view. |
debug |
bool | Debug mode value. |


Please feel free to reach out to us through the form below or by directly sending us an email!
The committee will ensure that your concerns/questions/queries will be addressed.
-
University of Cambridge
-
abacus-committee@srcf.net


×
Purnima Kamath
PAINTINGS GALLERY
CODE GALLERY
BIO
CODE GALLERY
Cellular Automaton
Tweaked the game of life algorithm a little to look pretty. Click on the link for code snippet.
Trignometric Visualizations #1 - sine/cos waves
The first in my hopefully series of upcoming algorithmic visualizations.


Explore
Plus
Go
User
More
Cart
Electronics
TV & Appliances
Men
Women
Baby&Kids
Home & Furniture
Sports,Books & More
Offer Zone
BUY NOW
BUY NOW
BUY NOW
BUY NOW
BUY NOW
BUY NOW
❮
❯


Theme (affects command file import page): light dark
Search type: strict (!we will match !welcome and !wearenumberone, but not !water) loose (!we will match !welcome and !wearenumberone and !water)
!we
!welcome
!wearenumberone
!water
Also search in command descriptions (only recommended to use with strict search type)
Use this extension's server to automatically fetch commands of supported bots
Automatically fetched commands were cached for these channels:
Commands were manually imported for these channels:
Clear cached server data Clear manually imported data Export manually imported data


text above
Some content
text below
T11 With some longer text
T12
T13
T21
T22
T23
T31
T32
T33 with more text


// Update stats
self.average_v += (
(1 - self.average_v_decay) *
(v[0] - self.average_v))
return action
with chainer.using_config("train", False), chainer.no_backprop_mode():
action_distrib, _ = self.model(b_state)
action = chainer.cuda.to_cpu(action_distrib.sample().data)[0]
return action
def stop_episode_and_train(self, state, reward, done=False):


OAuth2 Implicit Flow Sample
This is a demo on how to get a token using the implicit flow.NOTE: This authentication flow should only be used if OAuth2 Code or PKCE flows are not an option for your application. Generally speaking this flow is only applicable for single-page applications (SPA) that need to connect to Saxo's OpenAPI without a back-end server.
(Find your App Key here)
Response:
Click button to launch function.
JS code:
Click button to show code.


Creation of a design conference website. Tasked with forming a team and building a design conference website from ground up. The Thought at Work Design Conference 2017 website is a project almost complete with dozens of late nights spent on it.
October 2016 & Fall 2017
Project manager, lead developer and member of the design team for the Thought at Work 2017 Design Conference website. Building on what I learned as the lead developer on Thought at Work 2016, I formed a team with the best designers and developers at RIT. Our team was made up of 12 students; 7 designers, 5 developers. My responsibilities consist of, but are not limited to: Managing the team; Leading design/development meetings; Working on design deliverables; And writing code for development.
The site is currently under development. Some comps and the GitHub repository can be viewed below.
GitHub Repo
Some Comps for the 2017 site are below
Completed the development of a design conference website. Initially a member of the development team and transitioning to leading the development and executing on the website.
I’ve been involved with the ‘Thought At Work’ design conference for nearly two years in several roles, including work on the core conference team, contacting speakers, helping create installations, and most recently, building the website.
In
mid-July we received the first homepage mock, followed by additional pages in the coming weeks. We used a combination of Bootstrap, our own custom CSS, PHP, JavaScript for some interactions, and JQuery for a handful of animations. I developed
most of the site at first. As other people came on board, I took on a additional managerial role for the entire website and became the lead for the project.
At first we were only given desktop mocks for the site. Two months later we got a mobile mock of the homepage. Without a tablet mock I translated the desktop site to tablet and mobile without compromising the original style and flow of the site content. From a visual perspective the site lost some of its more interesting aspects. But it retained much of the way the content was laid out and that’s what mattered most.
We encountered another challenge very close to the start of the conference. We were given headshots to create a volunteer/team section on the ‘about’ page. We had to display dozens of people with their name and major without losing much performance and load time.
To solve this issue, some JavaScript was written, relying on Imgix, an image compression API, to inject each headshot and appropriate text into the HTML. This compressed the images to a much smaller size without causing performance issues and compromising the resolution.


Select a tab
CMD - tab number
Cycle through tabs in Chrome
CMD - option - left/right
Cycle through tabs in Safari
CMD - option - shift - left/right
Warn before quitting Chrome
Chrome > Warn Before Quitting
Select address bar
CMD - L
Move cursor to start of a line
ctrl - A or CMD - left
Move cursor to end of a line
ctrl - E or CMD - right
Bypass words with the cursor
option - left/right
Delete a word up to the cursor
option - delete
Select text from cursor to start of a line
CMD - shift - left
Select text from cursor to end of a line
CMD - shift - right
Select individual words with the cursor
option - shift - left/right
Move entire lines of text around
CMD - ctrl - up/down
Move cursor to start of a line
ctrl - A
Move cursor to end of a line
ctrl - E
Bypass whole words
option - left/right
Clear the current line
ctrl - U
ctrl - K (clears all text after the cursor)
Search previous terminal commands
Type history
Copy text
Just highlight it and it's copied to clipboard
Print records all on one line
pp (pretty print)
pp User.all
Reference previous command
_
User.first - then - u = _
User.all - then - pp _
Aliases
add to .gitconfig
You can also add other terminal aliases to .bash_profile
e.g. shortcuts to certain directories
Checkout the previous branch with -
git checkout - or g co -
Toggle Command Palette
Open file on Github, Blame, History are some useful examples
CMD - shift - P
Reveal file in tree view
CMD - shift - \
Tab selection
tab
before text but also with any part of line(s) selected
Tab selection back
shift - tab
some part of the line(s) must be selected
Global Search (and replace)
CMD - shift - F
Atom Packages
http://bit.ly/2qGr241


|
Yorick Function Reference
Advanced Array Indexing
- A scalar index or the start
and stop of an index range may be non-positive to reference the
elements near the end of a dimension. Hence, 0 refers to the final element,
-1 refers to the next to last element, -2 to the element before that, and
so on. For example,
x(2:-1) refers to all but the first
and last elements of the 1-D array x. This convention does NOT
work for an index list.
- A range function ifunc may
be followed by a colon and an index range start:stop or start:stop:step
in order to restrict the indices to which the range function applies to
a subset of the entire dimension. Hence, x(min:2:-1) returns
the minimum of all the elements of the 1-D array x, excluding the
first and last elements.
- An index specified as a scalar,
the start or stop of an index range, or an element of
an index list may exceed the length of the indexed dimension ID,
provided that the entire indexing operation does not overreach the bounds
of the array. Thus, if yis a 5-by-6 array, then y(22)
refers to the same datum as y(2,5).
- The expression z(..)
- using the rubber-index operator .. - refers to the entire array
z.
This is occasionally useful as the left hand side of an assignment statement
in order to force broadcasting and type conversion of the right hand expression
to the preallocated type and shape z.
- The expression z(*)
- using the rubber-index operator * - collapses a multidimensional
array z into a one-dimensional array. Even more useful as z(*,)
to preserve the final index of an array and force a two-dimensional result.
|


Not a pro-lawyer movie.
The main points:
1) To get one of those apartments that overlook the Park, you either have to be the Devil, or be in Satan's immediate employ.
2) The scene that most amazes New Yorkers is when Keanu Reeves goes off to confront Satan at the end of the film. He walks onto 57th Street, near First Avenue. 57th Street is empty: you see nothing all the way to the Hudson. My reaction: "Damn, those are great special effects."
All in all, not a bad film. The basic plot is this: Keanu, a hot shot lawyer in Gainesville, FL, is hired by a big NYC law firm. He's treated like a prince, like an heir apparent. There's the fab apartment, vast amounts of money, rubbing shoulders with the Great and Good of the land (Sen. D'Amato does a cameo; that he's in league with Satan is unsurprising), etc.  He's able to get an acquittal, despite seriously believing that the man's guilty. During the course of these events, his young wife is isolated in the huge apartment, and she starts seeing weird things all over the place. Weird dreams ensue, demons appear in mirrors, and so on.
I actually liked this film a lot. The previews and the commercials make it seem hokey, but it's pulled off well. I also have a large bias against Keanu being anything other than Ted (which, btw, was on TBS a couple of weeks ago), but, unlike in, say, Johnny Mnemonic, he didn't suck. I suppose this was the first step in the road to redemption, that eventually leads to The Matrix. I watch "Buffy The Vampire Slayer" in part for its idea of personifying high school trauma in the form of vampires. I suppose I can only appreciate this attempt to make literal the idea of a defense lawyer selling his soul to get a guilty client off.
One very nice touch: when Keanu's first in NYC (the city, by the way, is in the "whore of Babylon" mode in the film), he's taken by Al Pacino to the roof of the building (the office decor actually looks like a well-lit Quake room, which merely means I've played too much Quake). They bargain for his employment while strolling along the edge. This, I suppose, is a reference to the part when Satan tempts Christ in the desert, the part when they go up on the mountaintop and Satan offers up the dominion of the world. Keanu, of course, accepts. (This may be one flaw with the film: Keanu accepts too readily; there's some moral choice, but we don't feel it viscerally. Keanu doesn't really fall, he just sort of drifts down there.)
Actually, in a further divergence, I had a flashback to high school English class, where, I think, we talked about Graham Greene or Sommerset Maughin (sp?). One of them extended the parable of Satan tempting Christ with a final offer by Satan: "Go up on the cross, wear a crown of thorns, and you will become the savior of mankind." If I recall, the passage goes on with Christ accepting, and Satan laughing until his sides hurt, knowing all the wars and destruction that will be committed in the name of god. I'd like to read a similar thread in this movie. At the end, Al Pacino has grand plans for Keanu. One can read the sin of vanity into this, and the film's very neat ending.
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


fun readInt(key: String, defaultIntValue: Int = 0): Int
Reads an Int from SharedPreferences. If no value is found the method returns 0 by default
key
- the key provided to find the stored value
Return
Int the value
saved to SharedPreferences of type Int


Posted by Nicolas Pecher on October 16, 2019
Posted by Nicolas Pecher on November 5, 2019
Posted by Maxime De Grauwe on November 19, 2019
Posted by Nicolas Pecher on December 14, 2019
Posted by Maxime De Grauwe on December 15, 2019
Posted by Nicolas Pecher on December 16, 2019
Posted by Nicolas Pecher on December 23, 2019
Posted by Nicolas Pecher on February 25, 2020
Posted by Nicolas Pecher on March 22, 2020
Posted by Maxime De Grauwe on March 22, 2020
Posted by Nicolas Pecher on april 14, 2020


{% extends "layout.nunjucks" %} {% block content %}
Sorry! There was a problem. Please click here to return to the home page.


Exercise Tracker
Create a New User
Username
Add Exercise
Username
Description
Duration (minutes)
Date
Exercise Log
Username
From
To
Limit


Hi.
What will happen if a remote server (EmonCMS) is down for a longer period of time?
Will EmonHub keep storing buffers in the memory until the Raspberry Pi does not have any memory left?
If not, how much is the maximum amount of space that EmonHub can use?
Re: Can EmonHub run out of memory?
The emonhub buffers have a default size of 1000 frames, frame sizes vary considerably depending on the count and types of variables etc. That size can be set in the [reporters] section of emonhub.conf.
Each reporter has it,s own buffer so the size can be set to a low number for a local emoncms whilst still maintaining a larger buffer for a remote emoncms.To change from the default of 1000 add a "buffer_size = 12345" line in a reporters [[[init_settings]]].
There are a lot of factors to consider if you decide to increase dramatically, I have one Pi that receives a 5 integer frame every 5 secs and that has a 30000 frame buffer which has absolutely no problem running on a Pi B (512mb RAM) with raspian in read-only mode. Read-only is more RAM dependent as there is no caching and also the logfiles are written to RAM too. emonhubs logfiles are limited in size too so even if you have a runaway issue the emonhub logs cannot choke the Pi,
Because it's the number rather than the size of the buffers that is managed you will need to tally up the frequency and size of all your nodes to get an idea of how much time a buffer will cover and how much RAM will be used to do so.
I couldn't predict what the maximum would be that it could safetly use without causing issues for the OS etc that depends on what other stuff is going on but unless you are running many nodes with frequent and large data payloads and/or sending to several emoncms servers I would be very surprised if the buffers could choke a Pi with 512mb RAM, I have not tested an A (256mb) and expect the 2B (1024mb) to be way more superior.
See the emonhub's data buffers for a bit more info too.
Paul


{% load i18n %}
{% url "control:event.order" organizer=event.organizer.slug event=event.slug code=order as ourl %} {% blocktrans trimmed with order=""|add:order|add:""|safe %} The order {{ order }} was placed using payment via {{ name }}! {% endblocktrans %}


{% extends "base.html" %} {% block content %}
This is a small full stack Project Management application. Through the application, a user can create and update projects. The user can create employees. Once employees have been created, then those employees can be assigned or unassigned to projects.
Use the below buttons to quickly create a project or employee.
Add Project Add Employee


What is TTML?
TTML is a shortform for (Taxi To Markup Language)
TTML is a lightweight language that compiles to Markup it extends normal markup language and providing a quicker and cleaner way to generate markup on the fly
Why TTML?
You need to at least basic experience in Markup language to use TTML
If you have this it will take less than thirty minutes to get started
This documentation was created using TTML by the way then converted to HTML
To see code add /ttml to any page url in this website eg: /documentation/ttml
Below we are going to introduce you to the basic syntax that you need to know:
# =>
used to indicate you want the interpreter to ignore this line
! =>
Used for comments(TTML) this do not appear in your final product
% =>
used to ignore multiple lines until the next (%) which indicates the end of that section
{} =>
used for tags
& =>
used for imports
Lastly, between the exclamation marks we declare some common attributes class or id or href or src or just all of them, your choice.
Imagine that is all plus your Knowledge in Markup and other
If you feel uncomfortable just go to the menu and click Try it here! type and compile the code to see the results yourself
We will have TTML code on one side and Markup code on the other side
!This is a TTML comment it will not appear in your product # body{ div class="col-md-6"{ p{Hello World!!} } audio src="Good_life.mp3" controls }

Hello World!!

 <audio src="Good_life.mp3" controls>
I hope that simple example has been understood
{} indicate the start and end of tags all the content you want inside should go in the braces
text goes between the curly braces eg: p{hello} to
hello

Multi line tags eg: body in the example body{ and close this tag where you want body to end }
Single line tags with no text are just quick to handle eg: img src="one.png" to
The comments that you do not want to appear in your final product are wiritten after !
Lets extend this TTML code using HTML as we said this language is not limiting
You can even write your whole TTML code with HTML
Check out below:
# P{ #This is a line in a multiline stament br #This is another line
 #<--This # sign indicate that this line should not be executed--> #This is inserting html code } %
this is inserting actual html code between % sings

You can write even the whole document in html as long is it is between % signs or after the # signs
 %

 This is a line in a multi line statement
 This is another line
  This is inserting html code

this is inserting actual html code between % sings

You can write even the whole document in html as long is it is between % signs or after the # signs

=> After the # sign or between % signs you can add HTML code
=> When writing check what is the best option at that area to maximize productivity
You can use HTML especially between text to make work easier
You can HTML or any other language between % and % , you are not limited to HTML but also can be used for style,script,PHP,text,...
This syntax is not so different from HTML but with simple modification see below:
=> When using XHTML use img src="one.png"/ to produce  or
=> img src="one.png"{} to produce
=> You can use any of the two methods above to ensure that all your tags are all closed
body{ # % # <?php echo "Hello world!!" ?> % }
body{ # style type="text/css"{ % body{background: #333} p{color: white} % } script type="text/javascript"{ % window.onload=function (){ alert("This is TTML"); } % } }
# body{ table border=3{ <%ENV.keys.each do |e|%> tr{ th{<%=e%>} td{<%=ENV[e]%>} } <%end%> } <%a="hello world"%> p{<%=a%>} }
After the # or between % and % you can put any language or normal text
TTML offers native support for ERB templating you can add erb code in your file like the example above
The erb is executed during interpretation to Markup, but to do this you have to initialize the Route class with true parameter as erb is not enabled by default
Use the following:
tax = Route.new(a,String.new,true) for test and prototype methods
tax = Route.new("test.ttml","test.html",true) for pipe and start methods
You can use ERB to format the output to tags eg: mathematical operations and string formats eg: sp{<%="Hello".reverse%>} or sp{<%=566*5666%>}
This shall be quick and easy if you have basic knowledge in XML we shall not go into the advanced parts
TTML supports full XML syntax so no there is need to worry
This is a Quick example that gives the basic idea but you can explore more
# students comment="new students"{ student{ name{Scott} age{17} home{England} } student{ name{Mary} age{23} home{USA} } }
 <students comment="new students"> <student> <name>Scott</name> <age>17</age> <home>England</home> </student> <student> <name>Mary</name> <age>23</age> <home>USA</home> </student> </students>
To import a file begin a new line with &X where X is the name of the file you want to import
For TTML files you do not need to add the file extension do &header to import header.ttml
The rules apply the same about #, % and %
If you want a TTML file to be executed import it outside the % and %
To import any other type of file eg a stylesheet, script file import it between % and %
check the example below:
If the file you are importing also has imports and continuing you will get all the data from the other files and all their imports
example: if you file imports &help.ttml then this file imports &about.ttml you will get both help.ttml and about.ttml in your file
!DOCTYPE html html{ # &header # body{ section class="blogs"{ &blog } footer{ % &footer.html  % } # % <?php &login.php ?> % } script type="text/javascript"{ % &path/to/script.js % } }
All the other examples above have been written in a relatively familiar syntax but now lets dig into some TTML syntax
Shortcuts is a simple library with shortened commonly used HTML tags
Shortcuts are only executed as for TTML code not the Markup code you can write
They are meant to make your work as a developer much easier
Check out the example below to demonstrate that (the output is below):
doc5 ht{ hd{ utf8 view1 --d a simple startup site tt{TTML} } bd{ sp{Hello World} bq{ #This is a line in a blockquote } } }
<!DOCTYPE html>   <meta charset="UTF-8"/> <meta name="viewport" content="width=device-width,initial-scale=1.0"/> <meta name="description" content="a simple startup site"/> <title>TTML</title>   Hello World
 This is a line in a blockquote </blockqoute>
This was just a sample of using shortened tags for tags in HTML
The aim was to shorten HTML tags to 2 or 3 characters for easier use
There is a whole library of these shortened tags that you may use to make your development faster
Check the table below that contains:
Shortcut table click here!
| Taxi | HTML |
|---|---|
| ht | html |
| doc5 | <!DOCTYPE html> |
| utf8 | <meta charset="UTF-8"/> |
| view1 | <meta name="viewport" content="width=device-width, initial-scale=1.0"/> |
| xml | <?xml version="1.0" encoding="UTF-8"?> |
| d | div |
| hd | head |
| mq | marquee |
| tt | title |
| sm | small |
| str | strong |
| opt | option |
| sel | select |
| bq | blockquote |
| sec | section |
| can | canvas |
| sp | span |
| ft | footer |
| hdr | header |
| ad | audio |
| vd | video |
| ifr | iframe |
| tbl | table |
| fm | form |
| in | input |
| txt | textarea |
| add | address |
| asd | aside |
| btn | button |
| emb | embed |
| scp | script |
| stl | style |
| lk | link |
| mt | meta |
| cd | code |
| Below is the meta package [x or y] is the value you want to set | |
| --k x,y | <meta name="keywords" content="x,y"/> |
| --d x | <meta name="description" content="x"/> |
| --ch x | <meta charset="x"/> |
| --vp x | <meta name="viewport" content="width=device-width,initial-scale=x"/> |
| --ic x | <link rel="icon" href="x"/> |
| --t x | <title>x</title> |
| --sp x |  |
| --st x | <link rel="stylesheet" href="x"/> |
| --d x | <meta name="description" content="x"/> |
| The tag below is used to describe your own meta tags | |
| --s namex = contenty | <meta name="namex" content="contenty"/> |
| --p property = content | <meta property="property" content="content"/> |
Its not a must you use this tags, you can continue using normal HTML tags until you are used to this syntax
The tags are meant to make your work easier
Some tags that are no listed here indicate we decided to go for the actual HTML tag e.g p,b,i
Learning to master this tags can come in handy in future projects
TTML allows you to write your own tags like how you do with XML
This increases the efficiency in maintenance of your project as the tags are descriptive
But to use this feature you need basic knowledge in Ruby to be able to edit the Shortcuts module
Check the simple example below:
Here is a simple explanation of how this example works
You can instruct the interpreter the following:
single_blog => div
blog_name => h3
blog_release => p
blog_likes|blog_comments => span
Whenever the compiler sees the tag <single_blog> it knows you indicate

Hence it produces
 in your HTML product when interpreted and respectively for all other examples
When editing you should supply the your tag and then the HTML tag it should represent
Shortcuts may be useful at times but sometimes can mess you up, maybe you are creating XML and the name of your tag was already declared as a shortcut
But do not worry we foresaw the challenge and made using Shortcuts optional
Shortcuts are enabled by default check disabling shortcuts to see how to disable them during execution
TTML provides you with a comfortable way of declaring attributes for tags
You can declare them as normal HTML attributes or TTML attributes(limited)
TTML attributes are limited to four most used tags that we observed: class,id,href and src
This attributes are declared inside ! and ! signs and attributes separated by a comma
Check the example below:
# d !top_sect,wide-sect,#real,@http://www.youtube.com,>one.mp3!{}

Declare class attribute by no additional text eg: sp !red!{} to
Declare id attribute by prefixing with # eg: sp !#red!{} to
Declare href attribute by prefixing the link with @ eg: a !@http://google.com!{Google} to Google
Declare src attribute by prefixing source with > eg: img !>one.png! to
You can declare as many attributes of the different types as long as they are separated by a comma
Due to the fact that TTML produces indented code we also have a flag that allows you to join all the lines of your code at one go
To initialize put --j in a new line of your code this will join all lines until the next --j
If you want to join your whole code then insert this flag as the first line of your code


--- layout: page title: Advanced Tutorial date: 2014-08-01 03:53:28.000000000 +08:00 permalink: /getting-started/advanced-tutorial/ ---
The Open Data Protocol (OData) is a data access protocol built on core protocols like HTTP and commonly accepted methodologies like REST for the web. There are various kinds of libraries and tools can be used to consume OData services. But for beginners and those who want to write their own libraries, the pure HTTP requests and responses are also very important. This documentation will not cover every feature details for OData V4 services but will try to cover various typical scenarios. If you want to have a more detailed understanding, please refer to OData Documentation.
serviceRoot
below with the URL https://services.odata.org/V4/TripPinServiceRW
. TripPin now supports ETag, so for data modification topics, you should first using GET on TripPin (eg. GET serviceRoot/People) to get the section information in the payload then use the URL with section for data modification examples. (something looks like https://services.odata.org/V4/(S(flat4rgegiueineatspfdku1))/TripPinServiceRW)Singletons are single entities which are accessed as children of the entity container.
The request below returns the singleton Me
GET serviceRoot/Me
Response Payload
The request below returns the property AddressInfo of singleton Me.
GET serviceRoot/Me/AddressInfo
Response Payload
}
The request below updates the UserName of Single Me.
PATCH serviceRoot/Me
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json
{
<EMAIL_ADDRESS>: "Microsoft.OData.SampleService.Models.TripPin.Person",
"UserName": "AprilTripPin"
}
Response Payload
OData now supports derived entity type. Entity types may derived by single inheritance from other entity types. In the sample TripPin service, the entity type Event and Flight both derive from entity type PlanItem.
The request below returns the flight of with PlanItemId 21.
GET serviceRoot/People('russellwhyte')/Trips(1003)/PlanItems(21)/Microsoft.OData.SampleService.Models.TripPin.Flight
Response Payload
The request below shows how to get the derived enity set Flights.
GET serviceRoot/People('russellwhyte')/Trips(1001)/PlanItems/Microsoft.OData.SampleService.Models.TripPin.Flight
Response Payload
The two request below shows how to filter on derived entities. These requests return all Flight deriving from PlanItem which has FlightNumber as 'VA1930'.
serviceRoot/People('russellwhyte')/Trips(1001)/PlanItems?$filter=Microsoft.OData.SampleService.Models.TripPin.Flight/FlightNumber eq 'VA1930'
serviceRoot/People('russellwhyte')/Trips(1001)/PlanItems/Microsoft.OData.SampleService.Models.TripPin.Flight?$filter=FlightNumber eq 'VA1930'
Response Payload
The request below creates an event entity in trips. Event derives from PlanItem.
POST serviceRoot/People("russellwhyte")/Trips(1003)/PlanItems
OData-Version: 4.0
Content-Type: application/json
;
odata.metadata=minimal
Accept: application/json
{
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.Event",
"ConfirmationCode": "4372899DD",
"Description": "Client Meeting",
"Duration": "PT3H",
"EndsAt": "2014-06-01T23:11:17.5479185-07:00",
"OccursAt": {
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.EventLocation",
"Address": "100 Church Street, 8th Floor, Manhattan, 10007",
"BuildingInfo": "Regus Business Center",
"City": {
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.City",
"CountryRegion": "United States",
"Name": "New York City",
"Region": "New York"
}
},
"PlanItemId": 33,
"StartsAt": "2014-05-25T23:11:17.5459178-07:00"
}
Response Payload
The request below updates an event. Event derives from PlanItem.
PATCH serviceRoot/People('russellwhyte')/Trips(1003)/PlanItems(5)/Microsoft.OData.SampleService.Models.TripPin.Event
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json
{
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.Event",
"Description": "This is a new description"
}
Response Payload
The request below deletes the flight plan item with Id '21' from a trip of person. Flight derives from PlanItem.
DELETE serviceRoot/People('russellwhyte')/Trips(1003)/PlanItems(21)/Microsoft.OData.SampleService.Models.TripPin.Flight
Response Payload
Containment navigation properties define an implicit entity set for each instance of its declaring entity type. This implicit entity set if identified by the read URL of the navigation property for that entity. The request below returns the contained navigation property Trips of entity set People.
The request below returns Trips for a person where Trips is a containment navigation property for Person.
GET serviceRoot/People('russellwhyte')/Trips
Response Payload
The request below creates a Trip for Person with UserName 'russellwhyte'. Trips is a contained navigation property for Person.
POST serviceRoot/People('russellwhyte')/Trips
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json
{
<EMAIL_ADDRESS>: "Microsoft.OData.SampleService.Models.TripPin.Trip",
"TripId" : 3,
"ShareId" : null,
"Description" : "Create Containment",
"Name" : "Test Trip",
"StartsAt" : "2014-01-01T00:00:00+08:00",
"EndsAt" : "2014-02-01T00:00:00+08:00",
"Budget" : 1000,
"Tags" : [
"Test Tag 1",
"Test Tag 2"
]
}
Response Payload
The request below returns Trips that contains 'New York' in its description of Person with UserName 'russellwhyte'.
GET serviceRoot/People('russellwhyte')/Trips?$filter=contains(Description, 'New York')
Response Payload
The request below updates the contained Entity Trip.
PATCH serviceRoot/People('russellwhyte')/Trips(1001)
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json
{
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.Trip",
"Description": "This is a new description"
}
Response Payload
{% highlight javascript%} HTTP/1.1 204 No Content {% endhighlight %}The request below deletes a contained Entity Trip.
DELETE serviceRoot/People('russellwhyte')/Trips(1001)
Response Payload
OData V4 supports entity or complex types which allow clients to persist additional undeclared properties. Such entities and complex types are called open types.
When create or update an open entity, undeclared properties can be added.
The request below shows how to add an undeclared property Description when create the open entity Person.
POST serviceRoot/People
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json
ETag: W/"08D15F3DD9126D84"
{
<EMAIL_ADDRESS>: "Microsoft.OData.SampleService.Models.TripPin.Person",
"UserName": "teresa",
"FirstName" : "Teresa",
"LastName" : "Gilbert",
"Gender" : "Female",
"Description": "Big fan for travelling",
"Emails"<EMAIL_ADDRESS><EMAIL_ADDRESS>"AddressInfo" : [
{
"Address" : "1 Suffolk Ln.",
"City" :
{
"CountryRegion" : "United States",
"Name" : "Boise",
"Region" : "ID"
}
}]
}
Response Payload
The request below shows how to add an undeclared property Description when update the open entity Person.
PATCH serviceRoot/People('keithpinckney')
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json
{
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.Person",
"Description": "Big fan for travelling"
}
Response Payload
{% highlight javascript%}
HTTP/1.1 204 No Content
{% endhighlight %}
OData V4 also supports open type for complex types.
The request below show how to add undeclared property Description when create new instance with AddressInfo of open complex type Location.
PATCH serviceRoot/People('russellwhyte')
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json
{
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.Person",
<EMAIL_ADDRESS>"#Collection(Microsoft.OData.SampleService.Models.TripPin.Location)",
"AddressInfo": [
{
"Address": "187 Suffolk Ln.",
"City": {
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.City",
"CountryRegion": "United States",
"Name": "Boise",
"Region": "ID"
},
"Description": null
},
{
"Address": "XuanWu Load 555",
"City": {
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.City",
"CountryRegion": "China",
"Name": "NanJing",
"Region": "JiangSu"
},
"Description": "Nice Location"
}
],
"Concurrency":<PHONE_NUMBER>93486800,
"Description": null,
<EMAIL_ADDRESS>"#Collection(String)",
"Emails": [
<EMAIL_ADDRESS><EMAIL_ADDRESS>],
"FirstName": "Russell",
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.PersonGender",
"Gender": "Male",
"LastName": "Whyte",
"UserName": "russellwhyte"
}
Response Payload
The request below show how to add undeclared property Description when update an instance with OccursAt of open complex type EventLocation.
PATCH serviceRoot/People('russellwhyte')/Trips(1003)/PlanItems(5)/Microsoft.OData.SampleService.Models.TripPin.Event
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json
{
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.Event",
"OccursAt": {
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.EventLocation",
"Address": "10 Beijing Street, 100000",
"BuildingInfo": "Beijing Restaurant",
"City": {
<EMAIL_ADDRESS>"#Microsoft.OData.SampleService.Models.TripPin.City",
"CountryRegion": "China",
"Name": "Beijing",
"Region": "Beijing"
},
"Description": "Beautiful City."
}
}
Response Payload
Batch requests allow grouping multiple operations into a single HTTP request payload. The Batch request below contains the following operations in order listed:
1. A query request, returns all Airlines.
2. Create an entity, a new Airline.
3. A second query request Airlines.
POST serviceRoot/$batch
OData-Version: 4.0
Content-Type: multipart/mixed;boundary=batch_36522ad7-fc75-4b56-8c71-56071383e77b
--batch_36522ad7-fc75-4b56-8c71-56071383e77b
Content-Type: application/http
Content-Transfer-Encoding:binary
GET serviceRoot/Airlines HTTP/1.1
Accept: application/json;odata.metadata=minimal
--batch_36522ad7-fc75-4b56-8c71-56071383e77b
Content-Type: application/http
Content-Transfer-Encoding:binary
Content-ID: 1
POST serviceRoot/Airlines HTTP/1.1
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json;odata.metadata=minimal
{
<EMAIL_ADDRESS>: "Microsoft.OData.SampleService.Models.TripPin.Airline",
"AirlineCode" : "EK",
"Name" : "Emirates Airline"
}
--batch_36522ad7-fc75-4b56-8c71-56071383e77b
Content-Type: application/http
Content-Transfer-Encoding:binary
GET serviceRoot/Airlines HTTP/1.1
Accept: application/json;odata.metadata=minimal
--batch_36522ad7-fc75-4b56-8c71-56071383e77b--
Response Payload


From:Geaccone To:Hayslett; Stark Sent:2017-01-11T04:38:50.0000000Z Subject:4 Quarter EEOS
Corp has been showing a previos IBIT of a positive $15MM for EEOS. I am not sure what you will see today. The attached file explains from the $15MM to the previous forecast of ($35.9).
***********
EDRM Enron Email Data Set has been produced in EML, PST and NSF format by ZL Technologies, Inc. This Data Set is licensed under a Creative Commons Attribution 3.0 United States License <http://creativecommons.org/licenses/by/3.0/us/> . To provide attribution, please cite to "ZL Technologies, Inc. (http://www.zlti.com)."
***********
California


 Josh Aronson's documentary, by analogy, is full of sound and fury but signifies...literally. "Sound and Fury," which gets its name from the Shakespearean quote, is about the controversy aroused by a fairly new technique known as cochlear implants--which can enable deaf people to hear. For some characters in this picture, signifying, i.e. sign language, replaces sound, while for others who want to hold on to this form of communication and their opponents alike, fury reigns. Aronson's documentary, which deals not so much with the technical aspects of cochlear implants, focuses strongly on the emotional frenzy that this fairly new technique has engendered and is the sort of documentary that the "talking-heads" school of filmmakers should copy. Avoiding the procedure used by most documentarians, an approach that embraces a deadly-dull series of interviews, Aronson pumps us the drama by having his subjects actively engage each other in what is a virtual knock-down, drag-out battle over an issue that most of us had probably never before considered to be controversial.
That issue is this: imagine that you and your wife have been deaf since birth. You have a baby daughter who is also born deaf and whom you support with a good job with a Wall Street firm. While you get along with your fellow executives who are all hearing people, outside of work you have socialized almost exclusively with deaf people with whom you communicate by sign language. You have no idea what "music" means, you appreciate the beauty of a rainstorm though you do not hear the pitter-patter of the drops or even the loud claps of thunder. Essentially you are part of--and cherish--an entire culture separate from the hearing majority. You precocious daughter has picked up sign language and seems happy enough.
Along comes a new technology, the cochlear implant, which is a device implanted with invasive surgery into the hearing canal and which can restore with reasonable accuracy your child's ability to hear and, with the help of intensive speech therapy, to speak normally. Would you spring for the surgery if you had the money and wanted only the best for your child?
Sounds like a no-brainer, doesn't it? Handicapped kid restored to the healthy world through a miraculous device? Not at all. The fury of two parents in particular, Peter Artinian and his wife Nita, will expose you to a subject that you never would imagine to be controversial. Peter does not want his five-year-old daughter Heather to have the operation. Why? Is it because he feels that the device implanted in the ear with a correlative contraption hanging outside will make her look freakish? Is it because he fears that the operation will be unsuccessful and could somehow damange Heather even further? Not at all. Peter actually embraces his condition-- which he obviously does not consider a handicap. He argues, usually vociferously if that's the word we can use with one who does not hear or speak, that he is part of a valuable culture that he does not want his daughter to lose.  He had not known that his own mother refuses to accept deafness as a feature to be embraced rather than treated as a woeful handicap.
 Chris wants his infant son to undergo the surgery and he is supported strongly by his wife, Emily. Aronson opens up his film to bring in an array of people from outside the extended family, including members of an excellent school for the deaf in Maryland (where Peter, Nita and Heather are going to move so that they can immerse themselves totally into the culture of the deaf), doctors and support personnel in the field of otolaryngology, and an expanded community of deaf people who eschew changing their ways.
The documentary is awesome not only because Aronson bypasses the usual talking-heads syndrome but because he follows these people around and makes their regular argumentation seem to be actually happening as though they were not acting in front of a camera. He even captures part of an actual operation that took place on Chris's infant. And when a documentary makes a spectator want to jump out of his seat and throw tomatoes at some of the performers, you know that the film maker has captured the imagination of the audience. I sat in my seat dumbfounded and appalled at this huge Luddite of a man who would veto this miraculous surgery for his gifted daughter (and brainwash her into liking her present, deaf condition) knowing that this is not the kind of decision that the kid should make later when she is of age. The operation simply cannot wait that long. Only when the hospital can implant the device on a very young child does it work well. Wait until adulthood and you will have perhaps a 20% success rate, furnishing patients who will be able to hear only muffled sound.
I can understand perfectly the view of a Chinese-American parent who fears that his son is becoming too Americanized-- that the kid will refuse to speak or even learn Chinese, will eschew garlic shrimp in black bean sauce in favor of a bland McDonald cheeseburger, and will become as undisciplined as the hoods in his local public school. But I cannot for the life of me fathom the concept that it's not only good to be deaf but that given the opportunity to give your son or daughter the power to hear, you would deny this technology to your loved one. When those who oppose Peter and Nita's decision are given time to express their views, I felt like leaping up in my seat and shouting, "Hear, Hear!" Ultimately the emotions that Aronson evokes in his audience are what make this film a must-hear.
Not Rated. Running time: 80 minutes. (C) 2000 by Harvey Karten<EMAIL_ADDRESS>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


Marionette-FreeForms is a library of models and views you can use to build forms in Marionette, using model validation to display contextual error messages as users fill out your forms. Choose an example to see it in action.
Marionette-FreeForms is a library of models and views you can use to build forms in Marionette, using model validation to display contextual error messages as users fill out your forms. Choose an example to see it in action.


Pirate (ARRR) is a cryptocurrency that solves the issue of financial privacy on the blockchain through forced anonymous transactions. Protect your wallet and transactions with Pirate’s completely anonymous network. With forced private transactions, your privacy cannot be compromised by another users’ activity on the network. If you wish to learn more, please join the official Pirate Discord at https://pirate.black/discord/ or message FishyGuts#5085, who will be happy to help out.
100 messages
Before 05-Dec-19 12:00 AM
Alright02-Oct-18 08:45 PM
but notaries themselves were not ready
ComputerGenie 👴👴👴02-Oct-18 08:45 PM
k
CHMEX02-Oct-18 08:45 PM
so adding dpow -> increase of mining -> increase of diff -> increase of value
2
so lets get some emc2
Buddz199302-Oct-18 08:53 PM
Guys for this :’ Just testin' our Pirate vote track'n cuz we can't count due to this hook.
Bonus: FREE 77.7 $ARRR inside
To Enter:
Retweet this tweet and tag three pirate mates + #ARRRforprivacy
If I completed all steps do I get the 77 pirates in my z address ??
one of the things I'm confused about is that I limit it at 0.1msol/s but sometimes it runs at double that...
FishyGuts03-Oct-18 02:27 AM
Just to clarify - the 77.7 Pirate will be paid out after the contest ends.
Also, it appears some people are putting Pirate addresses that begin with S ? Not sure where that comes from but all pirate addresses will begin with z, right?
grewalsatinder03-Oct-18 02:38 AM
Yes
zc
rrrj28803-Oct-18 02:59 AM
@FishyGuts 'S' maybe their privkey..
FishyGuts03-Oct-18 03:04 AM
Damn. “With great power comes great responsibility.”
Will email them direct.
I can’t send to a privkey can I? The 77.7 pirate?
bishop03-Oct-18 03:14 AM
someone sent in their privkey?!
Dr Debt03-Oct-18 03:14 AM
Hold on what’s up with 77.7 pirate?
bishop03-Oct-18 03:15 AM
twitter contest I think
ComputerGenie 👴👴👴03-Oct-18 03:47 AM
I can’t send to a privkey can I?
no, but you can own anything sent to the addy thats owned by that key (edited)
Flexatron03-Oct-18 03:54 AM
Lmao
Mylo03-Oct-18 04:16 AM
No. And nobody share privkey with anyone ever
And purchasing wallet.dat files is also a no-no.
Bryan_Beus03-Oct-18 04:18 AM
@FishyGuts
I'm a bit behind - where are people sharing their privkeys?
We need to stop this asap.
FishyGuts03-Oct-18 04:25 AM
@Bryan_Beus Of course. It was an accident by someone entering the contest. They are supposed to send the zaddress
I Was looking thorugh the entrants addresses and I saw one with an S not a z.
1
I am emailing them to let them know I have destroyued their entry and they will need to re-enter the contest properly.
I have 39 zaddresses and one S address.
Dr Debt03-Oct-18 04:27 AM
I need to enter it lol
Bryan_Beus03-Oct-18 04:51 AM
Ok, I'm glad to hear it's just an isolated incident.
Flexatron03-Oct-18 04:58 AM
Anyone has a recent dump of the pirate chain?
Syncing and downloading is awfully slow at my laptop
@0x03 I remember you had one from vrsc
ComputerGenie 👴👴👴03-Oct-18 04:59 AM
#UseWire
Dr Debt03-Oct-18 05:00 AM
if everyone could quit mining for 3-4 days I could make a lot of pirate
ComputerGenie 👴👴👴03-Oct-18 05:06 AM
If you pay me what I make in 4 days, then I'll stop mining for 4 days
Dr Debt03-Oct-18 05:24 AM
Gordon Komodo03-Oct-18 05:32 AM
if you guys could just give me 1 mil pirate for free , It's all for marketing , I promise (edited)
ComputerGenie 👴👴👴03-Oct-18 05:32 AM
will not even give 1M PIZZA away for free
1
1
Dr Debt03-Oct-18 05:34 AM
Lmao @Gordon Komodo but what if I want to build a pirate ship?
My concrete recipe we will be building with does float... just sayin
Gordon Komodo03-Oct-18 05:36 AM
then I will need another mil PIRATE in my pocket
Dr Debt03-Oct-18 05:37 AM
Electronics and the open seas are a recipe for disaster!


| Number_of_Pitches | Number_of_Pitch_Classes | Range | Mean_Pitch | Mean_Pitch_Class | Most_Common_Pitch | Most_Common_Pitch_Class | Prevalence_of_Most_Common_Pitch |
|---|---|---|---|---|---|---|---|
| 34 | 10 | 60 | 1 | 48 | 2.817 | 36 | 0 |
| Prevalence_of_Most_Common_Pitch_Class | Interval_Between_Most_Prevalent_Pitches | Interval_Between_Most_Prevalent_Pitch_Classes | Pitch_Variability |
|---|---|---|---|
| 0.3271 | 0 | 12 | 13.66 |


Ghouls Near Greenlake 2019
It's a wrap! The last-ever GNG party was a ton of fun. Thanks to everyone who came out to make it a memorable evening.
Photos are now available (see
below
).
If you have photos to share, please send them to<EMAIL_ADDRESS>Walk-Off Results
2019 GNG Champion: News Crew
Runner-up: Phil/Phyllis
Third Place: Teen Wolf
Best Throwback: 70's Flasher
Congratulations to the other finalists this year
Blackberry
Cobra Kai (Johnny)
Mad Hatter
Wine Box
Photos & Highlight Video
There are two sets of photos. Use the links below to view them:
Highlight Video
- This is a 3 minute video set to music.
Trophy Poses
- These are the photos of folks posing with the trophy.
Photo Booth
- All the pics from the photo booth. Note: the camera was moved a couple of times so you might want to crop some of your pics.


| AbstractClosure (98%) |
| Closure (100%) |
| Closure0 (66%) |
| Closure1 (100%) |
| Closure2 (83%) |
| Closure3 (85%) |
| Closure4 (87%) |
| ClosureResult (N/A) |
| ClosuresFactory (96%) |
| DelayedClosure (100%) |
| Invokable (N/A) |
| InvokableConstructor (71%) |
| InvokableMethod (100%) |
| ProxyClosure (100%) |
| Switcher (100%) |
| WrongClosureInvocationException (100%) |


|
PWARC
Contest Team Results
|
To enter as a club, a minimum of 3 entries are needed.
Up to 10 entries may be submitted in the "Local" category
in which our club participates. For further information, see http://www.arrl.org/files/file/Clubs/Club%20Gavel%20Competition.pdf. |
|
2011 ARRL 10 Meter Contest Scores
|
NAME |
CALL |
CLASS |
CONTACTS |
MULTIPLIERS |
UNOFFICIAL SCORE |
|
Ted |
K0LDS |
SO/L/M |
119 |
61 |
27,694 |
|
Dan |
NG0T |
SO/L/M |
44 |
33 |
5,478 |
|
Paul |
KB0JIT |
SO/L/Ph |
26 |
19 |
950 |
|
Jane |
KA0USA |
SO/L/Ph |
24 |
17 |
782 |
|
OFFICIAL CLUB SCORE: 34,904 |
|
|
|
CO CLASS B STATIONS -- 43 ENTRIES |
ROCKY MTN DIV. CLASS B -- 71 ENTRIES |
|
K0LDS -- #21 |
K0LDS -- #34 |
|
NG0T -- #33 |
NG0T -- #53 |
|
KB0JIT -- #40 |
KB0JIT -- #65 |
|
KA0USA -- #41 |
KA0USA -- #66 |
|
=======================================================
===============================
|
2011 November Sweepstakes
Contest (Phone) Scores
|
NAME |
CALL |
POWER |
CONTACTS |
SECTIONS |
SCORE |
|
Bill |
WA0KAQ |
Low |
262 |
77/80 |
40,348 |
|
Amanda |
K1DDN |
High |
113 |
55/80 |
12,430 |
|
Dan |
NG0T |
Low |
77 |
53/80 |
8,162 |
|
Paul |
KB0JIT |
Low |
62 |
36/80 |
4,464 |
|
Ted |
K0LDS |
Low |
10 |
10/80 |
200 |
|
OFFICIAL CLUB SCORE: 65,604 |
|
|
2011 November Sweepstakes
Contest (CW) Scores
|
NAME |
CALL |
POWER |
CONTACTS |
SECTIONS |
SCORE |
|
Bill |
WA0KAQ |
Low |
182 |
65/80 |
23,660 |
|
Ted |
K0LDS |
Low |
138 |
66/80 |
18,216 |
|
Dan |
NG0T |
Low |
83 |
54/80 |
8,964 |
|
OFFICIAL CLUB SCORE: 50,840 |
|
|
The two ARRL November
Sweepstakes scores above are combined to determine club placement in
the contest. In its first attempt at contesting, the PWARC placed 19th
out of 39
entries in the "Local" category.
Individually in the contest,
club members placed as follows against other Colorado entries:
|
PHONE CONTEST - LOW POWER - 21 ENTRIES |
CW CONTEST - LOW POWER - 13 ENTRIES |
|
Bill, WA0KAQ -- #2 |
Bill, WA0KAQ -- #7 |
|
Dan, NGOT -- #12 |
Ted, K0LDS -- #8 |
|
Paul, K0JIT -- #15 |
Dan, NG0T -- #11 |
|
Ted, K0LDS -- #19 |
. |
|
PHONE CONTEST -- HIGH POWER - 5 ENTRIES |
. |
|
Amanda, K1DDN -- #3 |
. |
|
|


This is content
Element that should disappear
Element that should set display:none
Initially hidden content
Initially disabled content


For more info please visit parseclabs.org
You are 1 of 100 chosen. Proceed with your promo code to see a private rocket launch!


- testAddHabit() - Method in class com.cmput301f17t11.cupofjava.HabitListTest
-
- testAddHabitEvent() - Method in class com.cmput301f17t11.cupofjava.HabitEventHistoryTests
-
- testAddHabitEventTask() - Method in class com.cmput301f17t11.cupofjava.ElasticSearchControllerTest
-
Add Habit Event
- testAddHabitsTask() - Method in class com.cmput301f17t11.cupofjava.ElasticSearchControllerTest
-
Test add Habits
- testAddUser() - Method in class com.cmput301f17t11.cupofjava.UserListTest
-
Testing for Adding a User
- testAddUserTask() - Method in class com.cmput301f17t11.cupofjava.ElasticSearchControllerTest
-
Add User Task
- testDelete() - Method in class com.cmput301f17t11.cupofjava.HabitEventHistoryTests
-
- testDelete() - Method in class com.cmput301f17t11.cupofjava.HabitListTest
-
- testDeleteUser() - Method in class com.cmput301f17t11.cupofjava.UserListTest
-
Testing for deleting a User
- testFilterBType() - Method in class com.cmput301f17t11.cupofjava.HabitEventHistoryTests
-
- testFilterByComment() - Method in class com.cmput301f17t11.cupofjava.HabitEventHistoryTests
-
- testFollower() - Method in class com.cmput301f17t11.cupofjava.UserTest
-
Test if user can be followed by other users
- testFollowing() - Method in class com.cmput301f17t11.cupofjava.UserTest
-
Test if User can follow other user
- testGetEventsTask() - Method in class com.cmput301f17t11.cupofjava.ElasticSearchControllerTest
-
Get Events
- testGetHabit() - Method in class com.cmput301f17t11.cupofjava.HabitEventTest
-
Test for Getting habit
- testGetHabit() - Method in class com.cmput301f17t11.cupofjava.HabitListTest
-
- testGetHabitEvent() - Method in class com.cmput301f17t11.cupofjava.HabitEventHistoryTests
-
- testGetHabitList() - Method in class com.cmput301f17t11.cupofjava.HabitListTest
-
- testGetHabitsTask() - Method in class com.cmput301f17t11.cupofjava.ElasticSearchControllerTest
-
Get Habits
- testGetName() - Method in class com.cmput301f17t11.cupofjava.HabitEventTest
-
Test for username
- testGetReason() - Method in class com.cmput301f17t11.cupofjava.HabitTest
-
Testing for habit get reason
- testGetTitle() - Method in class com.cmput301f17t11.cupofjava.HabitTest
-
Get habit title
- testGetUser() - Method in class com.cmput301f17t11.cupofjava.UserTest
-
Test if User exists
- testGetUserTask() - Method in class com.cmput301f17t11.cupofjava.ElasticSearchControllerTest
-
Get User task
- testHasHabit() - Method in class com.cmput301f17t11.cupofjava.HabitListTest
-
- testHasHabitEvent() - Method in class com.cmput301f17t11.cupofjava.HabitEventHistoryTests
-
- testHasUser() - Method in class com.cmput301f17t11.cupofjava.UserListTest
-
Testing if UserList contains User
- testListSortedByDate() - Method in class com.cmput301f17t11.cupofjava.HabitEventHistoryTests
-
- testSetReason() - Method in class com.cmput301f17t11.cupofjava.HabitTest
-
Testing for setting the habit reason
- testSetTitle() - Method in class com.cmput301f17t11.cupofjava.HabitTest
-
Set habit title
- testTodaysHabitList() - Method in class com.cmput301f17t11.cupofjava.HabitListTest
-
- TimeLineFragment - Class in com.cmput301f17t11.cupofjava.Views
-
Created by Moe on 2017-11-28.
- TimeLineFragment() - Constructor for class com.cmput301f17t11.cupofjava.Views.TimeLineFragment
-
- TimeLineFragment.HomePagerAdapter - Class in com.cmput301f17t11.cupofjava.Views
-
- TodayViewActivity - Class in com.cmput301f17t11.cupofjava.Views
-
Opens to a view of the list of habits that the user has to complete today.
- TodayViewActivity() - Constructor for class com.cmput301f17t11.cupofjava.Views.TodayViewActivity
-
- todayViewAdapter - Class in com.cmput301f17t11.cupofjava.Views
-
Created by Gregory on 2017-12-03.
- todayViewAdapter(Activity, ArrayList<Habit>) - Constructor for class com.cmput301f17t11.cupofjava.Views.todayViewAdapter
-
- toString() - Method in class com.cmput301f17t11.cupofjava.Models.Habit
-
- toString() - Method in class com.cmput301f17t11.cupofjava.Models.HabitEvent
-


CSS counters are, in essence, variables maintained by CSS whose values may be incremented by CSS rules to track how many times they're used. This lets you adjust the appearance of content based on its placement in the document. CSS counters are an implementation of Automatic counters and numbering in CSS 2.1.
The value of a counter is manipulated through the use of counter-reset
and counter-increment
can be displayed on a page using the counter()
or counters()
function of the content
property.
Using counters
To use a CSS counter, it must first be reset to a value, 0 by default. To add the value of a counter to an element, use the counter()
function. The following CSS adds to the beginning of each h3
element "Section <the value of the counter>:".
body { counter-reset: section; /* Set the section counter to 0 */ } h3:before { counter-increment: section; /* Increment the section counter */ content: "Section " counter(section) ": "; /* Display the counter */ }
For example:

Introduction

Body

Conclusion

Nesting counters
A CSS counter can be especially useful to make outlined lists because a new instance of a CSS counter is automatically created in child elements. Using the counters()
function, a string can be inserted between different levels of nested counters. For example this CSS:
ol { counter-reset: section; /* Creates a new instance of the section counter with each ol element */ list-style-type: none; } li:before { counter-increment: section; /* Increments only this instance of the section counter */ content: counters(section, ".") " "; /* Adds the value of all instances of the section counter separated by a ".". */ }
Combined with the following HTML:

item

item

item

item

item

item

item

item

item

item

item

item

item

item

item

Yields this result:
Specifications
| Specification | Status | Comment |
|---|---|---|
| CSS Level 2 (Revision 1) | Recommendation |
See also
There is an additional example available at http://www.mezzoblue.com/archives/20.../counter_intu/. This blog entry was posted on November 01, 2006, but appears to be accurate.