Môj šiesty deň s Haiku: pod kapotou zdrojov, ikon a balíčkov
TL; DR: Haiku je operačný systém špeciálne navrhnutý pre PC, takže má niekoľko trikov, vďaka ktorým je jeho desktopové prostredie oveľa lepšie ako ostatné. Ale ako to funguje?
nedávno Objavil som Haiku, nečakane dobrý systém. Stále som prekvapený, ako hladko to beží, najmä v porovnaní s desktopovými prostrediami Linuxu. Dnes nahliadnem pod kapotu. Ak je to potrebné pre hlbšie pochopenie, urobím porovnanie s pôvodnými desktopovými prostrediami Macintosh, Mac OS X a Linux (štandard XDG z freedesktop.org).
Zdroje v súboroch ELF
Včera som sa dozvedel, že IconOMatic dokáže ukladať ikony do zdrojov rdef v spustiteľných súboroch ELF. Dnes chcem vidieť, ako to naozaj funguje.
Zdroje? citácie od Bruce Horn, pôvodný autor Macintosh Finder a „otec“ Macintosh Resource Manager:
Obávam sa rigidnej povahy tradičného kódovania. Pre mňa je najdivokejšou divokosťou samotná myšlienka aplikácie zamrznutej v kóde bez možnosti dynamicky meniť čokoľvek. Za behu by sa malo dať zmeniť čo najviac. Samotný kód aplikácie sa samozrejme zmeniť nedá, ale určite sa dá niečo zmeniť aj bez prekompilovania kódu?
Na pôvodnom počítači Macintosh urobili tieto súbory „údajovou sekciou“ a „sekciou zdrojov“, vďaka čomu bolo neuveriteľne jednoduché ukladať veci, ako sú ikony, preklady a podobne. v spustiteľných súboroch.
Na Macu sa to používa ResEdit, grafický program na - náhle - úpravu zdrojov.
ResEdit na pôvodnom počítači Macintosh
V dôsledku toho bolo možné upravovať ikony, položky ponuky, preklady atď. dosť jednoduché, ale stále „cestujú“ s aplikáciami.
V každom prípade mal tento prístup veľkú nevýhodu: fungoval iba na súborových systémoch Apple, čo bol jeden z dôvodov, prečo Apple pri prechode na Mac OS X opustil „sekciu zdrojov“.
Na Mac OS X chcel Apple riešenie nezávislé na súborovom systéme, a tak prijal koncept balíčkov (od NeXT), adresárov, ktoré správca súborov považuje za „nepriehľadné objekty“, ako súbory, nie adresáre. Akýkoľvek balík s aplikáciou vo formáte .app má okrem iného aj súbor Info.plist (v nejakom ekvivalente JSON alebo YAML od Apple) obsahujúce metadáta aplikácie.
Kľúče pre súbor Info.plist z balíka aplikácií Mac OS X.
Prostriedky, ako sú ikony, súbory používateľského rozhrania a iné, sú uložené v balíku ako súbory. Koncept sa vlastne vrátil ku svojim koreňom v NeXT.
Mathematica.app na NeXTSTEP 1.0 v roku 1989: objavuje sa ako adresár súborov v termináli, ale ako jeden objekt v grafickom správcovi súborov.
Vráťme sa k BeOS, konceptom, na ktorých je založené Haiku. Jeho vývojári sa pri prechode z PEF (PowerPC) na ELF (x86) (rovnako ako sa používa na Linuxe) rozhodli pridať na koniec súborov ELF sekciu zdrojov. Nepoužil svoju vlastnú sekciu ELF, bol jednoducho pripojený na koniec súboru ELF. V dôsledku programu strip a iní z binutilov, ktorí si to neuvedomujú, to jednoducho odrežú. Preto pri pridávaní zdrojov do súboru ELF na BeOS je lepšie s ním nemanipulovať pomocou nástrojov Linuxu.
Čo sa teraz deje s Haiku? V podstate viac-menej to isté.
Teoreticky by bolo možné umiestniť zdroje do požadovanej časti ELF. Podľa vývojárov na kanáli #haiku na irc.freenode.net:
S ELF by sekcia dávala väčší zmysel... jediný dôvod, prečo to tak nerobíme, je ten, že sme to robili v BeOS."
A nemá zmysel to teraz meniť.
Riadenie zdrojov
Zdroje sú napísané v štruktúrovanom formáte „zdrojov“: v podstate ide o zoznam zdrojov s veľkosťami a potom ich obsahom. Som si spomenul formát ar.
Ako skontrolovať zdroje v Haiku? Existuje niečo ako ResEdit?
Podľa dokumentáciu:
Ak chcete zobraziť zdroje poskytované v balíku aplikácie, môžete spustiteľný súbor pretiahnuť do programu, ako je napr Resourcer. Môžete tiež prejsť na terminál a spustiť príkaz listres имя_файла.
Resourcer je dostupný v HaikuDepot, ale jednoducho mi spadne.
Ako spravovať zdroje v súboroch ELF? Použitím rsrc и rdef. rdef súbory sa zhromažďujú v rsrc. Súbor rdef je uložený vo formáte obyčajného textu, takže sa s ním oveľa jednoduchšie pracuje. Formát súboru rsrc pripojený na koniec súboru ELF. Skúsme sa zahrať:
~> rc -h
Haiku Resource Compiler 1.1To compile an rdef script into a resource file:
rc [options] [-o <file>] <file>...To convert a resource file back into an rdef script:
rc [options] [-o <file>] -d <file>...Options:
-d --decompile create an rdef script from a resource file
--auto-names construct resource names from ID symbols
-h --help show this message
-I --include <dir> add <dir> to the list of include paths
-m --merge do not erase existing contents of output file
-o --output specify output file name, default is out.xxx
-q --quiet do not display any error messages
-V --version show software version and license
Môžete použiť program xres na kontrolu a kontrolu:
/> xres
Usage: xres ( -h | --help )
xres -l <file> ...
xres <command> ...The first form prints this help text and exits.The second form lists the resources of all given files.The third form manipulates the resources of one or more files according to
the given commands.
(...)
Hoci do zdrojov môžete vložiť čokoľvek, existuje niekoľko definovaných štandardných typov:
app_signature: Typ aplikácie MIME, na mapovanie otvoreného súboru, spustenie, IPC atď.
app_name_catalog_entry: Keďže názov aplikácie je zvyčajne v angličtine, môžete určiť miesta, kde sa nachádzajú preložené názvy, aby používatelia v rôznych jazykoch v prípade potreby videli preložený názov aplikácie.
app_version: presne ako si myslel
app_flags: označuje registrar ako spracovať žiadosť. Myslím, že je v tom viac, ako sa na prvý pohľad zdá. Napríklad existuje B_SINGLE_LAUNCH, ktorá núti systém spustiť nový aplikačný proces vždy, keď o to používateľ požiada (rovnaký princíp sa používa pre väčšinu aplikácií na Linuxe). Jedzte B_MULTIPLE_LAUNCH, čo spôsobí spustenie procesu každý súbor. Nakoniec existuje B_EXCLUSIVE_LAUNCH, ktorá núti systém spúšťať vždy iba jeden proces bez ohľadu na to, ako často ho používatelia spúšťajú (takto beží napríklad Firefox na Linuxe; rovnaký výsledok možno dosiahnuť aj v Qt aplikáciách pomocou funkcie QtSingleApplication). Aplikácie s B_EXCLUSIVE_LAUNCH sú upozornení, keď sa ich používateľ pokúsi znova spustiť: napríklad dostanú cestu k súboru, ktorý chce používateľ s ich pomocou otvoriť.
vector_icon: Vektorová ikona aplikácie (BeOS nemal vektorové ikony, väčšina aplikácií namiesto toho mala vo svojich spustiteľných súboroch dve rastrové ikony).
Samozrejme, môžete pridať zdroje s ľubovoľnými požadovanými ID a typmi a potom ich prečítať v samotnej aplikácii alebo iných aplikáciách pomocou triedy BResources. Najprv sa však pozrime na fascinujúcu tému ikon.
Vektorové ikony v štýle Haiku
Samozrejme, nielen Haiku zvolilo najlepší formát ikony, v tejto časti je situácia s prostrediami Linuxu ďaleko od ideálu:
Samozrejmosťou je škálovateľnosť, ktorá obsahuje, ako iste chápete, vektorové ikony. Prečo potom existuje niečo iné? Pretože výsledok kreslenia vektorovej grafiky v malých veľkostiach môže byť menej ako ideálny. Chcel by som mať rôzne možnosti optimalizované pre rôzne veľkosti. V prostrediach Linuxu sa to dosiahne rozptýlením ikon rôznych veľkostí v celom súborovom systéme.
Je vidieť, že existuje jeden súbor firefox.icns v balíku Firefox.app, ktorý obsahuje všetky veľkosti, takže rôzne verzie tej istej aplikácie majú rôzne ikony.
Oveľa lepšie! Ikony putujú s aplikáciou, všetky zdroje sú v jednom súbore.
Vráťme sa k Haiku. Ohromujúce riešenie, žiadne výnimky. Podľa dokumentáciu:
Bol vyvinutý špeciálny formát HVIF, vysoko optimalizovaný pre malé veľkosti a rýchle vykresľovanie. Preto sú naše ikony z väčšej časti oveľa menšie ako v rastri alebo v široko používanom formáte SVG.
A stále sú optimalizované:
Veľkosti ikon v HVIF v porovnaní s inými formátmi.
Rozdiel je rádový!
Tu však kúzlo nekončí. Ten istý HVIF môže zobrazovať rôzne úrovne detailov v závislosti od zobrazenej veľkosti, aj keď ide o vektorový formát.
Rôzne úrovne detailov (LOD) v závislosti od veľkosti renderu
Teraz o nevýhodách: nemôžete vziať SVG, hodiť ho do ImageMagick a zavolať ho deň; musíte prejsť niekoľkými cyklami, aby ste vytvorili ikonu vo formáte HVIF. tu vysvetlenia. IconOMatic však dokáže importovať SVG dosť nedokonale; asi 90 % detailov SVG je s určitou pravdepodobnosťou importovaných, zvyšných 10 % bude potrebné nakonfigurovať a zmeniť manuálne. Prečítajte si viac o tom, ako HVIF robí svoje kúzla jeden môže na blogu Leah Gansonová
Pridanie ikony do aplikácie
Teraz môžem pridať ikonu do vytvoreného balíka naposledyberúc do úvahy všetky prijaté informácie.
No, keďže práve teraz nechcem kresliť svoju vlastnú ikonu pre moju QtQuickApp „Ahoj, svet“, vytiahnem ju z Qt Creator.
/Haiku/home> xres /Haiku/system/apps/QtCreator/bin/Qt Creator -o /Haiku/home/QtQuickApp/QtQuickApp -a VICN:101:BEOS:ICON /Haiku/system/apps/QtCreator/bin/Qt Creator
Skontrolujte, či bola ikona skopírovaná:
/Haiku/home> xres -l /Haiku/home/QtQuickApp/QtQuickApp/Haiku/home/QtQuickApp/QtQuickApp
resources:type ID size name
------ ----------- ----------- --------------------
'VICN' 101 152238 BEOS:ICON
Vyzerá dobre, ale prečo sa nová ikona po skopírovaní nezobrazuje?
Skopírované VICN:101:BEOS:ICONs sa zatiaľ nepoužívajú ako ikona aplikácie v správcovi súborov
O čo som prišiel?
Komentár vývojára:
Musíme vytvoriť súbor rdef so všetkými zdrojmi, potom vykonajte príkaz rc имя.rdef, tým sa vytvorí súbor .rsrc. Potom musíte spustiť príkaz resattr -o имя_бинарника имя.rsrc. Minimálne používam takéto príkazy na pridávanie ikon do mojich skriptov.
No, chcel som vytvoriť zdroj, nie atribút. Som naozaj zmätený.
Inteligentné ukladanie do vyrovnávacej pamäte pomocou systému súborov
Otváranie a čítanie atribútov ELF je pomalé. Ako som písal vyššie, ikona je zapísaná ako zdroj v samotnom súbore. Táto metóda je spoľahlivejšia a umožňuje vám prežiť kopírovanie do iného súborového systému. Potom sa však skopíruje napríklad aj do atribútu súborového systému BEOS:ICON. Toto funguje len na určitých súborových systémoch, ako je BFS. Ikony zobrazené systémom (v Trackeri a Deskbare) sa čítajú z tohto rozšíreného atribútu, pretože toto riešenie funguje rýchlo. Na niektorých miestach (kde rýchlosť nie je dôležitá, napríklad typické okno „O aplikácii“) systém dostane ikonu priamo zo zdroja v súbore. To však nie je koniec. Pamätajte, že na Macu môžu používatelia nahradiť ikony aplikácií, adresárov, dokumentov svojimi vlastnými, keďže na Macu je možné tieto „dôležité“ veci robiť napr. nahradenie novej ikony Slack predchádzajúcou. Na Haiku by ste mali považovať zdroj (v súbore) za pôvodnú ikonu, ktorá sa dodáva s aplikáciou, a atribút (v systéme súborov BFS) za niečo, čo používateľovi umožňuje vykonávať zmeny podľa vlastného uváženia (hoci, nápoveda, GUI na vloženie vlastnej ikony nad ikonu je voliteľné).
Kontrola atribútov systému súborov
S resaddr Je možné skontrolovať a nastaviť atribúty systému súborov.
/> resattr
Usage: resattr [ <options> ] -o <outFile> [ <inFile> ... ]
Reads resources from zero or more input files and adds them as attributes
to the specified output file, or (in reverse mode) reads attributes from
zero or more input files and adds them as resources to the specified output
file. If not existent the output file is created as an empty file.
(...)
Je to v podstate "lepidlo", ktoré vykonáva konverziu tam a späť medzi (spoľahlivými) zdrojmi a (rýchlymi) atribútmi súborového systému. A keďže systém očakáva príjem zdrojov a kopíruje automaticky, nebudem sa tým ďalej zaoberať.
Kúzlo hpkg balíkov
V súčasnosti (najčastejšie) sa na získanie programov na Haiku používajú balíčky .hpkg. Nenechajte sa zmiasť jednoduchým názvom: formát .hpkg funguje úplne inak ako iné formáty s podobnými názvami, s ktorými ste sa stretli, má skutočné superschopnosti.
Pri tradičných formátoch balíkov som bol kvôli tejto skutočnosti dlho rozrušený: stiahnete si jednu vec (balík) a ďalšia je nainštalovaná v systéme (súbory v balíku). Pri inštalácii balíka tradičným spôsobom je dosť ťažké spravovať súbory (napríklad ich mazať). A to všetko kvôli obsahu balenia rozptýlené po celom súborovom systémevrátane miest, kde bežný používateľ nemusí mať prístup na zápis. Vzniká tak celá trieda programov - správcov balíkov. Prenos už nainštalovaného softvéru, napríklad na iný počítač, vymeniteľný disk alebo súborový server, sa však stáva ešte zložitejším, ak nie úplne nemožným. Na typickom systéme založenom na Linuxe môže ľahko existovať niekoľko stoviek tisíc až miliónov jednotlivých súborov. Netreba dodávať, že je to krehké a pomalé, napríklad pri počiatočnej inštalácii systému, pri inštalácii, aktualizácii a odinštalovaní bežných balíkov a pri kopírovaní zavádzacieho zväzku (koreňového oddielu) na iné médium.
Pracujem na projekte AppImage, čiastočnej barličke pre aplikácie pre koncových používateľov. Toto je formát distribúcie softvéru, ktorý zhromažďuje aplikáciu a všetky jej závislosti do jedného obrazu systému súborov, ktorý sa pripojí pri spustení aplikácie. Výrazne to zjednodušuje, pretože rovnaký ImageMagick sa zrazu zmení na jeden súbor, ktorý v správcovi súborov spravujú obyčajní smrteľníci. Navrhovaná metóda funguje iba pre softvér, ako sa odráža v názve projektu, a má tiež svoj vlastný súbor problémov, pretože ľudia zapojení do dodávania softvéru pre Linux vždy ukazujú šípku na mňa.
Vráťme sa k Haiku. Podarilo sa nájsť optimálnu rovnováhu medzi tradičnými balenými systémami a poskytovaním softvéru založeného na obrázkoch? Jej balíčky .hpkg skutočne komprimované obrazy systému súborov. Keď sa systém spustí, jadro pripojí všetky nainštalované a aktívne balíky s približne nasledujúcimi správami jadra:
KERN: package_daemon [16042853: 924] active package: "gawk-4.2.1-1-x86_64.hpkg"
KERN: package_daemon [16043023: 924] active package: "ca_root_certificates_java-2019_01_23-1-any.hpkg"
KERN: package_daemon [16043232: 924] active package: "python-2.7.16-3-x86_64.hpkg"
KERN: package_daemon [16043405: 924] active package: "openjdk12_default-12.0.1.12-1-x86_64.hpkg"
KERN: package_daemon [16043611: 924] active package: "llvm_libs-5.0.0-3-x86_64.hpkg"
Skvelé, áno? Vydržte, bude ešte chladnejšie!
Existuje veľmi špeciálny balík:
KERN: package_daemon [16040020: 924] active package: "haiku-r1~beta1_hrev53242-1-x86_64.hpkg"
Obsahuje veľmi minimalistický operačný systém vrátane jadra. Verte tomu alebo nie, dokonca ani samotné jadro nie je odstránené zo zavádzacieho zväzku (koreňového oddielu), ale je starostlivo načítané na svoje miesto z balíka .hpkg. Wow! Už som spomenul, že si myslím, že časť celkovej prepracovanosti a konzistentnosti Haiku pochádza zo skutočnosti, že celý systém, od jadra a základného používateľského priestoru až po správu balíkov a runtime infraštruktúru, vyvíja spoločný tím jeden tím. Predstavte si, koľko rôznych skupín a tímov by si vyžadovalo spustenie niečoho takého na Linuxe [Predstavujem si projekt PuppyLinux - cca. prekladateľ]. Potom si predstavte, ako dlho bude trvať, kým sa tento prístup prevezme do distribúcií. Hovorí sa: zoberte jednoduchý problém, rozdeľte ho medzi rôznych interpretov a stane sa tak komplikovaným, že ho už nebude možné vyriešiť. Haiku mi v tomto prípade otvorilo oči. Myslím, že presne toto sa teraz deje na Linuxe (Linux je v tomto prípade súhrnný termín pre Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu stack).
Vrátenie systému pomocou hpkg
Ako často nastáva nasledujúca situácia: aktualizácia prebehla úspešne a potom sa ukáže, že niečo nefunguje tak, ako by malo? Ak používate konvenčných správcov balíkov, je ťažké vrátiť stav systému do bodu v čase pred nainštalovaním nových balíkov (napríklad v prípade, že sa niečo pokazilo). Niektoré systémy ponúkajú riešenia vo forme snímok systému súborov, ale sú dosť ťažkopádne a nepoužívajú sa na všetkých systémoch. Haiku to rieši pomocou balíkov .hpkg. Kedykoľvek sa balíky v systéme zmenia, staré balíky sa nevymažú, ale sú uložené v systéme v podadresároch ako /Haiku/system/packages/administrative/state-<...>/ neustále. Nedokončené operácie ukladajú svoje dáta do podadresárov /Haiku/system/packages/administrative/transaction-<...>/.
obsah /Haiku/system/packages/administrative. Adresáre „state...“ obsahujú textové súbory s názvami aktívnych balíkov a adresáre „transaction...“ obsahujú samotné balíky.
„Starý aktívny stav“, t.j. zoznam .hpkg balíčky aktívne pred zmenami sa zaznamenajú po každej operácii v správcovi súborov do textového súboru /Haiku/system/packages/administrative/state-<...>/activated-packages. Podobným spôsobom sa do textového súboru zapíše nový „aktívny stav“. /Haiku/system/packages/administrative/activated-packages.
adresár /Haiku/system/packages/administrative/state-<...>/ obsahuje iba textový súbor so zoznamom aktívnych balíkov tohto stavu (v prípade inštalácie balíkov bez odstránenia) a ak boli balíky odstránené alebo aktualizované - adresár stavu obsahuje staré verzie balíkov.
Keď sa systém nabootuje, na základe zoznamu balíkov sa rozhodne o aktivácii (pripojení) balíkov. Je to také jednoduché! Ak sa počas sťahovania niečo pokazí, môžete povedať správcovi sťahovania, aby použil iný, starší zoznam. Problém je vyriešený!
Haiku downloader. Každý vstupný bod zobrazuje zodpovedajúci „aktívny stav“
Páči sa mi prístup k jednoduchým textovým súborom ako zoznamu „aktívnych stavov“ s názvami, ktoré sú ľahko zrozumiteľné .hpkg. To je v ostrom kontraste s tým, že sú vyrobené pre stroje, nie pre ľudí. v hromade z OSTree alebo Flatpak v súborovom systéme (na rovnakej úrovni ako Microsoft GUID).
Zoznam aktívnych balíkov pre každý bod v čase
Konfiguračné údaje
Zrejme v katalógu /Haiku/system/packages/administrative/writable-files obsahuje konfiguračné súbory pre balíčky, ale je možné do nich zapisovať. Koniec koncov, ako si pamätáte, .hpkg namontované len na čítanie. Takže tieto súbory musia byť pred zápisom skopírované z balíkov. Má význam.
Integrácia GUI pre systém .hpkg
Poďme sa teraz pozrieť, ako tieto lesklé tašky .hpkg vyrovnať sa s integráciou do pracovného prostredia používateľa (UX). Koniec koncov, Haiku je určené na osobné použitie. Osobne som pri porovnávaní používateľskej skúsenosti s balíčkami nastavil latku vysoko .app na počítači Macintosh s rovnakými skúsenosťami .hpkg. Nebudem ani porovnávať situáciu s pracovnými prostrediami na Linuxe, pretože je to úplne hrozné v porovnaní s inými.
Do úvahy prichádzajú nasledujúce scenáre:
Chcem si pozrieť obsah balíka .hpkg
Chcem nainštalovať balík
Chcem odstrániť balík
Chcem odstrániť niečo, čo prišlo do systému ako súčasť balíka
Chcem skopírovať niečo, čo prišlo do systému ako súčasť balíka
Chcem si stiahnuť všetky závislosti balíka, ktoré nemusia byť súčasťou každej inštalácie Haiku (napríklad mám fyzicky izolovaný počítač bez prístupu na internet.)
Chcem svoje balíčky (alebo ich časť) presunúť samostatne na iné miesto, oddelene od zavádzacieho zväzku (koreňového oddielu) (pretože napríklad na ňom nemám dostatok miesta).
Toto by malo pokryť väčšinu hlavných prípadov z mojej každodennej práce. Nuž, začnime.
Kontrola obsahu balenia
Na Macu Jednoducho kliknem na balík pravým tlačidlom myši, otvorím ho a zobrazím obsah vo Finderi. Koniec koncov, v skutočnosti je to len prezlečený adresár! (Viem, že existujú balíčky .pkg pre časť systému, ktorá nie sú aplikáciami, ale bežní používatelia s nimi najčastejšie neinteragujú).
Na Haiku Kliknem pravým tlačidlom myši na balík a potom na „Obsah“, aby som zistil, čo je vo vnútri. Tu je však len zoznam súborov bez možnosti ich otvorenia dvojitým kliknutím.
Bolo by oveľa lepšie, keby existoval spôsob, ako (dočasne) namontovať balík .hpkg prezerať cez správcu súborov a používateľ by sa nemusel starať o detaily implementácie. (Mimochodom, môžete otvoriť .hpkg zabaliť do Expander, ktorý ho dokáže rozbaliť ako každý iný archív).
Rozhranie HaikuDepot vám umožňuje zobraziť zoznam súborov balíkov, ale neexistuje spôsob, ako zobraziť obsah napríklad dvojitým kliknutím na súbor README.md
V tejto kategórii vyhráva Mac, ale pridanie požadovanej funkcie HaikuDepot by nemalo byť príliš ťažké.
Inštalácia balíka cez GUI
Na Macu, väčšina obrazov diskov .dmg obsahujú balíčky .app. Dvakrát kliknite na obraz disku a potom skopírujte balík, napríklad pretiahnutím /Applications vo Finderi. Pre mňa je to samozrejmé, ale počul som, že niektorí nováčikovia to nemusia zvládnuť. V predvolenom nastavení Apple „navrhuje“ adresár pre celý systém /Applications (na NeXT to bolo sieťové aj individuálne), ale svoje aplikácie môžete jednoducho umiestniť na súborový server alebo do podadresára $HOME/Applications, ak sa ti to tak páči.
Na Haiku, dvakrát kliknite na balík a potom kliknite na „Inštalovať“, už to nemôže byť jednoduchšie. Zaujímalo by ma, čo sa stane, ak má balík závislosti, ktoré sú dostupné v HaikuPorts, ale ešte nie sú nainštalované. Na Linuxe naozaj nevedia, čo robiť v tejto situácii, ale riešenie je zrejmé - opýtajte sa používateľa, či potrebuje stiahnuť a nainštalovať závislosti. Presne to, čo robí Haiku.
Manuálne som stiahol balík 'sanity' a klikol naň, správca balíkov vie, odkiaľ získať jeho závislosti (za predpokladu, že úložiská sú už zaregistrované v systéme). Nie každá linuxová distribúcia to dokáže.
Ďalším spôsobom je použitie správcu súborov, stačí presunúť myšou .hpkg balík alebo v /Haiku/system/packages (predvolene pre celosystémovú inštaláciu) alebo v /Haiku/home/config/packages (pre individuálnu inštaláciu; nedostupné pri dvojitom kliknutí - stále ma na tomto mieste rozčuľuje slovo "config", ktoré je pre mňa v tomto prípade synonymom "nastavenia"). A koncept viacerých používateľov ešte nie je dostupný ani pre Haiku (asi preto je to také jednoduché – neviem, možno možnosti viacerých používateľov budú pre desktopové prostredie zbytočne komplikovať veci).
Haiku v tejto kategórii vyhráva, pretože dokáže pracovať nielen s aplikáciami, ale aj so systémovými programami.
Odstránenie balíka z GUI
Na Macu, musíte presunúť ikonu aplikácie do koša, a to je všetko. Jednoducho!
Na HaikuPo prvé, musíte nájsť, kde sa balík v systéme nachádza, pretože ho zriedka nainštalujete na správne miesto (systém robí všetko). Zvyčajne sa musíte pozrieť /Haiku/system/packages (s predvolenou inštaláciou pre celý systém) alebo v /Haiku/home/config/packages (Spomenul som, že „config“ je nesprávne pomenovanie?). Potom sa aplikácia jednoducho pretiahne do koša a je to.
Jednoducho! To by som však nepovedal. Tu je to, čo sa skutočne deje:
To sa stane, ak pretiahnete aplikáciu do koša /Haiku/system/packages
Práve som sa pokúsil presunúť moju včerajšiu aplikáciu „Hello World“ na QtQuickApp do koša. Nepokúšal som sa presunúť systémový adresár, a keďže všetky balíky sú nainštalované v systémovom adresári, nie je možné balík odstrániť .hpkg bez zmeny "jeho obsah". Bežný používateľ by sa zľakol a stlačil predvolene priradené tlačidlo „Zrušiť“.
Tento príspevok je starší ako 10 rokov. S najväčšou pravdepodobnosťou ho musíme nakonfigurovať tak, aby sa varovanie objavilo iba vtedy, keď sa presunie samotný balík. Bežní používatelia to aj tak nemusia robiť.
Dobre, možno by som to mal urobiť pomocou HaikuDepot? Dvakrát kliknem na balík /Haiku/system/packages, počkajte, kým sa zobrazí tlačidlo „Odinštalovať“. Nie, existuje (iba) „Inštalovať“. "Odinštalovať", kde si?
Len pre zábavu som sa pokúsil zistiť, čo by sa stalo, keby som klikol na „Inštalovať“ na už nainštalovanom balíku. Dopadá to takto:
Toto sa stane, ak sa pokúsite nainštalovať už nainštalovaný balík.
Ďalej sa zobrazí:
Ak v predchádzajúcom okne kliknete na „Použiť zmeny“, bude to vyzerať takto
Predpokladám, že ide o softvérovú chybu, odkaz na aplikáciu tam už je. [autor neuviedol link - cca. prekladateľ]
Rýchle riešenie: Ak je balík už vložený, pridajte tlačidlo „Odinštalovať“. /Haiku/system/packages, alebo v /Haiku/home/config/packages.
Pri prezeraní zoznamu balíkov nainštalovaných v HaikuDepot vidím svoj balík v zozname a môžem ho odstrániť.
V tejto kategórii víťazí Mac. Viem si však predstaviť, že pri správnom nastavení bude používateľská skúsenosť na Haiku lepšia ako na Macu. (Jeden z vývojárov to ohodnotil takto: „Menej ako hodinu na pridanie špecifikovanej funkcionality do HaikuDepot, ak viete trochu C++“, nejakí dobrovoľníci?)
Odstránenie niečoho z balíka
Pokúsme sa odstrániť samotnú aplikáciu, nie balík .hpkg, z ktorej pochádza (pochybujem, že pre „obyčajných smrteľníkov“ je v tom nejaký rozdiel).
Na Macu, používateľ v skutočnosti zvyčajne pracuje so súborom .dmgodkiaľ pochádza balík aplikácie .app. Zvyčajne obrázky .dmg sa zhromažďujú v adresári sťahovania a používateľ do nich skopíruje balíčky /Applications. Predpokladá sa, že mnohí používatelia sami nevedia, čo robia, túto hypotézu potvrdzuje bývalý zamestnanec Apple. (Jedna z vecí, ktoré sa mi na Macu nepáčia. A napríklad pri AppImage nie je rozdiel medzi aplikáciou a balíkom, v ktorom bola. Presuňte ikonu do koša = to je všetko. Jednoduché!)
Na Haiku, existuje aj rozdelenie medzi apps/ и packages/, takže pochybujem, že to bolo pre používateľov jasnejšie. Čo sa však stane, ak pretiahnete aplikáciu z apps/ Pridať do košíka:
Toto sa stane, keď sa pokúsite odstrániť aplikáciu prevzatú zo súboru .hpkg
Technicky je to správne (napokon, aplikácia je v prvom rade hostená na súborovom systéme iba na čítanie), ale pre používateľa to nie je obzvlášť užitočné.
Rýchle riešenie: namiesto toho navrhnite použiť GUI na odstránenie .hpkg
Len pre zaujímavosť som skúsil duplikovať aplikáciu stlačením Alt+D. Dostal som správu „Nie je možné presúvať alebo kopírovať objekty na zväzku iba na čítanie.“ A to všetko preto /system (okrem toho /system/packages и /system/settings) je bod pripojenia packagefs (pamätajte, ako sa zobrazuje vo výstupe df?). Bohužiaľ, výstup príkazu mount neobjasňuje situáciu (ako bolo povedané v jednom z predchádzajúcich článkov), mountvolume nezobrazuje to, čo hľadáte (zrejme balíky pripojené cez slučku .hpkg sa nepovažujú za "objemy") a tiež som zabudol na alternatívne príkazy.
V tejto kategórii okrem AppImage nevyhral nikto (ale ak mám byť úprimný, je to neobjektívny názor). Dá sa však predstaviť, že po úprave bude používateľská skúsenosť na Haiku lepšia ako na Macu.
Poznámka: musíte zistiť, čo je „zväzok“ vo vzťahu k „sekcii“. Toto je pravdepodobne podobný vzťah medzi „priečinkom“ a „adresárom“: väčšina adresárov sa v správcovi súborov zobrazuje ako priečinky, ale nie všetky (napríklad balíky považované za súbory). Robí zo mňa takéto zobrazovanie oficiálneho hlupáka?
Kopírovanie obsahu balíka do iného systému
Na Macu, hlúpo ťahám balík .appa keďže závislosti sú vo vnútri balíka, pohybujú sa spolu.
Na Haiku, pretiahnem aplikáciu, ale závislosti sa vôbec nespracúvajú.
Rýchle riešenie: Namiesto toho navrhneme pretiahnutie celého balíka `.hpkg spolu s prípadnými závislosťami.
V tejto kategórii jednoznačne víťazí Mac. Aspoň pre mňa, milovníka ich paradigmy. Mal by som to skopírovať do Haiku .hpkg namiesto aplikácie, ale toto mi systém neponúka...
Stiahnite si balík so všetkými jeho závislosťami
Nie každý stroj je neustále pripojený k sieti. Naopak, niektoré stroje (áno, pozerám na teba, moderné Windows, Mac a Linux) na toto zabúdajú. Je pre mňa dôležité, aby som mohol ísť napríklad do internetovej kaviarne, stiahnuť si softvér na vymeniteľný disk, vložiť tento disk do domáceho počítača a mať istotu, že všetko bude fungovať [riskantný chlapík, ktorý to robí na Windows... - približne. prekladateľ].
V dôsledku toho mám tendenciu skončiť s nesplnenými závislosťami na Windows a Linux o niečo častejšie ako zvyčajne.
Na Macu toto je zvyčajne jeden súbor, všetko, čo musíte urobiť, je stiahnuť .dmg. Najčastejšie nemá žiadne iné závislosti okrem tých, ktoré poskytuje samotný MacOS v predvolenom nastavení. Výnimkou sú zložité aplikácie, ktoré vyžadujú vhodné spúšťacie prostredie, napríklad java.
Na Haiku stiahnuť balík .hpkg Napríklad tá istá aplikácia v jazyku Java nemusí byť dostatočná, pretože Java môže alebo nemusí byť prítomná na cieľovom počítači. Existuje spôsob, ako stiahnuť všetky závislosti pre daný balík .hpkg, okrem tých, ktoré sú štandardne nainštalované v Haiku, a preto by mali byť na každom systéme Haiku?
Mac vyhráva túto kategóriu s malým náskokom.
Komentáre Mr. waddlesplash:
Napísať program na zhromažďovanie všetkých závislostí aplikácie ako sady balíkov .hpkg pre niekoho, kto pozná vnútorné fungovanie Haiku, stačí asi 15 minút. Pridanie podpory nie je také ťažké, ak je to skutočne potrebné. Ale pre mňa je to zriedkavá situácia.
Zatajme dych do ďalšieho článku z tejto série.
Presun balíkov na samostatné miesto
Ako som už písal, chcem umiestniť svoje balíčky .hpkg (dobre, alebo ich časť) na špeciálne miesto, oddelené od obvyklého umiestnenia na zavádzacom zväzku (koreňový oddiel). V bežnom (nie až tak teoretickom) prípade je to spôsobené tým, že mi neustále dochádza voľné miesto na mojich (zabudovaných) diskoch, bez ohľadu na to, aké sú veľké. A zvyčajne pripájam externé disky alebo sieťové zdieľania tam, kde sú umiestnené moje aplikácie.
Na Macu Len presúvam balíky .app na vymeniteľnú jednotku alebo sieťový adresár vo Finderi a je to. Stále môžem dvojitým kliknutím otvoriť aplikáciu ako normálne zo zavádzacieho zväzku. Len!
Na Haiku, ako mi bolo povedané, to sa dá dosiahnuť posunutím môjho .hpkg balíky na vymeniteľnú jednotku alebo sieťový adresár, ale potom musíte použiť niektoré nezdokumentované príkazy v konzole, aby ste ich mohli pripojiť do systému. Neviem, ako to urobiť iba pomocou GUI.
V tejto kategórii víťazí Mac.
Podľa p. waddlesplash:
Ide o optimalizáciu založenú na bežnom používaní. Ak bude dopyt od viacerých používateľov, zrealizujeme ho. V každom prípade je tu možnosť implementácie treťou stranou.
O tom si povieme v ďalšom článku.
Keď už hovoríme o sieťových adresároch, bolo by skvelé (tipujem, že LAN strany) mať jednoduché, objaviteľné celosieťové aplikácie (ako Zeroconf), ktoré by sa dali skopírovať na lokálny počítač alebo spustiť priamo z lokálnej siete. Vývojári majú samozrejme možnosť odhlásiť sa cez app_flags.
Záverečná správa o integrácii systému hpkg s GUI
Myslím si, že predovšetkým kvôli relatívnej novosti integrácie .hpkg GUI stále ponecháva veľa na želanie. Každopádne, existuje niekoľko vecí, ktoré by sa mohli zlepšiť z hľadiska UX...
Ešte jedna vec: Kernel Debug Land
Bolo by skvelé mať možnosť zadávať príkazy napríklad počas kernel paniky syslog | grep usb. No, na Haiku je to možné vďaka Kernel Debug Land. Ako môžete vidieť túto mágiu v akcii, ak všetko funguje tak, ako má, bez toho, aby ste sa dostali do jadrovej paniky? Jednoduché stlačením Alt+PrintScn+D (ladiaca mnemotechnická pomôcka). Hneď si spomeniem Programátorský kľúč, čo umožnilo pôvodným vývojárom Macintoshu vstúpiť do debuggera (ak bol, samozrejme, nainštalovaný).
Záver
Začínam chápať, že prepracovanosť systému Haiku pochádza zo skutočnosti, že prácu vykonáva jeden malý tím s jasným zameraním na pracovné prostredie, pričom všetky vrstvy systému sú dostupné.
Ostrý kontrast so svetom Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, kde je všetko rozbité na malé kúsky do takej miery, že abstrakcia sedí na abstrakcii a poháňa s barličkami.
Došlo aj k pochopeniu toho, ako systém .hpkg kombinuje osvedčené postupy tradičných správcov balíkov, Snappy, Flatpak, AppImage, dokonca aj btrfs, a spája ich s prístupom Macu „len funguje“.
Akoby sa mi v hlave niečo „preplo“ a ja som pochopil, ako funguje systém .hpkg vie, ako sa odkotúľať, len pri pohľade na ňu. Ale to nie som ja, ale krása a jednoduchosť systému. Veľa z toho je inšpirované duchom pôvodného Macu.
Áno, prehliadanie v prehliadači môže byť trhané a bežať ako slimák, aplikácie môžu chýbať (žiadne Gtk, Electron – vývojári dospeli k záveru, že so sofistikovanosťou neladia), úplne absentuje video a 3d akcelerácia, ale ja tento systém sa mi stále páči. Veď tieto veci sa dajú napraviť a skôr či neskôr sa objavia. Je to len otázka času a možno trochu červených očí.
Nemôžem vám ponúknuť pomoc, ale myslím, že to začne odteraz rok Haiku na ploche.
Náhodné problémy
Možno už existujú požiadavky, alebo ich mám otvoriť?
BeScreenCapture by mal byť schopný exportovať do GIF ako Peek. Dá sa to urobiť pomocou ffmpeg, ktorý je už dostupný pre Haiku. prihláška.
Softvér na snímanie obrazovky nedokáže zachytiť modálne okno, namiesto toho zachytí celú obrazovku
Snímky obrazovky nemôžete orezať pomocou nástroja na orezanie WonderBrush a potom uložiť výsledok do súboru
Nemám rád kurzor ručičky v Haiku, ale myslím si, že to súvisí s teplým nostalgickým pocitom. Toto je obzvlášť nepríjemné pri používaní nástroja na orezanie v Krite, pretože to vedie k nepresnému orezaniu (pozri snímky obrazovky modálnych dialógov v tomto článku). Zameriavací kurzor by bol úžasný. prihláška.
Skúste to sami! Koniec koncov, projekt Haiku poskytuje vygenerované obrázky na zavedenie z DVD alebo USB denná. Ak chcete nainštalovať, stačí stiahnuť obrázok a zapísať ho na flash disk pomocou ten, kto leptá
Máte nejaké otázky? Pozývame vás na rusky hovoriaci telegramový kanál.