KeenType
async-profiler
KeenType | async-profiler | |
---|---|---|
13 | 10 | |
104 | 7,126 | |
- | 1.2% | |
10.0 | 8.7 | |
8 months ago | 3 days ago | |
Java | C++ | |
GNU General Public License v3.0 or later | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
KeenType
-
LaTeX3: Programming in LaTeX with Ease
> modern languages like Markdown
Markdown was created in 2004. From the creator:
> ... the single biggest source of inspiration for Markdown’s syntax is the format of plain text email.
Email goes back to 1965, though I suspect Markdown's influence stems from the more widely adopted email usage from the 1990s.
> Part of LaTeX's success was the absolutely beautiful documents it can make with nothing but a personal computer.
I'd say that was TeX's success, with LaTeX bolted on later to greatly improve TeX's extensibility. Keep in mind, there are a number of TeX-centric implementations beyond LaTeX. For example, my fork of NTS, called KeenType, is a pure Java version of TeX that can typeset beautifully and has at its core Knuth's original TeX files.
https://github.com/DaveJarvis/KeenType/tree/main/tex/src/mai...
-
Expanding TeX's \Newif (2021)
My port of the New Typesetting System (NTS), called KeenType, whittles down the Java-based implementation to a few of Knuth's files. Namely, "plain.tex" and "hyphen.tex":
https://github.com/DaveJarvis/KeenType/tree/main/tex/src/mai...
Getting familiar with the fonts required understanding the difference between font metrics (TFM files) and the fonts themselves. To make matters a little less straightforward, Knuth created a special character mapping for indexes into the fonts. It was not easy to find a font that mapped those glyphs exactly. The closest font was BaKoMa:
https://github.com/DaveJarvis/KeenType/tree/main/tex/src/mai...
This required hard-coding a mapping between Knuth's code points and the actual code points in the target font:
https://github.com/DaveJarvis/KeenType/blob/989dbe26f68eda75...
-
The fastest math typesetting library for the web
A while ago I optimized KeenType, which although not JavaScript-based, generates SVG images, which can be embedded into web pages.
https://github.com/DaveJarvis/keentype
The following tutorial shows the real-time rendering speed of KeenType within my text editor, KeenWrite:
https://youtu.be/vgyYXwwF_lc?list=PLB-WIt1cZYLm1MMx2FBG9KWzP...
- Reducing code size in (Rust) librsvg by removing an unnecessary generic struct
- KeenType: Pure Java typesetting system
-
Different algorithms for converting binary to decimal floating-point numbers
In Java, many number-to-string implementations use NumberFormat. This is abysmally slow if the problem domain doesn't require internationalization, which is the case for machine-readable file formats, such as SVG. When I performance tested JMathTeX for rendering TeX, the bottleneck for converting TeX into SVG elements was JFreeSVG's use of NumberFormat[0]. Replacing NumberFormat with RyuDouble doubled the throughput[1]. (Reusing a StringBuilder for to concatenate strings yielded another doubling.)
For KeenType[2], a fork of the New Typesetting System (and more complete TeX implementation than JMathTeX), I added an SVG generator that converts numbers to string using a StackOverflow answer[3], instead of using Ryu[4]. The performance was even better and the algorithm vastly simpler.
Knuth was right: measure, then optimize.
[0]: https://github.com/jfree/jfreesvg
[1]: https://github.com/jfree/jfreesvg/pull/30
[2]: https://github.com/DaveJarvis/KeenType
[3]: https://stackoverflow.com/a/10554128/59087
[4]: https://github.com/DaveJarvis/KeenType/blob/fef005579021f394...
-
KeenWrite 3.2.0
KeenType, a modernized and optimized NTS fork, replaces KeenTeX.
async-profiler
-
JVM Profiling in Action
We'll use async-profiler and flame graphs for profiling. To simplify the process, we'll run the code using JBang.
-
The Return of the Frame Pointers
JIT'ed code is sadly poorly supported, but LLVM has had great hooks for noting each method that is produced and its address. So you can build a simple mixed-mode unwinder, pretty easily, but mostly in process.
I think Intel's DNN things dump their info out to some common file that perf can read instead, but because the *kernels* themselves reuse rbp throughout oneDNN, it's totally useless.
Finally, can any JVM folks explain this claim about DWARF info from the article:
> Doesn't exist for JIT'd runtimes like the Java JVM
that just sounds surprising to me. Is it off by default or literally not available? (Google searches have mostly pointed to people wanting to include the JNI/C side of a JVM stack, like https://github.com/async-profiler/async-profiler/issues/215).
- FLaNK Stack 29 Jan 2024
-
Tracking Java Native Memory with JDK Flight Recorder
debugging native calls in itself is also painful. I have switched to using async-profiler (https://github.com/async-profiler/async-profiler) instead of JFR for most of my usecases.
A. it tracks native calls by default
-
Show HN: Javaflame – Simple Flamegraph for your Java application
https://github.com/async-profiler/async-profiler#flame-graph...
Ok, Windows is not supported. But IntelliJ made a fork which works on Windows.
-
Lettuce (Redis) + Mybatis (MySQL) take up most of the CPU in production - Is it normal? Did you observe that in your environment? Any ways to optimize it?
Hi, today I used async-profiler to check the CPU usage of my Spring Boot app (just a normal backend) in production. Surprisingly, Lettuce (Redis) + Mybatis (MySQL) take up most of the CPU time. I am not talking about wall time here, but CPU time, since I know database requests need to wait for milliseconds and thus wall time will be very long. Therefore, I wonder:
-
A question about Http4s new major version
You can use async-profiler to see what is happening under the hood.
- Reducing code size in (Rust) librsvg by removing an unnecessary generic struct
-
what is your favorite programming trick/tool that not many People know about?
I have used visual vm quite a bit. https://github.com/async-profiler/async-profiler is also amazing... Throw the binary on the system and fire it up. It also profiles down into native code as well if you do that kind of thing.
What are some alternatives?
Sentinel - A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)
jmh - https://openjdk.org/projects/code-tools/jmh
asciimathml - A new home for asciimathml
container-jfr - Secure JDK Flight Recorder management for containerized JVMs
awesome-typst - Awesome Typst Links
jfr-libraries - a list of libraries that generate JFR events
latex-snippets - Vim + LaTeX snippets setup
Arthas - Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas
KmCaster - Capture keyboard and mouse events for screencasting
opentelemetry-java-instrumentation - OpenTelemetry auto-instrumentation and instrumentation libraries for Java
jfreesvg - A fast, lightweight Java library for creating Scalable Vector Graphics (SVG) output.
junit-jfr - a JUnit 5 extension that generates JFR events