|
After a hiatus of over a year, active development on Rel has officially resumed!
Development is underway to produce a version of Rel compliant with the Third Edition of Hugh Darwen and Chris Date's "Databases, Types, and the Relational Model - The Third Manifesto". Expect a new release in the third or fourth quarter of 2007. |
|
New! See the Rel Forum at http://shark.armchair.mb.ca/~dave/relforum. Sign up for announcements of Rel releases or critical bugs: http://lists.sourceforge.net/lists/listinfo/dbappbuilder-relannounce Rel is hosted on SourceForge at http://sourceforge.net/projects/dbappbuilder/ |
Rel is a true relational database server based on a relational language called "Tutorial D". Rel is not SQL! Rel is free, open source software.
In the field of information technology, so-called relational databases have achieved a dominant role in providing information storage and retrieval. Almost without exception, database products such as Microsoft SQL Server[1], Oracle[2], DB2[3], MySQL[4], PostgreSQL[5] are based on a programming language called SQL.[6] However, most SQL implementations are not fully relational, at least according to the theoretical model introduced in E. F. "Ted" Codd's seminal paper, "A Relational Model for Large Shared Data Banks."[7]
As a result, the "Relational Database" label attached to most SQL products should be considered a distinctly different, and possibly inappropriate, application of the term "relational." It can be argued that the typical lack of relational completeness, plus other significant failings, are responsible for a common but mistaken impression that relational databases are flawed or limited -- when in fact SQL is flawed and fully relational databases are virtually unknown.
To many SQL developers, the preceding paragraph will seem to be
grumpy zealotry, favouring abstract theory over useful practice.
After all, SQL gets the job done in countless practical applications.
However, the limitations of SQL have a negative effect on
productivity. There are relatively minor inconveniences -- such as
having to express certain queries as "SELECT * FROM
someTable
" where "someTable
" should
be sufficient to obtain all rows and columns from a table -- and major
issues such as:
Many SQL developers, having never encountered an alternative, do not realise these problems exist.
Due to these limitations, the use of SQL -- instead of better alternatives -- is a cause of lost time and money. Alternatives to SQL would almost certainly improve developer productivity and software reliability, and therefore save time and money.
A common argument against using alternatives is that SQL is a standard, and therefore the use of SQL -- flawed as it may be -- permits multi-vendor compatibility, portability, and all the good things implied by adherence to standards. However, in practice almost every SQL vendor implements extensions or variations. This results in a plethora of non-standard SQL dialects -- with all the compatibility, portability, and other issues implied by deviating from a standard. Therefore, the "SQL standard" argument is specious. Of course, even if every vendor adhered strictly to the standard, the standard would still have the flaws noted above.
An alternative to SQL has been proposed by C. J. Date and Hugh Darwen, and is called "Tutorial D".[8][9] This document presents a work-in-progress implementation of a database server called "Rel" that uses Tutorial D syntax. Together, Rel and Tutorial D form a fully relational alternative to SQL. Henceforth, this implementation will be identified as the "current Rel implementation of Tutorial D," or "Rel" for short.
Rel is intended to serve multiple purposes:
In its present and incomplete form, Rel is suitable for exploring true relational concepts, and is suitable as a practical educational tool. Future versions will eventually be usable as an enterprise database product.
This document assumes the reader is familiar with Tutorial D syntax. For further information, please see "Foundation for Object/Relational Databases -- The Third Manifesto"[8] or "Foundation for Future Database Systems -- The Third Manifesto"[9] (which are first and second editions, respectively, and shall be collectively identified within this document as "The Third Manifesto"[10]) by C. J. Date and Hugh Darwen. See also "An Introduction to Database Systems"[11] by C. J. Date.
In The Third Manifesto, Date and Darwen propose a database language that:
Date and Darwen have expanded these underlying principles into a collection of specific prescriptions and proscriptions. A language that conforms to these is said to be an implementation of "D". Since the prescriptions and proscriptions are not syntactic, there may be many different language implementations that qualify as "D".
The Third Manifesto provides a detailed specification of a specific "D" called "Tutorial D," which is intended primarily for illustration and education. Its definition, and its application as an illustrative tool, form a core component of The Third Manifesto and a significant portion Date's popular text, "An Introduction to Database Systems."
To the knowledge of this author, at the time of this writing there are no complete open source Tutorial D language implementations. That includes Rel! However, the implementation described here does provide a significant and usable subset of the definition, and so it is deemed worthy of distribution, under the "release early, release often" principle of open source development -- if for no other reason than to solicit suggestions and gather bug reports. The incomplete functionality is described in a later section.
The Rel server is constructed from several major components:
A running Rel server listens on a communications channel (implemented as a socket) for incoming requests for connections from clients. Each new client connection establishes a new session inside the Rel engine. Each session is an independent entity, sharing only relvars with other running sessions.
The simple DBrowser client bundled with Rel permits immediate evaluation of expressions on a Rel server. For example:
3 + 4
Produces the following result:
7
Responses generated by the Rel engine are presented using Tutorial D syntax where appropriate. For example, entering the following literal relation:
RELATION {TUPLE {x 1, y "fish"}, TUPLE {x 2, y "zap"}}
Produces the following response:
RELATION {x INTEGER, y CHAR} {
TUPLE {x 1, y "fish"},
TUPLE {x 2, y "zap"}}
Similarly, executing a relational expression:
RELATION {TUPLE {x 1}} UNION RELATION {TUPLE {x 2}}
Produces the following response:
RELATION {x INTEGER} {
TUPLE {x 1},
TUPLE {x 2}}
The use of Tutorial D syntax in responses is consistent and intuitive, and it means sophisticated clients may employ a parser based on a subset of the Tutorial D server grammar, rather than having to design and implement a separate result parser. In the future, this approach will be used to develop a client API that conforms to a JDBC (Java Data Base Connectivity) standard. This will allow Rel to be used by any Java application that supports JDBC, as long as the application does not require SQL syntax. Obviously, this may be extended to ODBC (Open Data Base Connectivity) as well.
The use of the same syntax for data input and results also has value in an educational or development setting, as raw output from the server may be fed as input back into the server.
Rel recognises Tutorial D constructs as specified in The Third Manifesto, plus alternative syntax shown in Date's "An Introduction to Database Systems," except for syntax features that are not yet implemented and which are noted under "Current Limitations and Work in Progress," below. For example, a real relvar may be defined either as:
VAR myRelVar REAL RELATION ...
...or...
VAR myRelVar BASE RELATION ...
The former is The Third Manifesto syntax, the latter is "An Introduction to Database Systems" syntax.
Rel is implemented as a Java[12] application, and should run on any host that supports a J2SE 5.x platform. It has been extensively tested on Linux (RedHat 9.0, Fedora Core 2, 3, and 4), Mac OS X and Microsoft Windows (ME, 2000, and XP).
Java was chosen for two reasons:
The performance limitations of Java (which definitely exist, but are not as significant as typically rumoured) are not considered a problem, as Rel is first and foremost an educational tool and a working prototype for future full-featured "enterprise" implementations. It is not, in its present form, a DBMS for managing terabytes of data, but this has nothing to do with being implemented in Java. Although there are surely practical applications for the present implementation, it is not sufficiently mature or complete to be considered a suitable host for the company payroll data.
The provided software distribution consists of two Java applications: a Rel database server and the interactive client called DBrowser. The DBrowser client sends user-entered Tutoral D code and expressions to the Rel server, which in turn parses and (if there are no syntax errors) executes them and returns the results to DBrowser for display. Rel is multi-user, and will service multiple DBrowser sessions on the local host and other hosts via a network. For convenience, if there is no Rel server running on the local host when DBrowser is started, it will automatically start up a Rel server and shut it down when all instances of DBrowser have closed. This eliminates the need to explicitly load a server before using the client.
If deemed appropriate, future releases might not be implemented in Java.
The following enhancements should be considered experimental. Depending on their value (or lack thereof) they may or may not be included in future versions of Rel.
Catalog: Rel provides a simple system catalog, via a predefined relvar called "Catalog". The contents of the Catalog, i.e., the relvars currently defined in a database, may be displayed by retrieving the contents of the Catalog relvar. For example:
Catalog
A relation of all defined relvar names can be obtained using:
Catalog {name}
Single vs. Multiple statements: The grammar described in The Third Manifesto requires that multiple statements be surrounded by a BEGIN/END block. For example:
IF blah THEN
BEGIN;
x := r1 UNION r2;
y := 2 + 2;
END;
END IF;
Rel makes the BEGIN/END statements optional. The following is equivalent to the above:
IF blah THEN
x := r1 UNION r2;
y := 2 + 2;
END IF;
This simplification is available wherever BEGIN/END blocks would otherwise be required.
END matching: Refering again to the above example, the "IF" keyword following "END" is optional. This simplification is available on all "END"s.
Case sensitivity: Rel language keywords are not case sensitive. By convention, keywords are shown here in upper case to visually distinguish them, but the parser recognises them in lower case as well. Rel identifiers and string comparisons are case sensitive.
SAME_TYPE_AS: The SAME_TYPE_AS keyword may be equivalently specified as SAME TYPE AS.
Transactions: START TRANSACTION, COMMIT TRANSACTION, and ABORT TRANSACTION may be shortened to START, COMMIT, and ABORT, respectively.
Restriction: WHERE clauses may be abbreviated, as shown in the following example:
R WHERE x = 1 AND y = 2
May be abbreviated to:
R [ x = 1 AND y = 2 ]
This is intended to be faster to type, less SQL-like, and distantly evocative of an array index operation. Of course, a restriction is most certainly not an array index operator, but does represent a notion of "retrieve a specified subset of a whole" in a vaguely similar manner to an index operator, which also retrieves a specified subset of a whole, i.e., an individual array item.
Operator invocation: The CALL keyword is optional.
OUTPUT, WRITE, and WRITELN statements: Statements have been introduced to send raw text to the client. For example, the following:
VAR i INTEGER;
DO i := 1 TO 3
OUTPUT i;
END;
Will send the following to the client:
1
2
3
OUTPUT, WRITE, and WRITELN each have slightly different behaviour. OUTPUT sends text in a form that can be parsed by Rel, followed by a new line. WRITELN sends text in a natural human-readable form, followed by a new line. WRITE is the same as WRITELN, but does not send a new line. In the current implementation, the only significant difference between OUTPUT and WRITELN is that OUTPUT will present a CHAR surrounded by double quotes, whereas WRITELN will not include the double quotes.
WRITELN and OUTPUT may be specified with no expression, in order to send a new line. Eg.:
WRITELN;
INSERT: A shorthand syntax is available for INSERT. The following:
INSERT INTO r RELATION {TUPLE {x 1, y 3}};
May also be specified as:
INSERT r TUPLE {x 1, y 3};
Or:
r += TUPLE {x 1, y 3};
The lattermost syntax is intended to be vaguely evocative of the "increment by 'n' and assign" operator found in C, C++, Java, and other languages.
DELETE: A shorthand syntax is available for DELETE. The following:
DELETE r;
May also be specified as:
r -= ALL;
The following:
DELETE r WHERE x = 2;
May also be specified as:
r -= WHERE x = 2;
Or:
r -= [ x = 2 ];
The use of "-=" is intended to be vaguely evocative of the "decrement by 'n' and assign" operator found in various popular programming languages.
UPDATE: A shorthand syntax is available for UPDATE. The following:
UPDATE r WHERE x = 2 SET ( y := 3, z := 4);
May also be specified as:
r @= WHERE x = 2 SET ( y := 3, z := 4 );
Or:
r @= [ x = 2 ] SET ( y := 3, z := 4 );
Or, because SET is optional:
r @= [ x = 2 ] ( y := 3, z := 4 );
Or even:
r @= [ x = 2 ] BEGIN
y := 3;
z := 4;
END;
The lattermost construct is intended to allow code of arbitrary complexity to be executed within the context of an UPDATE. The various forms of shorthand may be mixed. For example, the following (and all other logical permutations thereof) is valid:
UPDATE r [ x = 2 ] BEGIN
y := 3;
z := 4;
END UPDATE;
Comments: Comments are specified using conventional C++ and Java syntax. Eg:
// This is a comment line
/* This is a multi-line
comment block */
INTEGER post and pre increment and decrement: The following statements are valid on INTEGER types, and behave in the usual manner:
x ++; // increment x
++ x; // increment x
x --; // decrement x
-- x; // decrement x
The following are valid as well:
y := x ++; // evaluate x, then increment it
y := ++ x; // increment x, then evaluate it
y := x --; // evaluate x, then decrement it
y := -- x; // decrement x, then evaluate it
TABLE_DEE and TABLE_DUM: These special relation literals may also be referenced by the shorthand equivalents DEE and DUM, respectively.
SEMIJOIN and SEMIMINUS: SEMIJOIN may also be specified as MATCHING or INCLUDE. SEMIMINUS may also be specified as NOT MATCHING or EXCLUDE. It is a matter of debate as to whether or not the keywords INCLUDE and EXCLUDE capture the essence of the operators any more intuitively than SEMIJOIN and SEMIMINUS, but MATCHING and NOT MATCHING certainly do, so SEMIJOIN, SEMIMINUS, INCLUDE and EXCLUDE may be eliminated in a future version of Rel.
EXTEND: An infix syntax is available for EXTEND. The following:
EXTEND r ADD (1 AS x, 2 AS y)
Can also be specified as:
r EXTEND (1 AS x, 2 AS y)
Or, using a tuple selector-like syntax, as:
r EXTEND {x 1, y 2}
SUMMARIZE: An infix syntax is available for SUMMARIZE. The following:
SUMMARIZE r PER s {p} ADD SUM(x) AS y
Can also be specified as:
r SUMMARIZE PER s {p} ADD SUM(x) AS y
The COUNTD, SUMD, and AVGD aggregate operators may be equivalently specified as DISTINCT COUNT, DISTINCT SUM, and DISTINCT AVG.
SUMMARIZE S PER S {S#} ADD DISTINCT SUM(STATUS) AS x
This is to be consistent with the 'DISTINCT' qualifier that can be applied to user-defined aggregate operators, which will be implemented in a future version.
SUM, AVG, MAX, and MIN accept an optional second parameter, which is a value to be returned if the relation is empty. If the relation is empty and this additional parameter is not specified, an exception will be thrown -- except for SUM and COUNT, which return 0. Use of this parameter is questionable, but avoids the need for filtering out empty groups before aggregating, as long as the 'empty' value is understood. For example:
SUMMARIZE S PER S {S#} ADD DISTINCT AVG(STATUS, -1) AS x
Furthermore, COUNTD expects an expression. Only COUNT does not require an expression.
DROP OPERATOR: Since operators may be overloaded, an alteration to the specified grammar is required to disambiguate the desired operator. For example, the following operator definitions are allowable:
OPERATOR foo(x INTEGER, y INTEGER) RETURNS (INTEGER)
RETURN x + y;
END;
OPERATOR foo(x INTEGER) RETURNS (INTEGER)
RETURN x + 2;
END;
Dropping the first operator is performed with the following:
DROP OPERATOR foo(INTEGER, INTEGER);
Dropping the second is performed with the following:
DROP OPERATOR foo(INTEGER);
Relvar definitions: Alternative keywords are available, in order to conform to both The Third Manifesto syntax and "An Introduction to Database Systems" syntax.
A real relvar may be specified as:
VAR myRelVar REAL RELATION ...
...or...
VAR myRelVar BASE RELATION ...
A virtual relvar may be specified as:
VAR myRelVar VIRTUAL ...
...or...
VAR myRelVar VIEW ...
Outer joins: While not strictly necessary, outer joins are convenient in real applications. The syntax is based on, but not the same as, that described in a Tutorial D grammar specification available at http://thethirdmanifesto.com. A mandatory FILL clause specifies the contents for non-matching tuples, thus avoiding the need for NULLs. For example:
rleft LEFT JOIN rright FILL {x 0, y "no match"}
This syntax is experimental. A proposed (but as yet unimplemented) alternative might be:
rleft LEFT FILL {x 0, y "no match"} JOIN rright
Or, possibly:
rleft LEFT {x 0, y "no match"} JOIN rright
FOR: The 'FOR' statement permits iterating over the tuples of a relation and executing arbitrary code. For example:
FOR S {S#, SNAME} BEGIN
WRITELN "S# = " || S#;
WRITELN "SNAME = " || SNAME;
END;
FOR may be used in conjunction with ORDER (see below) to permit iterating tuples in a specified sequence.
FOR should be considered shorthand for declaring a temporary array, copying the expression's tuples into the array, and then iterating the tuples in the array.
EXECUTE: The EXECUTE statement permits run-time execution of dynamically-generated Tutorial D code. For example, the following uses EXECUTE to emit Tutorial D definitions of user-defined real relvars, by dynamically generating and executing an 'OUTPUT' statement for each relvar using the relvar name obtained at run-time:
FOR Catalog [owner <> "system" AND NOT isVirtual] BEGIN
WRITELN "VAR " || name || " REAL " || definition || ";";
WRITE name || " := ";
EXECUTE "OUTPUT " || name || ";";
WRITELN ";";
END;
GROUP: The GROUP operator permits an alternate syntax. The attribute list may be surrounded by parentheses or curly braces. For example, the following are permissible:
S GROUP (ALL BUT X, Y) AS P;
...or...
S GROUP {ALL BUT X, Y} AS P;
This makes the syntax similar to that used with WRAP, and encourages consistency in using curly braces to delimit lists of attributes (or attribute definitions) and parentheses to delimit lists of clauses.

These facilities all direct their output to the standard output stream, so their output will appear in the Java console (or whatever), but not the DBrowser window.
Arrays: Arrays are implemented as described in The Third Manifesto, with the following additions:
ARRAY OF <type>
For example:
VAR myArray ARRAY OF INTEGER;
VAR myOtherArray ARRAY OF TUPLE {x INTEGER, y CHAR};
VAR nested ARRAY OF ARRAY OF INTEGER;
ARRAY {1, 2, 3, 4}
...or...
ARRAY OF INTEGER {1, 2, 3, 4}
x := myArray[1];
Nested arrays may be referenced as shown in the following:
x := myNestedArray[outerIndex][innerIndex];
x[index] := 3;
Use:
x SET index := 3;
This makes array item references distinct from array item assignments, in a similar manner to the way relation references are distinct from relation updates.
Creating an ARRAY of a given RELATION type will allow storage of TUPLEs of that RELATION's type. For example:
// This is not strictly correct, as it says 'x' is an array
// of relations, not an array of tuples.
VAR x ARRAY OF SAME TYPE AS (S);
// This is fine.
VAR p SAME TYPE AS (S);
LOAD x FROM S ASC SNAME;
WRITELN x;
LOAD p FROM x;
WRITELN p;
Though convenient, this behaviour is not strictly correct, and may be altered in a future version.
Aggregate operators: SUM, AVG, MAX, and MIN accept an optional third parameter, which is a value to be returned if the relation is empty. If the relation is empty and this additional parameter is not specified, an exception will be thrown -- except for SUM and COUNT, which return 0. Use of this parameter is questionable, but avoids the need for filtering out empty groups before aggregating, as long as the 'empty' value is understood. For example:
VAR x RELATION {S# INTEGER};
WRITELN AVG(x, S#, -1);
ORDER: An ORDER operator has been implemented to generate row-ordered relations. This has no meaning in the context of relational algebra, but has practical value in generating human-readable output. For example:
WRITELN P ORDER (DESC WEIGHT, ASC P#);
ORDER is experimental, and may eventually vanish in favour of using ARRAYs.
User-defined OPERATORs written in Java: OPERATORs may be defined in Java, as shown in the following example:
OPERATOR Times(x INTEGER, y INTEGER) RETURNS (INTEGER) FOREIGN Java
// Any code allowed within a static method
// can go here.
return new ValueInteger(x.longValue() * y.longValue());
END;
See the Java 'Value' class in the ca.mb.armchair.Rel.VM
javadocs
for more information. All parameters and the return value extend
ca.mb.armchair.Rel.VM.Value
TYPE_OF: The built-in TYPE_OF operator returns the type of an expression. If the expression is a RELATION or TUPLE, TYPE_OF returns RELATION {name CHAR, type CHAR, parent CHAR}. If the expression is a scalar value or array, TYPE_OF returns CHAR. For example, entering...
TYPE_OF (3.2 + 6.8)
...returns:
RATIONAL
The following...
TYPE_OF (RELATION {TUPLE {x 1, y RELATION {TUPLE {z 5.0}}}})
...returns:
RELATION {name CHAR, type CHAR, parent CHAR} { TUPLE {name "x", type "INTEGER", parent ""}, TUPLE {name "y", type "RELATION {z RATIONAL}", parent ""}, TUPLE {name "z", type "RATIONAL", parent "y"}}
User-defined TYPEs written in Java: New TYPEs may be defined using Java within Rel, as illustrated in the following example of a simple Date TYPE:
TYPE Date FOREIGN Java
// A simple Date type.
private java.util.Date d;
/** Type constructor. */
public Date() {}
/** Value constructor. Construct date given a number of milliseconds
* since January 1, 1970, 00:00:00 GMT. */
public Date(ValueInteger milliseconds) {
d = new java.util.Date(milliseconds.longValue());
}
/** Return this Date as a number of milliseconds since the epoch. */
public ValueInteger milliseconds() {
return new ValueInteger(d.getTime());
}
/** Compare this Value to another Value of the same Type. */
public int compareTo(XAction t, Object o) {
return d.compareTo(((Date)o).d);
}
/** Stringify this Value. */
public String stringValue(XAction t) {
return d.toString();
}
/** Return a parsable representation of this Value. */
public String parseValue(XAction t) {
return "Date(" + d.getTime() + ")";
}
/** Set up this Value from a byte stream. */
public void fromBytestream(XAction t, BytestreamInput in) {
d = new java.util.Date(in.getlong());
}
/** Write this Value to a byte stream. */
public void toBytestream(XAction t, BytestreamOutput out) {
out.putLong(d.getTime());
}
/** Get a default Value of this Type. */
public Value getDefaultValue() {
return new Date(new ValueInteger(System.currentTimeMillis()));
}
END;
OPERATORs to invoke methods will be automatically generated, but only for methods whose
parameters and return value are composed exclusively
of ca.mb.armchair.Rel.VM.Value
class derivatives.
Every user-defined
Java-based TYPE is derived from ca.mb.armchair.Rel.VM.TypeJava
User-defined
TYPEs and OPERATORs are stored in an automatically-created directory
named UserRelCode
Database update reporting: A facility is available to generate notifications of created and dropped relvars, dropped types and operators, and numbers of tuples inserted, updated, and deleted.
Enable this mode with:
SET VERBOSE ON;
Disable this mode with:
SET VERBOSE OFF;
The default is OFF, but DBrowser automatically turns VERBOSE ON when it connects to a Rel server.
Update operators: Update and assignment operators may be used within expressions. When used within an expression, an assignment evaluates to the assigned value. Eg.:
WHILE (x := getPosition()) > 0
...
END;
An UPDATE, INSERT, DELETE, or LOAD returns a relation with (at least) an INTEGER attribute 'N'. 'N' is the number of tuples affected by the update. Eg.:
WRITELN "Add " || N FROM (x += TUPLE {a 1});
Compile-time announcements: A statement has been provided to output strings during compilation. This may be used to provide compilation progress indicators in lengthy scripts. Eg.:
ANNOUNCE 'Operator fibonacci (INTEGER) INTEGER being created...';
OPERATOR fibonacci (r INTEGER) RETURNS (INTEGER)
IF r <= 1 THEN
RETURN r;
ELSE
RETURN fibonacci(r - 1) + fibonacci(r - 2);
END;
END;
Shorthand variable declaration and assignment: The following code...
VAR myVar SAME TYPE AS (x + y) INIT (x + y);
...can also be written as:
VAR myVar := x + y;
Constants: Constants may be declared, as shown in the following examples:
CONST myVar1 := 3;
CONST myVar2 := RELATION {TUPLE {x 1}, TUPLE {x 3}};
CONST myVar3 := x + y;
It should be emphasized that all the limitations described below will be addressed in future versions of Rel.
Display of relations: While not strictly a limitation, relations returned by the Rel server are displayed as raw text in Tutorial D syntax. A future version will provide an option to display relations in a tabular form.
Response scrolling: When using the "Enhanced text" display mode, available by right clicking on the output window, the output scrolls down the window in an unpleasant manner. This will be corrected in a future version.
Nested Transactions: The current version of the storage engine -- SleepyCat Software's Java edition of the Berkeley DB -- supports low level nested transactions within the API, but throws an exception at runtime to indicate the feature is not implemented yet. If this condition persists, a different storage engine will have to be used. If needed, this will probably be the C version of the Berkeley DB, but a custom storage engine will almost certainly replace it at some point.
As a result, nested transactions that ABORT cause their parent transactions to abort. A nested COMMIT does nothing.
Relvar definitions - foreign keys: The parser supports foreign key definitions but the Rel engine ignores them.
Relvar definitions - candidate keys: Only the first candidate key definition is processed -- subsequent key definitions are ignored.
POSSREPs: The user defined type facilities described by Date and Darwen are not yet implemented. It is, however, possible to define new types using Java syntax within Rel. See Language Enhancements, above.
Of course, POSSREPs will be incorporated into future Rel versions.
Transitive closure: TCLOSE is not yet implemented.
Outer joins: Though not part of The Third Manifesto specification, outer joins will be available with a mechanism to prevent generation of NULL values. Outer joins are recognised by the parser, but are not implemented yet.
Operators: The UPDATES parameter modifier is not implemented yet.
Flow control: The LEAVE statement is not implemented yet.
Constraints: Database constraints can be created using the CONSTRAINT statement and dropped using DROP CONSTRAINT, but type constraints are not yet supported.
Optimisation: There is none, anywhere, of any kind. Even the primary key indexes are studiously ignored in the quest for poorer performance. JOINs, for example, are brute force. However, since "premature optimisation is the root of all evil," (C. A. R. Hoare) this cannot be considered entirely a bad thing. Future versions of Rel will implement appropriate optimisation mechanisms.
As defined in The Third Manifesto, the Tutorial D specification does not describe various practical features such as security, storage management, back-up management, database maintenance, exception handling, and so on. Future releases will define and implement a superset of Tutorial D to address these, thus making Rel a practical alternative to SQL database products.
Naturally, the pervasive nature of SQL products necessitates integration with the existing SQL world. Future versions of Rel will allow access to SQL databases, perhaps by wrapping SQL tables in relations when NULLs and duplicate rows are guaranteed not to occur, and/or perhaps by allowing SQL tables with NULLs and duplicate rows to be manipulated as non-relational "second class" citizens in the relational world of Rel.
Furthermore, Rel will be used as the basis for tools that facilitate the development of practical database-based applications. The web site http://dbappbuilder.sourceforge.net provides a home for these.
The grammar for the Rel implementation of Tutorial D can be found here.
Copyright © 2004-2006 Dave Voorhis and Armchair Airlines Computer Services Inc.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Rel incorporates a binary distribution of SleepyCat Software's Java edition of the Berkeley DB, which is licensed separately. The source code is available at http://www.sleepycat.com. The copyright and license terms are included here:
Copyright © 2002-2004 Sleepycat Software. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Redistributions in any form must be accompanied by information on how to obtain complete source code for the DB software and any accompanying software that uses the DB software. The source code must either be included in the distribution or be available for no more than the cost of distribution plus a nominal fee, and must be freely redistributable under reasonable conditions. For an executable file, complete source code means the source code for all modules it contains. It does not include source code for modules or files that typically accompany the major components of the operating system on which the executable file runs.

*** Installation ***
Rel will use the javac
compiler included with the
JDK
jikes
Java compiler from IBM. At least one of these
must be installed in order to define Java-based TYPEs or OPERATORs.
If both jikes and javac are available, jikes will be used.
java -jar RelInstall-0.0.13.jar
java -jar DBrowser.jar
[1] Microsoft SQL Server home page: http://www.microsoft.com/sql
[2] Oracle database home page: http://www.oracle.com/database
[3] DB2 home page: http://www.ibm.com/software/data/db2/
[4] MySQL home page: http://www.mysql.com
[5] PostgreSQL home page: http://www.postgresql.org
[6] As SQL is a collection of language dialects and a standard, rather than a specific product, there is no definitive home page or reference. Wikipedia's entry is a good starting point for further reading: http://en.wikipedia.org/wiki/SQL
[7] "A Relational Model for Large Shared Data Banks", E. F. Codd, Communications of the ACM, Vol. 13, No. 6, June 1970, pp. 377-387. Copyright © 1970, Association for Computing Machinery, Inc. Reprinted at http://www.acm.org/classics/nov95/toc.html
[8] "Foundation for Object/Relational Databases -- The Third Manifesto", C. J. Date and Hugh Darwen, Addison-Wesley Professional, 1998, ISBN:<PHONE_NUMBER>
[9] "Foundation for Future Database Systems -- The Third Manifesto", C. J. Date and Hugh Darwen, Addison-Wesley Professional, 2nd edition (2000), ASIN:<PHONE_NUMBER>
[10] The Third Manifesto home page: http://thethirdmanifesto.com
[11] "An Introduction to Database Systems", C. J. Date, Pearson Education, 8th edition (2003), ISBN:<PHONE_NUMBER>
[12] Sun Microsystems' Java home page: http://java.sun.com


BusMall Shopping
Select your product from the dropdown menu.
Select your Product
Select a Product
Luggage
Banana Slicer
Bathroom Buddy
Fashion Wellies
Breakfast Machine
Meatball Bubblegum
Chair
Cthulhu
Duck Muzzle
Dragon Meat
Practical Cutlery
Pet Broom
Pizza Scissors
Shark Blanket
Baby Broom
Tauntaun
Unicorn Meat
Tentacle USB
Watering Can
Wine Glass
Quantity:
Add to Cart
Shipping Information
Name:
Address:
City:
State:
ZIP:
Phone Number:
Credit Card:
Submit Order


Web apps are using the extension system via bookmark apps, see chrome://extensions-internals for bookmark app details.
Enable BMO via chrome://flags/#enable-desktop-pwas-without-extensions.
[[item.debugInfo]]
[[externallyInstalledWebAppPrefs_]]


-->
Created by Yuanyuan Tian, Yingqi Tang, Majid @ Oregon State University
Together with the Hunkpapa and Sihasapa bands, the Standing Rock Sioux Tribe is part of what was known as the Great Sioux Nation. In the 1960s, the Army Corps of Engineers and the Bureau of Reclamation built five large dams on the Missouri River, and implemented the Pick–Sloan Missouri Basin Program, forcing Native Americans to relocate from large areas to be flooded behind the dams. These dams were for flood control and hydroelectric power generation in the region. More than 200,000 acres on the Standing Rock Reservation and the Cheyenne River Reservation in South Dakota were flooded by the Oahe Dam alone. As of 2015, poverty remains a problem for the displaced populations in the Dakotas.(add income source from Jenn) They have sought compensation for their towns submerged under Lake Oahe, and the loss of traditional ways of life.
Aquifer
Surface Water
Sacred Site
The pipeline is to be built by Texas-based Energy Transfer Partners and is designed to transport as many as 570,000 barrels of crude oil daily from North Dakota to Illinois. The pipeline would be a key conduit connecting oil wells in the state's Bakken Shale, where the development of fracking has opened billions of gallons of new oil to recovery, to other valuable consumer markets, including the Gulf Coast, Midwest and East Coast. The nearly $4 billion project was first proposed in 2014 with an anticipated completion of this year.
The Dakota Access Pipeline has drawn parallels to the Keystone XL pipeline. Opposition to that project, which Obama eventually rejected, became a litmus test in the eyes of some activists for public officials to show their commitment to addressing environmental issues. But at the same time significant differences remain. Perhaps most importantly, Keystone crossed into Canada, making it an international issue that gave authority over its final approval to the State Department. The federal government has the authority over the Dakota Access Pipeline because it crosses interstate waterways. Stopping the project would be heavier lift for any administration.
Aquifer
Surface Water
Sacred Site
Pipeline
The Sacred Stone Camp: it has been protesting the Dakota Access pipeline since April. The location plays an major role of the protect. In August, it grew dramatically in scope.
The Oceti Sakowin Camp: a historic gathering of tribes, allies and people from all walks of life standing in solidarity to halt the Dakota Access Pipeline. The encampment provided the world a stage for environmental awareness and will act as a future indigenous meeting center.
Frontline Camp: Water Protectors Erected New Frontline Camp Directly in Path of Dakota Access Pipeline
Aquifer
Surface Water
Sacred Site
Pipeline
Camp
Thousands of people had checked in at Standing Rock Indian Reservation on the Facebook. But many of them weren't anywhere near the location
Thousands of people had checked in at Standing Rock Indian Reservation on the Facebook. But many of them weren't anywhere near the location
animation curve map + camps
Map: heatmap?
Charts: crossfilter, pi chart
Not physically there,
but using social media as a projection to standing there.
How people use social media geo-tag to show their support.
Location is not only where you are,
but also you can choose where to stand.
Created by Yuanyuan Tian, Yingqi Tang, Majid @ Oregon State University


isValidateblahblah
Finally. After 6 months of being irritated by a bug, but not having the time to deal with it, I bit the bullet.
Whenever you put 'tiles' into one of our framework's tile-holders, revalidate(), the call to resize yourself, was ignored. I wasn't involved in anything more than obscure trivial recommendations in that part of the code, and thus didn't feel qualified to hit it. Since the framework guy walked 3 or 4 weeks ago, I've been taking on some of that responsibility.
So, finally, in a JPanel, if you ever hppen to hardwire your rootPane to contain a ContentPane, and force every component in there so you don't trash your toolbars or surrounding buttons when you goof around with the contents, make SURE the rootPane isValidateRoot() returns false.
About this entry
You're currently reading "isValidateblahblah an entry on a crick in the net
- Published:
- 11.15.05 / 7pm
- Category:
- Code Geekery


This tool probably doesn't work on your browser. Try Chromium.
Caveat emptor! This program makes lots of assumptions. Its output is just a starting point; you may have to manipulate it further.
Strongly consider pre-processing the SVG source with Jake Archibald’s SVGOMG tool (a web interface to the SVGO SVG optimizer).
Paste your SVG source below and then
Options:
Translate (applies after flip):
Skiafied output will be here


--- layout: page current: page navigation: True title: Our team date: tags: class: page-template subclass: 'page' --- {% for author in site.data.authors %} {% if author[1].is_active %}


Chocolate Cake
Yields: a cake for 10
Preparation time: 15'
Cooking time: 40'
Tools
-
Static oven (170°C)
Ingredients
-
140g butter175g dark chocolate80g white chocolate6 eggs125g finely ground almonds (almost a flour)150g finely ground hazelnuts (almost a flour)15g vanilla sugar, or any preferred way to give vanilla flavor70g caster sugar
Directions
-
Pre-heat oven (170°C)Melt together butter and all the chocolate (see notes for this step). In the meantime you can execute the next step.Mix all the other ingredients in another bowlWhen the butter and chocolate mix is liquid mix everything togetherPut baking paper in a baking tinPour the mix in the tin. The overall height of the mix should not be more than 2cm.Bake for 40 minutes or until ready (see notes)
About this cake and its variants
This is one of my favorite recipes:
- The effort is very low and the result is amazing
- It is gluten free so it can accommodate guests that have trouble with it
- It can even be made lactose-free if butter is replaced with lactose-free butter or margarine and all the white chocolate is replaced by dark chocolate.
How to melt chocolate and butter
Bain-marie
Bain-marie is my favorite way to melt chocolate for most recipes as it makes it close to impossible to burn chocolate. Moreover this only requires a stove, water, a bowl and a small pot.
The process is the following: put some water (not too much) in a pot on the stove and find a bowl that is big enough to not fall in the pot or touch the water. Put the stuff that needs melting in the pot and set the hob to high-heat.
The steam condensing on the bottom of the bowl will guarantee that the temperature never goes above 100°C and that it doesn’t reach that temperature too quickly.
This process also allows you to stir and mix to make it easy to see when it is ready.
Note that if you don’t have a bowl big enough to not fall into your smallest pot you can always use a colander or some chopsticks to achieve the same result.
Microwave
Burning chocolate in the microwave is very easy and butter can easily splash around if this is not done properly.
The best way I have found is to set the microwave on high (usually 800-1000W) and put the non metallic bowl with the stuff you need to melt in it for 15 seconds. Then take it out, stir, and give it another 15’. Continue until mix is liquid. DO NOT put the spoon you used to stir in the microwave if it is a metallic or plastic spoon.
When is the cake ready?
This cake should form a nice crunchy crust and stay soft in the inside. This happens usually when at least 30’ have passed and there are cracks on the top that are both close to the sides and in the center. If you have a good sense of smell another hint is that you should start smelling a vague scent of burning, but the cake is not yet getting darker (the side will have a hint of burnt taste, this is intended).
Category: Sweets
Origin: Rob
-


This is paragraph one.
This is paragraph two.
This is paragraph three.
This paragraph should be hidden.


{% extends "base.html" %} {% load static %} {% block main %} Category Cars and Bikes Home and Decoration Mobiles and Tablets Home Appliances Fashion Books Sports and Fitness Toys and Kids' Accessories Laptops And PCs {{name}} {{error}} {% for item in items %} ₹{{ item.price }} {{ item.title}} View Item {% endfor %} {% endblock %}
{{error}}
{{ item.title}}


Begin Debug Halt
Reset test
Register Adress
Data
Write test
Adress
|Readed Data|
Read
Write to DP
Write to AP


--- layout: post title: "Ebay Product Search Web Platform" subtitle: "Ajax, JSON, Responsive Design and Node.js" date: 2020-04-19 17:35:27 background: '/img/posts/07.jpg' ---
(AJAX/JSON/HTML5/Bootstrap/Angular/Node.js/Cloud Exercise)
The default value of “Category” is “All Categories”, which covers most of the “types” provided by the eBay API.


Super Air
Sign In
Home
Add Flight
×
Username
Password
Sign Up
Flight number
Departure date
Arrival date
Departure airport
Arrival airport
Seat number
Ticket price


Classes prefixed with js- are strictly for hooking into
Javascript. Developers know this is the class to use for setting up
click events and such. They are not meant to be styled.
Properties marked with !important can make that component's
reusability difficult in the future.


Home
Request Certificate
Generate Certificate
About
Tamil Nadu e-Province
Birth Certificate
Request Certificate
Death Certificate
Request Certificate
Community Certificate
Request Certificate
Caste Certificate
Request Certificate


An implementation of sequential testing that uses evidence ratios computed from the weights of a set of models. These weights correspond either to Akaike weights computed from the Akaike Information Criterion (AIC) or the Bayesian Information Criterion (BIC) and following Burnham & Anderson (2004, <doi:10.1177/0049124104268644>) recommendations, or to pseudo-BMA weights computed from the WAIC or the LOO-IC of models fitted with 'brms' and following Yao et al. (2017, <arXiv:1704.02030v3>).
| Version: | 0.2.0 |
| Depends: | R (≥ 3.3.0) |
| Imports: | brms, lme4, dplyr, magrittr, tidyr, ggplot2, rlang, foreach, doParallel, cowplot |
| Suggests: | knitr, rmarkdown |
| Published: | 2017-12-10 |
| Author: | Ladislas Nalborczyk [aut, cre] |
| Maintainer: | Ladislas Nalborczyk <ladislas.nalborczyk at gmail.com> |
| BugReports: | https://github.com/lnalborczyk/ESTER/issues |
| License: | MIT + file LICENSE |
| URL: | https://github.com/lnalborczyk/ESTER |
| NeedsCompilation: | no |
| Materials: | README NEWS |
| CRAN checks: | ESTER results |
| Reference manual: | ESTER.pdf |
| Vignettes: |
Efficient Sequential Testing with Evidence Ratios |
| Package source: | ESTER_0.2.0.tar.gz |
| Windows binaries: | r-devel: ESTER_0.2.0.zip, r-release: ESTER_0.2.0.zip, r-oldrel: ESTER_0.2.0.zip |
| OS X binaries: | r-release: ESTER_0.2.0.tgz, r-oldrel: ESTER_0.2.0.tgz |
| Old sources: | ESTER archive |
Please use the canonical form https://CRAN.R-project.org/package=ESTER to link to this page.


d?block
As the author of Dogbot, I embrace free and open-source software! So, Dogbot's source code is open and free for anybody to use, under the MIT license.
I maintain Dogbot's GitHub wiki so you aren't lost, but please read everything!
Dogbot is still in beta, so things might go wrong while using it, beware! The bot goes down several times every day so I can upload patches to the bot, which requires a restart most of the time. But if you aren't going to use Dogbot for any serious moderation...


System Architect Picture "Intention Under Consideration"
Parent Diagram:
Intention State
(OMT Object Model)


HTML是一种超文本编辑语言,

是它的段落标签。
The quote element——<q>
——用于不需要分段的短引用。
Hello and welcome to my motivation page. As Confucius once said:
It does not matter how slowly you go as long as you do not stop.
I also love the concept of positive thinking, and The Need To Eliminate Negative Self Talk
(as mentioned in Affirmations for Positive Thinking.)
WTO 是世界贸易组织的缩写。
高新区锦业路
My birthday is on the 25th of May 1986.
Caffeine's chemical foumula is C8H10N4O2.
If x2 is 9,x must equal 3 or -3.
var para = document.querySelector('p');
para.onclick = function() {
alert('Owww, stop poking me!');
}
You shouldn't use presentational elements like
and
.
In the above JavaScript example, para represents a paragraph element.
Select all the text with Ctrl/Cmd+A.
$ ping mozilla.org PING mozilla.org (<IP_ADDRESS>): 56 data bytes 64 bytes from <IP_ADDRESS>: icmp_seq=0 ttl=40 time=158.233 ms


Home
About Me
Profile
Education
Favorites
Games
Sports
Foods
Contact me
09XXXXXXXXX
Facebook
"while(!(succeed = try());"
Laurence S. Beraña
PROGRAMMER | WEB DESIGNER
WELCOME
Web Designer,
Android Developer,
Java Programming,
Computer Hardware Technician,
C programming,
Cisco 1 & 2
Contact Me @
laurenceberana@gmail.com


Run the query on the right.
The SELECT command will show you that the counter value of counter have been updated.


3 killed in shooting at Walmart in Oklahoma: police chief
by Sean Murphy, The Associated PressDUNCAN, Okla. -- Two men and a woman were fatally shot Monday outside a Walmart store in southwestern Oklahoma, the chief of police said.
Two victims were shot inside a car and the third was in the parking lot outside the store in Duncan, Police Chief Danny Ford said.
Police are looking for witnesses to the shooting, Ford said.
No staff members were involved in the shooting and the store was not evacuated, Walmart spokeswoman LeMia Jenkins said in an email.
"This was an isolated incident in the parking lot and was not an active shooter situation," Jenkins said.
Police said in a Facebook post that a handgun was found at the scene.
Duncan is about 130 kilometres south of Oklahoma City.


I wish to express my sincere appreciation to the late Mr. Zvi Doron who played a leading role of UltraLog project. This program uses one of his core achievement -- scale arrangement, which gives the program huge potential. And my appreciation also goes to his son, Mr. Yotam Doron who gave me permission to use the arrangement.
And I think I should mention that Zvi would like to commemorate the late Mr. Hans Dennert with the *real* UltraLog slide rule materialisation project.
M. Murakami


Uh oh, something went wrong. Stay calm, our ninjas are currently working on the issue.
You can try again later, or return to the home page.
{% extends "blog/pages/article.html" %} {% load django_markdown compress %} {% block content %}
Uh oh, something went wrong. Stay calm, our ninjas are currently working on the issue.
You can try again later, or return to the home page.


O BROTHER, WHERE ART THOU? --------------------------
Ulysses Everett McGill (George Clooney, "Three Kings") takes his ball and chain mates Delmar (Tim Blake Nelson, "The Thin Red Line") and Pete (John Turturro, "Rounders") on an escape from a 1930s Mississippi hard labor camp. The three embark upon an adventurous road trip in a race against time as Everett's gold is buried in an area slated to be flooded by the Tennessee Valley Authority in Joel and Ethan Coen's "O Brother, Where Art Thou?"
LAURA:
The Coen brothers excel at recreating American film genres and styles. The ambitious "O Brother, Where Art Thou?" bears more than a passing resemblance to its namesake, Preston Sturges' "Sullivan's Travels" (it was the name of the serious film comedy director John L. Sullivan (Joel McRea) wanted to make in that film before he discovered the value of comedy).
The threesome are immediately in hot water when Pete's cousin, whom they went to for shelter, turns them in. ('Damn, we're in a tight spot!' pronounces Everett.) Menancing Sheriff Cooley (Daniel Von Bargen, "The General's Daughter") and his pack of bloodhounds is never far behind them from this point on. After stealing a car, they pick up a black blues guitarist, Tommy Johnson (Chris Thomas King), hitchhiking at crossroads in the middle of nowhere after selling his soul to the devil. After a brief interlude where Delmar and Pete get baptized they're cutting a record at a remote radio outpost as the Soggy Bottom Boys. Unbeknownst to them, their record climbs the charts as they cross paths with Baby Face Nelson (Michael Badalucco, "Summer of Sam"), lose Pete to a trio of river Sirens (Delmar's convinced they've turned him into a toad), get beaten and robbed by a maniacal bible salesman, Big Dan Teague (Coens' vet John Goodman), and rescue Tommy from the Ku Klux Klan in a scene straight out of the "Wizard of Oz!" Then there's the film's double climax as Governor Pappy O'Daniel (Charles Durning) challenges rival Homer Stokes (Wayne Duvall, "The Deep End of the Ocean") at a political rally while Everett attempts to woo back his wife Penny (Holly Hunter) followed by the final showdown with Sheriff Cooley.
The film is surreally funny, featuring oddball Coen humor such as Baby Face Nelson shooting at cattle ('Oh George, not the livestock!' wails Delmar) and Everett's constant search for his brand of hair pomade (Dapper Dan's). While it doesn't reach the heights of the Coens' very best ("Fargo," "Millers Crossing," "Blood Simple") because of its meandering ways, it's a solid middle effort with charm to spare.
George Clooney channels the comedic charm of Clark Gable in a stylized, yet pitch perfect performance. Preening in a mirror or issuing the goofiest of dance moves as a Soggy Bottom, Clooney fits into the Coen brothers' brand of comedy like a custom tailored suit.  John Turturro is the high strung, manic member of the threesome. Of the supporting players, Stephen Root (TV's "Newsradio") gets some mileage out of a brief appearance as a blind radio station manager while Durning blusters and flusters as Pappy O'Daniel with his two yes men and lookalike son Junior (Del Pentecost). Other cast members mostly go through the motions.
The film is beautifully shot in a golden glow by the Coens' frequent cinematographer Roger Deakins ("Fargo"). T Bone Burnett provides the authentically antique sounding music.
B
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


This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.
It uses utility classes for typography and spacing to space content out within the larger container.
Learn moreThe fraternity of Pi Alpha Phi was founded in 1929 at the University of California, Berkeley by six individuals: D. Wing Tom, Wing Chan, Elemer Leung, Chack Chan, Tim Jang and George Lee. During this era, the founding fathers of Pi Alpha Phi along with many other Asian-Americans faced discrimination in various forms. Student lodging was often not rented to those of Asian heritage, it was the goodwill of a sympathetic German woman known as Mother Tusch, who had also been a victim of racism, that gave the founding fathers Wing Chan, Elmer Leong, and D. Wing Tom housing in Mother Tusch's cabin behind her house. Traditional Greek fraternities also legally discriminated against men of color, having explicit policies prohibiting the membership of nonwhites and non-Christians. It was during this time that people of different ethnic backgrounds - namely Latino, Black and Asian - began creating their own Greek organizations. It was these forms of racial discrimination that pushed the six founding fathers of Pi Alpha Phi together in which they conceived the idea to form a fraternity to serve the several hundred students of Asian descent at the University of California, Berkeley. On February 1st, 1929, the six Founding Fathers officially signed the fraternity's constitution and established Pi Alpha Phi at the University of California, Berkeley.
Written in the original constitution are several values that Pi Alpha Phi aims to instill and maintain in all its members.
Pi Alpha Phi is meant to be an extended family that nurtures life-long friendships through bonds of tradition and shared values. Among our pillars, Brotherhood is Pi Alpha Phi's immutable asset.
Pi Alpha Phi fosters leadership by providing opportunities to fulfill important duties within the organization in preparation for our Brothers' future careers and endeavors.
Pi Alpha Phi believes in learning Asian American culture, heritage, and history. The fraternity encourages its members to learn and pass this knowledge on to others.
Pi Alpha Phi encourages all of its members to achieve academic excellence and nurtures a studious environment for our brothers to succeed.
Pi Alpha Phi believes in a responsibility to serve others and encourages participation in activities for the betterment of the community. The fraternity's national philanthropy is the Jade Ribbon Campaign.
| Chapter | University | Established |
|---|---|---|
| Alpha | University of California, Berkeley | 1926 |
| Beta | State University of New York, Stony Brook | 1990 |
| Gamma | University of California, Davis | 1990 |
| Delta | San Jose State University | 1991 |
| Epsilon | University of California, Riverside | 1993 |
| Zeta | University of California, Santa Cruz | 1995 |
| Eta | University of California, Irvine | 1998 |
| Theta | University of California, San Diego | 2000 |
| Iota | University of Michigan | 2000 |
| Kappa | The University of Arizona, Tucson | 2002 |
| Mu | Michigan State University | 2003 |
| Nu | University of North Carolina at Chapel Hill | 2003 |
| Xi | University of Washington | 2004 |
| Omicron | University of California, Santa Barbara | 2006 |
| Pi | The University of Iowa | 2011 |
| Rho | University of North Carolina at Charlotte | 2012 |
| Sigma | Northwestern University | 2013 |
| Tau | North Carolina State University | 2011 |
| Upsilon | San Francisco State University | 2016 |
| Associate | State University of New York, Buffalo | 2008 |
| Colony | University of Nevada, Las Vegas | 2013 |
| Colony | University of Delaware | 2014 |
| Colony | Iowa State University | 2014 |
| Colony | Arizona State University | 2014 |
| Colony | Drexel University | 2014 |


Week 7: JavaScript Introduction
December 1, 2015
This week was the beginning of our JavaScript curriculum. There are a lot of similarities to Ruby and the types of tasks we've learned to program in the past few weeks, but the syntax is different, and there are a few other key differences. I'll elaborate on one of them below.
Let's say we have an array of numbers from 1 to 10. In Ruby, there are a few ways we could iterate through them and print each out:
my_numbers = [1,2,3,4,5,6,7,8,9,10] my_numbers.each do |x| puts x end for i in 0..my_numbers.length-1 puts my_numbers[i] end
Whether we are using the built-in .each method or manually iterating through each position of the array, we are essentially performing the same task: telling an iterator where to start and end, how much to increment, and what to do at each stage. The concept is similar in JavaScript, although the syntax is different.
my_numbers = [1,2,3,4,5,6,7,8,9,10] for (var i=0; i < my_numbers.length; i +=1) console.log(my_numbers[i])
Note that in JavaScript we do not require an "end" after our for loop, and we use console.log to print to the screen. Within the for parenthesis, we are setting a variable i that starts at 0 and increments by 1 until it reaches the length of the array - then we print out the array at each position.


Seriously, what did you (not) learn from the previous page about clicking on links from suspicious pages?


Cyclist fighting for life after alleged hit and run
by Staff WriterA CYCLIST is in a serious condition in hospital after he was allegedly struck by a Jeep in a hit and run in Girrawheen.
About 7.30pm on Saturday, it is alleged a 49-year old man was at a shopping centre on Marangaroo Drive and Templeton Avenue.
The victim, an 18-year-old man from Noranda, was also at the shopping centre in company with friends.
Police alleged an altercation occurred between the man, the victim and his friends.
It is alleged the man began to drive his Jeep Cherokee towards them.
The victim, who was riding a bicycle, rode through the car park trying to escape as the man allegedly continued to drive the Jeep towards him at speed.
Police said as the victim approached the western end of the car park on his bicycle, he slowed down as he mounted the kerb and the man continued to drive the Jeep towards him.
It is further alleged the man drove the Jeep at speed directly into the back of the victim’s bicycle before driving the Jeep over the top of the victim and the bicycle before slowing down and coming to a stop on the edge of the median strip.
It is alleged the man at no time rendered any assistance or checked on the welfare of the victim who was lying on the ground behind the Jeep.
He was arrested a short time later by police.
The victim, an 18-year-old man from Noranda, was taken by ambulance to Royal Perth Hospital with life-threatening injuries.
The 49-year-old man from Girrawheen appeared before the Perth Magistrates Court yesterday charged with dangerous driving occasioning grievous bodily harm, failing to stop and ensure assistance received after incident occasioning grievous bodily harm and failing to comply with a requirement to provide sample or accompany police.


Perlin Noise Maker
Create your own images of Perlin noise! This app will generate tileable Perlin noise textures which is a useful raw material for may image processing applications.
Adjust the values below to change the proerties of the image.
To save the image, click on the Download Image link below. Alternately, you can right click the image and use your web browser's menu to save it to disk.
How it works
Width and Height determine the width and height of the final image in pixels.
Cell size determines the coarseness of the image. Perlin noise is made by blending together gradients that are evenly spaced apart in a grid. By adjusting the spacing, you can change the coarseness of the generated texture. The final image will tile seamlessly if the width and height of the image are whole multiples of the cell spacing. For best results, use numbers that are powers of 2 for the image width, height and cell spacing.
Levels will blend extra levels of noise into your texture, with each additional level half the resolution of the previous one. Blending several layers of noise can produce a cloudy effect.
Attenuation controls how multiple levels are mixed. Less attenuation will make the coarser levels more prominent, giving you a rougher look.
Color and Alpha determine which channels in the final image have unique noise generated. By default a black and white texture will be generated (ie, the red, green and blue channels are all set to the same value and the alpha channel is solid white). By checking 'color', you will write different noise textures into each of the red, green and blue channels. By checking 'alpha' you will write noise into the alpha channel.
Groovy will rectify the noise. That is, all values in the noise that are mid grey or darker will be inverted and then the entire texture is resampled to fill the full black-to-white range. This creates a groove-like effect in the final texture which can be useful for some applications.
Randseed determines the starting state of the random number generator. By changing it, you can create a different pattern of randomness in your image.
© 2015 Mark McKay


Leggiero
Leggiero
Introduction
Leggiero
Dependency
Overview
Visual Studio
Android
iOS
Other Dependencies
Getting Started
Engine Setup
Build and try LegToy
Start with a NEW project
Notes for Android Release Build
Changelog
v0.9.0 (current)
Known Issues
Concept and Architecture
A Bird’s-eye View
Roadmap
Platforms
Platforms
Supported Platforms
Comparison
iOS Platform
Supporting Details
Development Environment
Libraries
Android Platform
Supporting Details
Development Environment
Libraries
Windows PC Platform
Development Environment
Libraries
Modules
Modules
Component and Module Interface
Others
Tools
Project Creator
License
Leggiero
Libraries
LegToy
Library Usage
Leggiero
LegToy
Leggiero
»
Index
Index


register as family member??
please enter first name
please enter valid first name
first name must be less than 20.
please enter last name
please enter valid last name
first name must be less than 15.
please enter emailid
email id must be less than 50.
enter valid email id
please enter password
password length is short.(minlenght=6)
please re-enter password
passwords does not match
please enter mobile no
enter valid mobile no
value must be less than 25
{{err}}


We taste test hundreds of products from brands all over the country to ensure you are cooking with the best ingredients possible.
We teach you the best kitchen skills with recipes guarenteed to work so YOU can feel confident.
We put every piece of equipment we recommend through rigorous testing and we never accept free products to ensure our opinion isn't tainted.


Born and raised in Philadelphia, I went to high school in Rhode Island, college in Maine, and worked on Wall Street out of college. After a few years in New York City, I moved to Seattle to try something new. I started working in high-tech startups as soon as I arrived. Since then, I've conceived of, launched, and marketed B2B and B2C products for most of my career. But now I want more control to build my own applications. Thus, I'm here at CodeFellows to learn Javascript, HTML, and CSS.
My name is Hawa, it means 'air' in both Hindi and Arabic. I am a mid-westerner at heart, but after moving here to Seattle in 2010, Seattle is slowly but surely growing on me. I am currently attending Code Fellows in hopes of becoming a full-stack web developer. I majored in Early Childhood and Elementary Education from the Teacher Preparation Program at Central Washington University. With my background of Education and the skills I will have gained from CF, I hope to combine both of my passions into one.
I have lived in the Seattle area my entire life, attending a cummunity college north of the city. After getting an Associate in Fine Arts Degree I decided against continuing with pursuing a 4 year degree. Instead I pursued career possibilities in Real Estate. Though I had chosen to not pursue a traditional schooling experience in favor of work, I continued to pursue alternative educational avenues in my free time - Chief among them being web developemnet.
Born in the midwest and raised on the west coast I have grown up loving all things PNW. Coffee, Rain, and the Seattle Mariners are just a few of my favorite things. I am passionate about the outdoors and you will most likely find me rock climbing, backcountry skiing, or hiking on the weekends. Before coming to Code Fellows I worked in marketing for a software company in Bellingham. I am excited about learning code and hope to complete the 401 Full Stack Course.


Modoc sucker pygmy sunfish triggerfish, deepwater cardinalfish golden trout banjo catfish dwarf loach. Rainbowfish northern lampfish grunion Black prickleback, "masu salmon Redhorse sucker scat, greeneye frogmouth catfish," chain pickerel. Norwegian Atlantic salmon pompano dolphinfish beachsalmon pollyfish eelpout catfish flabby whalefish. Eel-goby bent-tooth sea bass; roundhead, triplespine tubeshoulder dhufish pencilfish pelican eel Blacksmelt black dragonfish. Kuhli loach chub scaleless black dragonfish tadpole fish sabertooth, pearl danio sardine zebra pleco, longnose sucker. Smoothtongue: sea lamprey paradise fish barreleye whalefish jewel tetra, central mudminnow whalefish--deepwater stingray cisco gombessa, Modoc sucker opaleye. Righteye flounder fingerfish smelt-whiting dogfish hairtail southern hake velvetfish Lost River sucker smalleye squaretail tadpole cod; brown trout. Walu pike characid bamboo shark stingray Pacific saury tailor; pirate perch.
Goosefish huchen eel, Atlantic salmon trout cod black bass bluefin tuna, bonefish. Tadpole fish carpsucker unicorn fish, golden dojo. Blue-redstripe danio swordtail, skipjack tuna California flyingfish surfperch flashlight fish cobbler. Glass catfish roosterfish white shark rough pomfret aholehole dorab mahseer; yellowtail barracuda.


/* This file is part of Ext JS 4 Copyright (c) 2011 Sencha Inc Contact: http://www.sencha.com/contact Commercial Usage Licensees holding valid commercial licenses may use this file in accordance with the Commercial Software License Agreement provided with the Software or, alternatively, in accordance with the terms contained in a written agreement between you and Sencha. If you are unsure which license is appropriate for your use, please contact the sales department at http://www.sencha.com/contact. */ /** * This layout allows you to easily render content into an HTML table. The total number of columns can be specified, and * rowspan and colspan can be used to create complex layouts within the table. This class is intended to be extended or * created via the `layout: {type: 'table'}` {@link Ext.container.Container#layout} config, and should generally not * need to be created directly via the new keyword. * * Note that when creating a layout via config, the layout-specific config properties must be passed in via the {@link * Ext.container.Container#layout} object which will then be applied internally to the layout. In the case of * TableLayout, the only valid layout config properties are {@link #columns} and {@link #tableAttrs}. However, the items * added to a TableLayout can supply the following table-specific config properties: * * - **rowspan** Applied to the table cell containing the item. * - **colspan** Applied to the table cell containing the item. * - **cellId** An id applied to the table cell containing the item. * - **cellCls** A CSS class name added to the table cell containing the item. * * The basic concept of building up a TableLayout is conceptually very similar to building up a standard HTML table. You * simply add each panel (or "cell") that you want to include along with any span attributes specified as the special * config properties of rowspan and colspan which work exactly like their HTML counterparts. Rather than explicitly * creating and nesting rows and columns as you would in HTML, you simply specify the total column count in the * layoutConfig and start adding panels in their natural order from left to right, top to bottom. The layout will * automatically figure out, based on the column count, rowspans and colspans, how to position each panel within the * table. Just like with HTML tables, your rowspans and colspans must add up correctly in your overall layout or you'll * end up with missing and/or extra cells! Example usage: * * @example * Ext.create('Ext.panel.Panel', { * title: 'Table Layout', * width: 300, * height: 150, * layout: { * type: 'table', * // The total column count must be specified here * columns: 3 * }, * defaults: { * // applied to each contained panel * bodyStyle: 'padding:20px' * }, * items: [{ * html: 'Cell A content', * rowspan: 2 * },{ * html: 'Cell B content', * colspan: 2 * },{ * html: 'Cell C content', * cellCls: 'highlight' * },{ * html: 'Cell D content' * }], * renderTo: Ext.getBody() * }); */ Ext.define('Ext.layout.container.Table', { /* Begin Definitions */ alias: ['layout.table'], extend: 'Ext.layout.container.Auto', alternateClassName: 'Ext.layout.TableLayout', /* End Definitions */ /** * @cfg {Number} columns * The total number of columns to create in the table for this layout. If not specified, all Components added to * this layout will be rendered into a single row using one column per Component. */ // private monitorResize:false, type: 'table', // Table layout is a self-sizing layout. When an item of for example, a dock layout, the Panel must expand to accommodate // a table layout. See in particular AbstractDock::onLayout for use of this flag. autoSize: true, clearEl: true, // Base class will not create it if already truthy. Not needed in tables. targetCls: Ext.baseCSSPrefix + 'table-layout-ct', tableCls: Ext.baseCSSPrefix + 'table-layout', cellCls: Ext.baseCSSPrefix + 'table-layout-cell', /** * @cfg {Object} tableAttrs * An object containing properties which are added to the {@link Ext.DomHelper DomHelper} specification used to * create the layout's `<table>` element. Example: * * { * xtype: 'panel', * layout: { * type: 'table', * columns: 3, * tableAttrs: { * style: { * width: '100%' * } * } * } * } */ tableAttrs:null, /** * @cfg {Object} trAttrs * An object containing properties which are added to the {@link Ext.DomHelper DomHelper} specification used to * create the layout's <tr> elements. */ /** * @cfg {Object} tdAttrs * An object containing properties which are added to the {@link Ext.DomHelper DomHelper} specification used to * create the layout's <td> elements. */ /** * @private * Iterates over all passed items, ensuring they are rendered in a cell in the proper * location in the table structure. */ renderItems: function(items) { var tbody = this.getTable().tBodies[0], rows = tbody.rows, i = 0, len = items.length, cells, curCell, rowIdx, cellIdx, item, trEl, tdEl, itemCt; // Calculate the correct cell structure for the current items cells = this.calculateCells(items); // Loop over each cell and compare to the current cells in the table, inserting/ // removing/moving cells as needed, and making sure each item is rendered into // the correct cell. for (; i < len; i++) { curCell = cells[i]; rowIdx = curCell.rowIdx; cellIdx = curCell.cellIdx; item = items[i]; // If no row present, create and insert one trEl = rows[rowIdx]; if (!trEl) { trEl = tbody.insertRow(rowIdx); if (this.trAttrs) { trEl.set(this.trAttrs); } } // If no cell present, create and insert one itemCt = tdEl = Ext.get(trEl.cells[cellIdx] || trEl.insertCell(cellIdx)); if (this.needsDivWrap()) { //create wrapper div if needed - see docs below itemCt = tdEl.first() || tdEl.createChild({tag: 'div'}); itemCt.setWidth(null); } // Render or move the component into the cell if (!item.rendered) { this.renderItem(item, itemCt, 0); } else if (!this.isValidParent(item, itemCt, 0)) { this.moveItem(item, itemCt, 0); } // Set the cell properties if (this.tdAttrs) { tdEl.set(this.tdAttrs); } tdEl.set({ colSpan: item.colspan || 1, rowSpan: item.rowspan || 1, id: item.cellId || '', cls: this.cellCls + ' ' + (item.cellCls || '') }); // If at the end of a row, remove any extra cells if (!cells[i + 1] || cells[i + 1].rowIdx !== rowIdx) { cellIdx++; while (trEl.cells[cellIdx]) { trEl.deleteCell(cellIdx); } } } // Delete any extra rows rowIdx++; while (tbody.rows[rowIdx]) { tbody.deleteRow(rowIdx); } }, afterLayout: function() { this.callParent(); if (this.needsDivWrap()) { // set wrapper div width to match layed out item - see docs below Ext.Array.forEach(this.getLayoutItems(), function(item) { Ext.fly(item.el.dom.parentNode).setWidth(item.getWidth()); }); } }, /** * @private * Determine the row and cell indexes for each component, taking into consideration * the number of columns and each item's configured colspan/rowspan values. * @param {Array} items The layout components * @return {Object[]} List of row and cell indexes for each of the components */ calculateCells: function(items) { var cells = [], rowIdx = 0, colIdx = 0, cellIdx = 0, totalCols = this.columns || Infinity, rowspans = [], //rolling list of active rowspans for each column i = 0, j, len = items.length, item; for (; i < len; i++) { item = items[i]; // Find the first available row/col slot not taken up by a spanning cell while (colIdx >= totalCols || rowspans[colIdx] > 0) { if (colIdx >= totalCols) { // move down to next row colIdx = 0; cellIdx = 0; rowIdx++; // decrement all rowspans for (j = 0; j < totalCols; j++) { if (rowspans[j] > 0) { rowspans[j]--; } } } else { colIdx++; } } // Add the cell info to the list cells.push({ rowIdx: rowIdx, cellIdx: cellIdx }); // Increment for (j = item.colspan || 1; j; --j) { rowspans[colIdx] = item.rowspan || 1; ++colIdx; } ++cellIdx; } return cells; }, /** * @private * Return the layout's table element, creating it if necessary. */ getTable: function() { var table = this.table; if (!table) { table = this.table = this.getTarget().createChild( Ext.apply({ tag: 'table', role: 'presentation', cls: this.tableCls, cellspacing: 0, //TODO should this be specified or should CSS handle it? cn: {tag: 'tbody'} }, this.tableAttrs), null, true ); } return table; }, /** * @private * Opera 10.5 has a bug where if a table cell's child has box-sizing:border-box and padding, it * will include that padding in the size of the cell, making it always larger than the * shrink-wrapped size of its contents. To get around this we have to wrap the contents in a div * and then set that div's width to match the item rendered within it afterLayout. This method * determines whether we need the wrapper div; it currently does a straight UA sniff as this bug * seems isolated to just Opera 10.5, but feature detection could be added here if needed. */ needsDivWrap: function() { return Ext.isOpera10_5; } });


If the form of a distribution is intractable in that it is difficult to find exact probabilities by integration, then good estimates and bounds become important. Bounds on the tails of the distribution of a random variable help us quantify roughly how close to the mean the random variable is likely to be.
We already know two such bounds. Let $X$ be a random variable with expectation $\mu$ and SD $\sigma$.
If $X$ is non-negative, $$ P(X \ge c) ~ \le ~ \frac{\mu}{c} $$
Moment generating functions can help us improve upon these bounds in many cases. In what follows, we will assume that the moment generating function of $X$ is finite over the whole real line. If it is finite only over a smaller interval around 0, the calculations of the mgf below should be confined to that interval.
Observe that if $g$ is an increasing function, then the event $\{ X \ge c \}$ is the same as the event $\{ g(X) \ge g(c)\}$.
For any fixed $t > 0$, the function defined by $g(x) = e^{tx}$ is increasing as well as non-negative. So for each $t > 0$,
\begin{align*} P(X \ge c) ~ &= P(e^{tX} \ge e^{tc}) \\ &\le ~ \frac{E(e^{tX})}{e^{tc}} ~~~~ \text{(Markov's bound)} \\ &= ~ \frac{M_X(t)}{e^{tc}} \end{align*}This is the first step in developing a Chernoff bound on the right hand tail.
For the next step, notice that you can choose $t$ to be any positive number. Some choices of $t$ will give sharper bounds than others. Because these are upper bounds, the sharpest among all of the bounds will correspond to the value of $t$ that minimizes the right hand side. So the Chernoff bound has an optimized form:
$$ P(X \ge c) ~ \le ~ \min_{t > 0} \frac{M_X(t)}{e^{tc}} $$Suppose $X$ has the normal $(\mu, \sigma^2)$ distribution and we want to get a sense of how far $X$ can be above the mean. Fix $c > 0$. The exact chance that the value of $X$ is at least $c$ above the mean is
$$ P(X - \mu \ge c) ~ = ~ 1 - \Phi(c/\sigma) $$because the distribution of $X - \mu$ is normal $(0, \sigma^2)$. This exact answer looks neat and tidy, but the standard normal cdf $\Phi$ is not easy to work with analytically. Sometimes we can gain more insight from a good bound.
The optimized Chernoff bound is
\begin{align*} P(X- \mu \ge c) ~ &\le ~ \min_{t > 0} \frac{M_{X-\mu}(t)}{e^{tc}} \\ \\ &= ~ \min_{t > 0} \frac{e^{\sigma^2t^2/2}}{e^{tc}} \\ \\ &= ~ \min_{t > 0} e^{-ct + \sigma^2t^2/2} \end{align*}The curve below is the graph of $\exp(-ct + \sigma^2t^2/2)$ as a function of $t$, in the case $\sigma = 2$ and $c = 5$. The flat line is the exact probability of $P(X - \mu \ge c)$. The curve is always above the flat line: no matter what $t$ is, the bound is an upper bound. The sharpest bound corresponds to the minimizing value $t^*$ which is somewhere in the 1.2 to 1.3 range.
To find the minimizing value of $t$ analytically, we will use the standard calculus method of minimization. But first we will simplify our calculations by a method we used when we were finding maximum likelihood estimates.
Finding the point at which a positive function is minimized is the same as finding the point at which the log of the function is minimized. This is because $\log$ is an increasing function.
So the problem reduces to finding the value of $t$ that minimizes the function $h(t) = -ct + \sigma^2t^2/2$. By differentiation, the minimizing value of $t$ solves
$$ c ~ = ~ \sigma^2 t^* $$and hence $$ t^* ~ = ~ \frac{c}{\sigma^2} $$
So the Chernoff bound is $$ P(X - \mu \ge c) ~ \le ~ e^{-ct^* + \sigma^2{t^*}^2/2} ~ = ~ e^{-\frac{c^2}{2\sigma^2}} $$
Compare this with the bounds we already have. Markov's bound can't be applied directly as $X - \mu$ can have negative values. Because the distribution of $X - \mu$ is symmetric about 0, Chebychev's bound becomes
$$ P(X - \mu \ge c ) ~ \le ~ \frac{\sigma^2}{2c^2} $$When $c$ is large, the optimized Chernoff bound is quite a bit sharper than Chebychev's. In the case $\sigma = 2$, the graph below shows the exact value of $P(X - \mu \ge c)$ as a function of $c$, along with the Chernoff and Chebychev bounds.
By an analogous argument we can derive a Chernoff bound on the left tail of a distribution. For a fixed $t > 0$, the function $g(x) = e^{-tx}$ is decreasing and non-negative. So for $t > 0$ and any fixed $c$,
$$ P(X \le c) ~ = ~ P(e^{-tX} \ge e^{-tc}) ~ \le ~ \frac{E(e^{-tX})}{e^{-tc}} ~ = ~ \frac{M_X(-t)}{e^{-tc}} $$and therefore $$ P(X \le c) ~ \le ~ \min_{t > 0} \frac{M_X(-t)}{e^{-tc}} $$
The Chernoff bound is often applied to sums of independent random variables. Let $X_1, X_2, \ldots, X_n$ be independent and let $S_n = X_1 + X_2 + \ldots + X_n$. Fix any number $c$. For every $t > 0$,
$$ P(S_n \ge c) ~ \le ~ \frac{M_{S_n}(t)}{e^{tc}} ~ = ~ \frac{\prod_{i=1}^n M_{X_i}(t)}{e^{tc}} $$This result is useful for finding bounds on binomial tails because the moment generating function of a Bernoulli random variable has a straightforward form. It is also used for bounding tails of sums of independent indicators with possibly different success probabilities. We will leave all this for a subsequent course.


Cyprus 1-2 Scotland: Steve Clarke says side are a 'work in progress'
Scotland are still a "work in progress" after securing a 2-1 Euro 2020 qualification win in Cyprus, says manager Steve Clarke.
Clarke says he was left with a "smile on my face" after goals by Ryan Christie and John McGinn helped the Scots into third in Group I.
Beating Kazakhstan on Tuesday would be a third win in a row for a side who can only reach the finals by the play-offs.
"That would set us up nicely for those game in March," Clarke said.
Christie's strike gave Scotland the lead, with McGinn adding a second after former Rangers and Dundee winger Georgios Efrem had hauled the home side level.
It followed a comprehensive 6-0 win over San Marino at Hampden last month after four consecutive defeats at the hands of Belgium and Russia.
"In Russia, the reaction to going behind wasn't great, but tonight the reaction was really good and we got back in front with a great team goal," said Clarke.
"We knew it would be a difficult game but I thought when we went in front we were the better team. We showed a little bit of resilience to get the three points that we wanted.
"I'm not going to say it was a fantastic performance - it was a good performance. Sometimes when you're coming out of the run of games that we're coming out of it's more important to win."
Scotland did have rocky moments in the game, with an Efrem effort when the game was goalless appearing to cross the line after striking the crossbar.
But after conceding 13 goals against Belgium and Russia, Clarke was happy to see his side keep Cyprus at just one goal.
"We have things we can improve on in the team," he said, confirming that Steven Naismith is "fine" despite lasting just an hour.
"If you want to be really good and scintillating going forward sometimes you have to sacrifice a little defensively.
"Rather than going down the negative route I'd say we're still a work in progress."
Cyprus coach Ran Ben Shimon was less content, though, suggesting that the "team that tried to play football lost this game".
He noted his surprise at the number of "long balls" his side faced and also railed against the decision not to give Efrem's early strike.
"It was the decisive moment in the game. To lead after six minutes would have been crucial. It was half a metre inside. It was a poor performance," he said.
"I have respect for opponents but the better team lost."


About Alex
I am currently a senior at Michigan State University studying for a Bachelor of Science with the major of Media and Information, and the minor of Information Technologies. I have over 3 years of professional IT experience working as a Student Supervisor within MSU's Technology and Network Support group. I have completed a number of courses that make me proficient in the area of client/server side web developement, web design, marketing, and network infrastructure. In my free time I'm an avid reader, writer, videogame enthusiast and also a hobbiest blacksmith.
Work Experience
IT Services Technology and Network Support Student Supervisor
Michigan State University, East Lansing, MI — 2011-Present
Working as a call center consultant, trainer, and supervisor of student employees within MSU’s IT Services TNS area.
Required to be able to troubleshoot network and internet connections, OS operations, printing over a network, credential management, webmail services, and SSL VPN.
This position makes use of the ITService Desk ticketing system on a regular basis, and responsiblities include accurate and effective ticket filing/resolution, as well as, ticket SLA followup procedures.
This position is also responsible, in part, for the training of new consultants, as well as taking place in the evaluation process of their abilities as trainees.
Social Media Manager
East Lansing Film Festival, East Lansing, MI — October 2014-December 2014
Part of a project team tasked with improving and modernizing the social media presence of the East Lansing Film Festival
with the intention of increasing online engagement leading to increased sales. My duties included creating a statement of work,
preforming in-depth competitor analysis, structuring a content strategy, setting up automated content delivery using the hootsuite
application, creating documentation, and creating final deliverables project report.
Relavent Coursework
Web Development- Computng Concepts/Competencies
- Web Design
- Intro to Interactive Media
- Media Interactivity
- Client-Side Web Development
- Server-Side Web Development
- Web Administration
Programming
- Introduction to Programming I
- Introduction to Programming II
- Intro to Media and info Tech
Other
- Topics in CyberSecurity
- Bringing Media to Market
- ICT Management
- Systems Analysis and Design
- Social Computing
- Information Technology Project
Contact
Phone:<PHONE_NUMBER>
Email<EMAIL_ADDRESS>Alternate Email: alexanderjgoff92@gmail.com


A Bridge Too Far
Home
Products
Item of the Day
Privacy
Selling Dreams
Our Products
Golden Gate Bridge
San Francisco
Landmarks
24,000,000 AUD
London Bridge
London
City Bridges
50,000,000 AUD
Brooklyn Bridge
New York
Large Bridges
42,000,000 AUD
Harbour Bridge
Sydney
Landmarks
99,000,000 AUD
Millau Viaduct
France
Modern Wonders
4,238,000,000 AUD


{% extends 'base.html' %} {% load static %} {% block content %}
We followed our research with the help of below references:
Indian Journal of Science and Technology.


Craze for cad is an complete AutoCAD event where different levels of AutoCAD starting from 2D and ends at 3D in which participants compete with each other. The first 2 rounds are based on 2D planning and 3rd round is completely based on 3D.
Teacher incharge: Mukesh balwani<PHONE_NUMBER>
Head: Kunal Chaudhari<PHONE_NUMBER>
Co head: Pravin Chouragade<PHONE_NUMBER>
Q) What is the price amount?
And) Worth Rs 5000/- ( no other false promises)
Q) What will happen in event ?
Ans) Its an complete AutoCAD event ( no description about event)


The TTI library uses macros to create metafunctions, in the current scope, for introspecting an inner element by name. Each macro for a particular type of inner element has two forms, the simple one where the first macro parameter designating the 'name' of the inner element is used to create the name of the metafunction, and the complex one where the first macro parameter, called 'trait', designates the name of the metafunction and the second macro parameter designates the 'name' to be introspected. Other than that difference, the two forms of the macro produce the exact same results.
To use these metafunctions you can include the main general header file 'boost/tti/tti.hpp', unless otherwise noted. Alternatively you can include a specific header file as given in the table below.
A table of these macros is given, based on the inner element whose existence the metaprogrammer is introspecting. More detailed explanations and examples for each of the macro metafunctions will follow this section in the documentation. The actual syntax for each macro metafunction can be found in the reference section, and examples of usage for all the macro metafunctions can be found in the "Using the Macro Metafunctions" section.
In the Template column only the name generated by the simple form of the template is given since the name generated by the complex form is always 'trait' where 'trait' is the first parameter to the corresponding complex form macro. All of the introspecting metafunctions in the table below return a boolean constant called 'value', which specifies whether or not the inner element exists.
Table 1.1. TTI Macro Metafunctions
|
Inner Element |
Macro |
Template |
Specific Header File |
|---|---|---|---|
|
Type |
|
class T = enclosing type |
|
|
Type with check |
|
class T = enclosing type class U = type to check against |
|
|
Class Template |
|
class T = enclosing type All of the template parameters must be 'class' ( or 'typename' ) parameters |
|
|
Class Template with params |
|
class T = enclosing type |
|
|
Class Template with params using variadic macros[b] |
|
class T = enclosing type |
|
|
Member data |
class T = enclosing type class R = data type |
||
|
Member function as individual types |
class T = enclosing type class R = return type class FS = (optional) function parameter types as a Boost MPL forward sequence. If there are no function parameters this does not have to be specified. Defaults to boost::mpl::vector<>.
class TAG = (optional) Boost |
||
|
Member function as a composite type |
class T = pointer to member function The form for T is 'ReturnType (Class::*)(Zero or more comma-separated parameter types)' |
||
|
Static member data |
class T = enclosing type class Type = data type |
||
|
Static member function as individual types |
class T = enclosing type class R = return type class FS = (optional) function parameter types as a Boost MPL forward sequence. If there are no function parameters this does not have to be specified. Defaults to boost::mpl::vector<>.
class TAG = (optional) Boost |
||
|
Static member function as a composite type |
class T = enclosing type class Type = function type The form for Type is 'ReturnType (Zero or more comma-separated parameter types)' |
||
|
[a] A Boost PP data sequence with each comma separated portion of the template parameters as its own sequence element. [b]
General header file is [c] The template parameters as variadic data. |


Staples Team Supervisor/Software Engineering Graduate of @flatiron-school
Published Jan 19, 2020
I recently had to create a Single Page Application(SPA) that uses a Rails back end for handling and storing data and JavaScript for the front end. I chose to create a simple poll app that allows users to create a poll that other users can then take and everyone can view the results. So the examples will be using names based around that kind of application. You can see the code from this project here
#### Requirements
You will need to configure PostgreSQL before hand so if you have not done so you cant google it or if you are on Ubuntu for a OS you can follow this guide here. Once that is done you can create your rails back end API with the following line
### Create the app
rails new PollAppBackEnd --api --database=postgresql
This will create a new rails API app with a PostgreSQL database. Once you run that command you should configure the PostgreSQL user and password in a secure way using the rails built in encrypted credentials or the dotenv-rails gem.
### Add some Gems
Here we need to enable the cors gem by uncommenting gem 'rack-cors'
in the Gemfile for handling cross origin resource sharing. Also I added some other gems I find useful like gem 'active_model_serializers'
for easy setting up json return values and for debugging and whatnot so you should add these as well
gem 'byebug'
gem 'pry-moves'
gem "better_errors"
gem 'faker'
- for seeding database with filler dataAfter adding the gems run bundle install
and then we need to uncomment the lines
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
From the file
### Create/Run Migrations After doing that you start creating your migrations, for this example we will use the names polls, answers, and submissions for tables. So we can generate them like this, specifing the name of the table then attributes(we don’t need to specify the datatype for some because the default of string is fine).
rails g migration polls title author question answer_ids:integer
rails g migration answer content poll_id:integer
rails g migration submissions poll_id answer_id
Now run your migrations with rails db:migrate
, you may have to run rails g db:create
first if you have not already.
### Create Models
To connect our database via code we have to create the corresponding models. So to generate those you can run
rails g model poll
rails g model answer
rails g model submission
### Create Controllers
Here we create our controllers with you guessed it, generators
rails g controller Polls
rails g controller Submissions
For this example we really only the two here because we are going to create the answers with nested attributes in the polls model/controller and then return the answers along with the poll for the polls_controller show route.
### Model Relationships and Nested Attributes
So we still need to put the relationships in our models and add the nested attributes for statement, so for the poll model ##### app/models/poll.rb
class Poll < ApplicationRecord
has_many :answers
has_many :submissions
accepts_nested_attributes_for :answers
end
##### app/models/answer.rb
class Answer < ApplicationRecord
belongs_to :poll
has_many :submissions
end
##### app/models/submission.rb
class Submission < ApplicationRecord
belongs_to :poll
belongs_to :answer
end
### Serializers
To get our API to return only the attributes we want we can use rails serializers. Since we already added the Serializers gem and ran bundle install
we can simple create them with generators again.
rails g serializer polls
rails g serializer submissions
And then we specify the attributes we want to use within the newly generated files, and we can specify the polls to return the answers along with each poll when its requested so the polls_serializer would look like this.
class PollSerializer < ActiveModel::Serializer
attributes :id, :title, :author, :question, :answers
end
And the submissions serializer
class SubmissionSerializer < ActiveModel::Serializer
attributes :id, :poll_id, :answer_id
end
### Add routes and controller methods
So now we have to specify the routes, we can do this easily with by adding the following the app/config/routes.rb
file and because we don’t need all the routes we can specify the ones we want with the only: []
line
resources :polls, only: [:index, :create, :show] do
resources :submissions, only: [:index, :create]
end
When you put a route within another route like this it means that url will be nested so to reach the polls routes it would be something like http://localhost:3000/polls
and for the index route and for submissions or a specific poll it would look like http://localhost:3000/polls/1/submissions
for the index route showing all submissions for the poll with ID of 1.
Next you would create the corresponding controller methods, I’m not going to review that here but if you want to see an example you can take a look at the back end repo to get an idea of what you can do.
### Run the local server
After creating the controller methods we should have a working API that you can use by running the server with rails server
and then test with something like Postman which is a great free tool to helping you build and test API’s.
## The front end App
Now that we have gotten the API running we can start on the front end of the SPA and for this project I just created a new folder with the name PollAppFrontEnd
and initialized a git repo inside the folder using git init
. From there I set up the following directory structure
./
├── index.html
├── css
├── img
└── src
├── adapters
└── componants
This gives you a img
folder for images obviously along with a css
folder which again is obvious what you put there and in the src
folder is going to be all of the JavaScript files. I created a adapters folder for putting the JS code that will be interacting with the API to send GET and POST requests with, and a componants folder for the rest of the JS classes and files.
I have decided to write a more extensive post about the front end of the application so for this current post I will only go over the requests used to get/submit the data to/from the API. There are really on 4 requests(2 GET & 2 POST) we will need to make for this simple SPA and they are
http://localhost:3000/polls
to get all the poll objects that exist currentlyhttp://localhost:3000/polls/:id/submissions
to get all submissions related to poll specified with the :id
part of the URL.http://localhost:3000/polls
to create a new pollhttp://localhost:3000/submissions
to create a new submissionYou can test this out by just going to any of these URL’s with a browser and you should see the JSON object returned inside your main browser window.
To give you an idea of how you might implement this you can take a look at the code below which is just a class named PollsAdapter that we can use to get and submit requests to the back end API. You would create a new instance of the class using the code new PollsAdapter()
.
class PollsAdapter{
constructor(){
this.baseUrl = 'http://localhost:3000/polls'
}
getPolls(){
return fetch(this.baseUrl).then(resp => resp.json())
}
getSubmissions(pollId){
return fetch(`${this.baseUrl}/${pollId}/submissions`).then(resp => resp.json())
}
submitPoll(data){
return fetch(this.baseUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then((response) => response.json())
}
submitResponse(data){
return fetch(`${this.baseUrl}/${data.poll_id}/submissions`, {
method: 'POST',
headers: {
'Content-Type' : 'application/json',
},
body: JSON.stringify(data),
})
.then( resp => resp.json())
}
}