Presentation about the journey towards creating a new formatter with Xtext's new formatter2 API. Highlights the migration plan, problems, and our experience with the new API.
EclipseCon Europe 2017 - Taming complex chip designs with beautiful diagramsTitouan Vervack
Presentation about the journey towards creating generated graphical views and a Graphics Configuration DSL. Tells the story from digital design by hand, up to graphical editors, textual editors and graphically assisted textual editors.
Airframe RPC is a framework for building RPC services by using Scala as a unified RPC interface between servers and clients. It supports Finagle (HTTP/1) and gRPC (HTTP/2) backend, and even Scala.js for web application development.
Talk video: https://www.youtube.com/watch?v=qf8wOc2YHmQ&feature=youtu.be
Documentation: https://wvlet.org/airframe/docs/airframe-rpc
Demo source code: https://github.com/wvlet/airframe/tree/master/examples/rpc-examples
Abstract Factory pattern application on multi-contract on-chain deploymentsDejan Radic
Blockchain is a new technology having many glitches and limitations. Ethereum being the most popular smart contract platform has inherent limitations regarding block gas limit where sum of all block’s transactions gas limits can’t go over certain level. There are many use-cases where some contracts can be deployed directly on-chain (from another contract), because they have wide usage (for example ERC20 Token contracts).
If there are many variations of those contracts that can be deployed directly on-chain, deploying them from single contract is problematic since those variations cost gas, and it’s easy to exceed block gas limit. That’s where Abstract Factory pattern and separation of concerns comes in use.
OSDC 2015: Dr. Udo Seidel | Developing Applications for the New Cloud Operati...NETWAYS
Along with many other things the cloud has triggered the creation of new opensource operating systems. Some of them are still a kind of a Linux. Others have broken with many traditions in order to be the best O/S for the cloud. Even the more Linux-like ones require a change of thinking regarding setup and management. This has a knock-on effect on how to develop applications which should run on these new operating systems. Using CoreOS, OSv and MirageOS this talk will describe the design and architecture of the newcomers in the cloud O/S family. This is followed by the changes needed on the application development side. The selected examples represent the broad spectrum from 'almost no code changes needed' to 'rewrite from scratch'.
EclipseCon Europe 2017 - Taming complex chip designs with beautiful diagramsTitouan Vervack
Presentation about the journey towards creating generated graphical views and a Graphics Configuration DSL. Tells the story from digital design by hand, up to graphical editors, textual editors and graphically assisted textual editors.
Airframe RPC is a framework for building RPC services by using Scala as a unified RPC interface between servers and clients. It supports Finagle (HTTP/1) and gRPC (HTTP/2) backend, and even Scala.js for web application development.
Talk video: https://www.youtube.com/watch?v=qf8wOc2YHmQ&feature=youtu.be
Documentation: https://wvlet.org/airframe/docs/airframe-rpc
Demo source code: https://github.com/wvlet/airframe/tree/master/examples/rpc-examples
Abstract Factory pattern application on multi-contract on-chain deploymentsDejan Radic
Blockchain is a new technology having many glitches and limitations. Ethereum being the most popular smart contract platform has inherent limitations regarding block gas limit where sum of all block’s transactions gas limits can’t go over certain level. There are many use-cases where some contracts can be deployed directly on-chain (from another contract), because they have wide usage (for example ERC20 Token contracts).
If there are many variations of those contracts that can be deployed directly on-chain, deploying them from single contract is problematic since those variations cost gas, and it’s easy to exceed block gas limit. That’s where Abstract Factory pattern and separation of concerns comes in use.
OSDC 2015: Dr. Udo Seidel | Developing Applications for the New Cloud Operati...NETWAYS
Along with many other things the cloud has triggered the creation of new opensource operating systems. Some of them are still a kind of a Linux. Others have broken with many traditions in order to be the best O/S for the cloud. Even the more Linux-like ones require a change of thinking regarding setup and management. This has a knock-on effect on how to develop applications which should run on these new operating systems. Using CoreOS, OSv and MirageOS this talk will describe the design and architecture of the newcomers in the cloud O/S family. This is followed by the changes needed on the application development side. The selected examples represent the broad spectrum from 'almost no code changes needed' to 'rewrite from scratch'.
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020Taro L. Saito
Scala is a powerful language; You can build front-end applications with Scala.js, and efficient backend application servers for JVM. In this session, we will learn how to build everything with Scala by using Airframe OSS framework.
Airframe is a library designed for maximizing the advantages of Scala as a hybrid of object-oriented and functional programming language. In this session, we will learn how to use Airframe to build REST APIs and RPC (with Finagle or gRPC) services, and how to create frontend applications in Scala.js that interact with the servers using functional interfaces for dynamically updating web pages.
New Indexing and Aggregation Pipeline Capabilities in MongoDB 4.2Antonios Giannopoulos
MongoDB 4.2 comes GA soon delivering some amazing new features on multiple areas. In this talk, we will focus on the new capabilities of the aggregation framework. We are going to cover the new operators and expressions. At the same time, we will explore how updates commands can now use the aggregation framework operators. We are also going to present aggregation framework improvements focusing on the on-demand materialized views. Finally, we are going to explore the wildcard indexes introduced in MongoDB 4.2 and how they change the way we design documents and build queries/aggregations. We will also make a reference to the new index build system.
- What's new in .NET Platform
- What's new in Visual Studio 2017
- What's new in C# 7.0: out variables, Tuples, Pattern Maching, ref locals and returns, Local Functions, More expression-bodied members, throw Expressions, Generalized async return types, Numeric literal syntax improvements
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...Stefan Marr
Metaobject Protocols and Type Checks, do they have much in common?
Perhaps not from a language perspective. However, under the hood of a modern virtual machine, they turn out to show very similar behavior and can be optimized very similarly.
This talk will go back to the days of Terminator 2, The Naked Gun 2 1/2, and Star Trek VI. We will revisit the early days of just-in-time compilation, the basic insights that are still true, and see how to apply them to metaprogramming techniques of different shapes and forms.
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020Taro L. Saito
Scala is a powerful language; You can build front-end applications with Scala.js, and efficient backend application servers for JVM. In this session, we will learn how to build everything with Scala by using Airframe OSS framework.
Airframe is a library designed for maximizing the advantages of Scala as a hybrid of object-oriented and functional programming language. In this session, we will learn how to use Airframe to build REST APIs and RPC (with Finagle or gRPC) services, and how to create frontend applications in Scala.js that interact with the servers using functional interfaces for dynamically updating web pages.
New Indexing and Aggregation Pipeline Capabilities in MongoDB 4.2Antonios Giannopoulos
MongoDB 4.2 comes GA soon delivering some amazing new features on multiple areas. In this talk, we will focus on the new capabilities of the aggregation framework. We are going to cover the new operators and expressions. At the same time, we will explore how updates commands can now use the aggregation framework operators. We are also going to present aggregation framework improvements focusing on the on-demand materialized views. Finally, we are going to explore the wildcard indexes introduced in MongoDB 4.2 and how they change the way we design documents and build queries/aggregations. We will also make a reference to the new index build system.
- What's new in .NET Platform
- What's new in Visual Studio 2017
- What's new in C# 7.0: out variables, Tuples, Pattern Maching, ref locals and returns, Local Functions, More expression-bodied members, throw Expressions, Generalized async return types, Numeric literal syntax improvements
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...Stefan Marr
Metaobject Protocols and Type Checks, do they have much in common?
Perhaps not from a language perspective. However, under the hood of a modern virtual machine, they turn out to show very similar behavior and can be optimized very similarly.
This talk will go back to the days of Terminator 2, The Naked Gun 2 1/2, and Star Trek VI. We will revisit the early days of just-in-time compilation, the basic insights that are still true, and see how to apply them to metaprogramming techniques of different shapes and forms.
Speaker session taken by Mr. Adit Lal who is GDE Android and Individual Consultant. It was all about jetpack compose along with some hands-on application.
Advance Map reduce - Apache hadoop Bigdata training by Design PathshalaDesing Pathshala
Learn Hadoop and Bigdata Analytics, Join Design Pathshala training programs on Big data and analytics.
This slide covers the Advance Map reduce concepts of Hadoop and Big Data.
For training queries you can contact us:
Email: admin@designpathshala.com
Call us at: +91 98 188 23045
Visit us at: http://designpathshala.com
Join us at: http://www.designpathshala.com/contact-us
Course details: http://www.designpathshala.com/course/view/65536
Big data Analytics Course details: http://www.designpathshala.com/course/view/1441792
Business Analytics Course details: http://www.designpathshala.com/course/view/196608
While CMake has become the de-facto standard buildsystem for C++, it's siblings CTest and CPack are less well known. This talk gives a lightspeed introduction into these three tools and then focuses on best practices on building, testing, and packaging.
Modern design is crucial in today's digital environment, and this is especially true for SharePoint intranets. The design of these digital hubs is critical to user engagement and productivity enhancement. They are the cornerstone of internal collaboration and interaction within enterprises.
Into the Box Keynote Day 2: Unveiling amazing updates and announcements for modern CFML developers! Get ready for exciting releases and updates on Ortus tools and products. Stay tuned for cutting-edge innovations designed to boost your productivity.
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?XfilesPro
Worried about document security while sharing them in Salesforce? Fret no more! Here are the top-notch security standards XfilesPro upholds to ensure strong security for your Salesforce documents while sharing with internal or external people.
To learn more, read the blog: https://www.xfilespro.com/how-does-xfilespro-make-document-sharing-secure-and-seamless-in-salesforce/
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...informapgpstrackings
Keep tabs on your field staff effortlessly with Informap Technology Centre LLC. Real-time tracking, task assignment, and smart features for efficient management. Request a live demo today!
For more details, visit us : https://informapuae.com/field-staff-tracking/
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
Developing Distributed High-performance Computing Capabilities of an Open Sci...Globus
COVID-19 had an unprecedented impact on scientific collaboration. The pandemic and its broad response from the scientific community has forged new relationships among public health practitioners, mathematical modelers, and scientific computing specialists, while revealing critical gaps in exploiting advanced computing systems to support urgent decision making. Informed by our team’s work in applying high-performance computing in support of public health decision makers during the COVID-19 pandemic, we present how Globus technologies are enabling the development of an open science platform for robust epidemic analysis, with the goal of collaborative, secure, distributed, on-demand, and fast time-to-solution analyses to support public health.
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns
Unlocking Business Potential: Tailored Technology Solutions by Prosigns
Discover how Prosigns, a leading technology solutions provider, partners with businesses to drive innovation and success. Our presentation showcases our comprehensive range of services, including custom software development, web and mobile app development, AI & ML solutions, blockchain integration, DevOps services, and Microsoft Dynamics 365 support.
Custom Software Development: Prosigns specializes in creating bespoke software solutions that cater to your unique business needs. Our team of experts works closely with you to understand your requirements and deliver tailor-made software that enhances efficiency and drives growth.
Web and Mobile App Development: From responsive websites to intuitive mobile applications, Prosigns develops cutting-edge solutions that engage users and deliver seamless experiences across devices.
AI & ML Solutions: Harnessing the power of Artificial Intelligence and Machine Learning, Prosigns provides smart solutions that automate processes, provide valuable insights, and drive informed decision-making.
Blockchain Integration: Prosigns offers comprehensive blockchain solutions, including development, integration, and consulting services, enabling businesses to leverage blockchain technology for enhanced security, transparency, and efficiency.
DevOps Services: Prosigns' DevOps services streamline development and operations processes, ensuring faster and more reliable software delivery through automation and continuous integration.
Microsoft Dynamics 365 Support: Prosigns provides comprehensive support and maintenance services for Microsoft Dynamics 365, ensuring your system is always up-to-date, secure, and running smoothly.
Learn how our collaborative approach and dedication to excellence help businesses achieve their goals and stay ahead in today's digital landscape. From concept to deployment, Prosigns is your trusted partner for transforming ideas into reality and unlocking the full potential of your business.
Join us on a journey of innovation and growth. Let's partner for success with Prosigns.
Your Digital Assistant.
Making complex approach simple. Straightforward process saves time. No more waiting to connect with people that matter to you. Safety first is not a cliché - Securely protect information in cloud storage to prevent any third party from accessing data.
Would you rather make your visitors feel burdened by making them wait? Or choose VizMan for a stress-free experience? VizMan is an automated visitor management system that works for any industries not limited to factories, societies, government institutes, and warehouses. A new age contactless way of logging information of visitors, employees, packages, and vehicles. VizMan is a digital logbook so it deters unnecessary use of paper or space since there is no requirement of bundles of registers that is left to collect dust in a corner of a room. Visitor’s essential details, helps in scheduling meetings for visitors and employees, and assists in supervising the attendance of the employees. With VizMan, visitors don’t need to wait for hours in long queues. VizMan handles visitors with the value they deserve because we know time is important to you.
Feasible Features
One Subscription, Four Modules – Admin, Employee, Receptionist, and Gatekeeper ensures confidentiality and prevents data from being manipulated
User Friendly – can be easily used on Android, iOS, and Web Interface
Multiple Accessibility – Log in through any device from any place at any time
One app for all industries – a Visitor Management System that works for any organisation.
Stress-free Sign-up
Visitor is registered and checked-in by the Receptionist
Host gets a notification, where they opt to Approve the meeting
Host notifies the Receptionist of the end of the meeting
Visitor is checked-out by the Receptionist
Host enters notes and remarks of the meeting
Customizable Components
Scheduling Meetings – Host can invite visitors for meetings and also approve, reject and reschedule meetings
Single/Bulk invites – Invitations can be sent individually to a visitor or collectively to many visitors
VIP Visitors – Additional security of data for VIP visitors to avoid misuse of information
Courier Management – Keeps a check on deliveries like commodities being delivered in and out of establishments
Alerts & Notifications – Get notified on SMS, email, and application
Parking Management – Manage availability of parking space
Individual log-in – Every user has their own log-in id
Visitor/Meeting Analytics – Evaluate notes and remarks of the meeting stored in the system
Visitor Management System is a secure and user friendly database manager that records, filters, tracks the visitors to your organization.
"Secure Your Premises with VizMan (VMS) – Get It Now"
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
top nidhi software solution freedownloadvrstrong314
This presentation emphasizes the importance of data security and legal compliance for Nidhi companies in India. It highlights how online Nidhi software solutions, like Vector Nidhi Software, offer advanced features tailored to these needs. Key aspects include encryption, access controls, and audit trails to ensure data security. The software complies with regulatory guidelines from the MCA and RBI and adheres to Nidhi Rules, 2014. With customizable, user-friendly interfaces and real-time features, these Nidhi software solutions enhance efficiency, support growth, and provide exceptional member services. The presentation concludes with contact information for further inquiries.
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Globus
Large Language Models (LLMs) are currently the center of attention in the tech world, particularly for their potential to advance research. In this presentation, we'll explore a straightforward and effective method for quickly initiating inference runs on supercomputers using the vLLM tool with Globus Compute, specifically on the Polaris system at ALCF. We'll begin by briefly discussing the popularity and applications of LLMs in various fields. Following this, we will introduce the vLLM tool, and explain how it integrates with Globus Compute to efficiently manage LLM operations on Polaris. Attendees will learn the practical aspects of setting up and remotely triggering LLMs from local machines, focusing on ease of use and efficiency. This talk is ideal for researchers and practitioners looking to leverage the power of LLMs in their work, offering a clear guide to harnessing supercomputing resources for quick and effective LLM inference.
Software Engineering, Software Consulting, Tech Lead.
Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Security,
Spring Transaction, Spring MVC,
Log4j, REST/SOAP WEB-SERVICES.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
Strategies for Successful Data Migration Tools.pptxvarshanayak241
Data migration is a complex but essential task for organizations aiming to modernize their IT infrastructure and leverage new technologies. By understanding common challenges and implementing these strategies, businesses can achieve a successful migration with minimal disruption. Data Migration Tool like Ask On Data play a pivotal role in this journey, offering features that streamline the process, ensure data integrity, and maintain security. With the right approach and tools, organizations can turn the challenge of data migration into an opportunity for growth and innovation.
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Hivelance Technology
Cryptocurrency trading bots are computer programs designed to automate buying, selling, and managing cryptocurrency transactions. These bots utilize advanced algorithms and machine learning techniques to analyze market data, identify trading opportunities, and execute trades on behalf of their users. By automating the decision-making process, crypto trading bots can react to market changes faster than human traders
Hivelance, a leading provider of cryptocurrency trading bot development services, stands out as the premier choice for crypto traders and developers. Hivelance boasts a team of seasoned cryptocurrency experts and software engineers who deeply understand the crypto market and the latest trends in automated trading, Hivelance leverages the latest technologies and tools in the industry, including advanced AI and machine learning algorithms, to create highly efficient and adaptable crypto trading bots
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
Enhancing Research Orchestration Capabilities at ORNL.pdf
EclipseCon France 2017 - Xtending Our Vhdl Xtext Formatter With The Formatter2 API
1. redefine.digital.design: Helping you deal with complexity in VHDL and Verilog.
Xtending our VHDL Xtext
formatter with the formatter2 API
ir. Titouan Vervack
EclipseCon France
2017-06-21
2. redefine.digital.design: Helping you deal with complexity in VHDL and Verilog.
Xtending our VHDL Xtext
formatter with the formatter2 API
ir. Titouan Vervack
EclipseCon France, Toulouse
2017-06-21
15. Our formatter problems
● Big grammar
○ ~1.2k LoC
○ ~200 rules
● Hard to fix bugs
● Near impossible to add new features
10
16. Formatter 1.0 vs Formatter 2.0
11
Formatter 1.0 Formatter 2.0
● No access to
○ Node model
○ AST
○ Text
● => Specify everything purely on the grammar
● => Lots of hacks
● Access to
○ Node model
○ AST
○ Grammar
● Can’t take context into account
○ Can’t adjust to the user
● Context aware formatting
○ Conditional formatting
○ Table formatting
● Not customizable ● Very customizable
17. Formatter 2.0 region example
variable _ foo _ : _ bit _ ; _-- barn
variable foo : bit; -- bar
= ISemanticRegion
= IHiddenRegion
_ -- bar n
= IHiddenRegionPart
12
https://de.slideshare.net/meysholdt/xtexts-new-formatter-api
18. Formatting 2.0 usage example
https://de.slideshare.net/meysholdt/xtexts-new-formatter-api
13
19. Formatting 2.0 usage example
https://de.slideshare.net/meysholdt/xtexts-new-formatter-api
class AwesomO4000 extends AbstractFormatter2 {
}
13
28. Time for a plan
1. Make tests compatible
2. Start out easy: only indentation
14
29. Time for a plan
1. Make tests compatible
2. Start out easy: only indentation
3. Fix tests one by one
14
30. Time for a plan
1. Make tests compatible
2. Start out easy: only indentation
3. Fix tests one by one
4. Fix old bugs
14
31. Time for a plan
1. Make tests compatible
2. Start out easy: only indentation
3. Fix tests one by one
4. Fix old bugs
5. Do not introduce new bugs
14
32. Time for a plan
1. Make tests compatible
2. Start out easy: only indentation
3. Fix tests one by one
4. Fix old bugs
5. Do not introduce new bugs
6. Feature parity & extend with new features
14
33. Time for a plan
1. Make tests compatible
2. Start out easy: only indentation
3. Fix tests one by one
4. Fix old bugs
5. Do not introduce new bugs
6. Feature parity & extend with new features
7. Performance tweaking to same or better level than old
14
36. Actual timeline
formatter.format(node, node.offset, node.length).formattedText
1. Make tests compatible
val request = new FormatterRequest()
val parsed = new XtextResource()
parsed.contents.add(parseResult.rootASTElement)
parsed.setParseResult(parseResult)
val access = builder.forNodeModel(resource).create()
request.setTextRegionAccess(access)
val replacements = formatter.format(request)
access.rewriter.renderToString(replacements)
15
47. Actual timeline
6. Feature parity & extend formatter with new features
● Parity:
○ Keyword casing
○ Comment alignment to columns
19
48. Actual timeline
6. Feature parity & extend formatter with new features
● Parity:
○ Keyword casing
○ Comment alignment to columns
○ Vertical alignment on keywords “:”, “:=”,...
19
49. Actual timeline
6. Feature parity & extend formatter with new features
● Parity:
○ Keyword casing
○ Comment alignment to columns
○ Vertical alignment on keywords “:”, “:=”,...
○ Preserve newline
19
50. Actual timeline
6. Feature parity & extend formatter with new features
● Parity:
○ Keyword casing
○ Comment alignment to columns
○ Vertical alignment on keywords “:”, “:=”,...
○ Preserve newline
● New features:
19
51. Actual timeline
6. Feature parity & extend formatter with new features
● Parity:
○ Keyword casing
○ Comment alignment to columns
○ Vertical alignment on keywords “:”, “:=”,...
○ Preserve newline
● New features:
○ Correct indentation
19
52. Actual timeline
6. Feature parity & extend formatter with new features
● Parity:
○ Keyword casing
○ Comment alignment to columns
○ Vertical alignment on keywords “:”, “:=”,...
○ Preserve newline
● New features:
○ Correct indentation
○ Formatter tags
19
53. Actual timeline
6. Feature parity & extend formatter with new features
● Parity:
○ Keyword casing
○ Comment alignment to columns
○ Vertical alignment on keywords “:”, “:=”,...
○ Preserve newline
● New features:
○ Correct indentation
○ Formatter tags
Easy once we have alignment
19
57. Alignment?
● Replacements are added in random order, applied in correct order
● Alignment needs to be done on post-formatted input
21
58. Alignment?
● Replacements are added in random order, applied in correct order
● Alignment needs to be done on post-formatted input
● How do I know which region to format?
21
69. PortDeclaration
Alignment!
clk : in std_logic := ‘X’;
start end
name direction type value
end.getSemanticElement()
PortDeclaration
PortList
23
70. PortDeclaration
Alignment!
clk : in std_logic := ‘X’;
start end
name direction type value
offset x
x + 4
end.getSemanticElement()
PortDeclaration
PortList
23
71. val rule = portDecl.getParserRule()
val oldAccess = createTextRegionAccess(rule, portDecl.text)
val formatted = portDecl.format()
Alignment!
Format smallest encapsulating object
24
72. val rule = portDecl.getParserRule()
val oldAccess = createTextRegionAccess(rule, portDecl.text)
val formatted = portDecl.format()
Alignment!
val newAccess = createTextRegionAccess(rule, formatted.text)
val oldIndices = oldAccess.getIndices(start, end)
val length = newAccess.countBetween(oldIndices)
Format smallest encapsulating object
Map unformatted string to formatted string
24
73. Align on first parameter?
→return (
→→foo((5,
→→·····6),
→→····3));
25
74. Align on first parameter?
→return (
→→foo((5,
→→·····6),
→→····3));
25
75. Align on first parameter?
→return (
→→foo((5,
→→·····6),
→→····3));
→return (5,
→········foo((5,
→·············6),
→············3));
25
76. Align on first parameter?
→return (
→→foo((5,
→→·····6),
→→····3));
→return (5,
→········foo((5,
→·············6),
→············3));
25
77. Align on first parameter?
→return (
→→foo((5,
→→·····6),
→→····3));
→return (5,
→········foo((5,
→·············6),
→············3));
→return foo((5,
→············6),
→···········3));
25
78. Align on first parameter?
→return (
→→foo((5,
→→·····6),
→→····3));
→return (5,
→········foo((5,
→·············6),
→············3));
→return foo((5,
→············6),
→···········3));
25
81. Align on first parameter?
→return (
→→foo((5,
→→·····6),
→→····3));
→return (5,
→········foo((5,
→·············6),
→············3));
→return foo((5,
→············6),
→···········3));
→return foo(
→→(5,
→→·6),
→→3));
Find largest encapsulating element on same line
25
83. Actual timeline
6. Feature parity & extend formatter with new features
Correct indentation
val replacements = formatter.format(request)
26
84. Actual timeline
6. Feature parity & extend formatter with new features
Correct indentation
val replacements = formatter.format(request)
replacements
.filter[ r|
]
26
85. Actual timeline
6. Feature parity & extend formatter with new features
Correct indentation
val replacements = formatter.format(request)
replacements
.filter[ r|
r.lineCount > 1
]
26
86. Actual timeline
6. Feature parity & extend formatter with new features
Correct indentation
val replacements = formatter.format(request)
replacements
.filter[ r|
r.lineCount > 1 &&
r.replacementText.newlines + 1 == r.lineCount
]
26
88. Actual timeline
6. Feature parity & extend formatter with new features
Formatter tags
-- @formatter:off Turns formatter off
-- @formatter:on Turns formatter on
27
89. Actual timeline
6. Feature parity & extend formatter with new features
Formatter tags
-- @formatter:off Turns formatter off
-- @formatter:on Turns formatter on
val originalRegions = request.getRegions() ?: document.region
27
90. Actual timeline
6. Feature parity & extend formatter with new features
Formatter tags
-- @formatter:off Turns formatter off
-- @formatter:on Turns formatter on
val originalRegions = request.getRegions() ?: document.region
val betweenRegions = document.findRegionsBetween(off, on)
27
91. Actual timeline
6. Feature parity & extend formatter with new features
Formatter tags
-- @formatter:off Turns formatter off
-- @formatter:on Turns formatter on
val originalRegions = request.getRegions() ?: document.region
val betweenRegions = document.findRegionsBetween(off, on)
.addAll(document.findRegionsBetween(off, EOF))
27
92. Actual timeline
6. Feature parity & extend formatter with new features
Formatter tags
-- @formatter:off Turns formatter off
-- @formatter:on Turns formatter on
val originalRegions = request.getRegions() ?: document.region
val betweenRegions = document.findRegionsBetween(off, on)
.addAll(document.findRegionsBetween(off, EOF))
val newRegions = originalRegions.removeRegions(betweenRegions)
27
93. Actual timeline
6. Feature parity & extend formatter with new features
Formatter tags
-- @formatter:off Turns formatter off
-- @formatter:on Turns formatter on
val originalRegions = request.getRegions() ?: document.region
val betweenRegions = document.findRegionsBetween(off, on)
.addAll(document.findRegionsBetween(off, EOF))
val newRegions = originalRegions.removeRegions(betweenRegions)
request.setRegions(newRegions)
27
96. Performance
7. Performance tweaking to same or better level than old
● Cache ITextRegionAccess in subformats
● Cache IParser.createAllRules(Grammar)
28
97. Performance
7. Performance tweaking to same or better level than old
● Cache ITextRegionAccess in subformats
● Cache IParser.createAllRules(Grammar)
● Merge all replacements into one big replacement
28
102. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
31
103. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
● Comments are an enormous pain: eat newlines, add spaces, eat
spaces, fake empty lines
31
104. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
● Comments are an enormous pain: eat newlines, add spaces, eat
spaces, fake empty lines
● Alignment interactions with normal and first param alignments and
comments
31
105. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
● Comments are an enormous pain: eat newlines, add spaces, eat
spaces, fake empty lines
● Alignment interactions with normal and first param alignments and
comments
31
106. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
● Comments are an enormous pain: eat newlines, add spaces, eat
spaces, fake empty lines
● Alignment interactions with normal and first param alignments and
comments
31
107. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
● Comments are an enormous pain: eat newlines, add spaces, eat
spaces, fake empty lines
● Alignment interactions with normal and first param alignments and
comments
31
108. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
● Comments are an enormous pain: eat newlines, add spaces, eat
spaces, fake empty lines
● Alignment interactions with normal and first param alignments and
comments
3031
109. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
● Comments are an enormous pain: eat newlines, add spaces, eat
spaces, fake empty lines
● Alignment interactions with normal and first param alignments and
comments
3031
110. Biggest problems in hindsight
● Tests pass, close enough?
○ Nope, old testset isn’t nearly enough
● Comments are an enormous pain: eat newlines, add spaces, eat
spaces, fake empty lines
● Alignment interactions with normal and first param alignments and
comments
3031
111. Warning to Xtext users
Default ExceptionHandler logs DSL source code to stderr
32
122. Xtext wish list
● Accept my PRs (tags, correct indent, performance)
34
123. Xtext wish list
● Accept my PRs (tags, correct indent, performance)
● Fix/discuss my issues
34
124. Xtext wish list
● Accept my PRs (tags, correct indent, performance)
● Fix/discuss my issues
● Fix Xtend formatter issues
34
125. Xtext wish list
● Accept my PRs (tags, correct indent, performance)
● Fix/discuss my issues
● Fix Xtend formatter issues
● Very slow Xtend formatter source file
34
126. Xtext wish list
● Accept my PRs (tags, correct indent, performance)
● Fix/discuss my issues
● Fix Xtend formatter issues
● Very slow Xtend formatter source file
● Add pre- and post format hooks in format(FormatterRequest)
34
133. Conclusion
● Context aware
● Debugable
● Good performance
● Very customizable
● User friendly
○ Done in 2 months (base in 2 weeks) while first task and not used to Xtend
35
134. Conclusion
● Context aware
● Debugable
● Good performance
● Very customizable
● User friendly
○ Done in 2 months (base in 2 weeks) while first task and not used to Xtend
● Happy with the switch
35
135. Conclusion
● Context aware
● Debugable
● Good performance
● Very customizable
● User friendly
○ Done in 2 months (base in 2 weeks) while first task and not used to Xtend
● Happy with the switch
○ New features
35
136. Conclusion
● Context aware
● Debugable
● Good performance
● Very customizable
● User friendly
○ Done in 2 months (base in 2 weeks) while first task and not used to Xtend
● Happy with the switch
○ New features
○ Very readable
35
137. Conclusion
● Context aware
● Debugable
● Good performance
● Very customizable
● User friendly
○ Done in 2 months (base in 2 weeks) while first task and not used to Xtend
● Happy with the switch
○ New features
○ Very readable
○ Conditional formatting
35