
{
    "version": "https://jsonfeed.org/version/1.1",
    "title": "jtagcat's tail (formerly tail.jtag.cat)",
    "home_page_url": "https://tail.c7.ee/",
    "feed_url": "https://tail.c7.ee/feed.json",
    "items": [
        {
            "id": "https://tail.c7.ee/ebay-estonia/",
            "url": "https://tail.c7.ee/ebay-estonia/",
            "date_published": "2026-06-18T00:00:00Z",
            "title": "Selling on eBay from Estonia",
            "content_html": "\u003cp\u003eWhen listing on ebay.de and marking the item location as Tallinn, Estonia, one is shown the following:\u003c/p\u003e\n\u003cimg src=\"dhl.png\" alt=\"Pick a courier, DHL for 1,80€\" style=\"max-width:100%;\"\u003e\n\n\u003cp\u003eSupport article and bot assure that you can buy a shipping label after an order. I double-checked the item location is indeed in Estonia.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWhen you print a shipping label with eBay Labels, our negotiated rates let you save money relative to what you would pay at the post office or to a carrier for most services. (\u003ca href=\"https://www.ebay.de/help/selling/shipping-items/labels-packaging-tips/buying-printing-shipping-labels?id=4157\"\u003eeBay\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eVinted offers 0,50€ shipping for Estonia-Poland (and others), which I can attest to, both directions. They achieve this through deals with couriers and subsidizing the remainder from buyer protection. As such, I wouldn\u0026rsquo;t be that surprised by the cheap shipping rate.\u003c/p\u003e\n\u003cp\u003eOmniva (and as far as I\u0026rsquo;ve heard, doesn\u0026rsquo;t use \u0026ldquo;the terrible GLS\u0026rdquo;) to Germany is 6,89€ for 250g and 9,97€ for 500g, with indefinite campaign codes \u003ccode\u003eDEUTSCHLAND\u003c/code\u003e, \u003ccode\u003eDIESEL_IST_KAPUTT\u003c/code\u003e, \u003ccode\u003eDAS_IST_FANTASTISCH\u003c/code\u003e, \u003ccode\u003eSCHNELL\u003c/code\u003e. They don\u0026rsquo;t have any terms, expiry, or claim with them, which is illegal. This is through the courier\u0026rsquo;s website as a private person, with no other special discounts.\u003c/p\u003e\n\u003cp\u003eI sold an item, pressed print shipping label…\u003c/p\u003e\n\u003cimg src=\"after.png\" alt=\"errors, your item address is bad\" style=\"max-width:100%;\"\u003e\n\n\u003cp\u003eThank you for reassuring before. Human support is only available via phone (they call you), only Germany, Austria and Switzerland numbers are supported.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eNow we know, with all items you have to define Germany and International (that would include Estonia) separately each time. You can use shipping rate tables, but filling them out is very tedious. For non-Baltic and other neibghouring countries, Omniva\u0026rsquo;s \u003ca href=\"https://www.omniva.ee/wp-content/uploads/sites/7/2025/08/hinnakiri-rv-pakiteenused-era-est-ee-2025-4.pdf\"\u003eprice list\u003c/a\u003e makes the most sense. Injecting it to eBay is terrible:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eYou have to add countries one by one clicking and clicking: 1. Add Region, 2. Expand Europe, 3. Find and select country 4. Accept selection. 5. Click on costs and paste in the amount.\u003c/li\u003e\n\u003cli\u003eIf you select a larger region (for example EU), you can\u0026rsquo;t add countries one by one.\u003c/li\u003e\n\u003cli\u003eYou can\u0026rsquo;t set weight classes (this), only \u0026rsquo;extra cost per kg\u0026rsquo;. Listings have the shipment weight field \u0026ldquo;shown only to seller\u0026rdquo;, this can\u0026rsquo;t be used to match a price list.\u003c/li\u003e\n\u003cli\u003eYou can\u0026rsquo;t import prices in a standard format (CSV with \u003ccode\u003eCountry,Price\u003c/code\u003e would be great), or in any other way share or duplicate the lists.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWith eBay I\u0026rsquo;ve given up, and set 6,89€ DE + 9,50 EU (250g) and 9,97€ DE + 14,50 .. 16,50€ EU (500g). If somebody makes an offer, I try to get their country for an exact (usually cheaper) shipping rate.\u003c/p\u003e\n\u003cp\u003eCompare this to Reverb (also has price lists, but WAY easier to add):\u003c/p\u003e\n\u003cimg src=\"reverb.png\" alt=\"country litsing with EU, then EU countries, etc\" style=\"max-width:100%;\"\u003e\n\n\u003cp\u003eAlthough as far as I\u0026rsquo;ve talked to others, it\u0026rsquo;s worth disabling US as packages regularly get lost, get delivered in a few years, have problems with (buyer\u0026rsquo;s responsibility) their import customs etc. In every case, especially on eBay, the seller would forefit the item and money.\u003c/p\u003e\n"
        }, 
        {
            "id": "https://tail.c7.ee/aliexpress-androidtv-remotes/",
            "url": "https://tail.c7.ee/aliexpress-androidtv-remotes/",
            "date_published": "2026-06-17T00:00:00Z",
            "title": "My AliExpress Android TV remotes",
            "content_html": "\u003cp\u003eI had two Android TV (one of them Xiaomi) set top boxes needing remotes. AliExpress\u0026rsquo;s selection is both bad and expensive. There isn\u0026rsquo;t really a simple remote, which would make sense to anyone picking it up. Everything wants to have 20 features and 40 buttons. Benchmarking towards something like this:\u003c/p\u003e\n\u003cimg src=\"puldid.png\" style=\"max-width:100%;\"\u003e\n\n\u003ch2 id=\"g20s-pro-bt-viv000600--died-after-4-months\"\u003e\u003ca class=\"anchor\" aria-hidden=\"true\" href=\"#g20s-pro-bt-viv000600--died-after-4-months\"\u003e¶\u003c/a\u003eG20S Pro BT (VIV000600) \u0026ndash; died after 4 months\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDied after 4 months (refunded in full)\u003c/li\u003e\n\u003cli\u003eIf the remote was sleeping (as remotes normally are inactive), a key needs to be pressed to wake the remote up. The key pressed isn\u0026rsquo;t transmitted after wakeup. This means most of the time you have to press the remote twice for it to do anything.\u003c/li\u003e\n\u003cli\u003eConsumed a pair of alkalines every month.\u003c/li\u003e\n\u003cli\u003eThe USB dongle stops working when Bluetooth is paired with no way to switch back to the dongle.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eListing name\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eG20S PRO BT Air Mouse Backlit Light 2.4G Wireless Gyroscope Smart Remote Control With Voice IR Learning for Android TV Box\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSold by\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eKM KBT Store (via SUCCESS COURIER SL (\u003ca href=\"mailto:successservice2@hotmail.com\"\u003esuccessservice2@hotmail.com\u003c/a\u003e), Spain). Manufacturer Shenzhen Monaway Technology Co., Ltd (\u003ca href=\"mailto:xuguowei@youyuepin.cn\"\u003exuguowei@youyuepin.cn\u003c/a\u003e)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003ePrice\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e7.57€ (refunded)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cimg src=\"g20s-1.jpg\" style=\"max-width:100%;\"\u003e\n\n\u003cimg src=\"g20s-2.jpg\" style=\"max-width:100%;\"\u003e\n\n\u003cimg src=\"g20s-3.jpg\" style=\"max-width:100%;\"\u003e\n\n\u003cimg src=\"g20s-4.jpg\" style=\"max-width:100%;\"\u003e\n\u003c/p\u003e\n\u003ch2 id=\"xiaomi-remote-with-numbers-xmrm-19\"\u003e\u003ca class=\"anchor\" aria-hidden=\"true\" href=\"#xiaomi-remote-with-numbers-xmrm-19\"\u003e¶\u003c/a\u003eXiaomi remote with numbers (XMRM-19)\u003c/h2\u003e\n\u003cp\u003eBought for use with Xiaomi TV Box S 3. gen EU 4K (PFJ4191EU). The original remote looks like this (on the right):\u003c/p\u003e\n\u003cimg src=\"xiaomi.jpg\" style=\"max-width:100%;\"\u003e\n\n\u003cp\u003eXMRM-19 (on the left) was bought in addition for the number keys. The remote\u0026rsquo;s power button doesn\u0026rsquo;t work as it should. It reboots the device. To turn off the TV Box, you have to hold the button down and select Shut Down. I didn\u0026rsquo;t find any way to change this behaviour.\u003c/p\u003e\n\u003cp\u003eThe remote didn\u0026rsquo;t come with instructions on how to put it into pairing mode. Now the listing says to hold down the Mi and Home button. You have to have a USB keyboard or another remote, as the TV Box doesn\u0026rsquo;t have a pairing button. Both remotes are cluttered with buttons waiting for an accidental press. Compared to pretty much all remotes, they have the back button in the wrong place (not left side, which has been replaced by Mi button).\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eListing name\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eXMRM-19 Bluetooth Voice remote control replacement for Mi Tv Android 4K P1, P1E, Q1, Q1E Smart TV control remote，Fit for L32M6-6\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eSold by\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eShop1103844923 Store\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003ePrice\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e4.75€\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n"
        }, 
        {
            "id": "https://tail.c7.ee/nextcloud-android-error-downloading-opening/",
            "url": "https://tail.c7.ee/nextcloud-android-error-downloading-opening/",
            "date_published": "2026-06-16T00:00:00Z",
            "title": "Nextcloud Android: Error occurred while downloading file",
            "content_html": "\u003cp\u003eSymptoms: Nothing can be downloaded, opened, shared.\u003c/p\u003e\n\u003cimg src=\"notif.png\" alt=\"Nextcloud notifications: Error downloading file, exporting 1 file failed\" style=\"max-width:100%;\"\u003e\n\n\u003cp\u003ePossible cause: Android removing unused permissions\u003c/p\u003e\n\u003cp\u003eRecovering:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eNextcloud → Hamburger Menu → Settings\u003c/li\u003e\n\u003cli\u003e\u003cimg src=\"access_files.png\" alt=\"Access all files\" style=\"max-width:100%;\"\u003e\n\u003c/li\u003e\n\u003cli\u003e(this may not be needed) \u003cimg src=\"general.png\" alt=\"Storage location\" style=\"max-width:100%;\"\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n"
        }, 
        {
            "id": "https://tail.c7.ee/coral-usb-proxmox-passthrough/",
            "url": "https://tail.c7.ee/coral-usb-proxmox-passthrough/",
            "date_published": "2025-11-11T00:00:00Z",
            "title": "Coral USB Passthrough to Proxmox VM",
            "content_html": "\u003cp\u003eIt was time to disassemble the year-long temporary \u003ca href=\"https://frigate.video\"\u003eFrigate\u003c/a\u003e machine to continue in a standardized Kubernetes setup (running in VMs). The Proxmox machines don\u0026rsquo;t have M.2 slots, but they do have plenty of internal USB ports. Passthrough wasn\u0026rsquo;t straight forward.\u003c/p\u003e\n\u003cp\u003eXtremeOwnaga \u003ca href=\"https://static.xtremeownage.com/blog/2023/proxmox---coral-tpu-usb-passthrough/#step-1-install-coral-tpu-drivers-on-proxmox\"\u003edocumented\u003c/a\u003e it working, but with the proprietary driver installed on the hypervisor – which an another admin didn\u0026rsquo;t find acceptable. After a while debugging, the following conditions have to be met:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe machine type has to be \u003ccode\u003eq35\u003c/code\u003e. Mind that \u003ccode\u003ecloud-init\u003c/code\u003e does not run (on Debian \u003ca href=\"https://git.k-space.ee/k-space/ansible/src/commit/2e17161243f9786cfcce8c4e6fede3db6cd9bbd0/proxmox/admin_scripts/template.sh\"\u003ecloud images\u003c/a\u003e), it is reasonable to boot the machine once with \u003ccode\u003ei440fx\u003c/code\u003e first.\u003c/li\u003e\n\u003cli\u003eThe cloud kernel does not have USB drivers: replace \u003ccode\u003elinux-image-cloud-amd64\u003c/code\u003e with \u003ccode\u003elinux-image-amd64\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eVM has Coral drivers: \u003ccode\u003elibedgetpu1-std\u003c/code\u003e (\u003ca href=\"https://git.k-space.ee/k-space/ansible/src/commit/2e17161243f9786cfcce8c4e6fede3db6cd9bbd0/kubernetes-nodes.yaml\"\u003eansible\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFinding the correct hub/port (not device, as the TPU reboots once the driver loads) to pass through was a challenge for the specific Supermicro server – the USB hubs have identical identifiers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePVE docs refer to \u003ccode\u003epvesh get /nodes/\u0026lt;name\u0026gt;/hardware/pci --pci-class-blacklist \u0026quot;\u0026quot;\u003c/code\u003e and \u003ccode\u003elspci\u003c/code\u003e as to hail IOMMU and pass it as a raw PCI(e) device, which, with the dupes, didn\u0026rsquo;t really work.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eusb-devices\u003c/code\u003e (from \u003ccode\u003eusbutils\u003c/code\u003e) ended up being the most informative, where I could see where the numbers in the other commands came from.\u003c/li\u003e\n\u003cli\u003eUltimately, \u003ccode\u003elsusb\u003c/code\u003e (\u003ccode\u003e-t\u003c/code\u003e / \u003ccode\u003e-v\u003c/code\u003e) does the job, look for \u003ccode\u003eGoogle Inc.\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eVM: Hardware → Add → USB Device → Use USB Port. Mine ended up being \u003ccode\u003e6-1\u003c/code\u003e. Make sure to the virtual machine is pinned to the node in HA.\u003c/p\u003e\n"
        }, 
        {
            "id": "https://tail.c7.ee/teliatv-elisa-digiboksiga/",
            "url": "https://tail.c7.ee/teliatv-elisa-digiboksiga/",
            "date_published": "2025-10-16T00:00:00Z",
            "title": "TeliaTV Elisa digiboksiga",
            "content_html": "\u003cp\u003eOn taas aeg teha kõlblikust riistvarast prügi, et mugavndada \u003ca href=\"https://digikoristuspaev.telia.ee/\"\u003edigiprügi spetsialistide\u003c/a\u003e arenduskollektiivi tööd ja hoida teleoperaatori kasumimarginaal kõrgel. Keegi peab ju lisaväärtust looma, et kihelkonna vanavanemad ei kannataks dementia küüsis, vaid oskaks Amino, Motorola, Arrise ja SDMC digibokse-pulte kasutada.\u003c/p\u003e\n\u003cp\u003eAastate jooksul on välja vahetatud telerid, kuhu on omakorda nutitelefonid sisse ehitatud. \u003ca href=\"https://www.elisa.ee/et/abi/abikeskus/televisioon/elisa-elamus/nutiseadmete-ja-telerite-juhendid/seadmete-nouded\"\u003eElisale\u003c/a\u003e ja \u003ca href=\"https://jupiter.err.ee/1608839647/jupiteri-telerakendused\"\u003eJupiterile\u003c/a\u003e sellest piisab, kuid Telia teab, et kliendid on nõus iga aasta ekraani kohta 48€ välja käima. Kuis Inspira kanal hakkas meeldima, siis konkurendid sõltuvust ei leevenda.\u003c/p\u003e\n\u003cp\u003eMõlema teleoperaatori müügihind seadmele on 150€, sest kuna on võimalus teenust sülearvutist tarbida, peab see olema \u003ca href=\"https://www.bitboard.ee/\"\u003esülearvuti hinnaga\u003c/a\u003e. Õnneks jälgimisplatvormi (Google Android) paindlikus laieneb hinnale. \u003ca href=\"https://arvutitark.ee/kodu-ja-meelelahutus/meediamangijad/xiaomi-tv-box-s-3rd-gen-eu-1441946\"\u003eArvutitarga\u003c/a\u003e laoseisude järgi liigub Xiaomi TV karpe, 50-65€, sadades. Kuid Elisal on midagi paremat.\u003c/p\u003e\n\u003ch2 id=\"seadmed\"\u003e\u003ca class=\"anchor\" aria-hidden=\"true\" href=\"#seadmed\"\u003e¶\u003c/a\u003eSeadmed\u003c/h2\u003e\n\u003ch3 id=\"xiaomi\"\u003e\u003ca class=\"anchor\" aria-hidden=\"true\" href=\"#xiaomi\"\u003e¶\u003c/a\u003eXiaomi\u003c/h3\u003e\n\u003cp\u003eKahes kujus:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMälupulgakujuline, odavam \u003cem\u003eTV Stick\u003c/em\u003e (55€). Ei pruugi mõne üksiku teleri taha mahtuda.\u003c/li\u003e\n\u003cli\u003eKarp \u003cem\u003eTV Box S\u003c/em\u003e (62€), millel on juures USB auk, kuhu leiab 5€ eest internetikaabli adaptri, mis on Wi-Fi\u0026rsquo;st lollikindlam.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eXiaomi plussiks on kõige uuem Google TV 16, mille teoreetiline elu võib olla pikem, aga miinuseid on rohkem:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePuldil puudub numbriklahvistik, tagasi nupp vajab ümberharjumist. Ühe möödavajutusega avab teler Xiaomi enda rakenduse (mille saab rakendustest ära keelata).\u003c/li\u003e\n\u003cli\u003eTeliaTV rakenduse automaatne avamine (\u003ca href=\"#seadistamine\"\u003eProjectivy\u0026rsquo;ga\u003c/a\u003e) on ainult läbi juurdepääsetavuse seadistuse abiga – aeglasem ja võib katki minna.\u003c/li\u003e\n\u003cli\u003eHelitugevuse reguleerimisel ei saa nuppu all hoida, Samsungi teleriga (HDMI-CEC) jäädki klõpsima 0.01% kaupa\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/li\u003e\n\u003cli\u003eKui vool tagasi tuleb, siis lülitub kõik sisse, ka öösel.\u003c/li\u003e\n\u003cli\u003eGoogle kontoga sidumine on kohustuslik.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"telia\"\u003e\u003ca class=\"anchor\" aria-hidden=\"true\" href=\"#telia\"\u003e¶\u003c/a\u003eTelia\u003c/h3\u003e\n\u003cp\u003e149€ ja kasutajatoe virisemisõigus.\u003c/p\u003e\n\u003cp\u003eVoolu taastumisel seade ei ava TeliaTV äppi. Projectivy juurdepääsetavuse seadistusega võimalik.\u003c/p\u003e\n\u003ch3 id=\"elisa\"\u003e\u003ca class=\"anchor\" aria-hidden=\"true\" href=\"#elisa\"\u003e¶\u003c/a\u003eElisa\u003c/h3\u003e\n\u003cp\u003e139€, kuid erinevalt lillast teenusepakkujast, jagas Elisa varustuse teenusega kaasa – turul (okidoki, Osta.ee, Facebook Marketplace) on \u003cstrong\u003eisendid 25-30€\u003c/strong\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e. Soovi korral uus pult 15€.\u003c/p\u003e\n\u003cp\u003eKõik töötab eesti keeles. Kui vähegi tehniliselt oskav seadistaja, soovitan TeliaTV-d Elisa digiboksi ja puldiga. Proovisin kasutada Telia puldiga, peale esmast seadistust, Elisa puldi või USB klaviatuuriga, ei saa arugi, et seinas on Elamuse karp.\u003c/p\u003e\n\u003ch2 id=\"seadistamine\"\u003e\u003ca class=\"anchor\" aria-hidden=\"true\" href=\"#seadistamine\"\u003e¶\u003c/a\u003eSeadistamine\u003c/h2\u003e\n\u003cimg src=\"veidi_veel.jpg\" alt=\"Laadimisekraan, \u0026#34;Veidi veel, mul ei lähe enam kaua\u0026#34;\" style=\"max-width:100%;\"\u003e\n\n\u003cp\u003eEsmapilgul ilmneb, et nutipluti on hangunud. Tuleb mitu minutit oodata, kuni digiboks annab valiku \u003ccode\u003eJätka teenuseta\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eKõige mugavam on paigaldada rakendused Play Store kaudu\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e: TeliaTV Eesti, Projectivy launcher ja soovi korral Jupiter. Ava Projectivy esimest korda. Vajuta puldil kodunupule ning vali Projectivy:\u003c/p\u003e\n\u003cimg src=\"koduvalik.jpg\" alt=\"Rakenduse kasutamine avaekraanina\" style=\"max-width:100%;\"\u003e\n\n\u003cp\u003e…ja korrata: kodunupp, seejärel vali \u003ccode\u003eAlati\u003c/code\u003e.\u003c/p\u003e\n\u003cimg src=\"valikud.jpg\" alt=\"Rakenduse valikud Projectivys\" style=\"max-width:100%;\"\u003e\n\n\u003cp\u003eLeia, esimeses nimekirjas, TeliaTV, mille peal hoia OK nuppu all → vali \u003ccode\u003eKäivita alglaadimisel\u003c/code\u003e. Samast menüüst \u003ccode\u003eMuuda järjestust\u003c/code\u003e, et paigutada rakendus nimekirjas esimeseks. Ja ongi kõik.\u003c/p\u003e\n\u003cimg src=\"puldiga.png\" alt=\"Elisa digiboksiga TeliaTV\" style=\"max-width:100%;\"\u003e\n\n\u003ch3 id=\"lisaseadistused--soovitused-ja-vaatlused\"\u003e\u003ca class=\"anchor\" aria-hidden=\"true\" href=\"#lisaseadistused--soovitused-ja-vaatlused\"\u003e¶\u003c/a\u003eLisaseadistused, -soovitused ja vaatlused\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePuldi TV nupu seadistamine \u003ca href=\"https://www.elisa.ee/files/Abi/doc/est/Elisa_Elamus_UUS/TV_nuppu_seadistamine_2.pdf\"\u003eElisa juhendi\u003c/a\u003e järgi.\u003c/li\u003e\n\u003cli\u003eProjectivy seadetest võib ligipääsetavuse meeldetuletuse välja lülitada, Elisa digiboksiga ei ole teenus vajalik.\u003c/li\u003e\n\u003cli\u003eKoduekraani saab Seaded → \u003ccode\u003eMuuda kategooriaid\u003c/code\u003e alt seadistada lollikindlaks, et oleks ainult Telia-Jupiter ning vajadusel PIN-koodiga lukku.\u003c/li\u003e\n\u003cli\u003eTelia internetiühenduse taga on rakendus piisavalt tark, et automaatselt sisse logida. Muul juhul on vaja ligipääs Telia iseteenindusse.\u003c/li\u003e\n\u003cli\u003eÜhenduse tagamiseks, ka siis kui jänes (või kiisu-)kaabli läbi närib, ühendada hetkeks internetikaabel lahti, ühendada Wi-Fi-sse ning kaabel tagasi külge.\u003c/li\u003e\n\u003cli\u003eProovisin kaughalduseks Anydeski ning jään vajadusel videokõne juurde. Peab rakenduse käivitama ning annab ette ainult pildi, sisendivõimekus puudub.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli id=\"fn:1\"\u003e\n\u003cp\u003eLisan hiljem, kas leian mõistlikuma lahenduse, näiteks HDMI-CEC välja lülitamine.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:2\"\u003e\n\u003cp\u003eMõnikord 10-15€, üle 50€ reeglina ei müüda.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:3\"\u003e\n\u003cp\u003eRakendused saab paigaldada kontota, seadetest APK failidena. Projectivy uueneb ise, TeliaTV kohta ei oska kommenteerida.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n"
        }, 
        {
            "id": "https://tail.c7.ee/zfs-freeze/",
            "url": "https://tail.c7.ee/zfs-freeze/",
            "date_published": "2023-10-03T00:00:00Z",
            "title": "zfs-freeze: External atomic backups",
            "content_html": "\u003cp\u003eI use \u003ca href=\"https://docs.oracle.com/cd/E18752_01/html/819-5461/gbchx.html\"\u003e\u003ccode\u003ezfs-send\u003c/code\u003e\u003c/a\u003e for backups, but not all destinations\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e support it. Backing up live systems is problematic — while non-atomic \u003cstrong\u003eordered\u003c/strong\u003e rollbacks are business as usual, segmented backups lead to corrupted databases and broken restores.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://12factor.net\"\u003eTwelve-Factor Apps\u003c/a\u003e included: even if state isn\u0026rsquo;t derived from multiple sources, references can still break. For example, when blob storage is backed up a minute before the database, the restored application could hold a broken reference to an image, which doesn\u0026rsquo;t exist.\u003c/p\u003e\n\u003cp\u003eIn small (yet sizable) systems, surgical strategizing is unnecessary. With the power of \u003ccode\u003e$ zfs snapshot tank/apps/{db,s3}/cutie\u003c/code\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e and \u003ccode\u003ezfs-send\u003c/code\u003e, we are done. But what\u0026rsquo;s the shiny fridge all about?\u003c/p\u003e\n\u003cp\u003eStaying in the ecosystem, we trust ZFS with all copies of our data. To manage the risk, I backup to a technologically isolated system. However, generic tooling doesn\u0026rsquo;t provide the same consistency guarantees; thus I created a script to expose latest snapshots with multiple datasets.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eThe bash prototype wasn\u0026rsquo;t compatible with \u003ca href=\"https://en.wikipedia.org/wiki/Setuid\"\u003esetuid\u003c/a\u003e\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e. Satisfying the binary requirement, I reimplemented it in Go, with extra features.\u003c/p\u003e\n\u003cp\u003eIllustrative usage of \u003ca href=\"https://github.com/jtagcat/jtagcat/tree/main/compile-scripts/zfs-freeze\"\u003e\u003ccode\u003ezfs-freeze\u003c/code\u003e\u003c/a\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Dataset I want to backup: tank/top (and all sub-datasets)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# One-time setup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ego install github.com/jtagcat/jtagcat/compile-scripts/zfs-freeze@latest\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chown root:root \u003cspan class=\"nv\"\u003e$GOPATH\u003c/span\u003e/bin/zfs-freeze\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo chmod \u003cspan class=\"m\"\u003e4755\u003c/span\u003e \u003cspan class=\"nv\"\u003e$GOPATH\u003c/span\u003e/bin/zfs-freeze\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo mv \u003cspan class=\"nv\"\u003e$GOPATH\u003c/span\u003e/bin/zfs-freeze /usr/local/bin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ezfs create tank/_freeze_top\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Regular backups:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003efrozen_dataset\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ezfs-freeze tank/top restic-cup-\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate --rfc-3339\u003cspan class=\"o\"\u003e=\u003c/span\u003edate\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# will create tank/_freeze_top/restic-cup-2023-10-03\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e cleanup \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  zfs-freeze -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$frozen_dataset\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003etrap\u003c/span\u003e cleanup EXIT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erestic -r cup: -p crypt.key backup \u003cspan class=\"s2\"\u003e\u0026#34;/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$frozen_dataset\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdetails\u003e\u003csummary\u003eTemplates for Hetzner: rsync and \u003ca href=\"https://restic.net/\"\u003erestic\u003c/a\u003e\u003c/summary\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003efrozen_dataset\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ezfs-freeze tank/top restic-cup-\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate --rfc-3339\u003cspan class=\"o\"\u003e=\u003c/span\u003edate\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efunction\u003c/span\u003e cleanup \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  zfs-freeze -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$frozen_dataset\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003etrap\u003c/span\u003e cleanup EXIT\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ersync -e \u003cspan class=\"s2\"\u003e\u0026#34;ssh -p23 -oUserKnownHostsFile=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HOME\u003c/span\u003e\u003cspan class=\"s2\"\u003e/.ssh/known_hosts -oIdentityFile=hetzner_\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e.key\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      --archive --delete --compress \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      --exclude\u003cspan class=\"o\"\u003e=\u003c/span\u003e.stversions \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      --relative -- /\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$frozen_dataset\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e/./\u003cspan class=\"o\"\u003e{\u003c/span\u003edirs,to,backup\u003cspan class=\"o\"\u003e}\u003c/span\u003e/ \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e@\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e.your-storagebox.de:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erestic -r sftp:: -p restic.key -o sftp.command\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ssh \u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e.your-storagebox.de -p23 -oIdentityFile=hetzner_\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e.key -l \u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e -s sftp\u0026#34;\u003c/span\u003e unlock --quiet\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erestic -r sftp:: -p restic.key -o sftp.command\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ssh \u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e.your-storagebox.de -p23 -oIdentityFile=hetzner_\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e.key -l \u003c/span\u003e\u003cspan class=\"nv\"\u003e$HETZNER_USER\u003c/span\u003e\u003cspan class=\"s2\"\u003e -s sftp\u0026#34;\u003c/span\u003e backup --quiet --exclude-file \u003cspan class=\"s2\"\u003e\u0026#34;restic.excludes\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$frozen_dataset\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/details\u003e\n\n\u003cp\u003eWriting the helper, I yearned to use \u003ca href=\"https://github.com/jtagcat/hcli\"\u003ehcli\u003c/a\u003e: I could\u0026rsquo;ve avoided errors in parsing arguments, and skipped a refactor.\u003c/p\u003e\n\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli id=\"fn:1\"\u003e\n\u003cp\u003eExhibit A: Hetzner\u0026rsquo;s (cheap!) pure ZFS storage boxes\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:2\"\u003e\n\u003cp\u003eHelpers such as \u003ca href=\"https://github.com/jimsalterjrs/sanoid\"\u003eSanoid\u003c/a\u003e and \u003ca href=\"https://github.com/zrepl/zrepl\"\u003ezrepl\u003c/a\u003e, do not snapshot \u003cstrong\u003eacross datasets\u003c/strong\u003e atomically, only in rapid succession (\u003ccode\u003e$ zfs snapshot tank/apps/db/cutie \u0026amp;\u0026amp; zfs snapshot tank/apps/s3/cutie\u003c/code\u003e).\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:3\"\u003e\n\u003cp\u003eOutside of \u003ca href=\"https://nixos.org/\"\u003eNix\u003c/a\u003e, setuid wrappers are a hassle.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n"
        }, 
        {
            "id": "https://tail.c7.ee/pitchy-vlc/",
            "url": "https://tail.c7.ee/pitchy-vlc/",
            "date_published": "2023-08-28T00:00:00Z",
            "title": "VLC pitch-shifting wasn't my imagination!",
            "content_html": "\u003cp\u003eAt first, I thought I was going crazy, but time and time again I heard it, and it made me sick every single time.\u003c/p\u003e\n\u003cp\u003eTW: Imperfect Pitch\u003c/p\u003e\n\u003cp\u003e\u003caudio src=\"vlcfail.mp3\" controls title=\"Outtake from XIII Youth Dance Celebration\"\u003e\u003c/audio\u003e\n\n\u003caudio src=\"vlcfail2.mp3\" controls title=\"Outtake from XIII Youth Song Celebration\"\u003e\u003c/audio\u003e\n\u003c/p\u003e\n\u003cp\u003eAround the 4-5th second of the audio samples, the pitch returns to normal. This is an effort by VLC to keep the audio and video in sync when its cache runs out (often when scrubbing).\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;d rather have the audio drop out than shift temporarily. The shifted audio always sounds off, and the change (switch to cache) is noticeable.\u003c/p\u003e\n\u003cp\u003eOn many occasions, I tried changing all relevant settings in VLC, but without success. The Internet pointed to resampling, and posts where VLC maintainers stated that VLC is exclusively for streaming media, and the issue is intended / wontfix.\u003c/p\u003e\n\u003cp\u003eVLC used to be my de facto app for decades to open any video or audio file, and it still is what I recommend to people for the universal media player.\u003c/p\u003e\n\u003cp\u003eA few months ago, I replaced it with \u003ca href=\"https://github.com/mpv-player/mpv\"\u003empv\u003c/a\u003e while searching for a no-nonsense ephemeral player\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e. I can say that I\u0026rsquo;ve settled. The keyboard shortcuts took some time to get used to.\u003c/p\u003e\n\u003cp\u003eSince I didn\u0026rsquo;t bother spending time on changing them, I chose to stick with the defaults, even though mpv is fully configurable. I suggest reading the manpages for mpv.\u003c/p\u003e\n\u003cp\u003eThe only questionable default I found was \u003ccode\u003ehwdec=no\u003c/code\u003e, which I changed to \u003ccode\u003ehwdec=auto-safe\u003c/code\u003e. One thing I miss is how VLC manages reusing multiple windows, including the ability to drag and drop into existing windows. Switching between mpv and \u003ca href=\"https://github.com/mpv-player/mpv/blob/master/TOOLS/umpv\"\u003eumpv\u003c/a\u003e offers a remedy but isn\u0026rsquo;t perfect.\u003c/p\u003e\n\u003cp\u003eWhen scrubbing to any position in a 20-hour file, I would say mpv syncs instantly. Changing the audio channel adds a few hundred milliseconds of delay, which is acceptable for me.\u003c/p\u003e\n\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli id=\"fn:1\"\u003e\n\u003cp\u003eBut not overly minimal, like some hardcore i3 maniacs like it.\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli id=\"fn:2\"\u003e\n\u003cp\u003eThough, I do live on Sway.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n"
        }, 
        {
            "id": "https://tail.c7.ee/arch-boot-recovery/",
            "url": "https://tail.c7.ee/arch-boot-recovery/",
            "date_published": "2023-06-08T00:00:00Z",
            "title": "Arch boot recovery",
            "content_html": "\u003cp\u003eI upgraded both identical laptops. One I took with me, and it worked without any problems. Today I was puzzled to find the second machine unable to boot.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e...\nWaiting 10 seconds for device [...]\nERROR: mounting \u0026#39;/dev/mapper/luksdev\u0026#39; on real root\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eGRUB dropped the computer to emergency shell, but it wasn\u0026rsquo;t helpful. The keyboard didn\u0026rsquo;t work, including Ctrl-Alt-Del. Time for data recovery (faster than downloading the backup) from a live boot, a half-scripted reinstall, and recovering the files (~2-3h total).\u003c/p\u003e\n\u003cp\u003eI was not asked for the disk encryption password — the partition couldn\u0026rsquo;t be unlocked. GRUB trying to mount from \u003ccode\u003e/dev/mapper/\u003c/code\u003e smelled something wrong with LUKS.\u003c/p\u003e\n\u003cp\u003eWith a dysfunctional emergency shell, I tried booting from a different entry, without luck. I grabbed my keyring with USB drives. The one which is supposed to have Fedora on it booted to Arch instead.\u003c/p\u003e\n\u003cp\u003eWith the pain of the reinstallation sinking time, I thought if maybe, this time, I could recover the system successfully. Could the boot environment be fixed without any serious GRUB magician skills?\u003c/p\u003e\n\u003cp\u003eHaving already searched the web for the errors, I gave a few commands a try in the emergency shell. Just chroot in, and go:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# lsblk\n...\nnvme0n1     259:0    0  1.8T  0 disk\n├─nvme0n1p1 259:1    0  511M  0 part\n└─nvme0n1p2 259:2    0  1.8T  0 part\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eJudging by the size, the first one is boot, and the second root.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# cryptsetup luksOpen /dev/nvme0n1p2 main\n# mount /dev/mapper/main /mnt\n# mount /dev/nvme0n1p1 /mnt/boot\nmount: boot: mount point does not exist.\n# mkdir /mnt/boot\n# mount /dev/nvme0n1p1 /mnt/boot\n# ls /mnt\nboot @ @home @log @pkg @.snapshots\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eI forgot to specify the Btrfs subvolume…\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# umount /mnt/boot\n# rm -d /mnt/boot\n# umount /mnt\n^R main\n# mount /dev/mapper/main -o subvolume=@ /mnt\n# ls /mnt\nbin boot dev etc f home lib lib64 mnt opt proc r root run sbin srv sys tmp usr var\n^R mnt/boot\n# mount /dev/nvme0n1p1 /mnt/boot\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eMaybe I could fix this easier. I recall not reading the output for updates on the failing laptop. Maybe something went wrong.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# iwctl station wlan0 scan\n# iwctl station wlan0 connect \u0026#39;...\u0026#39;\n# arch-chroot /mnt\n# pacman -Syu\n* mkinitpcio stuff, the slowest part in upgrades *\n#\n^D\n# reboot\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIt has been a few days since I last updated — simply updating again should rebuild the boot environment anyway. The logs agreed with me.\u003c/p\u003e\n\u003cp\u003eWith a naive solution, the laptop booted normally after the upgrade. If there wasn\u0026rsquo;t an upgrade, I could\u0026rsquo;ve tried reinstalling the kernel package.\u003c/p\u003e\n"
        }
    ]
    
}
