Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa

TL; DR: Haiku je operativni sistem posebno dizajniran za računare, tako da ima nekoliko trikova koji njegovo desktop okruženje čine mnogo boljim od ostalih. Ali kako to funkcionira?

Nedavno Otkrio sam Haiku, neočekivano dobar sistem. I dalje sam zadivljen koliko glatko radi, posebno u poređenju sa Linux desktop okruženjima. Danas ću pogledati ispod haube. Gdje je potrebno za dublje razumijevanje, napraviću poređenja sa originalnim Macintosh, Mac OS X i Linux desktop okruženjima (XDG standard sa freedesktop.org).

Resursi u ELF datotekama

Jučer sam saznao da IconOMatic može sačuvati ikone u rdef resursima u ELF izvršnim datotekama. Danas želim vidjeti kako to zaista funkcionira.

Resursi? Citat iz Bruce Horn, originalni autor Macintosh Finder-a i "otac" Macintosh Resource Manager-a:

Zabrinut sam zbog krute prirode tradicionalnog kodiranja. Za mene je sama ideja aplikacije zamrznute u kodu, bez mogućnosti da se bilo šta dinamički promijeni, najluđe divljaštvo. Trebalo bi biti moguće promijeniti što je više moguće u toku rada. Naravno, sam kod aplikacije se ne može promijeniti, ali sigurno se nešto može promijeniti bez ponovnog kompajliranja koda?

Na originalnom Macintosh-u, napravili su da ove datoteke imaju "odjeljak podataka" i "odjeljak resursa", što je učinilo nevjerovatno lakim spremanje stvari kao što su ikone, prijevodi i slično. u izvršnim datotekama.

Na Macu se ovo koristi ResEdit, grafički program za - iznenada - uređivanje resursa.

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Resedit na originalnom Macintosh-u

Kao rezultat toga, postalo je moguće uređivati ​​ikone, stavke menija, prijevode itd. dovoljno jednostavno, ali i dalje "putuju" sa aplikacijama.
U svakom slučaju, ovaj pristup je imao veliki nedostatak: radio je samo na Apple sistemima datoteka, što je bio jedan od razloga zašto je Apple napustio „odjeljak resursa“ kada je prešao na Mac OS X.
Na Mac OS X-u, Apple je želio rješenje neovisno o sistemu datoteka, pa su usvojili koncept paketa (od NeXT-a), direktorija koje upravitelj datoteka tretira kao "neprozirne objekte", poput datoteka, a ne direktorija. Bilo koji paket sa aplikacijom u formatu .app ima, između ostalog, fajl Info.plist (u nekoj vrsti Appleovog ekvivalenta JSON ili YAML) koji sadrži metapodatke aplikacije.

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Ključevi za datoteku Info.plist iz Mac OS X aplikacijskog paketa.

Resursi, kao što su ikone, UI datoteke i drugi, pohranjuju se u paketu kao datoteke. Koncept se zapravo vratio svojim korijenima u NeXT-u.

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Mathematica.app na NeXTSTEP 1.0 1989: pojavljuje se kao direktorij datoteka u terminalu, ali kao jedan objekt u grafičkom upravitelju datoteka.

Vratimo se BeOS-u, konceptima na kojima je Haiku zasnovan. Njegovi programeri, prilikom prelaska sa PEF (PowerPC) na ELF (x86) (isto kao što se koristi na Linuxu), odlučili su da dodaju odjeljak resursa na kraj ELF datoteka. Nije koristio svoj odgovarajući ELF odjeljak, već je jednostavno pridodat na kraj ELF datoteke. Kao rezultat programa strip a drugi iz binutila, ne svjesni toga, jednostavno su ga odsjekli. Stoga, kada dodajete resurse u ELF fajl na BeOS-u, bolje je ne manipulisati njime pomoću Linux alata.

Šta se sada dešava sa Haikuom? U osnovi, manje-više isto.

U teoriji, bilo bi moguće smjestiti resurse u željeni dio ELF-a. Prema programerima na #haiku kanalu na irc.freenode.net:

Sa ELF-om bi ova sekcija imala više smisla... jedini razlog zašto to ne radimo na taj način je zato što smo to uradili u BeOS-u."
I nema smisla to sada mijenjati.

Upravljanje resursima

Resursi su napisani u strukturiranom formatu „resursa“: u suštini lista resursa s veličinama, a zatim njihov sadržaj. sjetio sam se ar format.
Kako provjeriti resurse u Haikuu? Postoji li nešto poput ResEdita?
Prema dokumentaciju:

Da vidite resurse koji se nalaze u paketu aplikacije, možete prevući izvršnu datoteku u program kao što je Resourcer. Također možete otići na terminal i pokrenuti naredbu listres имя_файла.

Resourcer je dostupan u HaikuDepot-u, ali meni se jednostavno ruši.

Kako upravljati resursima u ELF datotekama? Koristeći rsrc и rdef. rdef fajlovi se prikupljaju u rsrc. File rdef se pohranjuje u formatu običnog teksta, tako da je mnogo lakše raditi s njim. Format datoteke rsrc dodan na kraj ELF datoteke. Hajde da probamo da igramo:

~> 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

Možete koristiti program xres za provjeru i 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.
(...)

Ok, hajde da probamo?

/> xres -l /Haiku/system/apps/WebPositive/Haiku/system/apps/WebPositive resources:type           ID        size  name
------ ----------- -----------  --------------------
'MIMS'           1          36  BEOS:APP_SIG
'APPF'           1           4  BEOS:APP_FLAGS
'MSGG'           1         421  BEOS:FILE_TYPES
'VICN'         101        7025  BEOS:ICON
'VICN'         201          91  kActionBack
'VICN'         202          91  kActionForward
'VICN'         203         300  kActionForward2
'VICN'         204         101  kActionStop
'VICN'         206         243  kActionGoStart
'MSGG'         205        1342  kActionGo
'APPV'           1         680  BEOS:APP_VERSION

Više o resursima i formatu rdef možete čitati ovdje.

Standardni tipovi resursa

Iako u resurse možete staviti bilo šta, postoji nekoliko definiranih standardnih tipova:

  • app_signature: MIME tip aplikacije, za mapiranje otvorenih datoteka, pokretanje, IPC, itd.
  • app_name_catalog_entry: Pošto je naziv aplikacije obično na engleskom, možete odrediti mjesta na kojima se nalaze prevedeni nazivi, tako da će korisnici različitih jezika po želji vidjeti prevedeni naziv aplikacije.
  • app_version: tačno ono što ste mislili
  • app_flags: označava registrar kako obraditi prijavu. Mislim da tu ima više nego što se na prvi pogled čini. Na primjer, postoji B_SINGLE_LAUNCH, što prisiljava sistem da pokrene novi proces aplikacije svaki put kada korisnik to zatraži (isti princip se koristi za većinu aplikacija na Linuxu). Jedi B_MULTIPLE_LAUNCH, što uzrokuje pokretanje procesa svaki fajl. Konačno postoji B_EXCLUSIVE_LAUNCH, što prisiljava sistem da pokreće samo jedan proces u isto vrijeme, bez obzira na to koliko često ga korisnici pokreću (na primjer, ovako radi Firefox na Linuxu; isti rezultat se može postići u Qt aplikacijama pomoću funkcije QtSingleApplication). Prijave sa B_EXCLUSIVE_LAUNCH su obaviješteni kada ih korisnik pokuša ponovo pokrenuti: na primjer, primaju putanju datoteke koju korisnik želi otvoriti uz njihovu pomoć.
  • vector_icon: Ikona vektorske aplikacije (BeOS nije imao vektorske ikone, većina aplikacija je umesto toga imala dve rasterske ikone u svojim izvršnim datotekama).

Naravno, možete dodati resurse sa bilo kojim željenim ID-ovima i tipovima, a zatim ih pročitati u samoj aplikaciji ili drugim aplikacijama koristeći klasu BResources. Ali prvo, pogledajmo fascinantnu temu ikona.

Vektorske ikone u haiku stilu

Naravno, nije samo Haiku izabrao najbolji format ikona, u ovom dijelu situacija sa Linux desktop okruženjima je daleko od idealne:

me@host:~$ ls /usr/share/icons/hicolor/
128x128  256x256  512x512           index.theme
160x160  28x28    64x64             scalable
16x16    32x32    72x72             symbolic
192x192  36x36    8x8
22x22    42x42    96x96
24x24    48x48    icon-theme.cache

Gledajući ovo već možete osjetiti o kakvom se komadu radi.

Naravno, postoji skalabilan, koji sadrži, kao što možete razumjeti, vektorske ikone. Zašto onda postoji još nešto? Zato što rezultat crtanja vektorske grafike u malim veličinama može biti manje nego idealan. Želio bih imati različite opcije optimizirane za različite veličine. U Linux desktop okruženjima, to se postiže rasipanjem ikona različitih veličina po sistemu datoteka.

me@host:~$ find /usr/share/icons/ -name 'firefox.*'
/usr/share/icons/HighContrast/16x16/apps/firefox.png
/usr/share/icons/HighContrast/22x22/apps/firefox.png
/usr/share/icons/HighContrast/24x24/apps/firefox.png
/usr/share/icons/HighContrast/256x256/apps/firefox.png
/usr/share/icons/HighContrast/32x32/apps/firefox.png
/usr/share/icons/HighContrast/48x48/apps/firefox.png
/usr/share/icons/elementary-xfce/apps/128/firefox.png
/usr/share/icons/elementary-xfce/apps/16/firefox.png
/usr/share/icons/elementary-xfce/apps/22/firefox.png
/usr/share/icons/elementary-xfce/apps/24/firefox.png
/usr/share/icons/elementary-xfce/apps/32/firefox.png
/usr/share/icons/elementary-xfce/apps/48/firefox.png
/usr/share/icons/elementary-xfce/apps/64/firefox.png
/usr/share/icons/elementary-xfce/apps/96/firefox.png
/usr/share/icons/hicolor/128x128/apps/firefox.png

Imajte na umu: ne postoji koncept različitih verzija Firefoxa. Stoga, nije moguće elegantno riješiti situaciju da imate više verzija aplikacije na sistemu.

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Različite ikone Firefoxa u različitim verzijama. Trenutno je nemoguće ovo riješiti u Linuxu bez raznih štaka.

Mac OS X to rješava malo suptilnije:

Mac:~ me$ find /Applications/Firefox.app | grep icns
/Applications/Firefox.app/Contents/MacOS/crashreporter.app
/Contents/Resources/crashreporter.icns
/Applications/Firefox.app/Contents/MacOS/updater.app/Contents/Resources/updater.icns
/Applications/Firefox.app/Contents/Resources/document.icns
/Applications/Firefox.app/Contents/Resources/firefox.icns

Vidi se da postoji jedan fajl firefox.icns u paketu Firefox.app, koji sadrži sve veličine tako da različite verzije iste aplikacije imaju različite ikone.
Mnogo bolje! Ikone putuju sa aplikacijom, svi resursi su u jednoj datoteci.

Vratimo se na Haiku. Zapanjujuće rješenje, bez izuzetaka. Prema dokumentaciju:

Razvijen je poseban HVIF format, visoko optimiziran za male veličine i brzo renderiranje. Stoga su naše ikone uglavnom mnogo manje nego u rasteru ili u široko korišćenom SVG formatu.

I još uvijek su optimizirani:

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Veličine ikona u HVIF u usporedbi s drugim formatima.

Razlika je reda veličine!

Ali magija se tu ne završava. Isti HVIF može prikazati različite nivoe detalja u zavisnosti od prikazane veličine, iako je to vektorski format.

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Različiti nivoi detalja (LOD) u zavisnosti od veličine rendera

Sada o nedostacima: ne možete uzeti SVG, baciti ga u ImageMagick i nazvati dan; morate proći kroz nekoliko ciklusa da biste kreirali ikonu u HVIF formatu. ovdje objašnjenja. Međutim, IconOMatic može uvesti SVG prilično nesavršeno; oko 90% SVG detalja se uvozi sa određenom verovatnoćom, preostalih 10% će morati da se konfigurišu i menjaju ručno. Pročitajte više o tome kako HVIF čini svoju magiju moći u blogu Leah Ganson

Dodavanje ikone u aplikaciju

Sada mogu dodati ikonu u kreirani paket zadnji put, uzimajući u obzir sve primljene informacije.
Pa, pošto trenutno nisam posebno nestrpljiv da nacrtam sopstvenu ikonu za svoju QtQuickApp „Hello, World“, izvlačim je iz Qt Creator-a.

/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

Provjerimo da li je ikona kopirana:

/Haiku/home> xres -l /Haiku/home/QtQuickApp/QtQuickApp/Haiku/home/QtQuickApp/QtQuickApp
resources:type           ID        size  name
------ ----------- -----------  --------------------
'VICN'         101      152238  BEOS:ICON

Izgleda dobro, ali zašto se ne pojavljuje kada se nova ikona kopira?

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Kopirana VICN:101:BEOS:ICONs se još ne koristi kao ikona aplikacije u upravitelju datoteka

Šta sam propustio?

Komentar programera:

Moramo kreirati fajl rdef sa svim resursima, a zatim izvršite naredbu rc имя.rdef, ovo će kreirati datoteku .rsrc. Zatim morate pokrenuti naredbu resattr -o имя_бинарника имя.rsrc. U najmanju ruku, koristim naredbe poput ovih za dodavanje ikona svojim skriptama.

Pa, htio sam stvoriti resurs, a ne atribut. Zaista sam zbunjen.

Pametno keširanje pomoću sistema datoteka

Otvaranje i čitanje ELF atributa je sporo. Kao što sam gore napisao, ikona je upisana kao resurs u samoj datoteci. Ova metoda je pouzdanija i omogućava vam da preživite kopiranje na drugi sistem datoteka. Međutim, tada se također kopira u atribut sistema datoteka, na primjer BEOS:ICON. Ovo radi samo na određenim sistemima datoteka, kao što je BFS. Ikone koje prikazuje sistem (u Tracker-u i Deskbar-u) se čitaju iz ovog proširenog atributa, jer ovo rješenje radi brzo. Na nekim mjestima (gdje brzina nije važna, na primjer, tipičan prozor „O“), sistem prima ikonu direktno iz resursa u datoteci. Ali ovo nije kraj. Zapamtite, na Mac-u korisnici mogu zamijeniti ikone aplikacija, direktorija, dokumenata svojim vlastitim, budući da je na Mac-u moguće raditi ove "važne" stvari, npr. zamjena nove Slack ikone prethodnom. Na Haiku-u biste trebali razmišljati o resursu (u datoteci) kao o originalnoj ikoni koja dolazi s aplikacijom, a o atributu (u BFS sistemu datoteka) kao o nečemu što korisniku omogućava da izvrši promjene po volji (iako, nagoveštaj, GUI za umetanje prilagođene ikone na vrh ikone je opciono). još nije implementirano po defaultu).

Provjera atributa sistema datoteka

Uz pomoć resaddr Moguće je provjeriti i postaviti atribute sistema datoteka.

/> 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.
(...)

To je u suštini "ljepilo" koje izvodi konverziju naprijed-nazad između (pouzdanih) resursa i (brzih) atributa sistema datoteka. A pošto sistem očekuje da će primiti resurse i automatski vrši kopiranje, neću dalje brinuti o tome.

Čarolija hpkg paketa

Trenutno (najčešće) se paketi koriste za dobijanje programa na Haikuu .hpkg. Neka vas jednostavno ime ne zavara: .hpkg format radi potpuno drugačije od drugih formata sa sličnim imenima na koje ste naišli, ima stvarne supermoći.

Sa tradicionalnim formatima paketa, dugo sam bio uznemiren zbog ove činjenice: preuzimate jednu stvar (paket), a druga se instalira na sistem (datoteke unutar paketa). Prilično je teško upravljati datotekama (na primjer, izbrisati ih) kada se paket instalira na tradicionalan način. A sve zbog sadržaja pakovanja raštrkane po čitavom sistemu datoteka, uključujući mjesta na kojima prosječan korisnik možda nema pristup pisanju. Ovo dovodi do čitave klase programa - menadžeri paketa. Ali prijenos već instaliranog softvera, na primjer, na drugu mašinu, prenosivi disk ili server datoteka postaje još teže, ako ne i potpuno nemoguće. Na tipičnom sistemu zasnovanom na Linuxu, lako može postojati nekoliko stotina hiljada do milion pojedinačnih fajlova. Nepotrebno je reći da je ovo i krhko i sporo, na primjer pri početnoj instalaciji sistema, kada instalirate, ažurirate i deinstalirate obične pakete i kada kopirate volumen za pokretanje (root particiju) na drugi medij.

Radim na projektu AppImage, djelomičnoj štaki za aplikacije krajnjih korisnika. Ovo je format distribucije softvera koji prikuplja aplikaciju i sve njene zavisnosti u jednu sliku sistema datoteka koja se montira kada se aplikacija pokrene. Značajno pojednostavljuje stvari, budući da se isti ImageMagick odjednom pretvara u jedan fajl, kojim upravljaju obični smrtnici u upravitelju datoteka. Predložena metoda radi samo za softver, kao što se vidi u nazivu projekta, a također ima svoj skup problema, budući da ljudi uključeni u isporuku softvera za Linux uvijek pokazuju strelicu na mene.

Vratimo se na Haiku. Da li je bilo moguće pronaći optimalnu ravnotežu između tradicionalnih sistema paketa i isporuke softvera zasnovanog na slikama? Njeni paketi .hpkg zapravo komprimirane slike sistema datoteka. Kada se sistem pokrene, kernel montira sve instalirane i aktivne pakete sa otprilike sljedećim porukama kernela:

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"

Kul, da? Držite se, biće još hladnije!

Postoji veoma poseban paket:

KERN: package_daemon [16040020:   924] active package: "haiku-r1~beta1_hrev53242-1-x86_64.hpkg"

Sadrži vrlo minimalistički operativni sistem, uključujući kernel. Vjerovali ili ne, čak ni sam kernel nije uklonjen iz volumena pokretanja (root particije), već se pažljivo učitava na svoje mjesto iz paketa .hpkg. Vau! Već sam spomenuo da mislim da dio ukupne sofisticiranosti i konzistentnosti Haikua potiče od činjenice da je cijeli sistem, od kernela i jezgra korisničkog prostora do upravljanja paketima i infrastrukture za vrijeme izvršavanja, razvijen u saradnji jednog tima. Zamislite koliko bi različitih grupa i timova bilo potrebno da se ovako nešto pokrene na Linuxu [Zamišljam PuppyLinux projekat - cca. prevodilac]. Zatim zamislite koliko će vremena trebati da se ovaj pristup usvoji u distribucijama. Kažu: uzmite jednostavan problem, podijelite ga između različitih izvođača i on će se toliko zakomplicirati da ga više neće biti moguće riješiti. Haiku mi je u ovom slučaju otvorio oči. Mislim da se upravo to sada dešava na Linuxu (Linux je u ovom slučaju zajednički izraz za Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu stek).

Vraćanje sistema koristeći hpkg

Koliko često se dešava sljedeća situacija: ažuriranje je bilo uspješno, a onda se ispostavi da nešto ne radi kako bi trebalo? Ako koristite konvencionalne menadžere paketa, teško je vratiti stanje sistema na trenutak prije nego što su novi paketi instalirani (na primjer, u slučaju da nešto pođe po zlu). Neki sistemi nude rješenja u obliku snimaka sistema datoteka, ali su prilično glomazni i ne koriste se na svim sistemima. Haiku to rješava pomoću paketa .hpkg. Kad god se paketi promijene u sistemu, stari paketi se ne brišu, već se pohranjuju u sistem u poddirektorijume kao što je /Haiku/system/packages/administrative/state-<...>/ stalno. Nedovršene operacije pohranjuju svoje podatke u poddirektorijume /Haiku/system/packages/administrative/transaction-<...>/.

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Sadržaj /Haiku/system/packages/administrative. Direktoriji “stanje...” sadrže tekstualne datoteke s imenima aktivnih paketa, a “transaction...” direktoriji sadrže same pakete.

"Staro aktivno stanje", tj. lista .hpkg paketi aktivni prije promjena se snimaju nakon svake operacije u upravitelju datoteka u tekstualnoj datoteci /Haiku/system/packages/administrative/state-<...>/activated-packages. Na sličan način, novo “aktivno stanje” se upisuje u tekstualnu datoteku /Haiku/system/packages/administrative/activated-packages.

Directory /Haiku/system/packages/administrative/state-<...>/ sadrži samo tekstualnu datoteku sa listom aktivnih paketa ovog stanja (u slučaju instalacije paketa bez uklanjanja), a ako su paketi uklonjeni ili ažurirani - direktorij stanja sadrži stare verzije paketa.

Kada se sistem pokrene, na osnovu liste paketa, donosi se odluka da se paketi aktiviraju (montiraju). To je tako jednostavno! Ako nešto pođe po zlu tokom preuzimanja, možete reći upravitelju preuzimanja da koristi drugu, stariju listu. Problem riješen!

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Haiku downloader. Svaka ulazna točka prikazuje odgovarajuće "aktivno stanje"

Sviđa mi se pristup jednostavnih tekstualnih datoteka kao liste "aktivnog stanja", s imenima koja su laka za razumijevanje .hpkg. Ovo je u potpunoj suprotnosti sa stvaranjem za-mašine-ne-za-ljude. u gomili iz OSTree ili Flatpak u sistemu datoteka (na istom nivou kao Microsoft GUID).

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Lista aktivnih paketa za svaki trenutak

Podaci o konfiguraciji

Očigledno, u katalogu /Haiku/system/packages/administrative/writable-files sadrži konfiguracijske datoteke za pakete, ali se u njih može pisati. Uostalom, kao što se sećate, .hpkg montiran samo za čitanje. Dakle, ove datoteke moraju biti kopirane iz paketa prije pisanja. Ima značenje.

GUI integracija za .hpkg sistem

Pogledajmo sada kako izgledaju ove sjajne torbe .hpkg nositi se s integracijom u radno okruženje korisnika (UX). Na kraju krajeva, Haiku je ipak namijenjen za ličnu upotrebu. Lično sam visoko postavio letvicu kada uporedim korisničko iskustvo sa paketima .app na Macintosh-u sa istim iskustvom .hpkg. Neću ni porediti situaciju sa radnim okruženjima na Linuxu, jer je apsolutno užasna u odnosu na bilo koja druga.

Na pamet mi padaju sljedeći scenariji:

  • Želim vidjeti sadržaj paketa .hpkg
  • Želim da instaliram paket
  • Želim da uklonim paket
  • Želim ukloniti nešto što je ušlo u sistem kao dio paketa
  • Želim kopirati nešto što je ušlo u sistem kao dio paketa
  • Želim da preuzmem sve zavisnosti paketa, što možda nije deo svake Haiku instalacije (na primer, imam fizički izolovanu mašinu bez pristupa internetu.)
  • Želim da premjestim svoje pakete (ili dio njih) odvojeno na drugu lokaciju, odvojeno od volumena za pokretanje (root particija) (jer, na primjer, nemam dovoljno prostora na njemu).

Ovo bi trebalo da pokrije većinu velikih slučajeva iz mog svakodnevnog rada. Pa, hajde da počnemo.

Provjera sadržaja paketa

Na Macu Jednostavno kliknem desnim tasterom miša na paket da ga otvorim i pogledam sadržaj u Finderu. Uostalom, u stvarnosti je to samo prikriveni direktorij! (Znam da postoje paketi .pkg za dio sistema koji nisu aplikacije, ali obični korisnici najčešće ne komuniciraju s njima).

On Haiku Desni klik na paket, zatim na "Sadržaj" da vidim šta je unutra. Ali evo samo liste datoteka bez mogućnosti otvaranja dvostrukim klikom.
Bilo bi mnogo bolje da postoji način da se (privremeno) montira paket .hpkg da se vidi kroz fajl menadžer, a korisnik ne bi morao da brine o detaljima implementacije. (Usput, možete otvoriti .hpkg upakovati u Expander, koji ga može raspakovati kao i svaku drugu arhivu).

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
HaikuDepotov interfejs vam omogućava da vidite listu fajlova paketa, ali ne postoji način da vidite sadržaj tako što ćete, na primer, dvaput kliknuti na README.md

Mac pobjeđuje u ovoj kategoriji, ali dodavanje HaikuDepot funkcionalnosti koju želite ne bi trebalo biti previše teško.

Instaliranje paketa putem GUI-ja

Na Macu, većina slika diska .dmg sadrže pakete .app. Dvaput kliknite na sliku diska, a zatim kopirajte paket, na primjer, prevlačenjem u njega /Applications Finder. Za mene se to podrazumijeva, ali čuo sam da neki novopridošlice možda neće moći ovo da podnesu. Podrazumevano, Apple "predlaže" sistemski direktorij /Applications (na NeXT-u je bilo umreženo kao i individualno), ali svoje aplikacije možete lako staviti na server datoteka ili u poddirektorijum $HOME/Applications, ako ti se tako sviđa.

On Haiku, dvaput kliknite na paket, zatim kliknite na "Instaliraj", ne može biti lakše. Pitam se šta se dešava ako paket ima zavisnosti koje su dostupne u HaikuPortovima, ali još uvek nisu instalirane. Na Linuxu zaista ne znaju što učiniti u ovoj situaciji, ali rješenje je očigledno - pitajte korisnika da li treba da preuzme i instalira ovisnosti. Upravo ono što Haiku radi.

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Ručno sam preuzeo 'sanity' paket i kliknuo na njega, menadžer paketa zna odakle da dobije njegove zavisnosti (pod pretpostavkom da su spremišta već registrovana u sistemu). Ne može svaka distribucija Linuxa to učiniti.

Drugi način je da koristite upravitelj datoteka, samo prevucite i ispustite .hpkg paketu ili u /Haiku/system/packages (za instalaciju na nivou sistema, podrazumevano), ili u /Haiku/home/config/packages (za individualnu instalaciju; nije dostupno kada se dvaput klikne - i dalje me nervira riječ "config" na ovom mjestu, koja je za mene u ovom slučaju sinonim za "postavke"). A koncept više korisnika još nije dostupan čak ni za Haiku (to je vjerovatno razlog zašto je tako jednostavan – ne znam, možda će višekorisničke mogućnosti nepotrebno zakomplikovati stvari za desktop okruženje).

Haiku pobjeđuje u ovoj kategoriji jer može raditi ne samo sa aplikacijama, već i sa sistemskim programima.

Uklanjanje paketa iz GUI

Na Macu, trebate prevući ikonu aplikacije u kantu za smeće i to je sve. Lako!

On Haiku, prvo morate pronaći gdje se paket nalazi na sistemu, jer ga rijetko instalirate na pravo mjesto (sistem radi sve). Obično morate pogledati /Haiku/system/packages (sa podrazumevanom instalacijom na nivou sistema) ili u /Haiku/home/config/packages (Jesam li spomenuo da je “config” pogrešan naziv?). Zatim se aplikacija jednostavno prevuče u kantu za smeće i to je to.
Lako! Međutim, ne bih to rekao. Evo šta se zaista dešava:

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Ovo se dešava ako prevučete aplikaciju u kantu za smeće /Haiku/system/packages

Upravo sam pokušao da premjestim svoju jučerašnju "Hello World" aplikaciju na QtQuickApp u smeće. Nisam pokušao da premjestim sistemski direktorij, a pošto su svi paketi instalirani u sistemskom direktoriju, nemoguće je ukloniti paket .hpkg bez promjene "njegov sadržaj". Običan korisnik bi se uplašio i pritisnuo dugme „Otkaži“ koje je podrazumevano dodeljeno.

Objašnjava gospodin. waddlesplash:

Ovaj post je star preko 10 godina. Najvjerovatnije ga moramo konfigurirati tako da se upozorenje pojavljuje samo kada se sam paket premjesti. Obični korisnici to ionako ne moraju da rade.

U redu, možda bih ovo trebao učiniti koristeći HaikuDepot? Dvaput kliknem na paket /Haiku/system/packages, čekajući da se pojavi dugme „Deinstaliraj“. Ne, postoji (samo) “Instaliraj”. "Deinstaliraj", gdje si?

Iz zabave, pokušao sam vidjeti šta će se dogoditi ako kliknem na “Instaliraj” na već instaliranom paketu. Ispada ovako:

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Ovo se dešava ako pokušate da instalirate već instalirani paket.

Sljedeće se pojavljuje:

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Ako kliknete na “Primijeni promjene” u prethodnom prozoru, to će izgledati ovako

Pretpostavljam da se radi o softverskoj grešci; link do aplikacije već postoji. [autor nije naveo link - cca. prevodilac]

Brzo rješenje: Dodajte dugme "Deinstaliraj" ako je paket već unutra /Haiku/system/packages, ili u /Haiku/home/config/packages.

Kada pregledam listu paketa instaliranih u HaikuDepotu, vidim svoj paket na listi i mogu da ga uklonim.

Mac pobjeđuje u ovoj kategoriji. Ali mogu zamisliti da će uz pravilno podešavanje korisničko iskustvo na Haiku-u biti bolje nego na Macu. (Jedan od programera je to ocijenio na sljedeći način: „Manje od sat vremena za dodavanje navedene funkcionalnosti u HaikuDepot, ako znate malo C++“, ima li dobrovoljaca?)

Uklanjanje nečega iz paketa

Pokušajmo ukloniti samu aplikaciju, a ne paket .hpkg, iz koje je došlo (sumnjam da za „obične smrtnike“ postoji razlika).

Na Macu, korisnik zapravo obično radi sa datotekom .dmgodakle dolazi paket aplikacije .app. Obično slike .dmg se akumuliraju u direktoriju preuzimanja, a pakete korisnik kopira /Applications. Vjeruje se da mnogi korisnici sami ne znaju što rade, ovu hipotezu potvrđuje i bivši Appleov zaposlenik. (Jedna od stvari koje mi se ne sviđaju na Macu. I, na primjer, sa AppImageom nema razlike između aplikacije i paketa u kojem je bila. Prevucite ikonu u smeće = to je to. Lako!)

On Haiku, postoji i podjela između apps/ и packages/, pa sumnjam da je ovo korisnicima postalo jasnije. Ali šta se dešava ako prevučete aplikaciju iz apps/ Dodaj u korpu:

Moj šesti dan sa Haikuom: ispod haube resursa, ikona i paketa
Ovo se dešava kada pokušate da uklonite aplikaciju preuzetu iz datoteke .hpkg

Tehnički je to ispravno (na kraju krajeva, aplikacija je prvenstveno hostovana na sistemu datoteka samo za čitanje), ali nije posebno korisna za korisnika.

Brzo rješenje: predložite korištenje GUI za brisanje umjesto toga .hpkg

Iz zabave, pokušao sam duplirati aplikaciju pritiskom na Alt+D. Dobio sam poruku "Nije moguće premjestiti ili kopirati objekte na volumenu samo za čitanje." I sve zato /system (osim toga /system/packages и /system/settings) je točka montiranja packagefs (zapamtite kako se pojavljuje u izlazu df?). Nažalost, izlaz naredbe mount ne razjašnjava situaciju (kao što je rečeno u jednom od prethodnih članaka), mountvolume ne prikazuje ono što tražite (očigledno paketi montirani putem petlje .hpkg se ne smatraju "volumenima"), a zaboravio sam i alternativne komande.

U ovoj kategoriji niko nije pobedio osim AppImage (ali ovo je, da budemo potpuno iskreni, pristrasno mišljenje). Međutim, može se zamisliti da će nakon podešavanja korisničko iskustvo na Haiku-u biti bolje nego na Macu.

Napomena: morate saznati šta je “volumen” u odnosu na “odjeljak”. Ovo je vjerovatno slično odnosu između "foldera" i "direktorijuma": većina direktorija se pojavljuje kao fascikle u upravitelju datotekama, ali ne svi (paketi koji se tretiraju kao datoteke, na primjer). Da li me ovakav prikaz čini zvaničnim štreberom?

Kopiranje sadržaja paketa na drugi sistem

Na Macu, glupo vučem paket .app, a pošto su zavisnosti unutar paketa, one se kreću zajedno.

On Haiku, povlačim aplikaciju, ali ovisnosti se uopće ne obrađuju.

Brzo rješenje: umjesto toga predložimo prevlačenje cijelog `.hpkg paketa, zajedno sa svim ovisnostima, ako ih ima.

Mac očito pobjeđuje u ovoj kategoriji. Barem za mene, ljubitelja njihove paradigme. Trebao bih ga kopirati u Haiku .hpkg umjesto aplikacije, ali mi sistem ovo ne nudi...

Preuzmite paket sa svim njegovim ovisnostima

Nije svaka mašina povezana na mrežu cijelo vrijeme. Naprotiv, neke mašine (da, gledam vas, moderni Windows, Mac i Linux) zaboravljaju na ovo. Bitno mi je da mogu da odem, na primer, u internet kafe, skinem softver na prenosivi drajv, ubacim ovaj drajv u svoj kucni racunar i da budem siguran da ce sve raditi [rizicno covek, radi ovo na Windows-u... - cca. prevodilac].

Kao rezultat toga, imam tendenciju da završim s neispunjenim ovisnostima o Windowsima i Linuxu malo češće nego inače.

Na Macu ovo je obično jedan fajl, sve što treba da uradite je da preuzmete .dmg. Najčešće, nema drugih zavisnosti osim onih koje sam MacOS obezbeđuje po defaultu. Izuzetak su složene aplikacije koje zahtijevaju odgovarajuće okruženje za izvršavanje, na primjer java.

On Haiku preuzimanje paketa .hpkg jer, recimo, ista aplikacija u Javi, možda neće biti dovoljna, jer java može, ali ne mora biti prisutna na ciljnoj mašini. Postoji li način za preuzimanje svih zavisnosti za dati paket .hpkg, osim onih koji su podrazumevano instalirani u Haiku-u i stoga bi trebalo da budu na svakom Haiku sistemu?

Mac pobjeđuje u ovoj kategoriji s malom razlikom.

Komentari Mr. waddlesplash:

Napisati program za prikupljanje svih zavisnosti aplikacije kao skup paketa .hpkg za nekoga ko je upoznat sa unutrašnjim radom Haikua, oko 15 minuta je dovoljno. Dodavanje podrške za ovo nije tako teško ako postoji stvarna potreba za tim. Ali za mene je ovo rijetka situacija.

Zadržimo dah do sljedećeg članka u ovoj seriji.

Premještanje paketa na odvojenu lokaciju

Kao što sam ranije napisao, želim da stavim svoje pakete .hpkg (dobro, ili dio njih) na posebno mjesto, odvojeno od uobičajenog smještaja na volumenu pokretanja (root particija). U uobičajenom (ne tako teoretskom) slučaju, razlog za to je što mi stalno ponestaje slobodnog prostora na mojim (ugrađenim) diskovima, ma koliko oni bili veliki. I obično povezujem eksterne diskove ili mrežna dijeljenja na kojima se nalaze moje aplikacije.

Na Macu Samo premeštam pakete .app na prenosivi disk ili mrežni direktorij u Finderu, i to je to. Još uvijek mogu dvaput kliknuti da otvorim aplikaciju kao i obično iz volumena pokretanja. Samo!

On Haiku, kao što mi je rečeno, to se može postići pomicanjem mog .hpkg pakete na prenosivi disk ili mrežni direktorij, ali tada morate koristiti neke nedokumentirane komande u konzoli da biste ih montirali na sistem. Ne znam kako to učiniti koristeći samo GUI.

Mac pobjeđuje u ovoj kategoriji.

Prema riječima mr. waddlesplash:

Ovo je optimizacija zasnovana na normalnoj upotrebi. Ako postoji potražnja od više korisnika, mi ćemo to implementirati. U svakom slučaju, postoji mogućnost implementacije treće strane.

O tome ćemo govoriti u sljedećem članku.

Govoreći o mrežnim direktorijima, bilo bi sjajno (pretpostavljam LAN stranke) imati jednostavne aplikacije koje se mogu otkriti širom mreže (kao što je Zeroconf) koje se mogu kopirati na lokalno računalo ili pokrenuti direktno s lokalne mreže. Naravno, programeri imaju opciju odustajanja putem app_flags.

Završni izvještaj o integraciji hpkg sistema sa GUI

Mislim da je to prvenstveno zbog relativne novine integracije .hpkg GUI i dalje ostavlja mnogo da se poželi. U svakom slučaju, postoji nekoliko stvari koje bi se mogle poboljšati u smislu UX-a...

Još jedna stvar: Kernel Debug Land

Bilo bi sjajno imati mogućnost unosa komandi tokom panike kernela, na primjer syslog | grep usb. Pa, na Haiku-u je to moguće zahvaljujući Kernel Debug Land-u. Kako možete vidjeti ovu magiju na djelu ako sve funkcionira kako treba bez upadanja u kernel paniku? Lako pritiskom na Alt+PrintScn+D (mnemonika za otklanjanje grešaka). Odmah se setim Programerski ključ, što je omogućilo originalnim Macintosh programerima da uđu u program za otklanjanje grešaka (ako je instaliran, naravno).

zaključak

Počinjem da shvatam da sofisticiranost Haiku sistema proizilazi iz činjenice da posao obavlja jedan mali tim sa jasnim fokusom na radno okruženje, sa dostupnim svim slojevima sistema.
Oštar kontrast sa svijetom Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu, gdje je sve razbijeno na male komadiće do te mjere da apstrakcija sjedi na apstrakciji i tjera se štakama.
Postojalo je i razumijevanje kako sistem .hpkg kombinuje najbolje prakse tradicionalnih menadžera paketa, Snappy, Flatpak, AppImage, čak i btrfs, i kombinuje ih sa Mac-ovim "samo radi" pristupom.

Kao da mi se nešto „prebacilo“ u glavi i shvatio sam kako je sistem .hpkg zna kako da se otkotrlja, samo gledajući je. Ali to nisam ja, nego ljepota i jednostavnost sistema. Mnogo toga je inspirisano duhom originalnog Mac-a.

Da, pregledavanje u pretraživaču može biti trzavo i raditi kao puž, aplikacije možda nedostaju (nema Gtk, Electron - programeri su zaključili da ne idu dobro sa sofisticiranošću), video i 3d ubrzanje mogu biti potpuno odsutni, ali ja i dalje sviđa mi se ovaj sistem. Uostalom, ove stvari se mogu ispraviti i one će se pojaviti prije ili kasnije. Samo je pitanje vremena i možda malo crvenih očiju.

Ne mogu ponuditi pomoć, ali mislim da će od sada krenuti godina Haikua na desktopu.

Slučajni problemi

Možda već ima zahtjeva ili da ih otvorim?

  • BeScreenCapture bi trebao moći izvesti u GIF kao što je Peek. Ovo se može uraditi pomoću ffmpeg, koji je već dostupan za Haiku. Aplikacija.
  • Softver za snimanje ekrana ne uspijeva snimiti modalni prozor, umjesto toga snima cijeli ekran
  • Ne možete izrezati snimke ekrana koristeći WonderBrush alat za izrezivanje, a zatim sačuvati rezultat u datoteku
  • Ne sviđa mi se posebno ručni kursor u haikuu, ali mislim da ima veze sa toplim nostalgičnim osjećajem. Ovo je posebno neugodno kada koristite alatku za izrezivanje u Kriti, jer rezultira nepreciznim izrezivanjem (pogledajte snimke modalnih dijaloga u ovom članku). Kursor ukrštenice bi bio divan. Aplikacija.

Probajte sami! Na kraju krajeva, Haiku projekat obezbeđuje slike za pokretanje sa DVD-a ili USB-a, generisane ежедневно. Da biste instalirali, samo preuzmite sliku i zapišite je na fleš disk pomoću Etcher

Imate bilo kakvih pitanja? Pozivamo vas na rusko govorno područje telegram kanal.

Pregled grešaka: Kako pucati sebi u nogu u C i C++. Haiku OS zbirka recepata

od autor prevod: ovo je šesti članak u seriji o haikuu.

Spisak članaka: Prvi Drugi Treći Četvrto Peto

izvor: www.habr.com

Dodajte komentar