[Chart] Fwd: Fwd: [diagrams] Re: [GSoC 2013] Progress - Porting Charts to Diagrams

Brent Yorgey byorgey at seas.upenn.edu
Tue Aug 20 01:18:00 BST 2013


On Mon, Aug 19, 2013 at 03:58:12PM +0200, Jan Bracker wrote:
> Hello everybody,
> 
> last week I:
> 
> - Fixed some bugs in SVGFonts.
> - Added a interface to preload customs fonts in the diagrams backend.
> - Fixed a bug with filling multiple sub trails in the diagrams backend.
> - I worked on fixing the bug of charts being rendered upside down in SVGs
> when using diagrams-svg. I got a solution for this but it seems like a hack
> and I would like to discuss this [0].
> - I added nice utilities to render SVG and EPS files directly using the
> diagrams backend. This pulls in some other dependencies but as it is the
> major use case you would want them anyway.
> 
> I did not really work on the font converter to much. Instead I started
> profiling the tests to see where the application spends most of its time.
> According to the profiling information when running the DiagramsCairo.hs
> [1] test about 45% of the computation time is spent inside the textSVG' /
> makeString function [2]. When trying to analyse the sub expressions I found
> out that 90% of that time is spent inside the call to scaleY. I am not sure
> where to go from here, because it seems like most of the computation is due
> to diagrams arithmetic. Only 10% of the time is spent with actual rendering
> and 15% with extracting the characters from the string.

Very interesting.  I profiled another large example during Hac Phi and
found that a lot of time was being spent in rotateBy.  So it seems
that perhaps Transformations are somehow implicated in performance
issues.  The way we represent Transformations certainly carries some
overhead.  I am not sure how to go about optimizing things.  Any
suggestions or help are most welcome.

-Brent

> 
> Greets
> Jan
> 
> [0]:
> https://groups.google.com/d/topic/diagrams-discuss/C2_0CFQNd80/discussion
> [1]:
> https://github.com/timbod7/haskell-chart/blob/master/chart-tests/tests/DiagramsCairo.hs
> [2]:
> https://github.com/diagrams/SVGFonts/blob/master/src/Graphics/SVGFonts/ReadFont.hs#L68
> 
> 
> 2013/8/12 Jan Bracker <jan.bracker at googlemail.com>
> 
> > Hello everybody,
> >
> > I spent last week working on the SVG font to Haskell code converter. I got
> > a running version here [0]. It's in the "font-converter" directory. While
> > writing and testing it I ran into a few problems:
> >
> > When I output all data into one single big file it does not compile
> > (actually it does seem to compile but after 25 minutes I gave up on letting
> > it finish). So I now divide the data into several modules. After doing so
> > everything compiled, but each of the modules containing the outlines took
> > about 1 to 2 minutes to compile although each only contained about 30
> > glyphs. For small fonts this was bearable but unpleasant, when converting
> > Linux Libertine I would have spent 2 hours compiling it. So right now I do
> > not hard code the glyphs paths into code anymore and instead added code to
> > generate the outline from the string encoded paths during run time. I am
> > not sure if this still solves the performance problems we have when
> > rendering. I am going to check on that soon. If this does not help with the
> > performance problem I would try to rewrite the path parser using attoparsec
> > or similar libraries.
> >
> > Besides this compilation and performance issue, we can now include fonts
> > that do not need IO to load.
> >
> > Greets
> > Jan
> >
> > [0]: https://github.com/jbracker/SVGFonts/tree/font-converter
> >
> >
> > 2013/8/5 Jan Bracker <jan.bracker at googlemail.com>
> >
> >> Hello everybody,
> >>
> >> this weeks changes are not to many. I only fixed the last bug on my list.
> >> It was caused by not correctly setting the line, fill and font style to
> >> their default value before starting to render in the backend. This is fixed
> >> now and both backends work well. There are some minor rendering differences
> >> which appeared after merging with the new lens code. I have no idea why
> >> they appear, but again they are not visible with the naked eye. You can
> >> find the latest code here [0].
> >>
> >> The further plan: Speed is an issue when using SVGFonts to render text.
> >> That is why we are planning to write a translator that creates Haskell
> >> source from an SVG font file. This way things should speed up, because the
> >> font does not have to be read during runtime anymore and we also hope the
> >> constant expression optimizations of the compiler also lead to speedups.
> >> Besides speed this also solves the other problem of hidden IO in SVGFonts,
> >> it will allow pure access to the included fonts.
> >> I searched through Hackage to find Haskell source generators and my only
> >> hits were template Haskell, haskell-src [1] and haskell-src-exts [2]. I
> >> think I will use haskell-src-exts, since it is more up to date then
> >> haskell-src and I do not see the necessity for this utility to depend on
> >> something as complex as template Haskell.
> >>
> >> Greets
> >> Jan
> >>
> >> [0]:
> >> https://github.com/jbracker/haskell-chart/tree/9d5cc6c1c4c7e8d86273bd0e1010daa00248db09
> >> [1]: http://hackage.haskell.org/package/haskell-src
> >> [2]: http://hackage.haskell.org/package/haskell-src-exts
> >>
> >>
> >> 2013/8/1 Tim Docker <tim at dockerz.net>
> >>
> >>> My week is not turning out very well :-(
> >>>
> >>> I will be a bit late tonight. I'm sure you can continue without me.
> >>>
> >>> Sorry!
> >>> On 31 Jul 2013 21:45, "Brent Yorgey" <byorgey at seas.upenn.edu> wrote:
> >>>
> >>>> Yes, I've been quite impressed with Jan's progress and am excited to
> >>>> try it out!  I will indeed be available then and would be happy to
> >>>> discuss text handling. I will have to leave at 12:00UTC but that
> >>>> should give us plenty of time for discussion.
> >>>>
> >>>> -Brent
> >>>>
> >>>> On Wed, Jul 31, 2013 at 07:16:37AM +1000, Tim Docker wrote:
> >>>> > Hi Brent,
> >>>> >
> >>>> > Jan has made great progress, and has charts more or less up and
> >>>> > running atop diagrams (see below).
> >>>> >
> >>>> > Currently the text handling is done outside the diagrams libs, just
> >>>> > rendering the paths. It would be good if we could discuss with you
> >>>> > potential approaches for improving the diagrams native text support.
> >>>> >
> >>>> > Is there any chance you may be around on IRC at 11:00UTC on thursday?
> >>>> > If that time doesn't suit, I'm sure we can arrange another soon.
> >>>> >
> >>>> > Tim
> >>>> >
> >>>> >
> >>>> > On 30/07/13 22:25, Jan Bracker wrote:
> >>>> > >Tomorrow 9:30pm sounds good for me.
> >>>> > >
> >>>> > >Jan
> >>>> > >
> >>>> > >
> >>>> > >2013/7/30 Tim Docker <tim at dockerz.net <mailto:tim at dockerz.net>>
> >>>> > >
> >>>> > >    Hi,
> >>>> > >
> >>>> > >    I'm sorry for the late notice, but I won't be able to make our
> >>>> IRC
> >>>> > >    meeting this tonight.
> >>>> > >
> >>>> > >    Either tomorrow at 9:30pm, or Thursday at 9:00pm are fine with
> >>>> me.
> >>>> > >
> >>>> > >    Tim
> >>>> > >
> >>>> > >
> >>>> > >    On 30/07/13 01:40, Jan Bracker wrote:
> >>>> > >>    Hello everybody,
> >>>> > >>
> >>>> > >>    here the latest progress on the project:
> >>>> > >>
> >>>> > >>    - While using SVGFonts I fixed a few minor bugs in it.
> >>>> > >>    - The "ToRenderable" type class is reintroduced, because the
> >>>> type
> >>>> > >>    complications are not there anymore.
> >>>> > >>    - Some clean up and more specific documentation (especially
> >>>> paths).
> >>>> > >>    - Switched from data-default to data-default-class.
> >>>> > >>    - Standard alignment functions are not provided instead of
> >>>> > >>    redifined in each backend.
> >>>> > >>    - Updated the diagrams backend to use the HEAD of diagrams
> >>>> > >>    instead of the hackage version.
> >>>> > >>    - All my work until 25th of July has been merged into the main
> >>>> > >>    charts repo!
> >>>> > >>    - Worked on the font support in the diagrams backend. This works
> >>>> > >>    well now.
> >>>> > >>    - Included standard fonts in the diagrams backend package. This
> >>>> > >>    also includes additional versions to support bold and italic
> >>>> fonts.
> >>>> > >>
> >>>> > >>    The current head is "stable", except for the text metrics [1]. I
> >>>> > >>    figured out the metrics. Some issues I still have:
> >>>> > >>
> >>>> > >>    - For some reason SVGFonts seems to be rendering fonts of same
> >>>> > >>    size considerably smaller then cairo. Not sure what the reason
> >>>> > >>    is. Going to double check on this.
> >>>> > >>    - One of the tests is still missing some lines.
> >>>> > >>    - Quality of font rendering is notably worse with SVGFonts. I do
> >>>> > >>    not think this can really be improved except by adding native
> >>>> > >>    text rendering to diagrams (+ font metrics). Though, when using
> >>>> > >>    sans-serif and monospace fonts quality is acceptable (Adobe
> >>>> seems
> >>>> > >>    to be doing good work with Source Sans Pro and Source Code Pro).
> >>>> > >>    Maybe I will check for an alternative serif font, though it will
> >>>> > >>    be hard to beat the character support of Linux Libertine.
> >>>> > >>
> >>>> > >>    Greetings
> >>>> > >>    Jan
> >>>> > >>
> >>>> > >>    [1]:
> >>>> > >>
> >>>> https://github.com/jbracker/haskell-chart/tree/e01257cda11d9832ac9a3c7af424c02bd83cb1a2
> >>>> > >>
> >>>> > >>
> >>>> > >>    2013/7/23 Stephen Tetley <stephen.tetley at gmail.com
> >>>> > >>    <mailto:stephen.tetley at gmail.com>>
> >>>> > >>
> >>>> > >>        Hi Jan
> >>>> > >>
> >>>> > >>        In the PostScript world, glyph metrics are given as 1/1000
> >>>> of
> >>>> > >>        a point size. One would hope SVG might follow this lead.
> >>>> > >>
> >>>> > >>        Although out-of-date in the TrueType world, the AFM spec
> >>>> from
> >>>> > >>        Adobe is a readable (and skimmable) introduction to glyph
> >>>> > >>        metrics and still a worthwhile reference.
> >>>> > >>
> >>>> > >>
> >>>> http://partners.adobe.com/public/developer/en/font/5004.AFM_Spec.pdf
> >>>> > >>
> >>>> > >>        Best wishes
> >>>> > >>
> >>>> > >>        Stephen
> >>>> > >>
> >>>> > >>        On 23 July 2013 11:07, Jan Bracker
> >>>> > >>        <jan.bracker at googlemail.com
> >>>> > >>        <mailto:jan.bracker at googlemail.com>> wrote:
> >>>> > >>
> >>>> > >>
> >>>> > >>
> >>>> > >>            Aside of that I also noticed that the text metric
> >>>> > >>            information in SVGFonts are not given in device
> >>>> > >>            coordinates. Am I right in assuming they are given in
> >>>> > >>            1000em, because the value "units-per-em" says 1000? If
> >>>> > >>            that is right I will try to dig my way through the
> >>>> > >>            textSVG' function to find out how to convert that into
> >>>> > >>            device coordinates.
> >>>> > >>
> >>>> > >>
> >>>> > >>
> >>>> > >>
> >>>> > >>
> >>>> > >>
> >>>> > >>    _______________________________________________
> >>>> > >>    Chart mailing list
> >>>> > >>    Chart at projects.haskell.org  <mailto:Chart at projects.haskell.org>
> >>>> > >>    http://projects.haskell.org/cgi-bin/mailman/listinfo/chart
> >>>> > >
> >>>> > >
> >>>> >
> >>>>
> >>>
> >>
> >
> 
> -- 
> You received this message because you are subscribed to the Google Groups "diagrams-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to diagrams-discuss+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.



More information about the Chart mailing list