Another silly experiment: mobile apps for content delivery

Here’s another post from the category “yet another silly idea” or “don’t try this at home”. Keep in mind that I have absolutely no idea about app development. In short, I don’t know what I’m doing or what I’m talking about. But here it goes.

I’ve written in the past about the problems of mathematical content in ebooks (well, epub3 anyway). Ideally, we should all start producing epub3 files right now and use PDFs only for legacy. Of course, even if we had good workflows for this (which we don’t), we’d still face the problems that our readers couldn’t use our content as ubiquitously as PDFs. Which is a tragedy given how crappy PDFs perform on mobile devices — which are slowly but surely becoming my favorite reading devices. (And even print media does nothing but advertise it)

So I wrote about how you could include MathJax in an epub3 file and hope for the best. But this is stupid. We can reliably create mathematical content in a mobile browser thanks to MathJax, but we can’t easily do so in an offline, deliverable, stand-alone format.

Well, of course you can. MathJax is used in lots of mobile applications and there are even open source sample apps for developers to understand how to do this. Yet, authors don’t want to be app developers. (Though especially $\LaTeX$-affine communities seriously need to make HTML the primary output format — not print.)

Luckily for us, app developers these days have a similar problem and there is much innovation in mobile app frameworks that (aims to) make app development a “design once, compile everywhere” kind of thing.

Why don’t we go for a two pronged approach? Especially one that has been used successfully already: let’s develop our content for standards like epub3, offer it as such — DRM free, leaving it to the competent (possibly trained) user to use that file — but also provide a comfortable version by wrapping an app around our (standard-driven) content? (And really, why not offer both for the same price.) In other words, why not do what O’Reilly has done for years.

Instead of waiting for yet another awesome but proprietary framework (like iBooks Author or Inkling), let’s use an open source, standards oriented framework.

How hard would that be? Well, I decided to give it a try (warning: silliness levels rising).

I chose Phonegap — using HTML+CSS+javascript to develop hybrid apps seems fitting. Even more after hearing a wonderful quote an Adobe expert (Adobe bought PhoneGap): “the goal of Phonegap is to standardize itself out of existence”. But really because of Adobe PhoneGap Build (honestly, I would never have imagined I’d get excited over an Adobe product, ever.)

Because even though you’re using PhoneGap you’ll (naturally) still need a complete development environment — for each platform. That’s a pain to set up. Thinking (not only) as an author, you just don’t want to have to do that, you want to author and just wrap an app around it. Which is where PhoneGap Build comes in: a cloud compilation service. With a free account, you get one private project and infinitely many open source projects (and the peace of mind that you can always take your code home and compile it where you want). In fact, you can also simply link to a github repository to build an app (and build your own webhook). Simple as that. (Of course, if you want to get an iOS version, you have to pay Apple for a developer license etc but let’s ignore that.)

So how hard is it?

Well, if we want to start with a really, really simple example, we start with a real example and simplify it. Then you end up with something this “hard”:

  • Create a file config.xml.
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns     = "http://www.w3.org/ns/widgets"
        xmlns:gap = "http://phonegap.com/ns/1.0"
        id        = "com.phonegap.peter-hello"
        version   = "2.2.0">
    <name>Peter's Hello</name>

    <description>
        Peter says hello.
    </description>

    <author href="http://boolesrings.org/krautzberger" email="admin@test.com">
        Peter
    </author>

    <feature name="http://api.phonegap.com/1.0/device" />

    <preference name="phonegap-version" value="2.2.0" />
    <preference name="orientation"      value="default" />
    <preference name="target-device"    value="universal" />
    <preference name="fullscreen"       value="false" />

</widget>

I hope it’s clear what you might want to modify.

  • Create a file index.html
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
        <title>Peter's Hello</title>
    </head>
    <body>
      <h1> Hello!<h1>
    </body>
</html>

Again, I think it’s pretty clear, no?

  • Zip those two files up and upload the archive to PhoneGap Build.
  • Wait a bit.
  • Download and install your compiled app.
  • Done.

Well, actually, now you have to author your content. Some people call that the hard part ;) But when you’re done authoring, you zip it up, upload it (or push to your github repo) and you got yourself an app.

Of course, you can now do all the crazy stuff you’d be stupid enough to do on the web itself. Knock yourself out! Here’s an example wrapping an old post of mine, adding some reveal.js sparkle. Shiny, mostly useless — but something you can’t reliably produce in an epub3 right now (and nobody stops you from shipping an epub3 file of your content for download out of the app).

Of course, there’s a lot (A LOT) that’s wrong with this approach. I have no idea if this approach is feasible beyond very basic content. I have no idea how quickly you’ll run into performance, memory or other hazardous problems. Nevertheless, this is not nothing. It shows what could be done and should be done, by professionals.

In short, it shows why we don’t have to take no for an answer when we ask for better mathematical content on mobile devices today.


Small edit: linked to the phonegap, corrected the Win8 comment.

Publishers should invest in browser development (a comment at the scholarly kitchen)

In the tradition of posting stuff I write elsewhere, here’s a comment I just posted at the scholarly kitchen. It’s not really about the article.

On a slightly different note. Despite many investments in typesetting technologies in (and of) the past, publishers are investing very little in the primary typesetting technology of the future: HTML rendering engines.

A good example (though I’m biased) is MathML, the W3C standard for mathematical markup. Despite being used in XML publishing workflows for over a decade, and becoming part of HTML5, no browser vendor has ever spent any money on MathML development. Accordingly, browser typesetting “quality” is highly unreliable (unless you use MathJax — which is where I get my bias from).

Trident (Internet Explorer) has no native support (but the excellent MathPlayer plugin), Gecko (Mozilla/Firefox) has good support thanks to volunteer work and WebKit (Chrome, Safari, and now Opera) has partial support — again solely due to volunteer work. (Unfortunately, only Safari is actually using that code; Google recently yanked it out of Chrome after one release.)

This isn’t surprising from a business perspective — for the longest time, there was simply no MathML content on the web. But of course, this was a chicken-and-egg problem: no browser support => no content => no browser support => … And it ignores the impact MathML support would have on the entire educational and scientific sector where it would enable interactivity, accessibility, re-usability, and searchability of mathematical and scientific content. (Including ebooks — MathML is part of the epub3 standard.)

Now you might say MathML is just math, a niche at best. But very likely its success will determine if other scientific markup languages will become native to the web — languages like CellML, ChemML, and data visualization languages. These will probably see even less interest from browser vendors but will have enormous relevance to the scientific community.

Right now, scientific publishers (in my experience) have neither expertise nor interest in browser engine development. Unfortunately, they also don’t put pressure on browser vendors to improve typesetting (whether scientific or otherwise). That’s very short sighted, I think. Given that Gecko and WebKit are open source, a joint effort of publishers could very well fix things — and show the community that publishers have their eyes on the future rather than the past.

Why academic societies should start fully fledged social networks

The Joint Math Meetings 2013 ended with the AMS’s 125th Anniversary banquet. One of the things mentioned there was that the AMS is working on some form of online communities. That’s great, but doesn’t go far enough.

1. It’s their nature

Academic societies have always been social networks. Online, social networks look different from conferences, book ordering and membership areas.

A lot has been done already. Take the AMS. MathsJobs has solved the job search problem, MathSciNet has solved publication research.

But what is needed is true social connectivity. Or in other words: conferences, workshops and seminars. The net connects everyone, all the time. Why leave it to people not caring for the community? The big social networks are important, but they will never help smaller communities like the mathematical one, never provide the tools we need.

2. The ultimate appeal

Nobody should trust a social network paid through ads. You may trust it a bit more when you pay for it (e.g., app.net).

But a network run by a society (or a joint venture of societies) would have the ultimate appeal: trust and oversight.

Because societies are democratic, they could establish transparent, democratic oversight over a key technology for the community.

3. It’s their mission

But let’s take it at least one step further. Diaspora and other decentralized social networks are a beautiful idea. Societies could move such tools forward, thereby empowering distributed social networks.

On the one hand, members could easily connect across different societies, on the other hand, members could choose to fully control their data on their own servers.

A society that serves its members and community would not be opposed in principle. Which other social network could say the same?

In addition, the underlying software would naturally be open source — both for transparency and scientific reasons.

This would enable everybody to take this important step — a bit of internet enlightenment if you will.

4. It’s forward thinking

Social networks are the new publishers. It’s interesting to read this post at the Scholarly Kitchen which looks at societies from the reverse angle, the fact that PeerJ is moving publishing more towards a membership model is important.

Publishers should fear societies since they will always be able to offer something fundamentally different — a self-governing community.

5. It has consequences

Right now, the majority of users are on at most one social network, usually Facebook (though mathematicians have sometimes skipped that and followed all the cool kids playing on google+).

I expect the majority of users to soon get comfortable to have multiple networks. This is why I also expect to eventually have better connectors between networks. Granted, this has to do with a lot of major internet issues (net neutrality, walled gardens etc), but I prefer to be optimistic about the future.

But the real consequence is: this will cost money. And members should be ready to pay for it. Just as we should for publishing.

New shiny toy: mathblogging.org gets a long overdue update

It’s been a lot of work and it has been delayed again and again, but here it is: mathblogging.org 2.0, powered by SubjectSeeker, the software behind ScienceSeeker.

Read the announcement.

I would like to thank Dave Munger and the team at ScienceSeeker — especially Gabriel and his infinite patience and support.

I would like to thank Sam for his support, expertise and everything.

Run, you fools! Go and break the server!

3 questions in June or: LoC workshops are the best

Here’s another old (forgotten?) draft to make up for my lack of original writing; this should’ve gone out in June… Instead of posting it, I had grand plans to write about the workshop itself — but never had the time (you know, moving across the continent, starting a new job etc., it gets in the way of things…). Why now? Well, Anthony Salvagno reminded me with his post yesterday that I still had this.

In late June, I had the enormous pleasure to be invited to the Preserving Online Science meeting at the Library of Congress. You can read about the workshop over at Trevor’s blog, and after that you can read the report that was released in November, too.

I’m afraid I wasn’t much use during the workshop and have the lingering feeling that I owe an apology to its instigators, Trevor and Abbey (who also gave a few of us an amazing tour of the lair that is the LoC). Besides a serious case of impostor syndrome, there was just too much to take in and too much on my mind at the time (being literally on the move from Boston to Los Angeles).

3 questions, 3 answers

Before the workshop started, participants were asked to answer three questions. For what it’s worth, here are my answers.

1. Value of Content: 50 years from now, what kinds of online science content will invaluable for understanding science in our age? Please give an example of a particular piece of content and explain why it would be significant. Feel free to provide several examples if you wish.

In a fully connected, digital world, we can understand much better how individual researchers work and communities interact. I believe one of the most important “new” content is to be found in the combined virtual presence of individual researchers — the future of personal archives. This ranges from our email inboxes, professional homepages and online teaching tools, to preprint servers, code and data storage, to activity on online platforms, blogs and social media.

This digital version of our academic self is greatly fractured right now but it can offer a much more complete insight into all aspects of research because it offers insight into being a researcher.

2. Future Use of Content: What kinds of uses do you imagine this science content could serve? Please briefly describe the value that you think online science content provides for the future. Ideally, focus on specific kinds of content and explain what value that content provides to different types of users (ex, future scientists, historians, policy makers, etc)

Preserving researchers’ actual activity will allow us to trace networks and interaction among and across research communities, in short. we may be able to globally capture the emergence of scientific thought and the communities around them. First and foremost, it will keep research results in context and thus more accessible to future researchers. Secondly, it will offer a much more complete background for historians to study. Third, as analytics improve, policy makers will not have to exclusively rely on static reports anymore, but base their decisions on the emerging and evolving trends within research communities, highlighting both endangered areas and growing hotspots.

3. Identifying Curatorial Homes: Libraries, Archives and Museums have typically collected published works (like journals and books) unpublished works (like the papers of scientists) and a range of other special collections (everything from collections of specimens, to laboratory equipment, to a range of other artifacts). Where are the natural curatorial homes for various kinds of online science content?

Currently, the virtual presence of a researcher is highly fractured, their online activities spread across numerous institutions and platforms, some open and some proprietary. The first step to create curatorial homes for such diverse repositories is for researchers (and citizens in general) to gain access to their own data and to build tools that allow researchers to backup their activities in a reliable, self-governed fashion. Only then could we develop hubs to serve as archival systems which could be hosted practically anywhere. Given the increase in precarious employment for academic researchers, these hubs will more likely be close to researchers as people then researchers as members of institutions. Hence an archival effort needs to address both institutions and individuals to ensure that data is not lost. In particular, the work of early career researchers who might eventually leave academia is at risk even though they are an integral part of the way the research community makes progress today.

How to include MathJax in an epub3 file to work with iBooks (and possibly others)

At the Joint Mathematics Meetings Present and Future of Mathematics on the Web session, Lila Roberts presented an excellent demo of the good stuff you can do with iBooks author. The demo included MathJax and jsxgraph, and combined both with iBooks Author’s easy, pretty layout tools. Of course, the drawback is that iBooks Author is

  • a proprietary format
  • restricted to iPads (not just iOS)
  • you’re not allowed to sell an iBooks Author file except through iTunes.
  • iBooks Author is not transparent about how its formula editor produces SVGs out of TeX but pastes MathML directly into a page, leading to inconsistent renderings of equivalent mathematics
  • MathML support of iBooks on iOS5 devices is severly broken (and will likely never be fixed) thanks to a mobile Safari bug that screws up the use of STIX fonts.

Anyway, I mentioned in the session that you can actually include MathJax in epub3 files directly to get much of the same. Well, you have to do the pretty layouts yourself and you’ll depend on a javascript-enabled epub3 reading software (like iBooks) but at least you’re using an open standard and retain your rights.

Let’s get started!

If you’re lazy, grab the file at the end of the post and hack from there. But I’ll walk you through it.

  • If you want to learn something, grab a copy of MathJax
  • slim it down as described here
  • I went all the way and restricted output to SVG — to minimize things and to make it work. HTML output should work on iOS5, but last I checked Apple changed something on iOS6 that I couldn’t track down for lack of devices.

Alright, that’s the basics. You now have a copy of MathJax that works on any reasonably recent webkit browser, including most Android and iOS versions.

You have all inputs (LaTeX, asciimath, MathML) available but only SVG output (well, and native MathML but if that worked we wouldn’t be here…).

What’s next?

Create your document. That’s actually hard if you don’t have a workflow already and don’t want to afford InDesign, Blue Griffon etc.

Personally, I will always try pandoc first. It’s the most versatile tool there is and John McFarlane is just fantastic. Its TeX implementation is enough if you are writing TeX with HTML/epub output in mind, I’m sure you won’t run into trouble.

If you can, consider to go through the Haskell-cabal-pain of installing the current development version — see the instructions at the pandoc github wiki. That will get you the new epub3 writer and things should be easy.

Of course, you can hack the example file below and just use a current version of pandoc or whatever you like to generate some xHTML5 (yes, xhtml, not html if you want your file to validate). You’ll have to modify the manifest etc by hand.

Anyway, let’s daringly assume you have an epub3 with your xhtml+mathml content.

Adding MathJax.

  • add the slim down version of MathJax to your epub file using your favoriate tool for adding content to a zip file. (Don’t unzip/rezip unless you know what epub needs when zipping…)
  • Assuming you’re using the copy as in the attachement, add the following to your manifest (modify paths and id’s if needed)
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/BasicLatin.js" id="id0" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/MiscMathSymbolsB.js" id="id1" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/d.js" id="id2" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/jax.js" id="id3" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/cancel.js" id="id4" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/a.js" id="id5" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/AsciiMath/jax.js" id="id6" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/autoload/ms.js" id="id7" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/mathchoice.js" id="id8" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Script/Regular/Main.js" id="id9" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/extpfeil.js" id="id10" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/AsciiMath/config.js" id="id11" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/Arrows.js" id="id12" media-type="application/x-javascript"/>
    <item href="mathjax/images/CloseX-31.png" id="id13" media-type="image/png"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/LatinExtendedA.js" id="id14" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Italic/Other.js" id="id15" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Size3/Regular/Main.js" id="id16" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Size2/Regular/Main.js" id="id17" media-type="application/x-javascript"/>
    <item href="mathjax/images/MenuArrow-15.png" id="id18" media-type="image/png"/>
    <item href="mathjax/jax/input/TeX/jax.js" id="id19" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Size1/Regular/Main.js" id="id20" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/h.js" id="id21" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/l.js" id="id22" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Fraktur/Bold/PUA.js" id="id23" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/AMSsymbols.js" id="id24" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/CombDiacritMarks.js" id="id25" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Fraktur/Regular/PUA.js" id="id26" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/GreekAndCoptic.js" id="id27" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/LatinExtendedB.js" id="id28" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/LatinExtendedA.js" id="id29" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/MiscSymbols.js" id="id30" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/scr.js" id="id31" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/MiscSymbols.js" id="id32" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/MiscTechnical.js" id="id33" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/newcommand.js" id="id34" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/autoload/mmultiscripts.js" id="id35" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/p.js" id="id36" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Typewriter/Regular/Main.js" id="id37" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/o.js" id="id38" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/autoload/annotation-xml.js" id="id39" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/u.js" id="id40" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Fraktur/Bold/BasicLatin.js" id="id41" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Fraktur/Regular/BasicLatin.js" id="id42" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Size4/Regular/Main.js" id="id43" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/noUndefined.js" id="id44" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/k.js" id="id45" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/LetterlikeSymbols.js" id="id46" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/HTML.js" id="id47" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Fraktur/Regular/Main.js" id="id49" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/MiscSymbolsAndArrows.js" id="id50" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Bold/BasicLatin.js" id="id51" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/GeometricShapes.js" id="id52" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/GeometricShapes.js" id="id53" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/config.js" id="id54" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/enclose.js" id="id55" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/EnclosedAlphanum.js" id="id56" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/mhchem.js" id="id57" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/verb.js" id="id58" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/GeneralPunctuation.js" id="id59" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/MathMenu.js" id="id60" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/GeometricShapes.js" id="id61" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/PUA.js" id="id62" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/LetterlikeSymbols.js" id="id63" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/z.js" id="id64" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Fraktur/Bold/Main.js" id="id65" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/SpacingModLetters.js" id="id66" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Fraktur/Bold/Other.js" id="id67" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/autoload-all.js" id="id68" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Bold/CombDiacritMarks.js" id="id69" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/noErrors.js" id="id70" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/g.js" id="id71" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Regular/BasicLatin.js" id="id72" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/SpacingModLetters.js" id="id73" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/MiscSymbols.js" id="id74" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/GreekAndCoptic.js" id="id75" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/Main.js" id="id76" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/mml2jax.js" id="id77" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/GeometricShapes.js" id="id78" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/i.js" id="id79" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/q.js" id="id80" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/toMathML.js" id="id81" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/NativeMML/config.js" id="id82" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/BasicLatin.js" id="id83" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/boldsymbol.js" id="id84" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Typewriter/Regular/Other.js" id="id85" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/BoxDrawing.js" id="id86" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/begingroup.js" id="id87" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/v.js" id="id88" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/MiscMathSymbolsA.js" id="id89" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Math/BoldItalic/Main.js" id="id90" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Bold/Other.js" id="id91" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/autoload/menclose.js" id="id92" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/LetterlikeSymbols.js" id="id93" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Typewriter/Regular/CombDiacritMarks.js" id="id94" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/GeneralPunctuation.js" id="id95" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/MiscMathSymbolsB.js" id="id96" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/x.js" id="id97" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Regular/Other.js" id="id98" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/j.js" id="id99" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/MathZoom.js" id="id100" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/MiscMathSymbolsA.js" id="id101" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/unicode.js" id="id102" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/c.js" id="id103" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/NativeMML/jax.js" id="id104" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/SupplementalArrowsB.js" id="id105" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/autobold.js" id="id106" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/SuppMathOperators.js" id="id107" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Regular/Main.js" id="id108" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/action.js" id="id109" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/fr.js" id="id110" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/Dingbats.js" id="id111" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/Dingbats.js" id="id112" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Italic/CombDiacritMarks.js" id="id113" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/Arrows.js" id="id114" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/MathEvents.js" id="id115" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/MathOperators.js" id="id116" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Caligraphic/Bold/Main.js" id="id117" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/MathOperators.js" id="id118" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/Latin1Supplement.js" id="id119" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/CombDiacritMarks.js" id="id120" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/f.js" id="id121" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/Main.js" id="id122" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/bbox.js" id="id123" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/config.js" id="id124" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/CombDiactForSymbols.js" id="id125" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Regular/CombDiacritMarks.js" id="id126" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/Arrows.js" id="id127" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/SupplementalArrowsA.js" id="id128" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/r.js" id="id129" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/GeneralPunctuation.js" id="id130" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Italic/BasicLatin.js" id="id131" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/SuppMathOperators.js" id="id132" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/opf.js" id="id133" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/fontdata.js" id="id134" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/SpacingModLetters.js" id="id135" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/autoload/mglyph.js" id="id136" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/MathOperators.js" id="id137" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/GreekAndCoptic.js" id="id138" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/CombDiactForSymbols.js" id="id139" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Bold/Main.js" id="id140" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/w.js" id="id141" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/MiscTechnical.js" id="id142" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/Latin1Supplement.js" id="id143" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/MathOperators.js" id="id144" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/LetterlikeSymbols.js" id="id146" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/m.js" id="id147" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/GeneralPunctuation.js" id="id148" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/autoload/multiline.js" id="id149" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/LatinExtendedA.js" id="id150" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/autoload/mtable.js" id="id151" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/LatinExtendedA.js" id="id152" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/SansSerif/Italic/Main.js" id="id153" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/asciimath2jax.js" id="id154" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/jax.js" id="id155" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/AMSmath.js" id="id156" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/b.js" id="id157" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/fontdata-extra.js" id="id158" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/SuppMathOperators.js" id="id159" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/MathOperators.js" id="id160" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/s.js" id="id161" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Script/Regular/BasicLatin.js" id="id162" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Caligraphic/Regular/Main.js" id="id163" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/SpacingModLetters.js" id="id164" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/GreekAndCoptic.js" id="id165" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/BasicLatin.js" id="id166" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/SupplementalArrowsA.js" id="id167" media-type="application/x-javascript"/>
    <item href="mathjax/MathJax.js" id="id168" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/TeX/config.js" id="id169" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/BasicLatin.js" id="id170" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/CombDiacritMarks.js" id="id171" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/TeX/color.js" id="id172" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/Main.js" id="id173" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/LatinExtendedB.js" id="id174" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Italic/CombDiacritMarks.js" id="id175" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Fraktur/Regular/Other.js" id="id176" media-type="application/x-javascript"/>
    <item href="mathjax/extensions/tex2jax.js" id="id177" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/MiscTechnical.js" id="id178" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/autoload/maction.js" id="id179" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/GreekAndCoptic.js" id="id180" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Bold/LatinExtendedB.js" id="id181" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/n.js" id="id182" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/t.js" id="id183" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Typewriter/Regular/BasicLatin.js" id="id184" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/SuppMathOperators.js" id="id185" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/y.js" id="id186" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/jax.js" id="id187" media-type="application/x-javascript"/>
    <item href="mathjax/jax/input/MathML/entities/e.js" id="id188" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/LetterlikeSymbols.js" id="id189" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/AMS/Regular/Latin1Supplement.js" id="id190" media-type="application/x-javascript"/>
    <item href="mathjax/jax/element/mml/optable/CombDiacritMarks.js" id="id191" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Math/Italic/Main.js" id="id192" media-type="application/x-javascript"/>
    <item href="mathjax/jax/output/SVG/fonts/TeX/Main/Regular/Main.js" id="id193" media-type="application/x-javascript"/>
  • To each xhtml file that contains MathML, add
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
    jax: ["input/TeX","input/MathML","output/SVG"],
    extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],
    TeX: {
    extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]
    },
    MathMenu: {
    showRenderer: false
    },
    menuSettings: {
    zoom: "Click"
    },
    messageStyle: "none"
    });
    </script>
    <script type="text/javascript" src="../mathjax/MathJax.js"> </script>
  • I have not activated automatic linebreaking because there’s currently a bug in MathJax on iOS6. If MathJax detects the need to break the line, you’ll get Math Processing errors instead.
  • For each xhtml file with the above we’ll have to modify the properties-part in the manifest to have both mathml scripted, e.g., in the sample file you’ll see
    • <item id="c3" media-type="application/xhtml+xml" href="xhtml/ch1.html" properties="mathml scripted"/>
  • And then you can include wonderful MathML and even webkit deficiencies or the horrible iOS5 Safari+STIX bug will be meaningless to your epub file and you can actually publish a mathematical epub file to be read on iBooks.
    x^ + x y ^ + x y z ^ .

This text is available as an epub3 file which includes MathJax and should run on iOS devices.

What’s the best TeX-to-HTML or TeX-to-ePUB converter?

What do I do when I don’t find the time to properly write here? I needlessly double post stuff I’ve written elsewhere.

Somebody asked the title question on LinkedIn. My reply was as follows (well, I’ll do the links properly here).

What’s the best TeX-to-HTML or TeX-to-ePUB converter?

I don’t have that much experience with this, but it might be better than nothing.

I think the two main contenders for TeX-to-html are TeX4ht (which most LaTeX distributions ship) and LaTeXML.

TeX4ht is really a dvi-to-html converter so it behaves accordingly. In my limited experience, it is easier to get results.

LaTeXML seems more powerful, but I could never get it to produce results from “arbitrary” TeX (again, not a lot of time spent on this). On the other hand, LaTeXML is used systematically to convert the arXiv with reasonable success rates.

With respect to epub3 (ignoring html-to-epub3), I’m only aware of pandoc (disclaimer: my personal favorite).

The current development branch has an epub3 writer with MathML support. This works reliably in a handful of tests. Pandoc does not have complete TeX support but John McFarlane is just a fantastic guy who built a strong community around pandoc — something the two others seem to lack.

Addendum: TeX.SE has lots of expertise on tex4ht and latexml, of course. See this example


Since the blog has to have something extra

Bonus links from TeX.SE:

Super Bonus links

Bonus observation

the two posts that regularly drive traffic this way are about Markdown and epub. Just saying.

Bonus bonus

That last sentence about John McFarlane got shortened too much and doesn’t quite make sense anymore. So I finally have a reason to embed the most important comic strip on the internet.

xkcd "Duty Calls", cc-by nc
Duty Calls (cc-by-nc).

Happy 2nd Birthday, Mathblogging.org or My 136 favorite mathematical blogs

Mathblogging.org is nearing its 2nd birthday. We’ve passed the second anniversary of the domain registration and my own blog post is having it’s second anniversary soon. Plenty of reason to write a post about this.

We (Fred, Felix and I) recently decided to put the Mathblogging.org Weekly Picks on hold. It was a bit of a sad moment for us, but for something we never planned on doing, it’s been quite a ride these past 18 months and I’d like to think we’ve helped people a little to get a peek into this living, breathing chaos that is the mathematical blogoshpere.

The thing is: we are not able to do a good job anymore. With 691 feeds aggregated it is very hard to fulfil our promise of “reading all blog posts that go through mathblogging.org”. Additionally, in the last few months a couple of changes caused the Weekly Picks to be done mostly by yours truly alone — making this promise even less realistic and even more biased. For a while we could compensate by saying “only a few categories each week”, but even that is outside of what we can manage now.

So we turn a page.

If all goes well, we will re-launch in a few weeks, which will allow us to invite people to become editors, allowing us to aggregate interesting posts right on the front page. We’re still looking for potential editors (read: people who read too many math blogs and are opinionated). But in fact, quite a number of mathematical bloggers are doing an amazing job already, though either separate or in small collectives.

A while back I tweeted that the best thing this year in mathematical blogging has been the launch of The Aperiodical. Well, they do have competition to this title. For example, mathbabe.org’s Cathy O’Neill has established herself as one of the premier “cross-culture” math bloggers after blogging for little over a year. Also, right from the bat (a year ago next week), Math Munch has been an awesome resource of weekly posts, so Anna Weltman, Paul Salomon and Justin Lanier are race for that immaterial title race of mine, too.

Add to that work of God Plays Dice‘s Michael Lugo with his weekly links and the grand old lady of math podcasts Math/Maths with its weekly math news — and you’ll see that nobody really needs our Weekly Picks anymore. Finally, a couple of weeks ago, you could follow an amazing series of posts thanks to the initiative by Sam Shah and Kate Nowak to create a math teacher blogger initiation which us 200 new math bloggers (!) — and giving mathblogging.org a slew of new blogs to include. Their work is, quite frankly, amazing.

The funny thing is, when we launched mathblogging.org we only reluctantly added a teacher/education category. Sure, we loved Dan Meyer’s blog dy/dan but we were all researchers, so teacher bloggers were not our natural focus. It didn’t take me long to completely change my mind. There are still some things that strike me as odd (say, some homeschooling blogs) but then again there is much more that strikes me as odd about research bloggers these days.

I’m amazed by the grassroots movement that is mathematical teacher bloggers. The way these people have built (and keep building) a strong online community, exchanging ideas, materials and technology, supporting each other and boosting outreach on a scale that research mathematicians could only dream of. Are research mathematician bloggers even aware of this effort? Unfortunately, the answer seems to be no.

Research bloggers in mathematics face one major issue: a blessing that is also a curse. Namely, we have — unmatched by other sciences — a high number of highest-level researchers blogging (relative to the size of our research community and blogoshpere anyway). Terry Tao and Tim Gowers are probably the most well known, but I would count about 5-10 belonging to that “inner circle”. This is a blessing as especially Tao and Gowers prove time and again that the very greatest researchers are extraordinary communicator and teachers.
Unfortunately, it turns out that having this truly elite group of bloggers does not help researchers at all to embrace blogging as a medium for their academic and popular outreach. On the one hand, young researchers (who are more likely to pick up this type of mathematical writing) are often intimidated. Yes, there are a few grad student blogs and yes, the group behind the Secret Blogging Seminar has turned from grad students to tenure-track and tenured folk. But far more young researchers react with something along the lines of “I can’t blog on the level of Terry Tao!”. (When I’m in a sour mood, I’ll reply: Is this why you went into research? Because you asked yourself if you could do it on the level of Terry Tao and answered “sure, no biggie”?) But it’s hard to underestimate how intimidating the situation is.

The other negative effect I noticed is curious: mathematical researcher bloggers can’t even fight the good fight against old fashioned researchers and institutions (say, in tenure evaluations). Where science bloggers are building a strong community to support each other throughout the academic career path, fighting the St. Kerns of their disciplines every step of the way, in mathematics you’ll encounter a more wicked opposition, a soft wall: blogging is great! Terry Tao does it. Are you Terry Tao? Aha. (followed by snicker or evil laugh)

This would not be a problem if there were at least some influential researcher bloggers like Bora (nobody is like Bora!), actively promoting blogging as a most serious researcher activity. Instead, the influential math researcher bloggers do not give the impression as if they were interested in getting anyone to embrace blogging (yes, John Baez wrote a column once, I know). In fact, I have the impression that they hardly read other blogs outside their small, elite collective. To be honest, I find this highly disappointing (these are our scientific leaders, after all) but, sadly, not surprised.

Back to the second part of the title of this post. Since the Weekly Picks are soon to be retired, I’ve had to re-arrange my reading habits. You see, I used to read the mathblogging.org feeds — simple as that. Now that the Weekly Picks have taken a leave of absence, I don’t have to read all the blogs anymore and I found myself not reading any math blogs anymore!

So I grabbed the opml file that we kindly provide at mathblogging.org and imported it into Google reader, filtering it down to 136 blogs that I either really like or feel like I should keep an eye on (say, Terry Tao’s posts; I don’t enjoy them as a I used to yet I need to at least glance over it). You can find the correpsonding opml below, if you care.

These ~136 blogs will give you some overview over what the mathematical blogosphere has to offer. But not that much — it’s fully and totally biased (if you want to force me to check your blog, go add it to ScienceSeeker where I’m an editor for mathematics). You can, for example, see my clear affinity for Italian math bloggers. Or you can see that I don’t care that much for tumlbr-rebloggers (it’s no that they are bad, but it’s too much noise).

It’s worthwhile to point out that the international mathematical blogoshpere is not as well-represented on mathblogging.org as we’d like. This has many reasons (e.g., a lot of people blog on English no matter their first language), but certainly one is the lack of ability on our side, the mathblogging.org editors. Spanish, French and Italian are roughly doable (with or without google translate), but, e.g., languages out of Asia or Africa are hard to deal with for us — and we don’t find them as easily (and honestly, we don’t seek out blogs that much anymore).

It’s strange however, how few blogger we have from France and Germany. Maybe France suffers from Images des Mathématiques being such an extraordinary online magazine. If you read nothing else, Images is likely enough. But it doesn’t explain the absence. Just looking at the UK gives you a different example. While you have big, semi-traditional projects like +maths and other projects out of the Millenium Mathematics Project, the UK has by far strongest local math blogger community I’ve seen anywhere — and in addition a strong local math culture with Maths Jams. (And, as mentioned, the fantastic The Aperiodical and the HistSci Hulk himself, the Renaissance Mathematicus.)

German mathematical blogging, I’m afraid, is pitiful to behold (and of course I’m utterly biased). While Thilo Kuessner still holds down the fort at the Scienceblogs.de, that’s about it. There aren’t even that many German bloggers writing in English. (Well, Guenther Ziegler blogs — cross-posting something once a year. Not that I blame him — he’s busy doing a lot of other awesome stuff. But he’s not a blogger.) And how many German mathematicians are on twitter? Less than there are bloggers…

We do list a few Spanish-speaking math bloggers and you’ll find some really good ones in my list. I’m sure there are more and I hope we can get more once we upgrade mathblogging.org. It’s much better than French and German blogging (and it’s not just Spain), then again given the number of native Spanish speakers in the world, it’s still very very small — but at least there it’s worth reading. Oh, and Italy is surprisingly strong in terms of the mathematical blogosphere, ranging from online versions of print columns to weird creative bloggers.

So there you have it, kind of a “state of the math blogosphere”. It only took me two years to write it (even though Martin Fenner kindly offered us a guest post at PLoS blogs many moons ago).


And now, the annotated list of the blogs I do read, most of which I simply love to read.

Mind you there are a number of blogs missing from that list. For example, all of Booles’ Rings since those posts have a different status for me personally. But if you ever needed an infusion of blogs, here you go.

The OPML file (on Dropbox)

A virtual Kaffehaus on g+

So that went well.

Two weeks ago I tried to do something that I always wanted to do and that Sam had done a couple of times with a more specific focus. That is, use google+ hangouts to simply meet people.

If you don’t know them by now (go read Sam’s posts!), google+ hangouts are really the only reason to be on google+ for me. I know, I know, there’s tons of mathematicians on google+ and really for a research mathematician it’s probalby the best social network. But that’s besides the point.

For me, the key feature are the hangouts. The hangouts are the first, free video conferencing system that works, in fact amazingly well, with a wealth of features (screensharing, collaborative writing and, of course, pirate hats), with the on air feature, it even allows you to record your hangout and have it on youtube afterwards. In short, it is a pretty good deal (you pay in privacy, of course) and you see a lot of fantastic people using it for all kinds of stuff, e.g. very prominently Barack Obama but also scientists such as Bad Astronomer Phil Plait doing Q&As or virtual star parties, hooking up a telescope to look at your favorite planets. It’s fantastic stuff.

So what would I be doing with the hangouts? I just moved to LA, which means I left a good deal of friends and contacts behind (yet again) and I have the need to literally hang out with friends. Then there are also other people I always wanted to get in touch with. That is all these fantastic bloggers that I got to know on twitter, on their blogs and in other places, that are doing interesting stuff all the time — I would love a chance to talk to them.

Finally, two weeks ago, I tried to have a hangout. I didn’t announce it until it started — and (surprise!) it didn’t work at all. The simple reason was: nobody was around! Desperate that I was, I even made the hangout “public” (which means anybody can join in) which quickly got really weird. Thankfully, my connection immediately crashed when random people showed up and tried talking to me. (I should’ve known better, actually since there are websites that list public hangouts — be careful what you wish for…)

How could I create a hangout as I had wanted? A hangout where you actually want to be open for people to join but not demanding it from them. You don’t want to be open to everybody, but you want to be open to a lot of people, people you may have never met in person but know by some form of communication or another.

Last week, I tried to do it a little bit better and I specifically invited people to an “event”, another google+ feature (as on other social networks) which annoys people with invites to random events that they don’t care about.

To be less offensive, I did this last minute, i.e., the evening before the hangout, and explained the point of this in the “invitation”. Mostly, I wanted to give people ample opportunity to ignore the “invitation” because I wanted to keep the hangout light, informal, no strings attached.

And it actually worked. I got a chance to hook up with one American and two English mathematicians and bloggers that I actually quite admire — Christian Perfect, Vincent Knight and Patrick Honner. All four of us where there for only half an hour but it was wonderful: I had my morning coffee, talked to interesting people in person for the first time and just generally enjoyed being able to connect.

And that’s what I would like to have. The equivalent of a Wiener Kaffehaus, a place where interesting people gather and you’re essentially sure that you’ll run into someone, even though you might not know who exactly or for how long. But when you do, you can sit down, sip your coffee and have a decent conversation.

But any good experiment requires reproduction, so yesterday I followed the same pattern and chanced upon Patrick Honner, Vincent Knight, Dana Ernst, our own Sam Coskey and even Andrew Brooke-Taylor (on g+) stopped by for a few minutes before going to bed (in Japan). Arguably, I talked too much (nobody who’s met me will be surprise), but it was a lot of fun.

Well, that’s three data points. But it has again strengthened my conviction that hangouts/videconferencing will have a huge impact. Don’t get me wrong. We’re not there yet. For example, when Andrew jumped in, I would have loved to “get up from the table” and sit down with him privately to catch up. But nevertheless, hangouts go in the right direction. As a video chat room they are not yet as flexible as a Kaffeehaus, but it feels like we’re almost there and that it’s not the technology per se that’s holding us back anymore (10 video-streams are almost certainly enough for my purposes).

Soon enough, we might get a real Kaffeehaus, where you can sit at a single table following a single conversation, step away for a nice quiet chat (yet overhearing the ongoing conversation) or wander over and meet some new people at some new table.

For mathematics (and research in general) this is a great opportunity, to be able to connect with other researchers (or even the great unknown “public”) in yet another crucial way. If MathOverflow becomes the common room, then video-conferencing could become the coffee shop.

I look forward to trying this again next week. If you want to drop by, just let me know.

self-publishing, the academic community and LaTeX fanboyism — a comment at Devlin’s Angle

Yet another one of those “Peter babbled too long on somebody else blog”-posts. This time at Keith Devlin’s MAA column/blog Devlin’s Angle

A few comments.

About your reply to Corey’s comment. “That will surely change very quickly” is something I’ve been hearing all my (academic) life but nothing is happening — academia proves highly conservative. The main problem is that the young researchers willing to seriously experiment will often not gain enough “traditional” merit compared to those who just play the game — and those who successfully play the game will rarely see the need to experiment later.

This is a serious problem that would deserve much more effort from the few established researchers that are both influential, established, and open to new ideas: help young researcher get the credit they deserve with their experiments such as self-publishing (can’t help but add: and publish open-access or even open-source). Or in other words: it’s great to hear that self-publishing worked for you, this time, but can somebody else reproduce it?

Finally, LaTeX (as a binary) is nice for producing print output — but practically incapable of doing anything else (and actually, professional typesetters will easily complain about the quality of TeX’s output).

As Peter Rowlett and yourself pointed out, even the best reflow-PDF viewers (Kindle, Nook) are quite limited. However, that is actually the author’s fault. It’s like trying to build an iPad with manufacturing equipment from 1978 (or for that matter, teaching a MOOC in 1978).

So instead of using LaTeX to do what it can’t do — produce content for an html environment — authors need to take the next step and switch to authoring systems that can produce both good print and good html. That’s hard right now, but worth an experimental effort (good keywords: pandoc, asciidoc, restructured-text, sphinx-doc — and I’d volunteer right away to help actually.)

After all, with the adoption of MathML3 in two critical standards (html5 and epub3) and with technologies like MathJax, mathematical content in html finally makes sense.

(Disclaimer: I’m involved in the MathJax development)


Thanks to this discussion on g+, here’s I just had to add another comment

One small addendum. Here’s such an experiment going all the way to XML: Rob Bezeer’s Linear Algebra book http://linear.ups.edu/index.html which (due to it’s flexibility) is part of IDPF’s official ebpub3 sample repository https://code.google.com/p/epub-samples/