-
Ringling Museum of Art, Sarasota
Established in 1927, the John and Mable Ringling Museum of Art was completed in 1928 and welcomed its first visitors in 1930.
1/3745s f/1,6 ISO 50/18° f=5mm/26mm
1/1316s f/1,9 ISO 45 f=5mm/25mm
1/2755s f/1,6 ISO 50/18° f=5mm/26mm
Started as a circus, now a museum by the bay.
Ringling turned seasons on the road into an art collection in Sarasota, and these panoramas take the long view in wide frames.
1/10s f/5,6 ISO 500/28° f=7,5mm
In case you get lost in the art, here is the official map. The place is big.
As tripods were not permitted, all panoramas were captured handheld, increasing the risk of stitching errors from parallax and alignment sensitivity in an environment where precise alignment is most important.
Gallery 1
Rubens opens the walk with five towering canvases from his Triumph of the Eucharist series. Once made for royalty, now casually greeting anyone who steps inside.
Interactive Panorama Gallery 1
1/50s f/5,6 ISO 2000/34° f=7,5mm
Gallery 3
Late Gothic and Renaissance works from Northern Europe, including pieces by Cranach the Elder, Cornelis van Cleve, and Quinten Metsys. Sculptures, furniture, and smaller objects complete the atmosphere and give a good sense of the period.
Interactive Panorama Gallery 3
1/50s f/5,6 ISO 10000/41° f=7,5mm
Gallery 5
Renaissance life shows up in softer tones. A 16th century daybed and devotional pieces, including a gentle Della Robbia Madonna and a warm Ghirlandaio, set the mood.
Interactive Panorama Gallery 5
1/50s f/5,6 ISO 10000/41° f=7,5mm
Gallery 6
Sixteenth century Italy comes into focus with Veronese's large Rest on the Flight to Egypt. Palma and Fasolo add drama and family presence to the room.
Interactive Panorama Gallery 6
1/50s f/5,6 ISO 10000/41° f=7,5mm
Gallery 8
Drama finds its home here. Italian Baroque painters like Fede Galizia, Guercino, and Benedetto Gennari II pull the room into motion with sharp light, deep shadow, and stories that never quite sit still.
Interactive Panorama Gallery 8
1/50s f/5,6 ISO 6400/39° f=7,5mm
Gallery 15
This room dives into French Rococo with its lighthearted portraits and playful decoration. A highlight is the richly decorated harpsichord, almost 400 years old.
Interactive Panorama Gallery 15
1/50s f/5,6 ISO 5000/38° f=7,5mm
Gallery 19
Here the Astor Mansion lives on. Ringling saved these Gilded Age interiors from demolition in 1926 and gave them a new home in Sarasota, where they now sit in quiet comfort.
Interactive Panorama Gallery 19
To keep the camera and my reflection out of the mirror, I photographed the scene from below the line where the fireplace mantle touched the mirror and projected the frame back into the panorama. In the index, the first frame is the one captured from that low angle, the others were taken from the normal viewpoint. The approach avoided the need for editing altogether.
1/50s f/5,6 ISO 5000/38° f=7,5mm
Ancient Art at the Ringling
The Ancient Art galleries at the Ringling bring together a small group of Greek, Roman, and early Mediterranean pieces. Most works are modest in scale, but their materials and craftsmanship make the room an unexpectedly quiet stop in the museum.
1/50s f/5,6 ISO 2500/35° f=7,5mm
1/50s f/5,6 ISO 2500/35° f=7,5mm
Circus Museum
The Ringling story shows its roots here. Original wagons, trains, and gear capture the life on the road that started everything long before the art collection took shape.
Interactive Panorama Circus Museum
1/50s f/5,6 ISO 12800/42° f=7,5mm
Contemporary Art
A different world entirely. The room abandons traditional paintings in favor of bold objects, sharp angles, and ideas that challenge more than they clarify. A concrete structure dominates the center as if making a statement only it fully understands, while a few quiet surprises wait in the corners. It is modern, very modern, and it certainly invites the ongoing question of what exactly we are looking at.
Interactive Panorama Contemporary Art
1/50s f/5,6 ISO 2000/34° f=7,5mm
Inner Courtyard, Skyspace
The atrium echoes the Pantheon in Rome through its square opening, offering a calm pause of light and air between the rooms.
Interactive Panorama Inner Courtyard
1/160s f/5,6 ISO 125/22° f=7,5mm
Exposure for the ceiling: 1/400s f/5,6 ISO 125/22° f=7,5mmGrand Courtyard, Michelangelo's David
The 21 galleries surround a wide courtyard of fountains, sculptures, and a marble loggia. At its center stands a bronze replica of Michelangelo's David, looking out over the classical architecture.
Interactive Panorama Grand Courtyard, Michelangelo's David
1/800s f/5,6 ISO 100/21° f=7,5mm
Full-Frame Fisheye Projection
1/800s f/5,6 ISO 100/21° f=7,5mm
Equirectangular Projection
The Sarasota copy is nice, but here is the original.
-
Silvester 2025 🎉🥂
Zwischen Rückblick und Ausblick liegt dieser Augenblick.
1/30s f/5,6 ISO 800/30° 16-50mm f/2,8 VR f=50mm/75mm
1/125s f/2,8 ISO 2800 16-50mm f/2,8 VR f=33mm/49mm
1/30s f/5,6 ISO 3200/36° 16-50mm f/2,8 VR f=33mm/49mm
-
Sommerzeit-EXIF automatisch korrigieren mit PowerShell
Ein häufiges Problem bei Digitalkameras: Die Sommerzeit ist noch in der Kamera aktiviert, obwohl bereits Winterzeit ist. Die Zeitstempel in den Fotos sind dadurch eine Stunde falsch und das fällt oft erst später auf, wenn man die Bilder sortiert oder mit anderen Fotos abgleicht.
Viele Kameras speichern die Sommerzeit-Einstellung in den EXIF-Daten. Bei Nikon-Kameras findet sich das "Daylight Savings"-Flag in den MakerNotes. Solange dieses auf "Yes" steht, sind die Zeitstempel um eine Stunde vorgestellt.
Das PowerShell-Script durchsucht alle Bilddateien (z.B. NEF bei Nikon), prüft ob das Sommerzeit-Flag noch aktiv ist, und korrigiert dann:
Die EXIF-Zeitstempel werden um 1 Stunde zurückgestellt Das Sommerzeit-Flag wird deaktiviert Die Windows-Datei-Zeitstempel (Erstellt/Geändert) werden angepasst.
Das Script nutzt das kostenlose Tool exiftool und zeigt für jede Datei übersichtlich an, was geändert wurde. Dateien mit bereits korrekter Zeit werden einfach übersprungen.Der exiftool-Pfad ist oben im Script konfigurierbar. Einfach das Script im Foto-Ordner ausführen. Unterordner werden automatisch durchsucht.
Das Ergebnis: Konsistente, korrekte Zeitstempel in allen Fotos, ohne manuelle Arbeit.
# PowerShell Script zur Korrektur der Sommerzeit in NEF-Dateien # Stellt die EXIF-Zeit um eine Stunde vor für Dateien, die Sommerzeit in Nikon MakerNotes haben # Testaufruf um DaylightSavings auszulesen: # C:\tools\exiftool -DaylightSavings DSC_1234.NEF # Daylight Savings : No # ===== KONFIGURATION ===== $exiftoolPath = "C:\tools\exiftool" # ========================= # Pfad zum aktuellen Verzeichnis $baseDir = $PSScriptRoot # Alle NEF-Dateien finden $nefFiles = Get-ChildItem -Path $baseDir -Recurse -Filter "*.NEF" Write-Host "Gefundene NEF-Dateien: $($nefFiles.Count)" -ForegroundColor Cyan $correctedCount = 0 $skippedCount = 0 foreach ($file in $nefFiles) { Write-Host "`nPrüfe: $($file.FullName)" -ForegroundColor Yellow try { # Lese Nikon Daylight Savings Flag aus MakerNotes $daylightSavings = & $exiftoolPath -s -s -s -DaylightSavings $file.FullName 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host "⚠ Konnte MakerNotes nicht lesen" -ForegroundColor DarkYellow $skippedCount++ continue } Write-Host "Daylight Savings: $daylightSavings" -ForegroundColor Cyan # Prüfe, ob Sommerzeit aktiviert ist (Yes oder On) if ($daylightSavings -match "Yes|On") { Write-Host "→ Sommerzeit ist aktiviert - Korrektur erforderlich" -ForegroundColor Magenta # Zeige aktuelle Zeit $currentTime = & $exiftoolPath -s -s -s -DateTimeOriginal $file.FullName Write-Host "Aktuelle Zeit: $currentTime" -ForegroundColor White # Stellt die Zeit um 1 Stunde zurück (-1 Stunde) # -AllDates betrifft DateTimeOriginal, CreateDate und ModifyDate Write-Host "Stelle Zeit um 1 Stunde zurück und setze Sommerzeit zurück..." -ForegroundColor Magenta & $exiftoolPath -AllDates-=1:0:0 -DaylightSavings=No -overwrite_original $file.FullName 2>&1 | Out-Null if ($LASTEXITCODE -eq 0) { $newTime = & $exiftoolPath -s -s -s -DateTimeOriginal $file.FullName $newDST = & $exiftoolPath -s -s -s -DaylightSavings $file.FullName Write-Host "✓ Erfolgreich aktualisiert: $newTime" -ForegroundColor Green Write-Host " Sommerzeit jetzt: $newDST" -ForegroundColor Green # Setze Windows-Datei-Zeitstempel auf korrigierte EXIF-Zeit try { $exifDateTime = [DateTime]::ParseExact($newTime, "yyyy:MM:dd HH:mm:ss", $null) $file.CreationTime = $exifDateTime $file.LastWriteTime = $exifDateTime Write-Host " Datei-Zeitstempel aktualisiert" -ForegroundColor Green } catch { Write-Host " ⚠ Konnte Datei-Zeitstempel nicht setzen: $_" -ForegroundColor DarkYellow } $correctedCount++ } else { Write-Host "✗ Fehler beim Aktualisieren" -ForegroundColor Red } <# #> } else { Write-Host "→ Keine Sommerzeit - wird übersprungen" -ForegroundColor Gray $skippedCount++ } } catch { Write-Host "✗ Fehler: $_" -ForegroundColor Red Write-Host "Stelle sicher, dass exiftool installiert ist und im PATH verfügbar ist." -ForegroundColor Yellow break } } Write-Host "`n=== Fertig ===" -ForegroundColor Cyan Write-Host "Korrigierte Dateien: $correctedCount" -ForegroundColor Green Write-Host "Übersprungene Dateien: $skippedCount" -ForegroundColor Gray Write-Host "Gesamt geprüft: $($nefFiles.Count)" -ForegroundColor Cyan -
Building an MCP Server on ESP32: Connecting AI Assistants to Real-World Devices
Connecting AI to the Physical World with Model Context Protocol
As detailed in StickyMCP: Notes That Stick, Even in the Cloud, MCP servers open the door for AI systems to interact with real-world tools far beyond their usual diet of static training data and existential boredom.
This project brings together two cutting-edge technologies: the Model Context Protocol (MCP) and Arduino Microcontroller. The result is an MCP server running directly on an Arduino Nano ESP32, allowing AI assistants control physical hardware in real-time.
(Some prompts were typed a bit wrong because I had the camera in the way, but Copilot Chat did not mind at all)
Since no official C++ MCP SDK exists, I built one optimized for embedded systems. Features automatic JSON schema generation, registry-based tool discovery, and memory-safe execution. Architecture mirrors official SDKs (TypeScript/Python) while addressing embedded constraints. Demonstrates full MCP protocol compliance with hardware control tools. I kept it small and readable, and made it work to run simple tools like switching lights on and off.
What is it?
This project implements a fully-compliant JSON-RPC 2.0 MCP server on an Arduino Nano ESP32 microcontroller. It exposes hardware controls (LEDs in this case) as MCP "tools" that can be invoked by AI assistants through natural language commands.
Key Features
- MCP Protocol Support: Implements the MCP 2024-11-05 specification with proper initialization, tool listing, and tool execution
- JSON-RPC 2.0 Compliance: Standard protocol interface for reliable communication
- WiFi-Enabled: Runs a web server on port 8000, making it accessible over the network
- Server-Sent Events (SSE): Real-time notifications and logging stream for monitoring
- Multiple LED Controls: Manages built-in LED plus RGB LEDs (red, green, blue) independently
- Echo Tool: Simple text echo for testing and demonstration
Technical Implementation
The server uses the ESPAsyncWebServer library for handling HTTP requests and ArduinoJson for JSON parsing/serialization. It exposes two main endpoints:
POST /mcp- Main JSON-RPC 2.0 endpoint for all MCP methodsGET /sse- Server-Sent Events stream for real-time notifications
Each LED is implemented as an MCP tool with a simple boolean parameter to turn it on or off. The server handles all the MCP lifecycle methods including initialization, capability negotiation, and tool invocation.
Real-World Applications
This project demonstrates how AI assistants can seamlessly control physical devices. Instead of writing custom scripts or manual API calls, you can simply tell an AI assistant "turn on the red LED" and it happens. This opens up possibilities for:
- Smart home automation controlled by natural language
- Laboratory equipment control through AI assistants
- Educational demonstrations of AI-hardware integration
- Rapid prototyping of IoT devices with conversational interfaces
Technical Stack:
- Arduino Nano ESP32
- ESPAsyncWebServer
- ArduinoJson
- Model Context Protocol (MCP) 2024-11-05
- JSON-RPC 2.0
-
Seattle Skyline and Market on a Sunny Sunday
The day began bright and clear, the kind of winter light that makes everything sharp and calm. We drove toward Seattle with the skyline slowly rising ahead, glass and steel catching the sun as the streets narrowed into the heart of the city.
1/500s f/8 ISO 100/21° 16-50mm f/2,8 VR f=50mm/75mm
1/400s f/7,1 ISO 100/21° 16-50mm f/2,8 VR f=27mm/40mm
Pike Place Market was alive with its familiar rhythm. Old wooden storefronts and neon signs stood like markers of time, while the scent of coffee drifted through the crowd. Vendors called out, voices mingling with the hum of conversation, and for a moment it felt like the city was speaking in its own language.
1/500s f/8 ISO 200/24° 16-50mm f/2,8 VR f=50mm/75mm
1/250s f/5 ISO 200/24° 16-50mm f/2,8 VR f=31mm/47mm
1/125s f/2,8 ISO 400/27° 16-50mm f/2,8 VR f=16mm/24mm
1/125s f/2,8 ISO 900 16-50mm f/2,8 VR f=16mm/24mm
From the Overlook Walk, the view opened wide. The waterfront stretched below, ferries tracing slow lines across the bay, and behind it all the skyline stood still against the pale sky. The skyline panorama frames capture the city in one continuous sweep, holding its full breadth in a single image.
1/500s f/8 ISO 100/21° 16-50mm f/2,8 VR f=23mm/35mm
1/320s f/6,3 ISO 100/21° 16-50mm f/2,8 VR f=16mm/24mm
1/1000s f/5,6 ISO 100/21° 16-50mm f/2,8 VR f=18mm/27mm
1/400s f/7,1 ISO 100/21° 16-50mm f/2,8 VR f=16mm/24mm
1/500s f/8 ISO 100/21°
1/400s f/8 ISO 100/21°
1/800s f/5,6 ISO 100/21° 16-50mm f/2,8 VR f=16mm/24mm
1/400s f/7,1 ISO 100/21° 16-50mm f/2,8 VR f=35mm/52mm
1/500s f/8 ISO 100/21° f=16mm/17mm
1/400s f/7,1 ISO 100/21° 16-50mm f/2,8 VR f=16mm/24mm
On the way back, the Space Needle appeared again, sudden and familiar against the clear blue. One last glance, one last photo, and the day folded into the drive home: simple, bright, and easy to remember.
1/320s f/6,3 ISO 100/21° 16-50mm f/2,8 VR f=16mm/24mm