Client side scripting 1 Webtechnologie Lennart Herlaar.

Slides:



Advertisements
Verwante presentaties
Defining a standard JSON-based exchange format for learning metadata Manon Haartsen.
Advertisements

Help, ik moet naar Office 2007!?. Wat horen wij bij klanten Training “New UI will cause too big of a loss in productivity” Training “New UI will cause.
Zelf objecten maken in VBA Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
HM-ES-th1 Les 9 Hardware/Software Codesign with SystemC.
Kennissessie instrumentatie-packages dbms_application_info logger Rob van Wijk•26 mei 2011.
Requirements -People are able to make their own memorial page, called a memori -The website will be build first in Dutch for extension.nl, then copied.
Een alternatief voorstel Naar aanleiding van bestudering van de IAASB voorstellen denkt de NBA na over een alternatief. Dit alternatief zal 26 september.
SAP ABAP A short introduction. SAP ABAP • Selectie: – IF …… ENDIF. – IF …. ELSE … ENDIF. – IF …. ELSEIF …. ELSEIF …. ELSE …. ENDIF. – IF condition_1.
Internet College 2 Architecturen. Architectuur van netwerktoepassingen •Peer to peer –Windows werkgroep •File- en printer sharing •Internet connection.
Stateful web, developments, trends 1 Webtechnologie Lennart Herlaar.
JQuery en ASP.NET Bart De Meyer.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
Lucene/SOLR 1: inleiding + indexering
MagentaPurpleTeal PinkOrangeBlue LimeBrown RedGreen Introductie C# /.NET
Biml en Data Vault.
Accessible Instructional Materials. § Discussion: Timely access to appropriate and accessible instructional materials is an inherent component.
Nieuwe wegen in ontwerpen met CAD
Voor VBA programmeurs Maurice de Beijer.  Maurice de Beijer.  The Problem Solver.  Visual Basic MVP.  Blog: theproblemsolver/default.aspxhttp://msmvps.com/blogs/
OOS Object geOrienteerd Software-ontwerp - 4 Codeerperikelen Singleton Specificeren Scheiding GUI en Domein Facade.
Beyond Big Grid – Amsterdam 26 september 2012 Enquette 77 ingevulde enquettes, waarvan 60 met gebruikservaring = Mainly Computer Science.
AAHA (voor intern gebruik)
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
SQL injections en meer... PERU. web application vulnerabilities Cross Site Scripting (21.5%) SQL Injection (14%) PHP includes (9.5%) Buffer overflows.
Informatica Universiteit AntwerpenScripting 5.1 Informatica 1rste BAC Biologie Hoofdstuk 5 Scripting.
Programming for Linguists An Introduction to Python 29/11/2012.
Server side scripting 1 Webtechnologie Lennart Herlaar.
1 Toegepaste Informatica Keuzevak C++ 3°jaar. 2 Studiefiche  Software  Boek (hfst 3-5)  Presentatie (website)
1/1/ / faculty of Computer Science eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(2): Vertalen.
LokWeb and LWB 7 maart 2006 by Maarten and Hilverd.
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
DSpace-gebruikersdag 9 maart 2006 WildFire ● WildFire is ontwikkeld door Henk Druiven, Rijksuniversiteit Groningen Met dank aan Johannes Nicolai en al.
Probleem P 1 is reduceerbaar tot P 2 als  afbeelding  :P 1  P 2 zo dat: I yes-instantie van P 1   (I) yes-instantie van P 2 als ook:  polytime-algoritme,
WinFX Overview Martin Tirion Senior Consultant Microsoft Services.
Databases I (H.3) Het Entity-Relationship Model Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Hoorcollege 14 Vijanden, excepties. Wat zit allemaal in een level? Startpositie van de speler Waterdruppels Tiles Vijanden Einde van het level Achtergronden.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Client side representation 1 Webtechnologie Lennart Herlaar.
Hibernate Object relational mapping
Wolter Kaper - AJAX en Javascript via Rails Deel 1 en 2.
DB&SQL8- 1 VBA Visual Basics for Applications: eigen Office versie vanaf Office2000 gelijk voor alle applicaties Programmeren onder meer nodig voor Het.
Tussentoets Digitale Techniek. 1 november 2001, 11:00 tot 13:00 uur. Opmerkingen: 1. Als u een gemiddeld huiswerkcijfer hebt gehaald van zes (6) of hoger,
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
1 Hoofdstuk 11: Strings en karakters Inleiding In dit hoofdstuk bespreken we de mogelijkheden van de klassen : String StringBuffer Character StringTokenizer.
Visual Basic.Net - Overzicht
DU2PRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Beginselen van C opgaves… volgende week: ARM.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag GUI  command line redirection.
ANTWOORDEN DIAGNOSTISCHE TOETS MODELOMGEVING. Syntaxis = Syntaxis (van het Oudgriekse συν- syn-, "samen", en τάξις táxis, "regeling") is binnen de theoretische.
Hoofdstuk 2 Java. Soorten Java-programma’s nJava Applet programma “leeft” op een WWW-pagina nJava Application programma heeft een eigen window nJavascript.
PHP Windows Microsoft ASP Internet Open Source PHP.
Deltion College Engels C1 Spreken/Presentaties [Edu/006] thema ‘I hope to convince you of… ‘ can-do : kan een standpunt uiteenzetten voor een publiek van.
Deltion College Engels B1 Schrijven [Edu/004]/ subvaardigheid lezen thema: reporting a theft can-do : kan formulieren waarin meer informatie gevraagd wordt,
XForms TU Delft Library Digitale Productontwikkeling Egbert Gramsbergen.
Microsoft Operations Manager & Scripting
Web Applicaties Bouwen met Visual Studio .NET
DSpace-gebruikersdag 9 maart 2006 WildFire ● WildFire is ontwikkeld door Henk Druiven, Rijksuniversiteit Groningen Met dank aan Johannes Nicolai en al.
Rational Unified Process RUP Jef Bergsma. Iterations –Inception –Elaboration –Construction –Transition De kernbegrippen (Phases)
PHP & MYSQL LES 01 PHP BASICS. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Sketchpad - Introductie Mens en computer kunnen snel converseren door medium van line drawings Hexagons als één symbool (Ring Structure) Verschil met potlood.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
EML en IMS Learning Design
Link Popularity Het principe van linkpopulariteit kun je als volgt samenvatten: hoe meer webpagina's er naar een bepaalde webpagina linken, des te belangrijker.
De evolutie van JavaScript
In samenwerking met HowITsDone JSF versus AngularJS client-server 2.0.
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
1 OMI Modelleren van content. 2 Vocabulary Content “gevangen” in begrippenapparaat: Vocabulary: lijst met termen nauwelijks semantiek Ontology:
Frontend Oss
Transcript van de presentatie:

Client side scripting 1 Webtechnologie Lennart Herlaar

Inhoud JavaScript Document Object Model Event model jQuery

Client side scripting 3 Webtechnologie Lennart Herlaar

jQuery mechanisme $ is de basis Alias voor het jQuery object Utility functions $.each is de each methode van het jQuery object jQuery objecten $("p") maakt een nieuw jQuery object aan dat refereert aan alle elementen (selector) $(document).ready(function(){ // rest van jQuery code }); window.addEventListener("load", myFunc, false);document.addEventListener("DOMContentLoaded", myFunc, false); jQuery(document).ready(handler); jQuery().ready(handler); jQuery(handler); $(document).ready(handler); $().ready(handler); $(handler);

jQuery voorbeelden $(function() { $("a").click(function(e){ alert("Hello world"); e.preventDefault(); }); $("div.test").add("p.quote").addClass("blue").slideDown("slow"); $(function() { $("#orderedlist > li").addClass("blue"); }); $("ul.important").children().css("background-color", "red"); $("form").submit(function(e) { if ($("input:first").val() == "correct") { $("span").text("Validated...").show(); } else { $("span").text("Not valid!").show().fadeOut(1000); e.preventDefault(); } });

jQuery UI Uitbreiding op jQuery High level abstraction Widgets Datepicker, progressbar, autocomplete,... Effects Coloranimation, toggleclass, hide (explode, blind),... Interactions Draggable, droppable, selectable, sortable,... Merk op: deels ook in HTML5 / CSS3

As simple as that! Aanvullende JavaScript file Na jQuery zelf $(function() { $("#datepicker").datepicker(); }); $(function() { $("#sortable").sortable(); $("#sortable").disableSelection(); });

jQuery, jQuery UI, Flot

Er zijn meer wegen… Vaak kunnen we kiezen JavaScript jQuery (UI) HTML5 / CSS3 En zelfs: server side scripting! Afhankelijk van beschikbaarheid (requirements), browser support, kennis webdeveloper, … Beweging steeds meer richting HTML5 / CSS3? jQuery is zelf een standaard aan het worden Integratie in platformen van Microsoft, Nokia

Server side scripting 10 Webtechnologie Lennart Herlaar

Inhoud PHP Meer PHP En nog meer PHP

Server side scripting revisited Server side scripts worden uitgevoerd op de webserver (of application server) Er bestaan verschillende integratiemethoden CGI, inlining code, webserver integratie Veelal het "one resource at a time" paradigma Het draaien van een webapplicatie is een lange reeks script aanroepen Veel variatie in server side scripting talen PHP, Python, Perl, Ruby, ASP.NET,...

Centraal architectuur diagram Webserver Interpreter of compiler RDBMS Files SQL Parameters, code File access Result set Web Browser + Applicatie HTML, CSS, JavaScript, JSON, … File Form, parameters, … HTML, JavaScript, JSON, …

Ontwikkeld door Rasmus Lerdorf in 1995 Op basis van een verzameling Perl scripts Personal (Pretty?) Home Page Tools Personal Home Page/Forms Interpreter (PHP/FI) C implementatie, te gebruiken als CGI binary Verdere ontwikkeling door Zend Technologies PHP: Hypertext Preprocessor Inmiddels al bijna 10 jaar op versie 5 Versie 6 is uitgesteld door met name Unicode issues Op één na populairste scripting taal op het web PHP

Rol en werking van PHP Specifiek ontwikkeld voor web development Van webpage toolset tot general purpose server side scripting voor dynamische database driven websites Kan ook op de command line gebruikt worden Perl en C invloeden in syntax en werking PHP is een filter Input: stream met tekst / HTML en PHP code Output: stream met tekst, meestal HTML PHP code wordt vervangen door z'n uitvoer PHP vergt installatie op de webserver

PHP: Hypertext Preprocessor <?php echo "Hello World"; ?> <?php $d=date("D"); if ($d=="Wed" || $d=="Fri") echo "Lecture time!"; ?> Hello World Lecture time!

PHP als scripting taal PHP is een scripting taal Compilatie naar bytecode door een PHP parser Bytecode uitgevoerd door een PHP engine Multi-paradigma Object-georiënteerd Imperatief Class based Zwak getypeerd, dynamisch Vergelijk dit met JavaScript...

Goede voorzieningen voor tekstmanipulatie Reguliere expressies Veel functies in de core language Veel extensions beschikbaar Diverse frameworks beschikbaar Pragmatisch, eenvoudig te leren, it just works Eén ding is PHP niet... Elegant PHP als scripting taal

Means of escape Met spring je in en uit PHP context En dus uit en in HTML context... Afhankelijk van config ook met of Of zelfs met het element (maar...) Dunne scheidslijn tussen code en content Steeds in en uit context springen De code wordt snel onleesbaar Ongelimiteerd misbruik mogelijk

Escape to hell <?php if ($expression) { ?> This is true. <?php } else { ?> This is false. <?php } ?> ml> Escape to hell > Dante’s Inferno. o y> // Dubbele slash betekent // commentaar tot einde regel <?php // echo ' '; // Huh? ?>

No escape Een PHP toepassing kan omvangrijk worden In tegenstelling tot veel JavaScript toepassingen Scheiding code en content wenselijk Overzichtelijker, beter onderhoudbaar Modernere insteek Alle HTML gegenereerd vanuit de code Templates voor vaste onderdelen MVC frameworks waarbij de HTML pagina niet veel meer is dan een aanroep van een generate functie

Server side scripting 22 Webtechnologie Lennart Herlaar

Yet Another Language Variabelen met $, anders functie of constante Variabelen hebben een dynamisch type Declaratie is niet nodig De-allocatie is niet nodig Globale en lokale variabelen Lokaal tenzij gedeclareerd met global Met uitzondering van de zogenaamde superglobals Verder gebruikelijke (function) scoping en shadowing (Gebruik parameter passing in plaats van global)

Herkenbare zaken? Gebruikelijke typen boolean, integer, float, string, array associative array, float in decimal of scientific notatie Maar ook: object, resource, null Gebruikelijke control structures if else, elseif, while, do while, for, foreach, switch Gebruikelijke operators + - * / = += -= == != = && || if ($page == "home") { generate_homepage(); } elseif ($page == "shop") { generate_shop(); } elseif ($page == "forum") { generate_forum(); } else { generate_notfound(); } is_logged_on($user) ? welcome($user) : login(); switch ($page) { case "home": generate_homepage(); break; case "shop": generate_shop(); break; case "forum": generate_forum(); break; default: generate_notfound(); } if ($page == "home"): generate_homepage(); elseif ($page == "shop"): generate_shop(); elseif ($page == "forum"): generate_forum(); else: generate_notfound(); endif;

Herkenbare zaken? Functies Call-by-value parameter passing (maar objecten...) Call-by-reference met & Variabel aantal parameters en defaults mogelijk Object-georiënteerd paradigma Classes, objecten, methods Case sensitivity, maar niet voor functienamen Statement termination met ; (verplicht) Multi-line strings (maar: HTML negeert whitespace) Commentaar met /* */, // of # function foo($arg_1, &$arg_2,..., $arg_n = "42") { global $myvar; echo "Example function.\n";... return $retval; }

Strings Strings bestaan / bestonden uit 8-bits karakters Dubbele of enkele quotes Interpolatie van strings Strings in dubbele quotes worden geïnterpoleerd Strings in enkele quotes worden letterlijk genomen \n, \t, \", \$, \\ \', \\ $str = "A single quote is ', right?"; $str = 'A double would be "!'; $str = "Single (') and double (\")."; $str = 'Single (\') and double (").'; <?php $user = "Lennart"; echo 'Hello $user'; echo "\n \n"; echo "Hello $user"; ?>

String functies. voor concatenatie strlen, printf, ltrim, trim, rtrim, str_pad strtolower, strtoupper, ucfirst, ucwords strcmp, strncmp, strcasecmp,... (-1, 0, 1) substr, strpos, strstr, stripos, strrpos, strripos str_repeat, str_replace, str_ireplace, str_rot13 strtr, nl2br, strtotime, count_chars,... Frustrerende functienamen en inconsistenties $str = "Hello ". $user. '. Welcome back!'; $str = substr("Hello World!", 6, 5); // World $str = substr("Hello World!", -6, -1); // World $pos = strpos("Hello World!", "World"); // 6 $str = strstr("Hello World!", "World"); // World! $ts = strtotime("28 February 2014"); //

Arrays Arrays beelden keys op values af Values mogen van elk type zijn, door elkaar Arrays zijn heterogeen Keys mogen integers of strings zijn Integer indices kunnen overal beginnen en negatief zijn; alleen de gebruikte keys worden opgeslagen Arrays kunnen meerdimensionaal zijn Arrays zijn stiekem associative arrays Hashes, maps $a = array("Hello World", 24, NULL, "something big"); $b = array(1 => "One", 20 => "Twenty", "a" => "One"); $a[100] = array(1 => "One", 20 => "Twenty", "a" => "One"); // a[4] - a[99] undefined echo ($a[100]["a"]); // Let op de quotes; One $i = 20; echo ($a[100][$i]); // Geen quotes; Twenty $a[] = "My favourite index"; // a[101] unset($a[3]); // Wat ruimte besparen...

Arrays beelden keys op values af Ook als de indices integers zijn Pas op met aannames m.b.t. de volgorde Veel array functies in_array, array_search, array_merge, array_reverse, array_flip, array_pop, array_push, array_map,... Associative arrays $myarray = array(1 => "Dog", "Cat", "Scary" => "Bat"); $myarray2 = array(0, 2 => 5, 3); $myarray[0] = "Rat"; print_r($myarray); array_keys($myarray); // (1, 2, "Scary", 0) array_values($myarray); // ("Dog", "Cat", "Bat", "Rat") count($myarray); // 4 list($a,, $c) = $myarray2; // $a is 0, $c is 5 foreach ($students as $student) { echo("$student\n"); } foreach ($library as $isbn => $title) { echo "Book with ISBN $isbn has title $title\n"; } // Volgorde?

Frustrerend?

Sorteren Grote hoeveelheid sorteerfuncties sort(), asort(), arsort(), ksort(), krsort(), rsort(), usort(), uasort(), uksort(), natsort,... Sort is de basis; herordening, integer keys r = reversed, a = value, k = key, u = user defined a en k laten de associatie intact nat voor "natuurlijk" sorteren: img2.gif vs. img12.gif $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana"); ksort($fruits); // a => orange, b => banana, d => lemon asort($fruits); // b => banana, d => lemon, a => orange sort($fruits); // 0 => banana, 1 => lemon, 2 => orange

Strings en arrays revisited $name = "Blob"; echo ":$name:"; // :Blob: echo "$nameje"; // lege string echo "{$name}je"; // Blobje echo "\{$name\}"; // \{Blob\} $a[2][3] = $name; echo "De {$a[2][3]}!"; // De Blob! echo "De ". $a[2][3]. "!"; // De Blob! echo "En niet de $a[2][3]!"; // En niet de Array[3]! $words = explode(" ","Jack in the box"); // Array! $str = implode("-", $words); // Jack-in-the-box strtr($posting, array("ROTFLMAO" => "rolling on the floor...",...)); strtr($posting, "äåö", "aao");

Daar gaan we weer... Type juggling en casting $myFirstVar = 42; $myFirstVar = 'We are sorry for the inconvenience'; $x = 1 + true; $x = NULL + false; $x = (bool)0; $x = (bool)0.0; $x = (bool)""; $x = (bool)"0"; $x = (bool)"0.0"; $x = ("0" == true); $x = (true == "false"); $x = ("1" == 1); $x = ("1" === 1); var_dump($x); var_export($x); $x = "the answer is ". "42"; $x = 3. "5"; $x = "the answer is " + "42"; $x = 3 + "5"; $x = 3 * "5"; $x = "this is " + true; Vergelijk dit met JavaScript... $x = array_search($myval, $myarray);