2927 lines
No EOL
160 KiB
JSON
2927 lines
No EOL
160 KiB
JSON
{
|
||
"uuid": "5ff4fb71-8283-4be7-a9c0-5e7d58689de0",
|
||
"name": "PRONOM Format Identification in Rust",
|
||
"summary": "",
|
||
"created_at": "2025-09-07T05:30:10.705484Z",
|
||
"updated_at": "2025-09-07T05:30:23.342578Z",
|
||
"account": {
|
||
"uuid": "744f88eb-642d-4338-a101-3302d29c02b5"
|
||
},
|
||
"chat_messages": [
|
||
{
|
||
"uuid": "b073a95d-8c0f-4809-bc7e-757dd0e2ca6e",
|
||
"text": "Create a plan for a format-identification service in docs/plan/format-identification. The service should be based on PRONOM, │\n│ Siegfried (https://github.com/richardlehane/siegfried, https://www.itforarchivists.com/# │\n│ https://www.itforarchivists.com/siegfried) and other relevant archival format-identifying services. https://www.itforarchivists.com/siegfried) is written in Go, the app in Rust. Describe how we can rewrite the service in Rust",
|
||
"content": [
|
||
{
|
||
"start_timestamp": "2025-09-07T05:30:11.376417Z",
|
||
"stop_timestamp": "2025-09-07T05:30:11.376417Z",
|
||
"flags": null,
|
||
"type": "text",
|
||
"text": "Create a plan for a format-identification service in docs/plan/format-identification. The service should be based on PRONOM, │\n│ Siegfried (https://github.com/richardlehane/siegfried, https://www.itforarchivists.com/# │\n│ https://www.itforarchivists.com/siegfried) and other relevant archival format-identifying services. https://www.itforarchivists.com/siegfried) is written in Go, the app in Rust. Describe how we can rewrite the service in Rust",
|
||
"citations": []
|
||
}
|
||
],
|
||
"sender": "human",
|
||
"created_at": "2025-09-07T05:30:11.380441Z",
|
||
"updated_at": "2025-09-07T05:30:11.380441Z",
|
||
"attachments": [],
|
||
"files": []
|
||
},
|
||
{
|
||
"uuid": "2802b6a8-e4be-44b8-a759-8336e485fac7",
|
||
"text": "\n\nI'll create a comprehensive plan for a format-identification service based on PRONOM and Siegfried. Since this is a detailed technical planning request that would benefit from current information about these tools and best practices, let me start some research to ensure the plan is thorough and up-to-date.\n```\nThis block is not supported on your current device yet.\n```\n\nYour format identification service implementation plan is ready. It outlines a complete Rust-based architecture with five core layers: Signature Management, Matching Engine, File Processing, API Service, and Storage/Caching. The plan details data flows, memory optimization strategies, PRONOM integration, SIMD acceleration techniques, API designs, and testing approaches. It includes concrete code examples, deployment configurations, and a 12-week implementation timeline organized into five development phases.\n```\nViewing artifacts created via the Analysis Tool web feature preview isn’t yet supported on mobile.\n```\n\n",
|
||
"content": [
|
||
{
|
||
"start_timestamp": "2025-09-07T05:30:13.136219Z",
|
||
"stop_timestamp": "2025-09-07T05:30:14.620390Z",
|
||
"flags": null,
|
||
"type": "text",
|
||
"text": "\n\nI'll create a comprehensive plan for a format-identification service based on PRONOM and Siegfried. Since this is a detailed technical planning request that would benefit from current information about these tools and best practices, let me start some research to ensure the plan is thorough and up-to-date.",
|
||
"citations": []
|
||
},
|
||
{
|
||
"start_timestamp": "2025-09-07T05:30:14.805099Z",
|
||
"stop_timestamp": "2025-09-07T05:30:21.564432Z",
|
||
"flags": null,
|
||
"type": "tool_use",
|
||
"name": "launch_extended_search_task",
|
||
"input": {
|
||
"command": "Research and create a comprehensive plan for a format-identification service based on PRONOM, Siegfried (https://github.com/richardlehane/siegfried, https://www.itforarchivists.com/siegfried), and other relevant archival format-identifying services. The service should be rewritten from Go (Siegfried's language) to Rust. \n\nKey research areas needed:\n1. PRONOM registry structure, data formats, and API capabilities\n2. Siegfried architecture, core algorithms, and identification methods \n3. Other relevant archival format identification tools and services beyond Siegfried\n4. Best practices for file format identification in digital preservation\n5. Rust ecosystem libraries that could support format identification (file parsing, pattern matching, etc.)\n6. Performance considerations when porting from Go to Rust\n7. Integration patterns for format identification services\n8. Current challenges and limitations in existing format identification tools\n\nThe plan should include:\n- Service architecture and component design\n- Data flow and identification workflow\n- Rust-specific implementation strategies\n- Integration with PRONOM and other registries\n- Performance optimization approaches\n- API design considerations\n- Testing and validation strategies\n- Deployment and maintenance considerations\n\nFocus on practical implementation details and concrete technical approaches for building this in Rust, including specific Rust crates and patterns that would be most suitable."
|
||
},
|
||
"message": "launch_extended_search_task",
|
||
"integration_name": null,
|
||
"integration_icon_url": null,
|
||
"context": null,
|
||
"display_content": null,
|
||
"approval_options": null,
|
||
"approval_key": null
|
||
},
|
||
{
|
||
"start_timestamp": null,
|
||
"stop_timestamp": null,
|
||
"flags": null,
|
||
"type": "tool_result",
|
||
"name": "launch_extended_search_task",
|
||
"content": [
|
||
{
|
||
"type": "text",
|
||
"text": "{\"task_id\": \"wf-b7a623b9-6ee6-4ec1-bfd5-c612bec2b666\"}",
|
||
"uuid": "e06f898e-b842-45f4-886b-5af1000188e2"
|
||
}
|
||
],
|
||
"is_error": false,
|
||
"message": null,
|
||
"integration_name": null,
|
||
"integration_icon_url": null,
|
||
"display_content": null
|
||
},
|
||
{
|
||
"start_timestamp": "2025-09-07T05:30:21.814556Z",
|
||
"stop_timestamp": "2025-09-07T05:30:21.814556Z",
|
||
"flags": null,
|
||
"type": "text",
|
||
"text": "",
|
||
"citations": []
|
||
},
|
||
{
|
||
"start_timestamp": null,
|
||
"stop_timestamp": null,
|
||
"flags": null,
|
||
"type": "text",
|
||
"text": "Your format identification service implementation plan is ready. It outlines a complete Rust-based architecture with five core layers: Signature Management, Matching Engine, File Processing, API Service, and Storage/Caching. The plan details data flows, memory optimization strategies, PRONOM integration, SIMD acceleration techniques, API designs, and testing approaches. It includes concrete code examples, deployment configurations, and a 12-week implementation timeline organized into five development phases.",
|
||
"citations": []
|
||
},
|
||
{
|
||
"start_timestamp": null,
|
||
"stop_timestamp": null,
|
||
"flags": null,
|
||
"type": "tool_use",
|
||
"name": "artifacts",
|
||
"input": {
|
||
"id": "compass_artifact_wf-b7a623b9-6ee6-4ec1-bfd5-c612bec2b666_text/markdown",
|
||
"type": "text/markdown",
|
||
"title": "Comprehensive Plan for Rust-Based Format Identification Service",
|
||
"source": "c",
|
||
"command": "create",
|
||
"content": "# Comprehensive Plan for Rust-Based Format Identification Service\n\n## Service architecture and component design\n\nBased on research into PRONOM, Siegfried, and the broader ecosystem, the Rust implementation should follow a modular, trait-based architecture that maximizes performance while maintaining extensibility.\n\n### Core Architecture\n\nThe service architecture consists of five primary layers:\n\n**1. Signature Management Layer**\n- **Signature Parser Module**: Handles PRONOM XML signature files using `quick-xml` or `roxmltree` for efficient parsing\n- **Signature Compiler**: Transforms PRONOM patterns into optimized Aho-Corasick automata using the `aho-corasick` crate (v1.1.3)\n- **Registry Interface**: Trait-based abstraction supporting PRONOM, LOC FDD, MIME-info, and custom signatures\n- **Version Manager**: Handles signature file updates with atomic swapping for zero-downtime updates\n\n**2. Matching Engine Layer**\n- **Byte Pattern Matcher**: Core implementation using `aho-corasick` for multi-pattern matching with SIMD optimization\n- **Container Matcher**: Specialized handlers for ZIP (`zip` crate v0.6.6) and OLE2 formats\n- **Extension Matcher**: Fast trie-based matching using `radix_trie` (v0.2.1)\n- **MIME Type Matcher**: Secondary identification through MIME type analysis\n- **Priority Resolver**: Real-time application of PRONOM priority rules during matching\n\n**3. File Processing Layer**\n- **Buffer Manager**: Intelligent buffering with `memmap2` (v0.9.5) for files >1MB\n- **Stream Processor**: Async file handling using `tokio::fs` for concurrent operations\n- **Format Validators**: Format-specific validation using `binrw` (v0.14.0) for binary parsing\n\n**4. API Service Layer**\n- **REST API**: Built with `axum` (v0.7.7) for modern async handling\n- **gRPC Service**: Optional high-performance interface using `tonic`\n- **WebSocket Support**: Real-time notifications for batch processing\n\n**5. Storage and Caching Layer**\n- **Result Cache**: LRU cache implementation using `cached` or custom B-tree approach\n- **Signature Storage**: Serialized with `postcard` (v1.0.10) for compact storage\n- **Metrics Store**: Time-series data for performance monitoring\n\n### Component Interaction Model\n\n```rust\npub trait FormatIdentifier: Send + Sync {\n type Error: std::error::Error;\n \n async fn identify(&self, input: &IdentificationInput) -> Result<FormatResult, Self::Error>;\n fn confidence(&self, result: &FormatResult) -> f32;\n fn supports_format(&self, puid: &str) -> bool;\n}\n\npub trait SignatureMatcher: Send + Sync {\n fn match_bytes(&self, data: &[u8], offset: usize) -> Vec<Match>;\n fn priority(&self) -> u32;\n}\n```\n\n## Data flow and identification workflow\n\nThe identification workflow implements a staged approach optimizing for both speed and accuracy:\n\n### Primary Workflow\n\n**Stage 1: Fast Path Detection (0-10ms)**\n1. Extract file extension and check against known extensions using radix trie\n2. Read first 8KB of file for magic number detection\n3. Apply SIMD-optimized pattern matching for common formats\n4. If high-confidence match found, return immediately\n\n**Stage 2: Deep Analysis (10-100ms)**\n1. Expand buffer to 64KB for comprehensive signature matching\n2. Run parallel matchers concurrently using `rayon::scope`\n3. Apply container detection for ZIP/OLE2 formats\n4. Resolve conflicts using PRONOM priority rules\n\n**Stage 3: Validation (Optional, 100ms+)**\n1. Load format-specific parser using dynamic dispatch\n2. Validate file structure against format specification\n3. Extract technical metadata if requested\n4. Calculate confidence score based on validation depth\n\n### Async Processing Pipeline\n\n```rust\nasync fn identify_file(path: &Path) -> Result<Identification> {\n let metadata = tokio::fs::metadata(path).await?;\n \n // Choose strategy based on file size\n let strategy = if metadata.len() > 1_048_576 {\n ProcessingStrategy::MemoryMapped\n } else {\n ProcessingStrategy::Buffered\n };\n \n // Run matchers in parallel\n let (extension, magic, container) = tokio::join!(\n match_extension(path),\n match_magic_bytes(path, strategy),\n detect_container(path, strategy)\n );\n \n // Resolve and prioritize results\n resolve_identification(extension?, magic?, container?)\n}\n```\n\n## Rust-specific implementation strategies\n\n### Memory Management Strategy\n\n**Zero-Copy Architecture**: Leverage Rust's borrowing system to minimize allocations:\n- Use `&[u8]` slices for pattern matching without copying data\n- Implement `scroll` for zero-copy binary parsing\n- Apply `Cow<'a, str>` for conditional string ownership\n\n**Arena Allocation**: For batch processing, use `bumpalo` arena allocator:\n```rust\nuse bumpalo::Bump;\n\npub struct BatchProcessor {\n arena: Bump,\n results: Vec<IdentificationResult>,\n}\n```\n\n### Concurrency Model\n\n**Work-Stealing Architecture**: Implement using `rayon` for CPU-bound tasks:\n```rust\nuse rayon::prelude::*;\n\npub fn process_directory(path: &Path) -> Vec<Result<Identification>> {\n let entries: Vec<_> = WalkDir::new(path)\n .into_iter()\n .filter_map(Result::ok)\n .collect();\n \n entries.par_iter()\n .map(|entry| identify_file(entry.path()))\n .collect()\n}\n```\n\n**Async I/O with Backpressure**: Use `tokio` with bounded channels:\n```rust\nlet (tx, mut rx) = tokio::sync::mpsc::channel(100);\n\n// Producer task\ntokio::spawn(async move {\n for file in files {\n tx.send(file).await?;\n }\n});\n\n// Consumer pool\nfor _ in 0..num_workers {\n let mut rx = rx.clone();\n tokio::spawn(async move {\n while let Some(file) = rx.recv().await {\n process_file(file).await;\n }\n });\n}\n```\n\n### Error Handling Pattern\n\nImplement comprehensive error types with `thiserror`:\n```rust\nuse thiserror::Error;\n\n#[derive(Error, Debug)]\npub enum IdentificationError {\n #[error(\"IO error: {0}\")]\n Io(#[from] std::io::Error),\n \n #[error(\"Unknown format\")]\n UnknownFormat,\n \n #[error(\"Corrupted file: {details}\")]\n CorruptedFile { details: String },\n \n #[error(\"Signature parsing failed: {0}\")]\n SignatureError(String),\n}\n```\n\n## Integration with PRONOM and other registries\n\n### PRONOM Integration\n\n**Signature Harvesting Module**:\n```rust\npub struct PronomHarvester {\n client: reqwest::Client,\n base_url: String,\n}\n\nimpl PronomHarvester {\n pub async fn download_signatures(&self) -> Result<SignatureFile> {\n let xml = self.client\n .get(&format!(\"{}/signatures/latest.xml\", self.base_url))\n .send()\n .await?\n .text()\n .await?;\n \n parse_pronom_xml(&xml)\n }\n}\n```\n\n**Signature Compilation Pipeline**:\n1. Parse PRONOM XML using `quick-xml` with streaming for large files\n2. Convert byte patterns to Aho-Corasick patterns\n3. Build container signature trees for ZIP/OLE2 formats\n4. Serialize compiled signatures with `postcard` for fast loading\n\n### Multi-Registry Support\n\nImplement registry abstraction layer:\n```rust\npub trait FormatRegistry {\n async fn fetch_signatures(&self) -> Result<Vec<Signature>>;\n fn namespace(&self) -> &str;\n fn priority(&self) -> u32;\n}\n\npub struct RegistryManager {\n registries: Vec<Box<dyn FormatRegistry>>,\n}\n```\n\n## Performance optimization approaches\n\n### SIMD Optimization\n\nLeverage `std::simd` for pattern matching acceleration:\n```rust\nuse std::simd::{u8x32, SimdPartialEq};\n\npub fn find_magic_simd(data: &[u8], pattern: &[u8]) -> Option<usize> {\n let pattern_vec = u8x32::from_slice(pattern);\n \n for (i, chunk) in data.chunks_exact(32).enumerate() {\n let data_vec = u8x32::from_slice(chunk);\n if data_vec.simd_eq(pattern_vec).all() {\n return Some(i * 32);\n }\n }\n None\n}\n```\n\n### Memory Mapping Strategy\n\nIntelligent file access based on size and access patterns:\n```rust\npub enum FileAccess {\n Buffered(BufReader<File>),\n MemoryMapped(Mmap),\n}\n\nimpl FileAccess {\n pub fn new(path: &Path) -> io::Result<Self> {\n let metadata = fs::metadata(path)?;\n \n if metadata.len() > 1_048_576 {\n let file = File::open(path)?;\n let mmap = unsafe { MmapOptions::new().map(&file)? };\n Ok(FileAccess::MemoryMapped(mmap))\n } else {\n let file = File::open(path)?;\n Ok(FileAccess::Buffered(BufReader::new(file)))\n }\n }\n}\n```\n\n### Build Optimization\n\nConfigure for maximum performance:\n```toml\n[profile.release]\nopt-level = 3\nlto = \"fat\"\ncodegen-units = 1\npanic = \"abort\"\nstrip = true\n\n[profile.release.package.\"aho-corasick\"]\nopt-level = 3\n```\n\n## API design considerations\n\n### RESTful API Design\n\n```rust\nuse axum::{Router, Json, extract::Path};\n\npub fn create_router() -> Router {\n Router::new()\n .route(\"/api/v1/identify\", post(identify_single))\n .route(\"/api/v1/identify/batch\", post(identify_batch))\n .route(\"/api/v1/jobs/:id\", get(get_job_status))\n .route(\"/api/v1/formats/:puid\", get(get_format_info))\n .route(\"/health\", get(health_check))\n}\n\nasync fn identify_single(\n Json(request): Json<IdentifyRequest>\n) -> Result<Json<IdentifyResponse>, ApiError> {\n // Implementation\n}\n```\n\n### Batch Processing with Progress\n\n```rust\npub struct BatchJob {\n id: Uuid,\n total_files: usize,\n processed: AtomicUsize,\n results: DashMap<PathBuf, IdentificationResult>,\n}\n\nimpl BatchJob {\n pub fn progress(&self) -> f32 {\n let processed = self.processed.load(Ordering::Relaxed);\n (processed as f32 / self.total_files as f32) * 100.0\n }\n}\n```\n\n### WebSocket Support for Real-time Updates\n\n```rust\nuse axum::extract::ws::{WebSocket, WebSocketUpgrade};\n\nasync fn ws_handler(ws: WebSocketUpgrade) -> impl IntoResponse {\n ws.on_upgrade(handle_socket)\n}\n\nasync fn handle_socket(mut socket: WebSocket) {\n let (tx, mut rx) = mpsc::channel(100);\n \n // Send progress updates\n while let Some(update) = rx.recv().await {\n let msg = Message::Text(serde_json::to_string(&update).unwrap());\n socket.send(msg).await.unwrap();\n }\n}\n```\n\n## Testing and validation strategies\n\n### Comprehensive Test Suite\n\n**Unit Tests with Property-Based Testing**:\n```rust\nuse proptest::prelude::*;\n\nproptest! {\n #[test]\n fn test_pattern_matching_never_panics(\n data in prop::collection::vec(any::<u8>(), 0..10000),\n pattern in prop::collection::vec(any::<u8>(), 1..100)\n ) {\n let matcher = PatternMatcher::new(&pattern);\n let _ = matcher.find(&data); // Should never panic\n }\n}\n```\n\n**Integration Tests with Test Corpora**:\n```rust\n#[tokio::test]\nasync fn test_govdocs_subset() {\n let test_files = load_govdocs_subset(0).await;\n \n for (file_path, expected_format) in test_files {\n let result = identify_file(&file_path).await.unwrap();\n assert_eq!(result.puid, expected_format);\n }\n}\n```\n\n### Benchmarking Suite\n\n```rust\nuse criterion::{black_box, criterion_group, Criterion};\n\nfn benchmark_identification(c: &mut Criterion) {\n let service = IdentificationService::new();\n \n c.bench_function(\"identify_pdf\", |b| {\n b.iter(|| {\n service.identify(black_box(&PDF_SAMPLE))\n })\n });\n}\n\ncriterion_group!(benches, benchmark_identification);\n```\n\n## Deployment and maintenance considerations\n\n### Container Strategy\n\n**Multi-stage Dockerfile**:\n```dockerfile\n# Build stage\nFROM rust:1.75 as builder\nWORKDIR /app\nCOPY Cargo.toml Cargo.lock ./\nRUN cargo build --release\n\n# Runtime stage\nFROM gcr.io/distroless/cc-debian12\nCOPY --from=builder /app/target/release/format-id /\nEXPOSE 8080\nENTRYPOINT [\"/format-id\"]\n```\n\n### Kubernetes Deployment\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: format-identification-service\nspec:\n replicas: 3\n template:\n spec:\n containers:\n - name: format-id\n image: format-id:latest\n resources:\n requests:\n memory: \"256Mi\"\n cpu: \"500m\"\n limits:\n memory: \"1Gi\"\n cpu: \"2000m\"\n env:\n - name: RUST_LOG\n value: \"info\"\n livenessProbe:\n httpGet:\n path: /health\n port: 8080\n readinessProbe:\n httpGet:\n path: /ready\n port: 8080\n```\n\n### Monitoring and Observability\n\n```rust\nuse prometheus::{Encoder, TextEncoder, Counter, Histogram};\n\nlazy_static! {\n static ref IDENTIFICATION_COUNTER: Counter = Counter::new(\n \"format_identifications_total\", \n \"Total number of format identifications\"\n ).unwrap();\n \n static ref IDENTIFICATION_DURATION: Histogram = Histogram::with_opts(\n HistogramOpts::new(\n \"format_identification_duration_seconds\",\n \"Duration of format identification\"\n )\n ).unwrap();\n}\n```\n\n### Signature Update Strategy\n\nImplement blue-green deployment for signature updates:\n```rust\npub struct SignatureManager {\n active: Arc<RwLock<CompiledSignatures>>,\n staging: Arc<RwLock<Option<CompiledSignatures>>>,\n}\n\nimpl SignatureManager {\n pub async fn update_signatures(&self) -> Result<()> {\n // Download and compile new signatures\n let new_sigs = download_and_compile().await?;\n \n // Test against known samples\n validate_signatures(&new_sigs)?;\n \n // Atomic swap\n *self.staging.write().await = Some(new_sigs);\n self.promote_staging().await;\n \n Ok(())\n }\n}\n```\n\n## Key Implementation Milestones\n\n1. **Phase 1: Core Engine** (Weeks 1-4)\n - Implement Aho-Corasick pattern matcher with SIMD optimization\n - Build PRONOM XML parser and signature compiler\n - Create basic file identification pipeline\n\n2. **Phase 2: Container Support** (Weeks 5-6)\n - Add ZIP and OLE2 container handling\n - Implement recursive identification for nested formats\n - Build priority resolution system\n\n3. **Phase 3: API Layer** (Weeks 7-8)\n - Develop REST API with axum\n - Add batch processing support\n - Implement caching layer\n\n4. **Phase 4: Testing & Optimization** (Weeks 9-10)\n - Comprehensive testing with GOVDOCS corpus\n - Performance optimization and profiling\n - Memory usage optimization\n\n5. **Phase 5: Production Readiness** (Weeks 11-12)\n - Docker containerization\n - Kubernetes deployment manifests\n - Monitoring and alerting setup\n - Documentation and API reference\n\nThis comprehensive plan provides a robust foundation for building a high-performance, production-ready format identification service in Rust that matches or exceeds Siegfried's capabilities while leveraging Rust's safety and performance advantages.",
|
||
"language": null,
|
||
"md_citations": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/pronom/",
|
||
"uuid": "fa5fe245-9f85-454b-abcd-7529273abefc",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/pronom/",
|
||
"uuid": "fa5fe245-9f85-454b-abcd-7529273abefc",
|
||
"title": "PRONOM | Welcome",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "fa5fe245-9f85-454b-abcd-7529273abefc",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "PRONOM | Welcome"
|
||
},
|
||
"end_index": 143,
|
||
"start_index": 113,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/",
|
||
"uuid": "4a25e778-4b27-4bdb-b43b-0cc22d0b2ddf",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/",
|
||
"uuid": "4a25e778-4b27-4bdb-b43b-0cc22d0b2ddf",
|
||
"title": "PRONOM | Welcome - The National Archives",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "4a25e778-4b27-4bdb-b43b-0cc22d0b2ddf",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "PRONOM | Welcome - The National Archives"
|
||
},
|
||
"end_index": 143,
|
||
"start_index": 113,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/Format/proFormatSearch.aspx?status=new",
|
||
"uuid": "1e62b195-6d39-40e3-83d3-49acc0fee674",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/Format/proFormatSearch.aspx?status=new",
|
||
"uuid": "1e62b195-6d39-40e3-83d3-49acc0fee674",
|
||
"title": "PRONOM | Search by format",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "1e62b195-6d39-40e3-83d3-49acc0fee674",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "PRONOM | Search by format"
|
||
},
|
||
"end_index": 143,
|
||
"start_index": 113,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/BasicSearch/proBasicSearch.aspx?status=new",
|
||
"uuid": "32c8e50b-4c04-4807-b59f-7d02e7df167c",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/BasicSearch/proBasicSearch.aspx?status=new",
|
||
"uuid": "32c8e50b-4c04-4807-b59f-7d02e7df167c",
|
||
"title": "PRONOM | Simple Search",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "32c8e50b-4c04-4807-b59f-7d02e7df167c",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "PRONOM | Simple Search"
|
||
},
|
||
"end_index": 143,
|
||
"start_index": 113,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/PUID/proPUIDSearch.aspx?status=new",
|
||
"uuid": "8ff47eed-a4ce-483c-b611-3685b6d21d6b",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/PUID/proPUIDSearch.aspx?status=new",
|
||
"uuid": "8ff47eed-a4ce-483c-b611-3685b6d21d6b",
|
||
"title": "PRONOM | Search by PRONOM Unique Identifier",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "8ff47eed-a4ce-483c-b611-3685b6d21d6b",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "PRONOM | Search by PRONOM Unique Identifier"
|
||
},
|
||
"end_index": 143,
|
||
"start_index": 113,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/pronom/puid/propuidsearch.aspx?status=new",
|
||
"uuid": "168fe63b-cd0e-43e5-9188-69d0508bdf06",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/pronom/puid/propuidsearch.aspx?status=new",
|
||
"uuid": "168fe63b-cd0e-43e5-9188-69d0508bdf06",
|
||
"title": "PRONOM | Search by PRONOM Unique Identifier",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "168fe63b-cd0e-43e5-9188-69d0508bdf06",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "PRONOM | Search by PRONOM Unique Identifier"
|
||
},
|
||
"end_index": 143,
|
||
"start_index": 113,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/home",
|
||
"uuid": "79ba2efe-37c8-42fa-bc00-469a9d13d6b1",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/home",
|
||
"uuid": "79ba2efe-37c8-42fa-bc00-469a9d13d6b1",
|
||
"title": "File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "79ba2efe-37c8-42fa-bc00-469a9d13d6b1",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 315,
|
||
"start_index": 113,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/information-management/manage-information/preserving-digital-records/droid/",
|
||
"uuid": "d8300357-67c5-4551-8d28-56fc64f1d227",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/information-management/manage-information/preserving-digital-records/droid/",
|
||
"uuid": "d8300357-67c5-4551-8d28-56fc64f1d227",
|
||
"title": "Download DROID: file format identification tool - The National Archives",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "d8300357-67c5-4551-8d28-56fc64f1d227",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "Download DROID: file format identification tool - The National Archives"
|
||
},
|
||
"end_index": 498,
|
||
"start_index": 464,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "c13f9efe-323f-4060-aee9-aba42866ce2f",
|
||
"title": "Wikipedia",
|
||
"sources": [
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "c13f9efe-323f-4060-aee9-aba42866ce2f",
|
||
"title": "PRONOM - Wikipedia",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "c13f9efe-323f-4060-aee9-aba42866ce2f",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"preview_title": "PRONOM - Wikipedia"
|
||
},
|
||
"end_index": 498,
|
||
"start_index": 464,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/home",
|
||
"uuid": "6afb578a-4da6-4d89-a892-39989b24dc20",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/home",
|
||
"uuid": "6afb578a-4da6-4d89-a892-39989b24dc20",
|
||
"title": "File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "6afb578a-4da6-4d89-a892-39989b24dc20",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 553,
|
||
"start_index": 464,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/closer-look-pronom-signatures/",
|
||
"uuid": "774cfd11-3742-4997-a8f9-54bbcbb03bdc",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/closer-look-pronom-signatures/",
|
||
"uuid": "774cfd11-3742-4997-a8f9-54bbcbb03bdc",
|
||
"title": "A closer look at Pronom signatures - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "774cfd11-3742-4997-a8f9-54bbcbb03bdc",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "A closer look at Pronom signatures - Open Preservation Foundation"
|
||
},
|
||
"end_index": 606,
|
||
"start_index": 580,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/BurntSushi/aho-corasick",
|
||
"uuid": "5be1384d-68b3-4032-a4d4-3f82b962c303",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/BurntSushi/aho-corasick",
|
||
"uuid": "5be1384d-68b3-4032-a4d4-3f82b962c303",
|
||
"title": "GitHub - BurntSushi/aho-corasick: A fast implementation of Aho-Corasick in Rust.",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "5be1384d-68b3-4032-a4d4-3f82b962c303",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - BurntSushi/aho-corasick: A fast implementation of Aho-Corasick in Rust."
|
||
},
|
||
"end_index": 674,
|
||
"start_index": 650,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://docs.rs/aho-corasick",
|
||
"uuid": "db33c349-4985-4170-abc1-bbaf71787a7d",
|
||
"title": "Rust",
|
||
"sources": [
|
||
{
|
||
"url": "https://docs.rs/aho-corasick",
|
||
"uuid": "db33c349-4985-4170-abc1-bbaf71787a7d",
|
||
"title": "aho_corasick - Rust",
|
||
"source": "Rust",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=docs.rs",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "db33c349-4985-4170-abc1-bbaf71787a7d",
|
||
"source": "Rust",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=docs.rs",
|
||
"preview_title": "aho_corasick - Rust"
|
||
},
|
||
"end_index": 674,
|
||
"start_index": 650,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/richardlehane/siegfried",
|
||
"uuid": "1999c1da-95b2-4780-a06d-b24ce21fecaa",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/richardlehane/siegfried",
|
||
"uuid": "1999c1da-95b2-4780-a06d-b24ce21fecaa",
|
||
"title": "GitHub - richardlehane/siegfried: signature-based file format identification",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "1999c1da-95b2-4780-a06d-b24ce21fecaa",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - richardlehane/siegfried: signature-based file format identification"
|
||
},
|
||
"end_index": 683,
|
||
"start_index": 580,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.itforarchivists.com/siegfried/",
|
||
"uuid": "3583143e-faa6-42fe-924f-e5806ccccd49",
|
||
"title": "IT for archivists",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.itforarchivists.com/siegfried/",
|
||
"uuid": "3583143e-faa6-42fe-924f-e5806ccccd49",
|
||
"title": "Siegfried tool",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "3583143e-faa6-42fe-924f-e5806ccccd49",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"preview_title": "Siegfried tool"
|
||
},
|
||
"end_index": 683,
|
||
"start_index": 580,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://docs.rs/pruning_radix_trie/latest/pruning_radix_trie/",
|
||
"uuid": "1f868d46-5f18-4d6c-b6a3-e91de0f1f7b9",
|
||
"title": "Rust",
|
||
"sources": [
|
||
{
|
||
"url": "https://docs.rs/pruning_radix_trie/latest/pruning_radix_trie/",
|
||
"uuid": "1f868d46-5f18-4d6c-b6a3-e91de0f1f7b9",
|
||
"title": "pruning_radix_trie - Rust",
|
||
"source": "Rust",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=docs.rs",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "1f868d46-5f18-4d6c-b6a3-e91de0f1f7b9",
|
||
"source": "Rust",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=docs.rs",
|
||
"preview_title": "pruning_radix_trie - Rust"
|
||
},
|
||
"end_index": 683,
|
||
"start_index": 580,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "df413afa-3b4f-46b3-a916-3e7b4b9a7670",
|
||
"title": "Wikipedia",
|
||
"sources": [
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "df413afa-3b4f-46b3-a916-3e7b4b9a7670",
|
||
"title": "PRONOM - Wikipedia",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "df413afa-3b4f-46b3-a916-3e7b4b9a7670",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"preview_title": "PRONOM - Wikipedia"
|
||
},
|
||
"end_index": 752,
|
||
"start_index": 710,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/richardlehane/siegfried",
|
||
"uuid": "ea22687c-9ad7-4ede-aaf4-33e7aa087f53",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/richardlehane/siegfried",
|
||
"uuid": "ea22687c-9ad7-4ede-aaf4-33e7aa087f53",
|
||
"title": "GitHub - richardlehane/siegfried: signature-based file format identification",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "ea22687c-9ad7-4ede-aaf4-33e7aa087f53",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - richardlehane/siegfried: signature-based file format identification"
|
||
},
|
||
"end_index": 794,
|
||
"start_index": 710,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.itforarchivists.com/siegfried/",
|
||
"uuid": "08c702f2-1099-4f54-829f-aff1c7753a92",
|
||
"title": "IT for archivists",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.itforarchivists.com/siegfried/",
|
||
"uuid": "08c702f2-1099-4f54-829f-aff1c7753a92",
|
||
"title": "Siegfried tool",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "08c702f2-1099-4f54-829f-aff1c7753a92",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"preview_title": "Siegfried tool"
|
||
},
|
||
"end_index": 794,
|
||
"start_index": 745,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "e906cf99-bfc2-42f5-8e1c-5abf28a9ddb1",
|
||
"title": "Kobzol",
|
||
"sources": [
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "e906cf99-bfc2-42f5-8e1c-5abf28a9ddb1",
|
||
"title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "e906cf99-bfc2-42f5-8e1c-5abf28a9ddb1",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"preview_title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog"
|
||
},
|
||
"end_index": 895,
|
||
"start_index": 818,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "8faa08ac-1f1f-4354-b9ce-112b427aba5a",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "8faa08ac-1f1f-4354-b9ce-112b427aba5a",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "8faa08ac-1f1f-4354-b9ce-112b427aba5a",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 1044,
|
||
"start_index": 954,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.itforarchivists.com/",
|
||
"uuid": "0db9f547-790b-4384-a183-3aee77293cb4",
|
||
"title": "IT for archivists",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.itforarchivists.com/",
|
||
"uuid": "0db9f547-790b-4384-a183-3aee77293cb4",
|
||
"title": "IT for archivists",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "0db9f547-790b-4384-a183-3aee77293cb4",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"preview_title": "IT for archivists"
|
||
},
|
||
"end_index": 1044,
|
||
"start_index": 954,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits/tools",
|
||
"uuid": "450694ff-3864-45d4-8e3e-8b46ba561727",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits/tools",
|
||
"uuid": "450694ff-3864-45d4-8e3e-8b46ba561727",
|
||
"title": "Tools | File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "450694ff-3864-45d4-8e3e-8b46ba561727",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "Tools | File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 1291,
|
||
"start_index": 1240,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "fd66f18c-9321-4af5-a808-005a76f893ef",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "fd66f18c-9321-4af5-a808-005a76f893ef",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "fd66f18c-9321-4af5-a808-005a76f893ef",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 1379,
|
||
"start_index": 1317,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/closer-look-pronom-signatures/",
|
||
"uuid": "c5ccc141-4bf3-4bd1-9f0d-db7db30c7198",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/closer-look-pronom-signatures/",
|
||
"uuid": "c5ccc141-4bf3-4bd1-9f0d-db7db30c7198",
|
||
"title": "A closer look at Pronom signatures - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "c5ccc141-4bf3-4bd1-9f0d-db7db30c7198",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "A closer look at Pronom signatures - Open Preservation Foundation"
|
||
},
|
||
"end_index": 1379,
|
||
"start_index": 1317,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "bda29baf-5991-48bc-9783-90822fe2fe49",
|
||
"title": "Kobzol",
|
||
"sources": [
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "bda29baf-5991-48bc-9783-90822fe2fe49",
|
||
"title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "bda29baf-5991-48bc-9783-90822fe2fe49",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"preview_title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog"
|
||
},
|
||
"end_index": 1379,
|
||
"start_index": 1317,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/tractorpulledpork/memmap2-rs",
|
||
"uuid": "32336282-d565-4854-aba9-0f4ea2561851",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/tractorpulledpork/memmap2-rs",
|
||
"uuid": "32336282-d565-4854-aba9-0f4ea2561851",
|
||
"title": "GitHub - tractorpulledpork/memmap2-rs: cross-platform Rust API for memory mapped IO",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "32336282-d565-4854-aba9-0f4ea2561851",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - tractorpulledpork/memmap2-rs: cross-platform Rust API for memory mapped IO"
|
||
},
|
||
"end_index": 1467,
|
||
"start_index": 1460,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://android.googlesource.com/platform/external/rust/crates/memmap2/",
|
||
"uuid": "07890a1b-c537-4bc6-8db8-f7e9399fa323",
|
||
"title": "Google",
|
||
"sources": [
|
||
{
|
||
"url": "https://android.googlesource.com/platform/external/rust/crates/memmap2/",
|
||
"uuid": "07890a1b-c537-4bc6-8db8-f7e9399fa323",
|
||
"title": "platform/external/rust/crates/memmap2 - Git at Google",
|
||
"source": "Google",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=googlesource.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "07890a1b-c537-4bc6-8db8-f7e9399fa323",
|
||
"source": "Google",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=googlesource.com",
|
||
"preview_title": "platform/external/rust/crates/memmap2 - Git at Google"
|
||
},
|
||
"end_index": 1467,
|
||
"start_index": 1460,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://docs.aws.amazon.com/lambda/latest/dg/file-processing-app.html",
|
||
"uuid": "0ee25fa9-31ab-4f61-92a4-46b537c235a4",
|
||
"title": "Amazon Web Services",
|
||
"sources": [
|
||
{
|
||
"url": "https://docs.aws.amazon.com/lambda/latest/dg/file-processing-app.html",
|
||
"uuid": "0ee25fa9-31ab-4f61-92a4-46b537c235a4",
|
||
"title": "Create a serverless file-processing app - AWS Lambda",
|
||
"source": "Amazon Web Services",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=amazon.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "0ee25fa9-31ab-4f61-92a4-46b537c235a4",
|
||
"source": "Amazon Web Services",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=amazon.com",
|
||
"preview_title": "Create a serverless file-processing app - AWS Lambda"
|
||
},
|
||
"end_index": 1580,
|
||
"start_index": 1517,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://blogs.loc.gov/thesignal/2012/10/archivematica-and-the-open-source-mindset-for-digital-preservation-systems/",
|
||
"uuid": "21316047-8cf1-4ef3-9d5b-e442d94759c3",
|
||
"title": "LOC",
|
||
"sources": [
|
||
{
|
||
"url": "https://blogs.loc.gov/thesignal/2012/10/archivematica-and-the-open-source-mindset-for-digital-preservation-systems/",
|
||
"uuid": "21316047-8cf1-4ef3-9d5b-e442d94759c3",
|
||
"title": "Archivematica and the Open Source Mindset for Digital Preservation Systems | The Signal",
|
||
"source": "LOC",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=loc.gov",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "21316047-8cf1-4ef3-9d5b-e442d94759c3",
|
||
"source": "LOC",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=loc.gov",
|
||
"preview_title": "Archivematica and the Open Source Mindset for Digital Preservation Systems | The Signal"
|
||
},
|
||
"end_index": 1770,
|
||
"start_index": 1718,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://webreference.com/rust/web/frameworks/",
|
||
"uuid": "3bcb853b-e9f3-4407-b9be-33b1511dece5",
|
||
"title": "Web Reference",
|
||
"sources": [
|
||
{
|
||
"url": "https://webreference.com/rust/web/frameworks/",
|
||
"uuid": "3bcb853b-e9f3-4407-b9be-33b1511dece5",
|
||
"title": "Web Frameworks (Axum, Warp, Actix) | WebReference",
|
||
"source": "Web Reference",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=webreference.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "3bcb853b-e9f3-4407-b9be-33b1511dece5",
|
||
"source": "Web Reference",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=webreference.com",
|
||
"preview_title": "Web Frameworks (Axum, Warp, Actix) | WebReference"
|
||
},
|
||
"end_index": 1770,
|
||
"start_index": 1718,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.infoworld.com/article/2337398/5-popular-rust-web-frameworkswhich-one-is-right-for-you.html",
|
||
"uuid": "a8dc3b84-5040-4286-b01a-a38ae097355e",
|
||
"title": "InfoWorld",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.infoworld.com/article/2337398/5-popular-rust-web-frameworkswhich-one-is-right-for-you.html",
|
||
"uuid": "a8dc3b84-5040-4286-b01a-a38ae097355e",
|
||
"title": "5 popular Rust web frameworks—which one is right for you? | InfoWorld",
|
||
"source": "InfoWorld",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=infoworld.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "a8dc3b84-5040-4286-b01a-a38ae097355e",
|
||
"source": "InfoWorld",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=infoworld.com",
|
||
"preview_title": "5 popular Rust web frameworks—which one is right for you? | InfoWorld"
|
||
},
|
||
"end_index": 1770,
|
||
"start_index": 1718,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/jamesmunns/postcard",
|
||
"uuid": "a46b8c26-3e1c-4dc4-b591-0c355dd3d705",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/jamesmunns/postcard",
|
||
"uuid": "a46b8c26-3e1c-4dc4-b591-0c355dd3d705",
|
||
"title": "GitHub - jamesmunns/postcard: A no_std + serde compatible message library for Rust",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "a46b8c26-3e1c-4dc4-b591-0c355dd3d705",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - jamesmunns/postcard: A no_std + serde compatible message library for Rust"
|
||
},
|
||
"end_index": 2112,
|
||
"start_index": 2056,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://serde.rs/",
|
||
"uuid": "a97fab3e-0ecc-4e72-828f-bc764c80cf22",
|
||
"title": "Serde",
|
||
"sources": [
|
||
{
|
||
"url": "https://serde.rs/",
|
||
"uuid": "a97fab3e-0ecc-4e72-828f-bc764c80cf22",
|
||
"title": "Overview · Serde",
|
||
"source": "Serde",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=serde.rs",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "a97fab3e-0ecc-4e72-828f-bc764c80cf22",
|
||
"source": "Serde",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=serde.rs",
|
||
"preview_title": "Overview · Serde"
|
||
},
|
||
"end_index": 2112,
|
||
"start_index": 2056,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "44786f52-524a-44fa-a4c2-7e4a0efda94b",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "44786f52-524a-44fa-a4c2-7e4a0efda94b",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "44786f52-524a-44fa-a4c2-7e4a0efda94b",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 2795,
|
||
"start_index": 2699,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.itforarchivists.com/",
|
||
"uuid": "9c4316d8-050a-4bd7-b84a-c3be068f58fb",
|
||
"title": "IT for archivists",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.itforarchivists.com/",
|
||
"uuid": "9c4316d8-050a-4bd7-b84a-c3be068f58fb",
|
||
"title": "IT for archivists",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "9c4316d8-050a-4bd7-b84a-c3be068f58fb",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"preview_title": "IT for archivists"
|
||
},
|
||
"end_index": 2795,
|
||
"start_index": 2699,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/aws-samples/lambda-refarch-fileprocessing",
|
||
"uuid": "da3cc296-1885-44ad-a86f-f2b8e579eee2",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/aws-samples/lambda-refarch-fileprocessing",
|
||
"uuid": "da3cc296-1885-44ad-a86f-f2b8e579eee2",
|
||
"title": "GitHub - aws-samples/lambda-refarch-fileprocessing: Serverless Reference Architecture for Real-time File Processing",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "da3cc296-1885-44ad-a86f-f2b8e579eee2",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - aws-samples/lambda-refarch-fileprocessing: Serverless Reference Architecture for Real-time File Processing"
|
||
},
|
||
"end_index": 2795,
|
||
"start_index": 2699,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits/tools",
|
||
"uuid": "afe68cac-da03-40e2-b02f-a45bebf92128",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits/tools",
|
||
"uuid": "afe68cac-da03-40e2-b02f-a45bebf92128",
|
||
"title": "Tools | File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "afe68cac-da03-40e2-b02f-a45bebf92128",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "Tools | File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 2938,
|
||
"start_index": 2864,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "348a3a98-e54c-4c75-81ab-4ae372216536",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "348a3a98-e54c-4c75-81ab-4ae372216536",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "348a3a98-e54c-4c75-81ab-4ae372216536",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 3051,
|
||
"start_index": 2995,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "a3881a60-7f57-41b6-b7bd-93797b24e1a5",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "a3881a60-7f57-41b6-b7bd-93797b24e1a5",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "a3881a60-7f57-41b6-b7bd-93797b24e1a5",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 3206,
|
||
"start_index": 3148,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits-xml",
|
||
"uuid": "8d1240ef-7bad-480a-b2ad-6167ee8722bc",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits-xml",
|
||
"uuid": "8d1240ef-7bad-480a-b2ad-6167ee8722bc",
|
||
"title": "FITS XML | File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "8d1240ef-7bad-480a-b2ad-6167ee8722bc",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "FITS XML | File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 3315,
|
||
"start_index": 3269,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/droid-container-signature-files-what-they-are-and-how-to-create-them-a-template-and-an-example-or-few/",
|
||
"uuid": "30dc6c9e-f172-43a1-9515-c446a474c6e7",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/droid-container-signature-files-what-they-are-and-how-to-create-them-a-template-and-an-example-or-few/",
|
||
"uuid": "30dc6c9e-f172-43a1-9515-c446a474c6e7",
|
||
"title": "DROID Container Signature Files: What they are and how to create them: A template and an example, or few… - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "30dc6c9e-f172-43a1-9515-c446a474c6e7",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "DROID Container Signature Files: What they are and how to create them: A template and an example, or few… - Open Preservation Foundation"
|
||
},
|
||
"end_index": 3315,
|
||
"start_index": 3269,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "035aab0d-1aff-4607-8b24-54bb3ec37310",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "035aab0d-1aff-4607-8b24-54bb3ec37310",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "035aab0d-1aff-4607-8b24-54bb3ec37310",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 3364,
|
||
"start_index": 3319,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/closer-look-pronom-signatures/",
|
||
"uuid": "f32f63c3-dc7e-4d3c-bc0d-c6b2403a56de",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/closer-look-pronom-signatures/",
|
||
"uuid": "f32f63c3-dc7e-4d3c-bc0d-c6b2403a56de",
|
||
"title": "A closer look at Pronom signatures - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "f32f63c3-dc7e-4d3c-bc0d-c6b2403a56de",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "A closer look at Pronom signatures - Open Preservation Foundation"
|
||
},
|
||
"end_index": 3364,
|
||
"start_index": 3319,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "62d9b813-5da4-436c-8ac6-915b510b4457",
|
||
"title": "Kobzol",
|
||
"sources": [
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "62d9b813-5da4-436c-8ac6-915b510b4457",
|
||
"title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "62d9b813-5da4-436c-8ac6-915b510b4457",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"preview_title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog"
|
||
},
|
||
"end_index": 3364,
|
||
"start_index": 3319,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits/tools",
|
||
"uuid": "8c08b9fe-c2e5-4624-8d40-fc68df964364",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits/tools",
|
||
"uuid": "8c08b9fe-c2e5-4624-8d40-fc68df964364",
|
||
"title": "Tools | File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "8c08b9fe-c2e5-4624-8d40-fc68df964364",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "Tools | File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 3518,
|
||
"start_index": 3466,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://medium.com/@AlexanderObregon/journey-to-fearless-concurrency-rust-vs-go-31d49255d6b6",
|
||
"uuid": "20df87c2-bea0-4bda-bf72-f990aa3d7f96",
|
||
"title": "Medium",
|
||
"sources": [
|
||
{
|
||
"url": "https://medium.com/@AlexanderObregon/journey-to-fearless-concurrency-rust-vs-go-31d49255d6b6",
|
||
"uuid": "20df87c2-bea0-4bda-bf72-f990aa3d7f96",
|
||
"title": "Journey to Fearless Concurrency — Rust vs. Go",
|
||
"source": "Medium",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=medium.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "20df87c2-bea0-4bda-bf72-f990aa3d7f96",
|
||
"source": "Medium",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=medium.com",
|
||
"preview_title": "Journey to Fearless Concurrency — Rust vs. Go"
|
||
},
|
||
"end_index": 4454,
|
||
"start_index": 4397,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://blog.jetbrains.com/rust/2025/06/12/rust-vs-go/",
|
||
"uuid": "7a5f64bd-bdf5-4350-847b-ed23f5f19973",
|
||
"title": "JetBrains",
|
||
"sources": [
|
||
{
|
||
"url": "https://blog.jetbrains.com/rust/2025/06/12/rust-vs-go/",
|
||
"uuid": "7a5f64bd-bdf5-4350-847b-ed23f5f19973",
|
||
"title": "Rust vs Go: Which one to choose in 2025 | The RustRover Blog",
|
||
"source": "JetBrains",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=jetbrains.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "7a5f64bd-bdf5-4350-847b-ed23f5f19973",
|
||
"source": "JetBrains",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=jetbrains.com",
|
||
"preview_title": "Rust vs Go: Which one to choose in 2025 | The RustRover Blog"
|
||
},
|
||
"end_index": 4454,
|
||
"start_index": 4397,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "7e9a1d09-577a-48c0-8b93-336cf27d5f2f",
|
||
"title": "Wikipedia",
|
||
"sources": [
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "7e9a1d09-577a-48c0-8b93-336cf27d5f2f",
|
||
"title": "PRONOM - Wikipedia",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "7e9a1d09-577a-48c0-8b93-336cf27d5f2f",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"preview_title": "PRONOM - Wikipedia"
|
||
},
|
||
"end_index": 6676,
|
||
"start_index": 6226,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.dpconline.org/handbook/tool-demos/droid-demo",
|
||
"uuid": "d45a782f-9a64-48b0-b8f3-4f359c0f36ad",
|
||
"title": "Digital Preservation Coalition",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.dpconline.org/handbook/tool-demos/droid-demo",
|
||
"uuid": "d45a782f-9a64-48b0-b8f3-4f359c0f36ad",
|
||
"title": "Tool Demo: DROID - Digital Preservation Handbook",
|
||
"source": "Digital Preservation Coalition",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=dpconline.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "d45a782f-9a64-48b0-b8f3-4f359c0f36ad",
|
||
"source": "Digital Preservation Coalition",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=dpconline.org",
|
||
"preview_title": "Tool Demo: DROID - Digital Preservation Handbook"
|
||
},
|
||
"end_index": 6676,
|
||
"start_index": 6226,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/information-management/manage-information/preserving-digital-records/droid/",
|
||
"uuid": "7acf9b00-87e4-464a-b488-7fa651ec05f7",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/information-management/manage-information/preserving-digital-records/droid/",
|
||
"uuid": "7acf9b00-87e4-464a-b488-7fa651ec05f7",
|
||
"title": "Download DROID: file format identification tool - The National Archives",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "7acf9b00-87e4-464a-b488-7fa651ec05f7",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "Download DROID: file format identification tool - The National Archives"
|
||
},
|
||
"end_index": 6733,
|
||
"start_index": 6717,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "3bb7dc74-98b1-455a-b64a-058fa9e3798c",
|
||
"title": "Wikipedia",
|
||
"sources": [
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "3bb7dc74-98b1-455a-b64a-058fa9e3798c",
|
||
"title": "PRONOM - Wikipedia",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "3bb7dc74-98b1-455a-b64a-058fa9e3798c",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"preview_title": "PRONOM - Wikipedia"
|
||
},
|
||
"end_index": 6733,
|
||
"start_index": 6717,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/fmt/883",
|
||
"uuid": "a1cb9524-de1f-4faa-91f1-a3487ae9a742",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/PRONOM/fmt/883",
|
||
"uuid": "a1cb9524-de1f-4faa-91f1-a3487ae9a742",
|
||
"title": "PRONOM | Search by format",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "a1cb9524-de1f-4faa-91f1-a3487ae9a742",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "PRONOM | Search by format"
|
||
},
|
||
"end_index": 6782,
|
||
"start_index": 6717,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "87e749f5-2f29-4a89-ada8-e0ea953342f3",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "87e749f5-2f29-4a89-ada8-e0ea953342f3",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "87e749f5-2f29-4a89-ada8-e0ea953342f3",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 6832,
|
||
"start_index": 6786,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits-xml",
|
||
"uuid": "3f4f4ca9-2704-4610-9e81-d5b5a18a3a8a",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits-xml",
|
||
"uuid": "3f4f4ca9-2704-4610-9e81-d5b5a18a3a8a",
|
||
"title": "FITS XML | File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "3f4f4ca9-2704-4610-9e81-d5b5a18a3a8a",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "FITS XML | File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 6888,
|
||
"start_index": 6836,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/droid-container-signature-files-what-they-are-and-how-to-create-them-a-template-and-an-example-or-few/",
|
||
"uuid": "8662b424-c8cc-4dbe-a05f-f2ab26012901",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/droid-container-signature-files-what-they-are-and-how-to-create-them-a-template-and-an-example-or-few/",
|
||
"uuid": "8662b424-c8cc-4dbe-a05f-f2ab26012901",
|
||
"title": "DROID Container Signature Files: What they are and how to create them: A template and an example, or few… - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "8662b424-c8cc-4dbe-a05f-f2ab26012901",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "DROID Container Signature Files: What they are and how to create them: A template and an example, or few… - Open Preservation Foundation"
|
||
},
|
||
"end_index": 6888,
|
||
"start_index": 6836,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/jamesmunns/postcard",
|
||
"uuid": "2bc8d29d-2e04-420c-9a72-2327e103a52c",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/jamesmunns/postcard",
|
||
"uuid": "2bc8d29d-2e04-420c-9a72-2327e103a52c",
|
||
"title": "GitHub - jamesmunns/postcard: A no_std + serde compatible message library for Rust",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "2bc8d29d-2e04-420c-9a72-2327e103a52c",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - jamesmunns/postcard: A no_std + serde compatible message library for Rust"
|
||
},
|
||
"end_index": 6954,
|
||
"start_index": 6892,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "f7ed9807-e9ee-48c8-ab67-0c5b93bba5bb",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "f7ed9807-e9ee-48c8-ab67-0c5b93bba5bb",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "f7ed9807-e9ee-48c8-ab67-0c5b93bba5bb",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 7388,
|
||
"start_index": 7333,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://markaicode.com/simd-optimization-rust-1-80-data-processing/",
|
||
"uuid": "e5d5d6f4-a7fa-4c13-bb0a-312bd9f56bc0",
|
||
"title": "Markaicode",
|
||
"sources": [
|
||
{
|
||
"url": "https://markaicode.com/simd-optimization-rust-1-80-data-processing/",
|
||
"uuid": "e5d5d6f4-a7fa-4c13-bb0a-312bd9f56bc0",
|
||
"title": "SIMD Optimization in Rust 1.80: Practical Examples for Data Processing | Markaicode",
|
||
"source": "Markaicode",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=markaicode.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "e5d5d6f4-a7fa-4c13-bb0a-312bd9f56bc0",
|
||
"source": "Markaicode",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=markaicode.com",
|
||
"preview_title": "SIMD Optimization in Rust 1.80: Practical Examples for Data Processing | Markaicode"
|
||
},
|
||
"end_index": 7388,
|
||
"start_index": 7333,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://burntsushi.net/ripgrep/",
|
||
"uuid": "3f23a5ce-1dd5-471e-a141-aa30810e6512",
|
||
"title": "Burntsushi",
|
||
"sources": [
|
||
{
|
||
"url": "https://burntsushi.net/ripgrep/",
|
||
"uuid": "3f23a5ce-1dd5-471e-a141-aa30810e6512",
|
||
"title": "ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} - Andrew Gallant's Blog",
|
||
"source": "Burntsushi",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=burntsushi.net",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "3f23a5ce-1dd5-471e-a141-aa30810e6512",
|
||
"source": "Burntsushi",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=burntsushi.net",
|
||
"preview_title": "ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} - Andrew Gallant's Blog"
|
||
},
|
||
"end_index": 7388,
|
||
"start_index": 7333,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://elitedev.in/rust/5-powerful-rust-techniques-for-optimizing-file-io/",
|
||
"uuid": "5d294c50-53da-4d5a-a718-c22112e6f90a",
|
||
"title": "Elitedev",
|
||
"sources": [
|
||
{
|
||
"url": "https://elitedev.in/rust/5-powerful-rust-techniques-for-optimizing-file-io/",
|
||
"uuid": "5d294c50-53da-4d5a-a718-c22112e6f90a",
|
||
"title": "5 Powerful Rust Techniques for Optimizing File I/O Performance",
|
||
"source": "Elitedev",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=elitedev.in",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "5d294c50-53da-4d5a-a718-c22112e6f90a",
|
||
"source": "Elitedev",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=elitedev.in",
|
||
"preview_title": "5 Powerful Rust Techniques for Optimizing File I/O Performance"
|
||
},
|
||
"end_index": 7871,
|
||
"start_index": 7813,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "fd0a4b19-55ab-40ee-9d77-a60f9ca9c6a6",
|
||
"title": "Kobzol",
|
||
"sources": [
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "fd0a4b19-55ab-40ee-9d77-a60f9ca9c6a6",
|
||
"title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "fd0a4b19-55ab-40ee-9d77-a60f9ca9c6a6",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"preview_title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog"
|
||
},
|
||
"end_index": 7871,
|
||
"start_index": 7813,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://nnethercote.github.io/perf-book/build-configuration.html",
|
||
"uuid": "731d7e90-107a-4f9d-9cf8-6c7885ba9ef0",
|
||
"title": "I/O",
|
||
"sources": [
|
||
{
|
||
"url": "https://nnethercote.github.io/perf-book/build-configuration.html",
|
||
"uuid": "731d7e90-107a-4f9d-9cf8-6c7885ba9ef0",
|
||
"title": "Build Configuration - The Rust Performance Book",
|
||
"source": "I/O",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "731d7e90-107a-4f9d-9cf8-6c7885ba9ef0",
|
||
"source": "I/O",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"preview_title": "Build Configuration - The Rust Performance Book"
|
||
},
|
||
"end_index": 8475,
|
||
"start_index": 8441,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://rustprojectprimer.com/building/performance.html",
|
||
"uuid": "e5dd3a67-8537-475b-b66a-fa9879249ee8",
|
||
"title": "Rustprojectprimer",
|
||
"sources": [
|
||
{
|
||
"url": "https://rustprojectprimer.com/building/performance.html",
|
||
"uuid": "e5dd3a67-8537-475b-b66a-fa9879249ee8",
|
||
"title": "Performance - Rust Project Primer",
|
||
"source": "Rustprojectprimer",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=rustprojectprimer.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "e5dd3a67-8537-475b-b66a-fa9879249ee8",
|
||
"source": "Rustprojectprimer",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=rustprojectprimer.com",
|
||
"preview_title": "Performance - Rust Project Primer"
|
||
},
|
||
"end_index": 8475,
|
||
"start_index": 8441,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "019aa2c3-7c5f-499e-a27b-3ab1fab543e5",
|
||
"title": "Kobzol",
|
||
"sources": [
|
||
{
|
||
"url": "https://kobzol.github.io/rust/rustc/2022/10/27/speeding-rustc-without-changing-its-code.html",
|
||
"uuid": "019aa2c3-7c5f-499e-a27b-3ab1fab543e5",
|
||
"title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "019aa2c3-7c5f-499e-a27b-3ab1fab543e5",
|
||
"source": "Kobzol",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.io",
|
||
"preview_title": "Speeding up the Rust compiler without changing its code | Kobzol’s blog"
|
||
},
|
||
"end_index": 8475,
|
||
"start_index": 8441,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://bitfieldconsulting.com/posts/rust-vs-go",
|
||
"uuid": "d19ce203-ba41-4372-9bf6-446d69deba81",
|
||
"title": "Bitfield Consulting",
|
||
"sources": [
|
||
{
|
||
"url": "https://bitfieldconsulting.com/posts/rust-vs-go",
|
||
"uuid": "d19ce203-ba41-4372-9bf6-446d69deba81",
|
||
"title": "Rust vs Go in 2025 — Bitfield Consulting",
|
||
"source": "Bitfield Consulting",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=bitfieldconsulting.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "d19ce203-ba41-4372-9bf6-446d69deba81",
|
||
"source": "Bitfield Consulting",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=bitfieldconsulting.com",
|
||
"preview_title": "Rust vs Go in 2025 — Bitfield Consulting"
|
||
},
|
||
"end_index": 8475,
|
||
"start_index": 8441,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/Release_notes",
|
||
"uuid": "3390cc0f-daf1-4b46-8660-a43cd5f5379b",
|
||
"title": "Wikipedia",
|
||
"sources": [
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/Release_notes",
|
||
"uuid": "3390cc0f-daf1-4b46-8660-a43cd5f5379b",
|
||
"title": "Release notes - Wikipedia",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "3390cc0f-daf1-4b46-8660-a43cd5f5379b",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"preview_title": "Release notes - Wikipedia"
|
||
},
|
||
"end_index": 12928,
|
||
"start_index": 12874,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://announcekit.app/blog/changelog-versioning/",
|
||
"uuid": "561e43df-c51c-463e-b2a9-90ddd7dbdede",
|
||
"title": "AnnounceKit",
|
||
"sources": [
|
||
{
|
||
"url": "https://announcekit.app/blog/changelog-versioning/",
|
||
"uuid": "561e43df-c51c-463e-b2a9-90ddd7dbdede",
|
||
"title": "How Changelog Versioning Works (and Why It Matters)",
|
||
"source": "AnnounceKit",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=announcekit.app",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "561e43df-c51c-463e-b2a9-90ddd7dbdede",
|
||
"source": "AnnounceKit",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=announcekit.app",
|
||
"preview_title": "How Changelog Versioning Works (and Why It Matters)"
|
||
},
|
||
"end_index": 12928,
|
||
"start_index": 12874,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/digital-preservation/droid",
|
||
"uuid": "b61dff47-d017-48fa-8259-3ee48694153b",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/digital-preservation/droid",
|
||
"uuid": "b61dff47-d017-48fa-8259-3ee48694153b",
|
||
"title": "GitHub - digital-preservation/droid: DROID (Digital Record and Object Identification)",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "b61dff47-d017-48fa-8259-3ee48694153b",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - digital-preservation/droid: DROID (Digital Record and Object Identification)"
|
||
},
|
||
"end_index": 13499,
|
||
"start_index": 12874,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm",
|
||
"uuid": "cfc7a810-69f2-4394-9112-0b4d6ddf3f29",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm",
|
||
"uuid": "cfc7a810-69f2-4394-9112-0b4d6ddf3f29",
|
||
"title": "The National Archives | PRONOM | DROID signatures",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "cfc7a810-69f2-4394-9112-0b4d6ddf3f29",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "The National Archives | PRONOM | DROID signatures"
|
||
},
|
||
"end_index": 13499,
|
||
"start_index": 12874,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "88647862-8fb2-4c86-b35a-31410c7cdd40",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "88647862-8fb2-4c86-b35a-31410c7cdd40",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "88647862-8fb2-4c86-b35a-31410c7cdd40",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 13641,
|
||
"start_index": 13580,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://tika.apache.org/",
|
||
"uuid": "b7c0476c-f1cf-4c02-8fd2-06b25f1bc32e",
|
||
"title": "Apache",
|
||
"sources": [
|
||
{
|
||
"url": "https://tika.apache.org/",
|
||
"uuid": "b7c0476c-f1cf-4c02-8fd2-06b25f1bc32e",
|
||
"title": "Apache Tika – Apache Tika",
|
||
"source": "Apache",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=apache.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "b7c0476c-f1cf-4c02-8fd2-06b25f1bc32e",
|
||
"source": "Apache",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=apache.org",
|
||
"preview_title": "Apache Tika – Apache Tika"
|
||
},
|
||
"end_index": 13641,
|
||
"start_index": 13580,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.itforarchivists.com/",
|
||
"uuid": "6bc56a57-f912-4e32-abe8-b851f863027f",
|
||
"title": "IT for archivists",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.itforarchivists.com/",
|
||
"uuid": "6bc56a57-f912-4e32-abe8-b851f863027f",
|
||
"title": "IT for archivists",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "6bc56a57-f912-4e32-abe8-b851f863027f",
|
||
"source": "IT for archivists",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=itforarchivists.com",
|
||
"preview_title": "IT for archivists"
|
||
},
|
||
"end_index": 13641,
|
||
"start_index": 13580,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://burntsushi.net/ripgrep/",
|
||
"uuid": "e585bb20-8602-48a0-a2cc-75df2da71363",
|
||
"title": "Burntsushi",
|
||
"sources": [
|
||
{
|
||
"url": "https://burntsushi.net/ripgrep/",
|
||
"uuid": "e585bb20-8602-48a0-a2cc-75df2da71363",
|
||
"title": "ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} - Andrew Gallant's Blog",
|
||
"source": "Burntsushi",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=burntsushi.net",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "e585bb20-8602-48a0-a2cc-75df2da71363",
|
||
"source": "Burntsushi",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=burntsushi.net",
|
||
"preview_title": "ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} - Andrew Gallant's Blog"
|
||
},
|
||
"end_index": 13641,
|
||
"start_index": 13580,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/home",
|
||
"uuid": "2f4d5040-7100-43cb-b39e-1bbfdb3ba209",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/home",
|
||
"uuid": "2f4d5040-7100-43cb-b39e-1bbfdb3ba209",
|
||
"title": "File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "2f4d5040-7100-43cb-b39e-1bbfdb3ba209",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 13693,
|
||
"start_index": 13647,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "bc8debbd-4ed8-45c4-8409-b4d7a57f3ea3",
|
||
"title": "Wikipedia",
|
||
"sources": [
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "bc8debbd-4ed8-45c4-8409-b4d7a57f3ea3",
|
||
"title": "PRONOM - Wikipedia",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "bc8debbd-4ed8-45c4-8409-b4d7a57f3ea3",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"preview_title": "PRONOM - Wikipedia"
|
||
},
|
||
"end_index": 13693,
|
||
"start_index": 13647,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://coptr.digipres.org/index.php/DROID_(Digital_Record_Object_Identification)",
|
||
"uuid": "2a8c7960-78e1-4186-bd4d-40fdb21f9dee",
|
||
"title": "COPTR",
|
||
"sources": [
|
||
{
|
||
"url": "https://coptr.digipres.org/index.php/DROID_(Digital_Record_Object_Identification)",
|
||
"uuid": "2a8c7960-78e1-4186-bd4d-40fdb21f9dee",
|
||
"title": "DROID (Digital Record Object Identification) - COPTR",
|
||
"source": "COPTR",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=digipres.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "2a8c7960-78e1-4186-bd4d-40fdb21f9dee",
|
||
"source": "COPTR",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=digipres.org",
|
||
"preview_title": "DROID (Digital Record Object Identification) - COPTR"
|
||
},
|
||
"end_index": 13693,
|
||
"start_index": 13647,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/information-management/manage-information/preserving-digital-records/droid/",
|
||
"uuid": "b0bbf33b-7f2a-4e0c-98ad-8885bd177f6c",
|
||
"title": "UK National Archives",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.nationalarchives.gov.uk/information-management/manage-information/preserving-digital-records/droid/",
|
||
"uuid": "b0bbf33b-7f2a-4e0c-98ad-8885bd177f6c",
|
||
"title": "Download DROID: file format identification tool - The National Archives",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "b0bbf33b-7f2a-4e0c-98ad-8885bd177f6c",
|
||
"source": "UK National Archives",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=nationalarchives.gov.uk",
|
||
"preview_title": "Download DROID: file format identification tool - The National Archives"
|
||
},
|
||
"end_index": 13693,
|
||
"start_index": 13647,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/richardlehane/siegfried/wiki/Building-a-signature-file-with-ROY",
|
||
"uuid": "16293008-2abf-4df6-b638-62dbef1760e1",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/richardlehane/siegfried/wiki/Building-a-signature-file-with-ROY",
|
||
"uuid": "16293008-2abf-4df6-b638-62dbef1760e1",
|
||
"title": "Building a signature file with ROY · richardlehane/siegfried Wiki · GitHub",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "16293008-2abf-4df6-b638-62dbef1760e1",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "Building a signature file with ROY · richardlehane/siegfried Wiki · GitHub"
|
||
},
|
||
"end_index": 13693,
|
||
"start_index": 13647,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits-xml",
|
||
"uuid": "4d938a05-2187-42a4-ab03-e4151ca9b30f",
|
||
"title": "Galileo Project",
|
||
"sources": [
|
||
{
|
||
"url": "https://projects.iq.harvard.edu/fits/fits-xml",
|
||
"uuid": "4d938a05-2187-42a4-ab03-e4151ca9b30f",
|
||
"title": "FITS XML | File Information Tool Set (FITS)",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "4d938a05-2187-42a4-ab03-e4151ca9b30f",
|
||
"source": "Galileo Project",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=harvard.edu",
|
||
"preview_title": "FITS XML | File Information Tool Set (FITS)"
|
||
},
|
||
"end_index": 13828,
|
||
"start_index": 13793,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/droid-container-signature-files-what-they-are-and-how-to-create-them-a-template-and-an-example-or-few/",
|
||
"uuid": "dd2d440d-4daf-4fb5-8c72-ab6e3dd63922",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/droid-container-signature-files-what-they-are-and-how-to-create-them-a-template-and-an-example-or-few/",
|
||
"uuid": "dd2d440d-4daf-4fb5-8c72-ab6e3dd63922",
|
||
"title": "DROID Container Signature Files: What they are and how to create them: A template and an example, or few… - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "dd2d440d-4daf-4fb5-8c72-ab6e3dd63922",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "DROID Container Signature Files: What they are and how to create them: A template and an example, or few… - Open Preservation Foundation"
|
||
},
|
||
"end_index": 13828,
|
||
"start_index": 13793,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "4be6c2ea-db7a-45d8-b2b8-becb8040d659",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "4be6c2ea-db7a-45d8-b2b8-becb8040d659",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "4be6c2ea-db7a-45d8-b2b8-becb8040d659",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 13925,
|
||
"start_index": 13893,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "09a5c022-9410-4cfa-ab74-ae029e5f44d7",
|
||
"title": "Wikipedia",
|
||
"sources": [
|
||
{
|
||
"url": "https://en.wikipedia.org/wiki/PRONOM",
|
||
"uuid": "09a5c022-9410-4cfa-ab74-ae029e5f44d7",
|
||
"title": "PRONOM - Wikipedia",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "09a5c022-9410-4cfa-ab74-ae029e5f44d7",
|
||
"source": "Wikipedia",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=wikipedia.org",
|
||
"preview_title": "PRONOM - Wikipedia"
|
||
},
|
||
"end_index": 13925,
|
||
"start_index": 13893,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/tw4l/brunnhilde",
|
||
"uuid": "83c36552-0f50-4756-9ec6-8fbca7554230",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/tw4l/brunnhilde",
|
||
"uuid": "83c36552-0f50-4756-9ec6-8fbca7554230",
|
||
"title": "GitHub - tw4l/brunnhilde: Siegfried-based characterization tool for directories and disk images",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "83c36552-0f50-4756-9ec6-8fbca7554230",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - tw4l/brunnhilde: Siegfried-based characterization tool for directories and disk images"
|
||
},
|
||
"end_index": 14159,
|
||
"start_index": 14118,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-v-1-0-released-a-file-format-identification-tool/",
|
||
"uuid": "d3846a4c-706e-4728-9de6-6fe8a768a54c",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-v-1-0-released-a-file-format-identification-tool/",
|
||
"uuid": "d3846a4c-706e-4728-9de6-6fe8a768a54c",
|
||
"title": "Siegfried v 1.0 released (a file format identification tool) - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "d3846a4c-706e-4728-9de6-6fe8a768a54c",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried v 1.0 released (a file format identification tool) - Open Preservation Foundation"
|
||
},
|
||
"end_index": 14159,
|
||
"start_index": 14118,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://digitalcorpora.org/corpora/file-corpora/files/",
|
||
"uuid": "5fbd4a73-7c9c-4fb0-a61d-5d8a88daa869",
|
||
"title": "Digitalcorpora",
|
||
"sources": [
|
||
{
|
||
"url": "https://digitalcorpora.org/corpora/file-corpora/files/",
|
||
"uuid": "5fbd4a73-7c9c-4fb0-a61d-5d8a88daa869",
|
||
"title": "Govdocs1 – Digital Corpora",
|
||
"source": "Digitalcorpora",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=digitalcorpora.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "5fbd4a73-7c9c-4fb0-a61d-5d8a88daa869",
|
||
"source": "Digitalcorpora",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=digitalcorpora.org",
|
||
"preview_title": "Govdocs1 – Digital Corpora"
|
||
},
|
||
"end_index": 14159,
|
||
"start_index": 14118,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.bitsgalore.org/2014/01/27/identification-pdf-preservation-risks-analysis-govdocs-selected-corpus",
|
||
"uuid": "88c19acd-1120-4e60-85ff-b5114ecc8fd0",
|
||
"title": "Bitsgalore",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.bitsgalore.org/2014/01/27/identification-pdf-preservation-risks-analysis-govdocs-selected-corpus",
|
||
"uuid": "88c19acd-1120-4e60-85ff-b5114ecc8fd0",
|
||
"title": "Identification of PDF preservation risks: analysis of Govdocs selected corpus",
|
||
"source": "Bitsgalore",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=bitsgalore.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "88c19acd-1120-4e60-85ff-b5114ecc8fd0",
|
||
"source": "Bitsgalore",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=bitsgalore.org",
|
||
"preview_title": "Identification of PDF preservation risks: analysis of Govdocs selected corpus"
|
||
},
|
||
"end_index": 14159,
|
||
"start_index": 14118,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.slingacademy.com/article/property-based-testing-in-rust-with-the-proptest-crate/",
|
||
"uuid": "c0d02908-1a98-4ac9-b45b-d7c932e2eb26",
|
||
"title": "Sling Academy",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.slingacademy.com/article/property-based-testing-in-rust-with-the-proptest-crate/",
|
||
"uuid": "c0d02908-1a98-4ac9-b45b-d7c932e2eb26",
|
||
"title": "Property-Based Testing in Rust with the proptest Crate - Sling Academy",
|
||
"source": "Sling Academy",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=slingacademy.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "c0d02908-1a98-4ac9-b45b-d7c932e2eb26",
|
||
"source": "Sling Academy",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=slingacademy.com",
|
||
"preview_title": "Property-Based Testing in Rust with the proptest Crate - Sling Academy"
|
||
},
|
||
"end_index": 14159,
|
||
"start_index": 14118,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.linkedin.com/pulse/rust-testing-mastery-from-basics-best-practices-luis-soares-m-sc-",
|
||
"uuid": "dda9e862-fbec-444a-8246-601180db6b4a",
|
||
"title": "LinkedIn",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.linkedin.com/pulse/rust-testing-mastery-from-basics-best-practices-luis-soares-m-sc-",
|
||
"uuid": "dda9e862-fbec-444a-8246-601180db6b4a",
|
||
"title": "Rust Testing Mastery: From Basics to Best Practices",
|
||
"source": "LinkedIn",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=linkedin.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "dda9e862-fbec-444a-8246-601180db6b4a",
|
||
"source": "LinkedIn",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=linkedin.com",
|
||
"preview_title": "Rust Testing Mastery: From Basics to Best Practices"
|
||
},
|
||
"end_index": 14159,
|
||
"start_index": 14118,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://bitfieldconsulting.com/posts/rust-vs-go",
|
||
"uuid": "82d8a5e8-5e22-49dd-81cb-1934a1fb036a",
|
||
"title": "Bitfield Consulting",
|
||
"sources": [
|
||
{
|
||
"url": "https://bitfieldconsulting.com/posts/rust-vs-go",
|
||
"uuid": "82d8a5e8-5e22-49dd-81cb-1934a1fb036a",
|
||
"title": "Rust vs Go in 2025 — Bitfield Consulting",
|
||
"source": "Bitfield Consulting",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=bitfieldconsulting.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "82d8a5e8-5e22-49dd-81cb-1934a1fb036a",
|
||
"source": "Bitfield Consulting",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=bitfieldconsulting.com",
|
||
"preview_title": "Rust vs Go in 2025 — Bitfield Consulting"
|
||
},
|
||
"end_index": 14203,
|
||
"start_index": 14165,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://pullflow.com/blog/go-vs-python-vs-rust-complete-performance-comparison",
|
||
"uuid": "ec1bff7b-3aff-45f6-a5f3-7ee232bb0aac",
|
||
"title": "PullFlow",
|
||
"sources": [
|
||
{
|
||
"url": "https://pullflow.com/blog/go-vs-python-vs-rust-complete-performance-comparison",
|
||
"uuid": "ec1bff7b-3aff-45f6-a5f3-7ee232bb0aac",
|
||
"title": "Go vs Python vs Rust: Which One Should You Learn in 2025? Benchmarks, Jobs & Trade‑offs",
|
||
"source": "PullFlow",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=pullflow.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "ec1bff7b-3aff-45f6-a5f3-7ee232bb0aac",
|
||
"source": "PullFlow",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=pullflow.com",
|
||
"preview_title": "Go vs Python vs Rust: Which One Should You Learn in 2025? Benchmarks, Jobs & Trade‑offs"
|
||
},
|
||
"end_index": 14234,
|
||
"start_index": 14209,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://github.com/richardlehane/siegfried",
|
||
"uuid": "35537246-29be-42e5-8a46-dc0542b7cf60",
|
||
"title": "GitHub",
|
||
"sources": [
|
||
{
|
||
"url": "https://github.com/richardlehane/siegfried",
|
||
"uuid": "35537246-29be-42e5-8a46-dc0542b7cf60",
|
||
"title": "GitHub - richardlehane/siegfried: signature-based file format identification",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "35537246-29be-42e5-8a46-dc0542b7cf60",
|
||
"source": "GitHub",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=github.com",
|
||
"preview_title": "GitHub - richardlehane/siegfried: signature-based file format identification"
|
||
},
|
||
"end_index": 14615,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-v-1-0-released-a-file-format-identification-tool/",
|
||
"uuid": "aae5801e-a5d9-4ea3-9513-4867b2ac514b",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-v-1-0-released-a-file-format-identification-tool/",
|
||
"uuid": "aae5801e-a5d9-4ea3-9513-4867b2ac514b",
|
||
"title": "Siegfried v 1.0 released (a file format identification tool) - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "aae5801e-a5d9-4ea3-9513-4867b2ac514b",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried v 1.0 released (a file format identification tool) - Open Preservation Foundation"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://tika.apache.org/",
|
||
"uuid": "a09e9a4a-1a2d-489f-a86c-835e5d45839a",
|
||
"title": "Apache",
|
||
"sources": [
|
||
{
|
||
"url": "https://tika.apache.org/",
|
||
"uuid": "a09e9a4a-1a2d-489f-a86c-835e5d45839a",
|
||
"title": "Apache Tika – Apache Tika",
|
||
"source": "Apache",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=apache.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "a09e9a4a-1a2d-489f-a86c-835e5d45839a",
|
||
"source": "Apache",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=apache.org",
|
||
"preview_title": "Apache Tika – Apache Tika"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.tutorialspoint.com/tika/tika_quick_guide.htm",
|
||
"uuid": "4c8f60ad-6618-4130-8e88-5716aab27bca",
|
||
"title": "TutorialsPoint",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.tutorialspoint.com/tika/tika_quick_guide.htm",
|
||
"uuid": "4c8f60ad-6618-4130-8e88-5716aab27bca",
|
||
"title": "Apache Tika Quick Guide",
|
||
"source": "TutorialsPoint",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=tutorialspoint.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "4c8f60ad-6618-4130-8e88-5716aab27bca",
|
||
"source": "TutorialsPoint",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=tutorialspoint.com",
|
||
"preview_title": "Apache Tika Quick Guide"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://discord.com/blog/why-discord-is-switching-from-go-to-rust",
|
||
"uuid": "b494211c-8a3a-40d9-a39b-98dccdbff346",
|
||
"title": "Discord",
|
||
"sources": [
|
||
{
|
||
"url": "https://discord.com/blog/why-discord-is-switching-from-go-to-rust",
|
||
"uuid": "b494211c-8a3a-40d9-a39b-98dccdbff346",
|
||
"title": "Why Discord is switching from Go to Rust",
|
||
"source": "Discord",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=discord.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "b494211c-8a3a-40d9-a39b-98dccdbff346",
|
||
"source": "Discord",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=discord.com",
|
||
"preview_title": "Why Discord is switching from Go to Rust"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "da76e492-d721-4bee-9646-a7ffb5706a4f",
|
||
"title": "Openpreservation",
|
||
"sources": [
|
||
{
|
||
"url": "https://openpreservation.org/blogs/siegfried-pronom-based-file-format-identification-tool/",
|
||
"uuid": "da76e492-d721-4bee-9646-a7ffb5706a4f",
|
||
"title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "da76e492-d721-4bee-9646-a7ffb5706a4f",
|
||
"source": "Openpreservation",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=openpreservation.org",
|
||
"preview_title": "Siegfried - a PRONOM-based, file format identification tool - Open Preservation Foundation"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://blogs.loc.gov/thesignal/2012/10/archivematica-and-the-open-source-mindset-for-digital-preservation-systems/",
|
||
"uuid": "91d9140f-1949-49e3-bc79-99198b534471",
|
||
"title": "LOC",
|
||
"sources": [
|
||
{
|
||
"url": "https://blogs.loc.gov/thesignal/2012/10/archivematica-and-the-open-source-mindset-for-digital-preservation-systems/",
|
||
"uuid": "91d9140f-1949-49e3-bc79-99198b534471",
|
||
"title": "Archivematica and the Open Source Mindset for Digital Preservation Systems | The Signal",
|
||
"source": "LOC",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=loc.gov",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "91d9140f-1949-49e3-bc79-99198b534471",
|
||
"source": "LOC",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=loc.gov",
|
||
"preview_title": "Archivematica and the Open Source Mindset for Digital Preservation Systems | The Signal"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.shuttle.dev/blog/2023/08/23/rust-web-framework-comparison",
|
||
"uuid": "335e3d22-7b7e-408c-b92e-a326c8550e49",
|
||
"title": "Shuttle",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.shuttle.dev/blog/2023/08/23/rust-web-framework-comparison",
|
||
"uuid": "335e3d22-7b7e-408c-b92e-a326c8550e49",
|
||
"title": "Best Rust Web Frameworks to Use in 2023 | Shuttle",
|
||
"source": "Shuttle",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=shuttle.dev",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "335e3d22-7b7e-408c-b92e-a326c8550e49",
|
||
"source": "Shuttle",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=shuttle.dev",
|
||
"preview_title": "Best Rust Web Frameworks to Use in 2023 | Shuttle"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.infoworld.com/article/2337398/5-popular-rust-web-frameworkswhich-one-is-right-for-you.html",
|
||
"uuid": "5a498e5a-7372-4e74-91be-83aebbc7a447",
|
||
"title": "InfoWorld",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.infoworld.com/article/2337398/5-popular-rust-web-frameworkswhich-one-is-right-for-you.html",
|
||
"uuid": "5a498e5a-7372-4e74-91be-83aebbc7a447",
|
||
"title": "5 popular Rust web frameworks—which one is right for you? | InfoWorld",
|
||
"source": "InfoWorld",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=infoworld.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "5a498e5a-7372-4e74-91be-83aebbc7a447",
|
||
"source": "InfoWorld",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=infoworld.com",
|
||
"preview_title": "5 popular Rust web frameworks—which one is right for you? | InfoWorld"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://www.arewewebyet.org/",
|
||
"uuid": "0483e2b6-e500-48f8-85b2-24ea035fc861",
|
||
"title": "Are We Web Yet?",
|
||
"sources": [
|
||
{
|
||
"url": "https://www.arewewebyet.org/",
|
||
"uuid": "0483e2b6-e500-48f8-85b2-24ea035fc861",
|
||
"title": "Are we web yet? Yes, and it's freaking fast!",
|
||
"source": "Are We Web Yet?",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=arewewebyet.org",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "0483e2b6-e500-48f8-85b2-24ea035fc861",
|
||
"source": "Are We Web Yet?",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=arewewebyet.org",
|
||
"preview_title": "Are we web yet? Yes, and it's freaking fast!"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
},
|
||
{
|
||
"url": "https://discord.com/blog/why-discord-is-switching-from-go-to-rust",
|
||
"uuid": "1ff102af-2e36-4882-992f-f8b33edaad88",
|
||
"title": "discord",
|
||
"sources": [
|
||
{
|
||
"url": "https://discord.com/blog/why-discord-is-switching-from-go-to-rust",
|
||
"uuid": "1ff102af-2e36-4882-992f-f8b33edaad88",
|
||
"title": "Why Discord is switching from Go to Rust",
|
||
"source": "discord",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=discord.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "1ff102af-2e36-4882-992f-f8b33edaad88",
|
||
"source": "discord",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=discord.com",
|
||
"preview_title": "Why Discord is switching from Go to Rust"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_fetch"
|
||
},
|
||
{
|
||
"url": "https://bitfieldconsulting.com/posts/rust-vs-go",
|
||
"uuid": "cd12811d-853d-41cb-b1b2-950e10a617f4",
|
||
"title": "Bitfield Consulting",
|
||
"sources": [
|
||
{
|
||
"url": "https://bitfieldconsulting.com/posts/rust-vs-go",
|
||
"uuid": "cd12811d-853d-41cb-b1b2-950e10a617f4",
|
||
"title": "Rust vs Go in 2025 — Bitfield Consulting",
|
||
"source": "Bitfield Consulting",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=bitfieldconsulting.com",
|
||
"subtitles": null,
|
||
"content_body": null,
|
||
"resource_type": null
|
||
}
|
||
],
|
||
"metadata": {
|
||
"type": "generic_metadata",
|
||
"uuid": "cd12811d-853d-41cb-b1b2-950e10a617f4",
|
||
"source": "Bitfield Consulting",
|
||
"icon_url": "https://www.google.com/s2/favicons?sz=64&domain=bitfieldconsulting.com",
|
||
"preview_title": "Rust vs Go in 2025 — Bitfield Consulting"
|
||
},
|
||
"end_index": 14674,
|
||
"start_index": 14426,
|
||
"origin_tool_name": "web_search"
|
||
}
|
||
]
|
||
},
|
||
"message": null,
|
||
"integration_name": null,
|
||
"integration_icon_url": null,
|
||
"context": null,
|
||
"display_content": null,
|
||
"approval_options": null,
|
||
"approval_key": null
|
||
},
|
||
{
|
||
"start_timestamp": null,
|
||
"stop_timestamp": null,
|
||
"flags": null,
|
||
"type": "tool_result",
|
||
"name": "artifacts",
|
||
"content": [
|
||
{
|
||
"type": "text",
|
||
"text": "OK",
|
||
"uuid": "efbbc03f-502b-4a4e-81bd-64fd8466ba70"
|
||
}
|
||
],
|
||
"is_error": false,
|
||
"message": null,
|
||
"integration_name": null,
|
||
"integration_icon_url": null,
|
||
"display_content": null
|
||
}
|
||
],
|
||
"sender": "assistant",
|
||
"created_at": "2025-09-07T05:30:21.824272Z",
|
||
"updated_at": "2025-09-07T05:41:02.243779Z",
|
||
"attachments": [],
|
||
"files": []
|
||
}
|
||
]
|
||
} |