CINXE.COM
Europe PMC Tech Blog | Techy stuff from Europe PMC
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> <link type="application/atom+xml" rel="alternate" href="https://europepmc.github.io/techblog/feed.xml" title="Europe PMC Tech Blog" /> <!-- Begin Jekyll SEO tag v2.7.1 --> <title>Europe PMC Tech Blog | Techy stuff from Europe PMC</title> <meta name="generator" content="Jekyll v3.9.0" /> <meta property="og:title" content="Europe PMC Tech Blog" /> <meta property="og:locale" content="en_US" /> <meta name="description" content="Techy stuff from Europe PMC" /> <meta property="og:description" content="Techy stuff from Europe PMC" /> <link rel="canonical" href="https://europepmc.github.io/techblog/" /> <meta property="og:url" content="https://europepmc.github.io/techblog/" /> <meta property="og:site_name" content="Europe PMC Tech Blog" /> <link rel="next" href="https://europepmc.github.io/techblog/page/2/" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="Europe PMC Tech Blog" /> <script type="application/ld+json"> {"description":"Techy stuff from Europe PMC","headline":"Europe PMC Tech Blog","url":"https://europepmc.github.io/techblog/","@type":"WebSite","name":"Europe PMC Tech Blog","@context":"https://schema.org"}</script> <!-- End Jekyll SEO tag --> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="theme-color" content="#157878"> <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'> <link rel="stylesheet" href="/techblog/assets/css/style.css?v=99af2fde682c7a20c7f4457b97c1b3da781ebef0"> <link rel="shortcut icon" type="image/x-icon" href="/techblog/favicon.ico"> <!-- Twitter cards --> <meta name="twitter:site" content="@EuropePMC_news"> <meta name="twitter:creator" content="@"> <meta name="twitter:title" content=""> <meta name="twitter:description" content="Techy stuff from Europe PMC"> <meta name="twitter:card" content="summary"> <meta name="twitter:image" content="https://europepmc.github.io/techblog/images/epmc-techblog_larger.png"> <!-- end of Twitter cards --> </head> <body> <section class="page-header"> <h1 class="project-name"><a href="/techblog/"><img src="/techblog/images/epmc-techblog.png" style="border:0">Europe PMC Tech Blog</a></h1> <!--<h2 class="project-tagline">Techy stuff from Europe PMC</h2> <a href="https://github.com/EuropePMC/techblog" class="btn">View on GitHub</a> --> <a href="/techblog/" class="btn">Home</a> <a href="/techblog/about" class="btn">About</a> <a href="/techblog/categories" class="btn">Post Categories</a> <a href="https://europepmc.org" class="btn epmc" target="_blank">Europe PMC</a> </section> <section class="main-content"> <h1>Latest posts: <a href="/techblog/feed.xml"><span id="rss_container"><svg width="40px" height="40px" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path id="rss_icon" d="M576 1344q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm512 123q2 28-17 48-18 21-47 21h-135q-25 0-43-16.5t-20-41.5q-22-229-184.5-391.5t-391.5-184.5q-25-2-41.5-20t-16.5-43v-135q0-29 21-47 17-17 43-17h5q160 13 306 80.5t259 181.5q114 113 181.5 259t80.5 306zm512 2q2 27-18 47-18 20-46 20h-143q-26 0-44.5-17.5t-19.5-42.5q-12-215-101-408.5t-231.5-336-336-231.5-408.5-102q-25-1-42.5-19.5t-17.5-43.5v-143q0-28 20-46 18-18 44-18h3q262 13 501.5 120t425.5 294q187 186 294 425.5t120 501.5z"/></svg></span></a></h1> <section class="post-excerpt"> <p class="post-excerpt-date">02 Nov 2020</p><h2 class="post-excerpt-title"><a href="/techblog/literature_data_integration/2020/11/02/europe-pmc-text-annotator-is-now-open-source.html">Europe PMC <em>Text-annotator</em> is now open source</a></h2> <style type="text/css" scoped=""> a img { border: 2px solid #ccc; } </style> <h3 id="introducing-text-annotator">Introducing <em>Text-annotator</em></h3> <p>Europe PMC has open-sourced <em>Text-annotator</em>, a JavaScript library to locate and annotate plain text in HTML. The annotation process includes:</p> <ol> <li><strong>Search</strong>: Search for a piece of plain text in the HTML; on finding it, store its location identified by an index and then return the index for later annotation.</li> </ol> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/literature_data_integration/2020/11/02/europe-pmc-text-annotator-is-now-open-source.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/DayaneRAraujo" target ="_blank">Dayane Araujo</a>, <a href="https://github.com/orgs/EuropePMC" target ="_blank">Zhan Huang</a><br/>Category: <a href="/techblog/categories/literature-data-integration/">Literature/Data Integration</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">28 Jan 2020</p><h2 class="post-excerpt-title"><a href="/techblog/literature_data_integration/2020/01/28/new-release-europe-pmc-web-services.html">New release: Europe PMC Web Services 6.3</a></h2> <p>Today Europe PMC released Web Services version 6.3, updating its SOAP and RESTful APIs. Programmatic users can now find more fields available in the core response of these services</p> <h3 id="multiple-author-affiliations">Multiple author affiliations</h3> <p>In the previous version, author affiliations were a single value. The new version 6.3 includes a list of multiple affiliations.</p> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/literature_data_integration/2020/01/28/new-release-europe-pmc-web-services.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/DayaneRAraujo" target ="_blank">Dayane Araujo</a>, <a href="https://www.ebi.ac.uk/about/people/mohamed-selim" target ="_blank">Mohamed Selim</a><br/>Category: <a href="/techblog/categories/literature-data-integration/">Literature/Data Integration</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">28 Jan 2020</p><h2 class="post-excerpt-title"><a href="/techblog/literature_data_integration/2020/01/28/europe-pmc-api-use-cases-page.html">Europe PMC API use cases page</a></h2> <h3 id="connecting-the-programmatic-user-community">Connecting the programmatic user community</h3> <p>Europe PMC makes its open access content and metadata available for building new applications. With a <a href="http://europepmc.org/developers">developer tab</a> specially designed for programmatic users and with detailed documentation, the aim is to make it easy to integrate Europe PMC APIs into new services and thereby improve life science research.</p> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/literature_data_integration/2020/01/28/europe-pmc-api-use-cases-page.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/DayaneRAraujo" target ="_blank">Dayane Araujo</a><br/>Category: <a href="/techblog/categories/literature-data-integration/">Literature/Data Integration</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">16 Oct 2019</p><h2 class="post-excerpt-title"><a href="/techblog/literature_data_integration/2019/10/16/using-europe-pmc-restful-apis.html">PDBe integrates Europe PMC APIs</a></h2> <h3 id="pdbe-exposes-literature-metadata-by-integrating-europe-pmc-rest-apis">PDBe exposes literature metadata by integrating Europe PMC REST APIs</h3> <p><a href="https://www.ebi.ac.uk/pdbe/">PDBe</a>, a member of the Worldwide Protein Bank, is a European resource that maintains a free and publicly available archive of macromolecular structures. The public can easily find information on protein structure and metadata associated with protein structure. PDBe also exposes enriched metadata from other sources such as publications and citations, which are retrieved through Europe PMC APIs.</p> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/literature_data_integration/2019/10/16/using-europe-pmc-restful-apis.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/DayaneRAraujo" target ="_blank">Dayane Araujo</a>, <a href="https://www.ebi.ac.uk/about/people/nurul-nadzirin" target ="_blank">Nurul Nadzirin</a><br/>Category: <a href="/techblog/categories/literature-data-integration/">Literature/Data Integration</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">20 Aug 2019</p><h2 class="post-excerpt-title"><a href="/techblog/literature_data_integration/2019/08/20/elife-innovation-sprint.html">Europe PMC project for eLife Innovation Sprint</a></h2> <h3 id="how-to-find-the-perfect-preprint">How to find the perfect preprint</h3> <p>The <a href="https://sprint.elifesciences.org/">eLife Innovation Sprint</a> is a yearly collaborative hackathon for developers, designers, researchers, technologists, science communicators, and everyone enthusiastic about open science. The premise of the Sprint is simple – the current science publishing system is slow, inefficient and insanely expensive. What we need are open science ideas that could be turned into prototypes to address the challenges we face in science publishing. All Sprint outputs have to be openly available, use open-source licenses for code and software, and permissive licenses (such as CC-BY) for other content.</p> <p>This year the Europe PMC team will participate in the Sprint with a proposal to improve the discoverability of relevant scientific preprints. <a href="https://www.ebi.ac.uk/about/people/dayane-rodrigues-araujo">Dayane Araujo</a> (Technical Outreach Officer) and <a href="https://www.ebi.ac.uk/about/people/michael-parkin">Michael Parkin</a> (Data Scientist) will be working on a tool to sort through ~80,000 life science preprints, and they need your help.</p> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/literature_data_integration/2019/08/20/elife-innovation-sprint.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/MariaLevchenko" target ="_blank">Maria Levchenko</a><br/>Category: <a href="/techblog/categories/literature-data-integration/">Literature/Data Integration</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">04 Jul 2018</p><h2 class="post-excerpt-title"><a href="/techblog/algorithm/2018/07/04/locating-text-html-pages.html">A perfect match: locating plain text in HTML pages</a></h2> <p><a href="https://europepmc.org/Annotations">SciLite</a> is a Europe PMC tool that allows biological terms or relations, such as diseases, chemicals or protein interactions, to be highlighted for readers on abstracts and full text articles. These terms are identified as annotations by text mining algorithms, developed by a variety of text mining groups.</p> <p>The main challenge for the SciLite tool is locating plain text annotations in HTML pages. The challenges derive from the nature of HTML pages. Below is a list of the major challenges we faced and the solutions adopted to mitigate them.</p> <ol> <li><strong>The pages contain HTML tags, obviously.</strong> For example, <a href="https://europepmc.org/articles/PMC1215513">visit this article</a>, and click on the “Gene Function” checkbox, on the right-hand side of the page, to see the sentence highlighted. <br /><br /> <a href="/techblog/images/posts/locating-text-html-pages/fuzzy_match_PMC1215513.png"><img src="/techblog/images/posts/locating-text-html-pages/fuzzy_match_PMC1215513.png" alt="Annotation containing HTML tags" /></a> <em><strong>Figure 1</strong>: Annotation containing HTML tags</em><br /><br /></li> </ol> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/algorithm/2018/07/04/locating-text-html-pages.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/ftalo" target ="_blank">Francesco Talo'</a><br/>Category: <a href="/techblog/categories/algorithm/">Algorithm</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">04 Jun 2018</p><h2 class="post-excerpt-title"><a href="/techblog/literature_data_integration/2018/06/04/integrating-literature-and-data.html">Integrating Literature and Data</a></h2> <p>Data is at the heart of research. Scientific papers describe how data has been obtained, analysed, and what conclusions have been drawn. But it is the data that comprises the essential evidence, which confirms or disproves the original hypothesis. In the life sciences it is essential to look at scientific literature in the context of other publications, the data it builds on and other data linked to the publication. At Europe PMC we have developed a number of features to support data discovery and reuse.</p> <p>As one of the <a href="https://www.google.com/url?q=https://europepmc.org/articles/PMC5070591&sa=D&ust=1527611404257000&usg=AFQjCNGDEarF0yK0Ktref2C7QmlslyDnAw">ELIXIR Core Resources</a>, Europe PMC benefits from excellent links to essential research data hubs located at EMBL-EBI. This helps us interweave publications and data, enriching the graph of research objects, and help researchers discover linked and related data.</p> <p>The literature-data links come in different forms and shapes. An article might be citing a DOI for a dataset in a repository, or describe a protein structure cited as an accession number for PDBe database. An publication itself might be cited by a database, such as Flybase or even a Wikipedia article. Europe PMC obtains such literature-data links in three ways:</p> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/literature_data_integration/2018/06/04/integrating-literature-and-data.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/FlorianGraef" target ="_blank">Florian Gräf</a><br/>Category: <a href="/techblog/categories/literature-data-integration/">Literature/Data Integration</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">08 Mar 2018</p><h2 class="post-excerpt-title"><a href="/techblog/testing/2018/03/08/importance-of-software-testing-in-ci-cd.html">The Importance of Software Testing in DevOps</a></h2> <p>Software testing is the process of identifying the correctness and quality of a software program. In other words, testing is executing a system or application in order to find software bugs, defects, errors or unexpected behavior.</p> <p>Software testing is necessary because we all make mistakes. Some of those mistakes are minor, but others can be expensive or dangerous. Especially while practicing <a href="https://www.atlassian.com/continuous-delivery/ci-vs-ci-vs-cd">continuous integration, continuous delivery, or continuous deployment</a>, we need to test anything and everything we produce, because things can always go wrong.</p> <p>Testing is mainly classified into two types, <strong>Functional Testing</strong> and <strong>Non-functional Testing</strong>.</p> <p><a href="/techblog/images/posts/importance-of-software-testing-in-ci-cd/TEST1.JPG"><img src="/techblog/images/posts/importance-of-software-testing-in-ci-cd/TEST1.JPG" alt="Types of Functional and Non-functional testing" /></a></p> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/testing/2018/03/08/importance-of-software-testing-in-ci-cd.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/rakeshnambiar" target ="_blank">Rakesh Nambiar</a><br/>Category: <a href="/techblog/categories/testing/">Testing</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">29 Jan 2018</p><h2 class="post-excerpt-title"><a href="/techblog/testing/2018/01/29/behavior-driven-development-in-bioinformatics.html">Behavior-Driven Development in Bioinformatics</a></h2> <h3 id="what-is-bdd">What is BDD?</h3> <p><strong>Behavior-Driven Development (BDD)</strong> is a set of Software Engineering practices designed to help teams deliver more valuable and higher quality software features.</p> <p>It adopts general techniques and principles of <a href="https://en.wikipedia.org/wiki/Test-driven_development">Test Driven Development</a> (TDD) with ideas from <a href="https://en.wikipedia.org/wiki/Domain-driven_design">Domain-driven Design</a> (DDD). BDD incrementally builds functionality guided by expected behavior.</p> <p>A simple BDD scenario / requirement is as follows:</p> <figure class="highlight"><pre><code class="language-java" data-lang="java"> <span class="nd">@TC01_EPMC_SearchTest</span> <span class="nl">Scenario:</span> <span class="nc">Specific</span> <span class="nc">Search</span> <span class="n">by</span> <span class="nc">Keyword</span> <span class="nc">Given</span> <span class="no">I</span> <span class="n">am</span> <span class="n">researcher</span> <span class="nc">When</span> <span class="no">I</span> <span class="n">open</span> <span class="n">the</span> <span class="err">'</span><span class="nc">Europe</span> <span class="no">PMC</span><span class="err">'</span> <span class="nc">Website</span> <span class="nc">And</span> <span class="nc">Enter</span> <span class="n">the</span> <span class="n">keyword</span> <span class="s">"Glycosyl transferases"</span> <span class="n">on</span> <span class="n">the</span> <span class="nc">Query</span> <span class="n">field</span> <span class="nc">And</span> <span class="nc">Click</span> <span class="n">on</span> <span class="n">the</span> <span class="nc">Search</span> <span class="n">button</span> <span class="nc">Then</span> <span class="no">I</span> <span class="n">should</span> <span class="n">be</span> <span class="n">able</span> <span class="n">to</span> <span class="n">see</span> <span class="n">the</span> <span class="n">matching</span> <span class="n">results</span> <span class="n">on</span> <span class="n">the</span> <span class="nc">Search</span> <span class="nc">Result</span> <span class="n">page</span></code></pre></figure> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/testing/2018/01/29/behavior-driven-development-in-bioinformatics.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/rakeshnambiar" target ="_blank">Rakesh Nambiar</a><br/>Category: <a href="/techblog/categories/testing/">Testing</a></p> </div> </section> <section class="post-excerpt"> <p class="post-excerpt-date">27 Nov 2017</p><h2 class="post-excerpt-title"><a href="/techblog/documentation/2017/11/27/swagger-documentation-customisation.html">Swagger documentation customisation</a></h2> <p><a href="https://swagger.io/">Swagger</a> is a popular software framework that helps developers build RESTful Web services through their entire lifecycle, from design and documentation, to test and deployment. This post focuses on how to incorporate the API documentation generated through Swagger inside an HTML page hosted from another web application.</p> <p>One of the main features of Swagger is producing interactive documentation for a RESTful API. Swagger can be used in conjunction with a multitude of different languages and frameworks. It will always produce two different outputs inside the same web application hosting the API:</p> <ol> <li>A default HTML page having a standard Swagger style. (<a href="https://www.ebi.ac.uk/europepmc/annotations_api/swagger-ui.html">Europe PMC Annotations API Swagger standard html page</a>)</li> <li>A JSON file that will contain the description of the generated documentation (<a href="https://www.ebi.ac.uk/europepmc/annotations_api/v2/api-docs.json">Europe PMC Annotations API documentation descriptor</a>)</li> </ol> <div class="excerpt-bottom"> <p class="continue"><a href="/techblog/documentation/2017/11/27/swagger-documentation-customisation.html">Continue reading ›</a></p> <p class="metadata">Author: <a href="https://github.com/ftalo" target ="_blank">Francesco Talo'</a><br/>Category: <a href="/techblog/categories/documentation/">Documentation</a></p> </div> </section> <div class="pagination"> Pages: <span class="current_page">1</span></span> <a href="/techblog/page/2/">2</a> </div> <footer class="site-footer"> <span class="site-footer-owner"><a href="https://github.com/EuropePMC/techblog">techblog</a> is maintained by <a href="https://github.com/EuropePMC">EuropePMC</a>.</span> <span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a>.</span> </footer> </section> <script type="text/javascript"> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-114538088-1', 'auto'); ga('send', 'pageview'); </script> </body> </html>