CGI (Common Gateway Interface) is an interface that allows a web server to launch external applications dynamically in response to requests. It defines standard communication variables between the web server and CGI programs. CGI programs can be written in any programming language and are executed by the web server to generate dynamic web page content on the fly based on request parameters and structured data. However, CGI has performance and security limitations due to creating new processes for each request.
The document discusses Common Gateway Interface (CGI) and Perl scripting. It begins with an introduction to CGI, including its definition, architecture, and how it works. It then provides an overview of Perl, including its history and features. The document aims to help participants understand CGI programming and Perl scripting.
This document discusses MySQL databases and how to interact with them using PHP. It begins by introducing MySQL as the world's most popular open source database and describes some basic database server concepts. It then provides code examples for how to connect to a MySQL database from PHP, select a database, perform queries to read, insert, update, and delete records, and more. The document is intended as a tutorial for learning the basic functions and syntax for accessing and manipulating data in a MySQL database with PHP.
This document provides an overview of Java servlets technology, including:
1. What Java servlets are and their main purposes and advantages such as portability, power, and integration with server APIs.
2. Key aspects of servlet architecture like the servlet lifecycle, the HttpServletRequest and HttpServletResponse objects, and how different HTTP methods map to servlet methods.
3. Examples of simple servlets that process parameters, maintain a session counter, and examples of deploying servlets in Eclipse IDE.
Network programming in java - PPT with Easy Programs and examples of Java InetAddress Class and java socket programming example.
Learn more @ http://java2all.com/technology/network-programming
The document discusses Common Gateway Interface (CGI) and Perl scripting. It begins with an introduction to CGI, including its definition, architecture, and how it works. It then provides an overview of Perl, including its history and features. The document aims to help participants understand CGI programming and Perl scripting.
This document discusses MySQL databases and how to interact with them using PHP. It begins by introducing MySQL as the world's most popular open source database and describes some basic database server concepts. It then provides code examples for how to connect to a MySQL database from PHP, select a database, perform queries to read, insert, update, and delete records, and more. The document is intended as a tutorial for learning the basic functions and syntax for accessing and manipulating data in a MySQL database with PHP.
This document provides an overview of Java servlets technology, including:
1. What Java servlets are and their main purposes and advantages such as portability, power, and integration with server APIs.
2. Key aspects of servlet architecture like the servlet lifecycle, the HttpServletRequest and HttpServletResponse objects, and how different HTTP methods map to servlet methods.
3. Examples of simple servlets that process parameters, maintain a session counter, and examples of deploying servlets in Eclipse IDE.
Network programming in java - PPT with Easy Programs and examples of Java InetAddress Class and java socket programming example.
Learn more @ http://java2all.com/technology/network-programming
The document discusses Remote Method Invocation (RMI) in Java. RMI allows objects running in one Java virtual machine to invoke methods on objects running in another Java VM. It has four layers: application layer, proxy layer, remote reference layer, and transport layer. The RMI architecture contains an RMI server, RMI client, and RMI registry. The server creates remote objects and registers them with the registry. The client looks up remote objects by name in the registry and invokes methods on them.
HTTP requests and responses follow a generic message format that includes a start line, message headers, an optional message body, and optional trailers. The start line indicates the request method and URI for requests or the HTTP version and status code for responses. Headers provide additional metadata about the message, sender, recipient, or content. The body carries request data or response content. Trailers are rarely used and provide additional headers after chunked content.
This document provides an overview of Perl scripting and CGI programming. It covers topics such as the introduction to CGI, how CGI works, preparing CGI programs, the history and features of Perl, and how to write basic Perl CGI programs. The document is intended to help participants understand Perl scripting and CGI programming after completing this training.
This document provides an overview of the Java Virtual Machine (JVM) and how it executes Java code. It describes that the JVM converts Java bytecode into machine language and executes it, allowing Java programs to run on different platforms. It also outlines the key components of the JVM, including the class loader, execution engine, stack, method area, and garbage collected heap.
PHP is a server-side scripting language used to create dynamic web pages. It allows embedding PHP code within HTML pages and interacting with databases. Key elements of PHP include variables, control structures, functions, and sessions. Sessions store user data on the server instead of the client to avoid cookies and allow tracking users across multiple pages.
Interfaces define methods that classes can implement. Classes implementing interfaces must define all interface methods. Interfaces can extend other interfaces, requiring implementing classes to define inherited methods as well. Interface variables are implicitly public, static, and final. A class can implement multiple interfaces and override methods with the same name across interfaces. Partial interface implementation requires the class to be abstract.
A JDBC driver allows Java code to interact with a database. There are four types of JDBC drivers:
1. Type 1 drivers use ODBC to connect to databases but have poor performance.
2. Type 2 drivers use native database APIs and have better performance than Type 1 but require client libraries.
3. Type 3 drivers use middleware that converts JDBC calls to database protocols, requiring no client code but adding overhead.
4. Type 4 drivers communicate directly with databases via sockets, have best performance but depend on the database.
The document provides information on servlet fundamentals including definitions, applications, architecture, lifecycle, and development process. Some key points include:
- Servlets are Java programs that run on web servers and interact with clients via HTTP requests and responses. They provide dynamic content and process user input.
- Common servlet applications include search engines, e-commerce sites, and intranets.
- The servlet lifecycle includes initialization, processing requests, and destruction. Servlets remain loaded in memory between requests for improved performance over CGI.
- To develop a servlet, you create a class that implements the Servlet interface, define request handling methods, compile it, deploy it in a web container
This document discusses Java Database Connectivity (JDBC) and the steps to connect to a database using JDBC. It provides an overview of JDBC architecture and its main components. It then outlines the key steps to connect to a database which include: 1) driver registration where the appropriate JDBC driver class is loaded, 2) defining the connection URL, 3) establishing a connection, 4) creating SQL statements, 5) executing queries and processing result sets, and 6) closing the connection. Examples are provided for connecting to MySQL and Derby databases using JDBC.
The servlet lifecycle consists of 5 steps: (1) loading and instantiation of servlets by the servlet container, (2) initialization via the init() method, (3) processing of client requests via the service() method, (4) finalization via the destroy() method, and (5) garbage collection. The service() method handles each client request by dispatching to doGet() or doPost() depending on the request type, while init() and destroy() are called once per servlet instance.
This document discusses various PHP functions and concepts related to working with databases in PHP, including:
- PHP functions for arrays, calendars, file systems, MySQL, and math
- Using phpMyAdmin to manage MySQL databases
- The GET and POST methods for passing form data
- SQL commands for creating, altering, and manipulating database tables
- Connecting to a MySQL database from PHP using mysql_connect()
It provides code examples for using many of these PHP functions and SQL commands to interact with databases. The document is an overview of key topics for learning PHP database programming.
The document provides a history of the origins and development of the Internet from the 1960s to the 1990s. It describes how ARPANET was developed in the 1960s by the US Department of Defense and its Advanced Research Projects Agency (ARPA) to enable resource sharing between researchers. It evolved into a "network of networks" known as the Internet in the 1990s through networks like NSFNET that connected universities. The document also gives brief overviews of web browsers, web servers, URLs, and the Hypertext Transfer Protocol.
Variables are containers that store information in PHP. PHP variables are case sensitive and can contain strings, integers, floats, Booleans, arrays and objects. Variables start with a $ sign followed by a name. Variable names must begin with a letter or underscore and can contain alphanumeric characters and underscores. Variables can be assigned values using common operators like assignment, addition, subtraction etc. Variables can have different scopes like local, global and static. Constants are similar to variables but their values cannot be changed once defined.
The document summarizes a training presentation on PHP with MySQL. It begins with an introduction to the Center for Electronic Governance (CEG), which was established in 2006 by the Government of Rajasthan to oversee technical education. The presentation then covers the history of PHP, what PHP is, its features, code syntax, components like variables, operators, arrays and functions. It discusses advantages of PHP like being open source and supporting multiple databases. Finally, it provides an overview of why MySQL is a popular database to use with PHP before describing some basic MySQL queries.
Servlet is java class which extends the functionality of web server by dynamically generating web pages.
Servlet technology is used to create Dynamic web application. Servlet technology is robust and scalable. init() and service() methods are more important in life cycle of a servlet. doGet() and doPost() are methods used under service() method.
This document discusses PHP cookies, sessions, and includes/requires. It explains that cookies are small files stored on a user's computer that identify the user. Sessions store information about a user across multiple pages using the $_SESSION variable. Includes/requires insert the code from one PHP file into another before execution. Examples are provided for setting cookies and sessions, incrementing session values, and including external PHP files.
Overview of Java RMI remoting.
RMI is a lightweight Java technology that provides access to remote methods, similar to RPC, but object-oriented. RMI basically provides remote object access for a client and object registration for servers.
RMI is both a Java API (java.rmi.* package) as well as a transport protocol definition for transporting RMI calls through a network.
RMI is a Java technology since it requires that client and server objects run in a JVM (Java Virtual Machine). By using IIOP as transport protocol, however, it is possible to connect RMI-clients to non-Java server objects (e.g. CORBA).
RMI defines the elements client, server, RMI registry where servers register their services and possibly a plain vanilla web server that can be used by clients to dynamically load object classes to access servers.
This document provides an overview of the Struts framework, which implements the Model-View-Controller design pattern for JavaServer Pages. It describes the core components of Struts, including action handlers, result handlers, and custom tags. It also explains how Struts uses interceptors to apply common functionality like validation. Finally, it provides a step-by-step example of creating a basic login application using Struts.
If you don't have knowledge of HTML, CSS & JavaScript than you may face some difficulties in validating a HTML form yet I will make the entire step very easy to understand by you.
CGI allows a web server to interface with external applications to dynamically generate web pages. It uses environment variables and form data passed via GET or POST requests to run scripts or programs that process input and return output to the server. While CGI provides interactivity, it can be slow and has security issues. Server-side includes and client-side scripting offer alternatives for dynamic content generation.
The document provides information about Common Gateway Interface (CGI) including:
- CGI allows external programs to interface with web servers like HTTP servers to exchange information.
- CGI programs can be written in languages like Perl, Shell, C/C++ and are executed by the web server when a specific file is requested.
- The document explains GET and POST methods for passing form data to CGI programs and includes examples of handling various HTML form elements like textboxes, checkboxes, radio buttons, dropdowns etc in CGI scripts.
The document discusses Remote Method Invocation (RMI) in Java. RMI allows objects running in one Java virtual machine to invoke methods on objects running in another Java VM. It has four layers: application layer, proxy layer, remote reference layer, and transport layer. The RMI architecture contains an RMI server, RMI client, and RMI registry. The server creates remote objects and registers them with the registry. The client looks up remote objects by name in the registry and invokes methods on them.
HTTP requests and responses follow a generic message format that includes a start line, message headers, an optional message body, and optional trailers. The start line indicates the request method and URI for requests or the HTTP version and status code for responses. Headers provide additional metadata about the message, sender, recipient, or content. The body carries request data or response content. Trailers are rarely used and provide additional headers after chunked content.
This document provides an overview of Perl scripting and CGI programming. It covers topics such as the introduction to CGI, how CGI works, preparing CGI programs, the history and features of Perl, and how to write basic Perl CGI programs. The document is intended to help participants understand Perl scripting and CGI programming after completing this training.
This document provides an overview of the Java Virtual Machine (JVM) and how it executes Java code. It describes that the JVM converts Java bytecode into machine language and executes it, allowing Java programs to run on different platforms. It also outlines the key components of the JVM, including the class loader, execution engine, stack, method area, and garbage collected heap.
PHP is a server-side scripting language used to create dynamic web pages. It allows embedding PHP code within HTML pages and interacting with databases. Key elements of PHP include variables, control structures, functions, and sessions. Sessions store user data on the server instead of the client to avoid cookies and allow tracking users across multiple pages.
Interfaces define methods that classes can implement. Classes implementing interfaces must define all interface methods. Interfaces can extend other interfaces, requiring implementing classes to define inherited methods as well. Interface variables are implicitly public, static, and final. A class can implement multiple interfaces and override methods with the same name across interfaces. Partial interface implementation requires the class to be abstract.
A JDBC driver allows Java code to interact with a database. There are four types of JDBC drivers:
1. Type 1 drivers use ODBC to connect to databases but have poor performance.
2. Type 2 drivers use native database APIs and have better performance than Type 1 but require client libraries.
3. Type 3 drivers use middleware that converts JDBC calls to database protocols, requiring no client code but adding overhead.
4. Type 4 drivers communicate directly with databases via sockets, have best performance but depend on the database.
The document provides information on servlet fundamentals including definitions, applications, architecture, lifecycle, and development process. Some key points include:
- Servlets are Java programs that run on web servers and interact with clients via HTTP requests and responses. They provide dynamic content and process user input.
- Common servlet applications include search engines, e-commerce sites, and intranets.
- The servlet lifecycle includes initialization, processing requests, and destruction. Servlets remain loaded in memory between requests for improved performance over CGI.
- To develop a servlet, you create a class that implements the Servlet interface, define request handling methods, compile it, deploy it in a web container
This document discusses Java Database Connectivity (JDBC) and the steps to connect to a database using JDBC. It provides an overview of JDBC architecture and its main components. It then outlines the key steps to connect to a database which include: 1) driver registration where the appropriate JDBC driver class is loaded, 2) defining the connection URL, 3) establishing a connection, 4) creating SQL statements, 5) executing queries and processing result sets, and 6) closing the connection. Examples are provided for connecting to MySQL and Derby databases using JDBC.
The servlet lifecycle consists of 5 steps: (1) loading and instantiation of servlets by the servlet container, (2) initialization via the init() method, (3) processing of client requests via the service() method, (4) finalization via the destroy() method, and (5) garbage collection. The service() method handles each client request by dispatching to doGet() or doPost() depending on the request type, while init() and destroy() are called once per servlet instance.
This document discusses various PHP functions and concepts related to working with databases in PHP, including:
- PHP functions for arrays, calendars, file systems, MySQL, and math
- Using phpMyAdmin to manage MySQL databases
- The GET and POST methods for passing form data
- SQL commands for creating, altering, and manipulating database tables
- Connecting to a MySQL database from PHP using mysql_connect()
It provides code examples for using many of these PHP functions and SQL commands to interact with databases. The document is an overview of key topics for learning PHP database programming.
The document provides a history of the origins and development of the Internet from the 1960s to the 1990s. It describes how ARPANET was developed in the 1960s by the US Department of Defense and its Advanced Research Projects Agency (ARPA) to enable resource sharing between researchers. It evolved into a "network of networks" known as the Internet in the 1990s through networks like NSFNET that connected universities. The document also gives brief overviews of web browsers, web servers, URLs, and the Hypertext Transfer Protocol.
Variables are containers that store information in PHP. PHP variables are case sensitive and can contain strings, integers, floats, Booleans, arrays and objects. Variables start with a $ sign followed by a name. Variable names must begin with a letter or underscore and can contain alphanumeric characters and underscores. Variables can be assigned values using common operators like assignment, addition, subtraction etc. Variables can have different scopes like local, global and static. Constants are similar to variables but their values cannot be changed once defined.
The document summarizes a training presentation on PHP with MySQL. It begins with an introduction to the Center for Electronic Governance (CEG), which was established in 2006 by the Government of Rajasthan to oversee technical education. The presentation then covers the history of PHP, what PHP is, its features, code syntax, components like variables, operators, arrays and functions. It discusses advantages of PHP like being open source and supporting multiple databases. Finally, it provides an overview of why MySQL is a popular database to use with PHP before describing some basic MySQL queries.
Servlet is java class which extends the functionality of web server by dynamically generating web pages.
Servlet technology is used to create Dynamic web application. Servlet technology is robust and scalable. init() and service() methods are more important in life cycle of a servlet. doGet() and doPost() are methods used under service() method.
This document discusses PHP cookies, sessions, and includes/requires. It explains that cookies are small files stored on a user's computer that identify the user. Sessions store information about a user across multiple pages using the $_SESSION variable. Includes/requires insert the code from one PHP file into another before execution. Examples are provided for setting cookies and sessions, incrementing session values, and including external PHP files.
Overview of Java RMI remoting.
RMI is a lightweight Java technology that provides access to remote methods, similar to RPC, but object-oriented. RMI basically provides remote object access for a client and object registration for servers.
RMI is both a Java API (java.rmi.* package) as well as a transport protocol definition for transporting RMI calls through a network.
RMI is a Java technology since it requires that client and server objects run in a JVM (Java Virtual Machine). By using IIOP as transport protocol, however, it is possible to connect RMI-clients to non-Java server objects (e.g. CORBA).
RMI defines the elements client, server, RMI registry where servers register their services and possibly a plain vanilla web server that can be used by clients to dynamically load object classes to access servers.
This document provides an overview of the Struts framework, which implements the Model-View-Controller design pattern for JavaServer Pages. It describes the core components of Struts, including action handlers, result handlers, and custom tags. It also explains how Struts uses interceptors to apply common functionality like validation. Finally, it provides a step-by-step example of creating a basic login application using Struts.
If you don't have knowledge of HTML, CSS & JavaScript than you may face some difficulties in validating a HTML form yet I will make the entire step very easy to understand by you.
CGI allows a web server to interface with external applications to dynamically generate web pages. It uses environment variables and form data passed via GET or POST requests to run scripts or programs that process input and return output to the server. While CGI provides interactivity, it can be slow and has security issues. Server-side includes and client-side scripting offer alternatives for dynamic content generation.
The document provides information about Common Gateway Interface (CGI) including:
- CGI allows external programs to interface with web servers like HTTP servers to exchange information.
- CGI programs can be written in languages like Perl, Shell, C/C++ and are executed by the web server when a specific file is requested.
- The document explains GET and POST methods for passing form data to CGI programs and includes examples of handling various HTML form elements like textboxes, checkboxes, radio buttons, dropdowns etc in CGI scripts.
This document provides information about Python CGI (Common Gateway Interface) programming. It discusses what CGI is, how information is exchanged between a web server and CGI script, and gives an example of a simple "Hello World" Python CGI script. It also covers CGI architecture, configuration, passing data to CGI scripts using GET and POST requests, and handling different HTML form elements like textboxes, checkboxes, radio buttons, and dropdown menus in CGI scripts.
This document defines basic terms related to web applications and HTTP protocols. It explains that a web application is delivered over the internet via a browser and HTML, dynamic pages can display different content than static pages. It also defines that HTTP is the set of rules for file transfers on the web and uses the TCP/IP protocol. The document discusses GET and POST methods for form data submission and that GET appends data to the URL while POST appends to the HTTP request body. It defines CGI as a standard for server-program interaction where requested files are executed as programs.
The document discusses the historical development of server-side technologies like CGI, PHP, and Java Servlets that allow dynamic content generation on web servers in response to user requests. It provides examples of how CGI scripts can be written in languages like Perl and Shell to handle forms, generate dynamic content, and interface with databases. The document also covers how PHP can be used for similar tasks and interfaces with databases and XML.
The Common Gateway Interface (CGI) allows web servers to interface with external applications. When a request is made for a CGI resource, the web server executes the associated program and returns the output. CGI programs can be written in many languages and access data passed in through environment variables or HTTP requests. Form data submitted via GET is appended to the URL, while POST submits data through standard input.
This document provides an overview of server-side and client-side web programming. It discusses common gateway interface (CGI) programs, which allow server-side programs to process HTTP requests and generate HTML responses. CGI programs can access input data sent via forms and output dynamically-generated HTML. Examples demonstrate CGI programs that display fortunes by reading from a file, echo back user input, and look up email addresses in a database. The document also compares JavaScript and Java approaches to client-side scripting.
The document provides an overview of CGI (Common Gateway Interface) and how it enables dynamic web content. It discusses how CGI works, alternatives like PHP and Java servlets, configuring Apache web server for CGI, programming CGI applications using Perl and the CGI.pm module, handling input/output and errors. It also includes an example CGI application in Perl for counting button clicks using sessions and cookies to manage state.
The document discusses Common Gateway Interface (CGI) and its drawbacks. It then introduces Servlets as an alternative to CGI for creating dynamic web content. Servlets avoid the performance issues of CGI by running within a Java Virtual Machine on the server and supporting multi-threading. The document covers the servlet lifecycle, API, deployment, and other features that make servlets faster and more scalable than CGI for building web applications.
The document describes the Tiny Web Server, a simple HTTP server that serves static and dynamic content using the GET method. It parses GET requests, determines if the request is for static or dynamic content, opens and reads the requested file or executes the CGI program, and returns the content along with appropriate HTTP response headers. Key components include parsing the URI to extract the filename and CGI arguments, checking for valid files, and using routines like serve_static() and serve_dynamic() to handle different content types.
This document provides an overview of server-side web programming and technologies like CGI, servlets, and JSP. It discusses how static and dynamic pages work, as well as the Common Gateway Interface (CGI) standard. CGI allows building dynamic websites by running programs on the server. The document then covers how servlets provide an improvement over CGI with benefits like improved performance, portability, and security. It provides examples of invoking servlets and describes the servlet API.
1. ASP.NET uses the CLR to replace the existing ISAPI/ASP infrastructure of IIS with a more efficient framework for servicing HTTP requests. It also provides its own framework for compilation, execution, and building user interfaces.
2. ASP.NET is both an evolution of the ASP programming model as well as a revolution, introducing features like compiled pages, separation of code and HTML, server-side controls, and web services.
3. In ASP.NET, every page is compiled into an assembly the first time it is accessed. Subsequent requests use the compiled assembly for improved performance unless the source files have changed.
Language Basics | Coldfusion primer | Chap-1Nafis Ahmed
This chapter on Adobe ColdFusion, elaborates on the basics of this HTML-like language. It starts with the by introducing the viewer/reader with the variables, comments and the tags that are behaves like HTML, yet can alternatively be made to syntactically look like other programming languages like PHP. Then, it moves onto examples that demonstrates the ability of structures, lists, variables, loops, conditionals and finally the switch-case statement. This presentation concisely attempts to show the prospective CF programmer that how a old code can be recycled, reinvented, innovated and at the same time made as safe as possible, after all, security is a major concern in today's world.
This document provides an overview of server-side web programming and different technologies used to create dynamic web pages, including Common Gateway Interface (CGI), servlets, and JavaServer Pages (JSP). CGI allows building dynamic web sites by running programs on the server that can generate HTML responses. Servlets provide a Java-based alternative to CGI with improved performance, portability, and security. Servlets use a request-response model and are executed by a servlet container. JSP is a technology that simplifies web page programming by mixing static elements like HTML with scripting code.
The document discusses various topics related to shell programming and scripting languages including:
1. It provides an overview of HTML, the basic building blocks of websites including tags, elements and page structure.
2. It describes common HTML tags for text formatting, headings, and other page elements. It also discusses HTML forms and how to pass data.
3. It provides an introduction to CGI (Common Gateway Interface) and how it allows information to be exchanged between a web server and custom scripts to dynamically generate web pages.
4. It includes examples of basic CGI programs in Python for handling GET and POST requests, retrieving and displaying form data, and using cookies to maintain state across web requests.
This document provides an overview of server-side web programming and technologies like CGI, servlets, and JSP. It discusses how static and dynamic pages work, as well as the Common Gateway Interface (CGI) standard. CGI allows building dynamic websites by running programs on the server. The document then covers how servlets provide an improvement over CGI with benefits like improved performance, portability, and security. It provides examples of invoking servlets and the servlet API.
This document provides an overview and agenda for a web services tutorial. It discusses consuming and building web services using PHP. The topics that will be covered include: consuming simple web services using file_get_contents, cURL, and Pecl_HTTP; building RESTful and RPC services; handling HTTP requests and responses including status codes, headers, and data formats like JSON and XML; and best practices for versioning, documentation, and statelessness. Code samples are provided on the speaker's website.
This document provides an overview of ASP.NET MVC 4 Web API. It discusses what an API is and why Web API is used. It covers key concepts like HTTP, REST, JSON. It describes features of Web API like routing, error handling, model validation, OData support, media formatters, and security. It also discusses using the HttpClient class and future plans.
The document provides an introduction and overview of building and consuming web services. It begins with defining what a web service is and discussing common web service architectures and types, including RESTful and RPC services. It then covers topics like HTTP, data formats like JSON and XML, and how to build a simple PHP-based web service that returns data in various formats depending on the Accept header. The document also discusses consuming web services using PHP libraries like cURL and Pecl_HTTP. It includes examples of building and consuming a SOAP web service in PHP. Finally, it discusses building RESTful web services and routing requests in PHP.
This document summarizes Joone Hur's presentation on web standards support in WebKit. It discusses several new and emerging web APIs including custom protocol and content handlers, AddSearchProvider, Navigation Timing, device APIs for battery status, contacts, and media capture. It also covers the Unified Storage Quota API, Shadow DOM API, and notes that WebCL and WebKit2 have been added to Samsung and Nokia browsers.
Multimedia on the mountaintop: presentation at ACM MM2016Piero Fraternali
This paper merges multimedia and environmental research
to verify the utility of public web images for improving water
management in periods of water scarcity, an increasingly
critical event due to climate change. A multimedia processing
pipeline fetches mountain images from multiple sources
and extracts virtual snow indexes correlated to the amount
of water accumulated in the snow pack. Such indexes are
used to predict water availability and design the operating
policy of Lake Como, Italy. The performance of this informed
policy is contrasted, via simulation, with the current
operation, which depends only on lake water level and day of
the year, and with a policy that exploits ocial Snow Water
Equivalent (SWE) estimated from ground stations data and
satellite imagery. Virtual snow indexes allow improving the
system performance by 11.6% w.r.t. the baseline operation,
and yield further improvement when coupled with ocial
SWE information, showing that the two data sources are
complementary. The proposed approach exemplies the opportunities
and challenges of applying multimedia content
analysis methods to complex environmental problems.
presentation at European Utility Week, Vienna, Nov. 2015Piero Fraternali
This document discusses using smart water meter data and analytics to improve demand management and customer relationships for water utilities. It describes collecting high frequency consumption data from smart meters, analyzing the data to classify customers and detect usage patterns, and developing a consumer portal with personalized tips, goals, comparisons to peers, and games to motivate more efficient water use. The system is currently being piloted with 400 households in Switzerland and will be deployed in London and Valencia in upcoming years.
This document discusses how to effectively exploit and leverage both corporate and user-generated content through cooperation between humans and machines. It outlines several challenges, such as dealing with low quality or adversarial content, and proposes solutions like incentivizing high quality contributions and using techniques like crowdsourcing, trust modeling, and gamification to optimize content creation and verification. The key is developing new algorithms and systems that coordinate humans and computers to obtain quality content with minimal resources, while also addressing issues like unreliable algorithms or deception by human contributors.
This document discusses human computation and how crowdsourcing and games can be used to solve problems. It provides examples of early human computation tasks like CAPTCHAs and describes different types of crowdsourcing games like output agreement, input agreement, and inversion games. Specific games discussed include ESP, TagATune, and Peekaboom. The document also outlines forms of human computation like crowdsourcing, games with a purpose, social mobilization, and how human computation can be applied to tasks involving public resource management, extracting information from data, and predictive modeling. Finally, it discusses some open problems and examples of human computation projects from Politecnico di Milano.
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...Piero Fraternali
Social media usage has surpassed email and people now spend over 200 million hours per month gaming online in the US. However, issues like spam, cheating, and threats to privacy and reputation exist on current social media platforms. The document proposes empowering Horizon 2020 by developing methods, platforms, tools, social incentives and business models to create trustable social media centered around assessing the trust and reputation of online content and people. This would help harness collective intelligence into apps that can support sustainability, the environment, social capital and economic growth.
1. The CUbRIK project combines automatic face recognition tools with crowdsourcing to build social graphs from images. It uses a four-tier architecture to process content and queries.
2. An initial proof of concept used a general purpose crowd to validate top face matches identified by an automatic tool on a dataset of European history photos, but achieved only weak results due to image quality issues and the non-expert crowd.
3. The presentation argues that using an expert-based crowdsourcing approach could overcome the limitations seen with solely automatic processing and general purpose crowds, by leveraging experts' domain knowledge and ability to collaborate within their communities.
This document discusses human computation and its uses in natural resource management. It defines human computation and describes various forms it can take including crowdsourcing, games with a purpose, solution space exploration, and social mobilization. Examples are given of human computation being used to monitor waterways, predict population dynamics from Twitter data, and predict snow levels from Flickr photos. Open issues and research projects exploring uses of human computation for problems in areas like predicting water demand are also discussed.
This document provides an introduction to model driven engineering and software models. It discusses how models provide an abstract representation of a system that can be used to investigate and verify properties before production. The document then covers the history of software models and milestones like the Object Management Group adopting standards like the Unified Modeling Language (UML) and Model Driven Architecture (MDA). It defines key concepts in model driven engineering like platform independent models and platform specific models. Finally, it discusses how models are specified using meta-models and transformations between models.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
CAKE: Sharing Slices of Confidential Data on BlockchainClaudio Di Ciccio
Presented at the CAiSE 2024 Forum, Intelligent Information Systems, June 6th, Limassol, Cyprus.
Synopsis: Cooperative information systems typically involve various entities in a collaborative process within a distributed environment. Blockchain technology offers a mechanism for automating such processes, even when only partial trust exists among participants. The data stored on the blockchain is replicated across all nodes in the network, ensuring accessibility to all participants. While this aspect facilitates traceability, integrity, and persistence, it poses challenges for adopting public blockchains in enterprise settings due to confidentiality issues. In this paper, we present a software tool named Control Access via Key Encryption (CAKE), designed to ensure data confidentiality in scenarios involving public blockchains. After outlining its core components and functionalities, we showcase the application of CAKE in the context of a real-world cyber-security project within the logistics domain.
Paper: https://doi.org/10.1007/978-3-031-61000-4_16
Infrastructure Challenges in Scaling RAG with Custom AI modelsZilliz
Building Retrieval-Augmented Generation (RAG) systems with open-source and custom AI models is a complex task. This talk explores the challenges in productionizing RAG systems, including retrieval performance, response synthesis, and evaluation. We’ll discuss how to leverage open-source models like text embeddings, language models, and custom fine-tuned models to enhance RAG performance. Additionally, we’ll cover how BentoML can help orchestrate and scale these AI components efficiently, ensuring seamless deployment and management of RAG systems in the cloud.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfTechgropse Pvt.Ltd.
In this blog post, we'll delve into the intersection of AI and app development in Saudi Arabia, focusing on the food delivery sector. We'll explore how AI is revolutionizing the way Saudi consumers order food, how restaurants manage their operations, and how delivery partners navigate the bustling streets of cities like Riyadh, Jeddah, and Dammam. Through real-world case studies, we'll showcase how leading Saudi food delivery apps are leveraging AI to redefine convenience, personalization, and efficiency.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slackshyamraj55
Discover the seamless integration of RPA (Robotic Process Automation), COMPOSER, and APM with AWS IDP enhanced with Slack notifications. Explore how these technologies converge to streamline workflows, optimize performance, and ensure secure access, all while leveraging the power of AWS IDP and real-time communication via Slack notifications.
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/building-and-scaling-ai-applications-with-the-nx-ai-manager-a-presentation-from-network-optix/
Robin van Emden, Senior Director of Data Science at Network Optix, presents the “Building and Scaling AI Applications with the Nx AI Manager,” tutorial at the May 2024 Embedded Vision Summit.
In this presentation, van Emden covers the basics of scaling edge AI solutions using the Nx tool kit. He emphasizes the process of developing AI models and deploying them globally. He also showcases the conversion of AI models and the creation of effective edge AI pipelines, with a focus on pre-processing, model conversion, selecting the appropriate inference engine for the target hardware and post-processing.
van Emden shows how Nx can simplify the developer’s life and facilitate a rapid transition from concept to production-ready applications.He provides valuable insights into developing scalable and efficient edge AI solutions, with a strong focus on practical implementation.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Best 20 SEO Techniques To Improve Website Visibility In SERPPixlogix Infotech
Boost your website's visibility with proven SEO techniques! Our latest blog dives into essential strategies to enhance your online presence, increase traffic, and rank higher on search engines. From keyword optimization to quality content creation, learn how to make your site stand out in the crowded digital landscape. Discover actionable tips and expert insights to elevate your SEO game.
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
Things to Consider When Choosing a Website Developer for your Website | FODUUFODUU
Choosing the right website developer is crucial for your business. This article covers essential factors to consider, including experience, portfolio, technical skills, communication, pricing, reputation & reviews, cost and budget considerations and post-launch support. Make an informed decision to ensure your website meets your business goals.
2. Outline
• Architectures for dynamic content
publishing
– CGI
– Java Servlet
– Server-side scripting
– JSP tag libraries
3. Motivations
• Creating pages on the fly based on the user’s
request and from structured data (e.g.,
database content)
• Client-side scripting & components do not
suffice
– They manipulate an existing document/page, do
not create a new one from strutured content
• Solution:
– Server-side architectures for dynamic content
production
4. Common Gateway Interface
• An interface that allows the Web Server to launch
external applications that create pages dynamically
• A kind of «double client-server loop»
5. What CGI is/is not
• Is is not
– A programming language
– A telecommunication protocol
• It is
– An interface between the web server and tha applications that
defines some standard communication variables
• The interface is implemented through system variables, a
universal mechanism present in all operating systems
• A CGI program can be written in any programming language
6. Invocation
• The client specifies in the URI the name of
the program to invoke
• The program must be deployed in a
specified location at the web server (e.g.,
the cgi-bin directory)
– http://my.server.web/cgi-bin/xyz.exe
7. Execution
• The server recognizes from the URI that
the requested resource is an executable
– Permissions must be set in the web server for
allowing program execution
– E.g., the extensions of executable files must
be explicitly specified
• http://my.server.web/cgi-bin/xyz.exe
8. Execution
• The web server decodes the paramaters
sent by the client and initializes the CGI
variables
• request_method, query_string, content_length,
content_type
• http://my.server.web/cgi-bin/xyz.exe?par=val
11. Execution
• The server builds the response from the
content emitted to the standard output and
sends it to the client
12. Handling request parameters
• Client paramaters can be sent in two ways
– With the HTTP GET method
• parameters are appended to the URL (1)
• http://www.myserver.it/cgi-bin/xyz?par=val
– With the HTTP POST method
• Parameters are inserted as an HTTP entity in the
body of the request (when their size is substantial)
• Requires the use of HTML forms to allow users
input data onto the body of the request
– (1) The specification of HTTP does not specify any maximum URI length,
practical limits are imposed by web browser and server software
13. HTML Form
<HTML>
<BODY>
<FORM
action="http://www.mysrvr.it/cgi-bin/xyz.exe"
method=post>
<P> Tell me your name:<p>
<P><INPUT type="text"
NAME="whoareyou"> </p>
<INPUT type="submit"
VALUE="Send">
</FORM>
</BODY>
</HTML>
14. Structure of a CGI program
Read environment variable
Execute business logic
Print MIME heading "Content-type: text/html"
Print HTML markup
15. Parameter decoding
Read variable
Request_method
Read variable Read variable
Query_string content_length
Read content_length
bytes from the
standard input
16. CGI development
• A CGI program can be written in any programming language:
– C/C++
– Fortran
– PERL
– TCL
– Unix shell
– Visual Basic
• In case a compiled programming language is used, the
source code must be compiled
– Normally source files are in cgi-src
– Executable binaries are in cgi-bin
• If instead an interpreted scripting language is used the source
files are deployed
– Normally in the cgi-bin folder
17. Overview of CGI variables
• Clustered per type:
– server
– request
– headers
18. Server variables
• These variables are always available, i.e.,
they do not depend on the request
– SERVER_SOFTWARE: name and version of
the server software
• Format: name/version
– SERVER_NAME: hostname or IP of the
server
– GATEWAY_INTERFACE: supported CGI
version
• Format: CGI/version
19. Request variables
• These variables depend on the request
– SERVER_PROTOCOL: transport protocol name
and version
• Format: protocol/version
– SERVER_PORT: port to which the request is
sent
– REQUEST_METHOD: HTTP request method
– PATH_INFO: extra path information
– PATH_TRANSLATED: translation of PATH_INFO
from virtual to physical
– SCRIPT_NAME: invoked script URL
– QUERY_STRING: the query string
20. Other request variables
• REMOTE_HOST: client hostname
• REMOTE_ADDR: client IP address
• AUTH_TYPE: authentication type used by
the protocol
• REMOTE_USER: username used during the
authentication
• CONTENT_TYPE: content type in case of
POST and PUT request methods
• CONTENT_LENGTH: content length
21. Environment variables: headers
• The HTTP headers contained in the request
are stored in the environment with the prefix
HTTP_
– HTTP_USER_AGENT: browser used for the
request
– HTTP_ACCEPT_ENCODING: encoding type
accepted by the client
– HTTP_ACCEPT_CHARSET: charset accepted
by the client
– HTTP_ACCEPT_LANGUAGE: language
accepted by the client
24. Problems with CGI
• Performance and security issues in web server to
application communication
• When the server receives a request, it creates a new
process in order to run the CGI program
• This requires time and significant server resources
• A CGI program cannot interact back with the web server
• The process of the CGI program is terminated when
the program finishes
• No sharing of resources between subsequen calls (e.g., reuse of
database connections)
• No main memory preservation of the user’s session (database
storage is necessary if session data are to be preserved)
• Exposing to the web the physical path to an
executable program can breach security
26. Esempio completo
1. Prima
richiesta 2. Recupero
risorsa
Form.html Form.html
3. Risposta
5. Set variabili
d'ambiente e
4. Seconda chiamata
richiesta
6. Calcolo Mult.cgi
risposta
7. Invio
risposta
Mult.c
Precedentemente
compilato in...
Mult.cgi
27. La form (form.html)
<HTML>
<HEAD><TITLE>Form di URL
moltiplicazione</TITLE><HEAD> chiamata
<BODY>
<FORM ACTION="http://www.polimi.it/cgi-bin/run/mult.cgi">
<P>Introdurre i moltiplicandi</P>
<INPUT NAME="m" SIZE="5"><BR/>
<INPUT NAME="n" SIZE="5"><BR/>
<INPUT TYPE="SUBMIT" VALUE="Moltiplica">
</FORM>
<BODY> Vista in un
browser
</HTML>
28. #include <stdio.h>
Lo script Istruzioni di
stampa della
#include <stdlib.h> risposta
sull'output
int main(void){
char *data;
long m,n;
printf("%s%c%cn", "Content-Type:text/html;charset=iso-8859-
1",13,10);
printf("<HTML>n<HEAD>n<TITLE>Risultato Recupero di
moltiplicazione</TITLE>n<HEAD>n"); valori dalle
variabili
printf("<BODY>n<H3>Risultato moltiplicazione</H3>n"); d'ambiente
data = getenv("QUERY_STRING");
if(data == NULL)
printf("<P>Errore! Errore nel ricevere i dati dalla form.</P>n");
else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2)
printf("<P>Errore! Dati non validi. Devono essere numerici.</P>n");
else
printf("<P>Risultato: %ld * %ld = %ld</P>n",m,n,m*n);
printf("<BODY>n");
return 0;
}
29. Compilazione e test locale della
• Compilazione: Set manuale
variabile
$ gcc -o mult.cgi mult.c d'ambiente
contenente la
query string
• Test locale:
$ export QUERY_STRING="m=2&n=3"
$ ./mult.cgi
• Risultato:
Content-Type:text/html;charset=iso-8859-1
<HTML>
<HEAD>
<TITLE>Risultato moltiplicazione</TITLE>
<HEAD>
<BODY>
<H3>Risultato moltiplicazione</H3>
<P>Risultato: 2 * 3 = 6</P>
<BODY>
30. Considerazioni su CGI
• Possibili problemi di sicurezza
• Prestazioni (overhead)
– creare e terminare processi richiede tempo
– cambi di contesto richiedono tempo
• Processi CGI:
– creati a ciascuna invocazione
– non ereditano stato di processo da invocazioni
precedenti (e.g., connessioni a database)
31. Riferimenti
• CGI reference:
http://hoohoo.ncsa.uiuc.edu/cgi/overview.ht
ml
• Sicurezza e CGI:
http://www.w3.org/Security/Faq/wwwsf4.ht
ml
Editor's Notes
Scripts can be accessed by their virtual pathname, followed by extra information at the end of this path. The extra information is sent as PATH_INFO. This information should be decoded by the server if it comes from a URL before it is passed to the CGI script. "The 'extra path info' is the information that follows the filename in a URL when separated by a '/' (as opposed to query string info, which is what follows a '?').
AUTH_TYPE The name of the authentication scheme used to protect the servlet. For example, BASIC, SSL, or null if the servlet was not protected. CONTENT_LENGTH The length of the request body in bytes made available by the input stream or -1 if the length is not known. For HTTP servlets, the value returned is the same as the value of the CGI variable CONTENT_LENGTH. CONTENT_TYPE The MIME type of the body of the request, or null if the type is not known. For HTTP servlets, the value returned is the same as the value of the CGI variable CONTENT_TYPE. GATEWAY_INTERFACE The revision of the CGI specification being used by the server to communicate with the script. It is "CGI/1.1". HTTP_ACCEPT Variables with names beginning with "HTTP_" contain values from the request header, if the scheme used is HTTP. HTTP_ACCEPT specifies the content types your browser supports. For example, text/xml. HTTP_ACCEPT_CHARSET Character preference information. Used to indicate the client's prefered character set if any. For example, utf-8;q=0.5. HTTP_ACCEPT_ENCODING Defines the type of encoding that may be carried out on content returned to the client. For example, compress;q=0.5. HTTP_ACCEPT_LANGUAGE Used to define which languages you would prefer to receive content in. For example, en;q=0.5. If nothing is returned, no language preference is indicated. HTTP_FORWARDED If the request was forwarded, shows the address and port through of the proxy server. HTTP_HOST Specifies the Internet host and port number of the resource being requested. Required for all HTTP/1.1 requests. HTTP_PROXY_AUTHORIZATION Used by a client to identify itself (or its user) to a proxy which requires authentication. HTTP_USER_AGENT The type and version of the browser the client is using to send the request. For example, Mozilla/1.5. PATH_INFO Optionally contains extra path information from the HTTP request that invoked the script, specifying a path to be interpreted by the CGI script. PATH_INFO identifies the resource or sub-resource to be returned by the CGI script, and it is derived from the portion of the URI path following the script name but preceding any query data. PATH_TRANSLATED Maps the script's virtual path to the physical path used to call the script. This is done by taking any PATH_INFO component of the request URI and performing any virtual-to-physical translation appropriate. QUERY_STRING The query string that is contained in the request URL after the path. REMOTE_ADDR Returns the IP address of the client that sent the request. For HTTP servlets, the value returned is the same as the value of the CGI variable REMOTE_ADDR. REMOTE_HOST The fully-qualified name of the client that sent the request, or the IP address of the client if the name cannot be determined. For HTTP servlets, the value returned is the same as the value of the CGI variable REMOTE_HOST. REMOTE_USER Returns the login of the user making this request if the user has been authenticated, or null if the user has not been authenticated. REQUEST_METHOD Returns the name of the HTTP method with which this request was made. For example, GET, POST, or PUT. SCRIPT_NAME Returns the part of the URL from the protocol name up to the query string in the first line of the HTTP request. SERVER_NAME Returns the host name of the server that received the request. For HTTP servlets, it is the same as the value of the CGI variable SERVER_NAME. SERVER_PORT Returns the port number on which this request was received. For HTTP servlets, the value returned is the same as the value of the CGI variable SERVER_PORT. SERVER_PROTOCOL Returns the name and version of the protocol the request uses in the following form: protocol/majorVersion.minorVersion. For example, HTTP/1.1. For HTTP servlets, the value returned is the same as the value of the CGI variable SERVER_PROTOCOL. SERVER_SOFTWARE Returns the name and version of the servlet container on which the servlet is running. HTTP_COOKIE HTTP Cookie String. WEBTOP_USER The user name of the user who is logged in. NCHOME The NCHOME environment variable.