Archives
1001 articles, grouped by year and month
2026158
May
- Aligning IIIF 3D Viewer with Presentation API 4 — converting legacy manifests at runtime
- Auto-Updating a Statistics Page from TEI/XML Transcription Data via CI/CD — A Case Study from the Kouigenjimonogatari Text DB
- Probing the Public APIs of the Tohoku University Digital Archives — Exporting per-setSpec Excel via OAI-PMH
- 📥researchmap Achievement Registration: Options for Individual Researchers and a Playwright Implementation
- A YAML-Driven Next.js Admin Console — Multiple Sites, Multiple Actions
- Building an Org-Wide Admin Console with GitHub App + Cloudflare Access
- Why Drupal's Automatic Updates Wasn't Running: `Unattended background updates` Is Disabled by Default
April
- ElevenLabs v2 vs v3 for Japanese Tech Narration — A/B Comparison Using a Voice-Cloned Synthetic Voice
- Mirador 4.0.0 hides supplementing annotations from the Annotations panel — a `filteredMotivations` gotcha
- Building an Access-Controlled IIIF Digital Archive — Cantaloupe + S3 + Elasticsearch + Next.js, Gated by Cloudflare Access
- 📅Auto-filling Chouseisan attendance with Playwright, deciding answers via Claude Code's Google Calendar MCP
- Comparing NDL Koten OCR-Lite and Cloud Vision API on a Jiaxing Tripitaka 'Mahāprajñāpāramitā Sūtra' — Observations across 105 Images
- 🖼️Migrating an IIIF Image Server from Cantaloupe to serverless-iiif
- Stopping Bot Scraping with AWS WAF — Geo Block, JA3 Fingerprint, and UA Block in Stages
- 📚DH Weekly Topics — 2026年4月19日週
- Retrofitting CloudFront + WAF onto an Existing Reverse-Proxy Origin: Practical Patterns
- Generating CiNii Articles Links from a Researcher Number — How the NII Researcher ID Works
- 📚DH Weekly Topics — 2026年4月12日週
- 🤖Exposing vLLM on mdx.jp Through Cloudflare Tunnel as an OpenAI-Compatible API
- 🚀Serving LLM-jp-4 32B Thinking on mdx.jp A100 x2 with vLLM and Using It via an OpenAI-Compatible API
- 🧪Running LLM-jp-4 Locally on a MacBook Pro M4 Max 128GB with Ollama’s OpenAI-Compatible API
- Securing SSH with Cloudflare Zero Trust
- Securely Exposing Academic Servers with Cloudflare Tunnel
- How Name Servers Work
- Elasticsearch → Static JSON / D1 Migration — You Don't Need a Search Engine for Small Datasets
- Investigating and Cleaning Up Google Drive Shared Drive Storage with rclone
- 📚DH Weekly Topics — 2026年4月5日週
- 🗂️Cantaloupe IIIF Image Server Performance Tuning
- 📊Dynamically Generating Excel Templates with Cross-Sheet Dropdown Validation Using ExcelJS in Next.js API Routes
- 🗄️Backing Up Omeka S in a Docker Environment
March
- 🏯IIIF VR Viewer: Experiencing Cultural Resources at Real Scale with WebXR and A-Frame
- 📖Calling NDLOCR-Lite as a Python Library Instead of CLI
- KotenOCR Android Development Log — Migrating from Flutter to Kotlin
- 📚DH Weekly Topics — 2026年3月28日週
- 📏Physical Dimensions Ruler Plugin for Mirador 4
- 🎨Redesigning 3 iOS App Icons with AI: From Flat to Modern iOS Style
- Bulk-Editing 508 Zenn Articles with Playwright and Internal API for Migration Redirects
- Building a Custom Hugo Theme with Tailwind CSS v4 and Submitting to Hugo Themes Gallery
- 🔄Handling App Store Rejection and Resubmission Entirely via API
- 🎨A Reusable Prompt Template for Generating iOS App Icons with AI
- 🛡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
- 📺How to Upload VTT Subtitle Files in YouTube Studio
- 🗺Developing "IIIF AR": An iOS App for Placing IIIF Images at Real Scale in AR
- 🧠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
- ⏰Observed Timing: Apple Sales Reports API Data Availability and YouTube API Quota Reset
- 🤖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
- 📜KotenOCR v1.3.0: Dual OCR Modes for Classical and Modern Japanese Text
- 📚Building an Automated DH Tool Awareness System with Playwright, RSS, and AI
- 📚DH Weekly Topics — 2026年3月21日週
- ⚡Parallelizing OCR Recognition on iOS with Swift Concurrency for up to 6.7x Speedup
- 🔍Building a Cultural Heritage Explorer App with Japan Search API
- 🔍How Japan Search's Image Similarity Search API Works
- 📜KotenOCR: An Offline iOS App for Recognizing Classical Japanese Cursive Script
- 🗄️Comparing Local Archiving Methods for Yahoo News Articles (SingleFile, Playwright, ArchiveBox, WARC, yt-dlp)
- 📸Fully Automating App Store Screenshot Generation with Python and Xcode UI Tests
- 📚Building an NDC Book Classifier with LoRA: Fine-Tuning a Japanese LLM on Library Data
- 🔗Automating researchmap KAKENHI-Achievement Linking with Playwright
- 🚀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
- 🚀Upgrading from Astro 4 to 5 — A Migration Log
- 📸Fixing the White Bar at the Bottom of Chrome Headless Screenshots
- 📜Fast TEI/XML Deployment on Vercel: Automating XSLT Transforms with saxon-js
- 🎭Auto-Generating VRM Character Animation Videos with Three.js + Puppeteer
- 📜Migrating to DTS (Distributed Text Services) 1.0 ― Updating a TEI/XML Text API
- 🔍Improving DTS Viewer ― Multiple Citation Trees, Hierarchical Navigation, and XML Browser Display
- 📚Tech Stack for a RAG App That Searches Historical Documents with AI
- 🚀Submitting an iOS App for Review Using Only the App Store Connect API
- 👁Adding a CETEIcean-Powered TEI Preview to the DOCX → TEI/XML Converter
- ⚡5x Faster XSLT Processing: Migrating from Saxon-JS to Saxon-HE
- 🌐Introducing ethers-i18n: Multilingual Error Messages for ethers.js
- 🎞Animating IIIF Scroll Paintings with AI Video: A Video Annotation Approach
February
- How to Bulk Unpublish Hatena Blog Articles (AtomPub API)
- 📄Building a DOCX to TEI/XML Conversion Tool in the Browser Using the TEI Garage API
- 👋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
- 📚DH Weekly Topics — 2026年2月22日週
- 🐥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
January
- 🐡Developing and Publishing a Rotation Plugin for Mirador 4 on npm
- 💬Implementing IIIF Content Search API on Static Sites - Client-Side Search with Service Workers
- 💬The Pitfall of JavaScript Operator Precedence - Investigating a Vercel Build Error
- 😸Building a Web App to Download and Display GLB Files Using the Sketchfab API
- 🐈ODD Editing Tips: Part 1
- 🔖Why AUTH_URL Is Required in Production for Next Auth (Auth.js v5)
- 🕌Publishing a YOLOv11x Model on Hugging Face
- 📖Serving IIIF Images via Web Tile Map Service
- 📖Nuxt 3 Project Package Update Summary
- 🕌IIIF Georeference to XYZ Tiles
- 👋Auto-Generating English Subtitles and Audio for Videos with Azure OpenAI Whisper + Speech Services
- 🌟Introduction to Dataspaces with Eclipse EDC - Experiencing Data Exchange Flows in a Local Environment
- 🐈How to Use @elastic/react-search-ui with React 19 + Next.js 15.5
- 🐥Draco Compression of GLB Files - 87% Size Reduction and Impact on Precision
- 📝Displaying Over 3 Million Point Cloud Data Points Smoothly in a Browser - Building a Potree LOD Viewer
- 😸Record of Migrating mirador-annotations to Mirador 4.x
- 🎃mirador-rotation-plugin Feature Enhancements
- 🐕Integrating Next.js + next-auth with GakuNin RDM via OAuth2
- ✨[AWS Amplify] Pitfalls When Setting Up Custom Domains with Sakura Internet Domains
2025172
December
- ⛳Dydra JSON-LD Serialization Behavior and Workaround
- 👋How to Navigate to the Detail Page of a File Uploaded via the GakuNin RDM Waterbutler API
- 📘Pinata V3 API Group Feature Implementation Guide
- 👻Drupal Update Procedure on Sakura Rental Server
- 📝Created a Tool to Extract Opening Pages of Each Volume from IIIF Manifests
- 🐥Investigation Record of 404 Errors with CloudFront + App Runner
- 📖How to Correctly Load Local JSON Files in Nuxt 4 SSG
- 👌Implementing a Multilingual Historical Map with MapLibre GL JS + Rekichizu
- 🙄Constraint Design for IIIF-Compatible Facsimile Description Using TEI ODD
- 🐕ODD Chain Tutorial
- 👻Customizing the TEI Classical Text Viewer to Display Illegible Sections (gap)
- 🌟How to Highlight Arbitrary Regions in Mirador 4
- 🌟How to Simultaneously Specify Canvas and Highlight Search Terms in Mirador 4
- 💬Japanese Localization of RAWGraphs 2.0
November
- 🚀Language Switching Implementation Guide with Next.js + next-intl
- 🐕Creating Pyramidal Tiled TIFFs with vips and Comparing Compression Methods
- 🚀Performance Improvement for Annotation Display
- 📌Annotating Tilted Characters and IIIF Image Cropping
- 🌟Elasticsearch/OpenSearch Data Migration Guide Between Clusters
- 🙆♀️Docker + GitHub Actions Deployment Configuration
- 🐥How to Create Distortion-Free Thumbnails from 360-Degree Videos and Photos
- 📝How to Programmatically Determine Whether Insta360 Video Files Contain GPS Information
- 👻Complete Restoration of Deep Zoom Images: Converting Tile Images to BigTIFF
- 🐷BDRC Tibetan OCR: Introduction and Implementation Examples of a Tibetan OCR Tool
- 🐕Marker Position Offset Issue in Cesium 1.135.0 and Its Solution
- 👻Protoweb: A Time Machine to Experience the Internet of the 90s
- ✨Practicing Long-Term Digital Preservation with OCFL - An Introductory Guide
- 📘Using a Hex Editor on Mac: HexEd.it as an Alternative to HxD
- 📘Finding Hidden File Format Issues with DROID: An Essential Tool for Digital Preservation
October
- ✨Development of an IIIF Image Coordinate Editor with Auto-Navigation
- 🐡Odeuropa Visualization: A Platform for Visualizing Scent Data Using SKOS Vocabularies and SPARQL
- 👌How to Build an Independent Author Database in Omeka S
- 💨Complete Guide to Annotation Coordinate Conversion in Leaflet-IIIF
- 🐈Complete Guide to Migrating an Omeka-S Docker Environment to Another Server
- 🦔Distinguishing Between RDFS and SHACL: Understanding the Relationship Between range and propertyShape
- 🐷Developing an RDF Metadata Management System Integrating GakuNin RDM and Dydra
- 📑Investigating the Vocabulary Hierarchy of Odeuropa Explorer
- 🔖Guide to Registering RDF Data to Dydra via API
- 🕌Declarative Multi-Format Conversion with TEI Processing Model
- ⛳How to Control the Viewing Direction of Mirador from External Parameters
- 💭Odeuropa: The World of Linked Data for Extracting Scents from Historical Documents
- 👋Achieving Japanese Full-Text Search with the MroongaSearch Module for Omeka-S
September
- 📝Azure OpenAI GPT-4 vs Document Intelligence: Comparative Evaluation of Japanese Vertical Text OCR
- 🐈LLM-Based Manuscript Paper OCR Performance Comparison: Verification of Vertical Japanese Recognition Accuracy
- 😊Challenges and Solutions for Preserving Order in PDF Transparent Text Extraction
- 📚Guide to Publishing TEI/XML Files on GitHub
- 😸TEI ODD File Customization: A Case Study with NDL Classical Book OCR
- 👌Converting ODD to RNG/HTML Using the TEI Garage API
- 👌Development of the NDL Kotenseki OCR-Lite Next.js Version
August
- 🌟A Scalable OCR Processing System Using NDL Classical Japanese OCR Lite on Azure Container Apps
- 🌟Omeka S Theme Updates and Module Modifications
- 🐙How to Register the PROV-O Ontology in Omeka S
- 💬Image Collection Management Tool: Technical Architecture Explained
- 🌊"Image Collection Management" Tool Usage Guide
- 🎉IIIF Georeference Viewer Migration to MapLibre GL and Feature Improvements
- 🎉Multilingual Support for Omeka S Themes
- 🙄How to Dynamically Convert File Paths on Azure Storage Using Cantaloupe Delegate Scripts
- 🔖Researching How to Use Omeka S
- 🎃Implementation Guide for TEI XML Schema Combining RELAX NG and Schematron
- 😺Setting Up the WDB Module on Drupal 10 in a Docker Environment
July
- 📑Creating Project-Specific RNG Files Using Generative AI
- 🙆Introducing Omeka S Docker: A Modern and Secure Solution for Digital Collections
- 📌I Built a Prototype IIIF 3D Viewer
- 💡Trying Out the Viewer from the "Pre-modern Japan-Asia Relations Digital Archive"
- 🌟Next.js 15 Compatible Multilingual and Dark Mode SSG Template
- 😎How to Implement sitemap.ts When Using output: 'export' in Next.js 15
- 🐡Next.js x Search UI x Fuse.js Search Application
- 📚Testing IIIF Authentication API 2.0
- 📖Trying Text Annotation with Recogito
- 🔥Introducing GitHub File History Analyzer: A Tool for Analyzing File Edit History with AI
- 🌊Trying Out Transkribus
- 🚀Trying grlc (git repository linked data API constructor)
- 📖Trying Odeuropa-Related Tools
- 🚀Added Route Registration Feature to "Rekichizu x Next.js"
- 🐈Trying DToC: Dynamic Table of Contexts
- 💬Handling Insufficient Disk Space in Ontotext GraphDB Desktop Edition
- 😽Trying AllegroGraph
June
- 🐈Fixing the 'ref' Bug in DHConvalidator
- 🐥Building an MCP Server for Searching the Koui Genji Monogatari Text DB
- 💨Building an API Server for Searching the Koui Genji Monogatari Text DB
- 📝Creating a Castle Generation Command as a Minecraft Mod [Fabric 1.21 + Claude]
- 👋NFT Support for the Digital Cultural Heritage Management System (Prototype)
- 🙄Creating TEI/XML Files from IIIF Manifest Files Using NDL Kotenseki OCR-Lite
- 🗂Prototyping a Digital Cultural Heritage Management System Using Blockchain and Pinata IPFS
- 😸Part 2: Creating Annotated IIIF Manifest Files and TEI/XML Files Using NDL Classical Book OCR-Lite
- 🐙Describing Hierarchical Table of Contents with Omeka S IIIF Server Module
- 📖Registering Resources (Items and Images) in Omeka S Using an MCP Server
- 🙆Applying Filters to created and changed Fields in Drupal's JSON:API
- ⛳DTS Viewer Update: Pagination Support
- 📌Using Pagination in IIIF Collections with IIIF Presentation API v2
May
- 🔥How to Allow Non-Admin Users to Access Configuration Pages in Drupal
- 📘Creating Annotated IIIF Manifest Files and TEI/XML Files Using NDL Klasseki OCR-Lite
- 😊Creating a CSV File Containing a List of Image URLs from a IIIF Manifest File
- 📚Using the JSON Field Module to Handle JSON Format Fields in Drupal
- 🌟Hosting TEI/XML Files on S3-Compatible Object Storage
- 😽Updating the DTS (Distributed Text Services) API for the Koui Genji Monogatari Text DB
- 🎃Investigating and Resolving Disk Pressure Caused by Docker [Ubuntu 22.04 Case Study]
- 👋Improvements to the Polygon Annotation Support Tool for IIIF Images
- 🐕Developing a DTS (Distributed Text Services) Viewer
- 📖Creating Polylines Using the Polygon Tool in Annotorious v2
April
- 👏How to Specify Initial Sort Order in Elasticsearch Search UI
- 👋Handling CORS for Express Deployed on Vercel Using vercel.json
- 📚Adding Normalization Rules in Archivematica's Preservation Planning
- 🐷How to Implement IP Address Restrictions for MDX.jp Object Storage
- 🙌Prototyping a TEI/XML File Creation App Using Google Cloud Vision API and GakuNin RDM
- 👋Added Route Registration Feature to the "Rekichizu x Next.js" Site
- 😸How to Disable Browser Language Detection in Nuxt i18n
- 📌Using Rekichizu with Next.js
- 😊An Example of Representing IIIF Polygon Annotations in TEI/XML
- 🐈Building a Tool for Adding Polygon Annotations to IIIF Images
- 😺How to Add Dark Mode Using Tailwind CSS V4 with Next.js 15 App Router
- 📖Handling the Error: Do not use <img>. Use Image from 'next/image' instead.
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
February
- 🗂Building a Multilingual Static Site with Next.js
- 🐥How to Get Coordinates of Sub-Images from a Larger Image
- 🙄Enabled Email-Based Registration in the Mirador 3 Firebase-Linked Annotations Plugin
- 👌Creating TEI/XML from VTT Files
- 💡Using clover-iiif with Next.js
- 🙆Downloading Annotations Created with the mirador-annotations Plugin in Mirador 3
- 🙆Developed a Firestore Adapter for the Mirador 3 mirador-annotations Plugin
- 💨Changing the Pagination Limit in Algolia
- 🗂Prototyping an API for Retrieving Variant Character Lists
- 🗂Using @react-three/fiber and drei with Next 15 (Using React 19)
- 🌊Uploading Large Files to Omeka S
January
- 🎉A Program to Create TEI/XML Files with OCR Results from IIIF Manifest Files
- 📑Created a Similar Text Search App for the Koui Genji Monogatari
- 💨CORS Configuration for Omeka S Image Server
- 📝Creating AIPs with Archivematica for Files in Alfresco
- 👋Starting Alfresco Governance Services Community Edition
- 😎Editing TEI/XML Files Using XSLT
- 📖Processing Dataverse Data with Archivematica
- 💭Real-Time Preview of TEI/XML Using VSCode and XSLT
- 💭Creating PDFs from TEI/XML of the Koui Genji Monogatari Text Database
- ✨Trying Local Authentication with @sidebase/nuxt-auth
- 🙆♀️Authenticating with Drupal Using Nuxt 3 and @sidebase/nuxt-auth
- 🐷Omeka S: Finding Themes Compatible with the Advanced Search Module
- 📘Using Drupal OAuth with NextAuth.js
- 😎Building a Digital Collection Using AppSheet
- 🐡Trying Azure Logic Apps
- 🌊Creating Apps with Azure OpenAI Assistants API Using Gradio and Next.js
- 🐡Trying Kompakkt Standalone Viewer
- 👻How to Upload Media to Omeka S Using Python
- 🐙Trying Annotations in Sketchfab
2024258
December
- ✨Converting OBJ Files to glTF and GLB Files
- 💡Trying aleph-r3f
- 🙄Trying the Aleph 3D Viewer
- 🙌Cantaloupe: Serving Images Stored in Microsoft Azure Blob Storage
- 🦔Building an NDLOCR Gradio App Using Azure Virtual Machines
- 🎉Created a Gradio App to Try ndlocr_cli (NDLOCR ver.2.1) Application
- 😊Trying Out CollectionBuilder
- 🦁Authenticating with GakuNin RDM Using Nuxt 3 and @sidebase/nuxt-auth
- 🙆Building a RAG-based Chat Using Azure OpenAI, LlamaIndex, and Gradio
- 💭Using the "Tale of Genji in Textbooks LOD"
- 📌Trying Out Peripleo
- 😊Trying Out "Rekichizu" (Historical Maps)
- 🙌Developed a Simple Viewer for CSV Files Published on the Internet
- 🔥Building a Gradio App Using NDL Kotenseki OCR-Lite
- 👏Trying Out Geocoding Libraries
- 🔖Specifying Viewing Direction in the Omeka S IIIF Server Module
- 😺Using IIIF Manifest Files Stored in mdx.jp Object Storage from NestJS
November
- 😺Notes on LLM-Related Tools
- 😺Minor Modifications to openai-assistants-quickstart
- 🔥Using NDL Classical Book OCR-Lite (ndlkotenocr-lite) on Mac OS
- 🐷Using processing_config in Archivematica Transfers
- 😎Connecting GakuNin RDM and figshare
- 😸Using GakuNin RDM from Next.js
- 😸Uploading Files and More Using the GakuNin RDM API
- 🐙Authenticating with ORCID, The Open Science Framework, and GakuNin RDM Using NextAuth.js
- 👌Using OldMaps Online
- 🐥Using Knight Lab's TimelineJS and StoryMapJS from Next.js
- 📘Building a Character Detection Model Using YOLOv11x and the Japanese Classical Character Dataset
- 🙄Training YOLOv11 Classification (Kuzushiji Recognition) Using mdx.jp
- 🗂Getting a List of Properties for a Specific Vocabulary in Omeka S
- 🐥Linking to Other Items Using the Custom Vocab Module in Omeka S
- 🔥Running a Local LLM Using mdx.jp 1GPU Pack and Ollama
- 😸Achieving Parallel Display of IIIF and TEI Using XSLT
- 🙆Creating a Transparent Text PDF from a Single Page Using Google Cloud Vision API
- 🐷Using the Zotero API from Next.js
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
September
- 🦁[2024 Edition] Building an IIIF Image Server with AWS Serverless Applications
- 🕌Using Custom Permissions in Drupal Custom Modules
- 👌GitHub Repository for DTS API for TEI/XML Files Published in the Koui Genji Monogatari Text DB
- 🚀Creating a DTS API for TEI/XML Files Published by the Koui Genji Monogatari Text DB
- 🌊Trying Out DTS (Distributed Text Services)
- 📑The Relationship Between DTS and CTS
- 🎉Trying Out the MyCapytain Library
- 👋Trying Canonical Text Services
- 🐥Describing Annotations Using SVG in IIIF Presentation API v3
August
- 🐷Avoid Japanese Folder Names When Registering Metadata to Folders in Archivematica
- 👌Performing Similar Image Search Using GUIE (Google Universal Image Embedding) Pre-trained Models
- 🐕I Created a Drupal Module to Trigger GitHub Actions
- 🐡Created a Sample Repository Using @elastic/search-ui with Nuxt
- 📖Mirador Repository with Vertical Text Support for the Text Overlay Plugin
- 🎃Archivematica Sample Data
- 🙆♀️Verifying the Behavior of Normalization in Archivematica
- 💡Specifying Sort Order in Drupal Facets
- 😊Exporting Tropy Data to Omeka S
- 🚀Preventing Unpublished Content from Being Indexed by Drupal's Search API
- 😊Sample Program Using the Annotorious OpenSeadragon Plugin
- 🤖Setting Field-level Visibility (Public/Private) in Drupal
- 👋Drupal: Troubleshooting Cache Clear Errors
- 😺Applying Google Cloud Vision to Image Files to Create IIIF Manifests and TEI/XML Files
July
- 🙄Handling Errors When Updating Omeka S from v4.0.4 to v4.1
- 🐥Updating Omeka S
- 🐷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
May
- 👏Logging into Drupal Programmatically
- 🎉Bulk Exporting Registered Content in CSV Format from Drupal
- 🔖Searching Including Private Posts with WordPress REST API
- 🐡Triggering GitHub Actions from Drupal Events
- 🐡Inference App Using a YOLOv5 Model (Character Region Detection)
- 👏Getting a List of Untranslated Nodes in Drupal
- 🦔Launching Jupyter Lab on mdx
- ✨Fixing an Inference App Using Hugging Face Spaces and a YOLOv5 Model (Trained on NDL-DocL Dataset)
- 👌Handling ultralyticsplus: ValueError: Invalid CUDA 'device=0' requested...
- 😺Converting IIIF Curation Lists to TEI Facsimile Elements
- 📘Prototyping entity-lookup Using the Japan Search Utilization Schema
- 🙌Trying cwrc's wikidata-entity-lookup
- 🙆Trying the CWRC XML Validator API
- 📚RELAX NG and Schematron
- 👏TEI Publisher ODD Configuration Examples (1)
- 👌Using the Docker Version of TEI Publisher
- 👋Formatting XML Strings in Python
- 😺How to Convert CMYK Color Images Without Color Inversion
- 💨Counting Triples in an RDF Store 2: Co-occurrence Frequency
- 🙆♀️Counting the Number of Triples in an RDF Store
- 👏Case-Insensitive Search in Drupal's Search API
- 🙌Trying Out TEIGarage
- 🐙(Machine Translation) The TEI Archive
- 👌Prototyping Digital Archive Tools: Mainly IIIF Usage Support
April
- 🍣Handling the Error: Input value "page" contains a non-scalar value
- 🍣Bulk Deleting S3 Buckets Using AWS CLI
- ✨Trying NDLTSR (NDL Table Structure Recognition)
- 💨An Example Analysis of Texts Published in "SAT Daizokyo Text Database 2018"
- 🚀Parsing XML Strings in Node.js
- 🐡Adding Links to Publications on researchmap
- 🕌LlamaIndex+GPT4+gradio
- 📝Creating an Inline Marker Tool with Editor.js
- 😽Changing the max-width of Editor.js
- 🐈Checking Which Users Belong to a Specific Group on a Linux System
- ✨Released ver 4.0.2 of the Omeka S Theme Using Bootstrap 5
- ⛳Partial Match Search with the Advanced Search Module in Omeka S
- 👌Specifying Items to Display in Omeka S Search Results
- 💨Creating a Custom Search Page in Omeka S
- 📘Using the API of the Curriculum Guidelines Code Recommendation App
- 📑Prototype of a Course of Study Code Recommendation App
- 😎Using the researchmap API
- 🎉Using the Course of Study LOD
- 📑TEI/XML Visualization Example: Map Display Using Leaflet
- 😺Converting Japanese Calendar Dates to Western Calendar Using HuTime Calendar Conversion Service
March
February
- 📚Trying Out METSFlask
- 😎Trying the Access to Memory RESTful API
- 📌Trying the ArchivesSpace RESTful API
- 🐡Differences Between DACS and ISAD(G)
- 🙌Differences Between Omeka Classic and Omeka S
- 🦁Trying ArchivesSpace's OAI Repository
- 🗂Trying Access to Memory's OAI Repository
- 🔖Trying Out AIPscan
- 📖Using the Media Arts Database SPARQL Endpoint with Yasgui
- 🔖Limiting Filter Properties in Omeka S Advanced Search
- 🌊Tips for Using sidebase/nuxt-auth in a Production Environment
- 🤖Adding Japanese Translation to a Documentation Site Built with Sphinx
- 🌟Copying Build Results to Sakura Rental Server Using GitHub Actions and SCP
- 🎃Resolving mysqldump: not found in MariaDB
- 💭Omeka S Bulk Import Module: Usage Guide (February 2024 Edition)
- 🚀Workaround When Presentation API v2 Manifests Cannot Be Displayed in Mirador 3
- 📝Updating the IIIF Viewers Module for Omeka S
- 🙆Created a Simple TEI/XML File Viewer Using Next.js
- 📚How to Fix the 413 Request Entity Too Large Error in nginx-proxy
- 🙆♀️Configuring Amazon S3 as a Processing Source and AIP Storage Destination in Archivematica
- 👻An Example of Specifying Image Frames in Universal Viewer
January
- 🍣How to Access S3 Buckets and Enable SSL Communication Using Docker-based Cantaloupe
- 👏Trying Out File Information Tool Set (FITS)
- 🐡Trying the Docker Version of Cantaloupe
- 📌Drupal: Registering Files from URLs Using the Feeds Module
- 🐥How to Bulk Delete Files in Drupal
- 🔖Sending Email Notifications for GitHub Actions Results: Using Gmail
- 😽Handling Private Files in Omeka S
- 📌Sending Emails via Amazon SES from Omeka S on Amazon Lightsail
- 🐈Created a Page to Visually Browse Omeka S Themes
- 🙆Aligning the Collated Tale of Genji with Modern Japanese Translations in Digital Genji Monogatari
- 💭Trying ro-crate-py
- 🦁Linking a GitHub Repository with Zenodo
- 😸Trying OAuth2 Authentication for REST Resources Using Drupal's simple_oauth Module
- 💡Trying the Drupal Social Auth GitHub Module
2023198
December
- 🗂Testing Drupal REST Resource Cookie Authentication Using Postman
- 🗂Trying the Drupal JSON Web Token Authentication Module
- 👋Investigation of the Drupal REST & JSON API Authentication Module
- 🤖Updating Drupal on Sakura Rental Server
- 🐡Drupal Module Development: Searching with Variant Characters in Mind
- 🎃Troubleshooting Errors When Running lando start
- 🐕Drush Command Cheat Sheet
- 😽Pagination Error When Using JSON:API Search API in Drupal
- 🙄Usage Example of the Image Map Editor in Oxygen XML Editor
- 🗂Georeferencing with Allmaps
November
- 😺Nuxt3 x Vuetify x Cesium
- 🎉Trying Nuxt 3 and Decap CMS
- 🐷Handling AttributeError: 'ImageDraw' object has no attribute 'textsize'
- 🎃Restarting Virtuoso on EC2 Using Amazon SNS
- 📝Resolving SAM Error: Running AWS SAM Projects Locally Requires Docker
- ✨Trying Leaflet Marker Cluster with Nuxt 3 and Composition API
- 📘Example of Creating a Page Using Universal Viewer v4
- 🐥Nuxt3 x Vuetify x Cytoscape
- 🦔Cantaloupe: Running as a Service
- 🐡Cantaloupe: Serving Images Stored in Amazon S3
- 🗂Drupal: Registering Multiple Values and Skip Processing Using the Feeds Tamper Module
- 😎Drupal: Displaying UUIDs
- 🌟TEI Publisher: Visualization Examples from the TEI Publisher Demo Collection (Part 1)
- 🦔Vue.js: Handling Panes with iframes When Using Splitpanes
- 😊Formatting and Syntax Highlighting XML in Nuxt3
- 📚Schemas Convertible from TEI ODD: RNG, XSD, DTD, and More
- 🙄Using Roma to Limit Tags for Your Project and Generate Documentation
- 👏Using Versioning Machine (VM5.0) with Visual Studio Code (VSCode)
- 🗂Created a Python Library to Convert Freehand Annotations to Rectangles
October
- 😊Making Field Values Selectable in Drupal
- 🌟Enabling Search by ID and Title When Referencing Other Content in Drupal
- 🐥Drupal: Handling Errors When Updating the `uid` Field via API
- 🕌Handling "Some resources have been omitted because of insufficient autho..." in Drupal
- 😽Converting JSON-LD Data to RDF/XML and Turtle Using EASY RDF
- 🎉[Omeka S Module Introduction] BulkExport: Adding Export Functionality to Item Detail Pages
- ⛳Disabling Autotune in Amazon OpenSearch Service
September
- 🐈Installing drush on Drupal Built with Lando
- 🎉How to Disable Twig Cache in Drupal 10.1.0 and Later
- ⛳Enabling HTTPS for Archivematica on EC2
- 😸Trying the IIIF Content State API
- 👻Trying Cantaloupe Access Control
- 📚Adding Values to info.json in Cantaloupe
- 🎃Trying Cantaloupe Overlays
- 📌Enabling the Cantaloupe Admin Panel
- 🌟Enabling HTTPS for Cantaloupe on EC2
- 📝Created Notebooks Using NDLOCR and NDL Classical Japanese OCR ver.2
- 🐷Handling "two factor auth enabled..." on PyPI
- 🦁Launching Cantaloupe, a IIIF Image Server, on EC2
- 🐷Displaying Images Referenced by URL in Drupal Views
August
- 💭Running NDL Classical Japanese OCR on mdx
- 🐷Trying Mirador 2's Physical Document Ruler
- 📝Mirador 3 Plugin Development: Adding Vertical Text Support to the Text Overlay Plugin
- 🐈Notes on Extracting Latitude and Longitude from Google Maps Short URLs
- 🐙Trying the mirador-annotations Plugin and SimpleAnnotationServer with Mirador 3
- 🐡[Omeka S Module Introduction] Advanced Search Adapter for Solr
- 💬Visualizing Item Counts by Latest Update Year for the Japan Search Utilization Schema
- 🦔Accessing a Specific AWS S3 Bucket Using Cyberduck for macOS
- 🦔Setting Up GitHub 2FA Using a Browser Extension
- 🎉Error When Running npx nuxi typecheck
- 🐥Commands for Restarting Virtuoso When It Stops
- 👻Utilizing Exhibition Information Stored in the Cultural Japan RDF Store
- 😺Mirador 3 Plugin Development: Creating a Layer Slideshow
July
- 📌About ALTO (Analyzed Layout and Text Object) XML
- 📘Watching URL Query Changes with watch in Nuxt3
- 💬I Created a Sample Repository Using CETEIcean and Nuxt 3
- 😸How to Check How Fields Are Indexed in Apache Solr
- 👻[Omeka S Module Introduction] Scripto: Performing Transcription and Translation
- 🌟[Omeka S Module Introduction] IiifPresentation: Adding IIIF Presentation API
- 🚀Omeka S Module Introduction: HistoryLog - Recording Change History
- 💭Updated Mirador to 2.7 in the Omeka Classic IIIF Toolkit
- 🔥Batch Registering Data to Omeka Classic IIIF Toolkit
- 🐙Mirador 3 Plugin Development: Copying a Window
- 🐕Trying QuickStatements on wikibase.cloud
- 🐷Trying Out WikibaseSync
- 🐡Using the Wikibase API
- 🎃Trying Dataverse
- 🐥Trying wikibase.cloud
- 🐕Health Checking Virtuoso Running on Amazon EC2
- 👏Using the onClose Prop
- ⛳Zooming to Meet Viewport Constraints in Mirador 3
- 👌Using zoomTo in OpenSeadragon to Satisfy Viewport Constraints
- 📚Difference Between `fitBounds` and `fitBoundsWithConstraints` in OpenSeadragon (OSD)
- 🌟Highlighting LaTeX in Monaco Editor
- 🔥Highlighting TeX with Ace.js
- 📘Building a Django CI/CD Environment from GitHub to EC2 Using GitHub Actions (2023 Edition)
- 📘django-simple-history: Recording Model Edit History in Django
- 📌Implementing Partial Match Filters in Django Rest Framework (DRF)
June
- ✨How to Bulk Delete Collections in Omeka Classic
- 🦁Guide to the IIIF Mirador 2 Annotation Interface
- 🙆♀️Trying Out bagit-python
- 📚Getting the File Path of an Uploaded File Using Django's ModelForm
- 🎉Connecting Django with AWS OpenSearch
- 🐥Bulk Registration with Django REST Framework
- ✨Using JWT in Django (djangorestframework-simplejwt)
- 📚Using the Archivematica API to Perform Transfer Through AIP Download
- 🍣Setting Default Sort Order for Items Displayed on Per-Item-Set Pages in Omeka S
- 💡Sorting and Pagination in Strapi v4 GraphQL
- 🙆♀️Enabling OpenAPI in Drupal
- 💡Using OpenSeadragon and OpenSeadragon SVG Overlay with Nuxt3
- 📚Handling CORS Errors with Drupal's JSON:API
- 😺Troubleshooting JSON:API Related Errors
- 📝Disable UI: Using Drupal as a Headless CMS
- 🔖How to Use Drupal JSON:API (include and Multilingual Support)
- 🙄Content Registration and Multilingual Support Using Drupal Key Auth
- 🦁Trying Wagtail
- 😎Causes and Solutions When Browse Does Not Work in Archivematica
- 📘Bulk Deleting Amazon ECR Repositories
- 🗂Customizing Views for Custom Models in Django REST Framework JSON:API (DJA)
- 📖Adding Custom Models to Django REST framework JSON:API (DJA)
- 🌟Trying Django REST Framework JSON:API (DJA)
May
- 📝Specifying the ImageMagick Path When Installing Omeka S on Sakura Rental Server
- 🔥Creating a REST API Using OpenAPI and AWS CDK (OpenSearch Connection and Custom Domain)
- 🌟Integrating Strapi with Amazon OpenSearch
- 🐕Configuring Strapi's REST API
- 🔥Creating PDF Files from IIIF Manifest Files
- 🦔How to Upload and Update Files Using the GitHub GUI
- 👏About the Image Server Configuration for Omeka S
- 😊AWS CDK x CloudFront x S3 x Basic Auth x index.html Support x Custom Domain
- ⛳How to Register IIIF Images as Media in Omeka S
- 😸Creating an Anonymous File Uploader Using Google Drive and Google Apps Script
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
March
- 🕌Bidirectional Interaction Between Vue 3 and Babylon.js (Part 2)
- 🙄Loading .glb Files with Nuxt3 x babylon.js
- 🐙Bidirectional Interaction Between Vue 3 and Babylon.js
- 🐕Changing Annotation Colors in IIIF Curation Viewer
- 🐡Web Application for NDL Classical Book OCR Using Hugging Face Space
- 💡Running NDL Classical Japanese OCR on Amazon EC2 CPU Environment
- Comparison of Nuxt.js and Next.js
- What Is a Canonical URL? (canonicalUrl)
- 🕌Implementing Exact Non-Match Search with Fuse.js (Explained by GPT-4)
- 🐈How to Extract respStmt name Values from TEI/XML Files (Explained by GPT-4)
- 📝Omeka Classic and Omeka S: Feature Comparison (Explained by GPT-4)
- 📖Omeka S User Permissions and Access to Private Resources
- 🐷Updating Vocabularies Created with Omeka S Custom Ontology
- 🙆♀️Trying Leaflet Marker Cluster with Nuxt 3
- 👏Memo on Using nbdev
- 😸Partially Implementing Exact Non-Match Search with Fuse.js
- 💬[Omeka S Module Introduction] Bulk Import: Batch Registration of Metadata and Images Using CSV Files (2023-03 Edition)
February
- 🙆♀️Running NDL Classical Text OCR Using Amazon SageMaker Studio
- ⛳[Babylon.js x Vue] Passing Click Events to Vue
- 🔥Trying the Babylon.js Vue Tutorial with Nuxt 3
- 🎃Running ArchivesSpace as a Unix Daemon
- 😺Setting Up ArchivesSpace on Amazon Lightsail
- 📖Japanese Translation Example of the Archivematica AIP README File
- 🍣Trying the Archivematica API (Archivematica API - Transfer)
- 📚Using Japan Search Web Parts with Next.js
- 🔖Trying the Archivematica API (Storage Service API)
- 👋Setting Up Archivematica on Amazon EC2
- ✨Hosting Nuxt 3 SSR on Vercel (+ Enabling CORS)
- 🎉Creating IIIF Manifest Files Using a Headless CMS
- 💬Program for Batch Image Registration to Omeka S
- 🌟Using Babylon.js with Nuxt3 and Vuetify Together
January
- 🙌Publishing Images Using IIIF Image API Level 0
- 😊Created a Program to Calculate Edit Distance for TEI/XML Files Containing app Elements
- 😎How to Use IIIF Presentation Validator in a Local Environment
- 👋NDL Classical Text OCR Using Google Colab
- 👏[Omeka S Module Introduction] BulkExport: Bulk Data Export
- 😸Collaborative Editing of TEI/XML Files Using Visual Studio Live Share (Not Limited to XML)
- 📌Validating XML Files Using the JPCOAR Schema
- 🐥Trying the jingtrang Library for RELAX NG Schema: Creating RNG Files
- 🐈Trying the jingtrang Library for RELAX NG Schema: Validation
- 🚀Converting Word to TEI/XML
- 🌊Trying to Register an Image on OpenSea
- 🦁Trying to Add Images and a IIIF Manifest to IPFS
- 🦔Creating a Customized RNG File Using Roma: Restricting Available TEI Tags
- 😸An Example Workflow for Creating TEI/XML from Excel
2022184
December
- 😊Created a Custom OpenSeaDragon Viewer for Use in TEI Viewers
- 👻Introducing an IIIF Viewer in Nuxt3 with SSR
- 🔥Script for Initial Setup of Omeka S on Amazon Lightsail (Adding the Easy Admin Module)
- 📚Omeka S Module Development: FixCjkSearch - Fixing Full-Text Search Issues with Japanese in Omeka S
- ✨Deploying Nuxt 3 on Amazon Lightsail: Using pm2
- 👏[Omeka S Module Introduction] Folksonomy: Social Tagging
- 🌟Trying Out Gatsby CETEIcean
- 📌Trying Out TEI Boilerplate
- 💨Omeka S 4.0.0 Release Candidate Has Been Published
- 🚀Restricting API Access in Omeka S
- 👌TODO Memo for EC2 Server Setup
November
- 🔥Investigating Customization Methods for Snorql for Japan Search
- 📘Using the Japan Search SPARQL Endpoint with Yasgui
- 💨[Omeka S Module Introduction] Mapping Module
- 🙆♀️[Omeka S Module Introduction] Timeline Module
- 🕌[Omeka S Module Introduction] IIIF Search Module
- 💨[Omeka S Module Modification] IIIF Search Module
- 🦔Running Tesseract on Google Colab (with Japanese Support)
- 🍣[Omeka S Module Introduction] "Extract Ocr" - A Module for Performing OCR on PDF Files
- 🙆♀️Workaround for HuggingFace Trainer() Not Starting When Using Vertex AI Workbench
- 👌Installing the Mroonga Search Module (Note: This Did Not Work Successfully)
- 🐡Trying the ResourceSync Python Library
- 📑[Omeka S Module Development] Adding Features to Sitemaps
- 👏[Omeka S Module Introduction] Sitemaps
- 🌟Trying the IIIF Auth API
- 📑Omeka S Module Introduction: Data Type RDF
- 😽Introduction to "FairCopy": A TEI Text Creation Support Tool
- 🙄Registering ICA RiC-O Vocabulary in Omeka S
- 🦁How to Use the Text Markup Tool "CATMA"
- 🌟Trying the MediaWiki TEI Extension (Result: Did Not Work)
- ✨A Python Package for Interacting with the Omeka S REST API
- 🗂[Omeka S Module Introduction] Custom Vocab
October
- 🙆Retrieving Birth and Death Years of Historical Figures from Wikidata
- 📘[TEI x JavaScript] Removing Unintended Whitespace in Nuxt 3
- 😊Dealing with AttributeError in ultralytics/yolov5
- 💭An Example of Manipulating JSON Files with Nuxt 3's server/api
- 📌Script for Initial Setup of Omeka Classic on Amazon Lightsail
- 💭An Example of Deploying Nuxt 3 to Netlify and AWS
- 🙆Double-Sided Ruby Annotations Using python-docx
- 💨An Example Method for Converting TEI/XML Files to Vertical-Writing PDF
- 🌟Prototype npm Package for Displaying Popups on Selected Text
September
- ⛳Converting TEI/XML Files to EPUB Using Python
- 📝[Omeka S Module Development] Updating IIIF Viewers
- 😸Supporting Drag & Drop for IIIF Icons
- 👏Creating a GitHub Release Script for Omeka S Module Development
- 🐡How to Extract and Process Only Text Strings from XML Files
- 🗂I Created an API That Returns a List of Items Containing a Specified IIIF Manifest in Cultural Japan
- 🌟Batch Download Script for Omeka S Modules
- 🙆[Memo] MapTiler Light and Dark Themes
- 🔥Omeka S Theme Development: Fixed a Bug in the Bootstrap 5 Omeka S Theme
- 🔥Script for Initial Setup of Omeka S on Amazon Lightsail
- 🐥Specifying the Initial Specification to Display in Swagger UI Demo via GET Parameter
- 😽Output Content of IIIF Manifests (Version 2) from the Omeka S IIIF Server
August
- 📑How to Set the xml:id Attribute with BeautifulSoup
- 🌟[Omeka S] Created a Foundation S Theme That Works Around the Japanese Search Bug
- 😺[Omeka S] Handling Bulk Import Bugs (Including Installation from Source Code)
- 🍣[Memo] How to Use Virtuoso
- 🐡How to Manually Restart or Stop Virtuoso from the Command Line
- 😸Similar Image Search Using VGG16
- 💬Similar Image Search Using an Autoencoder
- 🚀[RDF] Configuring URI Access to Redirect to the Snorql Interface
- 🍣Returning JSON from Hugging Face Spaces
- 🐙Building a Virtuoso RDF Store Using AWS EC2
- 💭How to Register and Delete RDF Files in Virtuoso RDF Store Using curl and Python
- 🙆Building an Inference App Using Hugging Face Spaces and a YOLOv5 Model (Trained on the NDL-DocL Dataset)
July
- 👻Dumping Elasticsearch Data to Local
- 💭Building a Layout Extraction Model Using the NDL-DocL Dataset and YOLOv5
- 💡Getting a Google Drive Folder ID from a Path Using Google Colab
- 🐈Conversion and Visualization of the NDL-DocL Dataset (Document Image Layout Dataset)
- 👌Hosting Hugging Face Models on AWS Lambda for Serverless Inference
- 👻I Created a Program to Extract Differences Between Two Texts
- 📝Trying Omeka Classic as a Headless CMS
- 🐥Created an Image Comparison Tool Using Mirador 3
- ✨Bulk Registration of Annotations Using the IIIF Toolkit for Omeka Classic
- 🔥Building an Omeka Classic Site Using Amazon Lightsail (Including Custom Domain + SSL)
- 🌟NDL OCR Now Supports Ruby (Furigana) Text Extraction
- 💬Aggregations with Different Keys and Values (Labels and IDs) in Elasticsearch
June
- 🐈Bug and Fix for Omeka S Bulk Import
- 🐡Created a Video on How to Use the NDLOCR App with Google Colab
- 📑Scheduled Backup of Omeka S Data Using AWS Copilot
- 💨Created a Program to Download Data from Omeka Classic
- 💡Created a Program to Download Omeka S Data
- 🎉How to Add the mirador-image-tools Plugin to Mirador 3 and Bundle It into a Single JS File for Distribution
- 🤖I Created an IIIF Image API Tool Using Nuxt 3 and Vuetify 3
- 🌊File Upload (Python) and Download (PHP)
May
- 🐷Creating Microsoft Word Files with python-docx: Using Templates and int2kanji
- 💭[Omeka S Module] How to Disable Image API in the IIIF Server Module
- 🔥[Omeka S Theme] Partial Mapping Module Support for Bootstrap 5 Theme
- 💬[Omeka S] How to Use the "IIIF Viewers" Module for Multiple IIIF-Compatible Viewers
- 🗂Registering DC-NDL (National Diet Library Dublin Core Metadata Description) as a Vocabulary in Omeka S
- 🐙Sample Notebook for Fetching Google Spreadsheet Data from Google Colab
- 🐙Memo: Specifying a Profile When Running sam deploy
- 💡Resolving "Error building docker image" During Local Development with AWS SAM
- 💬Simple Backup of Omeka S Using gdrive
- 😽Using gdrive in a LAMP environment started with Amazon Lightsail
- 🦔Using gdrive in a LAMP Environment on Amazon Lightsail
- 🤖What to do when
- 🚀How to Fix "An error occurred in Google Drive": Script to Empty Shared Drive Trash
- 🐥Running gcv2hocr on Google Colab: Creating Searchable PDFs with Transparent Text Using Google Vision API
- 🎉How to Delete Files on Google Drive Using Google Colab
- 🐥Created Version 2 of the NDLOCR App Using Google Colab
- 🐷Fixing the GitHub Repository Demonstrating Mirador 3 Usage with Nuxt 2
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)
- 📝Setting Up an Omeka S Site Using Amazon Lightsail (Including Custom Domain and SSL)
- 🤖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
- 📝Viewing OCR Results from the NDL Next Digital Library in a IIIF Viewer
- 💬[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
- 👋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 (Flask + YOLOv5) Using AWS Lambda
- 📑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
- 📝Summary Article and Zenn Book on Building an Annotation Environment Using Omeka Classic + IIIF Toolkit
- 📝Building an Annotation Environment with Omeka Classic + IIIF Toolkit: Overview
- 📝Building an Annotation Environment with Omeka Classic + IIIF Toolkit: Chapter 4 Adding Annotations
- 📝Building an Annotation Environment with Omeka Classic + IIIF Toolkit: Chapter 3 Registering a IIIF Manifest
- 📝Building an Annotation Environment with Omeka Classic + IIIF Toolkit: Chapter 2 Installing the IIIF Toolkit Plugin
- 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)
- 📝How to Use Omeka.net (Classic): Chapter 7 Managing Users
- 📝How to Use Omeka.net (Classic): Chapter 6 Simple Pages
- 📝How to Use Omeka.net (Classic): Chapter 5 Exhibit Builder
- 📝How to Use Omeka.net (Classic): Chapter 4 Managing Tags
- 📝How to Use Omeka.net (Classic): Chapter 3 Adding Items
- 📝How to Use Omeka.net (Classic): Chapter 2 Sign Up and Plan Selection
- 📝How to Use Omeka.net (Classic): Chapter 1 Overview
- 🐈[Google Colab] Retrieving Article Lists Using the Hatena Blog AtomPub API
- 📝How to Use a Flask-based YOLOv5 Model Repository with Amazon ECR and AWS App Runner
- 🚀How to Use a Flask-Based YOLOv5 Model Repository with ECR and AWS App Runner
- 📝Resolving "Health check on port XXXX" Error When Using AWS App Runner with ECR
- 🎉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
- 📝Using an External Image Server with the Omeka S IIIF Server Module
- 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
February
- How to Fix Errors with gdown
- Created a Program to Generate TEI facsimile Elements from IIIF Manifest Files
- 📝Deploying a YOLOv5 Model with Flask and Loading Custom Models
- 📝Configuring CORS Policy When Using the Omeka S IIIF Server Module
- How to Get an Element with a Specific xml:id Value Using JavaScript querySelector()
- [Omeka S Development] Created a Program to Generate CSV Files for Registering Dummy Data in Omeka S
- [Omeka S Module Introduction] How to Use the Mapping Module (Especially Batch Registration via the CSV Import Module)
- [Omeka S Module Development] Developed a Module to Add Various Export Links to the Item Detail Page
- [Omeka S Module Development] Developed a Module to Add IIIF Content Search API URIs to IIIF Manifests
- [Omeka S Module Info] Bug in the Clean Url Module and Temporary Fix
202129
September
August
- [Feature Development] Added Table of Contents Functionality to the Omeka S IIIF Module (Part 2: Registering Hierarchical Tables of Contents)
- [Feature Development] Added Table of Contents Functionality to the Omeka S IIIF Module (Part 1: Registering Flat Tables of Contents)
- [Feature Development] Bug Fix for License Property in the Omeka S IIIF Server Module
- [Translation] How to Add Table of Contents Information in the Omeka S IIIF Server Module
- How to Embed Mirador 3 in a Specific Area of a Page
- How to Add a Line Break Before the lb Tag in Oxygen Auto-Formatting
- Created a Repository Demonstrating How to Use Mirador 3 with Nuxt.js
- [Omeka S Tips] Notes on Using the BulkImport Module on Windows
- [Omeka S Tips] About Auto-Adding New Items to Each Site
July
- [Omeka S Module Introduction] Numeric Data Types: Enabling Range Search for Date Data, and More
- Created a GitHub Repository Demonstrating How to Use vis.js with Nuxt.js
- [Omeka S Module Introduction] Metadata Browse: Adding Links to Search for Items with the Same Metadata
- [Omeka S Module Customization] OaiPmhRepository: Creating Custom Vocabularies
- 📝Omeka S Module: Advanced Search Plus - Extending Advanced Search Functionality
- [FOSS Memo] CollectiveAccess
- 📝Omeka S Module: Custom Ontology - Adding Custom Vocabularies
- [Omeka S Tips] How to Add Existing Standard Vocabularies
- [App Introduction] Introducing IIIF pocket
- [Omeka S Manual Translation] Resources > Items
- [Omeka S Tips] How to Set Language Attributes for Metadata
- [Omeka S Module Introduction] Item Sets Tree
- [Omeka S Module Introduction] IIIF Server / Image Server / Universal Viewer
- Reference Materials for Introducing Omeka S
- Introduction to the IIIF Collection of IIIF Manifests Aggregated by Cultural Japan
- Created a Repository Demonstrating How to Use Mirador 3 with Vue
- [Feature Development] Adding a Setting to Disable Image API in the Omeka S IIIF Server Module