Datalogforeningen December 7, 1999 A Programming Language for Developing Interactive Web Services Claus Brabrand BRICS, University of Aarhus, Denmark.

Slides:



Advertisements
Similar presentations
Microsoft Research March 20, 2000 A Programming Language for Developing Interactive Web Services Claus Brabrand BRICS, University of Aarhus, Denmark.
Advertisements

JavaScript FaaDoOEngineers.com FaaDoOEngineers.com.
Java Script Session1 INTRODUCTION.
DT228/3 Web Development WWW and Client server model.
Building Applications using ASP.NET and C# / Session 1 / 1 of 21 Session 1.
Server-Side vs. Client-Side Scripting Languages
1 Chapter 12 Working With Access 2000 on the Internet.
15 Chapter 15 Web Database Development Database Systems: Design, Implementation, and Management, Fifth Edition, Rob and Coronel.
28/1/2001 Seminar in Databases in the Internet Environment Introduction to J ava S erver P ages technology by Naomi Chen.
Introduction to Web Database Processing
Kashif Jalal CA-240 (072) Web Development Using ASP.NET CA – 240 Kashif Jalal Welcome to week – 2 of…
Static Validation of Dynamically Generated XML Documents A survey on a series of papers by the BRICS research group at the University of Aarhus, Denmark.
Introduction to Web Interface Technology (CSE2030)
Dynamic Web Pages Bert Wachsmuth. Review  Internet, IP addresses, ports, client-server, http, smtp  HTML, XHTML, XML  Style Sheets, external, internal,
1 CS6320 – Why Servlets? L. Grewe 2 What is a Servlet? Servlets are Java programs that can be run dynamically from a Web Server Servlets are Java programs.
GPCE 2003, Erfurt Dynamic Generation of XML September 22, 2003 Domain Specific Languages for Interactive Web Services Claus Brabrand [ Joint work with.
Introduction to Web Interface Technology (CSE2030)
1 Java Server Pages Can web pages be created specially for each user? What part does Java play?
Form Handling, Validation and Functions. Form Handling Forms are a graphical user interfaces (GUIs) that enables the interaction between users and servers.
Chapter 9 Collecting Data with Forms. A form on a web page consists of form objects such as text boxes or radio buttons into which users type information.
Overview of JSP Technology. The need of JSP With servlets, it is easy to – Read form data – Read HTTP request headers – Set HTTP status codes and response.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 13 Slide 1 Application architectures.
1 Web Developer & Design Foundations with XHTML Chapter 6 Key Concepts.
INTRODUCTION TO WEB DATABASE PROGRAMMING
Computer Concepts 2014 Chapter 7 The Web and .
Tutorial: Introduction to ASP.NET Internet Technologies and Web Application 4 th February 2010.
1 CS 3870/CS 5870 Static and Dynamic Web Pages ASP.NET and IIS.
FALL 2005CSI 4118 – UNIVERSITY OF OTTAWA1 Part 4 Web technologies: HTTP, CGI, PHP,Java applets)
HTTP; The World Wide Web Protocol
Architecture Of ASP.NET. What is ASP?  Server-side scripting technology.  Files containing HTML and scripting code.  Access via HTTP requests.  Scripting.
1 CS 3870/CS 5870 Static and Dynamic Web Pages ASP.NET and IIS.
Dr. Azeddine Chikh IS444: Modern tools for applications development.
Chapter 16 The World Wide Web Chapter Goals Compare and contrast the Internet and the World Wide Web Describe general Web processing Describe several.
Chapter 6 The World Wide Web. Web Pages Each page is an interactive multimedia publication It can include: text, graphics, music and videos Pages are.
11/16/2012ISC329 Isabelle Bichindaritz1 Web Database Application Development.
1 VU. 2 CS101 Introduction to Computing Lecture 15 More on Interactive Forms (Web Development Lecture 5)
10 Adding Interactivity to a Web Site Section 10.1 Define scripting Summarize interactivity design guidelines Identify scripting languages Compare common.
WWW8 - Toronto "A Runtime System for Interactive Web Services" May 12, 1999 A Runtime System for Interactive Web Services Claus Brabrand, Anders Møller,
COLD FUSION Deepak Sethi. What is it…. Cold fusion is a complete web application server mainly used for developing e-business applications. It allows.
Chapter 8 Cookies And Security JavaScript, Third Edition.
JAVA SERVER PAGES. 2 SERVLETS The purpose of a servlet is to create a Web page in response to a client request Servlets are written in Java, with a little.
Creating Dynamic Web Pages Using PHP and MySQL CS 320.
Web Pages with Features. Features on Web Pages Interactive Pages –Shows current date, get server’s IP, interactive quizzes Processing Forms –Serach a.
Chapter 8 Collecting Data with Forms. Chapter 8 Lessons Introduction 1.Plan and create a form 2.Edit and format a form 3.Work with form objects 4.Test.
Chapter 6 Server-side Programming: Java Servlets
1 Welcome to CSC 301 Web Programming Charles Frank.
1 © Netskills Quality Internet Training, University of Newcastle HTML Forms © Netskills, Quality Internet Training, University of Newcastle Netskills is.
_______________________________________________________________________________________________________________ E-Commerce: Fundamentals and Applications1.
Database Systems: Design, Implementation, and Management Eighth Edition Chapter 14 Database Connectivity and Web Technologies.
1 MSCS 237 Overview of web technologies (A specific type of distributed systems)
Introduction to JavaScript CS101 Introduction to Computing.
Overview of Form and Javascript fundamentals. Brief matching exercise 1. This is the software that allows a user to access and view HTML documents 2.
Server-side Programming The combination of –HTML –JavaScript –DOM is sometimes referred to as Dynamic HTML (DHTML) Web pages that include scripting are.
Web Pages with Features. Features on Web Pages Interactive Pages –Shows current date, get server’s IP, interactive quizzes Processing Forms –Serach a.
ASP (Active Server Pages) by Bülent & Resul. Presentation Outline Introduction What is an ASP file? How does ASP work? What can ASP do? Differences Between.
David Lawrence 7/8/091Intro. to PHP -- David Lawrence.
Web Design and Development. World Wide Web  World Wide Web (WWW or W3), collection of globally distributed text and multimedia documents and files 
 Previous lessons have focused on client-side scripts  Programs embedded in the page’s HTML code  Can also execute scripts on the server  Server-side.
©SoftMooreSlide 1 Introduction to HTML: Forms ©SoftMooreSlide 2 Forms Forms provide a simple mechanism for collecting user data and submitting it to.
8 Chapter Eight Server-side Scripts. 8 Chapter Objectives Create dynamic Web pages that retrieve and display database data using Active Server Pages Process.
 Web pages originally static  Page is delivered exactly as stored on server  Same information displayed for all users, from all contexts  Dynamic.
ASP-2-1 SERVER AND CLIENT SIDE SCRITPING Colorado Technical University IT420 Tim Peterson.
Database Systems: Design, Implementation, and Management Eighth Edition Chapter 14 Database Connectivity and Web Technologies.
1 CSC160 Chapter 1: Introduction to JavaScript Chapter 2: Placing JavaScript in an HTML File.
A S P. Outline  The introduction of ASP  Why we choose ASP  How ASP works  Basic syntax rule of ASP  ASP’S object model  Limitations of ASP  Summary.
Brief Look InTo JavaScript Dr. Thomas Hicks Computer Science Department Trinity University.
1 Chapter 1 INTRODUCTION TO WEB. 2 Objectives In this chapter, you will: Become familiar with the architecture of the World Wide Web Learn about communication.
PHP / MySQL Introduction
Chapter 27 WWW and HTTP.
Presentation transcript:

Datalogforeningen December 7, 1999 A Programming Language for Developing Interactive Web Services Claus Brabrand BRICS, University of Aarhus, Denmark

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 What is ? A domain-specific high-level programming language for developing interactive Web services. HTML CGI JavaScript HTTP Auth. Java Applets Service Specification Service Specification

Datalogforeningen December 7, 1999 A collection of DSLs C-like skeleton language with Runtime system Concurrency control Database Dynamic documents: DynDoc Input validation language: PowerForms Security Cryptographic security Syntactic-level macros

Datalogforeningen December 7, 1999 A collection of DSLs C-like skeleton language with Runtime system Concurrency control Database Dynamic documents: DynDoc Input validation language: PowerForms Security Cryptographic security Syntactic-level macros

Datalogforeningen December 7, 1999 DSL vs. GPL DSL ::= Domain Specific Language GPL ::= General Purpose Language DSL? –Targeted for specific problem domain –Abstraction level match problem domain Examples: Lex/Yacc, LaTeX

Datalogforeningen December 7, 1999 DSL vs. GPL DSL ::= Domain Specific Language GPL ::= General Purpose Language DSL? –Targeted for specific problem domain –Abstraction level match problem domain Examples: Lex/Yacc, LaTeX,

Datalogforeningen December 7, 1999 DSL Advantages Syntax Analysis Implementation …vs. GPL + library

Datalogforeningen December 7, 1999 Goals Lower development time (= cost): Targeted at Web services Low-level  high-level Increase functionality: Compiler does “the dirty work” Reliability: Catch errors during development »Runtime errors  Compile-time errors

Datalogforeningen December 7, 1999 Assumptions “Rules of engagement”: –Lowest common denominator Any browser/Web server combination –Only include basic primitives Syntactic macro language does the rest

Datalogforeningen December 7, 1999 Target Audience Programmers! –No expert Web knowledge required –No multiple choice questionnaires or drag’n’drop “Reduce Web service development to a standard programming task.”

Datalogforeningen December 7, 1999 Core Language Features C-like to minimize syntactic burdens Features: –Garbage collection –Relations, vectors, tuples –Strong type checking

Datalogforeningen December 7, 1999 People 1x Michael I. Schwartzbach 1x Post Doc. 3x Ph.D. students 2x Programmers 2x Testers 1x External contributor

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, Approaches Script-centered Perl/CGI

Datalogforeningen December 7, Approaches Script-centered Page-centered Perl/CGI ASP, PHP

Datalogforeningen December 7, Approaches Script-centered Page-centered Session-centered Perl/CGI ASP, PHP Mawl,

Datalogforeningen December 7, 1999 Script-Centered A script A pageA script A pageA script A page

Datalogforeningen December 7, 1999 Page-Centered A page

Datalogforeningen December 7, 1999 Page-Centered Increased level of abstraction Easy to add dynamics to static pages Scalability “Service code embedded in tags and interpreted by specialized Web server”

Datalogforeningen December 7, 1999 Script / Page-Centered As the service complexity increases: –Page-centered  Script-centered Script-centered: –default programming, escape printing. Page-centered: –default printing, escape programming.

Datalogforeningen December 7, 1999 (Fundamental) Problems Interpretation-based: –Typically no static checks –(Efficiency) Not domain specific: –Cannot check Web related issues Implicit control-flow: –A service = A collection of scripts/pages!

Datalogforeningen December 7, 1999 Language Requirements Compilation-based: –Static checks –(Efficiency) Domain specific: –Check Web related issues Explicit control-flow: –A clear service specification

Datalogforeningen December 7, 1999 Session-Centered Internet show N server:client: N

Datalogforeningen December 7, 1999 Hello World service { session Hello() { html D = Hello World! ; show D; }

Datalogforeningen December 7, 1999 Hello World service { session Hello() { show Hello World! ; }

Datalogforeningen December 7, 1999 A Page Counter service { session Access() { global int counter; string name; show EnterName receive [name=name]; counter = counter + 1; show AccessDoc <[counter = counter]; }

Datalogforeningen December 7, 1999 A Page Counter  if (counter == 100) { show Congratulations <[name = name]; counter = 0; } else { show EnterName receive [name=name]; } 

Datalogforeningen December 7, 1999 CGI Shortcomings Stateless protocol –Session model requires state No bookmarking –CGI, not HTML URL Back-button problem –“Step-back-in-time” does not make sense

Datalogforeningen December 7, 1999 CGI Shortcomings Stateless protocol No bookmarking Back-button problem

Datalogforeningen December 7, 1999 CGI Shortcomings Stateless protocol No bookmarking Back-button problem

Datalogforeningen December 7, 1999 Components Internet client HTTP server program database CGIHTML CGI restore ; compute ; save

Datalogforeningen December 7, 1999 Adding a ”Connector” Internet client HTTP server program database CGI HTML CGI connector HTML CGI HTML restore ; compute ; save redirect

Datalogforeningen December 7, 1999 CGI Shortcomings Stateless protocol No bookmarking Back-button problem

Datalogforeningen December 7, 1999 CGI Shortcomings Stateless protocol No bookmarking Back-button problem

Datalogforeningen December 7, 1999 Components Internet client HTTP server program database CGI HTML CGI connector HTML CGI HTML

Datalogforeningen December 7, 1999 Adding an HTML “Reply File” Internet client HTTP server program database CGI done! CGI connector jump CGI jump HTML reply file HTML reply file HTML

Datalogforeningen December 7, 1999 CGI Shortcomings Stateless protocol No bookmarking Back-button problem

Datalogforeningen December 7, 1999 CGI Shortcomings Stateless protocol No bookmarking Back-button problem

Datalogforeningen December 7, 1999 Components Internet client HTTP server program database CGI done! CGI connector jump CGI jump HTML reply file HTML reply file HTML

Datalogforeningen December 7, 1999 Components Internet client HTTP server program database CGI done! CGI connector jump CGI jump HTML reply file HTML reply file HTML same URL

Datalogforeningen December 7, 1999 CGI Shortcomings Stateless protocol No bookmarking Back-button problem

Datalogforeningen December 7, 1999 Additional Problems

Datalogforeningen December 7, 1999 Additional Problems

Datalogforeningen December 7, 1999 What is going on? Error? –Package Lost, Service Crash, Connection down? Ok? –Searching Database, Long Computation, Waiting for a Resource? Would like to explain delays: –“searching database, please wait...”

Datalogforeningen December 7, 1999 Components Internet client HTTP server program database CGI done! CGI connector jump CGI jump HTML reply file HTML reply file HTML

Datalogforeningen December 7, 1999 Adding a Connector Timeout Internet client HTTP server program database CGI done CGI connector jump CGI jump HTML reply file HTML reply file update Timeout

Datalogforeningen December 7, 1999 Concurrency Control Problem: Parallel service processes. –Access shared resources. –Require synchronization. Solution: –Specification of checkpoints & constraints –Synthesize centralized safety controller Ensures that service obeys constraints.

Datalogforeningen December 7, 1999 Components Internet client HTTP server program database CGI done CGI connector jump CGI jump HTML reply file HTML reply file update Timeout

Datalogforeningen December 7, 1999 Adding a Safety Controller Internet client HTTP server program database CGI done CGI connector jump CGI jump HTML reply file HTML reply file update controller wait pass Timeout

Datalogforeningen December 7, 1999 Concurrency Control  counter = counter + 1; 

Datalogforeningen December 7, 1999 Concurrency Control  wait A; counter = counter + 1; wait B; 

Datalogforeningen December 7, 1999 Concurrency Control  wait A; counter = counter + 1; wait B;   t,t’’: A(t)  A(t’’)   t’: t<t’<t’’  B(t’)

Datalogforeningen December 7, 1999 A Page Counter service { session Access() { global int counter;  counter = counter + 1;  }

Datalogforeningen December 7, 1999 A Page Counter (with Macros) service { session Access() { region global int counter;  exclusive (counter) { counter = counter + 1; }

Datalogforeningen December 7, 1999 Demo Example: MutexMutex int i; bool quit; while (!quit) { flash WaitToEnterDoc; wait A; show DocA <[no=i] receive [quit = quit]; i++; } show GoodByeDoc;

Datalogforeningen December 7, 1999 Runtime System Availability: –In compiler and –As stand-alone package

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 Documents Traditionally: printf / Problems: –Only linear construction –Programmer/Designer tasks not separated –No Show/Receive correspondence –Legal/sensible HTML generated?

Datalogforeningen December 7, 1999 Documents Traditionally: printf / Problems: –Only linear construction –Programmer/Designer tasks not separated –No Show/Receive correspondence –Legal/sensible HTML generated?

Datalogforeningen December 7, 1999 Our Solution: Document Templates HTML  HTML with named gaps...gaps plugged at runtime. Hello !

Datalogforeningen December 7, 1999 Dynamic Documents Domain specific type: html (with gaps) –type ::= int | float | string |... | html Domain specific (sub)language: DynDoc –exp ::=... | c | id | id = exp | exp <[id = exp] –stm ::=... | show exp; | show exp receive [ id = id ];

Datalogforeningen December 7, 1999 Plug Syntax: –exp ::= exp <[id = exp] Semantics:

Datalogforeningen December 7, 1999 Show / Show-Receive Syntax: –stm ::= show exp; | show exp receive [ id = id ]; Semantics: N show receive

Datalogforeningen December 7, 1999 Hello World (revisited) session Hello() { html H; html D = Hello ! ; H = D <[what = “World”]; show H; }

Datalogforeningen December 7, 1999 Example: EnterData string name, ; html Input = name: ; show Input receive [name = your_name, = your_ ];

Datalogforeningen December 7, 1999 Rec. Example: GenealogyGenealogy html GenDoc =... ; html genTree(int n, string s) { if (n == 0) return ; else return GenDoc <[mother = s + “mother”, mothers_tree = genTree(n-1, “mother’s”), father = s + “father”, father_tree = genTree(n-1, “father’s”)]; }

Datalogforeningen December 7, 1999 Documents Problems: –Only linear construction –Programmer/Designer tasks not separated –No Show/Receive correspondence –Legal/sensible HTML generated?

Datalogforeningen December 7, 1999 Documents Problems: –Only linear construction  –Programmer/Designer tasks not separated –No Show/Receive correspondence –Legal/sensible HTML generated?

Datalogforeningen December 7, 1999 Documents Problems: –Only linear construction  –Programmer/Designer tasks not separated  –No Show/Receive correspondence –Legal/sensible HTML generated?

Datalogforeningen December 7, 1999 Documents Problems: –Only linear construction  –Programmer/Designer tasks not separated  –No Show/Receive correspondence –Legal/sensible HTML generated?

Datalogforeningen December 7, 1999 Static Guarantees? Documents Well-formed: Two gaps with same name? Field consistency? Plug operation: Gap present? Well-defined gap/field union? Show/Receive correspondence: All fields received? Receive types match?

Datalogforeningen December 7, 1999 Domain Specific Analysis Interprocedural data-flow analysis: –Infer exact types of all documents in program: (gaps, fields). –check: documents well-formed plug operations show/receive correspondence

Datalogforeningen December 7, 1999 Highly Domain Specific error checkbox checkbox1 nofield  radioordinary rel(F )... rel(F ) tup(F )... tup(F ) 1n 1n Field Lattice:

Datalogforeningen December 7, 1999 Documents Problems: –Only linear construction  –Programmer/Designer tasks not separated  –No Show/Receive correspondence –Legal/sensible HTML generated?

Datalogforeningen December 7, 1999 Documents Problems: –Only linear construction  –Programmer/Designer tasks not separated  –No Show/Receive correspondence  –Legal/sensible HTML generated?

Datalogforeningen December 7, 1999 Documents Problems: –Only linear construction  –Programmer/Designer tasks not separated  –No Show/Receive correspondence  –Legal/sensible HTML generated? (  )

Datalogforeningen December 7, 1999 Future Plan Analyze generated HTML documents –with respect to: HTML 3.0 / 4.0 /... DTD / DSD /... Ensure that only “legal” documents are generated

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 Server-side Input Validation N N validate  re-validate ; compute... submit re-submit re-send send

Datalogforeningen December 7, 1999 Drawbacks It takes time Excess network traffic Requires explicit programming –Affects all parties involved: client server programmer

Datalogforeningen December 7, 1999 Client-side Input Validation N (validate ); compute... submit send validate

Datalogforeningen December 7, 1999 Drawbacks It takes time Excess network traffic Requires explicit programming

Datalogforeningen December 7, 1999 Drawbacks It takes time  Excess network traffic Requires explicit programming

Datalogforeningen December 7, 1999 Drawbacks It takes time  Excess network traffic  Requires explicit programming

Datalogforeningen December 7, 1999 Drawbacks It takes time  Excess network traffic  Requires explicit programming: re-showing of pages actual validation

Datalogforeningen December 7, 1999 Drawbacks It takes time  Excess network traffic  Requires explicit programming: re-showing of pages  actual validation

Datalogforeningen December 7, 1999 Drawbacks It takes time  Excess network traffic  Requires explicit programming: re-showing of pages  actual validation 

Datalogforeningen December 7, 1999 Drawbacks It takes time  Excess network traffic  Requires explicit programming: re-showing of pages  actual validation  –Client, server: –Programmer: 

Datalogforeningen December 7, 1999 Obvious Language: JavaScript Why avoid JavaScript?: –GPL for very specific task –Operational form –Diverging Browser Implementations: Netscape vs. Explorer

Datalogforeningen December 7, 1999 Our Solution: PowerForms Domain specific language: –targeted uniquely for input validation Declarative nature (regexps): –abstracts away operational details PowerForms Declarative Specification Declarative Specification JavaScript (subset) JavaScript (subset)

Datalogforeningen December 7, 1999 Syntax decl ::= format id = regexp ; regexp ::= id | stringconst | union ( regexp* ) | concat ( regexp* ) | star ( regexp ) |...

Datalogforeningen December 7, 1999 Example: Format format Alpha = union(range(‘a’,’z’),range(‘A’,’Z’)); format Word =...; format = star(“.”,Word));

Datalogforeningen December 7, 1999 Example: EnterData (revisited) html Input = name: ; show Input receive [name=name, = ];

Datalogforeningen December 7, 1999 Example: EnterData (revisited)EnterData format =...; html Input = name: ; show Input receive [name=name, = ];

Datalogforeningen December 7, 1999 Field Interdependency...usually only handled on server-side

Datalogforeningen December 7, 1999 PowerForms (also) Extend (declarative specification): –formats depend on values of other fields –Update accordingly (fixed-point process): text / password: status icons updated radio / checkbox: illegal options deselected select: illegal options filtered (and deselected)

Datalogforeningen December 7, 1999 Example DemosDemos “Spouse” Basic interdependency “Vowels and Consonants” Select filtering “NYC Office” Complex interdependency...speak for themselves...

Datalogforeningen December 7, 1999 Applets Integration “Treat applets as regular input fields” PowerApplet SlideBar Java: (PowerForms) HTML:

Datalogforeningen December 7, 1999 PowerForms: Stand-alone Tool PowerForms XML regexp formats XML regexp formats JavaScript (subset) JavaScript (subset) HTML

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 Plan Introduction Runtime System Dynamic Documents PowerForms Conclusion

Datalogforeningen December 7, 1999 Publications...submitted Runtime SystemWWW 8, Toronto Concurrency ControlFASE’98, Lisbon Database(IPL’92) Dynamic DocumentsPOPL’00, Boston PowerForms...submitted Macros...underway –Planned: Security / Cryptographic security / Workflow

Datalogforeningen December 7, 1999 Professional Tool BUT, –Also a research project Not (yet) ideal for: –Heavy access Runtime system: CGI  Spec. Web Server –Huge datasets External database

Datalogforeningen December 7, 1999 Availability? : 1.5 MB C source for UNIX/Linux –Also as stand-alone packages: Runtime System PowerForms License? –“Almost do what you want”

Datalogforeningen December 7, 1999 YOU: Free interesting tool –Use all of or –Use stand-alone packages Runtime System PowerForms Look out for future developments

Datalogforeningen December 7, 1999 US: Feedback New ideas Spread the word!

Datalogforeningen December 7, 1999 What is ? –Runtime System –Concurrency Control –Database –Dynamic Documents –PowerForms –Security / Cryptographic security –Syntactic-level Macros