Building Web Applications in .NET — Peter Himschoot Blazor Revealed Building Web Applications in .NET

Total Page:16

File Type:pdf, Size:1020Kb

Building Web Applications in .NET — Peter Himschoot Blazor Revealed Building Web Applications in .NET Blazor Revealed Building Web Applications in .NET — Peter Himschoot Blazor Revealed Building Web Applications in .NET Peter Himschoot Blazor Revealed: Building Web Applications in .NET Peter Himschoot Melle, Belgium ISBN-13 (pbk): 978-1-4842-4342-8 ISBN-13 (electronic): 978-1-4842-4343-5 https://doi.org/10.1007/978-1-4842-4343-5 Library of Congress Control Number: 2019932722 Copyright © 2019 by Peter Himschoot This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Managing Director, Apress Media LLC: Welmoed Spahr Acquisitions Editor: Jonathan Gennick Development Editor: Laura Berendson Coordinating Editor: Jill Balzano Cover designed by eStudioCalamar Cover image designed by Freepik (www.freepik.com) Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer- sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail [email protected], or visit www.apress.com/ rights-permissions. Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web page at www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this book is available to readers on GitHub via the book’s product page, located at www.apress.com/9781484243428. For more detailed information, please visit www.apress.com/source-code. Printed on acid-free paper Table of Contents About the Author ..................................................................................................... ix About the Technical Reviewer ................................................................................. xi Acknowledgments ................................................................................................. xiii Introduction to WebAssembly and Blazor ...............................................................xv Chapter 1: Your First Blazor Project ......................................................................... 1 Installing Blazor Prerequisites ������������������������������������������������������������������������������������������������������ 1 .NET Core ��������������������������������������������������������������������������������������������������������������������������������� 1 Visual Studio 2017 ������������������������������������������������������������������������������������������������������������������� 2 ASP.NET Core Blazor Language Services ��������������������������������������������������������������������������������� 3 Visual Studio Code ������������������������������������������������������������������������������������������������������������������� 3 Installing the Blazor Templates for VS/Code ���������������������������������������������������������������������������� 4 Generating Your Project with Visual Studio ����������������������������������������������������������������������������������� 5 Creating a Project with Visual Studio �������������������������������������������������������������������������������������� 6 Generating the Project with dotnet cli ������������������������������������������������������������������������������������� 7 Running the Project ����������������������������������������������������������������������������������������������������������������� 8 Examining the Project’s Parts ����������������������������������������������������������������������������������������������������� 10 The Solution ��������������������������������������������������������������������������������������������������������������������������� 10 The Server ����������������������������������������������������������������������������������������������������������������������������� 10 The Shared Project ���������������������������������������������������������������������������������������������������������������� 12 The Client Blazor Project ������������������������������������������������������������������������������������������������������� 13 Summary ������������������������������������������������������������������������������������������������������������������������������������ 17 iii TABLE OF CONtENtS Chapter 2: Data Binding .......................................................................................... 19 A Quick Look at Razor ����������������������������������������������������������������������������������������������������������������� 19 One-Way Data Binding ���������������������������������������������������������������������������������������������������������������� 21 One-Way Data Binding Syntax ����������������������������������������������������������������������������������������������� 21 Conditional Attributes ������������������������������������������������������������������������������������������������������������ 22 Event Handling and Data Binding ������������������������������������������������������������������������������������������������ 23 Event Binding Syntax ������������������������������������������������������������������������������������������������������������� 23 Event Arguments ������������������������������������������������������������������������������������������������������������������� 23 Using C# Lambda Functions �������������������������������������������������������������������������������������������������� 24 Two-Way Data Binding ���������������������������������������������������������������������������������������������������������������� 24 Two-Way Data Binding Syntax ����������������������������������������������������������������������������������������������� 24 Formatting Dates ������������������������������������������������������������������������������������������������������������������� 26 Reporting Changes ���������������������������������������������������������������������������������������������������������������������� 26 The Pizza Place Single Page Application ������������������������������������������������������������������������������������ 28 Creating the PizzaPlace Project ��������������������������������������������������������������������������������������������� 29 Adding Shared Classes to Represent the Data ���������������������������������������������������������������������� 30 Building the UI to Show the Menu ����������������������������������������������������������������������������������������� 34 Enter the Customer ���������������������������������������������������������������������������������������������������������������� 42 Validating the Customer Information ������������������������������������������������������������������������������������� 45 Summary ������������������������������������������������������������������������������������������������������������������������������������ 52 Chapter 3: Components and Structure for Blazor Applications .............................. 53 What Is a Blazor Component? ����������������������������������������������������������������������������������������������������� 53 Examining the SurveyPrompt Component ����������������������������������������������������������������������������� 54 Building a Simple Alert Component with Razor ��������������������������������������������������������������������� 55 Separating View and View-Model ������������������������������������������������������������������������������������������ 58 Building a Component Library ����������������������������������������������������������������������������������������������������� 66 Creating the Component Library Project ������������������������������������������������������������������������������� 67 Adding Components to the Library ���������������������������������������������������������������������������������������� 68 Refering to the Library from Your Project ������������������������������������������������������������������������������ 70 iv TABLE OF CONtENtS Refactoring
Recommended publications
  • Marcelo Camargo (Haskell Camargo) – Résumé Projects
    Marcelo Camargo (Haskell Camargo) – Résumé https://github.com/haskellcamargo [email protected] http://coderbits.com/haskellcamargo Based in Joinville / SC – Brazil Knowledge • Programming languages domain: ◦ Ada, AdvPL, BASIC, C, C++, C#, Clipper, Clojure, CoffeeScript, Common LISP, Elixir, Erlang, F#, FORTRAN, Go, Harbour, Haskell, Haxe, Hy, Java, JavaScript, Ink, LiveScript, Lua, MATLAB, Nimrod, OCaml, Pascal, PHP, PogoScript, Processing, PureScript, Python, Ruby, Rust, Self, Shell, Swift, TypeScript, VisualBasic [.NET], Whip, ZPL. • Markup, style and serialization languages: ◦ Markdown, reStructuredText, [X] HTML, XML, CSS, LESS, SASS, Stylus, Yaml, JSON, DSON. • Database management systems: ◦ Oracle, MySQL, SQL Server, IBM DB2, PostgreSQL. • Development for operating systems: ◦ Unix based, Windows (CE mobile included), Android, Firefox OS. • Parsers and compilers: ◦ Macros: ▪ Sweet.js, preprocessor directives. ◦ Parser and scanner generators: ▪ ANTLR, PEG.js, Jison, Flex, re2c, Lime. • Languages: ◦ Portuguese (native) ◦ English (native) ◦ Spanish (fluent) ◦ French (fluent) ◦ Turkish (intermediate) ◦ Chinese (mandarin) (intermediate) ◦ Esperanto (intermediate) Projects • Prelude AdvPL – a library that implements functional programming in AdvPL and extends its syntax to a more expressive one; it's a port of Haskell's Prelude; • Frida – a LISP dialect that runs on top of Node.js; • PHPP – A complete PHP preprocessor with a grammar able to identify and replace tokens and extend/modify the language syntax, meant to be implemented
    [Show full text]
  • IP Log for Eclipse.Platform Release 4.0, July 2010 Licenses
    IP Log for eclipse.platform Release 4.0, July 2010 Licenses • Eclipse Public License v1.0 Third-Party Code CQ Third-Party Code License Use ICU4J (core and extended ICU4J License (X License, 1065 function) and ICU4J MIT Style) Replacement plug-in Version: 3.6 ICU4J License (X License, 1116 ICU4J Version: 3.4.5.20061213 MIT Style) 1153 JSch 0.1.31 Version: 0.1.31 New BSD license Apache Lucene Version: 1.9.1 243 (Core+Contrib Analyzers Apache License, 2.0 Analysis Src) 257 APT Version: 1 New BSD license Mozilla Public License 1.1 (MPL), MIT Style with No 262 Cairo Version: 1.0.2 Endorsement Clause, Historical Permissive Notice & Disclaimer ICU4J License (X License, 280 ICU4J Version: 3.4 MIT Style) ICU4J License (X License, 281 ICU4J Version: 3.4.3 MIT Style) 293 jsch Version: 0.1.28 New BSD license 308 PNG unload Version: 1 MIT license 1232 Apache Ant Version: 1.7.0 Apache License, 2.0 ICU4J and ICU4J Replacement ICU4J License (X License, 1367 Version: 3.6.1 MIT Style) Olsen time zone data Version: 1368 Public Domain 2007e Work derived from IJG JPEG 1596 IJG License Version: Release 6b,337 unmodified 1826 JSch 0.1.35 New BSD license source & binary ICU4J and ICU4J replacement MIT License with "no unmodified 1919 Version: 3.8.1 edorsement" clause source & binary unmodified 2014 jsch Version: 0.1.37 New BSD license source & binary XHTML DTDs Version: unmodified 2044 W3C Document License Versions 1.0 and 1.1 (PB CQ331) source org.apache.ant Version: 1.6.5 2404 (ATO CQ1013) (using Orbit Apache License, 2.0 CQ2209) org.apache.lucene Version: 1.4.3 2405 (Core Source Only) (ATO Apache License, 2.0 CQ1014) (using Orbit CQ2210) Junit Version: 3.8.2 (ATO 2406 Common Public License 1.0 CQ299) (using Orbit CQ2206) Historical support for Java SSH modified 2410 Applet + Blowfish Version - v.
    [Show full text]
  • Javascript Tomasz Pawlak, Phd Marcin Szubert, Phd Institute of Computing Science, Poznan University of Technology Presentation Outline
    INTERNET SYSTEMS JAVASCRIPT TOMASZ PAWLAK, PHD MARCIN SZUBERT, PHD INSTITUTE OF COMPUTING SCIENCE, POZNAN UNIVERSITY OF TECHNOLOGY PRESENTATION OUTLINE • What is JavaScript? • Historical Perspective • Basic JavaScript • JavaScript: The Good Parts • JavaScript: The Bad Parts • Languages that compile to JavaScript • ECMAScript 6 MODERN WEB APPLICATION DATABASE SERVER HTML defines structure and content, CSS sets the formatting and appearance, JavaScript adds interactivity to a webpage and allows to create rich web applications. WHY JAVASCRIPT? • JavaScript is the language of the web browser — it is the most widely deployed programming language in history • At the same time, it is one of the most despised and misunderstood programming languages in the world • The amazing thing about JavaScript is that it is possible to get work done with it without knowing much about the language, or even knowing much about programming. It is a language with enormous expressive power. It is even better when you know what you’re doing — JAVASCRIPT: THE GOOD PARTS , DOUGLAS CROCKFORD WHY JAVASCRIPT? • Q: If you had to start over, what are the technologies, languages, paradigms and platforms I need to be up- to-date and mastering in my new world of 2014? • A: Learn one language you can build large systems with AND also learn JavaScript. • JavaScript is the language of the web. The web will persist and the web will win. That's why I suggest you learn JavaScript — S C O T T HANSELMAN , 2 0 1 4 WHAT IS JAVASCRIPT? • JavaScript is a cross-platform, object-oriented, functional, lightweight, small scripting language. • JavaScript contains a standard library of built-in objects, such as Array and Math, and a core set of language elements such as operators, control structures, and statements.
    [Show full text]
  • A Javascript Mode for Yi
    Abstract Yi is a text editor written in the lazy functional programming language Haskell, which makes it possible to define precise editing modes using an abstract syntax tree provided online using the lazy and incremental parser library in Yi. We have developed a JavaScript mode for this editor using this parser library to accurately point out possible errors in the source code. The mode accurately highlights syntactical errors as the user types and pro- vides a verifier to check the semantics of the source code. It supports most of the syntax from JavaScript 1.8 and can readily be extended with more functionality. The mode can also be used as a starting point for future developers of C-like modes for Yi. Writing a responsive parser for Yi proved non-trivial, because of the trade-off between parser performance and accuracy. This report describes how to write a mode for Yi and the different problems encountered during the working process of the JavaScript mode. It also describes in what ways the problems were solved. Sammanfattning Yi är en textredigerare skriven i det lata funktionella programspråket Haskell, som gör det möjligt att definiera noggranna redigeringslägen med hjälp av ett abstrakt syntaxträd som tillhandahålls av det lata och inkre- mentella parsningsbiblioteket i Yi. Vi har utvecklat ett JavaScript-läge till denna redigerare med hjälp av detta parsningsbibliotek för att exakt utpeka möjliga fel i källkoden. Läget markerar syntaktiska fel medan användaren skriver och tillhandahåller en verifierare för att kontrollera semantiken i källkoden. Det stödjer större delen av syntaxen i JavaScript 1.8 och kan enkelt utökas med mer funk- tionalitet.
    [Show full text]
  • Declare Named Function Coffeescript
    Declare Named Function Coffeescript Dannie remains feudalistic after Waring pikes unendurably or understudied any issue. Mickie waters outrageously. Hansel ratchet her saffrons banteringly, drivable and grouchier. This nintendo switch from running code must carefully update clause runs to adjust a named function with leading number of place You down need the add furniture to execute coffee script code in an HTML file In other cases I've seen people scour the attributes of typecoffeescript and typecoffee so they might offer for you fill well. CoffeeScript and Named Functions Software Engineering. Thanks for contributing an hook to socket Overflow! It was expected. Tech Book time Off CoffeeScript Vs Simplifying Lucid Mesh. Function var age myName name names say i len myName. CoffeeScript Interview Questions for beginners and professionals with decent list at top frequently. In its own derivatives of array which others have to motivate us with other languages they different from christian faith: was so why i actually declare named function coffeescript, rather than enforcing classical object. Therefore, where site navigate the funeral was announced for the procedure time. Do exploration spacecraft enter your function invocation can even though, coffeescript file is named functions like java developers have you want a string, dynamic import prelude. This regard where coffeescript can be a fee problem. You declare variables declared in other objects from the bottom, things for declaration location data type errors is where it stopped requiring by opening a lesson here! Already there an account? Behind them in function declaration, or named shorthand method needs to declare it actually quite surprising.
    [Show full text]
  • Jquery Cloudflare Your Company Via Grunt-Contrib-Uglify Used to Build That Jquery
    JavaScript & Security get married Yan Zhu NCC Group SF Open Forum 9/17/15 F YEAH RUSTIC PENNSYLVANIA WEDDING THEME!! About me: ● Security Engineer at Yahoo! by day ● EFF Technology Fellow (Let’s Encrypt, HTTPS Everywhere) ● That’s a real photo of me -> Our story 09.??.1995 08.19.15 JavaScript released! Started investigating JS optimizer security as a side project. ??.??.1991 01.05.11 08.23.15 I was born! Wrote my first line of Got bored and mostly JavaScript. stopped working on this project. This talk is about JavaScript. (sorry not sorry) JAVASCRIPT What runs JS? ● Browsers ● Servers (node/io.js) ● Soon: everything Inspiration GET YOUR COPY TODAY PoC||GTFO 0x08 https://www.alchemistowl.org/pocorgtfo/ “No amount of source-level verification or scrutiny will protect you from using untrusted code. In demonstrating the possibility of this kind of attack, I picked on the C compiler. I could have picked on any program-handling program such as an assembler, a loader, or even hardware microcode. As the level of program gets lower, these bugs will be harder and harder to detect.” Ken Thompson, Reflections on Trusting Trust (1984) seen in the wild! JS isn’t “compiled,” but ... ● Transpilers to JS exist for every major language ● JS sugar (CoffeeScript, Coco, LiveScript, Sibilant) ● Optimizers (Closure, Uglify) ● Static typing (Closure, Flow, TypeScript, asm.js) ● Language extensions (React’s JSX) ● ES6 -> ES5 converter (Babel) more at https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that- compile-to-js Let’s get hackin’ Step 1: Pick a JS library Who uses UglifyJS2? INSERT OVERCROPPED LOGO gruntjs jquery cloudflare your company via grunt-contrib-uglify used to build that jquery.
    [Show full text]
  • Kaang: a Restful API Generator for the Modern Web
    Kaang: A RESTful API Generator for the Modern Web Ricardo Queirós CRACS & INESC-Porto LA & DI/ESMAD/P.PORTO, Porto, Portugal [email protected] https://orcid.org/0000-0002-1985-6285 Abstract Technology is constantly evolving, as a result, users have become more demanding and the ap- plications more complex. In the realm of Web development, JavaScript is growing in a surprising way, already leaving the boundaries of the browser, mainly due to the advent of Node.js. In fact, JavaScript is constantly being reinvented and, from the ES2015 version, began to include the OO concepts typically found in other programming languages. With Web access being mostly made by mobile devices, developers face now performance challenges and need to perform a plethora of tasks that weren’t necessary a decade ago, such as managing dependencies, bundling files, minifying code, optimizing images and others. Many of these tasks can be achieved by using the right tools for the job. However, developers not only have to know those tools, but they also must know how to access and operate them. This process can be tedious, confusing, time-consuming and error-prone. In this paper, we present Kaang, an automatic generator of RESTFul Web applications. The ultimate goal of Kaang is to minimize the impact of creating a RESTFul service by automating all its workflow (e.g., files structuring, boilerplate code generation, dependencies management, and task building). This kind of generators will benefit two types of users: will help novice developers to decrease their learning curve while facing the new frameworks and libraries commonly found in the modern Web and speed up the work of expert developers avoiding all the repetitive and bureaucratic work.
    [Show full text]
  • JAVASCRIPT TRANSPILERI Završni Rad
    SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU FAKULTET ELEKTROTEHNIKE, RAČUNARSTVA I INFORMACIJSKIH TEHNOLOGIJA Preddiplomski studij JAVASCRIPT TRANSPILERI Završni rad Zvonimir Grubišić Osijek, 2017 Obrazac Z1P - Obrazac za ocjenu završnog rada na preddiplomskom sveučilišnom studiju Osijek, 23.09.2018. Odboru za završne i diplomske ispite Prijedlog ocjene završnog rada Ime i prezime studenta: Zvonimir Grubišić Studij, smjer: Preddiplomski sveučilišni studij Računarstvo Mat. br. studenta, godina upisa: R3637, 29.09.2017. OIB studenta: 50946540896 Mentor: Izv. prof. dr. sc. Irena Galić Sumentor: Hrvoje Leventić Sumentor iz tvrtke: Naslov završnog rada: Javascript transpileri Znanstvena grana rada: Programsko inženjerstvo (zn. polje računarstvo) Predložena ocjena završnog rada: Izvrstan (5) Primjena znanja stečenih na fakultetu: 3 bod/boda Kratko obrazloženje ocjene prema Postignuti rezultati u odnosu na složenost zadatka: 3 bod/boda Kriterijima za ocjenjivanje završnih i Jasnoća pismenog izražavanja: 3 bod/boda diplomskih radova: Razina samostalnosti: 3 razina Datum prijedloga ocjene mentora: 23.09.2018. Datum potvrde ocjene Odbora: 26.09.2018. Potpis: Potpis mentora za predaju konačne verzije rada u Studentsku službu pri završetku studija: Datum: IZJAVA O ORIGINALNOSTI RADA Osijek, 01.10.2018. Ime i prezime studenta: Zvonimir Grubišić Studij: Preddiplomski sveučilišni studij Računarstvo Mat. br. studenta, godina upisa: R3637, 29.09.2017. Ephorus podudaranje [%]: 1% Ovom izjavom izjavljujem da je rad pod nazivom: Javascript transpileri izrađen pod vodstvom mentora Izv. prof. dr. sc. Irena Galić i sumentora Hrvoje Leventić moj vlastiti rad i prema mom najboljem znanju ne sadrži prethodno objavljene ili neobjavljene pisane materijale drugih osoba, osim onih koji su izričito priznati navođenjem literature i drugih izvora informacija. Izjavljujem da je intelektualni sadržaj navedenog rada proizvod mog vlastitog rada, osim u onom dijelu za koji mi je bila potrebna pomoć mentora, sumentora i drugih osoba, a što je izričito navedeno u radu.
    [Show full text]
  • Free Wysiwyg Php Web Builder
    Free wysiwyg php web builder click here to download RocketCake is a free web editor for creating responsive websites. For beginners and professional web developers. No programming needed. WYSIWYG Editor JavaScript, PHP code, user-defined breakpoint code and premium support.​Download · ​Tutorials · ​News · ​Professional Edition. Web Builder is a WYSIWYG (What-You-See-Is-What-You-Get) program used to create web pages. Outputs standard HTML4, HTML5, XHTML, CSS3, PHP. Asking whether one should use PHP or HTML to design a website is like Most of the non-WYSIWYG web editors on the Free HTML Editors. We've collated the very best free website builders available, including a CoffeeCup Free HTML Editor isn't a WYSIWYG website builder, but it. Free HTML editors, WYSIWYG web editors, site builders, for designing your own If you don't know what HTML, CSS, JavaScript, PHP or Perl are, this may be. Generates SEO-ready and W3C-compliant HTML/CSS/PHP code. Option SEO assistant. Free website templates are available. WYSIWYG. DB. STATIC. paid. Silex is a Website Builder for Designers. Silex is free and open source because we believe that free minds need to have free tools, without hidden costs. Popular Alternatives to WYSIWYG Web Builder for Windows, Mac, Linux, Web, iPhone and more. Explore Komodo Edit is a fast, smart, free and open-source code editor. Generates W3C- compliant HTML/CSS/PHP code. Free (WYSIWYG or Text-based) Web Page Editors, HTML Editors, Web Page find 2 types of web page editors/HTML editors/website builders: WYSIWYG ones and the web: Java, JavaScript, JSP, ASP, VBScript, PHP, Perl, CSS, HTML, etc.
    [Show full text]
  • In-Line Editing: a New Approach to Editing Wikis
    In-line Editing: a New Approach to Editing Wikis Bachelor's thesis 12th July 2011 Student: Jan Paul Posma Supervisors: Leonie Bosveld-de Smet & Gerard R. Renardel de Lavalette Abstract We present the concept of in-line editing pages in wikis; a compromise between editing raw wikitext and visually editing pages. This has the advantage of not requiring a formal grammar specification of the wikitext, a large problem for some wikis — including Wikipedia. Often, users of these wikis can only edit the raw wikitext, which makes editing a difficult task, especially for novice users who are used to visually editing documents. With the proposed interfaces, users can click elements in the page, and then edit the wikitext for these elements, instead of having to edit the wikitext of the entire page at once, which can be frightening at first. We present three different interfaces based on in-line editing, and we look at usability experiments done with these interfaces. We also present a way of generating these interfaces by leveraging the existing parser. We discuss an optimisation that allows for parsing only a part of the page when the user makes an edit, instead of having to parse the entire page again. We look at different ways of solving problems that arise when using our algorithm, such as the correct detection of editable elements, incorrect nesting that occurs after parsing, and resolving dependencies throughout the page. Finally, we consider ways of further improving this concept of in-line editing. c Copyright by Jan Paul Posma, 2011. Some rights reserved. This work is released under the CC-BY-SA-3.0 license: http://creativecommons.org/licenses/by-sa/3.0.
    [Show full text]
  • Declarative Ajax Web Applications Through SQL++ on a Unified
    Declarative Ajax Web Applications through SQL++ on a Unified Application State Yupeng Fu Kian Win Ong Yannis Papakonstantinou UCSD UCSD UCSD [email protected] [email protected] [email protected] Abstract (c) the data tier in the database. Multiple mundane low-level tasks Implementing even a conceptually simple web application requires need to be performed in a coordinated fashion across all three tiers. an inordinate amount of time. FORWARD addresses three prob- The resulting problems (as follows) reduce developer productivity: Impedance mismatch lems that reduce developer productivity: (a) 1. Impedance mismatch arises because each tier uses different lan- across the multiple languages used at different tiers of the appli- guages (and data models) [5, 21]. The visual tier uses DOM Distributed data access cation architecture. (b) across the multi- (XHTML) / JavaScript (JSON); the application logic tier uses ple data sources of the application (user input of the browser page, an application programming language, such as Java, Python or Asyn- session data in the application server, SQL database etc). (c) PHP (objects); the data tier uses SQL (tables). To display a page, chronous, incremental modification of the pages , as performed by mundane and error-prone code is needed to translate SQL tables Ajax actions. into Java objects, and then into HTML / JavaScript objects. To FORWARD belongs to a novel family of web application frame- implement an action invocation, more code is needed to translate works that attack impedance mismatch by offering a single uni- in the opposite direction. fying language. FORWARD’s language is SQL++, which is SQL with necessary extensions for semi-structured data.
    [Show full text]
  • LATEXML the Manual ALATEX to XML/HTML/MATHML Converter; Version 0.8.5
    LATEXML The Manual ALATEX to XML/HTML/MATHML Converter; Version 0.8.5 Bruce R. Miller November 17, 2020 ii Contents Contents iii List of Figures vii 1 Introduction1 2 Using LATEXML 5 2.1 Conversion...............................6 2.2 Postprocessing.............................7 2.3 Splitting................................. 11 2.4 Sites................................... 11 2.5 Individual Formula........................... 13 3 Architecture 15 3.1 latexml architecture........................... 15 3.2 latexmlpost architecture......................... 18 4 Customization 19 4.1 LaTeXML Customization........................ 20 4.1.1 Expansion............................ 20 4.1.2 Digestion............................ 22 4.1.3 Construction.......................... 24 4.1.4 Document Model........................ 27 4.1.5 Rewriting............................ 28 4.1.6 Packages and Options..................... 28 4.1.7 Miscellaneous......................... 29 4.2 latexmlpost Customization....................... 29 4.2.1 XSLT.............................. 30 4.2.2 CSS............................... 30 5 Mathematics 33 5.1 Math Details............................... 34 5.1.1 Internal Math Representation.................. 34 5.1.2 Grammatical Roles....................... 36 iii iv CONTENTS 6 Localization 39 6.1 Numbering............................... 39 6.2 Input Encodings............................. 40 6.3 Output Encodings............................ 40 6.4 Babel.................................. 40 7 Alignments 41 7.1 TEX Alignments............................
    [Show full text]