Home Articles Books Search About
日本語

2026 116

March

Building a Custom Hugo Theme with Tailwind CSS v4 and Submitting to Hugo Themes Gallery Handling App Store Rejection and Resubmission Entirely via API How to Upload VTT Subtitle Files in YouTube Studio No Firebase Needed: Operating an iOS App with Apple-Native Tools Only Pitfalls of Converting TEI XML Standoff Annotations to Inline, and a DOM-Based Solution Diagnosing and Fixing Memory-Related Crashes in an iOS OCR App Fixing Universal Viewer 4.x “Unknown content type” Error with Local Hosting How to Upload English Subtitles (VTT Files) in YouTube Studio Auto-Generating Bilingual Video Subtitles with Claude Code and Publishing via IIIF v3 Manifests Digital Tale of Genji Video Subtitle Project: Publishing Bilingual Subtitles with IIIF v3 Manifests Observed Timing: Apple Sales Reports API Data Availability and YouTube API Quota Reset Building a Cultural Heritage Explorer App with Japan Search API Building an Automated DH Tool Awareness System with Playwright, RSS, and AI How Japan Search’s Image Similarity Search API Works Parallelizing OCR Recognition on iOS with Swift Concurrency for up to 6.7x Speedup Comparing Local Archiving Methods for Yahoo News Articles (SingleFile, Playwright, ArchiveBox, WARC, yt-dlp) KotenOCR: An Offline iOS App for Recognizing Classical Japanese Cursive Script Automating researchmap KAKENHI-Achievement Linking with Playwright Building an NDC Book Classifier with LoRA: Fine-Tuning a Japanese LLM on Library Data Fully Automating App Store Screenshot Generation with Python and Xcode UI Tests Achieving Up to 7.6x Faster Image Delivery by Optimizing Cantaloupe IIIF Server Cache Why Contentful’s Publish Button Is Greyed Out — A Locale Configuration Pitfall Fixing 6 GitHub Issues in Parallel with Claude Code: Worktrees and Agents Improving Google Search Console Indexing Issues with schema.org Structured Data CATMA: A Guide to Web-Based Text Annotation and Analysis Datawrapper: A Data Visualization Tool for Researchers and Journalists Flourish: An Interactive Data Storytelling Platform FromThePage: Crowdsourcing Transcription for Historical Documents Gephi Lite: Browser-Based Network Visualization for Digital Humanities Hypothes.is: An Open-Source Web Annotation Tool Compliant with W3C Standards Internet Archive: Leveraging the World’s Largest Digital Archive Kepler.gl: An Open-Source Tool for Beautiful Large-Scale Geospatial Data Visualization Mirador: The Optimal Open-Source Viewer for IIIF Image Comparison and Analysis Observable: Data Visualization Notebooks by the Creator of D3.js Omeka: A Platform for Digital Collections and Online Exhibitions Palladio: A Guide to Humanities Data Visualization RAWGraphs: A No-Code Data Visualization Tool for Digital Humanities ReplayWeb.page: A Browser-Based Web Archive Replay Tool StoryMapJS: A Guide to Map-Based Storytelling Taguette: A Free Open-Source Qualitative Data Analysis Tool TEI Publisher: A Platform for Publishing TEI XML Digital Editions TimelineJS: Create Interactive Timelines from Spreadsheets Transkribus: AI-Powered Handwritten Text Recognition for Historical Documents Universal Viewer: The Definitive IIIF-Compliant Multimedia Viewer Voyant Tools: A Browser-Based Text Analysis Platform for Digital Humanities Wikidata Query Service: Exploring Knowledge Graphs with SPARQL Fast TEI/XML Deployment on Vercel: Automating XSLT Transformation with saxon-js TETRAS-IIIF: Annotation, Video, and Multi-User Extensions for Mirador 4 IIIF Georeference Viewer: Visualizing Georeferenced Content on Interactive Maps Mirador: A Feature-Rich IIIF Viewer for Comparing and Annotating Images Tify: A Lightweight, Fast IIIF Document Viewer Universal Viewer: A Multi-Format IIIF Viewer for Images, Audio, Video, and 3D Fixing Custom Marker Lag on Zoom in MapLibre GL JS with GeoJSON Layers How I Used Claude Code’s Parallel Agents to Auto-Generate Videos from 882 Blog Posts How to Submit an iOS App Update for Review Using the App Store Connect API Complete Guide to Adding a Tip Jar (In-App Purchase) to Your iOS App with App Store Connect API Auto-Generating VRM Character Animation Videos with Three.js + Puppeteer Fast TEI/XML Deployment on Vercel: Automating XSLT Transforms with saxon-js Fixing the White Bar at the Bottom of Chrome Headless Screenshots Upgrading from Astro 4 to 5 — A Migration Log Improving DTS Viewer ― Multiple Citation Trees, Hierarchical Navigation, and XML Browser Display Migrating to DTS (Distributed Text Services) 1.0 ― Updating a TEI/XML Text API Tech Stack for a RAG App That Searches Historical Documents with AI Adding a CETEIcean-Powered TEI Preview to the DOCX → TEI/XML Converter Submitting an iOS App for Review Using Only the App Store Connect API 5x Faster XSLT Processing: Migrating from Saxon-JS to Saxon-HE Animating IIIF Scroll Paintings with AI Video: A Video Annotation Approach Introducing ethers-i18n: Multilingual Error Messages for ethers.js Building a DOCX to TEI/XML Conversion Tool in the Browser Using the TEI Garage API How to Bulk Unpublish Hatena Blog Articles (AtomPub API)

February

Exporting Web Annotations via the Hypothes.is API and Converting to TEI/XML Trying “oitei” - An Automatic Conversion Tool from OpenITI mARkdown to TEI XML Operating GakuNin RDM API with Node.js — From Project Creation to GitHub + Vercel Auto-Deploy I Created a Japanese Tutorial for ethers.js v6 Annotorious Drawing Mode Breaks Only in Production Build GakuNin RDM Search API (/api/v1/search/) Investigation Memo Bulk Managing Google Groups Members via API Without Google Workspace Admin Privileges Verifying Non-DC Metadata Registration in Archivematica – Embedding EAD Using source-metadata.csv Verification of Digital Archive Construction Using the AtoM REST API Developing a Plugin to Extend the AtoM REST API Starting Alfresco with Docker and Experiencing the Records Management Lifecycle via REST API Development of a Text Comparison Tool Using IIIF Manifests Improved the Drupal GitHub Webhook Module Bulk Deleting Unnecessary Sites Using Netlify CLI Performing Module Updates and Core Upgrades from the Drupal 10 Admin Interface Replacing Only the Window Title of External Manifests in Mirador 4 Cause and Fix for localStorage.getItem is not a function Error in Next.js 15 Three Pitfalls When Adapting a SPARQL Client to Apache Jena Fuseki Snorql – Published a Browser UI for Easily Exploring Multiple SPARQL Endpoints Mirador Viewer Embedding Configuration Investigating PLY Files Not Being Output in IIIF Manifest Items with Omeka S IIIF Server Module Developing a 3D Gaussian Splatting Viewer - Browser Implementation Using Spark.js The World of 3D Point Cloud Data: Organizing the Relationship Between PLY, Gaussian Splatting, and Potree How to Use the KAKEN OpenSearch API Three.js + React Three Fiber: Resolving Rough GLTF Model Texture Display Nuxt Content + trailingSlash: Links to Static Files Return 404 - Problem and Solution Adding Linked Places Format Support to IIIF Georeference Viewer

2025 172

March

Omeka S Module Update Information (2025-03-27) Scrolling to a Specific Element Using CETEIcean and XPath Mirador 4 Plugin Development: Enabling Initial Angle Settings in the Image Rotation Plugin Rotating Images and Specifying Regions on Initial Load in Mirador 4 Building a Proxy Server for mdx I Object Storage Using the Universal Viewer npm Package in Next.js Searching Files in Linked Storage Using the GakuNin RDM API Adding mdx.jp Object Storage to GakuNin RDM Storage Prototyping a TEI/XML File Editing Environment Using LEAF Writer and GakuNin RDM Using Filters with the GakuNin RDM (OSF) API Nuxt Content: Addressing ‘Cannot find name queryContent’ Updates to the IIIF Georeference Extension Visualization Tool Using Route 53 DNS Records with Sakura Rental Server (Shared SSL) Application of DTS (Distributed Text Services) dts:wrapper When Building Search Systems from TEI/XML A Sample App Displaying Images with Mirador and Text with CETEIcean Sharing Private Sites in Omeka S Registering Objects Using the AtoM (Access to Memory) API Running AtoM (Access to Memory) with Docker Cases Where ImageMagick May Not Work Properly for Creating Pyramidal TIFFs? Running ArchivesSpace with Docker Storing Omeka S Files in mdx.jp Object Storage Serving IIIF Images Using mdx.jp Object Storage and IIP Image (IIIF Image Server) How to Mount mdx.jp Object Storage as a File System Using s3fs Investigating Partial Match Search with AND Conditions Across Fields in Algolia How to Convert Word Files to TEI XML: A Guide to Using the TEIgarage API Using Drupal’s Sortableviews Module to Reorder Content and Save the Result to a Field Developing a Viewer with Next.js + CETEIcean + React TEI Router Next.js for Drupal BASE_PATH Issue and Fix (Using patch-package) Trying the Search API Algolia Module for Drupal Registering Data with Drupal’s JSON:API Using Username and Password

2024 259

October

Customizing the LEAF Writer Editor Toolbar A Python Library for Visualizing the Contents of Archivematica METS Files Using LEAF Writer from Next.js Using Roma to Restrict Allowed Values for Tag Attributes Using Roma to Restrict Attributes for Tags According to Your Project Using the GakuNin RDM API Connecting GakuNin RDM with Zotero Adding mdx.jp Object Storage to Archivematica Differences Between ShExC and ShExJ Differences Between ShEx and SHACL Trying the Model Viewer Module for Omeka S How to Use the Files/Markers Tabs in the @samvera/ramp Viewer Addressing the resumptionToken Bug in Omeka S OAI-PMH Repository (Non-Standard) Outputting Delete Records with the Omeka S OAI-PMH Repository Module Adding a Table of Contents to Videos Using iiif-prezi3 Setting Subtitles on Videos Using iiif-prezi3 Adding Annotations to Videos Using iiif-prezi3 Connecting GakuNin RDM with Amazon S3 and Processing Files with Archivematica Creating IIIF v3 Manifests for Video Using iiif-prezi3 Using URL Segments Starting with Underscores in Next.js Addressing a Bug in setFilter of @elastic/search-ui A Program to Create a Visual Overview Page of Omeka S Themes Trying Out rico-converter Building an Inference App Using Hugging Face Spaces and YOLOv5 Model (Trained on KaoKore Dataset) Resolving ModuleNotFoundError: No module named ‘huggingface_hub.utils._errors’ Publishing 3D Models in Omeka S Manipulating CVAT Data Using Python Handling the CSRF: Value is required and can’t be empty Error in Omeka S

July

Exporting Only Specific Items and Selected Fields Using Omeka S BulkExport Registering RDF Data to Dydra Using Python Deleting All Files in OpenAI Storage Bringing a Specified Marker to the Front in nuxt3-leaflet LEAF Writer: Adding Mirador Bug in Omeka S IIIF Server Module [3.6.19, 3.6.20] A Library for Creating RDF Files from VSDX Files Handling concurrent.futures.process.BrokenProcessPool Using Node.js to Validate JSON:API Compliance Trying Out virtual-museum-tour-threejs Fetching All Records from an OAI-PMH Repository Using Python Retrieving the URL of Site Pages Where Items Are Published in the Omeka S OaiPmh Repository Module Bulk Deleting Multiple Content Items Using the Drupal REST API Adding Images to IIIF Manifest Files for Audio Materials IIIF Audio/Visual: Describing Multiple VTT Files App Development Using Zotero’s API and Streamlit Displaying Audio Files with Subtitles in an IIIF Viewer Uploading Multiple Files to mdx.jp Object Storage Converting Audio Published on the NDL Historical Sound Archive to mp4 Customizing Ramp Running Ramp Locally Trying the Mirador 3 Annotations Plugin with an IIIF Manifest Specified via URL Parameters Delivering IIIF Images Using mdx.jp Object Storage and Cantaloupe Image Server Using mdx Object Storage (Using Cyberduck) Using Scroll View in Mirador 3 Reverse Proxy Settings for Drupal Running with Docker + Traefik Redirecting to HTTPS with Traefik Survey of IIIF-Compatible Viewers Large Videos Not Playing in Chrome Difference Between production and development in Omeka S SetEnv APPLICATION_ENV Operating Multiple HTTPS-Enabled Containers with Traefik Fixing Issues with the Omeka S GoogleAnalytics Module Redirecting Using Amazon S3 and Route 53 Configuring CORS for Docker-based Omeka S Commands for Batch Replacing IIIF Canvas URIs Configuration Example for Using BulkImport in Omeka S Bug in the BulkImport Module for Omeka S CORS Error with Omeka S IIIF Server Module Service with name “Omeka\Acl” could not be created ‘session.name’ is not a valid sessions-related ini setting

June

LEAF Writer: How to Add Sample Data LEAF Writer: How to Use the Image Viewer LEAF Writer: CSS Customization LEAF Writer: Customizing Schemas Google Spreadsheet + GAS (Google Apps Script) onEdit Executing Twice Understanding the Relationship Between RDF, Turtle, JSON-LD, and IIIF Manifest Files Partial Update to TEI/XML Published in the Koui Genji Monogatari Text Data Repository LEAF Writer: Entity Lookup for Japan Search LEAF Writer: Adding Japanese UI Published the Mirador 4 Version of mirador-sync-windows Repository Mirador 4 Plugin Development: Rotating Images at Arbitrary Angles Publishing a Customized Mirador 4 as an npm Package Examining Zoom, Scale, and Rotation Behavior in Mirador 4 Running LEAF-Writer in a Local Environment Publishing Materials on Zenodo Verifying the Behavior of Mirador 2 Plugins Handling nbdev Errors on macOS Applied Examples of Data Description Using Linked Data Developing a Zoom Disable Plugin for Mirador 3 (4) Using prefix.cc Notes on Adding and Visualizing RDF Data Retrieving RDF from URIs Using Content Negotiation in Python Created an M3 Version of mirador-sync-windows Trying iiif-prezi3 Running Archivematica with Docker Fixing Japanese Filename Conversion in Archivematica Trying Out mirador-sync-windows Converting Toji Hyakugo Monjo WEB Data to IIIF Trying Parts of https://wikidata.reconci.link/ Adding Classes and Properties Using the Omeka S CustomOntology Module Released v4.1.0 of Omeka-S-module-FixCjkSearch Accent Sensitivity in Omeka S Partial Match Search Examining the Contents of the DHC Format Notes on Using Zotero Trying Out a3m How to Handle CSP Errors in Strapi How to Handle When SSH Connection to Sakura VPS Becomes Unavailable Rebuilding and Restarting Containers with docker-compose Trying Strapi’s Data Transfer Drupal: Setting Pre-filled Values Using the Prepopulate Module Creating RDF Data Using Microsoft Visio Using “ARC2 RDF Graph Visualization” from Python Trying tropy-plugin-iiif Trying Out @iiif/parser Handling Shared Memory Shortage When Running ndlocr_cli and Other Issues Publishing Videos with Omeka S Disk Space After Installing ndlocr_cli with Docker

2023 197

April

Sending Google Spreadsheet Update Notifications to GitHub Auth0 Provider and Strapi Tutorial Fixing TypeError: array_keys()… in Drupal Drupal: An Example of Searching Nested Fields Drupal: Example of Bulk Registration and Updates Using Feeds Strapi: How to Filter Results by Deeply Nested Fields Drupal: Adding Content Types and Fields Using Custom Modules Drupal: Linking Content of Different Content Types to Each Other Checking ORCID RDF Data Drupal: Creating Custom REST Resources Creating a Custom API Using Drupal’s RESTful Views Displaying the Total Number of Results in Drupal Views Adding Google Analytics 4 gtag.js to Omeka S Converting TEI XML to LaTeX Using TEI Critical Apparatus Toolbox Prototype of an XML File Validation Tool Using JPCOAR Schema (v1) Text Selection Using VueUse (Nuxt 3) Search Using Drupal Search API in Next.js for Drupal (Faceted Search, etc.) Does Contentful Full-Text Search Require Search Terms of 2 or More Characters? How to Bulk Delete Content in Drupal Connecting Drupal with Amazon OpenSearch Service Trying GraphQL with Drupal Adding GraphQL to Strapi Bug Fixes and Feature Additions to the NDL Classical Book OCR Tutorial Using Google Colab Creating IIIF Presentation API v3 Manifest Files Using Omeka S Registering Taxonomies and Adding Them to Content in Drupal Using Python Updating and Deleting Drupal Content Using Python Adding Content to Drupal Using Python Running Strapi on Amazon Lightsail (SSL, Custom Domain) [Omeka S Theme Development] Updated the Bootstrap 5 Omeka S Theme I Created Digital Archive Tools Centered on IIIF Creating RDF from Excel Trying to Create a ShEx File Obtaining Persistent Identifiers with w3id.org and Redirecting to Snorql

2022 163

April

Updating the NDLOCR App Using Google Colab: Adding Single Input Dir Mode Execution Time for NDLOCR Using Google Colab Example of Running SPARQL Queries Against the Japan Search RDF Store Using Google Colab Running the NDL Lab Automatic Figure/Table Extraction Program Using Google Colab Running NDLOCR App with Google Colab (Image Input and Result Saving via Google Drive) Building an Omeka S Site Using Amazon Lightsail (Including Custom Domain + SSL) Running the NDLOCR Application Using Google Cloud Platform Compute Engine Using The New York Public Library API How to Register, Update, and Delete researchmap Achievements Using CSV Files Added TEI/XML Download Functionality to the “NDL OCR x IIIF” App Experiments on Image Sizes Supported by serverless-iiif Usage Example of Leaflet with Vue 3 (Including Coordinate Range Retrieval) Created a Sample Repository for Using OpenSeadragon with Vue3 [Omeka S] How to Set Custom Identifiers in the IIIF Server Module [Omeka S] How to Configure Attribution in the IIIF Server Module Created a Sample Repository for Running XSLT in Node.js Setting Focus on a Text Field Inside a Dialog When Opening It in Vuetify How to Enable Hot Reload for the static Directory in Nuxt.js Introduction to IIIF Presentation API Validation Methods with Practical Examples About Image Size Limits for Dynamic Tile Image Generation in the Omeka S Image Server Module GCP: Handling Errors When Creating AI Platform Notebooks How to Delete a Feature Store in GCP Vertex AI [Development Guide] I Created an App to View OCR Results Published by the National Diet Library’s Next-Generation Digital Library in an IIIF Viewer An App for Viewing OCR Results from the NDL “Next-Generation Digital Library” in an IIIF Viewer

March

Creating Pyramid Tiled TIFF Files Using AWS Lambda + Docker + pyvips How to Use pyvips and Create Pyramid Tiled TIFF Files [Memo] How to Use Maplat I Created a Calendar Search App Building an Object Detection API Using AWS Lambda (Flask + YOLOv5) [Omeka S Theme Development] Published a Bootstrap 5 Theme for Omeka S [Omeka S Module] How to Use Clean Url Building an Annotation Environment Using Omeka Classic + IIIF Toolkit Installing Omeka Classic Created a Summary Article and Zenn Book Explaining How to Use Omeka.net (Classic) [Summary Article] How to Use Omeka.net (Classic) [Google Colab] Retrieving Article Lists Using the Hatena Blog AtomPub API How to Use a Flask-Based YOLOv5 Model Repository with ECR and AWS App Runner Health Check on Port Issue When Using AWS App Runner + ECR Generating IIIF Collections Using the Omeka S IIIF Server Module Building an IIIF Image Server with AWS Serverless Application [For Developers] Setting Up a Search Application Development Environment Using AWS x Nuxt.js x Elasticsearch Registering Resource Classes with Bulk Import and Editing Settings Created a Program for Batch Updating File Owners in Google Drive [Memo] Created a Program for Batch Deleting Folders on Google Drive How to Install Omeka S Modules Batch Updating Metadata Using CSV Files with Bulk Import Notes on Japanese Full-Text Search in Omeka S and the Mroonga Search Module Created a Sample Program for Analyzing TEI/XML Files with Python Created a Program for Batch Downloading Images from IIIF Manifest Files How to Use the Omeka S XML Viewer Module [Pinned Post] Welcome to the Digital Archive Systems Technical Blog How to Use the Omeka S Mirador Module Summary of Articles About Omeka S

2021 27