Download presentation
Presentation is loading. Please wait.
Published byMatthew Carroll Modified over 10 years ago
1
ICE0534 – Web-based Software Development ICE1338 – Programming for WWW Lecture #7 Lecture #7 In-Young Ko iko.AT. icu.ac.kr iko.AT. icu.ac.kr Information and Communications University (ICU) - Summer 2005 -
2
Summer 2005 2 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Announcements Reading Questions #4 is due by July 26 th Reading Questions #4 is due by July 26 th Programming Homework #4 is due by July 28 th Programming Homework #4 is due by July 28 th
3
Summer 2005 3 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Last Lecture XML XML Technology Reviews Technology Reviews XSL [u5: Hogun Park] XSL [u5: Hogun Park] Technology Surveys Technology Surveys XML query languages [g7: Changki Kim] XML query languages [g7: Changki Kim] XML Schema [g8: Heewon Lee] XML Schema [g8: Heewon Lee] Other XML-based languages [g9: Jeongwook Bang] Other XML-based languages [g9: Jeongwook Bang]
4
Summer 2005 4 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University This Lecture XML processing XML processing Web Servers and Server-side Data Management Web Servers and Server-side Data Management CGI Programming CGI Programming Technology Reviews Technology Reviews PHP [u7: Jaeseok Jang] PHP [u7: Jaeseok Jang] Python [u8: Hyunjong Lee] Python [u8: Hyunjong Lee] JSP [u8.1: Dongyeop Kang] JSP [u8.1: Dongyeop Kang] Technology Surveys Technology Surveys Web Servers [g10: Sung Peng] Web Servers [g10: Sung Peng] WebDav (Web Distributed Authoring and Versioning) [g12: Shinyoung Ahn] WebDav (Web Distributed Authoring and Versioning) [g12: Shinyoung Ahn]
5
Summer 2005 5 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Your Wrappers…
6
Summer 2005 6 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University How to Process XML Documents?
7
Summer 2005 7 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University XML-based Information Architecture Source Wrapper Mediator Users, Applications Databases & Web Query QueryQueryQuery Result ResultResultResult Query Result XML Documents
8
Summer 2005 8 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University XML Processors XML Parsers: read XML documents and provide access to their content and structure via DOM (e.g., Xerces, Sun’s Java XML Parser) XML Parsers: read XML documents and provide access to their content and structure via DOM (e.g., Xerces, Sun’s Java XML Parser) Document Filtering (Validation) Document Filtering (Validation) Document Type Declaration (DTD): a grammar for a class of XML documents Document Type Declaration (DTD): a grammar for a class of XML documents XML Schema (XSD): a successor of DTD. Describes the structure of an XML document XML Schema (XSD): a successor of DTD. Describes the structure of an XML document XML Presentation XML Presentation eXtensible Stylesheet Language (XSL): a language to define the transformation and presentation of an XML document eXtensible Stylesheet Language (XSL): a language to define the transformation and presentation of an XML document
9
Summer 2005 9 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University XML Processors XML Document Databases XML Parser DTD/ XMLSchema XSL Description XSL Processor XML Grammar (Structure) Validation DOM Objects HTML Presentation Parsing Events DOM API SAX API
10
Summer 2005 10 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University XML APIs SAX (Simple API for XML) – XML-DEV SAX (Simple API for XML) – XML-DEV Stream-based Access Interface (Sequential Access) Stream-based Access Interface (Sequential Access) Notifies an application of a stream of parsing events Notifies an application of a stream of parsing events Needs a Content Handler to handle the parsing events (e.g., start and end of an element) Needs a Content Handler to handle the parsing events (e.g., start and end of an element) Appropriate to handle a large XML document Appropriate to handle a large XML document DOM (Document Object Model) – W3C DOM (Document Object Model) – W3C Object-oriented Access Interface (Random Access) Object-oriented Access Interface (Random Access) Builds a tree of nodes based on the structure and information in an XML document Builds a tree of nodes based on the structure and information in an XML document Types of nodes: Document, Element, Attr, … Types of nodes: Document, Element, Attr, …
11
Summer 2005 11 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University DOM Representation <class> Prog. Lang. Prog. Lang. ICE1341 ICE1341 Y.K. Ko Y.K. Ko 820304 820304 D.W. Kim D.W. Kim 830512 830512 </class> XML Document DOM Representation Document (Root Node) Elements (Child Nodes) Node Values (Text Nodes)
12
Summer 2005 12 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Java API Hierarchy for DOM Node getChildNodes(): NodeList getAttributes(): NamedNodeMap getNodeName(): String getNodeValue(): String appendChild(Node) removeChild(Node) setNodeValue(String) Attr getName(): String getValue(): String setValue(String) CharacterData getData(): String getLength(): int setData(String) Document createAttribute(String): Attr createElement(String): Element createTextNode(String): Text getDocumentElement(): Element getElementByTagName(String): NodeList Element getAttribute(String): String getTagName(): String Text splitText(int): Text Comment
13
Summer 2005 13 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University An Example of Creating DOM Objects from an XML File try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = Document doc = docBuilder.parse(new File("sample.xml")); Element rootEle = doc.getDocumentElement(); Element rootEle = doc.getDocumentElement(); NodeList children = rootEle.getChildNodes(); NodeList children = rootEle.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { for (int i = 0; i < children.getLength(); i++) { Node subEle = children.item(i); Node subEle = children.item(i); … } } catch(Exception e) { e.printStackTrace(); }
14
Summer 2005 14 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Creating a DOM Hierarchy in Java import javax.xml.transform.stream.*; import org.w3c.dom.*; import java.io.*; DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder= docBuilderFactory.newDocumentBuilder(); // creates an XML document (in DOM) Document doc = docBuilder.newDocument(); // creates the root element and add to the document Element rootEle = doc.createElement("class"); doc.appendChild(rootEle); // creates a sub-element and add to the root Element ele = doc.createElement("name"); Text val = doc.createTextNode("Prog. for WWW"); ele.appendChild(val); rootEle.appendChild(ele);
15
Summer 2005 15 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Creating an XML File from DOM // Creates a holder for a transformation Source tree DOMSource domSrc = new DOMSource(doc); // Creates an XML stream for the output StreamResult xmlStream = new StreamResult(new File("sample.xml")); TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); // Transforms the DOM source into an XML stream transformer.transform(domSrc, xmlStream);
16
Summer 2005 16 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Xpath, Xlink, and XPointer
17
Summer 2005 17 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University XPath A language to address parts of an XML document A language to address parts of an XML document http://www.w3.org/TR/xpath Empire Burlesque Bob Dylan USA Columbia 10.90 1985 Hide your heart Bonnie Tyler UK CBS Records 9.90 1988 … Selecting elements in an absolute path /catalog /catalog/cd/price /catalog/cd[price>10.80] Selecting elements in different levels //cd Selecting elements by matching patterns /catalog/cd/* /catalog/*/price /*/*/price Selecting branches /catalog/cd[1] /catalog/cd[last()] Selecting attributes //cd[@country='UK'] http://www.w3schools.com/xpath/xpath_examples.asp
18
Summer 2005 18 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University XLink (XML Linking Language) XLink defines how to insert links in XML documents XLink defines how to insert links in XML documents Simple Links Simple Links The list of students The list of students <description xlink:type="simple" <description xlink:type="simple" xlink:href="http://www.book.com/www/index.html" xlink:href="http://www.book.com/www/index.html" xlink:show="new"> xlink:show="new"> </class> Extended Links Extended Links...</class> http://www.w3.org/XML/Linking
19
Summer 2005 19 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University XPointer Defines the fragment identifier syntax for XML resources Defines the fragment identifier syntax for XML resources Is based on XPath (extension of XPath) Is based on XPath (extension of XPath) Returns a set of nodes, points or ranges within the document Returns a set of nodes, points or ranges within the document e.g.1, http://www.w3.org/#xpointer(id("foo")) e.g.2, xpointer(/chapter[3]/elem[@name="foo"]) http://daniel.veillard.com/Talks/2000-Linking/slide12-0.html http://www.w3.org/XML/Linking
20
Summer 2005 20 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Relationship… http://www.w3schools.com/xlink/default.asp
21
Summer 2005 21 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Related Materials W3C’s XML Web Site: http://www.w3.org/XML/ W3C’s XML Web Site: http://www.w3.org/XML/ http://www.w3.org/XML/ XML Specification: http://www.w3.org/TR/2004/REC-xml- 20040204/ XML Specification: http://www.w3.org/TR/2004/REC-xml- 20040204/ http://www.w3.org/TR/2004/REC-xml- 20040204/ http://www.w3.org/TR/2004/REC-xml- 20040204/ XML Concepts: http://www.w3.org/Talks/General/Concepts.html XML Concepts: http://www.w3.org/Talks/General/Concepts.html http://www.w3.org/Talks/General/Concepts.html DTD Tutorial: http://www.w3schools.com/dtd/ DTD Tutorial: http://www.w3schools.com/dtd/ http://www.w3schools.com/dtd/ XML Schema Tutorial: http://www.w3schools.com/schema/default.asp XML Schema Tutorial: http://www.w3schools.com/schema/default.asp http://www.w3schools.com/schema/default.asp W3C’s XSL Site: http://www.w3.org/Style/XSL/ W3C’s XSL Site: http://www.w3.org/Style/XSL/ http://www.w3.org/Style/XSL/ XML Entities and their Applications: http://tech.irt.org/articles/js212/ XML Entities and their Applications: http://tech.irt.org/articles/js212/ http://tech.irt.org/articles/js212/ Other XML-related Notes: http://www.w3.org/XML/notes.html Other XML-related Notes: http://www.w3.org/XML/notes.html http://www.w3.org/XML/notes.html
22
Summer 2005 22 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Related Materials W3C Document Object Model (www.w3.org/DOM/) W3C Document Object Model (www.w3.org/DOM/)www.w3.org/DOM/ A simple way to read an XML file in Java (www.developerfusion.com/show/2064/) A simple way to read an XML file in Java (www.developerfusion.com/show/2064/)www.developerfusion.com/show/2064/ Working with XML (java.sun.com/xml/jaxp/dist/1.0.1/docs/tutorial/index.html) Working with XML (java.sun.com/xml/jaxp/dist/1.0.1/docs/tutorial/index.html)java.sun.com/xml/jaxp/dist/1.0.1/docs/tutorial/index.html DTD Tutorial (http://www.w3schools.com/dtd/default.asp) DTD Tutorial (http://www.w3schools.com/dtd/default.asp)http://www.w3schools.com/dtd/default.asp XML Specification (http://www.w3.org/TR/REC-xml/) XML Specification (http://www.w3.org/TR/REC-xml/)http://www.w3.org/TR/REC-xml/ Java Technology and XML FAQs (java.sun.com/xml/faq.html) Java Technology and XML FAQs (java.sun.com/xml/faq.html)java.sun.com/xml/faq.html Java API Manual (java.sun.com/j2se/1.4.2/docs/api/) Java API Manual (java.sun.com/j2se/1.4.2/docs/api/)java.sun.com/j2se/1.4.2/docs/api/ See org.w3c.dom and javax.xml.parsers See org.w3c.dom and javax.xml.parsers XML.org (www.xml.org) XML.org (www.xml.org)www.xml.org
23
Summer 2005 23 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Programming Homework #4 Due by Thursday July 28th Due by Thursday July 28th Design an XML document structure to represent the results from your Web Wrapper Design an XML document structure to represent the results from your Web Wrapper Draw a tree hierarchy of you XML document structure Draw a tree hierarchy of you XML document structure Use DTD or XSD to represent the grammar of your XML language Use DTD or XSD to represent the grammar of your XML language Write a program to generate a DOM hierarchy of the wrapper results by using a DOM library, and link the program with your Web wrapper Write a program to generate a DOM hierarchy of the wrapper results by using a DOM library, and link the program with your Web wrapper Produce an XML file from the DOM representation of the results Produce an XML file from the DOM representation of the results
24
Summer 2005 24 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Web Servers
25
Summer 2005 25 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Web Servers Client-server systems – The client initiates the communication, which the server accepts Client-server systems – The client initiates the communication, which the server accepts All communications between Web clients and servers use HTTP All communications between Web clients and servers use HTTP When a Web server starts, it tell its OS it is ready to accept communications through a specific port, usually 80 When a Web server starts, it tell its OS it is ready to accept communications through a specific port, usually 80 All current Web servers are descendents of the first two (CERN and NCSA) All current Web servers are descendents of the first two (CERN and NCSA) Most popular Web server: Apache running under UNIX Most popular Web server: Apache running under UNIX Microsoft IIS (Internet Information Server) is widely used under Windows Microsoft IIS (Internet Information Server) is widely used under Windows AW lecture notes
26
Summer 2005 26 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Web Server Directories Document Root: the root directory of all servable documents Document Root: the root directory of all servable documents e.g. /usr/local/etc/httpd/htdocs If a request URL is http://vega.icu.ac.kr/bulbs/tulips.html If a request URL is http://vega.icu.ac.kr/bulbs/tulips.html The server will search for the file with the given path /usr/local/etc/httpd/htdocs/bulbs/tulips.html The server will search for the file with the given path /usr/local/etc/httpd/htdocs/bulbs/tulips.html The server can have virtual document trees The server can have virtual document trees Sometimes a different disk, possibly on a different machine, is used Sometimes a different disk, possibly on a different machine, is used AW lecture notes
27
Summer 2005 27 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Web Server Directories (cont.) Server Root: the root directory for all of the code that implements the server Server Root: the root directory for all of the code that implements the server The server root usually has four files (dirs): httpd: the code for the server itself httpd: the code for the server itself conf: directory for configuration information conf: directory for configuration information logs: directory to store what has happened logs: directory to store what has happened cgi-bin: directory for executable scripts cgi-bin: directory for executable scripts User Directory: The name of the directory which is appended onto a user's home directory if a ~user request is received User Directory: The name of the directory which is appended onto a user's home directory if a ~user request is received e.g., public_html AW lecture notes
28
Summer 2005 28 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Web Server Services Virtual hosts – multiple sites on the same system Virtual hosts – multiple sites on the same system Proxy servers – to serve documents from the document roots of other sites Proxy servers – to serve documents from the document roots of other sites Besides HTTP, support for FTP, Gopher, News, email Besides HTTP, support for FTP, Gopher, News, email Support for database access Support for database access AW lecture notes
29
Summer 2005 29 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Server-side Data Management
30
Summer 2005 30 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Web Architecture Web Client HTML Forms JavaScript Applets JDBC, Perl/MySQL, PHP/MySQL Web Server CGI Programs (Perl, PHP) Servlets (JSP) JDBC, Perl/MySQL, PHP/MySQL DB Server
31
Summer 2005 31 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University CGI (Common Gateway Interface) A common way to specify computations, interactions with users, or to provide access to databases on the Web A common way to specify computations, interactions with users, or to provide access to databases on the Web Allows browsers to request the execution of server- resident software Allows browsers to request the execution of server- resident software An interface between browsers and servers An interface between browsers and servers An HTTP request to run a CGI program specifies a program, rather than a document An HTTP request to run a CGI program specifies a program, rather than a document Servers can recognize such requests in two ways: Servers can recognize such requests in two ways: 1.By the location of the requested file (special subdirectories, e.g., cgi_bin) 2.A server can be configured to recognize executable files by their file name extensions A CGI program can produce a complete HTTP response, or just the URL of an existing document A CGI program can produce a complete HTTP response, or just the URL of an existing document AW lecture notes
32
Summer 2005 32 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University CGI Architecture http://ironbark.bendigo.latrobe.edu.au/subjects/int32we/lectures/w08.d/Lect16.html
33
Summer 2005 33 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University CGI Linkage Some CGI programs are in machine code, but Perl programs are usually kept in source form Some CGI programs are in machine code, but Perl programs are usually kept in source form A source file can be made to be “executable” by adding a line at their beginning that specifies that a language processing program be run on them first A source file can be made to be “executable” by adding a line at their beginning that specifies that a language processing program be run on them first e.g., UNIX#!/usr/local/bin/perl –w Windows#!/Programs/perl/bin/perl -w Windows#!/Programs/perl/bin/perl -w An HTML document specifies a CGI program with an anchor tag An HTML document specifies a CGI program with an anchor tag " " Click here to run the CGI program, reply.pl </a> AW lecture notes
34
Summer 2005 34 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University CGI Linkage (cont.) The HTTP header needs only the content type, followed by a blank line: The HTTP header needs only the content type, followed by a blank line: print "Content-type: text/html \n\n"; A sample CGI program: A sample CGI program: #!/usr/local/bin/perl # reply.pl – a CGI program that returns a greeting to the user print "Content-type: text/html \n\n", " \n", " reply.pl example ", " \n", " \n", " Greetings from your Web server!", " \n \n"; AW lecture notes
35
Summer 2005 35 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University HTML Forms The most common way for a user to communicate information from a Web browser to the server The most common way for a user to communicate information from a Web browser to the server Provide tags to generate the commonly used objects, called widgets Provide tags to generate the commonly used objects, called widgets e.g., checkboxes, radio buttons, menus, submit & reset buttons, … Widgets are used to gather information from the user, in the form Widgets are used to gather information from the user, in the form Values of all widgets in a form are called form data Values of all widgets in a form are called form data When the user presses the Submit button, the form data is encoded in a query string, and sent to the server When the user presses the Submit button, the form data is encoded in a query string, and sent to the server
36
Summer 2005 36 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University HTML Form Example <P> First name: First name: Last name: Last name: email: email: Male Male Female Female </P></FORM>
37
Summer 2005 37 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University GET and POST GET (default method) GET (default method) The browser attaches the query string to the URL of the CGI program (after ‘?’) The browser attaches the query string to the URL of the CGI program (after ‘?’) e.g., http://vega.icu.ac.kr/directory/find.cgi?firstname=Ko&lastname=Gildong The server removes the query string from the URL and places it in the environmental variable QUERY_STRING The server removes the query string from the URL and places it in the environmental variable QUERY_STRING Disadvantages Disadvantages Some servers place a limit on the length of the URL string Some servers place a limit on the length of the URL string The query string is vulnerable to illegal access The query string is vulnerable to illegal access POST POST The query string is passes through standard input of the CGI program The query string is passes through standard input of the CGI program The length of the query string is padded through the environmental variable CONTENT_LENGTH The length of the query string is padded through the environmental variable CONTENT_LENGTH No length limitation for the query string No length limitation for the query string
38
Summer 2005 38 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Query String Format A query string includes names and values of widgets A query string includes names and values of widgets Widget values are always coded as strings Widget values are always coded as strings The form of a name/value pair in a query string is: name=value The form of a name/value pair in a query string is: name=value If the form has more than one widget, their values are separated with ampersands If the form has more than one widget, their values are separated with ampersands e.g., milk=2&payment=visa+card Each special character is coded as a percent sign and a two-character hexadecimal number (the ASCII code for the character) Each special character is coded as a percent sign and a two-character hexadecimal number (the ASCII code for the character) Hangul is encoded in this way Hangul is encoded in this way Some browsers code spaces as plus signs, rather than as %20 Some browsers code spaces as plus signs, rather than as %20 %2B for the plus symbol itself %2B for the plus symbol itself AW lecture notes
39
Summer 2005 39 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Decoding Query String 1.Read the query string from $ENV{QUERY_STRING} 2.If the $ENV{REQUEST_METHOD} is POST, determine the size of the request using $ENV{CONTENT_LENGTH} and read that amount of data from the standard input. Append this data to the data read from the query string, if present (this should be joined with "&") 3.Split the result on the " &" character, which separates name- value pairs 4.Split each name-value pair on the "=" character to get the name and value 5.Decode the URL-encoded characters in the name and value 6.Associate each name with its value(s); remember that each option name may have multiple values http://www.hk8.org/old_web/linux/cgi/ch04_03.htm
40
Summer 2005 40 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University Query-string Decoding Example my %form_data; my $name_value; my @name_value_pairs = split /&/, $ENV{QUERY_STRING}; if ( $ENV{REQUEST_METHOD} eq 'POST' ) { my $query = ""; read( STDIN, $query, $ENV{CONTENT_LENGTH} ) == $ENV{CONTENT_LENGTH} or return undef; push @name_value_pairs, split /&/, $query; } foreach $name_value ( @name_value_pairs ) { my( $name, $value ) = split /=/, $name_value; $name =~ tr/+/ /; $name =~ s/%([\da-f][\da-f])/chr( hex($1) )/egi; $value = "" unless defined $value; $value =~ tr/+/ /; $value =~ s/%([\da-f][\da-f])/chr( hex($1) )/egi; $form_data{$name} = $value; }
41
Summer 2005 41 ICE 0534/ICE1338 – WWW © In-Young Ko, Information and Communications University CGI References W3C’s CGI Pages: http://www.w3.org/CGI/ W3C’s CGI Pages: http://www.w3.org/CGI/ http://www.w3.org/CGI/ CGI Made Really Easy: http://www.jmarshall.com/easy/cgi/ CGI Made Really Easy: http://www.jmarshall.com/easy/cgi/ http://www.jmarshall.com/easy/cgi/ A CGI Tutorial: http://tech.irt.org/articles/js171/ A CGI Tutorial: http://tech.irt.org/articles/js171/ http://tech.irt.org/articles/js171/ CGI Programming with Perl: http://www.hk8.org/old_web/linux/cgi/index.htm CGI Programming with Perl: http://www.hk8.org/old_web/linux/cgi/index.htm http://www.hk8.org/old_web/linux/cgi/index.htm
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.