client – Flax http://www.flax.co.uk The Open Source Search Specialists Thu, 10 Oct 2019 09:03:26 +0000 en-GB hourly 1 https://wordpress.org/?v=4.9.8 Finding the Bad Actor: Custom scoring & forensic name matching with Elasticsearch http://www.flax.co.uk/blog/2018/02/01/finding-bad-actor-custom-scoring-forensic-name-matching-elasticsearch/ http://www.flax.co.uk/blog/2018/02/01/finding-bad-actor-custom-scoring-forensic-name-matching-elasticsearch/#respond Thu, 01 Feb 2018 10:13:56 +0000 http://www.flax.co.uk/?p=3681 Finding the Bad Actor: Custom scoring & forensic name matching with Elasticsearch from Charlie Hull

The post Finding the Bad Actor: Custom scoring & forensic name matching with Elasticsearch appeared first on Flax.

]]>

The post Finding the Bad Actor: Custom scoring & forensic name matching with Elasticsearch appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2018/02/01/finding-bad-actor-custom-scoring-forensic-name-matching-elasticsearch/feed/ 0
Lucene Revolution 2016, Boston http://www.flax.co.uk/blog/2016/10/26/lucene-revolution-2016-boston/ http://www.flax.co.uk/blog/2016/10/26/lucene-revolution-2016-boston/#respond Wed, 26 Oct 2016 15:44:48 +0000 http://www.flax.co.uk/?p=3373 After our two successful hackdays, it was on to the main event of the week and the largest open source search event of the year. In between catching up with other Lucene/Solr folks on the first day I enjoyed Chris … More

The post Lucene Revolution 2016, Boston appeared first on Flax.

]]>
After our two successful hackdays, it was on to the main event of the week and the largest open source search event of the year. In between catching up with other Lucene/Solr folks on the first day I enjoyed Chris ‘Hossman’ Hostetter’s talk on Hidden Gems of Apache Solr with some great tips on obscure Solr query syntax, and Bloomreach’s fast-paced talk on the SolrCloud Rebalance API which allows one to autoscale large Solr systems (although this feature isn’t quite yet available in Solr 6, we’re promised it’s being worked on). I then had a pleasant partner lunch with Lucidworks and heard about some exciting developments for their Fusion search platform – we can expect to see version 3 of this Solr-based product soon and I’ll be blogging more about this in coming months. Dragan Milosevic‘s talk on how aggregration performance compares between various systems including Elasticsearch and Solr was slightly hamstrung by his laptop failing, but he bravely carried on and led us to the (unsurprising) conclusion that both perform pretty well but working with HBase directly can be faster due to its single index. The day finished with a party held on the 50th floor of a nearby building, with fantastic views over the city.

On the second day I caught Scott Blum‘s talk on another autoscaling strategy for Solr. They have a 13 billion document index running on 6000 Solr cores on 32 nodes so have had issues with JVM garbage collection which they initially solved with a manual reload of each core every few hours. They eventually built Solrman which can automatically balance Solr cores across a set of nodes – this is a solid alternative to the Rebalance API and we’ll be looking at both for some of our clients soon. We followed Scott with our talk on Coffee, Danish and Search (Powerpoint slides are here and video here) about our work on a multilingual media monitoring system for Infomedia which was well received. Having stepped out for a minute I was unable to get back in the room for Kevin Watters‘ talk on the Solr Graph Query which was extremely popular! Grant Ingersoll finished the conference with a closing keynote and we then headed for the airport.

Thanks to Lucidworks and the conference sponsors for another great event – it felt busier than previous years and this is more evidence of the ongoing healthy state of the Lucene/Solr community. We’ll be back!

The post Lucene Revolution 2016, Boston appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2016/10/26/lucene-revolution-2016-boston/feed/ 0
Choosing between Elasticsearch and Solr http://www.flax.co.uk/blog/2016/03/15/choosing-elasticsearch-solr/ http://www.flax.co.uk/blog/2016/03/15/choosing-elasticsearch-solr/#respond Tue, 15 Mar 2016 15:42:32 +0000 http://www.flax.co.uk/?p=3124 One of the questions we’re asked all the time is which of the two most popular open source search engines is best for a particular use case – and the answer is always ‘it depends’. Broadly speaking, Apache Lucene/Solr and … More

The post Choosing between Elasticsearch and Solr appeared first on Flax.

]]>
One of the questions we’re asked all the time is which of the two most popular open source search engines is best for a particular use case – and the answer is always ‘it depends’. Broadly speaking, Apache Lucene/Solr and Elasticsearch are very similar in terms of features and performance. If you’ve already chosen one of them, there’s very few reasons to incur the inevitable extra work of switching to the other. However if you’re still not sure which to choose, read on.

Solr, being the older and more mature project, is often chosen by organisations who are comfortable with building and managing enterprise Java applications, already using other Apache open source projects and whose data is generally complex and of many different sizes and types. The queries used may also be quite complex. They like the fact that there are many places to obtain support and development services from and the wide range of documentation, books and articles on Solr. They also like its proven stability at large scale. Some examples from our own client list are Bloomberg, News UK, Reed Specialist Recruitment and Infomedia.

Elasticsearch is often chosen by organisations who are following the latest trends in terms of programming languages and frameworks, aren’t necessarily thinking they need a ‘search engine’ (they may for example be building analytics tools) and are likely to be ingesting a large number of reasonably small items of data. They want a tool that will scale easily and automatically without them having to think about how to do it. Although there isn’t so much documentation on Elasticsearch, and the support and training options are pretty much centred around one company (who also control the development roadmap), they like the fact that it’s quick to get started with. Some examples from our own client list are Arachnys, the Office for National Statistics, Westcoast and Eagle Genomics.

There’s exceptions of course and several of our clients use both Solr and Elasticsearch in different situations and for different purposes. You can build site search, enterprise search, Big Data and analytics systems with either – and we’re happy to offer consulting, training and support for both. If you need advice or help with your choice do get in touch or come along to a Meetup and chat to us in person.

The post Choosing between Elasticsearch and Solr appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2016/03/15/choosing-elasticsearch-solr/feed/ 0
Helping Bloomberg build a real-time news search engine with Luwak http://www.flax.co.uk/blog/2016/03/08/helping-bloomberg-build-real-time-news-search-engine/ http://www.flax.co.uk/blog/2016/03/08/helping-bloomberg-build-real-time-news-search-engine/#respond Tue, 08 Mar 2016 11:13:36 +0000 http://www.flax.co.uk/?p=3058 Bloomberg is one of the world’s leading providers of financial news via the Bloomberg Terminal, an almost ubiquitous presence on the desks of finance professionals. As you might expect their systems heavily depend on effective search and over the last … More

The post Helping Bloomberg build a real-time news search engine with Luwak appeared first on Flax.

]]>
Bloomberg is one of the world’s leading providers of financial news via the Bloomberg Terminal, an almost ubiquitous presence on the desks of finance professionals. As you might expect their systems heavily depend on effective search and over the last few years they have become increasingly involved in the open source community, sponsoring events such as Lucene Revolution and also helping me to run (and often hosting) the London Lucene/Solr Meetup. They also now employ no less than three Apache Solr committers and have contributed features including an XML query parser and analytics component.

The scale of Bloomberg’s systems is significant: 320,000 subscribers who carry out 8 million searches every day of an archive of 400 million stories. A million new stories are published every day and in the financial sector response time is paramount, so they want new stories available within 100 milliseconds.

One component of their platform is a large scale news alerting framework, handling around 1.5 million stored searches created both internally and by their subscribers. Some of these stored searches are highly complex Boolean expressions. As part of a migration away from a commercial solution, they have recently built a new alerting system based on the open source Luwak library we developed for media monitoring applications.

Initially, Luwak depended on a (rather large) patch for Lucene to add positional information to the index, but Bloomberg kindly funded the integration of this into trunk Lucene and as of version 5.3 it is part of the main release. We’ve also been working with them to develop and tune Luwak’s capabilities to address their performance and accuracy requirements.

Daniel Collins, who has led the alerting system development, recently talked in New York on the use of Luwak in their alerting system and you can watch the video of his talk and a short article covering their journey. He writes:

Corporate technology has become highly complex. At the lower levels of the stack, innovators know that proprietary software can cause more problems than it solves. A lot of companies are deciding they can’t sit behind closed doors any more, and they need to get more involved in open source.

We’re very grateful for Bloomberg’s support of the Luwak project and we are continuing to develop it – do let us know if you would like to know more about how to use it in your application.

The post Helping Bloomberg build a real-time news search engine with Luwak appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2016/03/08/helping-bloomberg-build-real-time-news-search-engine/feed/ 0
Out and about in search & monitoring – Autumn 2015 http://www.flax.co.uk/blog/2015/12/16/search-monitoring-autumn-2015/ http://www.flax.co.uk/blog/2015/12/16/search-monitoring-autumn-2015/#respond Wed, 16 Dec 2015 10:24:42 +0000 http://www.flax.co.uk/?p=2857 It’s been a very busy few months for events – so busy that it’s quite a relief to be back in the office! Back in late November I travelled to Vienna to speak at the FIBEP World Media Intelligence Congress … More

The post Out and about in search & monitoring – Autumn 2015 appeared first on Flax.

]]>
It’s been a very busy few months for events – so busy that it’s quite a relief to be back in the office! Back in late November I travelled to Vienna to speak at the FIBEP World Media Intelligence Congress with our client Infomedia about how we’ve helped them to migrate their media monitoring platform from the elderly, unsupported and hard to scale Verity software to an open source system based on our own Luwak library. We also replaced Autonomy IDOL with Apache Solr and helped Infomedia develop their own in-house query language, to prevent them becoming locked-in to any particular search technology. Indexing over 75 million news stories and running over 8000 complex stored queries over every new story as it appears, the new system is now in production and Infomedia were kind enough to say that ‘Flax’s expert knowledge has been invaluable’ (see the slides here). We celebrated after our talk at a spectacular Bollywood-themed gala dinner organised by Ninestars Global.

The week after I spoke at the Elasticsearch London Meetup with our client Westcoast on how we helped them build a better product search. Westcoast are the UK’s largest privately owned IT supplier and needed a fast and scalable search engine they could easily tune and adjust – we helped them build administration systems allowing boosts and editable synonym lists and helped them integrate Elasticsearch with their existing frontend systems. However, integrating with legacy systems is never a straightforward task and in particular we had to develop our own custom faceting engine for price and stock information. You can find out more in the slides here.

Search Solutions, my favourite search event of the year, was the next day and I particularly enjoyed hearing about Google’s powerful voice-driven search capabilities, our partner UXLab‘s research into complex search strategies and Digirati and Synaptica‘s complimentary presentations on image search and the International Image Interoperability Framework (a standard way to retrieve images by URL). Tessa Radwan of our client NLA media access spoke about some of the challenges in measuring similar news articles (for example, slightly rewritten for each edition of a daily newspaper) as part of the development of the new version of their Clipshare system, a project we’ve carried out over the last year of so. I also spoke on Test Driven Relevance, a theme I’ll be expanding on soon: how we could improve how search engines are tested and measured (slides here).

Thanks to the organisers of all these events for all their efforts and for inviting us to talk: it’s great to be able to share our experiences building search engines and to learn from others.

The post Out and about in search & monitoring – Autumn 2015 appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2015/12/16/search-monitoring-autumn-2015/feed/ 0
Elasticsearch for Westcoast – why search is never simple! http://www.flax.co.uk/blog/2015/11/27/elasticsearch-westcoast-search-never-simple/ http://www.flax.co.uk/blog/2015/11/27/elasticsearch-westcoast-search-never-simple/#respond Fri, 27 Nov 2015 15:48:29 +0000 http://www.flax.co.uk/?p=2817 Elasticsearch for Westcoast from Charlie Hull

The post Elasticsearch for Westcoast – why search is never simple! appeared first on Flax.

]]>

The post Elasticsearch for Westcoast – why search is never simple! appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2015/11/27/elasticsearch-westcoast-search-never-simple/feed/ 0
FIBEP WMIC 2015 – Open source search for media monitoring with Solr http://www.flax.co.uk/blog/2015/11/19/fibep-wmic-2015-infomedia-upgraded-closed-source-search-engine-fast-scalable-flexible-open-source-platform/ http://www.flax.co.uk/blog/2015/11/19/fibep-wmic-2015-infomedia-upgraded-closed-source-search-engine-fast-scalable-flexible-open-source-platform/#respond Thu, 19 Nov 2015 16:23:46 +0000 http://www.flax.co.uk/?p=2812 FIBEP WMIC 2015 – How Infomedia upgraded their closed-source search engine to a fast, scalable and flexible open-source platform from Charlie Hull

The post FIBEP WMIC 2015 – Open source search for media monitoring with Solr appeared first on Flax.

]]>

The post FIBEP WMIC 2015 – Open source search for media monitoring with Solr appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2015/11/19/fibep-wmic-2015-infomedia-upgraded-closed-source-search-engine-fast-scalable-flexible-open-source-platform/feed/ 0
Enterprise Search & Discovery 2014, Washington DC http://www.flax.co.uk/blog/2014/11/12/enterprise-search-discovery-2014-washington-dc/ http://www.flax.co.uk/blog/2014/11/12/enterprise-search-discovery-2014-washington-dc/#respond Wed, 12 Nov 2014 10:49:57 +0000 http://www.flax.co.uk/blog/?p=1301 Last week I attended Enterprise Search & Discovery 2014, part of the KMWorld conference in Washington DC. I’d been asked to speak on Turning Search Upside Down and luckily had the first slot after the opening keynote: thanks to all … More

The post Enterprise Search & Discovery 2014, Washington DC appeared first on Flax.

]]>
Last week I attended Enterprise Search & Discovery 2014, part of the KMWorld conference in Washington DC. I’d been asked to speak on Turning Search Upside Down and luckily had the first slot after the opening keynote: thanks to all who came and for the great feedback (there are slides available to conference attendees, I’ll publish them more widely soon, but this talk was about media monitoring, our Luwak library and how we have successfully replaced Autonomy IDOL and Verity with a powerful open source solution for a Scandinavian monitoring firm).

Since ESSDC is co-located with KMWorld, Sharepoint Symposium and Taxonomy Bootcamp, it feels like a much larger event than the similar Enterprise Search Europe, although total numbers are probably comparable. It was clear to me that the event is far more focused on a business rather than technical audience, with most of the talks being high-level (and some being simply marketing pitches, which was a little disappointing). Mentions of open source search were common (from Dion Hinchcliffe’s use of it as an example of a collaborative community, to Kamran Kahn’s example of Apache Solr being used for very large scale search at the US National Archives). Unfortunately a lot of the presenters started with the ‘search sucks, everyone hates search’ theme (before explaining of course that their own solution would suck less) which I’m personally becoming a little tired of – if we as an industry continue pursuing this negative sentiment we’re unlikely to raise the profile of enterprise search: perhaps we should concentrate on more positive stories as they certainly do exist.

I spent a lot of time networking with other attendees and catching up with some old contacts (a shout out to Miles Kehoe, Eric Pugh, Jeff Fried and Alfresco founder John Newton, great to see you all again). My favourite presentation was Dave Snowden‘s fantastic and very funny debunking of knowledge management myths (complete with stories about London taxi drivers and a dig at American football) and I also enjoyed Raytion‘s realistic case studies (‘no-one is searching for the sake of searching – except us [search integrators] of course’). Presentations I enjoyed somewhat less included Brainspace (who stressed Transparency as a key value, then when I asked if their software was thus open source, explained that they would love it to be so but then they wouldn’t be able to get any investment – has anyone told Elasticsearch?) and Hewlett Packard, who tried to tell us that their new API to the venerable IDOL search engine was ‘free software’ – not by any definition I’m aware of, sorry. Other presentation themes included graph/semantic search – maybe this is finally something we can consider seriously, many years after Tim Berners Lee’s seminal paper.

Thanks to Information Today, Marydee Ojala and all others concerned for organising the event and making me feel so welcome.

The post Enterprise Search & Discovery 2014, Washington DC appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2014/11/12/enterprise-search-discovery-2014-washington-dc/feed/ 0
Searching for IP addresses in text with Elasticsearch http://www.flax.co.uk/blog/2014/06/03/flexible-search-of-structured-numeric-data-with-elasticsearch/ http://www.flax.co.uk/blog/2014/06/03/flexible-search-of-structured-numeric-data-with-elasticsearch/#respond Tue, 03 Jun 2014 16:30:50 +0000 http://www.flax.co.uk/blog/?p=1215 We recently implemented a search solution for a customer using Elasticsearch. Most of their requirements were fairly standard, however they also wanted to be able to search for IP addresses embedded in the document text, using a flexible and precise … More

The post Searching for IP addresses in text with Elasticsearch appeared first on Flax.

]]>
We recently implemented a search solution for a customer using Elasticsearch. Most of their requirements were fairly standard, however they also wanted to be able to search for IP addresses embedded in the document text, using a flexible and precise search syntax, e.g. given the following document fragment:

    ... the API can be accessed at 167.87.3.201 on port 8700 ...

the following searches should all find the document:

  167.87.3.201
  *.87.3.201
  *.87.*.201
  167.[80-100].3.*
  etc.

While it would have been possible to implement the multiple wildcard requirement with Elasticsearch/Lucene regular expression queries, there is no simple way to handle the numeric range requirement without constructing some fairly complex regexps. Furthermore, regular expression queries can be slow to run (depending on the complexity of the expression and the size of the index), and this application had a large index.

The obvious thing to do here is to parse the IP address into separate numbers and index it into numeric fields. e.g.:

  {
    "ip1": 167,
    "ip2": 87,
    "ip3": 3,
    "ip4": 201,
    "text": "the API can be ..."
  }

Then, user queries such as “167.[80-100].3.*” can be parsed into an Elasticsearch query:

  {
    "query": {
      "bool": {
        "must": [
          { "term": { "ip1": 167 }},
          { "range": { "ip2": { "from": 80, "to": 100 }}},
          { "term": { "ip3": 3 }}
        ]
      }}}

(please note that these queries are for illustrative purposes only, and are untested).

Unfortunately, this approach fails when there is more than one IP address per document (as there generally was in this case), since if multiple values exist for the ipN fields the relationship between each component is lost. For example, a document containing:

    ... servers at 167.133.88.1 and 176.90.3.10 are load balanced ...

would spuriously match the user query above, despite the fact that neither IP address matches the query exactly. One possibility would be to use dynamic fields to index each address to a different set of fields:

  {
    "ip1_1": 167,
    "ip2_1": 133,
    "ip3_1": 88,
    "ip4_1": 1,
    "ip1_2": 176,
    "ip2_2": 90,
    "ip3_2": 3,
    "ip4_2": 10,
  }

However, queries would have to cover all possible IP fields with repeated OR subqueries, which would quickly become ugly and unmanagable.

Luckily, Elasticsearch nested documents provide exactly the mechanism we need to preserve the IP address structure within the main document (Solr does too, though this post does not go into the details). This is most easily explained with a JSON example with two IP addresses:

  {
    "text": "Lorem ipsum dolor sit amet, ei impetus persecuti eam...",
    "ipaddr" : [
      {
        "ip1": 167,
        "ip2": 133,
        "ip3": 88,
        "ip4": 1
      },
      {
        "ip1": 176,
        "ip2": 90,
        "ip3": 3,
        "ip4": 10
      }
    ]
  }

This requires a declaration of the ipaddr type as “nested” in the index mapping:

  ...
  "mappings": {
    "document": {
      "properties": {
        "text": {
          "type": "string",
          "analyzer": "standard"
        },
        "ipaddr" : {
          "type" : "nested"
        },
        ...
      }}}

The child documents are created by the indexer script, which uses a regular expression to find all IP addresses in the document content and parses them into separate numbers. IP addresses can then be searched for using the nested query type, e.g:

  {
    "nested" : {
      "path" : "ipaddr",
      "query" : {
        "bool": {
            "must": [
              { "term": { "ip1": 167 }},
              { "range": { "ip2": { "from": 80, "to": 100 }}},
              { "term": { "ip3": 3 }}
            ]}}}}

This query selects parent documents containing at least one ipaddr child document which matches the query. Internally, children are stored as separate documents from parents, but the join is done transparently and extremely fast.

Nested queries can, of course, be combined with text queries etc. The application we built for the client (in AngularJS and Python/Flask) parses user queries to extract IP query expressions and builds combined text, boolean and nested queries to implement the required search logic.

One slight problem with this approach is that IP addresses are not included in any highlighted summaries generated by Elasticsearch as part of search results. This is because the highlighter does not know where in the text the matching IP address is. There is no simple way around this, so to generate highlighted search summaries we used our own standalone highlighter component, extending it to ‘understand’ the IP query syntax. This code is Apache 2 licensed and is free to download and use.

To sum up, this post outlines how we used Elasticsearch’s nested document type to implement a flexible and fast IP address search syntax. Of course, the same approach could be used to search any other type of structured entity in document text, such as social security numbers, ISBNs etc.

The post Searching for IP addresses in text with Elasticsearch appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2014/06/03/flexible-search-of-structured-numeric-data-with-elasticsearch/feed/ 0
The trouble with tabbing: editing rich text on the Web http://www.flax.co.uk/blog/2013/08/08/the-trouble-with-tabbing-editing-rich-text-on-the-web/ http://www.flax.co.uk/blog/2013/08/08/the-trouble-with-tabbing-editing-rich-text-on-the-web/#respond Thu, 08 Aug 2013 08:36:16 +0000 http://www.flax.co.uk/blog/?p=1003 Matt Pearce, who joined the Flax team earlier this year, writes: A recent client wished to convert documents to and from Microsoft Office formats, using a web form as an intermediate step for editing the content. The documents were read … More

The post The trouble with tabbing: editing rich text on the Web appeared first on Flax.

]]>
Matt Pearce, who joined the Flax team earlier this year, writes:

A recent client wished to convert documents to and from Microsoft Office formats, using a web form as an intermediate step for editing the content. The documents were read in, imported to a Solr search engine, and could then be searched over, cloned, edited and transformed in batches, before being exported to Office once more.

The content itself was broken down into fields, some of which were simple text or date entry boxes, while others were more complex rich text fields. We opted to use TinyMCE as our rich text editor of choice – it’s small, open source, and easy to extend (we already knew we wanted to write at least one plugin).

The problem arose when the client explained to us that they wanted to use the tab key in rich text fields to create consistent spacing in the text. These needed to display as closely as possible to the original document format, and convert to actual tabs in the Office documents. This presented a number of problems:
By default, the tab key moves the user to the next field on a web page, and needs special handling to prevent this behaviour, especially when it only needs to be applied to certain fields on the page. The spacing had to be consistent, like a word processor’s tab stop. This is tricky when working with proportional fonts, especially in a web form.

The client didn’t want to use an indent feature. The tab only came at the start of the paragraph – beyond that point the text could wrap around to the start of the line. The tab needed to be recognisable in our processing code, so it could be converted to a real tab when it was exported to MS Office.

The preferred solution would have been a document editor like that used for Google Docs. Unfortunately, we didn’t have the time to write the whole input and presentation layer in Javascript as Google have! We also wanted to keep the editing function inside the web application if possible, rather than forcing the user to edit the documents in Microsoft Office and then re-import them every time they needed to make changes.

I started with TinyMCE’s “nonbreaking” plugin, which captures the tab key and converts it to a number of non-breaking spaces. This wasn’t directly suitable for our needs – I discovered that the number of spaces is not always consistent, and they are sometimes converted to regular (rather than non-breaking) spaces. In addition, it doesn’t act like a tab stop – it inserts four spaces wherever you are on the line, which didn’t match the client’s requirement.

I adapted the plugin to insert a <span> into the text, using variable padding to ensure it was the right width. This worked reasonably well, after a not insignificant amount of head scratching trying to work around issues with spacing and space handling. Unfortunately, we struck usability problems when trying to backspace over the tab. The ideal situation would be that a single backspace would remove the entire tab, leaving the user at the start of the line (or the point before they hit the tab key). In fact, a single backspace would leave the user inside the span – two backspaces were required to visibly remove the tab from the editor, and the user could not tell that they were inside the span either. You couldn’t reliably select the “tab” with the mouse either. In addition, Firefox started to behave oddly at this point, putting the cursor in unexpected positions.

My final solution was ugly but workable. We switched to using a monospace font in the rich text editor and, after discussion with the client, started using a variable number of arrow characters to represent the tabs (we actually used , or a closing single quote, if you are reading and writing in German). This made life immediately simpler – dropping the proportional font meant that we didn’t have to worry about getting the width right, just the number of characters to insert. It does mean that in order to remove the tab, the user has to backspace over up to four characters, but the characters are clearly visible: you don’t find yourself inside a span that can’t be seen without viewing the underlying HTML.

While I’m sure this isn’t a unique problem, I couldn’t find anyone else that had been trying to do something similar. I am also not sure whether our choice of rich text editor affected how tricky this problem turned out to be. If anybody reading has suggestions of better approaches to this, we’d be interested to hear from them.

The post The trouble with tabbing: editing rich text on the Web appeared first on Flax.

]]>
http://www.flax.co.uk/blog/2013/08/08/the-trouble-with-tabbing-editing-rich-text-on-the-web/feed/ 0