[jsword-devel] jdom removal

Martin Denham mjdenham at gmail.com
Mon Sep 10 04:22:57 MST 2012


Hi Joe,

And Bible does use html.  The main ui control which displays module text is
a WebView which is essentially a cut-down version of Chrome.  So 2. (a
lightweight object model) might not be required.

And Bible had performance and memory problems at the start so I tried to:

   1. replace the DOM with a verse-by-verse InputStream/Source to relieve
   the app of multiple instances of a whole page being created in different
   formats - to reduce memory use
   2. use SAX instead of xslt, moving any required xml manipulation code
   here from DOM handlers - to improve speed

The Streaming in 1. was only partially successful as I could not stream the
whole process and I only got as far as handling ztext osis modules..
The SAX 2. seemed to work pretty well.  The OSIS2HtmlSaxHandler still isn't
as mature as the xslt I have seen but apart from being faster allows me to
stay working in Java.
The above and other small performance fixes allowed And Bible to be usable
on my old G1.

I could expand what I did although I haven't made any major changes to that
code for a couple of years.  However, my approach was bottom-up and it
could benefit from a top-down design based approach by somebody more
familiar with JSword.

Best regards
Martin

On 9 September 2012 08:50, Joe Walker <joe at eireneh.com> wrote:

>
> I've not looked at the AndBible source, but I was under the impression
> that you were not using HTML as a view layer. If it's true that no-one uses
> anything but HTML as a view layer then there isn't much call for 2.
>
> My logic behind 2 was - If your display is very simple, then the rendering
> process goes - Read from disk, extract text from markup, word-wrap and
> apply other trivial bits of formatting, draw to screen.
>
> Compare the process with SAX/OSIS->HTML: Read from disk, parse to create
> event stream, inside XSTL engine, create internal DOM, apply transform from
> XSTL stylesheet to create another external DOM, pass to HTML engine which
> constructs render tree from second DOM and reads CSS stylesheet to create a
> CSS object model, which informs the layout engine how to draw the render
> tree, draw to screen.
>
> I'm emotionally attached to AndBible having contributed to it in some
> small way, but for me what makes it *much* better than YouVersion is speed.
> I have a hope of keeping up with a speaker and a chain of references with
> AndBible and not with YouVersion.
>
> Joe.
>
>
> On 8 Sep 2012, at 22:56, Martin Denham <mjdenham at gmail.com> wrote:
>
> So 1. would be an optimized version of what now exists which sounds good.
>
> But 2. would be a new interface, wouldn't it.  I can't think when it would
> be used.  Might it not just add complexity.
>
> Martin
>
> On 5 September 2012 17:41, Joe Walker <joe at eireneh.com> wrote:
>
>>
>> So I think I was arguing that there should be 2 ways to get data out [1]:
>> 1. OSIS/SAX or (OSIS/StAX)
>> 2. A lightweight object model
>>
>> The advantage of 1 is that it serialises to HTML well, and is lean on
>> memory. It would be the job of the stream consumer to decide how to use up
>> memory. The advantage of 2 would be simple fast access without any XML
>> overhead.
>> I would imagine that anyone using HTML as a layout system would pipe the
>> SAX into an XSLT parser, and that anyone doing layout themselves would use
>> the lightweight object model.
>>
>> Joe.
>>
>> [1] Actually I'm not sure that I'd got as far as saying how I thought it
>> should be, more that I'd consistently got it wrong ;-)
>>
>>
>> On 4 Sep 2012, at 15:32, DM Smith <dmsmith at crosswire.org> wrote:
>>
>> I don't see it that way. I like the transformation to OSIS as an
>> intermediate form and then to HTML.
>>
>> The only problems I see are the creation of the DOM as objects. If SAX or
>> StAX could be the interface, then we'd be able to have a lighter process.
>>
>> DM
>>
>> On Sep 4, 2012, at 5:15 AM, Joe Walker <joe at eireneh.com> wrote:
>>
>>
>> Sigh - I think the document model in JSword is one of the things I most
>> consistently got wrong. If I remember correctly we started with a standard
>> API, then JAXB then JDOM.
>> At the time XML seemed like The Future, however there seems to be more
>> and more that argues against that vision for JSword:
>> - Android display works around the JSword API to avoid XML
>> - Swing uses the horribly broken JEditorPane (?) and its display is
>> probably the worse for it
>> - Even using XML for JSword on the web, which should be a sweet spot, has
>> (had?) problems like getting reliable XSLT in browsers.
>>
>> We're going to need some sort of document object model, and given the
>> existence of OSIS, some sort of ability to serialise it to XML makes some
>> sense, but perhaps we should consider an object model that is somewhat
>> closer to the storage model than the display model.
>>
>> Joe.
>>
>> On 3 Sep 2012, at 22:20, DM Smith <dmsmith at crosswire.org> wrote:
>>
>> Looks like from your notes that there is more opportunity than just
>> replacing JDOM, but rather not building a DOM at all. Maybe you and Douglas
>> can collaborate?
>>
>> In Him,
>> DM
>>
>> On Sep 3, 2012, at 11:25 AM, Martin Denham <mjdenham at gmail.com> wrote:
>>
>> It would be good to remove JDOM.  When working on the first versions of
>> And Bible I had to bypass the JDOM DOM creation to improve performance on
>> low powered Android devices, but my simple workaround only worked for
>> simple, well structured OSIS bibles.
>>
>> I made a few rough notes<http://code.google.com/p/and-bible/wiki/AmendmentsToJSwordForAndroid> on
>> it at the time.
>>
>> I don't think Android includes a StAX library, but it does include a
>> similar efficient XML Pull library and it would probably be possible to
>> include a StAX library with And Bible.  I could do some investigation and
>> experiments if this approach was seriously under consideration.
>>
>> Martin
>>
>> On 3 September 2012 15:35, Douglas Campos <qmx at qmx.me> wrote:
>>
>>> Howdy!
>>>
>>> I was talking with DM wrt removing jdom and using org.w3c.* APIs instead
>>> (more portable, less deps), and he asked me to post it here :)
>>>
>>> Any objections? (I'm assuming I'll fix BD too)
>>>
>>> Blessings,
>>> -- qmx
>>>
>>>
>>> _______________________________________________
>>> jsword-devel mailing list
>>> jsword-devel at crosswire.org
>>> http://www.crosswire.org/mailman/listinfo/jsword-devel
>>>
>>
>> _______________________________________________
>> jsword-devel mailing list
>> jsword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/jsword-devel
>>
>>
>> _______________________________________________
>> jsword-devel mailing list
>> jsword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/jsword-devel
>>
>>
>> _______________________________________________
>> jsword-devel mailing list
>> jsword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/jsword-devel
>>
>>
>> _______________________________________________
>> jsword-devel mailing list
>> jsword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/jsword-devel
>>
>>
>>
>> _______________________________________________
>> jsword-devel mailing list
>> jsword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/jsword-devel
>>
>>
> _______________________________________________
> jsword-devel mailing list
> jsword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/jsword-devel
>
>
>
> _______________________________________________
> jsword-devel mailing list
> jsword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/jsword-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.crosswire.org/pipermail/jsword-devel/attachments/20120910/cf13de97/attachment.html>


More information about the jsword-devel mailing list