3. Problem #1
Memcache Framework
Web Browser
Web Browser
Web Browser
Web Browser Web
Web Browser Web
Web
Web Browser
Web Browser Server Language
Language
Web Browser
Web Browser Server
Server Language
Web Browser Language
Web Browser
Web Browser Web Server
Web Browser
Web Browser
Web Browser
Web Browser
Web Browser
Web Browser
Web Browser ORM
Web Browser
Web Browser
Web Browser
Web Browser
Web Browser
Web Browser Database
Web Browser
Web Browser Database
Database
Web Browser
Web Browser Database
Database
Web Browser
Web Browser
Web Browser
Web Browser Database
Web Browser
39. mo
De de
ive hi
L o
T
// try different typing errors:
// show errors in the terminal
// show type infered
function foo(s) {
String.length(s);
}
function bar(x, y) {
foo(x) + y;
// foo("hello") + y;
// foo(x) + y + "hello";
}
_ = bar("hello", 2)
//_ = bar(1, 2)
46. Client and server
// Will be on server side:
function db_update(value) {
/mydb/counter <- value
}
// Will be on client-side:
function dom_update(value) {
#counter = value
}
47. Client and server
function update(value) {
/mydb/counter <- value;
#counter = value
}
53. // a dangerous function
protected function dangerous() { 42 }
// a bit of code
function code() { dangerous() }
// an innocent bit of client code
client function malicious() { code() }
54. // database operations are protected BY DEFAULT
database mydb {
string /personal_data
}
function code() { /mydb/personal_data }
// Try those different directives:
// protected
// server -> meaning less
// terminal error without «protected» on code
client function malicious(code) { code() }
58. Data declaration
type user = {
string mail, int age,
list(string) comments
}
database dbname @mongo {
user /user[{mail}] // primary key
int /user/age = 18 // default value
}
59. Data queries
/db/col[name == v; order -score; limit 50];
== skip in [e1, e2]
!= limit or
< order and
<= not
>
>=
60. Data queries
/db/col[n > 10 and n < 20];
opa
use db
db.col.find(
{$and : [{ n : { $gt : 10 } },
{ n : { $lt : 20 } } ]
})
mongoDB shell
61. Data updates
/db/path[id == id] <- { n += 1, l <+ e }
n += 800 l pop
n++ l shift
n-- l <+ e
n : v l <++ [e1, e2, e3]
65. function fib(n) {
if (n == 0)
0
else if (n == 1)
1
else
fib(n-1) + fib(n-2)
}
66. mo
/ / D e mo n s t ra te a c li en t d o esn ’ t b l ock an o the r
De de
/ / S e ve r a l c om pu ta ti on at the tim e ar e po s sib le
ive hi
/ / T a lk a b ou t CP S
L o
T i m po r t s t d li b. th em es .b oot s tra p
/ / n a iv e f ib on ac ci
f u nc t io n f ib (i d, n ) {
if (n = = 0 )
0
el s e i f (n = = 1)
1
el s e
f ib ( n - 1) + f ib (n -2 )
}
s e rv e r f u n ct io n ac ti on (_) {
# re s ul t = f ib (4 0)
}
f u nc t io n p ag e( ) {
<d i v c l a ss =" we ll ">
<b u t t on c la ss =" bt n" on c lic k ={a c tio n }>C o mpute</button>
<h 2 i d= #r es ul t cl as s=" w ell " />
</ d iv >
}
S e rv e r. s t a rt (
Se r ve r . h tt p,
{ ~ pa g e , t it le : "H el lo f ibo " }
)