{"found":49966,"hits":[{"document":{"abstract":"The PHP library that renders article citations in Open Journal Systems (OJS) will change maintenance hands from the library\u2019s creator, Sebastian B\u00f6ttger, to PKP. What does citeproc-php do? For those of you unfamiliar, citeproc-php is the server-side library that takes raw article metadata (author names, titles, publication dates, DOIs) and transforms it into formatted citations [\u2026] The post citeproc-php is under new management!","archive_url":null,"authors":[{"contributor_roles":[],"family":"Racy","given":"Famira"}],"blog":{"archive_collection":null,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":null,"canonical_url":null,"category":"socialScience","community_id":"77c8c2e4-ebda-4e7c-9458-6c06b604344b","created_at":1752226126.418889,"current_feed_url":null,"description":null,"doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/77c8c2e4-ebda-4e7c-9458-6c06b604344b/logo","feed_format":"application/atom+xml","feed_url":"https://pkp.sfu.ca/feed/atom","filter":null,"funding":null,"generator":"WordPress","generator_raw":"WordPress","home_page_url":"https://pkp.sfu.ca/news/","id":"1fc8db8d-6943-4efd-8a78-7723c41ab59f","indexed":true,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":0,"relative_url":null,"ror":null,"secure":true,"slug":"pkp","status":"active","subfield":"1710","subfield_validated":null,"title":"Public Knowledge Project","updated_at":1776328463.946064,"use_api":null,"use_mastodon":false,"user_id":null},"blog_name":"Public Knowledge Project","blog_slug":"pkp","content_html":"<figure class=\"wp-block-image size-large\"><img alt=\"Stockholm Archipelago photo by PKP's Jason Nugent represents the distinct yet deeply interconnected nature of landscapes, ecosystems, and infrastructures, a theme of PKP's Community Newsletter, Archipelago.\" class=\"wp-image-18765\" decoding=\"async\" fetchpriority=\"high\" height=\"576\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg\" srcset=\"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg 1024w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-300x169.jpg 300w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-768x432.jpg 768w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1536x864.jpg 1536w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue.jpg 1600w\" width=\"1024\"/></figure>\n<p><em><strong>The PHP library that renders article citations in Open Journal Systems (OJS) will change maintenance hands from the library\u2019s creator, Sebastian B\u00f6ttger, to PKP.</strong></em></p>\n<h2 class=\"wp-block-heading\">What does citeproc-php do?</h2>\n<p>For those of you unfamiliar, citeproc-php is the server-side library that takes raw article metadata (author names, titles, publication dates, DOIs) and transforms it into formatted citations using Citation Style Language (CSL) styles including APA, MLA, Chicago, Vancouver, and more.</p>\n<p>In OJS, this library works behind the scenes of the Citation Style Language plugin. When a reader clicks \u201cHow to Cite\u201d on an article page, or when a journal manager selects a citation style under Settings, citeproc-php generates the formatted output.</p>\n<h2 class=\"wp-block-heading\">What will change?</h2>\n<p><strong>For OJS users:</strong> Nothing immediate. Your citation displays will continue working exactly as they do now. The plugin settings in your dashboard remain unchanged.</p>\n<p><strong>For developers:</strong> The citeproc-php library has moved to the PKP organization under Github and PKP will take an active role in its steering and release management. Little else will change \u2013 PKP would like to continue working with the active contributor community already supporting the library.</p>\n<p><strong>For the broader audience:</strong> PKP has long benefited from, and frequently contributed to, 3rd-party Free and Open Source (FOSS) libraries like citeproc-php. As good FOSS citizens, PKP recognizes the value of a strong ecosystem of support and contribution; this move to formally maintaining citeproc-php is done in recognition of the need for material support for the tools we all rely upon.</p>\n<p>The handover to PKP makes strategic sense since citeproc-php\u2019s primary consumer is OJS and therefore PKP has a strong interest in keeping the library secure and updated.</p>\n<p>The PKP team would like to thank Sebiastian B\u00f6ttger for his excellent work supporting the scholarly publishing community for many years!</p>\n<p><em>The handover discussion can be found in GitHub </em><a href=\"https://github.com/seboettg/citeproc-php/discussions/200#discussioncomment-15705746\"><em>#200</em></a><em>. The new pkp/citeproc-php GitHub page can be found </em><a href=\"https://github.com/pkp/citeproc-php\"><em>here</em></a><em>.\u00a0</em><br/></p>\n<p>The post <a href=\"https://pkp.sfu.ca/2026/04/16/citeproc-php-is-now-managed-by-pkp/\">citeproc-php is under new management!</a> appeared first on <a href=\"https://pkp.sfu.ca\">Public Knowledge Project</a>.</p>","doi":"https://doi.org/10.59350/r58bv-8dm69","funding_references":null,"guid":"https://pkp.sfu.ca/?p=18764","id":"d8fec180-e406-436f-9a9f-00613a903c03","image":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg","images":[{"alt":"Stockholm Archipelago photo by PKP's Jason Nugent represents the distinct yet deeply interconnected nature of landscapes, ecosystems, and infrastructures, a theme of PKP's Community Newsletter, Archipelago.","height":"576","sizes":"(max-width: 1024px) 100vw, 1024px","src":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg","srcset":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-300x169.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-768x432.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1536x864.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue.jpg","width":"1024"},{"src":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg"}],"indexed":true,"indexed_at":1776374604,"language":"en","parent_doi":null,"published_at":1776373941,"reference":[],"registered_at":0,"relationships":[],"rid":"gg4fn-qbc59","status":"active","summary":"<em>\n <strong>\n  The PHP library that renders article citations in Open Journal Systems (OJS) will change maintenance hands from the library\u2019s creator, Sebastian B\u00f6ttger, to PKP.\n </strong>\n</em>\nWhat does citeproc-php do?   For those of you unfamiliar, citeproc-php is the server-side library that takes raw article metadata (author names, titles, publication dates, DOIs) and transforms it into formatted citations using Citation Style Language (CSL)","tags":["Community Newsletter","Citations","Citeproc-php","FOSS","Metadata"],"title":"citeproc-php is under new management!","updated_at":1776373941,"url":"https://pkp.sfu.ca/2026/04/16/citeproc-php-is-now-managed-by-pkp/","version":"v1"}},{"document":{"abstract":"Matt and I were discussing a paper from last year, Korneisel and Maddin (2025) on the evolution of the atlas\u2013axis complex. (It\u2019s excellent, by the way. Really comprehensive.) Mike: Atlases are so weird.","archive_url":null,"authors":[{"affiliation":[{"id":"https://ror.org/0524sp257","name":"University of Bristol"}],"contributor_roles":[],"family":"Taylor","given":"Mike","url":"https://orcid.org/0000-0002-1003-5675"}],"blog":{"archive_collection":22153,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22153/20231105213934/","archive_timestamps":null,"authors":[{"name":"Mike Taylor"}],"canonical_url":null,"category":"earthAndRelatedEnvironmentalSciences","community_id":"0e13541f-417e-46c0-a859-65927249df72","created_at":1675209600,"current_feed_url":null,"description":"SV-POW!  ...  All sauropod vertebrae, except when we're talking about Open Access. ISSN 3033-3695","doi":null,"doi_as_guid":false,"favicon":null,"feed_format":"application/atom+xml","feed_url":"https://svpow.com/feed/atom/","filter":null,"funding":null,"generator":"WordPress.com","generator_raw":"WordPress.com","home_page_url":"https://svpow.com","id":"c6cbbd2e-4675-4680-8a3f-784388009821","indexed":false,"issn":"3033-3695","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":1729882329,"relative_url":null,"ror":null,"secure":true,"slug":"svpow","status":"active","subfield":"1911","subfield_validated":true,"title":"Sauropod Vertebra Picture of the Week","updated_at":1776328855.589855,"use_api":true,"use_mastodon":false,"user_id":"04d03585-c8bb-40f2-9619-5076a5e0aed2"},"blog_name":"Sauropod Vertebra Picture of the Week","blog_slug":"svpow","content_html":"<p>Matt and I were discussing a paper from last year, Korneisel and Maddin (2025) on the evolution of the atlas\u2013axis complex. (It&#8217;s excellent, by the way. Really comprehensive.)</p>\n<p><strong>Mike:</strong> Atlases are so weird. It occurs to me that had the nomenclatural dice fallen differently, we might not even consider them vertebrae at all, just as we don&#8217;t consider metacarpals to be manual phalanges. We might have considered the axial skeleton to consist of skull, atlas, and a sequence of vertebrae starting with the axis. (And, yes, ribs, chevrons and sternal plates.)</p>\n<p><strong>Matt:</strong> Good point on [&#8230;] the weirdness of the atlas. The atlas in particular really does feel like an embryonic segmentation error codified and exapted into a useful structure.</p>\n<p><strong>Mike:</strong> Your mom is an embryonic segmentation error codified and exapted into a useful structure.</p>\n<h1>References</h1>\n<ul>\n<li><a href=\"https://onlinelibrary.wiley.com/doi/10.1111/brv.70053\">Korneisel, Dana E., and Hillary C. Maddin. 2015. Review of the tetrapod skull\u2013neck boundary: implications for the evolution of the atlas\u2013axis complex. <em>Biological Reviews</em> <strong>100</strong>:2435\u20132470. doi:10.1111/brv.70053</a></li>\n</ul>\n<p>&nbsp;</p>\n<hr />\n<p><a href=\"https://doi.org/10.59350/xsxxj-yre49\">doi:10.59350/xsxxj-yre49</a></p>\n","doi":"https://doi.org/10.59350/xsxxj-yre49","funding_references":null,"guid":"https://svpow.com/?p=25332","id":"6a94da22-7ebd-41c2-ac79-49037b9491bc","image":"","images":[],"indexed":true,"indexed_at":1776371557,"language":"en","parent_doi":null,"published_at":1776369155,"reference":[{"id":"https://onlinelibrary.wiley.com/doi/10.1111/brv.70053","unstructured":"Korneisel, Dana E., and Hillary C. Maddin. 2015. Review of the tetrapod skull\u2013neck boundary: implications for the evolution of the atlas\u2013axis complex. Biological Reviews 100:2435\u20132470. https://doi.org/10.1111/brv.70053"}],"registered_at":0,"relationships":[],"rid":"d5e0m-b4j43","status":"active","summary":"Matt and I were discussing a paper from last year, Korneisel and Maddin (2025) on the evolution of the atlas\u2013axis complex. (It\u2019s excellent, by the way. Really comprehensive.)\n<strong>\n Mike:\n</strong>\nAtlases are so weird. It occurs to me that had the nomenclatural dice fallen differently, we might not even consider them vertebrae at all, just as we don\u2019t consider metacarpals to be manual phalanges.","tags":["Atlas-axis Complex","Short","Your Mom"],"title":"On the evolution of the atlas-axis complex","updated_at":1776370689,"url":"https://svpow.com/2026/04/16/on-the-evolution-of-the-atlas-axis-complex/","version":"v1"}},{"document":{"abstract":null,"archive_url":null,"authors":[{"affiliation":[{"id":"https://ror.org/01tmp8f25","name":"Universidad Nacional Aut\u00f3noma de M\u00e9xico"}],"contributor_roles":[],"family":"Mich\u00e1n","given":"Layla","url":"https://orcid.org/0000-0002-5798-662X"}],"blog":{"archive_collection":24080,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":null,"canonical_url":null,"category":"biologicalSciences","community_id":"e92c5db9-8dfb-4d15-8eab-8e5cd20a4cee","created_at":1721741304,"current_feed_url":null,"description":"Garabateando ideas sobre ciencia, biociencias, metaciencia, informaci\u00f3n, inform\u00e1tica, conocimiento datos e historia","doi":null,"doi_as_guid":false,"favicon":null,"feed_format":"application/atom+xml","feed_url":"https://biogarabatos.blogspot.com/feeds/posts/default","filter":null,"funding":null,"generator":"Blogger","generator_raw":"Blogger 7.00","home_page_url":"https://biogarabatos.blogspot.com/","id":"c91473b1-31ae-4dd8-9bc3-0a6c302e34e9","indexed":true,"issn":null,"language":"es","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":"https://mstdn.social/@lma","prefix":"10.59350","registered_at":1729864333,"relative_url":null,"ror":null,"secure":true,"slug":"biogarabatos","status":"active","subfield":"1710","subfield_validated":null,"title":"BIOgarabatos","updated_at":1776327110.732287,"use_api":null,"use_mastodon":false,"user_id":"d9ff24e8-2ba1-4b95-a6a6-872f410768eb"},"blog_name":"BIOgarabatos","blog_slug":"biogarabatos","content_html":"<p>Dise\u00f1ar la bibliograf\u00eda para los cursos de Biolog\u00eda</p><p>Generar la lista de la bibliograf\u00eda, tanto b\u00e1sica como complementar\u00eda, constituye un proceso fundamental en el dise\u00f1o curricular porque conforma el n\u00facleo te\u00f3rico, metodol\u00f3gico y conceptual de la clase, establece el enfoque, las dimensiones, el contexto, el alcance y define claramente el marco conceptual que guiar\u00e1 el curso.</p><p>Dada su relevancia el proceso de seleccionar y crear la bibliograf\u00eda que se usar\u00e1 debe ser meticuloso, detallado y formal porque ser\u00e1 el sustento que utilizar\u00e1n los alumnos para obtener definiciones, establecer marcos de referencia, localizar bibliograf\u00eda relacionada y\u00a0</p><p>Este elemento es com\u00fanmente relegado en el dise\u00f1o curricular, esto es evidente porque existe muy poca literatura\u00a0 que aborde este tema,\u00a0 no se le da la importancia suficiente, al parecer, en muchos casos se ve como un requisito, no c\u00f3mo un componente fundamental del programa de una clase.</p><p>En este texto escribe algunas ideas que se deben considerar para generar la lista de la bibliograf\u00eda de un curso de ciencia, o de cualquier otro tema aunque yo me centrar\u00e9 en uno de biolog\u00eda.</p><p><b>El dise\u00f1o</b></p><p>La primera etapa es el dise\u00f1o de la bibliograf\u00eda del plan.</p><p></p><ol style=\"text-align: left;\"><li>Recuperar literatura de calidad, accesible, digital, disponible en la Web, con identificadores (ISBN, DOI) o al menos un enlace permanente.</li><li>Socializar la lista con la bibliograf\u00eda entre todos los dise\u00f1adores del curso y elegir la m\u00e1s significativa.\u00a0</li><li>Reunir literatura b\u00e1sica y complementaria relevante, actualizada y consistente con los objetivos y tema del curso, 25 referencias pueden ser un buen n\u00famero.</li><li>Elegir un estilo bibliogr\u00e1fico adecuado.</li><li>Generar una lista bibliogr\u00e1fica en l\u00ednea en un gestor bibliogr\u00e1fico como Zotero.</li><li>Actualizar la bibliograf\u00eda, para esto se puede ir agregando literatura extra.</li></ol><div><b>La implementaci\u00f3n</b></div><div>No basta con tener una buena bibliograf\u00eda, es indispensable utilizarla de manera constante y consistente durante el curso, para ello puede servir considera los siguientes puntos:</div><div><ul style=\"text-align: left;\"><li>Presentar la bibliograf\u00eda del curso.\u00a0</li><li>Ense\u00f1ar el uso del gestor de la biblioteca.</li><li>Ense\u00f1ar a citar, el formato, los tipos de citas y dar ejemplos, elegir un estilo para todo el curso.</li><li>Leer art\u00edculos con los estudiantes.</li><li>Se pueden entregar productos sobre las lecturas como infograf\u00edas, mapas conceptuales, 10 puntos clave, un ensayo, un resumen, etc...</li></ul><div>El uso de la bibliograf\u00eda especializada en los cursos de biolog\u00eda es indispensable, por lo que es necesario explicar a los alumnos los temas b\u00e1sicos para usarlos con fluidez, algunos temas que se pueden incluir son bases de datos bibliogr\u00e1ficas, tipos de art\u00edculos cient\u00edficos, publicaci\u00f3n cient\u00edfica, revistas, acceso abierto, licencia creative commons, metadatos, estilos bibliogr\u00e1ficos y buenas pr\u00e1cticas.</div></div><div><br/></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/s2248/biologia%202024.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1161\" data-original-width=\"2248\" height=\"291\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/w565-h291/biologia%202024.png\" width=\"565\"/></a></div><br/><div><br/></div><div><br/></div><div><b>El an\u00e1lisis</b></div><div>La bibliograf\u00eda de un curso es tambi\u00e9n susceptible de ser analizada, es posible obtener indicadores como los siguientes:</div><div><ul style=\"text-align: left;\"><li>Cantidad de referencias</li><li>Edad</li><li>Publicaciones por a\u00f1o</li><li>Temas</li><li>Proporci\u00f3n de documentos con acceso abierto</li><li>Palabras clave</li></ul></div><div>Hacer investigaci\u00f3n sobre la bibliograf\u00eda de los <i>curricula</i> de biolog\u00eda en la educaci\u00f3n superior es otra buena manera de entender la bioliteratura, para determinar, por ejemplo,\u00a0 los textos m\u00e1s \u00fatiles para un curso, los art\u00edculos seminales que vale la pena incluir, en curso y las herramientas se pueden usar.</div><div><br/></div><div><div><b>Bibliograf\u00eda</b></div><div><ul style=\"text-align: left;\"><li>\u00a0 Area, M., &amp; Guarro, A. (2012). La alfabetizaci\u00f3n informacional y digital: Fundamentos pedag\u00f3gicos para la ense\u00f1anza y el aprendizaje competente. Revista Espa\u00f1ola de Documentaci\u00f3n Cient\u00edfica, (Monogr\u00e1fico), 46\u201374. https://doi.org/10.3989/redc.2012.mono.977</li><li>Alshammari, S., Basalelah, L., Rukbah, W. A., Alsuhibani, A., &amp; Wijesinghe, D. S. (2024). PyZoBot: A Platform for Conversational Information Extraction and Synthesis from Curated Zotero Reference Libraries through Advanced Retrieval-Augmented Generation. arXiv. https://doi.org/10.48550/ARXIV.2405.07963</li><li>\u00a0 Basey, J. M., Mendelow, T. N., &amp; Ramos, C. N. (2000). Current trends of community college lab curricula in biology: An analysis of inquiry, technology, and content. Journal of Biological Education, 34(2), 80\u201386. https://doi.org/10.1080/00219266.2000.9655690</li><li>\u00a0 Flaspohler, M. R., Rux, E. M., &amp; Flaspohler, J. A. (2007). The annotated bibliography and citation behavior: Enhancing student scholarship in an undergraduate biology course. CBE Life Sciences Education, 6(4), 350\u2013360. https://doi.org/10.1187/cbe.07-04-0022</li><li>\u00a0 Goudsouzian, L. K., &amp; Hsu, J. L. (2023). Reading Primary Scientific Literature: Approaches for Teaching Students in the Undergraduate STEM Classroom. CBE Life Sciences Education, 22(3), es3. https://doi.org/10.1187/cbe.22-10-0211</li><li>\u00a0 Hern\u00e1ndez y Hern\u00e1ndez, N. D., Salado Rodr\u00edguez, L. I., Vargas Franco, A., Hern\u00e1ndez y Hern\u00e1ndez, N. D., Salado Rodr\u00edguez, L. I., &amp; Vargas Franco, A. (2021). Literacidad acad\u00e9mica en la educaci\u00f3n superior: El caso de la Universidad Estatal de Sonora. Di\u00e1logos sobre educaci\u00f3n. Temas actuales en investigaci\u00f3n educativa, 12(23). https://doi.org/10.32870/dse.v0i23.968</li><li>Hoskins, S. G., Stevens, L. M., &amp; Nehm, R. H. (2007). Selective Use of the Primary Literature Transforms the Classroom Into a Virtual Laboratory. Genetics, 176(3), 1381\u20131389. https://doi.org/10.1534/genetics.107.071183</li><li>\u00a0 Hull, D., Pettifer, S. R., &amp; Kell, D. B. (2008). Defrosting the Digital Library: Bibliographic Tools for the Next Generation Web. PLOS Computational Biology, 4(10), e1000204. https://doi.org/10.1371/journal.pcbi.1000204</li><li>\u00a0 Jankowski, A., &amp; Sawyer, Y. E. (2019). Biology Student Perceptions of Information Literacy Instruction in the Context of an Essential Skills Workshop Series. Issues in Science and Technology Librarianship, (92). https://doi.org/10.29173/istl10</li><li>McGuinn, K., Stone, G., Sharman, A., &amp; Davison, E. (2017). Student reading lists: Evaluating the student experience at the University of Huddersfield. The Electronic Library, 35(2), 322\u2013332. https://doi.org/10.1108/EL-12-2015-0252</li><li>\u00a0 Moraes, I. D. C., Almeida, G. M. D., &amp; Recine, E. (2024). Conte\u00fado program\u00e1tico e referencial bibliogr\u00e1fico da disciplina de Educa\u00e7\u00e3o Alimentar e Nutricional: Uma an\u00e1lise documental. DEMETRA: Alimenta\u00e7\u00e3o, Nutri\u00e7\u00e3o &amp; Sa\u00fade, 19, e77437. https://doi.org/10.12957/demetra.2024.77437</li><li>\u00a0 Morgan, D. E. (2024). Zotero as a teaching tool for independent study courses, honors contracts, and undergraduate research mentoring. Journal of Microbiology &amp; Biology Education, 25(3), e00132-24. https://doi.org/10.1128/jmbe.00132-24</li><li>\u00a0 Newton Miller, L. (2011). University Biology Patrons in the Library Literature 2000-2010: A Content Analysis &amp; Literature Review. Partnership: The Canadian Journal of Library and Information Practice and Research, 6(1). https://doi.org/10.21083/partnership.v6i1.1400</li><li>\u00a0 Pain, E. (2016). How to keep up with the scientific literature. https://www.science.org/content/article/how-keep-scientific-literature</li><li>\u00a0 Schucan Bird, K., &amp; Pitman, L. (2020). How diverse is your reading list? Exploring issues of representation and decolonisation in the UK. Higher Education, 79(5), 903\u2013920. https://doi.org/10.1007/s10734-019-00446-9</li><li>\u00a0 Thorpe, C., Honey, T., &amp; Wilson, E. (2024). Reading Lists as Enablers of Learning in an Immersive Block Teaching Model. New Review of Academic Librarianship, 30(4), 390\u2013404. https://doi.org/10.1080/13614533.2024.2381519</li></ul></div></div><div><br/></div><p></p>","doi":"https://doi.org/10.59350/15xt2-y2w37","funding_references":null,"guid":"tag:blogger.com,1999:blog-3916921080498993167.post-557060750846885939","id":"d55fb575-6b85-4900-ba89-663cd955fc94","image":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/s72-w565-h291-c/biologia%202024.png","images":[{"height":"291","src":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/w565-h291/biologia%202024.png","width":"565"},{"src":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/s2248/biologia%202024.png"}],"indexed":true,"indexed_at":1776366655,"language":"es","parent_doi":null,"published_at":1776365160,"reference":[],"registered_at":0,"relationships":[],"rid":"vmavw-8ce30","status":"active","summary":"Dise\u00f1ar la bibliograf\u00eda para los cursos de Biolog\u00eda Generar la lista de la bibliograf\u00eda, tanto b\u00e1sica como complementar\u00eda, constituye un proceso fundamental en el dise\u00f1o curricular porque conforma el n\u00facleo te\u00f3rico, metodol\u00f3gico y conceptual de la clase, establece el enfoque, las dimensiones, el contexto, el alcance y define claramente el marco conceptual que guiar\u00e1 el curso.","tags":["PAPIME/UNAM/PE203625"],"title":"Dise\u00f1ar bibliograf\u00eda para un curso de biolog\u00eda","updated_at":1776365216,"url":"https://biogarabatos.blogspot.com/2026/04/disenar-bibliografia-para-un-curso-de.html","version":"v1"}},{"document":{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":[],"family":"Luger","given":"Susanne"},{"contributor_roles":[],"family":"Fabbro","given":"Christopher"}],"blog":{"archive_collection":null,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":[{"name":"Open Access Network"}],"canonical_url":null,"category":"otherSocialSciences","community_id":"969d397b-49b9-4c53-9220-607ef85409e5","created_at":1743604215.212958,"current_feed_url":null,"description":"Neueste Beitr\u00e4ge","doi":null,"doi_as_guid":false,"favicon":null,"feed_format":"application/rss+xml","feed_url":"https://open-access.network/rss-feed?type=200","filter":null,"funding":null,"generator":"Other","generator_raw":"Other","home_page_url":"https://open-access.network","id":"f5a57494-4e8e-41d9-b84c-26cb9b0ab291","indexed":true,"issn":null,"language":"de","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.64395","registered_at":0,"relative_url":null,"ror":null,"secure":true,"slug":"oa_network","status":"active","subfield":"1802","subfield_validated":null,"title":"Open Access Network","updated_at":1776328311.338655,"use_api":null,"use_mastodon":false,"user_id":null},"blog_name":"Open Access Network","blog_slug":"oa_network","content_html":"Einblicke zum Call for Proposals der Open-Access-Tage 2026\n\n\nVom 28.09. bis 30.09.2026 finden die diesj\u00e4hrigen Open-Access-Tage an der Johannes Kepler Universit\u00e4t Linz statt. Der Call for Proposals f\u00fcr Vortr\u00e4ge und Workshops l\u00e4uft noch bis zum 16.04. und steht unter dem Motto \u201eWandel mit Verantwortung gestalten\u201c. Die Ortskomitee-Mitglieder Susanne Luger und Christopher Fabbro geben einige Einblicke sowohl zum Motto als auch zum Veranstaltungsort.\n\nWandel im wissenschaftlichen Publikationswesen\nDurch Digitalisierung, Open Access, Open Science und in den letzten Jahren den Einzug von K\u00fcnstlicher Intelligenz befindet sich das wissenschaftliche Publikationswesen in einer Zeit immer schnelleren Wandels und des Umbruchs. Ausgetretene Pfade werden verlassen und neue Wege beschritten. Etablierte Standards und langj\u00e4hrig praktizierte Arbeitsweisen haben zum Teil ausgedient, geraten ins Wanken, werden hinterfragt und neu definiert. Dies ist \u00fcberall zu sp\u00fcren. Dabei m\u00fcssen allerdings nicht nur die Vorteile und Chancen erkannt, sondern auch die m\u00f6glichen Risiken und Konsequenzen in den Blick genommen werden. \n\nVerfolgt man die Mottos der Open-Access-Tage der letzten Jahre, ist es nun an der Zeit, den Schritt von den Visionen hin zu einer verantwortungsvollen Umsetzung zu gehen. Als bedeutender Treiberinnen der Open-Access-Bewegung nehmen insbesondere Bibliotheken und andere forschungsunterst\u00fctzende Einrichtungen im Zusammenspiel mit allen Stakeholdern des Publikationssystems eine zentrale Rolle ein. Damit geht auch die Verantwortung einher, diesen Wandel mit Bedacht und praxisnah zu gestalten, damit Schl\u00fcsselbegriffe wie \u201eQualit\u00e4t\u201c, \u201eIntegrit\u00e4t\u201c, \u201egute wissenschaftliche Praxis\u201c, \u201eTeilhabe\u201c und \u201eNachhaltigkeit\u201c keine leeren Worte sind.\n\n\nHerausforderungen im Zuge des Wandels\nAus dieser Problemlage heraus ist der Call for Proposals unter dem Motto \u201eWandel mit Verantwortung gestalten\u201c entstanden. Hierbei nehmen wir insbesondere die folgenden Herausforderungen und Problemfelder in den Blick:\n\nMit den fortschreitenden technischen M\u00f6glichkeiten und Anforderungen aus der Wissenschaft entstehen zunehmend neuartige Publikationsformate wie Micro-Publikationen, Datenpublikationen oder digitale Editionen, die in der Open-Access-Bewegung bisher weniger Beachtung gefunden haben. Der umfassendere Open-Science-Gedanke beschr\u00e4nkt sich aber nicht nur auf den freien Zugang zu einem klassischen Artikel in einer Zeitschrift. Welche neuen Denkweisen, Standards und Infrastrukturen sind daher erforderlich, um die diversen Publikationskulturen und -formate bestm\u00f6glich in die Open-Access-Transformation zu integrieren und am wissenschaftlichen Diskurs teilhaben zu lassen?\nIn einer zunehmend offenen Publikationslandschaft m\u00fcssen auch Qualit\u00e4tssicherung, Transparenz und wissenschaftliche Standards geachtet, gelebt und gegebenenfalls neu gedacht werden. Vor dem Hintergrund, dass Open-Access-Publikationen im Rahmen der Verarbeitung durch KI-Systeme tausendfach als Basis f\u00fcr gro\u00dfangelegte, maschinelle Auswertungen und automatisierte Texterstellung herangezogen werden, stellt sich auch hier die Frage nach dem verantwortungsvollen Umgang mit diesen Ressourcen. Was bedeutet es in diesem Kontext, \u201eAutor*in\u201c zu sein und welche Verantwortung kommt den Betreibern, Rechteinhabern, Autor*innen und Nutzer*innen zu? Welche rechtlichen und ethischen Rahmenbedingungen k\u00f6nnen und wollen wir als Open-Science-Community hierf\u00fcr stecken?\nEinige etablierte Systeme geraten durch unsichere Finanzierung, Wissenschaftsskepsis und politische Umbr\u00fcche immer mehr unter Druck, z. B. (Publikations-) Infrastrukturen wie die in den USA betriebene Datenbank PubMed. Ein st\u00e4rker werdendes Konkurrenzdenken zwischen einigen L\u00e4ndern schafft zudem eine Tendenz, den Grundgedanken eines offenen Zugangs zu Forschungsergebnissen zu hinterfragen.  Daher ist es wichtig, Verantwortung f\u00fcr nachhaltige Open-Access-Modelle und resiliente Infrastrukturen zu \u00fcbernehmen und diese zu gestalten. Gibt es Systeme, die uns als Open-Access-Community unabh\u00e4ngiger von einzelnen Akteuren oder Ereignissen machen, und trotzdem einen weltweiten und freien Zugang zu gew\u00e4hrleisten? Welche Verantwortung kommt dabei auch Entscheidungstr\u00e4ger*innen und Hochschulleitungen zu, die die notwendigen Rahmenbedingungen daf\u00fcr schaffen m\u00fcssen?\n\nWandel in Stadt und Universit\u00e4t\nDie Open-Access-Tage 2026 laden dazu ein, diese Fragen und Herausforderungen zu diskutieren und den Wandel des wissenschaftlichen Publikationssystems gemeinsam zu reflektieren, kritisch zu begleiten und aktiv mitzugestalten. Dabei sind die diesj\u00e4hrigen Open-Access-Tage nicht nur in Hinblick auf ihre jubil\u00e4umstr\u00e4chtigen Zahlen \u2013 20. Auflage der Konferenz (davon zum dritten Mal in \u00d6sterreich) an einer Universit\u00e4t, die heuer ihr 60-j\u00e4hriges Bestehen feiert \u2013 besonders, sondern auch, weil sie in der Stadt Linz stattfinden, die selbst ein Ort des Wandels ist.\n\nLinz hat sich in den letzten Jahrzehnten von einer grauen Industriestadt zu einem bunten, international beachteten Ort f\u00fcr Kunst, Kultur Technologie und Gesellschaft entwickelt, in dem digitale Innovation auf gesellschaftliche Reflexion trifft. Auch wenn die Stahlwerke der Voestalpine weiterhin gr\u00f6\u00dfter Arbeitgeber der Stadt sind, so bietet Linz mit zahlreichen Museen, dem Mural Harbor, dem Ars Electronica Festival oder der Klangwolke eine bunte Kunst- und Kulturszene sowie gr\u00fcne Oasen entlang der Donau. 2009 war Linz europ\u00e4ische Kulturhauptstadt und ist mittlerweile von der UNESCO als \u201eCity of Media Arts\u201c ausgezeichnet worden.\n\nAuch die Johannes Kepler Universit\u00e4t hat sich in ihren 60 Jahren sehr gewandelt. Als Hochschule f\u00fcr Wirtschaftswissenschaften gegr\u00fcndet, ist sie heute die drittgr\u00f6\u00dfte Arbeitgeberin in Linz und die gr\u00f6\u00dfte Bildungseinrichtung Ober\u00f6sterreichs. Sie bietet an ihrem Campus am Rande der Stadt einen Ort f\u00fcr Forschung und Lehre in einem breiten Spektrum an F\u00e4chern, von Rechtswissenschaften bis Humanmedizin, von Soziologie bis Artificial Intelligence. An einer der ersten Campusuniversit\u00e4ten in \u00d6sterreich, die sich bewusst als zusammenh\u00e4ngender Forschungsraum positioniert, begegnen sich die Wissenschaften nicht nur r\u00e4umlich, sondern auch inhaltlich. Diese Interdisziplinarit\u00e4t spiegelt sich auch im Selbstverst\u00e4ndnis der Universit\u00e4t wider, die auf gesellschaftliche Relevanz und Transfer setzt \u2013 Aspekte, die auch f\u00fcr Open Access relevant sind.\n\nDas Orts- und Programmkomitee freuen sich darauf, die Teilnehmenden der Open-Access-Tage 2026 unter dem Motto \u201eWandel mit Verantwortung gestalten\u201c in Linz an der Johannes Kepler Universit\u00e4t begr\u00fc\u00dfen zu d\u00fcrfen \u2013 in einer Stadt und an einer Universit\u00e4t, die selbst Teil dieser Transformation sind.","doi":"https://doi.org/10.64395/aab8c-19631","funding_references":null,"guid":"https://open-access.network/blog/einblicke-zum-call-for-proposals-der-open-access-tage-2026","id":"629f04c2-0f1a-4d94-9cfd-466f06af90c4","image":null,"images":[],"indexed":true,"indexed_at":1776347991,"language":"de","parent_doi":null,"published_at":1776344806,"reference":[],"registered_at":0,"relationships":[],"rid":"r4ctm-spw73","status":"active","summary":"Einblicke zum Call for Proposals der Open-Access-Tage 2026 Vom 28.09. bis 30.09.2026 finden die diesj\u00e4hrigen Open-Access-Tage an der Johannes Kepler Universit\u00e4t Linz statt. Der Call for Proposals f\u00fcr Vortr\u00e4ge und Workshops l\u00e4uft noch bis zum 16.04. und steht unter dem Motto \u201eWandel mit Verantwortung gestalten\u201c. Die Ortskomitee-Mitglieder Susanne Luger und Christopher Fabbro geben einige Einblicke sowohl zum Motto als auch zum Veranstaltungsort.","tags":["Konferenz"],"title":"Einblicke zum Call for Proposals der Open-Access-Tage 2026","updated_at":1776344806,"url":"https://open-access.network/blog/einblicke-zum-call-for-proposals-der-open-access-tage-2026","version":"v1"}},{"document":{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":[],"family":"Royle","given":"Stephen","url":"https://orcid.org/0000-0001-8927-6967"}],"blog":{"archive_collection":22145,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22145/20231106080607/","archive_timestamps":null,"authors":[{"name":"Stephen Royle"}],"canonical_url":null,"category":"biologicalSciences","community_id":"141eca21-f9bb-44c7-aa0d-2ca0110390c6","created_at":1673740800,"current_feed_url":null,"description":"x == (s || z). You say it kwontized","doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/d1d0a116-fe9c-4f5a-b8c5-c3b69edb8327/logo","feed_format":"application/atom+xml","feed_url":"https://quantixed.org/feed/atom/","filter":null,"funding":null,"generator":"WordPress","generator_raw":"WordPress 6.7.1","home_page_url":"https://quantixed.org","id":"39d9ccfd-5461-49f3-a061-efaf066c19b6","indexed":false,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":"https://fosstodon.org/@quantixed","prefix":"10.59350","registered_at":1729318765,"relative_url":null,"ror":null,"secure":true,"slug":"quantixed","status":"active","subfield":"1307","subfield_validated":null,"title":"quantixed","updated_at":1776328487.1125,"use_api":true,"use_mastodon":true,"user_id":"4731ee99-7f23-4817-a2cd-8ee71d8f4c64"},"blog_name":"quantixed","blog_slug":"quantixed","content_html":"\n<p>I wanted to know:</p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>how many proteins in the human proteome have transmembrane domains?</li>\n\n\n\n<li>of those that do, how many have 1 or 2 or n transmembrane domains?</li>\n</ol>\n\n\n\n<p>After a little bit of searching, I couldn&#8217;t find any answers. So I decided to use R to retrieve the necessary info from Uniprot and calculate it myself. I thought I&#8217;d post it here in case it&#8217;s useful for others.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Human</h2>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16ee5638&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16ee5638\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3754\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n\n\n\n<p>We&#8217;ll start with the info I wanted. According to Uniprot there are 20,659 proteins in the human proteome. <strong>One quarter of these have one or more TMD</strong>. The majority have one TMD and there are almost 1,000 7TM proteins (all those GPCRs, I guess). There&#8217;s 413 4TM and 327 2TM proteins. We can find examples of 1 through 17 TMDs, there&#8217;s no proteins with 18, 4 proteins with 19TM, 21 with 24TM and 2 with 38TM.</p>\n\n\n\n<p>The analysis is done simply by looking at how many <code>TRANSMEM</code> Uniprot has for each IDs in the reference proteome. I have not distinguished between helical and partial entries, and of course it&#8217;s possible that the annotations are not quite correct.</p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>TMDs</td><td>Count</td><td>Frequency (proteome as %)</td><td>Frequency (TMDPs as %)</td></tr><tr><td>1</td><td>2402</td><td>11.6</td><td>45.8</td></tr><tr><td>2</td><td>327</td><td>1.6</td><td>6.2</td></tr><tr><td>3</td><td>159</td><td>0.8</td><td>3.0</td></tr><tr><td>4</td><td>413</td><td>2.0</td><td>7.9</td></tr><tr><td>5</td><td>77</td><td>0.4</td><td>1.5</td></tr><tr><td>6</td><td>276</td><td>1.3</td><td>5.3</td></tr><tr><td>7</td><td>947</td><td>4.6</td><td>18.0</td></tr><tr><td>8</td><td>83</td><td>0.4</td><td>1.6</td></tr><tr><td>9</td><td>63</td><td>0.3</td><td>1.2</td></tr><tr><td>10</td><td>123</td><td>0.6</td><td>2.3</td></tr><tr><td>11</td><td>75</td><td>0.4</td><td>1.4</td></tr><tr><td>12</td><td>202</td><td>1.0</td><td>3.8</td></tr><tr><td>13</td><td>24</td><td>0.1</td><td>0.5</td></tr><tr><td>14</td><td>26</td><td>0.1</td><td>0.5</td></tr><tr><td>15</td><td>13</td><td>0.1</td><td>0.2</td></tr><tr><td>16</td><td>1</td><td>0.0</td><td>0.0</td></tr><tr><td>17</td><td>9</td><td>0.0</td><td>0.2</td></tr><tr><td>19</td><td>4</td><td>0.0</td><td>0.1</td></tr><tr><td>24</td><td>21</td><td>0.1</td><td>0.4</td></tr><tr><td>38</td><td>2</td><td>0.0</td><td>0.0</td></tr></tbody></table></figure>\n\n\n\n<p>Having written this code, I decided to run some other proteomes to see how they compare.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Model organisms</h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16ef24d0&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16ef24d0\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"3757\" src=\"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3757\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16f00906&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16f00906\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"3756\" src=\"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3756\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16f01da7&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16f01da7\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"3758\" src=\"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3758\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16f04112&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16f04112\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"3755\" src=\"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3755\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n</figure>\n\n\n\n<p>These four organisms have between 18% and 29% of the proteome made of proteins with TMDs. The pattern of numbers of TMDs are kind of similar although there&#8217;s no peak in yeast for 7TM and the peaks for 2, 4, 6 or 12 TMs differ from human.</p>\n\n\n\n<p>Maybe this information is out there in some database or other. As I said, I couldn&#8217;t find something easily. Even if there are more precise ways of determining the TMDs, I think this data is good enough to know roughly what the proportions are.</p>\n\n\n\n<h2 class=\"wp-block-heading\">The code</h2>\n\n\n\n<p>I manually downloaded the fasta.gz files for the reference proteomes. They are currently linked <a href=\"https://www.uniprot.org/proteomes?query=proteome_type%3A1\">here</a>.</p>\n\n\n\n<p>To extract all the Uniprot IDs, I used a shell one-liner:</p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nawk &#039;/^&gt;sp\\|.*\\|/{gsub(/^&gt;sp\\|/,&quot;&quot;); gsub(/\\|.*/,&quot;&quot;); print &quot;&gt;&quot; $0; next} {print}&#039; file.fasta | grep &quot;^&gt;&quot; | sed &#039;s/&gt;//g&#039; &gt; species_uniprot.txt\n</pre></div>\n\n\n<p>Then I used this R script. The main function can probably be simplified. I had to add several checks to make sure I got all the data back from the API. Before posting, I tried to cut it back to make it easier to read, but Ionly succeeded in breaking the script! This is the working version.</p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: r; title: ; notranslate\" title=\"\">\n# if (!require(&quot;BiocManager&quot;, quietly = TRUE)) {\n#   install.packages(&quot;BiocManager&quot;) \n# }\n# BiocManager::install(&quot;biomaRt&quot;)\nlibrary(httr)\nlibrary(stringr)\nlibrary(ggplot2)\nlibrary(biomaRt)\nlibrary(dplyr)\nlibrary(tidyr)\nlibrary(cowplot)\n\n## FUNCTIONS ----\n\nisJobReady &lt;- function(jobId, pollingInterval = 5, maxWaitSeconds = 3600) {\n  if (is.null(jobId) || length(jobId) == 0 || is.na(jobId) || !nzchar(jobId)) {\n    return(FALSE)\n  }\n  nTries &lt;- ceiling(maxWaitSeconds / pollingInterval)\n  for (i in 1:nTries) {\n    url &lt;- paste(&quot;https://rest.uniprot.org/idmapping/status/&quot;, jobId, sep = &quot;&quot;)\n    r &lt;- GET(url = url, accept_json())\n    status &lt;- content(r, as = &quot;parsed&quot;)\n    if (!is.null(status&#x5B;&#x5B;&quot;results&quot;]]) || !is.null(status&#x5B;&#x5B;&quot;failedIds&quot;]])) {\n      return(TRUE)\n    }\n    if (!is.null(status&#x5B;&#x5B;&quot;messages&quot;]])) {\n      print(status&#x5B;&#x5B;&quot;messages&quot;]])\n      return(FALSE)\n    }\n    Sys.sleep(pollingInterval)\n  }\n  return(FALSE)\n}\n\nretrieveUniprotInfo &lt;- function(x,\n                                chunk_size = 5000,\n                                maxWaitSeconds = 3600,\n                                taxId = &quot;9606&quot;,\n                                progress = TRUE) {\n  normalize_uniprot_ids &lt;- function(values) {\n    values &lt;- trimws(values)\n    # Accept FASTA-style headers like: sp|P12345|... or tr|A0A...|...\n    m &lt;- str_match(values, regex(&quot;^&gt;?\\\\s*(?:sp|tr)\\\\|(&#x5B;^|]+)\\\\|&quot;, ignore_case = TRUE))\n    values &lt;- ifelse(!is.na(m&#x5B;, 2]), m&#x5B;, 2], values)\n    values\n  }\n  \n  ids &lt;- unique(normalize_uniprot_ids(x))\n  ids &lt;- ids&#x5B;!is.na(ids) &amp; nzchar(ids)]\n  if (length(ids) == 0) {\n    stop(&quot;No valid identifiers were provided to retrieveUniprotInfo().&quot;)\n  }\n  \n  fields &lt;- &quot;accession,id,protein_name,gene_names,ft_transmem,length,cc_function,cc_subcellular_location,go_p,go_c&quot;\n  acc_pattern &lt;- &quot;^&#x5B;OPQ]&#x5B;0-9]&#x5B;A-Z0-9]{3}&#x5B;0-9](-&#x5B;0-9]+)?$|^&#x5B;A-NR-Z]&#x5B;0-9](?:&#x5B;A-Z]&#x5B;A-Z0-9]{2}&#x5B;0-9]){1,2}(-&#x5B;0-9]+)?$&quot;\n  is_accession &lt;- str_detect(ids, acc_pattern)\n  \n  split_into_chunks &lt;- function(values, chunk_size = chunk_size) {\n    split(values, ceiling(seq_along(values) / chunk_size))\n  }\n  \n  get_next_link &lt;- function(link_header) {\n    if (is.null(link_header)) {\n      return(NULL)\n    }\n    links &lt;- unlist(strsplit(link_header, &quot;,\\\\s*&quot;))\n    next_link &lt;- links&#x5B;str_detect(links, &quot;rel=\\\\\\&quot;next\\\\\\&quot;&quot;)]\n    if (length(next_link) == 0) {\n      return(NULL)\n    }\n    next_url &lt;- str_extract(next_link&#x5B;1], &quot;(?&lt;=&lt;).+?(?=&gt;)&quot;)\n    if (is.na(next_url) || !nzchar(next_url)) {\n      return(NULL)\n    }\n    next_url\n  }\n  \n  read_tsv_response &lt;- function(resp) {\n    read.table(\n      text = content(resp, as = &quot;text&quot;, encoding = &quot;UTF-8&quot;),\n      sep = &quot;\\t&quot;,\n      header = TRUE,\n      fill = TRUE,\n      quote = &quot;&quot;,\n      comment.char = &quot;&quot;,\n      check.names = FALSE\n    )\n  }\n  \n  fetch_from_redirect &lt;- function(redirect_url) {\n    if (is.null(redirect_url) || length(redirect_url) == 0 ||\n        is.na(redirect_url) || !nzchar(redirect_url)) {\n      return(NULL)\n    }\n    \n    # The paged idmapping results endpoint is capped at size &lt;= 500.\n    # Use stream endpoint to retrieve the full chunk in one response.\n    stream_url &lt;- gsub(&quot;/results/&quot;, &quot;/results/stream/&quot;, redirect_url)\n    sep &lt;- ifelse(str_detect(stream_url, &quot;\\\\?&quot;), &quot;&amp;&quot;, &quot;?&quot;)\n    stream_url &lt;- paste0(\n      stream_url,\n      sep,\n      &quot;fields=&quot;, URLencode(fields, reserved = TRUE),\n      &quot;&amp;format=tsv&quot;\n    )\n    \n    r &lt;- GET(url = stream_url)\n    if (status_code(r) &lt; 400) {\n      return(read_tsv_response(r))\n    }\n    \n    # Fallback to paged endpoint if stream is unavailable.\n    sep &lt;- ifelse(str_detect(redirect_url, &quot;\\\\?&quot;), &quot;&amp;&quot;, &quot;?&quot;)\n    url &lt;- paste0(\n      redirect_url,\n      sep,\n      &quot;fields=&quot;, URLencode(fields, reserved = TRUE),\n      &quot;&amp;format=tsv&amp;size=500&quot;\n    )\n    \n    r &lt;- GET(url = url)\n    stop_for_status(r)\n    resultsTable &lt;- read_tsv_response(r)\n    \n    next_url &lt;- get_next_link(headers(r)&#x5B;&#x5B;&quot;link&quot;]])\n    while (!is.null(next_url) &amp;&amp; !is.na(next_url) &amp;&amp; nzchar(next_url)) {\n      r &lt;- GET(url = next_url)\n      stop_for_status(r)\n      resultsTable &lt;- rbind(resultsTable, read_tsv_response(r))\n      next_url &lt;- get_next_link(headers(r)&#x5B;&#x5B;&quot;link&quot;]])\n    }\n    \n    resultsTable\n  }\n  \n  map_ids &lt;- function(values, from_db, to_db, chunk_size, taxId = NULL,\n                      label = &quot;ids&quot;) {\n    if (length(values) == 0) {\n      return(NULL)\n    }\n    \n    results_list &lt;- list()\n    chunks &lt;- split_into_chunks(values, chunk_size = chunk_size)\n    n_chunks &lt;- length(chunks)\n    for (i in seq_along(chunks)) {\n      chunk &lt;- chunks&#x5B;&#x5B;i]]\n      if (isTRUE(progress)) {\n        cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d (%d ids)\\n&quot;,\n                    label, i, n_chunks, length(chunk)))\n      }\n      \n      files &lt;- list(\n        ids = paste0(chunk, collapse = &quot;,&quot;),\n        from = from_db,\n        to = to_db\n      )\n      if (!is.null(taxId)) {\n        files$taxId &lt;- taxId\n      }\n      \n      r &lt;- POST(url = &quot;https://rest.uniprot.org/idmapping/run&quot;, body = files,\n                encode = &quot;multipart&quot;, accept_json())\n      stop_for_status(r)\n      submission &lt;- content(r, as = &quot;parsed&quot;, encoding = &quot;UTF-8&quot;)\n      \n      job_id &lt;- submission&#x5B;&#x5B;&quot;jobId&quot;]]\n      if (is.null(job_id) || length(job_id) == 0 || is.na(job_id) || !nzchar(job_id)) {\n        if (isTRUE(progress)) {\n          cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: no jobId returned\\n&quot;,\n                      label, i, n_chunks))\n        }\n        next\n      }\n      if (!isJobReady(job_id, maxWaitSeconds = maxWaitSeconds)) {\n        if (isTRUE(progress)) {\n          cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: timeout/not ready\\n&quot;,\n                      label, i, n_chunks))\n        }\n        next\n      }\n      \n      details_url &lt;- paste(&quot;https://rest.uniprot.org/idmapping/details/&quot;,\n                           job_id, sep = &quot;&quot;)\n      r &lt;- GET(url = details_url, accept_json())\n      stop_for_status(r)\n      details &lt;- content(r, as = &quot;parsed&quot;, encoding = &quot;UTF-8&quot;)\n      \n      redirect_url &lt;- details&#x5B;&#x5B;&quot;redirectURL&quot;]]\n      if (is.null(redirect_url) || length(redirect_url) == 0 ||\n          is.na(redirect_url) || !nzchar(redirect_url)) {\n        if (isTRUE(progress)) {\n          cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: missing redirectURL\\n&quot;,\n                      label, i, n_chunks))\n        }\n        next\n      }\n      chunk_result &lt;- fetch_from_redirect(redirect_url)\n      if (is.null(chunk_result)) {\n        if (isTRUE(progress)) {\n          cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: invalid redirectURL\\n&quot;,\n                      label, i, n_chunks))\n        }\n        next\n      }\n      \n      results_list&#x5B;&#x5B;length(results_list) + 1]] &lt;- chunk_result\n      if (isTRUE(progress)) {\n        cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: completed\\n&quot;,\n                    label, i, n_chunks))\n      }\n    }\n    \n    if (length(results_list) == 0) {\n      return(NULL)\n    }\n    do.call(rbind, results_list)\n  }\n  \n  accession_ids &lt;- ids&#x5B;is_accession]\n  gene_like_ids &lt;- ids&#x5B;!is_accession]\n  \n  acc_results &lt;- map_ids(\n    values = accession_ids,\n    from_db = &quot;UniProtKB_AC-ID&quot;,\n    to_db = &quot;UniProtKB&quot;,\n    chunk_size = chunk_size,\n    label = &quot;accessions&quot;\n  )\n  \n  gene_results &lt;- map_ids(\n    values = gene_like_ids,\n    from_db = &quot;Gene_Name&quot;,\n    to_db = &quot;UniProtKB-Swiss-Prot&quot;,\n    chunk_size = chunk_size,\n    taxId = taxId,\n    label = &quot;gene_names&quot;\n  )\n  \n  results_list &lt;- list()\n  if (!is.null(acc_results)) {\n    results_list&#x5B;&#x5B;length(results_list) + 1]] &lt;- acc_results\n  }\n  if (!is.null(gene_results)) {\n    results_list&#x5B;&#x5B;length(results_list) + 1]] &lt;- gene_results\n  }\n  \n  if (length(results_list) == 0) {\n    stop(&quot;No UniProt results were returned. Check identifiers and taxId.&quot;)\n  }\n  \n  resultsTable &lt;- do.call(rbind, results_list)\n  if (&quot;Entry&quot; %in% colnames(resultsTable)) {\n    resultsTable &lt;- resultsTable&#x5B;!duplicated(resultsTable$Entry), ]\n  }\n  return(resultsTable)\n}\n\n\n\n## SCRIPT ----\n\nspecies &lt;- c(&quot;human&quot;, &quot;zebrafish&quot;, &quot;drosophila&quot;, &quot;worm&quot;, &quot;yeast&quot;)\nsci_names &lt;- c(&quot;human&quot; = &quot;Homo sapiens&quot;, &quot;zebrafish&quot; = &quot;Danio rerio&quot;, &quot;drosophila&quot; = &quot;Drosophila melanogaster&quot;,\n               &quot;worm&quot; = &quot;Caenorhabditis elegans&quot;, &quot;yeast&quot; = &quot;Saccharomyces cerevisiae&quot;)\n\nfor (org in species) {\n  # look up scientific name of org\n  sci_name &lt;- sci_names&#x5B;org]\n  output_path &lt;- paste0(&quot;Output/Data/&quot;, org, &quot;_uniprot.csv&quot;)\n  if(file.exists(output_path)) {\n    message(paste(&quot;File&quot;, output_path, &quot;already exists. Loading&quot;, org))\n    df &lt;- read.csv(output_path)\n  } else {\n    message(paste(&quot;Retrieving UniProt info for&quot;, org))\n    species_ids &lt;- read.delim(paste0(&quot;Data/&quot;, org, &quot;_uniprot.txt&quot;), header = FALSE)\n    names(species_ids) &lt;- c(&quot;uniprot_id&quot;)\n    df &lt;- retrieveUniprotInfo(species_ids$uniprot_id)\n    # save this result\n    write.csv(df, output_path, row.names = FALSE)\n  }\n  \n  df$tms &lt;- str_count(df$Transmembrane, &quot;TRANSMEM&quot;)\n  tm_counts &lt;- df %&gt;%\n    group_by(tms) %&gt;%\n    summarise(count = n()) %&gt;% \n    filter(tms &gt; 0)\n  \n  p1 &lt;- ggplot(tm_counts, aes(x = tms, y = count)) +\n    geom_col(fill = &quot;#009988&quot;) +\n    labs(x = &quot;Transmembrane domains&quot;, y = &quot;Count&quot;,\n         title = sci_name) +\n    lims(x = c(0.5,NA), y = c(0,NA)) +\n    theme_bw(10)\n  \n  p2 &lt;- SuperPlotR::pieplot(x1 = c(sum(df$tms == 0), sum(df$tms &gt; 0)),\n                            cols = c(&quot;#bbbbbb&quot;, &quot;#009988&quot;)) +\n    # blank background and no legend\n    theme_void() +\n    theme(legend.position = &quot;none&quot;)\n  \n  # inset p2 in p1 and add information about the percentages\n  p &lt;- ggdraw() +\n    draw_plot(p1) +\n    # top right\n    draw_plot(p2, x = 0.9, y = 0.9, hjust = 1, vjust = 1, width = 0.4, height = 0.4) +\n    draw_label(paste0(&quot;Total Proteins: &quot;, nrow(df),\n                      &quot;\\nNo TM: &quot;, round(sum(df$tms == 0) / nrow(df) * 100, 1),\n                      &quot;%\\nWith TM(s): &quot;,\n                      round(sum(df$tms &gt; 0) / nrow(df) * 100, 1), &quot;%&quot;),\n               x = 0.97, y = 0.85, hjust = 1, vjust = 1, size = 8)\n  plot_path &lt;- paste0(&quot;Output/Plots/&quot;, org, &quot;_uniprot_tm_counts.png&quot;)\n  ggsave(plot_path, p, width = 1600, height = 900, units = &quot;px&quot;, dpi = 300)\n}\n</pre></div>\n\n\n<p>Note that I am using <code>{cowplot}</code> at the end to inset the pie chart and to add the text onto the main plot.</p>\n\n\n\n<p>&#8212;</p>\n\n\n\n<p>The post title comes from &#8220;My Domain&#8221; by Bernard Butler from his People Move On album.</p>\n","doi":"https://doi.org/10.59350/0ahfj-mxf51","funding_references":null,"guid":"https://quantixed.org/?p=3753","id":"70276eb9-e532-42ea-b09c-8d05e8df0b84","image":"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts.png","images":[{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts.png","width":"1024"},{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts.png","width":"1024"},{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts.png","width":"1024"},{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts.png","width":"1024"},{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts.png","width":"1024"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png"}],"indexed":true,"indexed_at":1776341368,"language":"en","parent_doi":null,"published_at":1776341040,"reference":[],"registered_at":0,"relationships":[],"rid":"k78xz-cmp18","status":"active","summary":"I wanted to know: how many proteins in the human proteome have transmembrane domains? of those that do, how many have 1 or 2 or n transmembrane domains? After a little bit of searching, I couldn\u2019t find any answers. So I decided to use R to retrieve the necessary info from Uniprot and calculate it myself. I thought I\u2019d post it here in case it\u2019s useful for others. Human   We\u2019ll start with the info I wanted.","tags":["Science","Bioinformatics","Cell Biology","Proteins","Rstats"],"title":"My Domain: proteome-wide scanning of TMDs","updated_at":1776112087,"url":"https://quantixed.org/2026/04/16/my-domain-proteome-wide-scanning-of-tmds/","version":"v1"}},{"document":{"abstract":null,"archive_url":null,"authors":[{"affiliation":[{"name":"Front Matter"}],"contributor_roles":[],"family":"Fenner","given":"Martin","url":"https://orcid.org/0000-0003-1419-2405"}],"blog":{"archive_collection":22096,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22096/20231101172748/","archive_timestamps":[20231101172748,20240501180447,20241101172601],"authors":[{"name":"Martin Fenner","url":"https://orcid.org/0000-0003-1419-2405"}],"canonical_url":null,"category":"computerAndInformationSciences","community_id":"91dd2c24-5248-4510-9c2b-30b772bf8b60","created_at":1672561153,"current_feed_url":"","description":"The Front Matter Blog covers the intersection of science and technology since 2007.","doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/15a362ea-8138-42b8-917f-1840a92addf8/logo","feed_format":"application/atom+xml","feed_url":"https://blog.front-matter.de/atom","filter":null,"funding":null,"generator":"Ghost","generator_raw":"Ghost 5.52","home_page_url":"https://blog.front-matter.de","id":"74659bc5-e36e-4a27-901f-f0c8d5769cb8","indexed":null,"issn":"2749-9952","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":"https://hachyderm.io/@mfenner","prefix":"10.53731","registered_at":1729685319,"relative_url":null,"ror":null,"secure":true,"slug":"front_matter","status":"active","subfield":"1710","subfield_validated":null,"title":"Front Matter","updated_at":1776327653.24951,"use_api":true,"use_mastodon":true,"user_id":"8498eaf6-8c58-4b58-bc15-27eda292b1aa"},"blog_name":"Front Matter","blog_slug":"front_matter","content_html":"<p>All science blogs participating in the Rogue Scholar science blog archive provide a feed (in RSS, Atom or JSON Feed format) that includes not only metadata and full-text content for all archived blog posts, but also metadata about the blog itself. This includes required metadata such as the blog homepage and feed URL, but also an optional description, logo, license, language and science subject area, using the OpenAlex subfield, which maps to the Scopus All Science Journal Classification (<a href=\"https://service.elsevier.com/app/answers/detail/a_id/12007/supporthub/scopus/\" rel=\"noreferrer\">ASJC</a>) widely used to classify journals. Rogue Scholar also supports an optional International Serial Number (<a href=\"https://portal.issn.org/\" rel=\"noreferrer\">ISSN</a>) as globally unique identifier for the blog \u2013 this blog has ISSN <a href=\"https://portal.issn.org/resource/ISSN/2749-9952\">2749-9952</a>. While I encourage all Rogue Scholar blogs to obtain an ISSN, there are two important limitations of the ISSN:</p><ul><li>a <a href=\"https://www.dnb.de/EN/Professionell/Services/ISSN/_content/eintrag02_akk2.html\" rel=\"noreferrer\">new ISSN is assigned when the title of the publication changes</a>, so it is not a persistent identifier,</li><li>an ISSN is not an actionable identifier, i.e. does not resolve to the landing page of the blog or other periodical publication (similar to some other persistent identifiers such as ORCID).</li></ul><p>An alternative approach is using DOIs as globally unique persistent identifier for the blog, and this aligns with using DOIs to <a href=\"https://doi.org/10.53731/w6nzs-jta75\" rel=\"noreferrer\">register blog posts</a>. The DOI registration agencies Crossref and DataCite support the resource type <strong>Journal</strong> and some other periodical publication formats (e.g. <strong>Book Series</strong>, <strong>Proceedings Series</strong>), but unfortunately not <strong>Blog</strong>. And they support the optional inclusion of one or more ISSNs.</p><p>Until Crossref and DataCite support the resource type <strong>Blog</strong>, Rogue Scholar will register blogs as resource type <strong>Journal</strong>, and include the optional ISSN. Front Matter is a Crossref member and can do this for all blogs participating in Rogue Scholar where it registers the DOIs (almost all of them). The Crossref resource type <strong>Journal</strong> unfortunately doesn't support many metadata (e.g. no subject classification), and <strong>Journal</strong> is mainly used as a container to describe a collection of <strong>Journal Articles</strong>. The DOI uses the same DOI prefix as the corresponding blog posts, and the blog slug (unique identifier used everywhere in Rogue Scholar) as the suffix.</p><p>The new blog DOI is displayed on the blog community page (e.g. <a href=\"https://rogue-scholar.org/communities/front_matter\" rel=\"noreferrer\">here</a> for this blog), and clicking on the DOI redirects users to the blog homepage (also shown, as is the ISSN).</p><figure class=\"kg-card kg-image-card\"><img src=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png\" class=\"kg-image\" alt=\"\" loading=\"lazy\" width=\"2000\" height=\"944\" srcset=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png 600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png 1000w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png 1600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png 2152w\" sizes=\"(min-width: 720px) 720px\"></figure><p>It will take a few days until the DOIs for all blogs where Rogue Scholar manages DOI registration are registered.</p><h3 id=\"blog-volumes\">Blog Volumes</h3><p>Periodical publications typically have page numbers, issues and volumes. While page numbers and issues are typically not used for online publication formats such as blogs, volumes still make sense in a different context. One particular challenge with science blogs that the Rogue Scholar science blog archive tries to address is long-term archiving. While <a href=\"https://doi.org/10.53731/g60vh-3ng48\" rel=\"noreferrer\">different approaches</a> can address is problem, the basic idea is <em>Lots of Copies Keep Stuff Safe</em> (<a href=\"https://en.wikipedia.org/wiki/LOCKSS\" rel=\"noreferrer\">LOCKSS</a>). And <strong>blog volumes</strong> \u2013 all blog posts from a particular blog from a given year \u2013 can simplify long-term blog archiving in multiple places.</p><p>This week Rogue Scholar implemented blog volumes for all participating blogs:</p><figure class=\"kg-card kg-image-card\"><img src=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png\" class=\"kg-image\" alt=\"\" loading=\"lazy\" width=\"2000\" height=\"748\" srcset=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png 600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png 1000w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png 1600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w2400/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png 2400w\" sizes=\"(min-width: 720px) 720px\"></figure><p>Clicking on a year shows all blog posts from that blog published in that year:</p><figure class=\"kg-card kg-image-card\"><img src=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png\" class=\"kg-image\" alt=\"\" loading=\"lazy\" width=\"2000\" height=\"1041\" srcset=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png 600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png 1000w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png 1600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w2400/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png 2400w\" sizes=\"(min-width: 720px) 720px\"></figure><p>Currently this is an automatically generated search in Rogue Scholar. The next step is generating a downloadable file with all content and metadata of the blog posts published in that year that can be archived in Rogue Scholar and elsewhere. I am working on generating these blog volumes in ePub format. These blog volumes will be registered with DOIs using the Crossref <strong>Journal Volume</strong> resource type (again, <strong>Blog Volume</strong> as resource type doesn't exist yet, and DataCite also has no <strong>Journal Volume</strong> ResourceTypeGeneral, <strong>Collection</strong> is the closest match). </p><p>These blog volumes can then be archived also in other repositories, and the ePub format makes reuse easier compare to PDF, as it is much easier to extract content from ePub. It has not escaped our notice that the specific archiving we are postulating immediately suggests a possible copying mechanism for a blog when its authors want to migrate to a different blogging platform.</p><p>Please use&nbsp;<a href=\"https://join.slack.com/t/rogue-scholar/shared_invite/zt-2ylpq1yoy-o~TkxDarfz5LSMhGSCYtiA\" rel=\"noreferrer\">Slack</a>,&nbsp;<a href=\"mailto:info@rogue-scholar.org\" rel=\"noreferrer\">email</a>,&nbsp;<a href=\"https://wisskomm.social/@rogue_scholar\" rel=\"noreferrer\">Mastodon</a>, or&nbsp;<a href=\"https://bsky.app/profile/rogue-scholar.bsky.social\" rel=\"noreferrer\">Bluesky</a>&nbsp;if you have any questions or comments, in particular if you are interested in archiving blogs via blog volumes generated by Rogue Scholar.</p><div class=\"kg-card kg-callout-card kg-callout-card-blue\"><div class=\"kg-callout-text\">Rogue Scholar is a scholarly infrastructure that is free for all authors and readers. You can support Rogue Scholar with a one-time or recurring&nbsp;<a href=\"https://ko-fi.com/rogue_scholar\" rel=\"noreferrer\">donation</a>&nbsp;or by becoming a sponsor.</div></div><h2 id=\"references\">References</h2><ol><li>Fenner, M. (2023, September 22). DOI registration workflow for a science blog. <em>Front Matter</em>. <a href=\"https://doi.org/10.53731/w6nzs-jta75\">https://doi.org/10.53731/w6nzs-jta75</a></li><li>Fenner, M. (2023, November 9). Archiving Rogue Scholar blogs with the Internet Archive. <em>Front Matter</em>. <a href=\"https://doi.org/10.53731/g60vh-3ng48\">https://doi.org/10.53731/g60vh-3ng48</a></li></ol>","doi":"https://doi.org/10.53731/ys8cq-f7659","funding_references":null,"guid":"https://doi.org/10.53731/ys8cq-f7659","id":"83f3637e-03c7-4331-bcc1-26c836b86a2e","image":"https://images.unsplash.com/photo-1592891103683-67b1d637c1a1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE5fHxyZWdpc3RlcnxlbnwwfHx8fDE3NzYzMjcwNzB8MA&ixlib=rb-4.1.0&q=80&w=2000","images":[{"height":"944","sizes":"(min-width: 720px) 720px","src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png","srcset":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png","width":"2000"},{"height":"748","sizes":"(min-width: 720px) 720px","src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png","srcset":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w2400/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png","width":"2000"},{"height":"1041","sizes":"(min-width: 720px) 720px","src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png","srcset":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w2400/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png","width":"2000"},{"src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png"},{"src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png"},{"src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png"}],"indexed":true,"indexed_at":1776332917,"language":"en","parent_doi":null,"published_at":1776332710,"reference":[{"id":"https://doi.org/10.53731/w6nzs-jta75","type":"BlogPost","unstructured":"Fenner, M. (2023, September 22). DOI registration workflow for a science blog. <i>Front Matter</i>. https://doi.org/10.53731/w6nzs-jta75"},{"id":"https://doi.org/10.53731/g60vh-3ng48","type":"Article","unstructured":"Fenner, M. (2023). Archiving Rogue Scholar blogs with the Internet Archive. In <i>Front Matter</i> (Version v1). Crossref. https://doi.org/10.53731/g60vh-3ng48"}],"registered_at":0,"relationships":[],"rid":"8eek7-58g89","status":"active","summary":"All science blogs participating in the Rogue Scholar science blog archive provide a feed (in RSS, Atom or JSON Feed format) that includes not only metadata and full-text content for all archived blog posts, but also metadata about the blog itself.","tags":["Rogue Scholar"],"title":"Rogue Scholar starts to register blog DOIs","updated_at":1776332710,"url":"https://blog.front-matter.de/posts/rogue-scholar-starts-to-register-blog-dois/","version":"v1"}},{"document":{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":["Author"],"family":"Robitaille","given":"Alec","url":"https://orcid.org/0000-0002-4706-1762"},{"contributor_roles":["Author"],"name":"Lucy D&#39;Agostino McGowan","url":"https://orcid.org/0000-0001-7297-9359"},{"contributor_roles":["Editor"],"family":"Padgham","given":"Mark","url":"https://orcid.org/0000-0003-2172-5265"},{"contributor_roles":["Author"],"family":"Bellini Saibene","given":"Yanina","url":"https://orcid.org/0000-0002-4522-7466"}],"blog":{"archive_collection":22126,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22126/20231105110646/","archive_timestamps":[20231105110646,20240505190836,20241105110650,20250505110723],"authors":[{"name":"The rOpenSci Team"}],"canonical_url":null,"category":"computerAndInformationSciences","community_id":"1e70f18f-d85d-4b86-af0c-0dc375b091bc","created_at":1693440000,"current_feed_url":null,"description":"Open Tools and R Packages for Open Science","doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/19c501a7-647b-4a11-9f5e-cf400817cce3/logo","feed_format":"application/feed+json","feed_url":"https://ropensci.org/blog/index.json","filter":null,"funding":null,"generator":"Hugo","generator_raw":"Hugo -- gohugo.io","home_page_url":"https://ropensci.org/blog","id":"ba402233-14af-48e4-b8b1-6fd22ac75a0c","indexed":false,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":1729793201,"relative_url":null,"ror":null,"secure":true,"slug":"ropensci","status":"active","subfield":"1710","subfield_validated":null,"title":"rOpenSci - open tools for open science","updated_at":1776328605.507327,"use_api":null,"use_mastodon":false,"user_id":"3ea9676b-41b6-4e57-aeda-44a7d7fe1dba"},"blog_name":"rOpenSci - open tools for open science","blog_slug":"ropensci","content_html":"<p>At rOpenSci, we\u2019re continually grateful for the support and engagement of our community, who help make research open-source stronger, more inclusive, and more collaborative. The <a href=\"https://ropensci.org/software-review/\">software peer review program</a> continues to grow, and today we announce that our editorial team keeps expanding:</p><p>We\u2019re excited to welcome <em>Alec Robitaille</em> and <em>Lucy D\u2019Agostino McGowan</em> as new editors. Alec joins our general review team, and Lucy our statistical software review team. Their expertise and dedication will help sustain and strengthen software peer review, ensuring that software reviews continue to meet the highest standards of quality, transparency, and impact.</p><p>Meet our new editors!</p><h2 id=\"alec-robitaille\"><a class=\"anchor d-print-none\" href=\"https://ropensci.org/blog/2026/04/16/editors2026//#alec-robitaille\"> <small>\ud83d\udd17</small></a>Alec Robitaille</h2><div class=\"float-left\"><figure class=\"m-0\"><img alt=\"headshot of Alec Robitaille\" src=\"https://ropensci.org/img/team/alec-robitaille.png\" style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\" zgotmplz=\"\"/> <p>                  Alec is a graduate student at Memorial University of Newfoundland and Labrador (Canada) studying foraging ecology, habitat selection and social networks in caribou and other ungulates. He has been involved in many projects along the way, from measuring muskrat habitat and lake ice dynamics at McGill University to estimating drought sensitivity in Canada\u2019s forests with the Canadian Forestry Service. Passionate about teaching open science and programming, he regularly mentors peers, runs workshops, develops example repositories, and organizes a Bayesian stats colearning group. He maintains the package <a href=\"https://github.com/ropensci/spatsoc\">spatsoc</a> (<a href=\"https://github.com/ropensci/software-review/issues/237\">reviewed</a> by rOpenSci in 2018) and has developed smaller packages with diverse applications including remote sensing (<a href=\"https://cran.r-project.org/web/packages/irg/\">irg</a>), social networks (<a href=\"https://cran.r-project.org/web/packages/hwig/\">hwig</a>), camera trap monitoring (<a href=\"https://github.com/robitalec/camtrapmonitoring\">camtrapmonitoring</a>), and animal movement (<a href=\"https://cran.r-project.org/web/packages/distanceto/\">distanceto</a>). He reviewed the <a href=\"https://github.com/ropensci/software-review/issues/568\">ohun</a>, <a href=\"https://github.com/ropensci/software-review/issues/638\">chopin</a>, and <a href=\"https://github.com/ropensci/software-review/issues/653\">emodnet.wfs</a> packages for rOpenSci, guest edited for the <a href=\"https://github.com/ropensci/software-review/issues/663\">rredlist</a> package and is currently handling the reviews for the <a href=\"https://github.com/ropensci/software-review/issues/732\">ActiGlobe</a>, and <a href=\"https://github.com/ropensci/software-review/issues/754\">saperlipopette</a> packages.                </p> </figure> </div><div style=\"clear: both;\"></div><p>Alec on <a href=\"https://github.com/robitalec\">GitHub</a>, <a href=\"http://robitalec.ca/\">Website</a>.</p><blockquote class=\"blockquote text-left\"> <p class=\"mb-0\">I first connected with the rOpenSci community through the review process for the package spatsoc in 2018 as part of our manuscript submission at Methods in Ecology and Evolution. During the review, I was thoroughly impressed by how welcoming the community was, and how effective the process was in helping me learn how to improve the package. rOpenSci is a landmark in the R and open science ecosystems with an ever evolving community to learn from and to be a part of. I am very grateful to be given the opportunity to continue contributing to rOpenSci in this new role as editor.</p> <footer class=\"blockquote-footer\">Alec L. Robitaille </footer></blockquote><h2 id=\"lucy-dagostino-mcgowan\"><a class=\"anchor d-print-none\" href=\"https://ropensci.org/blog/2026/04/16/editors2026//#lucy-dagostino-mcgowan\"> <small>\ud83d\udd17</small></a>Lucy D\u2019Agostino McGowan</h2><div class=\"float-left\"><figure class=\"m-0\"><img alt=\"headshot of Lucy D'Agostino McGowan\" src=\"https://ropensci.org/img/team/lucy-dagonstino-mcgowan.jpg\" style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\" zgotmplz=\"\"/> <p>                  Lucy D\u2019Agostino McGowan is an associate professor in the Department of Statistical Sciences at Wake Forest University. She received her PhD in Biostatistics from Vanderbilt University and completed her postdoctoral training at Johns Hopkins University Bloomberg School of Public Health. Her research focuses on causal inference, statistical communication, analytic design theory, and data science pedagogy. Lucy can be found blogging at <a href=\"https://livefreeordichotomize.com/\">livefreeordichotomize.com</a>, on Blue Sky <a href=\"https://bsky.app/profile/lucystats.bsky.social\">@LucyStats.bsky.social</a>, and podcasting on <a href=\"https://open.spotify.com/show/1L8TqB17Peo7jNgXuPObwi\">Casual Inference</a>.                </p> </figure> </div><div style=\"clear: both;\"></div><p>Lucy on <a href=\"https://github.com/LucyMcGowan\">GitHub</a>, <a href=\"https://www.lucymcgowan.com/\">Website</a>.</p><blockquote class=\"blockquote text-left\"> <p class=\"mb-0\">I am so thrilled to join the rOpenSci editorial team! I love the rOpenSci community and mission and am grateful for the opportunity to contribute.</p> <footer class=\"blockquote-footer\">Lucy D\u2019Agostino McGowan </footer></blockquote><h2 id=\"about-the-software-peer-review-program\"><a class=\"anchor d-print-none\" href=\"https://ropensci.org/blog/2026/04/16/editors2026//#about-the-software-peer-review-program\"> <small>\ud83d\udd17</small></a>About the Software Peer Review Program</h2><p>rOpenSci\u2019s software peer review program brings together volunteers to collaboratively review scientific and statistical software according to transparent, constructive, and open standards. Editors manage submissions, coordinate reviewers, and help guide packages through review to improve code quality, documentation, and usability.</p><p>This program is possible thanks to the many community members: authors submitting their packages, reviewers volunteering their time and expertise, and editors like Alec and Lucy who help managing reviews and maintaining a supportive process.</p><h2 id=\"get-involved\"><a class=\"anchor d-print-none\" href=\"https://ropensci.org/blog/2026/04/16/editors2026//#get-involved\"> <small>\ud83d\udd17</small></a>Get Involved</h2><p>Are you considering submitting your package for review? These resources will help:</p><ul><li>About <a href=\"https://ropensci.org/software-review/\">rOpenSci Software Peer Review</a>;</li><li>Browse the online book <a href=\"https://devguide.ropensci.org/\">rOpenSci Packages: Development, Maintenance, and Peer Review</a> and <a href=\"https://stats-devguide.ropensci.org\">rOpenSci Statistical Software Peer Review</a>;</li><li>Read public <a href=\"https://github.com/ropensci/software-review/issues\">software review threads on GitHub</a></li></ul><p>Would you like to review packages? Fill out the <a href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\">rOpenSci Reviewer Sign-Up Form</a> to volunteer to review.</p><p>Welcome again <strong>Alec and Lucy</strong>! We\u2019re thrilled to have you join the editorial team.</p>","doi":"https://doi.org/10.59350/v939m-qkj86","funding_references":null,"guid":"https://doi.org/10.59350/v939m-qkj86","id":"20501628-637e-4ec4-8b35-bdf597339d8c","image":null,"images":[{"alt":"headshot of Alec Robitaille","src":"https://ropensci.org/img/team/alec-robitaille.png"},{"alt":"headshot of Lucy D'Agostino McGowan","src":"https://ropensci.org/img/team/lucy-dagonstino-mcgowan.jpg"},{"src":"https://ropensci.org/img/team/alec-robitaille.png"},{"src":"https://ropensci.org/img/team/lucy-dagonstino-mcgowan.jpg"}],"indexed":true,"indexed_at":1776313654,"language":"en","parent_doi":null,"published_at":1776297600,"reference":[],"registered_at":0,"relationships":[],"rid":"w9g9j-0bd39","status":"active","summary":"At rOpenSci, we\u2019re continually grateful for the support and engagement of our community, who help make research open-source stronger, more inclusive, and more collaborative. The software peer review program continues to grow, and today we announce that our editorial team keeps expanding: We\u2019re excited to welcome\n<em>\n Alec Robitaille\n</em>\nand\n<em>\n Lucy D\u2019Agostino McGowan\n</em>\nas new editors.","tags":["Software Peer Review","Editors","ROpenSci Team"],"title":"Expanding the Editorial Team: Alec Robitaille and Lucy D'Agostino McGowan Join as Editors","updated_at":1776311326,"url":"https://ropensci.org/blog/2026/04/16/editors2026/","version":"v1"}},{"document":{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":[],"family":"Strecker","given":"Dorothea","url":"https://orcid.org/0000-0002-9754-3807"},{"affiliation":[{"id":"https://ror.org/01hcx6992","name":"Humboldt-Universit\u00e4t zu Berlin"}],"contributor_roles":[],"family":"Ochsner","given":"Catharina","url":"https://orcid.org/0009-0005-3885-3951"}],"blog":{"archive_collection":24081,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":null,"canonical_url":null,"category":"computerAndInformationSciences","community_id":"53174590-b8d0-4c88-b121-4ca75f7de145","created_at":1717668020,"current_feed_url":null,"description":"Research Group Information Management @ Humboldt-Universit\u00e4t zu Berlin","doi":null,"doi_as_guid":false,"favicon":null,"feed_format":"application/rss+xml","feed_url":"https://infomgnt.org/index.xml","filter":null,"funding":null,"generator":"Quarto","generator_raw":"Quarto 1.4.555","home_page_url":"https://infomgnt.org","id":"17927ce5-1239-43fb-a3c9-2acb8a679d11","indexed":true,"issn":"2944-6848","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":1729503399,"relative_url":null,"ror":null,"secure":true,"slug":"infomgnt","status":"active","subfield":"3309","subfield_validated":null,"title":"Research Group Information Management @ Humboldt-Universit\u00e4t zu Berlin","updated_at":1776327809.623468,"use_api":null,"use_mastodon":false,"user_id":"dbffda7d-f391-48fb-a6d2-d4a284c59c8d"},"blog_name":"Research Group Information Management @ Humboldt-Universit\u00e4t zu Berlin","blog_slug":"infomgnt","content_html":"<div class=\"quarto-figure quarto-figure-center\">\n<figure class=\"figure\">\n<p><img class=\"img-fluid figure-img\" src=\"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/doctoral_writing_retreat.jpg\"/></p>\n<figcaption class=\"figure-caption\"><a href=\"https://unsplash.com/de/fotos/person-die-laptop-benutzt-vZJdYl5JVXY\">Foto</a> by <a href=\"https://unsplash.com/de/@kaitlynbaker\">Kaitlyn Baker</a> from <a href=\"https://unsplash.com/\">Unsplash</a>.</figcaption>\n</figure>\n</div>\n<p>The Ambassadors for Open Science program of the <a href=\"https://www.berlin-university-alliance.de/index.html\">Berlin University Alliance (BUA)</a> aims to promote the knowledge and application of Open Science in various subjects. As Open Science experts and enthusiasts, the ambassadors show researchers, students and decision-makers at their institution how they can benefit from and make use of Open Science infrastructure (<span class=\"citation\" data-cites=\"BUA2024\"><span>\u201cAuftakt F\u00fcr Neu Ernannte <span>BUA</span> <span>Open</span> <span>Science</span> <span>Ambassadors</span>\u201d</span> (2024)</span>).</p>\n<p>As ambassadors for the philosophical faculty Dorothea Strecker and Catharina Ochsner organized a writing retreat in collaboration with Dr.\u00a0Kaitlin Montague for the PhD students of the philosophical faculty of the Humboldt-Universit\u00e4t zu Berlin (HU Berlin). The retreat took place at the workation space <a href=\"https://coconat-space.com/de/\">coconat</a> and offered 16 doctoral students the opportunity of focused writing time, writing workshops, and Open Science-focused discussions in a new and peaceful environment. The workshop was designed for doctoral students to discuss and develop essential skills of academic writing. During the weekend we addressed Open Access publication strategies for doctoral students as well as a range of writing-related issues, including style and voice, writing discipline, drafting, narrative development and organization, models of accountability, taming the \u201cinternal editor,\u201d and peer review.</p>\n<p>We thank the BUA for making this writing retreat possible and we thank all participants for joining us and engaging in many discussions on their writing process, Open Access, and Open Science. In addition to focused writing time and courses on Open Science and Open Access the students were able to socialize with their peers and build a small community that will hopefully continue beyond the retreat.</p>\n<p>Further information about the research group can be found on our <a href=\"http://hu.berlin/infomgnt\">official website</a>.</p>\n<p>This text \u2013 excluding quotes and otherwise labelled parts \u2013 is licensed under the <a href=\"https://creativecommons.org/licenses/by/4.0/deed.de\">CC BY 4.0 DEED</a>.</p>\n<div class=\"default\" id=\"quarto-appendix\"><section class=\"quarto-appendix-contents\"><h2 class=\"anchored quarto-appendix-heading\">References</h2><div class=\"references csl-bib-body hanging-indent\" id=\"refs\">\n<div class=\"csl-entry\" id=\"ref-BUA2024\">\n<span>\u201cAuftakt F\u00fcr Neu Ernannte <span>BUA</span> <span>Open</span> <span>Science</span> <span>Ambassadors</span>.\u201d</span> 2024. <a href=\"https://www.berlin-university-alliance.de/items/2024/240924-open-science-ambassadors.html\">https://www.berlin-university-alliance.de/items/2024/240924-open-science-ambassadors.html</a>.\n</div>\n</div></section><section class=\"quarto-appendix-contents\"><h2 class=\"anchored quarto-appendix-heading\">Citation</h2><div><div class=\"quarto-appendix-secondary-label\">BibTeX citation:</div><pre class=\"sourceCode code-with-copy quarto-appendix-bibtex\"><code class=\"sourceCode bibtex\">@online{strecker2026,\n  author = {Strecker, Dorothea and Ochsner, Catharina},\n  title = {Recap: {Writing} {Retreat} for {Doctoral} {Students} of the\n    {Philosophical} {Faculty}},\n  date = {2026-04-16},\n  url = {https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty},\n  langid = {en}\n}\n</code></pre><div class=\"quarto-appendix-secondary-label\">For attribution, please cite this work as:</div><div class=\"csl-entry quarto-appendix-citeas\" id=\"ref-strecker2026\">\nStrecker, Dorothea, and Catharina Ochsner. 2026. <span>\u201cRecap: Writing\nRetreat for Doctoral Students of the Philosophical Faculty.\u201d</span>\nApril 16, 2026. <a href=\"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty\">https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty</a>.\n</div></div></section></div>","doi":"https://doi.org/10.59350/49j36-nmy28","funding_references":null,"guid":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/index.html","id":"4bc2cc15-f442-4a38-9bd9-7a33b5b11742","image":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/doctoral_writing_retreat.jpg","images":[{"src":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/doctoral_writing_retreat.jpg"},{"alt":"Foto by Kaitlyn Baker from Unsplash.","src":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/doctoral_writing_retreat.jpg"}],"indexed":true,"indexed_at":1776343268,"language":"en","parent_doi":null,"published_at":1776290400,"reference":[{"id":"https://www.berlin-university-alliance.de/items/2024/240924-open-science-ambassadors.html","unstructured":"\n\u201cAuftakt F\u00fcr Neu Ernannte BUA Open Science Ambassadors.\u201d 2024. https://www.berlin-university-alliance.de/items/2024/240924-open-science-ambassadors.html.\n"}],"registered_at":0,"relationships":[],"rid":"xe8h9-1ba07","status":"active","summary":"The Ambassadors for Open Science program of the Berlin University Alliance (BUA) aims to promote the knowledge and application of Open Science in various subjects.","tags":["Lab Life","Research"],"title":"Recap: Writing Retreat for Doctoral Students of the Philosophical Faculty","updated_at":1776290400,"url":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty","version":"v1"}},{"document":{"abstract":"The 2025 Beacon dataset is out. It shows OJS powering 58,000 journals across 156 countries, with 2.5 million articles published and steady growth in software upgrades. Here\u2019s what the data tells us. Open Journal Systems (OJS) launched in 2002. By 2010, around 4,000 journals were using it. What followed was more than a decade of [\u2026] The post 58,000 Journals and Counting: The 2025 OJS Beacon Data appeared first on Public Knowledge Project.","archive_url":null,"authors":[{"contributor_roles":[],"family":"Racy","given":"Famira"}],"blog":{"archive_collection":null,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":null,"canonical_url":null,"category":"socialScience","community_id":"77c8c2e4-ebda-4e7c-9458-6c06b604344b","created_at":1752226126.418889,"current_feed_url":null,"description":null,"doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/77c8c2e4-ebda-4e7c-9458-6c06b604344b/logo","feed_format":"application/atom+xml","feed_url":"https://pkp.sfu.ca/feed/atom","filter":null,"funding":null,"generator":"WordPress","generator_raw":"WordPress","home_page_url":"https://pkp.sfu.ca/news/","id":"1fc8db8d-6943-4efd-8a78-7723c41ab59f","indexed":true,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":0,"relative_url":null,"ror":null,"secure":true,"slug":"pkp","status":"active","subfield":"1710","subfield_validated":null,"title":"Public Knowledge Project","updated_at":1776328463.946064,"use_api":null,"use_mastodon":false,"user_id":null},"blog_name":"Public Knowledge Project","blog_slug":"pkp","content_html":"<figure class=\"wp-block-image size-large\"><img alt=\"Global OJS usage map. The numbers represented are in the article text.\" class=\"wp-image-18754\" decoding=\"async\" fetchpriority=\"high\" height=\"576\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg\" srcset=\"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg 1024w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-300x169.jpg 300w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-768x432.jpg 768w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1536x864.jpg 1536w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue.jpg 1600w\" width=\"1024\"/><figcaption class=\"wp-element-caption\">This map of active OJS presence in 2025 is by Saurabh Khanna, published on <a href=\"https://rpubs.com/saurabh90/ojs-stats-2025\" id=\"https://rpubs.com/saurabh90/ojs-stats-2025\" type=\"link\">RPubs</a>. The scale is 0 = lightest blue; 500+ = darkest blue.</figcaption></figure>\n<p><em><strong>The 2025 Beacon dataset is out. It shows OJS powering 58,000 journals across 156 countries, with 2.5 million articles published and steady growth in software upgrades. Here\u2019s what the data tells us.</strong></em></p>\n<p><a href=\"https://pkp.sfu.ca/software/ojs/\" id=\"https://pkp.sfu.ca/software/ojs/\" type=\"link\">Open Journal Systems</a> (OJS) launched in 2002. By 2010, around 4,000 journals were using it. What followed was more than a decade of steady growth, typically between 5,000 and 7,000 new journals per year. That growth has now levelled off, and we think that deserves to be read for what it is: a sign of maturity, not of stagnation.</p>\n<p>The 2025 figures stand at 58,000 journals across 156 countries. That is the footprint of infrastructure.</p>\n<p>For librarians and open access advocates who have spent years making the case for community-owned publishing platforms, this scale carries real weight. For tens of thousands of journals, many of them Diamond Open Access charging neither authors nor readers, OJS is how publishing gets done.</p>\n<h2 class=\"wp-block-heading\">Where the Journals Are</h2>\n<p>Geography has always been one of the most revealing dimensions of the Beacon data, and this year is no different.</p>\n<p>Indonesia continues to lead the world by a wide margin, accounting for more than 40% of all OJS journals globally. That position reflects both a sustained national commitment to open access policy and a publishing culture that has embraced open infrastructure at scale.</p>\n<p>Brazil retains its place among the top countries, underpinned by a long tradition of publicly funded, openly accessible research communication.</p>\n<p>And in a development worth noting, the United States has recently moved into the top three, as more North American institutions look seriously at open infrastructure as a sustainable path forward.</p>\n<p>Understanding where open publishing is growing, and where it has not yet been adopted, is one of the main reasons PKP collects this data in the first place. It directly shapes decisions about language support, documentation, outreach, and development priorities. The geography of OJS adoption is not just interesting; it is useful.</p>\n<h2 class=\"wp-block-heading\">Articles: The Numbers Behind the Journals</h2>\n<p>The Beacon data tracks article output per journal over time. The average number of articles per journal peaked at 62 in 2015, fell to 30 in 2022, and has since recovered to just over 40. Across all OJS journals, total article output now stands at 2.5 million articles.</p>\n<p>These figures matter beyond the headline numbers. They represent peer-reviewed research that, in many cases, would not be openly available without community-owned infrastructure. A significant portion of it comes from institutions and regions with no viable route into commercial open access. That research belongs to the communities that produced it, and it is accessible because of the infrastructure those communities chose to use.</p>\n<h2 class=\"wp-block-heading\">A Meaningful Milestone: Version Upgrades</h2>\n<p>Since 2024, there has been a 10% increase in journals upgrading to OJS version 3.3, with more than 4,000 journals completing the transition. Software upgrades take real effort: technical capacity, planning time, and often institutional backing. The fact that so many journals have made this move reflects the work PKP has put into making upgrades accessible, through sprint events, hosting support, education, and documentation.</p>\n<p>This data connects directly to PKP\u2019s focus on supporting the health and sustainability of journals already using OJS, not just reaching new ones.</p>\n<h2 class=\"wp-block-heading\">Why PKP Collects this Data</h2>\n<p>PKP collects this data to inform its own decisions: where to focus development, where documentation is needed, where the software is being used in ways that point to unmet needs. The dataset is published openly on Harvard Dataverse so that researchers, institutions, and partners can draw their own conclusions from it. The global OJS community is not the subject of this research. It is the reason for it, and its primary beneficiary.</p>\n<p>That approach is central to how PKP works. Research informs what we build and how we prioritize. The Beacon project is one of the clearest expressions of that commitment.</p>\n<h2 class=\"wp-block-heading\">Explore the Data</h2>\n<ul class=\"wp-block-list\">\n<li><a href=\"https://rpubs.com/saurabh90/ojs-stats-2025\">2025 OJS Usage Statistics \u2014 interactive charts and maps</a> (2025 data)</li>\n<li><a href=\"https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/OCZNVY&amp;version=6.0\">Full Beacon dataset on Harvard Dataverse</a> (2024 data)</li>\n</ul>\n<p>If you are a journal manager, a librarian building the case for open infrastructure, or a researcher working on scholarly communications, this data is freely available for you to use.</p>\n<p><em>The Beacon project is a longitudinal research initiative tracking the global adoption and use of Open Journal Systems. Data is collected annually and published openly under Creative Commons licensing.</em></p>\n<p>The post <a href=\"https://pkp.sfu.ca/2026/04/15/58000-journals-2025-ojs-beacon-data/\">58,000 Journals and Counting: The 2025 OJS Beacon Data</a> appeared first on <a href=\"https://pkp.sfu.ca\">Public Knowledge Project</a>.</p>","doi":"https://doi.org/10.59350/1v51v-e0831","funding_references":null,"guid":"https://pkp.sfu.ca/?p=18753","id":"80dc8e48-77f4-413f-9642-674f294a9334","image":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg","images":[{"alt":"Global OJS usage map. The numbers represented are in the article text.","height":"576","sizes":"(max-width: 1024px) 100vw, 1024px","src":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg","srcset":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-300x169.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-768x432.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1536x864.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue.jpg","width":"1024"},{"alt":"This map of active OJS presence in 2025 is by Saurabh Khanna, published on RPubs. The scale is 0 = lightest blue; 500+ = darkest blue.","src":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg"}],"indexed":true,"indexed_at":1776278904,"language":"en","parent_doi":null,"published_at":1776278154,"reference":[],"registered_at":0,"relationships":[],"rid":"a50g6-y8p95","status":"active","summary":"<em>\n <strong>\n  The 2025 Beacon dataset is out. It shows OJS powering 58,000 journals across 156 countries, with 2.5 million articles published and steady growth in software upgrades. Here\u2019s what the data tells us.\n </strong>\n</em>\nOpen Journal Systems (OJS) launched in 2002. By 2010, around 4,000 journals were using it. What followed was more than a decade of steady growth, typically between 5,000 and 7,000 new journals per year.","tags":["Community Newsletter","Beacon","OJS","Open Access","Open Infrastructure"],"title":"58,000 Journals and Counting: The 2025 OJS Beacon Data","updated_at":1776278154,"url":"https://pkp.sfu.ca/2026/04/15/58000-journals-2025-ojs-beacon-data/","version":"v1"}},{"document":{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":[],"family":"Moresi","given":"Louis","url":"https://orcid.org/0000-0003-3685-174X"}],"blog":{"archive_collection":22163,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22163/20231105111054/","archive_timestamps":[20231105111054,20240505190806,20241105111040,20250505111057],"authors":null,"canonical_url":null,"category":"earthAndRelatedEnvironmentalSciences","community_id":"54ca6482-0a9b-420d-be44-b0e93fbad952","created_at":1697760000,"current_feed_url":null,"description":"Geodynamics, Computation and Education","doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/c8b71a5b-b872-47ab-89f7-7c84741d68fc/logo","feed_format":"application/rss+xml","feed_url":"https://www.underworldcode.org/rss/","filter":null,"funding":null,"generator":"Ghost","generator_raw":"Ghost 5.69","home_page_url":"https://www.underworldcode.org/","id":"9f6ce29f-3545-4482-987d-1a15bc256f4e","indexed":false,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":1719281103,"relative_url":null,"ror":null,"secure":true,"slug":"underworldcode","status":"active","subfield":"1908","subfield_validated":null,"title":"Underworld Geodynamics Community","updated_at":1776328962.44395,"use_api":true,"use_mastodon":false,"user_id":"4f890b77-39e3-49c8-81cf-d159b5ad2f81"},"blog_name":"Underworld Geodynamics Community","blog_slug":"underworldcode","content_html":"<p>A symbolic time derivatives: you can inspect it, display it in a notebook, and verify that the time discretisation is doing what you expect. And you can swap between Lagrangian, Semi-Lagrangian, and Eulerian approaches without rewriting the solver. Sympy introduces incredible flexibility for on-the-fly composition of time-dependent problems. </p><p>Many geodynamics equations involve a material derivative. Temperature advection-diffusion, viscoelastic stress transport, Navier-Stokes momentum. The material derivative $D\\phi/Dt$ combines the time rate of change with transport by the flow:</p><p>$$<br>\\frac{D\\phi}{Dt} = \\frac{\\partial \\phi}{\\partial t} + \\mathbf{v} \\cdot \\nabla\\phi<br>$$</p><p>Discretising this equation requires making specific choices. How do you handle the advection term? How many previous timesteps do you use? How do you deal with variable timestep sizes? These choices affect accuracy, stability, and computational cost.</p><p>In many finite element codes, these choices are baked into the solver implementation. A classic example is Crank-Nicolson time stepping: the flux must be evaluated at both the current and previous timestep, which means adding history terms to the left-hand side of the assembled system as well as introducing a time-derivative term on the right-hand side. The time discretisation reaches into both sides of the equation, and changing it means restructuring the solver. In UW3, the time derivative <strong><em>offers</em></strong> flux and force terms to the solver to handle symbolically as it sees fit.</p><h2 id=\"the-ddt-hierarchy\">The DDt Hierarchy</h2><p>UW3 provides four implementations of the time derivative, all sharing the same calling interface and working for scalar, vector and tensor quantities.</p><p><strong>Eulerian</strong> stores history on the mesh. The material derivative is approximated by finite differences in time at fixed grid points, with an advection correction. This is the classical approach: simple, mesh-based, but subject to CFL stability constraints when advection dominates.</p><p><strong>Semi-Lagrangian</strong> traces characteristics backward in time. At each mesh node, it asks: where was this material parcel at the previous timestep? It then interpolates the previous solution at that departure point. This is unconditionally stable because the material derivative is evaluated along the characteristic, not at a fixed grid point. There is no CFL constraint, though the user needs to be conscious of accuracy trade-offs inherent in the scheme.</p><p><strong>Lagrangian</strong> follows particles through the flow. The history is stored on swarm variables and advected with the particles. This is the natural choice when material history matters physically, as in viscoelastic stress transport where the stress tensor must be advected and rotated with the material. Accuracy of this scheme depends upon the quality of the particle-layout (density of particles, presence of gaps).</p><p><strong>Symbolic</strong> provides pure symbolic history without mesh or swarm storage. It is used internally by the constitutive model system for building expressions that involve time derivatives.</p><p>All four produce the same thing: a symbolic expression that can be embedded in a solver's weak form. The solver does not need to know which implementation is providing the time derivative. It sees a SymPy expression for $D\\phi/Dt$ and includes those terms when it differentiates the equation system to determine the Jacobians.</p><h2 id=\"bdf-schemes-multi-step-time-integration\">BDF Schemes: Multi-Step Time Integration</h2><p>The time discretisation uses backward differentiation formulas (BDF). These are implicit multi-step methods that use solution values from previous timesteps to approximate the time derivative at the current step.</p><p>At order 1, this is the backward Euler method:</p><p>$$<br>\\frac{D\\phi}{Dt} \\approx \\frac{\\phi^n - \\phi^{n-1}}{\\Delta t}<br>$$</p><p>At order 2, BDF-2 uses two previous values for second-order accuracy:</p><p>$$<br>\\frac{D\\phi}{Dt} \\approx \\frac{\\frac{3}{2}\\phi^n - 2\\phi^{n-1} + \\frac{1}{2}\\phi^{n-2}}{\\Delta t}<br>$$</p><p>The coefficients $[3/2, -2, 1/2]$ are for constant timesteps. When the timestep varies, the coefficients adapt. If the current timestep is $\\Delta t _ n$ and the previous was $\\Delta t _ {n-1}$, with ratio $r = \\Delta t _ n / \\Delta t _ {n-1}$, the BDF-2 coefficients become:</p><p>$$<br>c _ 0 = \\frac{1+2r}{1+r}, \\quad c _ 1 = -(1+r), \\quad c _ 2 = \\frac{r^2}{1+r}<br>$$</p><p>This matters in practice. Underworld simulations usually adjust the timestep as the flow evolves.</p><p>The coefficients are computed as exact <code>sympy.Rational</code> values and wrapped in UWexpression objects. This means they are routed through PETSc's constants array, just like viscosity or density parameters. When the timestep changes, the coefficient values update without recompilation. The compiled C code has the same structure at every step, only the values in the constants array will change.</p><h2 id=\"adams-moulton-weighting-for-fluxes\">Adams-Moulton Weighting for Fluxes</h2><p>BDF handles the time derivative of the unknown. But transient problems may also need a time-weighted evaluation of the flux (the spatial operator). The Adams-Moulton (AM) family provides this.</p><p>At order 0, the flux is evaluated purely at the current time (fully implicit). At order 1 with $\\theta = 1/2$, we have the <em>Crank-Nicolson</em> scheme: the flux is averaged between the current and previous timestep. Higher order variants use more history values.</p><p>In UW3, the solver's flux time derivative (<code>DFDt</code>) provides an <code>adams _ moulton _ flux()</code> method that returns the appropriately weighted combination of the current flux and previous flux values as symbolic forms backed by stored evaluations. This expression then appears in the solver's $F _ 1$ template as a symbolic expression. Like the BDF coefficients, the AM weights are UWexpressions that update between timesteps.</p><p>The combination of BDF for the time derivative and AM for the flux evaluation gives a family of time integration schemes. BDF-1 with AM-0 is backward Euler. BDF-2 with AM-1 gives second-order accuracy in both the time derivative and the flux evaluation. The user controls this through the <code>order</code> parameter when creating the solver.</p><h2 id=\"order-ramping-at-startup\">Order Ramping at Startup</h2><p>A BDF-2 scheme needs two previous solutions. At the start of a simulation, there is only one (the initial condition). UW3 handles this through automatic order ramping.</p><p>The DDt object tracks an <code>effective _ order</code> that starts at 1 and increases with each completed solve, up to the requested order. On the first timestep, BDF-1 is used regardless of what order was requested. On the second timestep, BDF-2 becomes available. On the third, BDF-3. The transition is automatic and the coefficients adjust accordingly.</p><p>History slots are initialised with the current solution value on the first call. This means the first BDF-1 step sees $\\phi^{n-1} = \\phi^n$, giving a zero time derivative. This is correct for a system starting from rest or from a steady-state initial condition. For impulsive starts, the first-order accuracy of the initial step is usually acceptable because the solution is changing rapidly and the timestep is typically small.</p><h2 id=\"what-the-solver-sees\">What the Solver Sees</h2><p>Consider advection-diffusion of temperature:</p><p>$$<br>\\frac{D T}{Dt} = \\nabla \\cdot (k \\nabla T) + H<br>$$</p><p>The solver setup looks like this:</p><pre><code class=\"language-python\">adv_diff = uw.systems.AdvDiffusion(\n    mesh, u_Field=T, V_fn=v,\n    order=2,                    # BDF-2 / AM-1\n)\nadv_diff.constitutive_model.Parameters.diffusivity = k\nadv_diff.f = H\nadv_diff.solve(timestep=dt)\n</code></pre><p>The <code>order</code> parameter controls the time discretisation. The solver builds its weak form from two template expressions, $F _ 0$ (force-like, paired with the test function) and $F _ 1$ (flux-like, paired with the test function gradient):</p><pre><code class=\"language-python\">F0 = DuDt.bdf() / delta_t - H\nF1 = DFDt.adams_moulton_flux()\n</code></pre><p>At <strong>order 1</strong> (backward Euler / fully implicit), these expand to:</p><p>$$<br>F _ 0 = \\frac{T^n - T^{n-1}}{\\Delta t} - H<br>$$</p><p>$$<br>F _ 1 = k \\nabla T^n<br>$$</p><p>The flux is evaluated entirely at the current timestep. The system is first-order accurate in time.</p><p>At <strong>order 2</strong> (BDF-2 / Crank-Nicolson), the expressions become:</p><p>$$<br>F _ 0 = \\frac{\\frac{3}{2}T^n - 2T^{n-1} + \\frac{1}{2}T^{n-2}}{\\Delta t} - H<br>$$</p><p>$$<br>F _ 1 = \\frac{1}{2} k \\nabla T^n + \\frac{1}{2} k \\nabla T^{n-1}<br>$$</p><p>The flux is now averaged between the current and previous timesteps. Both the time derivative and the flux evaluation are second-order accurate. The history terms $T^{n-1}$ and $T^{n-2}$ are mesh variable symbols managed by the DDt objects. The coefficients ($3/2$, $-2$, $1/2$, etc.) are UWexpression symbolic constants whose values update each step, if $\\Delta t$ changes, and no recompilation is required.</p><p>Note: terms that contain $T^n$ automatically populate the implicit parts of the solver, while history terms are automatically treated explicitly. They are also automatically combined with history terms originating, for example, from the constitutive law.</p><p>The solver differentiates through all of this for the Jacobian. The JIT compiler handles it like any other symbolic expression. From PETSc's perspective, the time-stepping machinery is invisible. It sees compiled C functions at quadrature points, with coefficient values arriving through the constants array.</p><p>The solve sequence for each timestep is:</p><ol><li><strong>Pre-solve</strong>: Update BDF/AM coefficients for the current timestep. For Semi-Lagrangian, trace characteristics to find departure points and sample history values.</li><li><strong>Solve</strong>: PETSc SNES solves the assembled system. The compiled C callbacks evaluate the symbolic expressions at quadrature points.</li><li><strong>Post-solve</strong>: Shift the history chain. What was $\\phi^{n-1}$ becomes $\\phi^{n-2}$. The current solution becomes the new $\\phi^{n-1}$. Increment the solve counter for order ramping.</li></ol><h2 id=\"choosing-a-time-derivative\">Choosing a Time Derivative</h2><p>The choice of DDt type is a one-parameter decision at solver construction:</p><pre><code class=\"language-python\"># Default for advection-diffusion: Semi-Lagrangian (unconditionally stable)\nadv_diff = uw.systems.AdvDiffusion(mesh, u_Field=T, V_fn=v)\n\n# Override with Lagrangian (particle-based, requires a swarm)\nDTdt = uw.systems.Lagrangian_Swarm_DDt(\n    swarm, psi_fn=T.sym,\n    vtype=uw.VarType.SCALAR, degree=T.degree,\n    continuous=True, order=2\n)\nadv_diff = uw.systems.AdvDiffusion(mesh, u_Field=T, V_fn=v, DuDt=DTdt)\n\n# Or Eulerian (mesh-based, for problems without strong advection)\nDTdt = uw.systems.Eulerian_DDt(\n    mesh, T, vtype=uw.VarType.SCALAR,\n    degree=T.degree, continuous=True, order=2\n)\nadv_diff = uw.systems.AdvDiffusion(mesh, u_Field=T, V_fn=v, DuDt=DTdt)\n</code></pre><p>The solver does not need to be made aware of which DDt type you chose. It calls <code>bdf()</code> and <code>adams _ moulton _ flux()</code> and gets SymPy expressions. The physics of the time discretisation is encapsulated in the DDt object. The numerics of the spatial discretisation are encapsulated in the solver. They communicate through symbolic expressions.</p><p>Each solver type has a sensible default. Advection-diffusion and Stokes default to Semi-Lagrangian. Pure diffusion defaults to Eulerian. Viscoelastic solvers use the DFDt infrastructure for stress history on particles. You only need to override the default when your problem requires it.</p><h2 id=\"why-this-matters\">Why This Matters</h2><p>In UW2, if you wanted to change from explicit particle advection to a semi-Lagrangian scheme, you would need to plug in a different solver. The time discretisation was part of the solver's implementation, not a separable component. When history terms appeared through the constitutive model, we had to develop a matrix of all potential interactions and code them independently.</p><p>In UW3, the time derivative is an object you can create, configure, inspect, and swap. The BDF coefficients are visible as symbolic expressions. The history terms are mesh variables you can plot. The AM flux weighting is a symbolic combination you can display in a notebook.</p><p>This is the same design principle we described in the <a href=\"https://www.underworldcode.org/constitutive-models-in-symbolic-form/\">constitutive models post</a>: separate the physics from the numerics, connect them through symbolic expressions, and make both sides inspectable. For constitutive models, the boundary is the stress tensor. For time derivatives, it is the BDF/AM expression. In both cases, the solver sees a SymPy expression and does not need to know how it was constructed.</p>","doi":"https://doi.org/10.59350/2bbxk-1gv97","funding_references":null,"guid":"69dfb91eeb7226563af54429","id":"3bd33871-0c4a-4c00-84ce-34ea4a24bd3b","image":"https://images.unsplash.com/photo-1501139083538-0139583c060f?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHRpbWV8ZW58MHx8fHwxNzc2MjY5Njk5fDA&ixlib=rb-4.1.0&q=80&w=2000","images":[],"indexed":true,"indexed_at":1776321304,"language":"en","parent_doi":null,"published_at":1776270000,"reference":[],"registered_at":0,"relationships":[],"rid":"yjgtg-ke420","status":"active","summary":"A symbolic time derivatives: you can inspect it, display it in a notebook, and verify that the time discretisation is doing what you expect. And you can swap between Lagrangian, Semi-Lagrangian, and Eulerian approaches without rewriting the solver. Sympy introduces incredible flexibility for on-the-fly composition of time-dependent problems. Many geodynamics equations involve a material derivative.","tags":["Underworld Code","Tricks Of The Trade","Documentation","Development"],"title":"Symbolic Time Derivatives in Underworld3","updated_at":1776270000,"url":"https://www.underworldcode.org/symbolic-time-derivatives-in-underworld3/","version":"v1"}}],"items":[{"abstract":"The PHP library that renders article citations in Open Journal Systems (OJS) will change maintenance hands from the library\u2019s creator, Sebastian B\u00f6ttger, to PKP. What does citeproc-php do? For those of you unfamiliar, citeproc-php is the server-side library that takes raw article metadata (author names, titles, publication dates, DOIs) and transforms it into formatted citations [\u2026] The post citeproc-php is under new management!","archive_url":null,"authors":[{"contributor_roles":[],"family":"Racy","given":"Famira"}],"blog":{"archive_collection":null,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":null,"canonical_url":null,"category":"socialScience","community_id":"77c8c2e4-ebda-4e7c-9458-6c06b604344b","created_at":1752226126.418889,"current_feed_url":null,"description":null,"doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/77c8c2e4-ebda-4e7c-9458-6c06b604344b/logo","feed_format":"application/atom+xml","feed_url":"https://pkp.sfu.ca/feed/atom","filter":null,"funding":null,"generator":"WordPress","generator_raw":"WordPress","home_page_url":"https://pkp.sfu.ca/news/","id":"1fc8db8d-6943-4efd-8a78-7723c41ab59f","indexed":true,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":0,"relative_url":null,"ror":null,"secure":true,"slug":"pkp","status":"active","subfield":"1710","subfield_validated":null,"title":"Public Knowledge Project","updated_at":1776328463.946064,"use_api":null,"use_mastodon":false,"user_id":null},"blog_name":"Public Knowledge Project","blog_slug":"pkp","content_html":"<figure class=\"wp-block-image size-large\"><img alt=\"Stockholm Archipelago photo by PKP's Jason Nugent represents the distinct yet deeply interconnected nature of landscapes, ecosystems, and infrastructures, a theme of PKP's Community Newsletter, Archipelago.\" class=\"wp-image-18765\" decoding=\"async\" fetchpriority=\"high\" height=\"576\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg\" srcset=\"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg 1024w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-300x169.jpg 300w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-768x432.jpg 768w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1536x864.jpg 1536w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue.jpg 1600w\" width=\"1024\"/></figure>\n<p><em><strong>The PHP library that renders article citations in Open Journal Systems (OJS) will change maintenance hands from the library\u2019s creator, Sebastian B\u00f6ttger, to PKP.</strong></em></p>\n<h2 class=\"wp-block-heading\">What does citeproc-php do?</h2>\n<p>For those of you unfamiliar, citeproc-php is the server-side library that takes raw article metadata (author names, titles, publication dates, DOIs) and transforms it into formatted citations using Citation Style Language (CSL) styles including APA, MLA, Chicago, Vancouver, and more.</p>\n<p>In OJS, this library works behind the scenes of the Citation Style Language plugin. When a reader clicks \u201cHow to Cite\u201d on an article page, or when a journal manager selects a citation style under Settings, citeproc-php generates the formatted output.</p>\n<h2 class=\"wp-block-heading\">What will change?</h2>\n<p><strong>For OJS users:</strong> Nothing immediate. Your citation displays will continue working exactly as they do now. The plugin settings in your dashboard remain unchanged.</p>\n<p><strong>For developers:</strong> The citeproc-php library has moved to the PKP organization under Github and PKP will take an active role in its steering and release management. Little else will change \u2013 PKP would like to continue working with the active contributor community already supporting the library.</p>\n<p><strong>For the broader audience:</strong> PKP has long benefited from, and frequently contributed to, 3rd-party Free and Open Source (FOSS) libraries like citeproc-php. As good FOSS citizens, PKP recognizes the value of a strong ecosystem of support and contribution; this move to formally maintaining citeproc-php is done in recognition of the need for material support for the tools we all rely upon.</p>\n<p>The handover to PKP makes strategic sense since citeproc-php\u2019s primary consumer is OJS and therefore PKP has a strong interest in keeping the library secure and updated.</p>\n<p>The PKP team would like to thank Sebiastian B\u00f6ttger for his excellent work supporting the scholarly publishing community for many years!</p>\n<p><em>The handover discussion can be found in GitHub </em><a href=\"https://github.com/seboettg/citeproc-php/discussions/200#discussioncomment-15705746\"><em>#200</em></a><em>. The new pkp/citeproc-php GitHub page can be found </em><a href=\"https://github.com/pkp/citeproc-php\"><em>here</em></a><em>.\u00a0</em><br/></p>\n<p>The post <a href=\"https://pkp.sfu.ca/2026/04/16/citeproc-php-is-now-managed-by-pkp/\">citeproc-php is under new management!</a> appeared first on <a href=\"https://pkp.sfu.ca\">Public Knowledge Project</a>.</p>","doi":"https://doi.org/10.59350/r58bv-8dm69","funding_references":null,"guid":"https://pkp.sfu.ca/?p=18764","id":"d8fec180-e406-436f-9a9f-00613a903c03","image":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg","images":[{"alt":"Stockholm Archipelago photo by PKP's Jason Nugent represents the distinct yet deeply interconnected nature of landscapes, ecosystems, and infrastructures, a theme of PKP's Community Newsletter, Archipelago.","height":"576","sizes":"(max-width: 1024px) 100vw, 1024px","src":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg","srcset":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-300x169.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-768x432.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1536x864.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue.jpg","width":"1024"},{"src":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Citeproc-php-April-2026-WP-May-issue-1024x576.jpg"}],"indexed":true,"indexed_at":1776374604,"language":"en","parent_doi":null,"published_at":1776373941,"reference":[],"registered_at":0,"relationships":[],"rid":"gg4fn-qbc59","status":"active","summary":"<em>\n <strong>\n  The PHP library that renders article citations in Open Journal Systems (OJS) will change maintenance hands from the library\u2019s creator, Sebastian B\u00f6ttger, to PKP.\n </strong>\n</em>\nWhat does citeproc-php do?   For those of you unfamiliar, citeproc-php is the server-side library that takes raw article metadata (author names, titles, publication dates, DOIs) and transforms it into formatted citations using Citation Style Language (CSL)","tags":["Community Newsletter","Citations","Citeproc-php","FOSS","Metadata"],"title":"citeproc-php is under new management!","updated_at":1776373941,"url":"https://pkp.sfu.ca/2026/04/16/citeproc-php-is-now-managed-by-pkp/","version":"v1"},{"abstract":"Matt and I were discussing a paper from last year, Korneisel and Maddin (2025) on the evolution of the atlas\u2013axis complex. (It\u2019s excellent, by the way. Really comprehensive.) Mike: Atlases are so weird.","archive_url":null,"authors":[{"affiliation":[{"id":"https://ror.org/0524sp257","name":"University of Bristol"}],"contributor_roles":[],"family":"Taylor","given":"Mike","url":"https://orcid.org/0000-0002-1003-5675"}],"blog":{"archive_collection":22153,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22153/20231105213934/","archive_timestamps":null,"authors":[{"name":"Mike Taylor"}],"canonical_url":null,"category":"earthAndRelatedEnvironmentalSciences","community_id":"0e13541f-417e-46c0-a859-65927249df72","created_at":1675209600,"current_feed_url":null,"description":"SV-POW!  ...  All sauropod vertebrae, except when we're talking about Open Access. ISSN 3033-3695","doi":null,"doi_as_guid":false,"favicon":null,"feed_format":"application/atom+xml","feed_url":"https://svpow.com/feed/atom/","filter":null,"funding":null,"generator":"WordPress.com","generator_raw":"WordPress.com","home_page_url":"https://svpow.com","id":"c6cbbd2e-4675-4680-8a3f-784388009821","indexed":false,"issn":"3033-3695","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":1729882329,"relative_url":null,"ror":null,"secure":true,"slug":"svpow","status":"active","subfield":"1911","subfield_validated":true,"title":"Sauropod Vertebra Picture of the Week","updated_at":1776328855.589855,"use_api":true,"use_mastodon":false,"user_id":"04d03585-c8bb-40f2-9619-5076a5e0aed2"},"blog_name":"Sauropod Vertebra Picture of the Week","blog_slug":"svpow","content_html":"<p>Matt and I were discussing a paper from last year, Korneisel and Maddin (2025) on the evolution of the atlas\u2013axis complex. (It&#8217;s excellent, by the way. Really comprehensive.)</p>\n<p><strong>Mike:</strong> Atlases are so weird. It occurs to me that had the nomenclatural dice fallen differently, we might not even consider them vertebrae at all, just as we don&#8217;t consider metacarpals to be manual phalanges. We might have considered the axial skeleton to consist of skull, atlas, and a sequence of vertebrae starting with the axis. (And, yes, ribs, chevrons and sternal plates.)</p>\n<p><strong>Matt:</strong> Good point on [&#8230;] the weirdness of the atlas. The atlas in particular really does feel like an embryonic segmentation error codified and exapted into a useful structure.</p>\n<p><strong>Mike:</strong> Your mom is an embryonic segmentation error codified and exapted into a useful structure.</p>\n<h1>References</h1>\n<ul>\n<li><a href=\"https://onlinelibrary.wiley.com/doi/10.1111/brv.70053\">Korneisel, Dana E., and Hillary C. Maddin. 2015. Review of the tetrapod skull\u2013neck boundary: implications for the evolution of the atlas\u2013axis complex. <em>Biological Reviews</em> <strong>100</strong>:2435\u20132470. doi:10.1111/brv.70053</a></li>\n</ul>\n<p>&nbsp;</p>\n<hr />\n<p><a href=\"https://doi.org/10.59350/xsxxj-yre49\">doi:10.59350/xsxxj-yre49</a></p>\n","doi":"https://doi.org/10.59350/xsxxj-yre49","funding_references":null,"guid":"https://svpow.com/?p=25332","id":"6a94da22-7ebd-41c2-ac79-49037b9491bc","image":"","images":[],"indexed":true,"indexed_at":1776371557,"language":"en","parent_doi":null,"published_at":1776369155,"reference":[{"id":"https://onlinelibrary.wiley.com/doi/10.1111/brv.70053","unstructured":"Korneisel, Dana E., and Hillary C. Maddin. 2015. Review of the tetrapod skull\u2013neck boundary: implications for the evolution of the atlas\u2013axis complex. Biological Reviews 100:2435\u20132470. https://doi.org/10.1111/brv.70053"}],"registered_at":0,"relationships":[],"rid":"d5e0m-b4j43","status":"active","summary":"Matt and I were discussing a paper from last year, Korneisel and Maddin (2025) on the evolution of the atlas\u2013axis complex. (It\u2019s excellent, by the way. Really comprehensive.)\n<strong>\n Mike:\n</strong>\nAtlases are so weird. It occurs to me that had the nomenclatural dice fallen differently, we might not even consider them vertebrae at all, just as we don\u2019t consider metacarpals to be manual phalanges.","tags":["Atlas-axis Complex","Short","Your Mom"],"title":"On the evolution of the atlas-axis complex","updated_at":1776370689,"url":"https://svpow.com/2026/04/16/on-the-evolution-of-the-atlas-axis-complex/","version":"v1"},{"abstract":null,"archive_url":null,"authors":[{"affiliation":[{"id":"https://ror.org/01tmp8f25","name":"Universidad Nacional Aut\u00f3noma de M\u00e9xico"}],"contributor_roles":[],"family":"Mich\u00e1n","given":"Layla","url":"https://orcid.org/0000-0002-5798-662X"}],"blog":{"archive_collection":24080,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":null,"canonical_url":null,"category":"biologicalSciences","community_id":"e92c5db9-8dfb-4d15-8eab-8e5cd20a4cee","created_at":1721741304,"current_feed_url":null,"description":"Garabateando ideas sobre ciencia, biociencias, metaciencia, informaci\u00f3n, inform\u00e1tica, conocimiento datos e historia","doi":null,"doi_as_guid":false,"favicon":null,"feed_format":"application/atom+xml","feed_url":"https://biogarabatos.blogspot.com/feeds/posts/default","filter":null,"funding":null,"generator":"Blogger","generator_raw":"Blogger 7.00","home_page_url":"https://biogarabatos.blogspot.com/","id":"c91473b1-31ae-4dd8-9bc3-0a6c302e34e9","indexed":true,"issn":null,"language":"es","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":"https://mstdn.social/@lma","prefix":"10.59350","registered_at":1729864333,"relative_url":null,"ror":null,"secure":true,"slug":"biogarabatos","status":"active","subfield":"1710","subfield_validated":null,"title":"BIOgarabatos","updated_at":1776327110.732287,"use_api":null,"use_mastodon":false,"user_id":"d9ff24e8-2ba1-4b95-a6a6-872f410768eb"},"blog_name":"BIOgarabatos","blog_slug":"biogarabatos","content_html":"<p>Dise\u00f1ar la bibliograf\u00eda para los cursos de Biolog\u00eda</p><p>Generar la lista de la bibliograf\u00eda, tanto b\u00e1sica como complementar\u00eda, constituye un proceso fundamental en el dise\u00f1o curricular porque conforma el n\u00facleo te\u00f3rico, metodol\u00f3gico y conceptual de la clase, establece el enfoque, las dimensiones, el contexto, el alcance y define claramente el marco conceptual que guiar\u00e1 el curso.</p><p>Dada su relevancia el proceso de seleccionar y crear la bibliograf\u00eda que se usar\u00e1 debe ser meticuloso, detallado y formal porque ser\u00e1 el sustento que utilizar\u00e1n los alumnos para obtener definiciones, establecer marcos de referencia, localizar bibliograf\u00eda relacionada y\u00a0</p><p>Este elemento es com\u00fanmente relegado en el dise\u00f1o curricular, esto es evidente porque existe muy poca literatura\u00a0 que aborde este tema,\u00a0 no se le da la importancia suficiente, al parecer, en muchos casos se ve como un requisito, no c\u00f3mo un componente fundamental del programa de una clase.</p><p>En este texto escribe algunas ideas que se deben considerar para generar la lista de la bibliograf\u00eda de un curso de ciencia, o de cualquier otro tema aunque yo me centrar\u00e9 en uno de biolog\u00eda.</p><p><b>El dise\u00f1o</b></p><p>La primera etapa es el dise\u00f1o de la bibliograf\u00eda del plan.</p><p></p><ol style=\"text-align: left;\"><li>Recuperar literatura de calidad, accesible, digital, disponible en la Web, con identificadores (ISBN, DOI) o al menos un enlace permanente.</li><li>Socializar la lista con la bibliograf\u00eda entre todos los dise\u00f1adores del curso y elegir la m\u00e1s significativa.\u00a0</li><li>Reunir literatura b\u00e1sica y complementaria relevante, actualizada y consistente con los objetivos y tema del curso, 25 referencias pueden ser un buen n\u00famero.</li><li>Elegir un estilo bibliogr\u00e1fico adecuado.</li><li>Generar una lista bibliogr\u00e1fica en l\u00ednea en un gestor bibliogr\u00e1fico como Zotero.</li><li>Actualizar la bibliograf\u00eda, para esto se puede ir agregando literatura extra.</li></ol><div><b>La implementaci\u00f3n</b></div><div>No basta con tener una buena bibliograf\u00eda, es indispensable utilizarla de manera constante y consistente durante el curso, para ello puede servir considera los siguientes puntos:</div><div><ul style=\"text-align: left;\"><li>Presentar la bibliograf\u00eda del curso.\u00a0</li><li>Ense\u00f1ar el uso del gestor de la biblioteca.</li><li>Ense\u00f1ar a citar, el formato, los tipos de citas y dar ejemplos, elegir un estilo para todo el curso.</li><li>Leer art\u00edculos con los estudiantes.</li><li>Se pueden entregar productos sobre las lecturas como infograf\u00edas, mapas conceptuales, 10 puntos clave, un ensayo, un resumen, etc...</li></ul><div>El uso de la bibliograf\u00eda especializada en los cursos de biolog\u00eda es indispensable, por lo que es necesario explicar a los alumnos los temas b\u00e1sicos para usarlos con fluidez, algunos temas que se pueden incluir son bases de datos bibliogr\u00e1ficas, tipos de art\u00edculos cient\u00edficos, publicaci\u00f3n cient\u00edfica, revistas, acceso abierto, licencia creative commons, metadatos, estilos bibliogr\u00e1ficos y buenas pr\u00e1cticas.</div></div><div><br/></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/s2248/biologia%202024.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1161\" data-original-width=\"2248\" height=\"291\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/w565-h291/biologia%202024.png\" width=\"565\"/></a></div><br/><div><br/></div><div><br/></div><div><b>El an\u00e1lisis</b></div><div>La bibliograf\u00eda de un curso es tambi\u00e9n susceptible de ser analizada, es posible obtener indicadores como los siguientes:</div><div><ul style=\"text-align: left;\"><li>Cantidad de referencias</li><li>Edad</li><li>Publicaciones por a\u00f1o</li><li>Temas</li><li>Proporci\u00f3n de documentos con acceso abierto</li><li>Palabras clave</li></ul></div><div>Hacer investigaci\u00f3n sobre la bibliograf\u00eda de los <i>curricula</i> de biolog\u00eda en la educaci\u00f3n superior es otra buena manera de entender la bioliteratura, para determinar, por ejemplo,\u00a0 los textos m\u00e1s \u00fatiles para un curso, los art\u00edculos seminales que vale la pena incluir, en curso y las herramientas se pueden usar.</div><div><br/></div><div><div><b>Bibliograf\u00eda</b></div><div><ul style=\"text-align: left;\"><li>\u00a0 Area, M., &amp; Guarro, A. (2012). La alfabetizaci\u00f3n informacional y digital: Fundamentos pedag\u00f3gicos para la ense\u00f1anza y el aprendizaje competente. Revista Espa\u00f1ola de Documentaci\u00f3n Cient\u00edfica, (Monogr\u00e1fico), 46\u201374. https://doi.org/10.3989/redc.2012.mono.977</li><li>Alshammari, S., Basalelah, L., Rukbah, W. A., Alsuhibani, A., &amp; Wijesinghe, D. S. (2024). PyZoBot: A Platform for Conversational Information Extraction and Synthesis from Curated Zotero Reference Libraries through Advanced Retrieval-Augmented Generation. arXiv. https://doi.org/10.48550/ARXIV.2405.07963</li><li>\u00a0 Basey, J. M., Mendelow, T. N., &amp; Ramos, C. N. (2000). Current trends of community college lab curricula in biology: An analysis of inquiry, technology, and content. Journal of Biological Education, 34(2), 80\u201386. https://doi.org/10.1080/00219266.2000.9655690</li><li>\u00a0 Flaspohler, M. R., Rux, E. M., &amp; Flaspohler, J. A. (2007). The annotated bibliography and citation behavior: Enhancing student scholarship in an undergraduate biology course. CBE Life Sciences Education, 6(4), 350\u2013360. https://doi.org/10.1187/cbe.07-04-0022</li><li>\u00a0 Goudsouzian, L. K., &amp; Hsu, J. L. (2023). Reading Primary Scientific Literature: Approaches for Teaching Students in the Undergraduate STEM Classroom. CBE Life Sciences Education, 22(3), es3. https://doi.org/10.1187/cbe.22-10-0211</li><li>\u00a0 Hern\u00e1ndez y Hern\u00e1ndez, N. D., Salado Rodr\u00edguez, L. I., Vargas Franco, A., Hern\u00e1ndez y Hern\u00e1ndez, N. D., Salado Rodr\u00edguez, L. I., &amp; Vargas Franco, A. (2021). Literacidad acad\u00e9mica en la educaci\u00f3n superior: El caso de la Universidad Estatal de Sonora. Di\u00e1logos sobre educaci\u00f3n. Temas actuales en investigaci\u00f3n educativa, 12(23). https://doi.org/10.32870/dse.v0i23.968</li><li>Hoskins, S. G., Stevens, L. M., &amp; Nehm, R. H. (2007). Selective Use of the Primary Literature Transforms the Classroom Into a Virtual Laboratory. Genetics, 176(3), 1381\u20131389. https://doi.org/10.1534/genetics.107.071183</li><li>\u00a0 Hull, D., Pettifer, S. R., &amp; Kell, D. B. (2008). Defrosting the Digital Library: Bibliographic Tools for the Next Generation Web. PLOS Computational Biology, 4(10), e1000204. https://doi.org/10.1371/journal.pcbi.1000204</li><li>\u00a0 Jankowski, A., &amp; Sawyer, Y. E. (2019). Biology Student Perceptions of Information Literacy Instruction in the Context of an Essential Skills Workshop Series. Issues in Science and Technology Librarianship, (92). https://doi.org/10.29173/istl10</li><li>McGuinn, K., Stone, G., Sharman, A., &amp; Davison, E. (2017). Student reading lists: Evaluating the student experience at the University of Huddersfield. The Electronic Library, 35(2), 322\u2013332. https://doi.org/10.1108/EL-12-2015-0252</li><li>\u00a0 Moraes, I. D. C., Almeida, G. M. D., &amp; Recine, E. (2024). Conte\u00fado program\u00e1tico e referencial bibliogr\u00e1fico da disciplina de Educa\u00e7\u00e3o Alimentar e Nutricional: Uma an\u00e1lise documental. DEMETRA: Alimenta\u00e7\u00e3o, Nutri\u00e7\u00e3o &amp; Sa\u00fade, 19, e77437. https://doi.org/10.12957/demetra.2024.77437</li><li>\u00a0 Morgan, D. E. (2024). Zotero as a teaching tool for independent study courses, honors contracts, and undergraduate research mentoring. Journal of Microbiology &amp; Biology Education, 25(3), e00132-24. https://doi.org/10.1128/jmbe.00132-24</li><li>\u00a0 Newton Miller, L. (2011). University Biology Patrons in the Library Literature 2000-2010: A Content Analysis &amp; Literature Review. Partnership: The Canadian Journal of Library and Information Practice and Research, 6(1). https://doi.org/10.21083/partnership.v6i1.1400</li><li>\u00a0 Pain, E. (2016). How to keep up with the scientific literature. https://www.science.org/content/article/how-keep-scientific-literature</li><li>\u00a0 Schucan Bird, K., &amp; Pitman, L. (2020). How diverse is your reading list? Exploring issues of representation and decolonisation in the UK. Higher Education, 79(5), 903\u2013920. https://doi.org/10.1007/s10734-019-00446-9</li><li>\u00a0 Thorpe, C., Honey, T., &amp; Wilson, E. (2024). Reading Lists as Enablers of Learning in an Immersive Block Teaching Model. New Review of Academic Librarianship, 30(4), 390\u2013404. https://doi.org/10.1080/13614533.2024.2381519</li></ul></div></div><div><br/></div><p></p>","doi":"https://doi.org/10.59350/15xt2-y2w37","funding_references":null,"guid":"tag:blogger.com,1999:blog-3916921080498993167.post-557060750846885939","id":"d55fb575-6b85-4900-ba89-663cd955fc94","image":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/s72-w565-h291-c/biologia%202024.png","images":[{"height":"291","src":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/w565-h291/biologia%202024.png","width":"565"},{"src":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBLXLPBBXRdEIaaz8KoCouXlmhZFLa8E_wB8YXlqoJTQQo3QY6rpCeUTwOqrynCxwSh_dcLqK4K4FvcIW-OvkZRbK3eM2p7oRB9MFjzE7USmJoMFraA2FFCiKiDEqQwYqjT1ZUXtSqIeUKf8MMK2hKxugUfgHIzUJZpR6_CyLRY08oslLNIByIUGmcWiw/s2248/biologia%202024.png"}],"indexed":true,"indexed_at":1776366655,"language":"es","parent_doi":null,"published_at":1776365160,"reference":[],"registered_at":0,"relationships":[],"rid":"vmavw-8ce30","status":"active","summary":"Dise\u00f1ar la bibliograf\u00eda para los cursos de Biolog\u00eda Generar la lista de la bibliograf\u00eda, tanto b\u00e1sica como complementar\u00eda, constituye un proceso fundamental en el dise\u00f1o curricular porque conforma el n\u00facleo te\u00f3rico, metodol\u00f3gico y conceptual de la clase, establece el enfoque, las dimensiones, el contexto, el alcance y define claramente el marco conceptual que guiar\u00e1 el curso.","tags":["PAPIME/UNAM/PE203625"],"title":"Dise\u00f1ar bibliograf\u00eda para un curso de biolog\u00eda","updated_at":1776365216,"url":"https://biogarabatos.blogspot.com/2026/04/disenar-bibliografia-para-un-curso-de.html","version":"v1"},{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":[],"family":"Luger","given":"Susanne"},{"contributor_roles":[],"family":"Fabbro","given":"Christopher"}],"blog":{"archive_collection":null,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":[{"name":"Open Access Network"}],"canonical_url":null,"category":"otherSocialSciences","community_id":"969d397b-49b9-4c53-9220-607ef85409e5","created_at":1743604215.212958,"current_feed_url":null,"description":"Neueste Beitr\u00e4ge","doi":null,"doi_as_guid":false,"favicon":null,"feed_format":"application/rss+xml","feed_url":"https://open-access.network/rss-feed?type=200","filter":null,"funding":null,"generator":"Other","generator_raw":"Other","home_page_url":"https://open-access.network","id":"f5a57494-4e8e-41d9-b84c-26cb9b0ab291","indexed":true,"issn":null,"language":"de","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.64395","registered_at":0,"relative_url":null,"ror":null,"secure":true,"slug":"oa_network","status":"active","subfield":"1802","subfield_validated":null,"title":"Open Access Network","updated_at":1776328311.338655,"use_api":null,"use_mastodon":false,"user_id":null},"blog_name":"Open Access Network","blog_slug":"oa_network","content_html":"Einblicke zum Call for Proposals der Open-Access-Tage 2026\n\n\nVom 28.09. bis 30.09.2026 finden die diesj\u00e4hrigen Open-Access-Tage an der Johannes Kepler Universit\u00e4t Linz statt. Der Call for Proposals f\u00fcr Vortr\u00e4ge und Workshops l\u00e4uft noch bis zum 16.04. und steht unter dem Motto \u201eWandel mit Verantwortung gestalten\u201c. Die Ortskomitee-Mitglieder Susanne Luger und Christopher Fabbro geben einige Einblicke sowohl zum Motto als auch zum Veranstaltungsort.\n\nWandel im wissenschaftlichen Publikationswesen\nDurch Digitalisierung, Open Access, Open Science und in den letzten Jahren den Einzug von K\u00fcnstlicher Intelligenz befindet sich das wissenschaftliche Publikationswesen in einer Zeit immer schnelleren Wandels und des Umbruchs. Ausgetretene Pfade werden verlassen und neue Wege beschritten. Etablierte Standards und langj\u00e4hrig praktizierte Arbeitsweisen haben zum Teil ausgedient, geraten ins Wanken, werden hinterfragt und neu definiert. Dies ist \u00fcberall zu sp\u00fcren. Dabei m\u00fcssen allerdings nicht nur die Vorteile und Chancen erkannt, sondern auch die m\u00f6glichen Risiken und Konsequenzen in den Blick genommen werden. \n\nVerfolgt man die Mottos der Open-Access-Tage der letzten Jahre, ist es nun an der Zeit, den Schritt von den Visionen hin zu einer verantwortungsvollen Umsetzung zu gehen. Als bedeutender Treiberinnen der Open-Access-Bewegung nehmen insbesondere Bibliotheken und andere forschungsunterst\u00fctzende Einrichtungen im Zusammenspiel mit allen Stakeholdern des Publikationssystems eine zentrale Rolle ein. Damit geht auch die Verantwortung einher, diesen Wandel mit Bedacht und praxisnah zu gestalten, damit Schl\u00fcsselbegriffe wie \u201eQualit\u00e4t\u201c, \u201eIntegrit\u00e4t\u201c, \u201egute wissenschaftliche Praxis\u201c, \u201eTeilhabe\u201c und \u201eNachhaltigkeit\u201c keine leeren Worte sind.\n\n\nHerausforderungen im Zuge des Wandels\nAus dieser Problemlage heraus ist der Call for Proposals unter dem Motto \u201eWandel mit Verantwortung gestalten\u201c entstanden. Hierbei nehmen wir insbesondere die folgenden Herausforderungen und Problemfelder in den Blick:\n\nMit den fortschreitenden technischen M\u00f6glichkeiten und Anforderungen aus der Wissenschaft entstehen zunehmend neuartige Publikationsformate wie Micro-Publikationen, Datenpublikationen oder digitale Editionen, die in der Open-Access-Bewegung bisher weniger Beachtung gefunden haben. Der umfassendere Open-Science-Gedanke beschr\u00e4nkt sich aber nicht nur auf den freien Zugang zu einem klassischen Artikel in einer Zeitschrift. Welche neuen Denkweisen, Standards und Infrastrukturen sind daher erforderlich, um die diversen Publikationskulturen und -formate bestm\u00f6glich in die Open-Access-Transformation zu integrieren und am wissenschaftlichen Diskurs teilhaben zu lassen?\nIn einer zunehmend offenen Publikationslandschaft m\u00fcssen auch Qualit\u00e4tssicherung, Transparenz und wissenschaftliche Standards geachtet, gelebt und gegebenenfalls neu gedacht werden. Vor dem Hintergrund, dass Open-Access-Publikationen im Rahmen der Verarbeitung durch KI-Systeme tausendfach als Basis f\u00fcr gro\u00dfangelegte, maschinelle Auswertungen und automatisierte Texterstellung herangezogen werden, stellt sich auch hier die Frage nach dem verantwortungsvollen Umgang mit diesen Ressourcen. Was bedeutet es in diesem Kontext, \u201eAutor*in\u201c zu sein und welche Verantwortung kommt den Betreibern, Rechteinhabern, Autor*innen und Nutzer*innen zu? Welche rechtlichen und ethischen Rahmenbedingungen k\u00f6nnen und wollen wir als Open-Science-Community hierf\u00fcr stecken?\nEinige etablierte Systeme geraten durch unsichere Finanzierung, Wissenschaftsskepsis und politische Umbr\u00fcche immer mehr unter Druck, z. B. (Publikations-) Infrastrukturen wie die in den USA betriebene Datenbank PubMed. Ein st\u00e4rker werdendes Konkurrenzdenken zwischen einigen L\u00e4ndern schafft zudem eine Tendenz, den Grundgedanken eines offenen Zugangs zu Forschungsergebnissen zu hinterfragen.  Daher ist es wichtig, Verantwortung f\u00fcr nachhaltige Open-Access-Modelle und resiliente Infrastrukturen zu \u00fcbernehmen und diese zu gestalten. Gibt es Systeme, die uns als Open-Access-Community unabh\u00e4ngiger von einzelnen Akteuren oder Ereignissen machen, und trotzdem einen weltweiten und freien Zugang zu gew\u00e4hrleisten? Welche Verantwortung kommt dabei auch Entscheidungstr\u00e4ger*innen und Hochschulleitungen zu, die die notwendigen Rahmenbedingungen daf\u00fcr schaffen m\u00fcssen?\n\nWandel in Stadt und Universit\u00e4t\nDie Open-Access-Tage 2026 laden dazu ein, diese Fragen und Herausforderungen zu diskutieren und den Wandel des wissenschaftlichen Publikationssystems gemeinsam zu reflektieren, kritisch zu begleiten und aktiv mitzugestalten. Dabei sind die diesj\u00e4hrigen Open-Access-Tage nicht nur in Hinblick auf ihre jubil\u00e4umstr\u00e4chtigen Zahlen \u2013 20. Auflage der Konferenz (davon zum dritten Mal in \u00d6sterreich) an einer Universit\u00e4t, die heuer ihr 60-j\u00e4hriges Bestehen feiert \u2013 besonders, sondern auch, weil sie in der Stadt Linz stattfinden, die selbst ein Ort des Wandels ist.\n\nLinz hat sich in den letzten Jahrzehnten von einer grauen Industriestadt zu einem bunten, international beachteten Ort f\u00fcr Kunst, Kultur Technologie und Gesellschaft entwickelt, in dem digitale Innovation auf gesellschaftliche Reflexion trifft. Auch wenn die Stahlwerke der Voestalpine weiterhin gr\u00f6\u00dfter Arbeitgeber der Stadt sind, so bietet Linz mit zahlreichen Museen, dem Mural Harbor, dem Ars Electronica Festival oder der Klangwolke eine bunte Kunst- und Kulturszene sowie gr\u00fcne Oasen entlang der Donau. 2009 war Linz europ\u00e4ische Kulturhauptstadt und ist mittlerweile von der UNESCO als \u201eCity of Media Arts\u201c ausgezeichnet worden.\n\nAuch die Johannes Kepler Universit\u00e4t hat sich in ihren 60 Jahren sehr gewandelt. Als Hochschule f\u00fcr Wirtschaftswissenschaften gegr\u00fcndet, ist sie heute die drittgr\u00f6\u00dfte Arbeitgeberin in Linz und die gr\u00f6\u00dfte Bildungseinrichtung Ober\u00f6sterreichs. Sie bietet an ihrem Campus am Rande der Stadt einen Ort f\u00fcr Forschung und Lehre in einem breiten Spektrum an F\u00e4chern, von Rechtswissenschaften bis Humanmedizin, von Soziologie bis Artificial Intelligence. An einer der ersten Campusuniversit\u00e4ten in \u00d6sterreich, die sich bewusst als zusammenh\u00e4ngender Forschungsraum positioniert, begegnen sich die Wissenschaften nicht nur r\u00e4umlich, sondern auch inhaltlich. Diese Interdisziplinarit\u00e4t spiegelt sich auch im Selbstverst\u00e4ndnis der Universit\u00e4t wider, die auf gesellschaftliche Relevanz und Transfer setzt \u2013 Aspekte, die auch f\u00fcr Open Access relevant sind.\n\nDas Orts- und Programmkomitee freuen sich darauf, die Teilnehmenden der Open-Access-Tage 2026 unter dem Motto \u201eWandel mit Verantwortung gestalten\u201c in Linz an der Johannes Kepler Universit\u00e4t begr\u00fc\u00dfen zu d\u00fcrfen \u2013 in einer Stadt und an einer Universit\u00e4t, die selbst Teil dieser Transformation sind.","doi":"https://doi.org/10.64395/aab8c-19631","funding_references":null,"guid":"https://open-access.network/blog/einblicke-zum-call-for-proposals-der-open-access-tage-2026","id":"629f04c2-0f1a-4d94-9cfd-466f06af90c4","image":null,"images":[],"indexed":true,"indexed_at":1776347991,"language":"de","parent_doi":null,"published_at":1776344806,"reference":[],"registered_at":0,"relationships":[],"rid":"r4ctm-spw73","status":"active","summary":"Einblicke zum Call for Proposals der Open-Access-Tage 2026 Vom 28.09. bis 30.09.2026 finden die diesj\u00e4hrigen Open-Access-Tage an der Johannes Kepler Universit\u00e4t Linz statt. Der Call for Proposals f\u00fcr Vortr\u00e4ge und Workshops l\u00e4uft noch bis zum 16.04. und steht unter dem Motto \u201eWandel mit Verantwortung gestalten\u201c. Die Ortskomitee-Mitglieder Susanne Luger und Christopher Fabbro geben einige Einblicke sowohl zum Motto als auch zum Veranstaltungsort.","tags":["Konferenz"],"title":"Einblicke zum Call for Proposals der Open-Access-Tage 2026","updated_at":1776344806,"url":"https://open-access.network/blog/einblicke-zum-call-for-proposals-der-open-access-tage-2026","version":"v1"},{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":[],"family":"Royle","given":"Stephen","url":"https://orcid.org/0000-0001-8927-6967"}],"blog":{"archive_collection":22145,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22145/20231106080607/","archive_timestamps":null,"authors":[{"name":"Stephen Royle"}],"canonical_url":null,"category":"biologicalSciences","community_id":"141eca21-f9bb-44c7-aa0d-2ca0110390c6","created_at":1673740800,"current_feed_url":null,"description":"x == (s || z). You say it kwontized","doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/d1d0a116-fe9c-4f5a-b8c5-c3b69edb8327/logo","feed_format":"application/atom+xml","feed_url":"https://quantixed.org/feed/atom/","filter":null,"funding":null,"generator":"WordPress","generator_raw":"WordPress 6.7.1","home_page_url":"https://quantixed.org","id":"39d9ccfd-5461-49f3-a061-efaf066c19b6","indexed":false,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":"https://fosstodon.org/@quantixed","prefix":"10.59350","registered_at":1729318765,"relative_url":null,"ror":null,"secure":true,"slug":"quantixed","status":"active","subfield":"1307","subfield_validated":null,"title":"quantixed","updated_at":1776328487.1125,"use_api":true,"use_mastodon":true,"user_id":"4731ee99-7f23-4817-a2cd-8ee71d8f4c64"},"blog_name":"quantixed","blog_slug":"quantixed","content_html":"\n<p>I wanted to know:</p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>how many proteins in the human proteome have transmembrane domains?</li>\n\n\n\n<li>of those that do, how many have 1 or 2 or n transmembrane domains?</li>\n</ol>\n\n\n\n<p>After a little bit of searching, I couldn&#8217;t find any answers. So I decided to use R to retrieve the necessary info from Uniprot and calculate it myself. I thought I&#8217;d post it here in case it&#8217;s useful for others.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Human</h2>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16ee5638&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16ee5638\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3754\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n\n\n\n<p>We&#8217;ll start with the info I wanted. According to Uniprot there are 20,659 proteins in the human proteome. <strong>One quarter of these have one or more TMD</strong>. The majority have one TMD and there are almost 1,000 7TM proteins (all those GPCRs, I guess). There&#8217;s 413 4TM and 327 2TM proteins. We can find examples of 1 through 17 TMDs, there&#8217;s no proteins with 18, 4 proteins with 19TM, 21 with 24TM and 2 with 38TM.</p>\n\n\n\n<p>The analysis is done simply by looking at how many <code>TRANSMEM</code> Uniprot has for each IDs in the reference proteome. I have not distinguished between helical and partial entries, and of course it&#8217;s possible that the annotations are not quite correct.</p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>TMDs</td><td>Count</td><td>Frequency (proteome as %)</td><td>Frequency (TMDPs as %)</td></tr><tr><td>1</td><td>2402</td><td>11.6</td><td>45.8</td></tr><tr><td>2</td><td>327</td><td>1.6</td><td>6.2</td></tr><tr><td>3</td><td>159</td><td>0.8</td><td>3.0</td></tr><tr><td>4</td><td>413</td><td>2.0</td><td>7.9</td></tr><tr><td>5</td><td>77</td><td>0.4</td><td>1.5</td></tr><tr><td>6</td><td>276</td><td>1.3</td><td>5.3</td></tr><tr><td>7</td><td>947</td><td>4.6</td><td>18.0</td></tr><tr><td>8</td><td>83</td><td>0.4</td><td>1.6</td></tr><tr><td>9</td><td>63</td><td>0.3</td><td>1.2</td></tr><tr><td>10</td><td>123</td><td>0.6</td><td>2.3</td></tr><tr><td>11</td><td>75</td><td>0.4</td><td>1.4</td></tr><tr><td>12</td><td>202</td><td>1.0</td><td>3.8</td></tr><tr><td>13</td><td>24</td><td>0.1</td><td>0.5</td></tr><tr><td>14</td><td>26</td><td>0.1</td><td>0.5</td></tr><tr><td>15</td><td>13</td><td>0.1</td><td>0.2</td></tr><tr><td>16</td><td>1</td><td>0.0</td><td>0.0</td></tr><tr><td>17</td><td>9</td><td>0.0</td><td>0.2</td></tr><tr><td>19</td><td>4</td><td>0.0</td><td>0.1</td></tr><tr><td>24</td><td>21</td><td>0.1</td><td>0.4</td></tr><tr><td>38</td><td>2</td><td>0.0</td><td>0.0</td></tr></tbody></table></figure>\n\n\n\n<p>Having written this code, I decided to run some other proteomes to see how they compare.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Model organisms</h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16ef24d0&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16ef24d0\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"3757\" src=\"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3757\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16f00906&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16f00906\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"3756\" src=\"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3756\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16f01da7&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16f01da7\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"3758\" src=\"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3758\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e0d16f04112&quot;}\" data-wp-interactive=\"core/image\" data-wp-key=\"69e0d16f04112\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"3755\" src=\"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png\" alt=\"\" class=\"wp-image-3755\" srcset=\"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png 1024w, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-300x169.png 300w, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-768x432.png 768w, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1536x864.png 1536w, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" /><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" />\n\t\t\t</svg>\n\t\t</button></figure>\n</figure>\n\n\n\n<p>These four organisms have between 18% and 29% of the proteome made of proteins with TMDs. The pattern of numbers of TMDs are kind of similar although there&#8217;s no peak in yeast for 7TM and the peaks for 2, 4, 6 or 12 TMs differ from human.</p>\n\n\n\n<p>Maybe this information is out there in some database or other. As I said, I couldn&#8217;t find something easily. Even if there are more precise ways of determining the TMDs, I think this data is good enough to know roughly what the proportions are.</p>\n\n\n\n<h2 class=\"wp-block-heading\">The code</h2>\n\n\n\n<p>I manually downloaded the fasta.gz files for the reference proteomes. They are currently linked <a href=\"https://www.uniprot.org/proteomes?query=proteome_type%3A1\">here</a>.</p>\n\n\n\n<p>To extract all the Uniprot IDs, I used a shell one-liner:</p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nawk &#039;/^&gt;sp\\|.*\\|/{gsub(/^&gt;sp\\|/,&quot;&quot;); gsub(/\\|.*/,&quot;&quot;); print &quot;&gt;&quot; $0; next} {print}&#039; file.fasta | grep &quot;^&gt;&quot; | sed &#039;s/&gt;//g&#039; &gt; species_uniprot.txt\n</pre></div>\n\n\n<p>Then I used this R script. The main function can probably be simplified. I had to add several checks to make sure I got all the data back from the API. Before posting, I tried to cut it back to make it easier to read, but Ionly succeeded in breaking the script! This is the working version.</p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: r; title: ; notranslate\" title=\"\">\n# if (!require(&quot;BiocManager&quot;, quietly = TRUE)) {\n#   install.packages(&quot;BiocManager&quot;) \n# }\n# BiocManager::install(&quot;biomaRt&quot;)\nlibrary(httr)\nlibrary(stringr)\nlibrary(ggplot2)\nlibrary(biomaRt)\nlibrary(dplyr)\nlibrary(tidyr)\nlibrary(cowplot)\n\n## FUNCTIONS ----\n\nisJobReady &lt;- function(jobId, pollingInterval = 5, maxWaitSeconds = 3600) {\n  if (is.null(jobId) || length(jobId) == 0 || is.na(jobId) || !nzchar(jobId)) {\n    return(FALSE)\n  }\n  nTries &lt;- ceiling(maxWaitSeconds / pollingInterval)\n  for (i in 1:nTries) {\n    url &lt;- paste(&quot;https://rest.uniprot.org/idmapping/status/&quot;, jobId, sep = &quot;&quot;)\n    r &lt;- GET(url = url, accept_json())\n    status &lt;- content(r, as = &quot;parsed&quot;)\n    if (!is.null(status&#x5B;&#x5B;&quot;results&quot;]]) || !is.null(status&#x5B;&#x5B;&quot;failedIds&quot;]])) {\n      return(TRUE)\n    }\n    if (!is.null(status&#x5B;&#x5B;&quot;messages&quot;]])) {\n      print(status&#x5B;&#x5B;&quot;messages&quot;]])\n      return(FALSE)\n    }\n    Sys.sleep(pollingInterval)\n  }\n  return(FALSE)\n}\n\nretrieveUniprotInfo &lt;- function(x,\n                                chunk_size = 5000,\n                                maxWaitSeconds = 3600,\n                                taxId = &quot;9606&quot;,\n                                progress = TRUE) {\n  normalize_uniprot_ids &lt;- function(values) {\n    values &lt;- trimws(values)\n    # Accept FASTA-style headers like: sp|P12345|... or tr|A0A...|...\n    m &lt;- str_match(values, regex(&quot;^&gt;?\\\\s*(?:sp|tr)\\\\|(&#x5B;^|]+)\\\\|&quot;, ignore_case = TRUE))\n    values &lt;- ifelse(!is.na(m&#x5B;, 2]), m&#x5B;, 2], values)\n    values\n  }\n  \n  ids &lt;- unique(normalize_uniprot_ids(x))\n  ids &lt;- ids&#x5B;!is.na(ids) &amp; nzchar(ids)]\n  if (length(ids) == 0) {\n    stop(&quot;No valid identifiers were provided to retrieveUniprotInfo().&quot;)\n  }\n  \n  fields &lt;- &quot;accession,id,protein_name,gene_names,ft_transmem,length,cc_function,cc_subcellular_location,go_p,go_c&quot;\n  acc_pattern &lt;- &quot;^&#x5B;OPQ]&#x5B;0-9]&#x5B;A-Z0-9]{3}&#x5B;0-9](-&#x5B;0-9]+)?$|^&#x5B;A-NR-Z]&#x5B;0-9](?:&#x5B;A-Z]&#x5B;A-Z0-9]{2}&#x5B;0-9]){1,2}(-&#x5B;0-9]+)?$&quot;\n  is_accession &lt;- str_detect(ids, acc_pattern)\n  \n  split_into_chunks &lt;- function(values, chunk_size = chunk_size) {\n    split(values, ceiling(seq_along(values) / chunk_size))\n  }\n  \n  get_next_link &lt;- function(link_header) {\n    if (is.null(link_header)) {\n      return(NULL)\n    }\n    links &lt;- unlist(strsplit(link_header, &quot;,\\\\s*&quot;))\n    next_link &lt;- links&#x5B;str_detect(links, &quot;rel=\\\\\\&quot;next\\\\\\&quot;&quot;)]\n    if (length(next_link) == 0) {\n      return(NULL)\n    }\n    next_url &lt;- str_extract(next_link&#x5B;1], &quot;(?&lt;=&lt;).+?(?=&gt;)&quot;)\n    if (is.na(next_url) || !nzchar(next_url)) {\n      return(NULL)\n    }\n    next_url\n  }\n  \n  read_tsv_response &lt;- function(resp) {\n    read.table(\n      text = content(resp, as = &quot;text&quot;, encoding = &quot;UTF-8&quot;),\n      sep = &quot;\\t&quot;,\n      header = TRUE,\n      fill = TRUE,\n      quote = &quot;&quot;,\n      comment.char = &quot;&quot;,\n      check.names = FALSE\n    )\n  }\n  \n  fetch_from_redirect &lt;- function(redirect_url) {\n    if (is.null(redirect_url) || length(redirect_url) == 0 ||\n        is.na(redirect_url) || !nzchar(redirect_url)) {\n      return(NULL)\n    }\n    \n    # The paged idmapping results endpoint is capped at size &lt;= 500.\n    # Use stream endpoint to retrieve the full chunk in one response.\n    stream_url &lt;- gsub(&quot;/results/&quot;, &quot;/results/stream/&quot;, redirect_url)\n    sep &lt;- ifelse(str_detect(stream_url, &quot;\\\\?&quot;), &quot;&amp;&quot;, &quot;?&quot;)\n    stream_url &lt;- paste0(\n      stream_url,\n      sep,\n      &quot;fields=&quot;, URLencode(fields, reserved = TRUE),\n      &quot;&amp;format=tsv&quot;\n    )\n    \n    r &lt;- GET(url = stream_url)\n    if (status_code(r) &lt; 400) {\n      return(read_tsv_response(r))\n    }\n    \n    # Fallback to paged endpoint if stream is unavailable.\n    sep &lt;- ifelse(str_detect(redirect_url, &quot;\\\\?&quot;), &quot;&amp;&quot;, &quot;?&quot;)\n    url &lt;- paste0(\n      redirect_url,\n      sep,\n      &quot;fields=&quot;, URLencode(fields, reserved = TRUE),\n      &quot;&amp;format=tsv&amp;size=500&quot;\n    )\n    \n    r &lt;- GET(url = url)\n    stop_for_status(r)\n    resultsTable &lt;- read_tsv_response(r)\n    \n    next_url &lt;- get_next_link(headers(r)&#x5B;&#x5B;&quot;link&quot;]])\n    while (!is.null(next_url) &amp;&amp; !is.na(next_url) &amp;&amp; nzchar(next_url)) {\n      r &lt;- GET(url = next_url)\n      stop_for_status(r)\n      resultsTable &lt;- rbind(resultsTable, read_tsv_response(r))\n      next_url &lt;- get_next_link(headers(r)&#x5B;&#x5B;&quot;link&quot;]])\n    }\n    \n    resultsTable\n  }\n  \n  map_ids &lt;- function(values, from_db, to_db, chunk_size, taxId = NULL,\n                      label = &quot;ids&quot;) {\n    if (length(values) == 0) {\n      return(NULL)\n    }\n    \n    results_list &lt;- list()\n    chunks &lt;- split_into_chunks(values, chunk_size = chunk_size)\n    n_chunks &lt;- length(chunks)\n    for (i in seq_along(chunks)) {\n      chunk &lt;- chunks&#x5B;&#x5B;i]]\n      if (isTRUE(progress)) {\n        cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d (%d ids)\\n&quot;,\n                    label, i, n_chunks, length(chunk)))\n      }\n      \n      files &lt;- list(\n        ids = paste0(chunk, collapse = &quot;,&quot;),\n        from = from_db,\n        to = to_db\n      )\n      if (!is.null(taxId)) {\n        files$taxId &lt;- taxId\n      }\n      \n      r &lt;- POST(url = &quot;https://rest.uniprot.org/idmapping/run&quot;, body = files,\n                encode = &quot;multipart&quot;, accept_json())\n      stop_for_status(r)\n      submission &lt;- content(r, as = &quot;parsed&quot;, encoding = &quot;UTF-8&quot;)\n      \n      job_id &lt;- submission&#x5B;&#x5B;&quot;jobId&quot;]]\n      if (is.null(job_id) || length(job_id) == 0 || is.na(job_id) || !nzchar(job_id)) {\n        if (isTRUE(progress)) {\n          cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: no jobId returned\\n&quot;,\n                      label, i, n_chunks))\n        }\n        next\n      }\n      if (!isJobReady(job_id, maxWaitSeconds = maxWaitSeconds)) {\n        if (isTRUE(progress)) {\n          cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: timeout/not ready\\n&quot;,\n                      label, i, n_chunks))\n        }\n        next\n      }\n      \n      details_url &lt;- paste(&quot;https://rest.uniprot.org/idmapping/details/&quot;,\n                           job_id, sep = &quot;&quot;)\n      r &lt;- GET(url = details_url, accept_json())\n      stop_for_status(r)\n      details &lt;- content(r, as = &quot;parsed&quot;, encoding = &quot;UTF-8&quot;)\n      \n      redirect_url &lt;- details&#x5B;&#x5B;&quot;redirectURL&quot;]]\n      if (is.null(redirect_url) || length(redirect_url) == 0 ||\n          is.na(redirect_url) || !nzchar(redirect_url)) {\n        if (isTRUE(progress)) {\n          cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: missing redirectURL\\n&quot;,\n                      label, i, n_chunks))\n        }\n        next\n      }\n      chunk_result &lt;- fetch_from_redirect(redirect_url)\n      if (is.null(chunk_result)) {\n        if (isTRUE(progress)) {\n          cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: invalid redirectURL\\n&quot;,\n                      label, i, n_chunks))\n        }\n        next\n      }\n      \n      results_list&#x5B;&#x5B;length(results_list) + 1]] &lt;- chunk_result\n      if (isTRUE(progress)) {\n        cat(sprintf(&quot;&#x5B;UniProt] %s chunk %d/%d: completed\\n&quot;,\n                    label, i, n_chunks))\n      }\n    }\n    \n    if (length(results_list) == 0) {\n      return(NULL)\n    }\n    do.call(rbind, results_list)\n  }\n  \n  accession_ids &lt;- ids&#x5B;is_accession]\n  gene_like_ids &lt;- ids&#x5B;!is_accession]\n  \n  acc_results &lt;- map_ids(\n    values = accession_ids,\n    from_db = &quot;UniProtKB_AC-ID&quot;,\n    to_db = &quot;UniProtKB&quot;,\n    chunk_size = chunk_size,\n    label = &quot;accessions&quot;\n  )\n  \n  gene_results &lt;- map_ids(\n    values = gene_like_ids,\n    from_db = &quot;Gene_Name&quot;,\n    to_db = &quot;UniProtKB-Swiss-Prot&quot;,\n    chunk_size = chunk_size,\n    taxId = taxId,\n    label = &quot;gene_names&quot;\n  )\n  \n  results_list &lt;- list()\n  if (!is.null(acc_results)) {\n    results_list&#x5B;&#x5B;length(results_list) + 1]] &lt;- acc_results\n  }\n  if (!is.null(gene_results)) {\n    results_list&#x5B;&#x5B;length(results_list) + 1]] &lt;- gene_results\n  }\n  \n  if (length(results_list) == 0) {\n    stop(&quot;No UniProt results were returned. Check identifiers and taxId.&quot;)\n  }\n  \n  resultsTable &lt;- do.call(rbind, results_list)\n  if (&quot;Entry&quot; %in% colnames(resultsTable)) {\n    resultsTable &lt;- resultsTable&#x5B;!duplicated(resultsTable$Entry), ]\n  }\n  return(resultsTable)\n}\n\n\n\n## SCRIPT ----\n\nspecies &lt;- c(&quot;human&quot;, &quot;zebrafish&quot;, &quot;drosophila&quot;, &quot;worm&quot;, &quot;yeast&quot;)\nsci_names &lt;- c(&quot;human&quot; = &quot;Homo sapiens&quot;, &quot;zebrafish&quot; = &quot;Danio rerio&quot;, &quot;drosophila&quot; = &quot;Drosophila melanogaster&quot;,\n               &quot;worm&quot; = &quot;Caenorhabditis elegans&quot;, &quot;yeast&quot; = &quot;Saccharomyces cerevisiae&quot;)\n\nfor (org in species) {\n  # look up scientific name of org\n  sci_name &lt;- sci_names&#x5B;org]\n  output_path &lt;- paste0(&quot;Output/Data/&quot;, org, &quot;_uniprot.csv&quot;)\n  if(file.exists(output_path)) {\n    message(paste(&quot;File&quot;, output_path, &quot;already exists. Loading&quot;, org))\n    df &lt;- read.csv(output_path)\n  } else {\n    message(paste(&quot;Retrieving UniProt info for&quot;, org))\n    species_ids &lt;- read.delim(paste0(&quot;Data/&quot;, org, &quot;_uniprot.txt&quot;), header = FALSE)\n    names(species_ids) &lt;- c(&quot;uniprot_id&quot;)\n    df &lt;- retrieveUniprotInfo(species_ids$uniprot_id)\n    # save this result\n    write.csv(df, output_path, row.names = FALSE)\n  }\n  \n  df$tms &lt;- str_count(df$Transmembrane, &quot;TRANSMEM&quot;)\n  tm_counts &lt;- df %&gt;%\n    group_by(tms) %&gt;%\n    summarise(count = n()) %&gt;% \n    filter(tms &gt; 0)\n  \n  p1 &lt;- ggplot(tm_counts, aes(x = tms, y = count)) +\n    geom_col(fill = &quot;#009988&quot;) +\n    labs(x = &quot;Transmembrane domains&quot;, y = &quot;Count&quot;,\n         title = sci_name) +\n    lims(x = c(0.5,NA), y = c(0,NA)) +\n    theme_bw(10)\n  \n  p2 &lt;- SuperPlotR::pieplot(x1 = c(sum(df$tms == 0), sum(df$tms &gt; 0)),\n                            cols = c(&quot;#bbbbbb&quot;, &quot;#009988&quot;)) +\n    # blank background and no legend\n    theme_void() +\n    theme(legend.position = &quot;none&quot;)\n  \n  # inset p2 in p1 and add information about the percentages\n  p &lt;- ggdraw() +\n    draw_plot(p1) +\n    # top right\n    draw_plot(p2, x = 0.9, y = 0.9, hjust = 1, vjust = 1, width = 0.4, height = 0.4) +\n    draw_label(paste0(&quot;Total Proteins: &quot;, nrow(df),\n                      &quot;\\nNo TM: &quot;, round(sum(df$tms == 0) / nrow(df) * 100, 1),\n                      &quot;%\\nWith TM(s): &quot;,\n                      round(sum(df$tms &gt; 0) / nrow(df) * 100, 1), &quot;%&quot;),\n               x = 0.97, y = 0.85, hjust = 1, vjust = 1, size = 8)\n  plot_path &lt;- paste0(&quot;Output/Plots/&quot;, org, &quot;_uniprot_tm_counts.png&quot;)\n  ggsave(plot_path, p, width = 1600, height = 900, units = &quot;px&quot;, dpi = 300)\n}\n</pre></div>\n\n\n<p>Note that I am using <code>{cowplot}</code> at the end to inset the pie chart and to add the text onto the main plot.</p>\n\n\n\n<p>&#8212;</p>\n\n\n\n<p>The post title comes from &#8220;My Domain&#8221; by Bernard Butler from his People Move On album.</p>\n","doi":"https://doi.org/10.59350/0ahfj-mxf51","funding_references":null,"guid":"https://quantixed.org/?p=3753","id":"70276eb9-e532-42ea-b09c-8d05e8df0b84","image":"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts.png","images":[{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts.png","width":"1024"},{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts.png","width":"1024"},{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts.png","width":"1024"},{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts.png","width":"1024"},{"height":"576","sizes":"auto, (max-width: 1024px) 100vw, 1024px","src":"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png","srcset":"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-300x169.png, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-768x432.png, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1536x864.png, https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts.png","width":"1024"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/human_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/drosophila_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/worm_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/yeast_uniprot_tm_counts-1024x576.png"},{"src":"https://quantixed.org/wp-content/uploads/2026/04/zebrafish_uniprot_tm_counts-1024x576.png"}],"indexed":true,"indexed_at":1776341368,"language":"en","parent_doi":null,"published_at":1776341040,"reference":[],"registered_at":0,"relationships":[],"rid":"k78xz-cmp18","status":"active","summary":"I wanted to know: how many proteins in the human proteome have transmembrane domains? of those that do, how many have 1 or 2 or n transmembrane domains? After a little bit of searching, I couldn\u2019t find any answers. So I decided to use R to retrieve the necessary info from Uniprot and calculate it myself. I thought I\u2019d post it here in case it\u2019s useful for others. Human   We\u2019ll start with the info I wanted.","tags":["Science","Bioinformatics","Cell Biology","Proteins","Rstats"],"title":"My Domain: proteome-wide scanning of TMDs","updated_at":1776112087,"url":"https://quantixed.org/2026/04/16/my-domain-proteome-wide-scanning-of-tmds/","version":"v1"},{"abstract":null,"archive_url":null,"authors":[{"affiliation":[{"name":"Front Matter"}],"contributor_roles":[],"family":"Fenner","given":"Martin","url":"https://orcid.org/0000-0003-1419-2405"}],"blog":{"archive_collection":22096,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22096/20231101172748/","archive_timestamps":[20231101172748,20240501180447,20241101172601],"authors":[{"name":"Martin Fenner","url":"https://orcid.org/0000-0003-1419-2405"}],"canonical_url":null,"category":"computerAndInformationSciences","community_id":"91dd2c24-5248-4510-9c2b-30b772bf8b60","created_at":1672561153,"current_feed_url":"","description":"The Front Matter Blog covers the intersection of science and technology since 2007.","doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/15a362ea-8138-42b8-917f-1840a92addf8/logo","feed_format":"application/atom+xml","feed_url":"https://blog.front-matter.de/atom","filter":null,"funding":null,"generator":"Ghost","generator_raw":"Ghost 5.52","home_page_url":"https://blog.front-matter.de","id":"74659bc5-e36e-4a27-901f-f0c8d5769cb8","indexed":null,"issn":"2749-9952","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":"https://hachyderm.io/@mfenner","prefix":"10.53731","registered_at":1729685319,"relative_url":null,"ror":null,"secure":true,"slug":"front_matter","status":"active","subfield":"1710","subfield_validated":null,"title":"Front Matter","updated_at":1776327653.24951,"use_api":true,"use_mastodon":true,"user_id":"8498eaf6-8c58-4b58-bc15-27eda292b1aa"},"blog_name":"Front Matter","blog_slug":"front_matter","content_html":"<p>All science blogs participating in the Rogue Scholar science blog archive provide a feed (in RSS, Atom or JSON Feed format) that includes not only metadata and full-text content for all archived blog posts, but also metadata about the blog itself. This includes required metadata such as the blog homepage and feed URL, but also an optional description, logo, license, language and science subject area, using the OpenAlex subfield, which maps to the Scopus All Science Journal Classification (<a href=\"https://service.elsevier.com/app/answers/detail/a_id/12007/supporthub/scopus/\" rel=\"noreferrer\">ASJC</a>) widely used to classify journals. Rogue Scholar also supports an optional International Serial Number (<a href=\"https://portal.issn.org/\" rel=\"noreferrer\">ISSN</a>) as globally unique identifier for the blog \u2013 this blog has ISSN <a href=\"https://portal.issn.org/resource/ISSN/2749-9952\">2749-9952</a>. While I encourage all Rogue Scholar blogs to obtain an ISSN, there are two important limitations of the ISSN:</p><ul><li>a <a href=\"https://www.dnb.de/EN/Professionell/Services/ISSN/_content/eintrag02_akk2.html\" rel=\"noreferrer\">new ISSN is assigned when the title of the publication changes</a>, so it is not a persistent identifier,</li><li>an ISSN is not an actionable identifier, i.e. does not resolve to the landing page of the blog or other periodical publication (similar to some other persistent identifiers such as ORCID).</li></ul><p>An alternative approach is using DOIs as globally unique persistent identifier for the blog, and this aligns with using DOIs to <a href=\"https://doi.org/10.53731/w6nzs-jta75\" rel=\"noreferrer\">register blog posts</a>. The DOI registration agencies Crossref and DataCite support the resource type <strong>Journal</strong> and some other periodical publication formats (e.g. <strong>Book Series</strong>, <strong>Proceedings Series</strong>), but unfortunately not <strong>Blog</strong>. And they support the optional inclusion of one or more ISSNs.</p><p>Until Crossref and DataCite support the resource type <strong>Blog</strong>, Rogue Scholar will register blogs as resource type <strong>Journal</strong>, and include the optional ISSN. Front Matter is a Crossref member and can do this for all blogs participating in Rogue Scholar where it registers the DOIs (almost all of them). The Crossref resource type <strong>Journal</strong> unfortunately doesn't support many metadata (e.g. no subject classification), and <strong>Journal</strong> is mainly used as a container to describe a collection of <strong>Journal Articles</strong>. The DOI uses the same DOI prefix as the corresponding blog posts, and the blog slug (unique identifier used everywhere in Rogue Scholar) as the suffix.</p><p>The new blog DOI is displayed on the blog community page (e.g. <a href=\"https://rogue-scholar.org/communities/front_matter\" rel=\"noreferrer\">here</a> for this blog), and clicking on the DOI redirects users to the blog homepage (also shown, as is the ISSN).</p><figure class=\"kg-card kg-image-card\"><img src=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png\" class=\"kg-image\" alt=\"\" loading=\"lazy\" width=\"2000\" height=\"944\" srcset=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png 600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png 1000w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png 1600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png 2152w\" sizes=\"(min-width: 720px) 720px\"></figure><p>It will take a few days until the DOIs for all blogs where Rogue Scholar manages DOI registration are registered.</p><h3 id=\"blog-volumes\">Blog Volumes</h3><p>Periodical publications typically have page numbers, issues and volumes. While page numbers and issues are typically not used for online publication formats such as blogs, volumes still make sense in a different context. One particular challenge with science blogs that the Rogue Scholar science blog archive tries to address is long-term archiving. While <a href=\"https://doi.org/10.53731/g60vh-3ng48\" rel=\"noreferrer\">different approaches</a> can address is problem, the basic idea is <em>Lots of Copies Keep Stuff Safe</em> (<a href=\"https://en.wikipedia.org/wiki/LOCKSS\" rel=\"noreferrer\">LOCKSS</a>). And <strong>blog volumes</strong> \u2013 all blog posts from a particular blog from a given year \u2013 can simplify long-term blog archiving in multiple places.</p><p>This week Rogue Scholar implemented blog volumes for all participating blogs:</p><figure class=\"kg-card kg-image-card\"><img src=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png\" class=\"kg-image\" alt=\"\" loading=\"lazy\" width=\"2000\" height=\"748\" srcset=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png 600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png 1000w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png 1600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w2400/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png 2400w\" sizes=\"(min-width: 720px) 720px\"></figure><p>Clicking on a year shows all blog posts from that blog published in that year:</p><figure class=\"kg-card kg-image-card\"><img src=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png\" class=\"kg-image\" alt=\"\" loading=\"lazy\" width=\"2000\" height=\"1041\" srcset=\"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png 600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png 1000w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png 1600w, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w2400/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png 2400w\" sizes=\"(min-width: 720px) 720px\"></figure><p>Currently this is an automatically generated search in Rogue Scholar. The next step is generating a downloadable file with all content and metadata of the blog posts published in that year that can be archived in Rogue Scholar and elsewhere. I am working on generating these blog volumes in ePub format. These blog volumes will be registered with DOIs using the Crossref <strong>Journal Volume</strong> resource type (again, <strong>Blog Volume</strong> as resource type doesn't exist yet, and DataCite also has no <strong>Journal Volume</strong> ResourceTypeGeneral, <strong>Collection</strong> is the closest match). </p><p>These blog volumes can then be archived also in other repositories, and the ePub format makes reuse easier compare to PDF, as it is much easier to extract content from ePub. It has not escaped our notice that the specific archiving we are postulating immediately suggests a possible copying mechanism for a blog when its authors want to migrate to a different blogging platform.</p><p>Please use&nbsp;<a href=\"https://join.slack.com/t/rogue-scholar/shared_invite/zt-2ylpq1yoy-o~TkxDarfz5LSMhGSCYtiA\" rel=\"noreferrer\">Slack</a>,&nbsp;<a href=\"mailto:info@rogue-scholar.org\" rel=\"noreferrer\">email</a>,&nbsp;<a href=\"https://wisskomm.social/@rogue_scholar\" rel=\"noreferrer\">Mastodon</a>, or&nbsp;<a href=\"https://bsky.app/profile/rogue-scholar.bsky.social\" rel=\"noreferrer\">Bluesky</a>&nbsp;if you have any questions or comments, in particular if you are interested in archiving blogs via blog volumes generated by Rogue Scholar.</p><div class=\"kg-card kg-callout-card kg-callout-card-blue\"><div class=\"kg-callout-text\">Rogue Scholar is a scholarly infrastructure that is free for all authors and readers. You can support Rogue Scholar with a one-time or recurring&nbsp;<a href=\"https://ko-fi.com/rogue_scholar\" rel=\"noreferrer\">donation</a>&nbsp;or by becoming a sponsor.</div></div><h2 id=\"references\">References</h2><ol><li>Fenner, M. (2023, September 22). DOI registration workflow for a science blog. <em>Front Matter</em>. <a href=\"https://doi.org/10.53731/w6nzs-jta75\">https://doi.org/10.53731/w6nzs-jta75</a></li><li>Fenner, M. (2023, November 9). Archiving Rogue Scholar blogs with the Internet Archive. <em>Front Matter</em>. <a href=\"https://doi.org/10.53731/g60vh-3ng48\">https://doi.org/10.53731/g60vh-3ng48</a></li></ol>","doi":"https://doi.org/10.53731/ys8cq-f7659","funding_references":null,"guid":"https://doi.org/10.53731/ys8cq-f7659","id":"83f3637e-03c7-4331-bcc1-26c836b86a2e","image":"https://images.unsplash.com/photo-1592891103683-67b1d637c1a1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE5fHxyZWdpc3RlcnxlbnwwfHx8fDE3NzYzMjcwNzB8MA&ixlib=rb-4.1.0&q=80&w=2000","images":[{"height":"944","sizes":"(min-width: 720px) 720px","src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png","srcset":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png","width":"2000"},{"height":"748","sizes":"(min-width: 720px) 720px","src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png","srcset":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w2400/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png","width":"2000"},{"height":"1041","sizes":"(min-width: 720px) 720px","src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png","srcset":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w600/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1000/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w1600/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png, https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/size/w2400/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png","width":"2000"},{"src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-10.57.03.png"},{"src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.16.28.png"},{"src":"https://storage.ghost.io/c/c5/33/c533c955-b5f3-4ff1-ae2d-6b52a212e602/content/images/2026/04/Bildschirmfoto-2026-04-16-um-11.21.24.png"}],"indexed":true,"indexed_at":1776332917,"language":"en","parent_doi":null,"published_at":1776332710,"reference":[{"id":"https://doi.org/10.53731/w6nzs-jta75","type":"BlogPost","unstructured":"Fenner, M. (2023, September 22). DOI registration workflow for a science blog. <i>Front Matter</i>. https://doi.org/10.53731/w6nzs-jta75"},{"id":"https://doi.org/10.53731/g60vh-3ng48","type":"Article","unstructured":"Fenner, M. (2023). Archiving Rogue Scholar blogs with the Internet Archive. In <i>Front Matter</i> (Version v1). Crossref. https://doi.org/10.53731/g60vh-3ng48"}],"registered_at":0,"relationships":[],"rid":"8eek7-58g89","status":"active","summary":"All science blogs participating in the Rogue Scholar science blog archive provide a feed (in RSS, Atom or JSON Feed format) that includes not only metadata and full-text content for all archived blog posts, but also metadata about the blog itself.","tags":["Rogue Scholar"],"title":"Rogue Scholar starts to register blog DOIs","updated_at":1776332710,"url":"https://blog.front-matter.de/posts/rogue-scholar-starts-to-register-blog-dois/","version":"v1"},{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":["Author"],"family":"Robitaille","given":"Alec","url":"https://orcid.org/0000-0002-4706-1762"},{"contributor_roles":["Author"],"name":"Lucy D&#39;Agostino McGowan","url":"https://orcid.org/0000-0001-7297-9359"},{"contributor_roles":["Editor"],"family":"Padgham","given":"Mark","url":"https://orcid.org/0000-0003-2172-5265"},{"contributor_roles":["Author"],"family":"Bellini Saibene","given":"Yanina","url":"https://orcid.org/0000-0002-4522-7466"}],"blog":{"archive_collection":22126,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22126/20231105110646/","archive_timestamps":[20231105110646,20240505190836,20241105110650,20250505110723],"authors":[{"name":"The rOpenSci Team"}],"canonical_url":null,"category":"computerAndInformationSciences","community_id":"1e70f18f-d85d-4b86-af0c-0dc375b091bc","created_at":1693440000,"current_feed_url":null,"description":"Open Tools and R Packages for Open Science","doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/19c501a7-647b-4a11-9f5e-cf400817cce3/logo","feed_format":"application/feed+json","feed_url":"https://ropensci.org/blog/index.json","filter":null,"funding":null,"generator":"Hugo","generator_raw":"Hugo -- gohugo.io","home_page_url":"https://ropensci.org/blog","id":"ba402233-14af-48e4-b8b1-6fd22ac75a0c","indexed":false,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":1729793201,"relative_url":null,"ror":null,"secure":true,"slug":"ropensci","status":"active","subfield":"1710","subfield_validated":null,"title":"rOpenSci - open tools for open science","updated_at":1776328605.507327,"use_api":null,"use_mastodon":false,"user_id":"3ea9676b-41b6-4e57-aeda-44a7d7fe1dba"},"blog_name":"rOpenSci - open tools for open science","blog_slug":"ropensci","content_html":"<p>At rOpenSci, we\u2019re continually grateful for the support and engagement of our community, who help make research open-source stronger, more inclusive, and more collaborative. The <a href=\"https://ropensci.org/software-review/\">software peer review program</a> continues to grow, and today we announce that our editorial team keeps expanding:</p><p>We\u2019re excited to welcome <em>Alec Robitaille</em> and <em>Lucy D\u2019Agostino McGowan</em> as new editors. Alec joins our general review team, and Lucy our statistical software review team. Their expertise and dedication will help sustain and strengthen software peer review, ensuring that software reviews continue to meet the highest standards of quality, transparency, and impact.</p><p>Meet our new editors!</p><h2 id=\"alec-robitaille\"><a class=\"anchor d-print-none\" href=\"https://ropensci.org/blog/2026/04/16/editors2026//#alec-robitaille\"> <small>\ud83d\udd17</small></a>Alec Robitaille</h2><div class=\"float-left\"><figure class=\"m-0\"><img alt=\"headshot of Alec Robitaille\" src=\"https://ropensci.org/img/team/alec-robitaille.png\" style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\" zgotmplz=\"\"/> <p>                  Alec is a graduate student at Memorial University of Newfoundland and Labrador (Canada) studying foraging ecology, habitat selection and social networks in caribou and other ungulates. He has been involved in many projects along the way, from measuring muskrat habitat and lake ice dynamics at McGill University to estimating drought sensitivity in Canada\u2019s forests with the Canadian Forestry Service. Passionate about teaching open science and programming, he regularly mentors peers, runs workshops, develops example repositories, and organizes a Bayesian stats colearning group. He maintains the package <a href=\"https://github.com/ropensci/spatsoc\">spatsoc</a> (<a href=\"https://github.com/ropensci/software-review/issues/237\">reviewed</a> by rOpenSci in 2018) and has developed smaller packages with diverse applications including remote sensing (<a href=\"https://cran.r-project.org/web/packages/irg/\">irg</a>), social networks (<a href=\"https://cran.r-project.org/web/packages/hwig/\">hwig</a>), camera trap monitoring (<a href=\"https://github.com/robitalec/camtrapmonitoring\">camtrapmonitoring</a>), and animal movement (<a href=\"https://cran.r-project.org/web/packages/distanceto/\">distanceto</a>). He reviewed the <a href=\"https://github.com/ropensci/software-review/issues/568\">ohun</a>, <a href=\"https://github.com/ropensci/software-review/issues/638\">chopin</a>, and <a href=\"https://github.com/ropensci/software-review/issues/653\">emodnet.wfs</a> packages for rOpenSci, guest edited for the <a href=\"https://github.com/ropensci/software-review/issues/663\">rredlist</a> package and is currently handling the reviews for the <a href=\"https://github.com/ropensci/software-review/issues/732\">ActiGlobe</a>, and <a href=\"https://github.com/ropensci/software-review/issues/754\">saperlipopette</a> packages.                </p> </figure> </div><div style=\"clear: both;\"></div><p>Alec on <a href=\"https://github.com/robitalec\">GitHub</a>, <a href=\"http://robitalec.ca/\">Website</a>.</p><blockquote class=\"blockquote text-left\"> <p class=\"mb-0\">I first connected with the rOpenSci community through the review process for the package spatsoc in 2018 as part of our manuscript submission at Methods in Ecology and Evolution. During the review, I was thoroughly impressed by how welcoming the community was, and how effective the process was in helping me learn how to improve the package. rOpenSci is a landmark in the R and open science ecosystems with an ever evolving community to learn from and to be a part of. I am very grateful to be given the opportunity to continue contributing to rOpenSci in this new role as editor.</p> <footer class=\"blockquote-footer\">Alec L. Robitaille </footer></blockquote><h2 id=\"lucy-dagostino-mcgowan\"><a class=\"anchor d-print-none\" href=\"https://ropensci.org/blog/2026/04/16/editors2026//#lucy-dagostino-mcgowan\"> <small>\ud83d\udd17</small></a>Lucy D\u2019Agostino McGowan</h2><div class=\"float-left\"><figure class=\"m-0\"><img alt=\"headshot of Lucy D'Agostino McGowan\" src=\"https://ropensci.org/img/team/lucy-dagonstino-mcgowan.jpg\" style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\" zgotmplz=\"\"/> <p>                  Lucy D\u2019Agostino McGowan is an associate professor in the Department of Statistical Sciences at Wake Forest University. She received her PhD in Biostatistics from Vanderbilt University and completed her postdoctoral training at Johns Hopkins University Bloomberg School of Public Health. Her research focuses on causal inference, statistical communication, analytic design theory, and data science pedagogy. Lucy can be found blogging at <a href=\"https://livefreeordichotomize.com/\">livefreeordichotomize.com</a>, on Blue Sky <a href=\"https://bsky.app/profile/lucystats.bsky.social\">@LucyStats.bsky.social</a>, and podcasting on <a href=\"https://open.spotify.com/show/1L8TqB17Peo7jNgXuPObwi\">Casual Inference</a>.                </p> </figure> </div><div style=\"clear: both;\"></div><p>Lucy on <a href=\"https://github.com/LucyMcGowan\">GitHub</a>, <a href=\"https://www.lucymcgowan.com/\">Website</a>.</p><blockquote class=\"blockquote text-left\"> <p class=\"mb-0\">I am so thrilled to join the rOpenSci editorial team! I love the rOpenSci community and mission and am grateful for the opportunity to contribute.</p> <footer class=\"blockquote-footer\">Lucy D\u2019Agostino McGowan </footer></blockquote><h2 id=\"about-the-software-peer-review-program\"><a class=\"anchor d-print-none\" href=\"https://ropensci.org/blog/2026/04/16/editors2026//#about-the-software-peer-review-program\"> <small>\ud83d\udd17</small></a>About the Software Peer Review Program</h2><p>rOpenSci\u2019s software peer review program brings together volunteers to collaboratively review scientific and statistical software according to transparent, constructive, and open standards. Editors manage submissions, coordinate reviewers, and help guide packages through review to improve code quality, documentation, and usability.</p><p>This program is possible thanks to the many community members: authors submitting their packages, reviewers volunteering their time and expertise, and editors like Alec and Lucy who help managing reviews and maintaining a supportive process.</p><h2 id=\"get-involved\"><a class=\"anchor d-print-none\" href=\"https://ropensci.org/blog/2026/04/16/editors2026//#get-involved\"> <small>\ud83d\udd17</small></a>Get Involved</h2><p>Are you considering submitting your package for review? These resources will help:</p><ul><li>About <a href=\"https://ropensci.org/software-review/\">rOpenSci Software Peer Review</a>;</li><li>Browse the online book <a href=\"https://devguide.ropensci.org/\">rOpenSci Packages: Development, Maintenance, and Peer Review</a> and <a href=\"https://stats-devguide.ropensci.org\">rOpenSci Statistical Software Peer Review</a>;</li><li>Read public <a href=\"https://github.com/ropensci/software-review/issues\">software review threads on GitHub</a></li></ul><p>Would you like to review packages? Fill out the <a href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\">rOpenSci Reviewer Sign-Up Form</a> to volunteer to review.</p><p>Welcome again <strong>Alec and Lucy</strong>! We\u2019re thrilled to have you join the editorial team.</p>","doi":"https://doi.org/10.59350/v939m-qkj86","funding_references":null,"guid":"https://doi.org/10.59350/v939m-qkj86","id":"20501628-637e-4ec4-8b35-bdf597339d8c","image":null,"images":[{"alt":"headshot of Alec Robitaille","src":"https://ropensci.org/img/team/alec-robitaille.png"},{"alt":"headshot of Lucy D'Agostino McGowan","src":"https://ropensci.org/img/team/lucy-dagonstino-mcgowan.jpg"},{"src":"https://ropensci.org/img/team/alec-robitaille.png"},{"src":"https://ropensci.org/img/team/lucy-dagonstino-mcgowan.jpg"}],"indexed":true,"indexed_at":1776313654,"language":"en","parent_doi":null,"published_at":1776297600,"reference":[],"registered_at":0,"relationships":[],"rid":"w9g9j-0bd39","status":"active","summary":"At rOpenSci, we\u2019re continually grateful for the support and engagement of our community, who help make research open-source stronger, more inclusive, and more collaborative. The software peer review program continues to grow, and today we announce that our editorial team keeps expanding: We\u2019re excited to welcome\n<em>\n Alec Robitaille\n</em>\nand\n<em>\n Lucy D\u2019Agostino McGowan\n</em>\nas new editors.","tags":["Software Peer Review","Editors","ROpenSci Team"],"title":"Expanding the Editorial Team: Alec Robitaille and Lucy D'Agostino McGowan Join as Editors","updated_at":1776311326,"url":"https://ropensci.org/blog/2026/04/16/editors2026/","version":"v1"},{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":[],"family":"Strecker","given":"Dorothea","url":"https://orcid.org/0000-0002-9754-3807"},{"affiliation":[{"id":"https://ror.org/01hcx6992","name":"Humboldt-Universit\u00e4t zu Berlin"}],"contributor_roles":[],"family":"Ochsner","given":"Catharina","url":"https://orcid.org/0009-0005-3885-3951"}],"blog":{"archive_collection":24081,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":null,"canonical_url":null,"category":"computerAndInformationSciences","community_id":"53174590-b8d0-4c88-b121-4ca75f7de145","created_at":1717668020,"current_feed_url":null,"description":"Research Group Information Management @ Humboldt-Universit\u00e4t zu Berlin","doi":null,"doi_as_guid":false,"favicon":null,"feed_format":"application/rss+xml","feed_url":"https://infomgnt.org/index.xml","filter":null,"funding":null,"generator":"Quarto","generator_raw":"Quarto 1.4.555","home_page_url":"https://infomgnt.org","id":"17927ce5-1239-43fb-a3c9-2acb8a679d11","indexed":true,"issn":"2944-6848","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":1729503399,"relative_url":null,"ror":null,"secure":true,"slug":"infomgnt","status":"active","subfield":"3309","subfield_validated":null,"title":"Research Group Information Management @ Humboldt-Universit\u00e4t zu Berlin","updated_at":1776327809.623468,"use_api":null,"use_mastodon":false,"user_id":"dbffda7d-f391-48fb-a6d2-d4a284c59c8d"},"blog_name":"Research Group Information Management @ Humboldt-Universit\u00e4t zu Berlin","blog_slug":"infomgnt","content_html":"<div class=\"quarto-figure quarto-figure-center\">\n<figure class=\"figure\">\n<p><img class=\"img-fluid figure-img\" src=\"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/doctoral_writing_retreat.jpg\"/></p>\n<figcaption class=\"figure-caption\"><a href=\"https://unsplash.com/de/fotos/person-die-laptop-benutzt-vZJdYl5JVXY\">Foto</a> by <a href=\"https://unsplash.com/de/@kaitlynbaker\">Kaitlyn Baker</a> from <a href=\"https://unsplash.com/\">Unsplash</a>.</figcaption>\n</figure>\n</div>\n<p>The Ambassadors for Open Science program of the <a href=\"https://www.berlin-university-alliance.de/index.html\">Berlin University Alliance (BUA)</a> aims to promote the knowledge and application of Open Science in various subjects. As Open Science experts and enthusiasts, the ambassadors show researchers, students and decision-makers at their institution how they can benefit from and make use of Open Science infrastructure (<span class=\"citation\" data-cites=\"BUA2024\"><span>\u201cAuftakt F\u00fcr Neu Ernannte <span>BUA</span> <span>Open</span> <span>Science</span> <span>Ambassadors</span>\u201d</span> (2024)</span>).</p>\n<p>As ambassadors for the philosophical faculty Dorothea Strecker and Catharina Ochsner organized a writing retreat in collaboration with Dr.\u00a0Kaitlin Montague for the PhD students of the philosophical faculty of the Humboldt-Universit\u00e4t zu Berlin (HU Berlin). The retreat took place at the workation space <a href=\"https://coconat-space.com/de/\">coconat</a> and offered 16 doctoral students the opportunity of focused writing time, writing workshops, and Open Science-focused discussions in a new and peaceful environment. The workshop was designed for doctoral students to discuss and develop essential skills of academic writing. During the weekend we addressed Open Access publication strategies for doctoral students as well as a range of writing-related issues, including style and voice, writing discipline, drafting, narrative development and organization, models of accountability, taming the \u201cinternal editor,\u201d and peer review.</p>\n<p>We thank the BUA for making this writing retreat possible and we thank all participants for joining us and engaging in many discussions on their writing process, Open Access, and Open Science. In addition to focused writing time and courses on Open Science and Open Access the students were able to socialize with their peers and build a small community that will hopefully continue beyond the retreat.</p>\n<p>Further information about the research group can be found on our <a href=\"http://hu.berlin/infomgnt\">official website</a>.</p>\n<p>This text \u2013 excluding quotes and otherwise labelled parts \u2013 is licensed under the <a href=\"https://creativecommons.org/licenses/by/4.0/deed.de\">CC BY 4.0 DEED</a>.</p>\n<div class=\"default\" id=\"quarto-appendix\"><section class=\"quarto-appendix-contents\"><h2 class=\"anchored quarto-appendix-heading\">References</h2><div class=\"references csl-bib-body hanging-indent\" id=\"refs\">\n<div class=\"csl-entry\" id=\"ref-BUA2024\">\n<span>\u201cAuftakt F\u00fcr Neu Ernannte <span>BUA</span> <span>Open</span> <span>Science</span> <span>Ambassadors</span>.\u201d</span> 2024. <a href=\"https://www.berlin-university-alliance.de/items/2024/240924-open-science-ambassadors.html\">https://www.berlin-university-alliance.de/items/2024/240924-open-science-ambassadors.html</a>.\n</div>\n</div></section><section class=\"quarto-appendix-contents\"><h2 class=\"anchored quarto-appendix-heading\">Citation</h2><div><div class=\"quarto-appendix-secondary-label\">BibTeX citation:</div><pre class=\"sourceCode code-with-copy quarto-appendix-bibtex\"><code class=\"sourceCode bibtex\">@online{strecker2026,\n  author = {Strecker, Dorothea and Ochsner, Catharina},\n  title = {Recap: {Writing} {Retreat} for {Doctoral} {Students} of the\n    {Philosophical} {Faculty}},\n  date = {2026-04-16},\n  url = {https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty},\n  langid = {en}\n}\n</code></pre><div class=\"quarto-appendix-secondary-label\">For attribution, please cite this work as:</div><div class=\"csl-entry quarto-appendix-citeas\" id=\"ref-strecker2026\">\nStrecker, Dorothea, and Catharina Ochsner. 2026. <span>\u201cRecap: Writing\nRetreat for Doctoral Students of the Philosophical Faculty.\u201d</span>\nApril 16, 2026. <a href=\"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty\">https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty</a>.\n</div></div></section></div>","doi":"https://doi.org/10.59350/49j36-nmy28","funding_references":null,"guid":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/index.html","id":"4bc2cc15-f442-4a38-9bd9-7a33b5b11742","image":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/doctoral_writing_retreat.jpg","images":[{"src":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/doctoral_writing_retreat.jpg"},{"alt":"Foto by Kaitlyn Baker from Unsplash.","src":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty/doctoral_writing_retreat.jpg"}],"indexed":true,"indexed_at":1776343268,"language":"en","parent_doi":null,"published_at":1776290400,"reference":[{"id":"https://www.berlin-university-alliance.de/items/2024/240924-open-science-ambassadors.html","unstructured":"\n\u201cAuftakt F\u00fcr Neu Ernannte BUA Open Science Ambassadors.\u201d 2024. https://www.berlin-university-alliance.de/items/2024/240924-open-science-ambassadors.html.\n"}],"registered_at":0,"relationships":[],"rid":"xe8h9-1ba07","status":"active","summary":"The Ambassadors for Open Science program of the Berlin University Alliance (BUA) aims to promote the knowledge and application of Open Science in various subjects.","tags":["Lab Life","Research"],"title":"Recap: Writing Retreat for Doctoral Students of the Philosophical Faculty","updated_at":1776290400,"url":"https://infomgnt.org/posts/2026-04-16-recap-writing-retreat-for-doctoral-students-of-the-philosophical-faculty","version":"v1"},{"abstract":"The 2025 Beacon dataset is out. It shows OJS powering 58,000 journals across 156 countries, with 2.5 million articles published and steady growth in software upgrades. Here\u2019s what the data tells us. Open Journal Systems (OJS) launched in 2002. By 2010, around 4,000 journals were using it. What followed was more than a decade of [\u2026] The post 58,000 Journals and Counting: The 2025 OJS Beacon Data appeared first on Public Knowledge Project.","archive_url":null,"authors":[{"contributor_roles":[],"family":"Racy","given":"Famira"}],"blog":{"archive_collection":null,"archive_host":null,"archive_prefix":null,"archive_timestamps":null,"authors":null,"canonical_url":null,"category":"socialScience","community_id":"77c8c2e4-ebda-4e7c-9458-6c06b604344b","created_at":1752226126.418889,"current_feed_url":null,"description":null,"doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/77c8c2e4-ebda-4e7c-9458-6c06b604344b/logo","feed_format":"application/atom+xml","feed_url":"https://pkp.sfu.ca/feed/atom","filter":null,"funding":null,"generator":"WordPress","generator_raw":"WordPress","home_page_url":"https://pkp.sfu.ca/news/","id":"1fc8db8d-6943-4efd-8a78-7723c41ab59f","indexed":true,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":0,"relative_url":null,"ror":null,"secure":true,"slug":"pkp","status":"active","subfield":"1710","subfield_validated":null,"title":"Public Knowledge Project","updated_at":1776328463.946064,"use_api":null,"use_mastodon":false,"user_id":null},"blog_name":"Public Knowledge Project","blog_slug":"pkp","content_html":"<figure class=\"wp-block-image size-large\"><img alt=\"Global OJS usage map. The numbers represented are in the article text.\" class=\"wp-image-18754\" decoding=\"async\" fetchpriority=\"high\" height=\"576\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg\" srcset=\"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg 1024w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-300x169.jpg 300w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-768x432.jpg 768w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1536x864.jpg 1536w, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue.jpg 1600w\" width=\"1024\"/><figcaption class=\"wp-element-caption\">This map of active OJS presence in 2025 is by Saurabh Khanna, published on <a href=\"https://rpubs.com/saurabh90/ojs-stats-2025\" id=\"https://rpubs.com/saurabh90/ojs-stats-2025\" type=\"link\">RPubs</a>. The scale is 0 = lightest blue; 500+ = darkest blue.</figcaption></figure>\n<p><em><strong>The 2025 Beacon dataset is out. It shows OJS powering 58,000 journals across 156 countries, with 2.5 million articles published and steady growth in software upgrades. Here\u2019s what the data tells us.</strong></em></p>\n<p><a href=\"https://pkp.sfu.ca/software/ojs/\" id=\"https://pkp.sfu.ca/software/ojs/\" type=\"link\">Open Journal Systems</a> (OJS) launched in 2002. By 2010, around 4,000 journals were using it. What followed was more than a decade of steady growth, typically between 5,000 and 7,000 new journals per year. That growth has now levelled off, and we think that deserves to be read for what it is: a sign of maturity, not of stagnation.</p>\n<p>The 2025 figures stand at 58,000 journals across 156 countries. That is the footprint of infrastructure.</p>\n<p>For librarians and open access advocates who have spent years making the case for community-owned publishing platforms, this scale carries real weight. For tens of thousands of journals, many of them Diamond Open Access charging neither authors nor readers, OJS is how publishing gets done.</p>\n<h2 class=\"wp-block-heading\">Where the Journals Are</h2>\n<p>Geography has always been one of the most revealing dimensions of the Beacon data, and this year is no different.</p>\n<p>Indonesia continues to lead the world by a wide margin, accounting for more than 40% of all OJS journals globally. That position reflects both a sustained national commitment to open access policy and a publishing culture that has embraced open infrastructure at scale.</p>\n<p>Brazil retains its place among the top countries, underpinned by a long tradition of publicly funded, openly accessible research communication.</p>\n<p>And in a development worth noting, the United States has recently moved into the top three, as more North American institutions look seriously at open infrastructure as a sustainable path forward.</p>\n<p>Understanding where open publishing is growing, and where it has not yet been adopted, is one of the main reasons PKP collects this data in the first place. It directly shapes decisions about language support, documentation, outreach, and development priorities. The geography of OJS adoption is not just interesting; it is useful.</p>\n<h2 class=\"wp-block-heading\">Articles: The Numbers Behind the Journals</h2>\n<p>The Beacon data tracks article output per journal over time. The average number of articles per journal peaked at 62 in 2015, fell to 30 in 2022, and has since recovered to just over 40. Across all OJS journals, total article output now stands at 2.5 million articles.</p>\n<p>These figures matter beyond the headline numbers. They represent peer-reviewed research that, in many cases, would not be openly available without community-owned infrastructure. A significant portion of it comes from institutions and regions with no viable route into commercial open access. That research belongs to the communities that produced it, and it is accessible because of the infrastructure those communities chose to use.</p>\n<h2 class=\"wp-block-heading\">A Meaningful Milestone: Version Upgrades</h2>\n<p>Since 2024, there has been a 10% increase in journals upgrading to OJS version 3.3, with more than 4,000 journals completing the transition. Software upgrades take real effort: technical capacity, planning time, and often institutional backing. The fact that so many journals have made this move reflects the work PKP has put into making upgrades accessible, through sprint events, hosting support, education, and documentation.</p>\n<p>This data connects directly to PKP\u2019s focus on supporting the health and sustainability of journals already using OJS, not just reaching new ones.</p>\n<h2 class=\"wp-block-heading\">Why PKP Collects this Data</h2>\n<p>PKP collects this data to inform its own decisions: where to focus development, where documentation is needed, where the software is being used in ways that point to unmet needs. The dataset is published openly on Harvard Dataverse so that researchers, institutions, and partners can draw their own conclusions from it. The global OJS community is not the subject of this research. It is the reason for it, and its primary beneficiary.</p>\n<p>That approach is central to how PKP works. Research informs what we build and how we prioritize. The Beacon project is one of the clearest expressions of that commitment.</p>\n<h2 class=\"wp-block-heading\">Explore the Data</h2>\n<ul class=\"wp-block-list\">\n<li><a href=\"https://rpubs.com/saurabh90/ojs-stats-2025\">2025 OJS Usage Statistics \u2014 interactive charts and maps</a> (2025 data)</li>\n<li><a href=\"https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/OCZNVY&amp;version=6.0\">Full Beacon dataset on Harvard Dataverse</a> (2024 data)</li>\n</ul>\n<p>If you are a journal manager, a librarian building the case for open infrastructure, or a researcher working on scholarly communications, this data is freely available for you to use.</p>\n<p><em>The Beacon project is a longitudinal research initiative tracking the global adoption and use of Open Journal Systems. Data is collected annually and published openly under Creative Commons licensing.</em></p>\n<p>The post <a href=\"https://pkp.sfu.ca/2026/04/15/58000-journals-2025-ojs-beacon-data/\">58,000 Journals and Counting: The 2025 OJS Beacon Data</a> appeared first on <a href=\"https://pkp.sfu.ca\">Public Knowledge Project</a>.</p>","doi":"https://doi.org/10.59350/1v51v-e0831","funding_references":null,"guid":"https://pkp.sfu.ca/?p=18753","id":"80dc8e48-77f4-413f-9642-674f294a9334","image":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg","images":[{"alt":"Global OJS usage map. The numbers represented are in the article text.","height":"576","sizes":"(max-width: 1024px) 100vw, 1024px","src":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg","srcset":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-300x169.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-768x432.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1536x864.jpg, https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue.jpg","width":"1024"},{"alt":"This map of active OJS presence in 2025 is by Saurabh Khanna, published on RPubs. The scale is 0 = lightest blue; 500+ = darkest blue.","src":"https://pkp.sfu.ca/wp-content/uploads/2026/04/Community-Beacon-April-2026-WP-May-issue-1024x576.jpg"}],"indexed":true,"indexed_at":1776278904,"language":"en","parent_doi":null,"published_at":1776278154,"reference":[],"registered_at":0,"relationships":[],"rid":"a50g6-y8p95","status":"active","summary":"<em>\n <strong>\n  The 2025 Beacon dataset is out. It shows OJS powering 58,000 journals across 156 countries, with 2.5 million articles published and steady growth in software upgrades. Here\u2019s what the data tells us.\n </strong>\n</em>\nOpen Journal Systems (OJS) launched in 2002. By 2010, around 4,000 journals were using it. What followed was more than a decade of steady growth, typically between 5,000 and 7,000 new journals per year.","tags":["Community Newsletter","Beacon","OJS","Open Access","Open Infrastructure"],"title":"58,000 Journals and Counting: The 2025 OJS Beacon Data","updated_at":1776278154,"url":"https://pkp.sfu.ca/2026/04/15/58000-journals-2025-ojs-beacon-data/","version":"v1"},{"abstract":null,"archive_url":null,"authors":[{"contributor_roles":[],"family":"Moresi","given":"Louis","url":"https://orcid.org/0000-0003-3685-174X"}],"blog":{"archive_collection":22163,"archive_host":null,"archive_prefix":"https://wayback.archive-it.org/22163/20231105111054/","archive_timestamps":[20231105111054,20240505190806,20241105111040,20250505111057],"authors":null,"canonical_url":null,"category":"earthAndRelatedEnvironmentalSciences","community_id":"54ca6482-0a9b-420d-be44-b0e93fbad952","created_at":1697760000,"current_feed_url":null,"description":"Geodynamics, Computation and Education","doi":null,"doi_as_guid":false,"favicon":"https://rogue-scholar.org/api/communities/c8b71a5b-b872-47ab-89f7-7c84741d68fc/logo","feed_format":"application/rss+xml","feed_url":"https://www.underworldcode.org/rss/","filter":null,"funding":null,"generator":"Ghost","generator_raw":"Ghost 5.69","home_page_url":"https://www.underworldcode.org/","id":"9f6ce29f-3545-4482-987d-1a15bc256f4e","indexed":false,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","mastodon":null,"prefix":"10.59350","registered_at":1719281103,"relative_url":null,"ror":null,"secure":true,"slug":"underworldcode","status":"active","subfield":"1908","subfield_validated":null,"title":"Underworld Geodynamics Community","updated_at":1776328962.44395,"use_api":true,"use_mastodon":false,"user_id":"4f890b77-39e3-49c8-81cf-d159b5ad2f81"},"blog_name":"Underworld Geodynamics Community","blog_slug":"underworldcode","content_html":"<p>A symbolic time derivatives: you can inspect it, display it in a notebook, and verify that the time discretisation is doing what you expect. And you can swap between Lagrangian, Semi-Lagrangian, and Eulerian approaches without rewriting the solver. Sympy introduces incredible flexibility for on-the-fly composition of time-dependent problems. </p><p>Many geodynamics equations involve a material derivative. Temperature advection-diffusion, viscoelastic stress transport, Navier-Stokes momentum. The material derivative $D\\phi/Dt$ combines the time rate of change with transport by the flow:</p><p>$$<br>\\frac{D\\phi}{Dt} = \\frac{\\partial \\phi}{\\partial t} + \\mathbf{v} \\cdot \\nabla\\phi<br>$$</p><p>Discretising this equation requires making specific choices. How do you handle the advection term? How many previous timesteps do you use? How do you deal with variable timestep sizes? These choices affect accuracy, stability, and computational cost.</p><p>In many finite element codes, these choices are baked into the solver implementation. A classic example is Crank-Nicolson time stepping: the flux must be evaluated at both the current and previous timestep, which means adding history terms to the left-hand side of the assembled system as well as introducing a time-derivative term on the right-hand side. The time discretisation reaches into both sides of the equation, and changing it means restructuring the solver. In UW3, the time derivative <strong><em>offers</em></strong> flux and force terms to the solver to handle symbolically as it sees fit.</p><h2 id=\"the-ddt-hierarchy\">The DDt Hierarchy</h2><p>UW3 provides four implementations of the time derivative, all sharing the same calling interface and working for scalar, vector and tensor quantities.</p><p><strong>Eulerian</strong> stores history on the mesh. The material derivative is approximated by finite differences in time at fixed grid points, with an advection correction. This is the classical approach: simple, mesh-based, but subject to CFL stability constraints when advection dominates.</p><p><strong>Semi-Lagrangian</strong> traces characteristics backward in time. At each mesh node, it asks: where was this material parcel at the previous timestep? It then interpolates the previous solution at that departure point. This is unconditionally stable because the material derivative is evaluated along the characteristic, not at a fixed grid point. There is no CFL constraint, though the user needs to be conscious of accuracy trade-offs inherent in the scheme.</p><p><strong>Lagrangian</strong> follows particles through the flow. The history is stored on swarm variables and advected with the particles. This is the natural choice when material history matters physically, as in viscoelastic stress transport where the stress tensor must be advected and rotated with the material. Accuracy of this scheme depends upon the quality of the particle-layout (density of particles, presence of gaps).</p><p><strong>Symbolic</strong> provides pure symbolic history without mesh or swarm storage. It is used internally by the constitutive model system for building expressions that involve time derivatives.</p><p>All four produce the same thing: a symbolic expression that can be embedded in a solver's weak form. The solver does not need to know which implementation is providing the time derivative. It sees a SymPy expression for $D\\phi/Dt$ and includes those terms when it differentiates the equation system to determine the Jacobians.</p><h2 id=\"bdf-schemes-multi-step-time-integration\">BDF Schemes: Multi-Step Time Integration</h2><p>The time discretisation uses backward differentiation formulas (BDF). These are implicit multi-step methods that use solution values from previous timesteps to approximate the time derivative at the current step.</p><p>At order 1, this is the backward Euler method:</p><p>$$<br>\\frac{D\\phi}{Dt} \\approx \\frac{\\phi^n - \\phi^{n-1}}{\\Delta t}<br>$$</p><p>At order 2, BDF-2 uses two previous values for second-order accuracy:</p><p>$$<br>\\frac{D\\phi}{Dt} \\approx \\frac{\\frac{3}{2}\\phi^n - 2\\phi^{n-1} + \\frac{1}{2}\\phi^{n-2}}{\\Delta t}<br>$$</p><p>The coefficients $[3/2, -2, 1/2]$ are for constant timesteps. When the timestep varies, the coefficients adapt. If the current timestep is $\\Delta t _ n$ and the previous was $\\Delta t _ {n-1}$, with ratio $r = \\Delta t _ n / \\Delta t _ {n-1}$, the BDF-2 coefficients become:</p><p>$$<br>c _ 0 = \\frac{1+2r}{1+r}, \\quad c _ 1 = -(1+r), \\quad c _ 2 = \\frac{r^2}{1+r}<br>$$</p><p>This matters in practice. Underworld simulations usually adjust the timestep as the flow evolves.</p><p>The coefficients are computed as exact <code>sympy.Rational</code> values and wrapped in UWexpression objects. This means they are routed through PETSc's constants array, just like viscosity or density parameters. When the timestep changes, the coefficient values update without recompilation. The compiled C code has the same structure at every step, only the values in the constants array will change.</p><h2 id=\"adams-moulton-weighting-for-fluxes\">Adams-Moulton Weighting for Fluxes</h2><p>BDF handles the time derivative of the unknown. But transient problems may also need a time-weighted evaluation of the flux (the spatial operator). The Adams-Moulton (AM) family provides this.</p><p>At order 0, the flux is evaluated purely at the current time (fully implicit). At order 1 with $\\theta = 1/2$, we have the <em>Crank-Nicolson</em> scheme: the flux is averaged between the current and previous timestep. Higher order variants use more history values.</p><p>In UW3, the solver's flux time derivative (<code>DFDt</code>) provides an <code>adams _ moulton _ flux()</code> method that returns the appropriately weighted combination of the current flux and previous flux values as symbolic forms backed by stored evaluations. This expression then appears in the solver's $F _ 1$ template as a symbolic expression. Like the BDF coefficients, the AM weights are UWexpressions that update between timesteps.</p><p>The combination of BDF for the time derivative and AM for the flux evaluation gives a family of time integration schemes. BDF-1 with AM-0 is backward Euler. BDF-2 with AM-1 gives second-order accuracy in both the time derivative and the flux evaluation. The user controls this through the <code>order</code> parameter when creating the solver.</p><h2 id=\"order-ramping-at-startup\">Order Ramping at Startup</h2><p>A BDF-2 scheme needs two previous solutions. At the start of a simulation, there is only one (the initial condition). UW3 handles this through automatic order ramping.</p><p>The DDt object tracks an <code>effective _ order</code> that starts at 1 and increases with each completed solve, up to the requested order. On the first timestep, BDF-1 is used regardless of what order was requested. On the second timestep, BDF-2 becomes available. On the third, BDF-3. The transition is automatic and the coefficients adjust accordingly.</p><p>History slots are initialised with the current solution value on the first call. This means the first BDF-1 step sees $\\phi^{n-1} = \\phi^n$, giving a zero time derivative. This is correct for a system starting from rest or from a steady-state initial condition. For impulsive starts, the first-order accuracy of the initial step is usually acceptable because the solution is changing rapidly and the timestep is typically small.</p><h2 id=\"what-the-solver-sees\">What the Solver Sees</h2><p>Consider advection-diffusion of temperature:</p><p>$$<br>\\frac{D T}{Dt} = \\nabla \\cdot (k \\nabla T) + H<br>$$</p><p>The solver setup looks like this:</p><pre><code class=\"language-python\">adv_diff = uw.systems.AdvDiffusion(\n    mesh, u_Field=T, V_fn=v,\n    order=2,                    # BDF-2 / AM-1\n)\nadv_diff.constitutive_model.Parameters.diffusivity = k\nadv_diff.f = H\nadv_diff.solve(timestep=dt)\n</code></pre><p>The <code>order</code> parameter controls the time discretisation. The solver builds its weak form from two template expressions, $F _ 0$ (force-like, paired with the test function) and $F _ 1$ (flux-like, paired with the test function gradient):</p><pre><code class=\"language-python\">F0 = DuDt.bdf() / delta_t - H\nF1 = DFDt.adams_moulton_flux()\n</code></pre><p>At <strong>order 1</strong> (backward Euler / fully implicit), these expand to:</p><p>$$<br>F _ 0 = \\frac{T^n - T^{n-1}}{\\Delta t} - H<br>$$</p><p>$$<br>F _ 1 = k \\nabla T^n<br>$$</p><p>The flux is evaluated entirely at the current timestep. The system is first-order accurate in time.</p><p>At <strong>order 2</strong> (BDF-2 / Crank-Nicolson), the expressions become:</p><p>$$<br>F _ 0 = \\frac{\\frac{3}{2}T^n - 2T^{n-1} + \\frac{1}{2}T^{n-2}}{\\Delta t} - H<br>$$</p><p>$$<br>F _ 1 = \\frac{1}{2} k \\nabla T^n + \\frac{1}{2} k \\nabla T^{n-1}<br>$$</p><p>The flux is now averaged between the current and previous timesteps. Both the time derivative and the flux evaluation are second-order accurate. The history terms $T^{n-1}$ and $T^{n-2}$ are mesh variable symbols managed by the DDt objects. The coefficients ($3/2$, $-2$, $1/2$, etc.) are UWexpression symbolic constants whose values update each step, if $\\Delta t$ changes, and no recompilation is required.</p><p>Note: terms that contain $T^n$ automatically populate the implicit parts of the solver, while history terms are automatically treated explicitly. They are also automatically combined with history terms originating, for example, from the constitutive law.</p><p>The solver differentiates through all of this for the Jacobian. The JIT compiler handles it like any other symbolic expression. From PETSc's perspective, the time-stepping machinery is invisible. It sees compiled C functions at quadrature points, with coefficient values arriving through the constants array.</p><p>The solve sequence for each timestep is:</p><ol><li><strong>Pre-solve</strong>: Update BDF/AM coefficients for the current timestep. For Semi-Lagrangian, trace characteristics to find departure points and sample history values.</li><li><strong>Solve</strong>: PETSc SNES solves the assembled system. The compiled C callbacks evaluate the symbolic expressions at quadrature points.</li><li><strong>Post-solve</strong>: Shift the history chain. What was $\\phi^{n-1}$ becomes $\\phi^{n-2}$. The current solution becomes the new $\\phi^{n-1}$. Increment the solve counter for order ramping.</li></ol><h2 id=\"choosing-a-time-derivative\">Choosing a Time Derivative</h2><p>The choice of DDt type is a one-parameter decision at solver construction:</p><pre><code class=\"language-python\"># Default for advection-diffusion: Semi-Lagrangian (unconditionally stable)\nadv_diff = uw.systems.AdvDiffusion(mesh, u_Field=T, V_fn=v)\n\n# Override with Lagrangian (particle-based, requires a swarm)\nDTdt = uw.systems.Lagrangian_Swarm_DDt(\n    swarm, psi_fn=T.sym,\n    vtype=uw.VarType.SCALAR, degree=T.degree,\n    continuous=True, order=2\n)\nadv_diff = uw.systems.AdvDiffusion(mesh, u_Field=T, V_fn=v, DuDt=DTdt)\n\n# Or Eulerian (mesh-based, for problems without strong advection)\nDTdt = uw.systems.Eulerian_DDt(\n    mesh, T, vtype=uw.VarType.SCALAR,\n    degree=T.degree, continuous=True, order=2\n)\nadv_diff = uw.systems.AdvDiffusion(mesh, u_Field=T, V_fn=v, DuDt=DTdt)\n</code></pre><p>The solver does not need to be made aware of which DDt type you chose. It calls <code>bdf()</code> and <code>adams _ moulton _ flux()</code> and gets SymPy expressions. The physics of the time discretisation is encapsulated in the DDt object. The numerics of the spatial discretisation are encapsulated in the solver. They communicate through symbolic expressions.</p><p>Each solver type has a sensible default. Advection-diffusion and Stokes default to Semi-Lagrangian. Pure diffusion defaults to Eulerian. Viscoelastic solvers use the DFDt infrastructure for stress history on particles. You only need to override the default when your problem requires it.</p><h2 id=\"why-this-matters\">Why This Matters</h2><p>In UW2, if you wanted to change from explicit particle advection to a semi-Lagrangian scheme, you would need to plug in a different solver. The time discretisation was part of the solver's implementation, not a separable component. When history terms appeared through the constitutive model, we had to develop a matrix of all potential interactions and code them independently.</p><p>In UW3, the time derivative is an object you can create, configure, inspect, and swap. The BDF coefficients are visible as symbolic expressions. The history terms are mesh variables you can plot. The AM flux weighting is a symbolic combination you can display in a notebook.</p><p>This is the same design principle we described in the <a href=\"https://www.underworldcode.org/constitutive-models-in-symbolic-form/\">constitutive models post</a>: separate the physics from the numerics, connect them through symbolic expressions, and make both sides inspectable. For constitutive models, the boundary is the stress tensor. For time derivatives, it is the BDF/AM expression. In both cases, the solver sees a SymPy expression and does not need to know how it was constructed.</p>","doi":"https://doi.org/10.59350/2bbxk-1gv97","funding_references":null,"guid":"69dfb91eeb7226563af54429","id":"3bd33871-0c4a-4c00-84ce-34ea4a24bd3b","image":"https://images.unsplash.com/photo-1501139083538-0139583c060f?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHRpbWV8ZW58MHx8fHwxNzc2MjY5Njk5fDA&ixlib=rb-4.1.0&q=80&w=2000","images":[],"indexed":true,"indexed_at":1776321304,"language":"en","parent_doi":null,"published_at":1776270000,"reference":[],"registered_at":0,"relationships":[],"rid":"yjgtg-ke420","status":"active","summary":"A symbolic time derivatives: you can inspect it, display it in a notebook, and verify that the time discretisation is doing what you expect. And you can swap between Lagrangian, Semi-Lagrangian, and Eulerian approaches without rewriting the solver. Sympy introduces incredible flexibility for on-the-fly composition of time-dependent problems. Many geodynamics equations involve a material derivative.","tags":["Underworld Code","Tricks Of The Trade","Documentation","Development"],"title":"Symbolic Time Derivatives in Underworld3","updated_at":1776270000,"url":"https://www.underworldcode.org/symbolic-time-derivatives-in-underworld3/","version":"v1"}],"out_of":49966,"page":1,"per_page":10,"total-results":49966}
