
TL; DR: Haiku je operativni sustav posebno dizajniran za osobna računala, tako da ima nekoliko trikova koji njegovo desktop okruženje čine puno boljim od ostalih. Ali kako to funkcionira?
Otkrio sam Haiku, iznenađujuće dobar sustav. Još uvijek sam zadivljen koliko glatko radi, posebno u usporedbi s desktop okruženjima na LinuxDanas ću zaviriti "ispod haube". Gdje je potrebno za dublje razumijevanje, usporedit ću s originalnim Macintoshom, Mac OS X-om i desktop okruženjima. Linux (XDG standard s freedesktop.org).
Resursi u ELF datotekama
Jučer sam saznao da IconOMatic može spremati ikone u rdef resurse u ELF izvršne datoteke. Danas želim vidjeti kako to stvarno radi.
Resursi? iz , originalni autor Macintosh Findera i "otac" Macintosh Resource Managera:
Zabrinut sam zbog krute prirode tradicionalnog kodiranja. Za mene je sama ideja o aplikaciji zamrznutoj u kodu, bez mogućnosti da se bilo što dinamički mijenja, najluđe divljaštvo. Trebalo bi biti moguće promijeniti što je više moguće tijekom rada. Naravno, sam kod aplikacije se ne može promijeniti, ali sigurno se nešto može promijeniti bez ponovnog kompajliranja koda?
Na originalnom Macintoshu, ove datoteke su imale "odjeljak s podacima" i "odjeljak s resursima", što je nevjerojatno jednostavno učinilo spremanje stvari poput ikona, prijevoda i slično. u izvršnim datotekama.
Na Macu se ovo koristi , grafički program za - iznenada - uređivanje izvora.

ResEdit na izvornom Macintoshu
Kao rezultat toga, postalo je moguće uređivati ikone, stavke izbornika, prijevode itd. dovoljno lako, ali i dalje "putuju" s aplikacijama.
U svakom slučaju, ovaj pristup imao je veliku manu: radio je samo na Appleovim datotečnim sustavima, što je bio jedan od razloga zašto je Apple napustio “sekciju resursa” pri prelasku na Mac OS X.
Na Mac OS X, Apple je želio rješenje neovisno o datotečnom sustavu, pa su usvojili koncept paketa (od NeXT-a), direktorija koje upravitelj datoteka tretira kao "neprozirne objekte", poput datoteka, a ne direktorija. Svaki paket s aplikacijom u formatu .app ima između ostalog i spis Info.plist (u nekoj vrsti Appleovog ekvivalenta JSON ili YAML) koji sadrži metapodatke aplikacije.

Ključevi za datoteku Info.plist iz paketa aplikacija Mac OS X.
Resursi, kao što su ikone, UI datoteke i drugi, pohranjeni su u paketu kao datoteke. Koncept se zapravo vratio svojim korijenima u NeXT.

Mathematica.app na NeXTSTEP 1.0 1989.: pojavljuje se kao direktorij datoteka u terminalu, ali kao jedan objekt u grafičkom upravitelju datotekama.
Vratimo se BeOS-u, konceptima na kojima se temelji Haiku. Njegovi su se programeri, prilikom prelaska s PEF-a (PowerPC) na ELF (x86) (isti onaj koji se koristio na Linux) odlučili su dodati odjeljak resursa na kraj ELF datoteka. Za to nisu koristili vlastiti odgovarajući ELF odjeljak; jednostavno su ga dodali na kraj ELF datoteke. Kao rezultat toga, program strip i drugi binutili, nesvjesni toga, jednostavno su ga skratili. Stoga, nakon dodavanja resursa u ELF datoteku na BeOS-u, najbolje je ne manipulirati njome alatima. Linux.
Što se sada događa s Haikuom? Uglavnom, više-manje isto.
U teoriji, bilo bi moguće smjestiti resurse u željeni odjeljak ELF-a. Prema programerima na #haiku kanalu na irc.freenode.net:
S ELF-om odjeljak bi imao više smisla... jedini razlog zašto to ne radimo na taj način je zato što smo to radili u BeOS-u."
I nema smisla to sada mijenjati.
Upravljanje resursima
Resursi su napisani u strukturiranom formatu "resursa": u biti popis resursa s veličinama, a zatim njihovim sadržajem. Sjetio sam se .
Kako provjeriti resurse u Haikuu? Postoji li nešto poput ResEdita?
Prema :
Za pregled resursa koji se nalaze u paketu aplikacije, možete povući izvršnu datoteku na program poput . Također možete otići na terminal i pokrenuti naredbu
listres имя_файла.
Resourcer je dostupan u HaikuDepotu, ali meni se jednostavno ruši.
Kako upravljati resursima u ELF datotekama? Korištenje rsrc и rdef. rdef datoteke se skupljaju u rsrc. Datoteka rdef pohranjuje se u običnom tekstualnom formatu, pa je s njim puno lakše raditi. Format datoteke rsrc pridodat na kraj ELF datoteke. Pokušajmo igrati:
~> 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 licenseMož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.
(...)U redu, pokušajmo?
/> 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_VERSIONViše o resursima i formatu rdef možeš čitati .
Standardne vrste resursa
Iako možete staviti bilo što u resurse, postoji nekoliko definiranih standardnih tipova:
app_signature: vrsta MIME aplikacije, za mapiranje otvaranja datoteke, pokretanje, IPC, itd.app_name_catalog_entry: Budući da 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: točno ono što ste misliliapp_flags: označavaregistrarkako obraditi prijavu. Mislim da ima više nego što se čini na prvi pogled. Na primjer, postojiB_SINGLE_LAUNCH, što prisiljava sustav da pokrene novi proces aplikacije svaki put kada ga korisnik zatraži (isti princip se koristi za većinu aplikacija na LinuxJediteB_MULTIPLE_LAUNCH, uzrokujući pokretanje procesa svaku datoteku. Napokon postojiB_EXCLUSIVE_LAUNCH, što prisiljava sustav da istovremeno pokreće samo jedan proces, bez obzira na to koliko često ga korisnici pokreću (na primjer, ovako Firefox radi na Linux; isti rezultat se može postići u Qt aplikacijama korištenjem funkcije ). Prijave saB_EXCLUSIVE_LAUNCHdobivaju obavijest kada ih korisnik ponovno pokuša pokrenuti: na primjer, primaju putanju datoteke koju korisnik želi otvoriti uz njihovu pomoć.vector_icon: vektorska ikona aplikacije (BeOS nije imao vektorske ikone, većina aplikacija umjesto toga imala je dvije rasterske ikone u svojim izvršnim datotekama).
Naravno, možete dodati resurse s bilo kojim željenim ID-ovima i vrstama, a zatim ih pročitati u samoj aplikaciji ili drugim aplikacijama pomoću klase BResources. Ali prvo, pogledajmo fascinantnu temu ikona.
Vektorske ikone u haiku stilu
Naravno, nije samo Haiku odabrao najbolji format ikona, situacija s desktop okruženjima je također drugačija u tom pogledu. Linux daleko od idealnog:
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.cacheGledajući ovo već možete osjetiti o kakvom se komadu radi.
Naravno, tu je i skalabilna opcija koja, kao što možete zamisliti, sadrži vektorske ikone. Pa zašto postoji išta drugo? Jer renderiranje vektorske grafike u malim veličinama može biti manje idealno. Poželjno je imati različite opcije optimizirane za različite veličine. U desktop okruženjima Linux To se postiže raspršivanjem ikona različitih veličina po cijelom datotečnom sustavu.
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.pngImajte na umu: ne postoji koncept različitih verzija Firefoxa. Stoga nije moguće elegantno riješiti situaciju postojanja više verzija aplikacije na sustavu.

Ikone Firefoxa razlikuju se u različitim verzijama. To još nije moguće riješiti u Linux 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.icnsVidi se da postoji jedna datoteka firefox.icns u paketu Firefox.app, koji sadrži sve veličine tako da različite verzije iste aplikacije imaju različite ikone.
Puno bolje! Ikone putuju s aplikacijom, svi resursi su u jednoj datoteci.
Vratimo se haikuu. Nevjerojatno rješenje, bez iznimaka. Prema :
Razvijen je poseban HVIF format, visoko optimiziran za male veličine i brzo renderiranje. Stoga su naše ikone većinom puno manje nego u rasteru ili u široko korištenom SVG formatu.
I dalje su optimizirani:

Veličine ikona u HVIF-u u usporedbi s drugim formatima.
Razlika je reda veličine!
Ali magija ovdje ne završava. Isti HVIF može prikazati različite razine detalja ovisno o prikazanoj veličini, iako se radi o vektorskom formatu.

Različite razine detalja (LOD) ovisno o veličini renderiranja
Sada o nedostacima: ne možete uzeti SVG, baciti ga u ImageMagick i završiti s tim; morate proći kroz nekoliko ciklusa da biste stvorili ikonu u HVIF formatu. objašnjenja. Međutim, IconOMatic može uvoziti SVG prilično nesavršeno; oko 90% SVG detalja je uvezeno s određenom vjerojatnošću, preostalih 10% morat će se ručno konfigurirati i promijeniti. Pročitajte više o tome kako HVIF čini svoju magiju u blogu
Dodavanje ikone u aplikaciju
Sada mogu dodati ikonu kreiranom paketu , uzimajući u obzir sve dobivene informacije.
Pa, budući da trenutno nisam posebno željan crtati vlastitu ikonu za svoju QtQuickApp "Hello, World", izvlačim je iz Qt Creatora.
/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 CreatorProvjerimo je li ikona kopirana:
/Haiku/home> xres -l /Haiku/home/QtQuickApp/QtQuickApp/Haiku/home/QtQuickApp/QtQuickApp
resources:type ID size name
------ ----------- ----------- --------------------
'VICN' 101 152238 BEOS:ICONIzgleda dobro, ali zašto se nova ikona ne pojavljuje kad se kopira?

Kopirani VICN:101:BEOS:ICONs još se ne koristi kao ikona aplikacije u upravitelju datotekama
Što sam propustio?
Komentar programera:
Moramo stvoriti datoteku
rdefsa svim resursima, zatim izvršite naredburc имя.rdef, ovo će stvoriti datoteku.rsrc. Zatim trebate pokrenuti naredburesattr -o имя_бинарника имя.rsrc. U najmanju ruku, koristim naredbe poput ovih za dodavanje ikona svojim skriptama.
Pa, želio sam stvoriti resurs, a ne atribut. stvarno sam zbunjena.
Pametno predmemoriranje korištenjem datotečnog sustava
Otvaranje i čitanje ELF atributa je sporo. Kao što sam gore napisao, ikona je zapisana kao resurs u samoj datoteci. Ova metoda je pouzdanija i omogućuje vam da preživite kopiranje u drugi datotečni sustav. Međutim, tada se također kopira u atribut datotečnog sustava, na primjer BEOS:ICON. Ovo radi samo na određenim datotečnim sustavima, kao što je BFS. Ikone koje prikazuje sustav (u Trackeru i Deskbaru) čitaju se 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 programu"), sustav prima ikonu izravno iz izvora u datoteci. Ali ovo nije kraj. Podsjetimo, na Macu korisnici mogu zamijeniti ikone aplikacija, direktorija, dokumenata svojima, budući da je na Macu moguće raditi te “važne” stvari, npr. . Na Haikuu, trebali biste razmišljati o resursu (u datoteci) kao o izvornoj ikoni koja dolazi s aplikacijom, a o atributu (u BFS datotečnom sustavu) kao o nečemu što korisniku omogućuje unošenje promjena po želji (iako, savjet, GUI za umetanje prilagođene ikone na vrh ikone nije obavezan).još nije implementirano prema zadanim postavkama).
Provjera atributa datotečnog sustava
S resaddr Moguće je provjeriti i postaviti atribute datotečnog sustava.
/> 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 biti "ljepilo" koje izvodi pretvorbu naprijed-natrag između (pouzdanih) resursa i (brzih) atributa datotečnog sustava. A budući da sustav očekuje primanje resursa i kopira automatski, neću više brinuti o tome.
Čarolija hpkg paketa
Trenutno se (najčešće) paketi koriste za dobivanje programa na Haikuu .hpkg. Neka vas jednostavno ime ne zavara: format .hpkg radi potpuno drugačije od drugih formata sličnih naziva koje ste susreli, ima stvarne supermoći.
S tradicionalnim formatima paketa, dugo sam bio uzrujan zbog ove činjenice: preuzmete jednu stvar (paket), a druga se instalira na sustav (datoteke unutar paketa). Prilično je teško upravljati datotekama (na primjer, brisati ih) kada instalirate paket na tradicionalan način. A sve zbog sadržaja paketa razbacane po cijelom datotečnom sustavu, uključujući mjesta gdje prosječni korisnik možda nema pristup pisanju. Ovo dovodi do cijele klase programa - upravitelji paketaAli prijenos već instaliranog softvera, na primjer, na drugo računalo, prijenosni disk ili datotečni poslužitelj, postaje još teži, ako ne i potpuno nemoguć. U konvencionalnom sustavu temeljenom na Linux Stotine tisuća do milijuna zasebnih datoteka mogu lako postojati. Naravno, to je i krhko i sporo, na primjer tijekom početne instalacije sustava, prilikom instaliranja, ažuriranja i uklanjanja uobičajenih paketa te prilikom kopiranja boot volumena (korijenske particije) na drugi pogon.
Radim na projektu AppImage, djelomičnom zaobilaznom rješenju za aplikacije krajnjih korisnika. To je format distribucije softvera koji objedinjuje aplikaciju i sve njezine ovisnosti u jednu sliku datotečnog sustava, koja se montira prilikom pokretanja aplikacije. To znatno pojednostavljuje stvari, jer isti ImageMagick odjednom postaje jedna datoteka kojom obični smrtnici mogu upravljati u upravitelju datoteka. Predloženi pristup funkcionira samo za softver, kao što i samo ime projekta sugerira, a ima i svoj vlastiti skup problema, budući da ljudi koji distribuiraju softver za Linux, uvijek upiru prstom u mene.
Vratimo se haikuu. Je li bilo moguće pronaći optimalnu ravnotežu između tradicionalnih paketnih sustava i isporuke softvera temeljenog na slikama? Njezini paketi .hpkg zapravo komprimirane slike datotečnog sustava. Kada se sustav podigne, kernel montira sve instalirane i aktivne pakete s približno 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"Cool, je li? Držite se, bit će još cool!
Postoji vrlo poseban paket:
KERN: package_daemon [16040020: 924] active package: "haiku-r1~beta1_hrev53242-1-x86_64.hpkg"Sadrži vrlo minimalistički operativni sustav, uključujući kernel. Vjerovali ili ne, čak se ni sam kernel ne uklanja iz boot volumena (root particije), već se pažljivo učitava na svoje mjesto iz paketa .hpkgVau! Već sam spomenuo da, po mom mišljenju, dio Haikuove ukupne sofisticiranosti i koherentnosti proizlazi iz činjenice da cijeli sustav, od jezgre i temeljnog korisničkog prostora do upravljanja paketima i infrastrukture radne površine, zajednički razvija jedan tim. Zamislite koliko bi različitih grupa i timova bilo potrebno za pokretanje nečega ovakvog na temelju... Linux Zamišljam projekt ŠteneLinux, — napomena prevoditelja]Zatim zamislite koliko će vremena trebati da se ovaj pristup implementira u distribucijama. Kažu: uzmite jednostavan zadatak, podijelite ga među različitim programerima i postat će toliko složen da više neće biti rješiv. Haiku mi je u ovom slučaju otvorio oči. Mislim da se upravo to događa u Linux sada (Linux u ovom slučaju, to je skupni pojam koji označava stog Linux/GNU/dpkg/apt/systemd/Xorg/dbus/Gtk/GNOME/XDG/Ubuntu).
Vraćanje sustava korištenjem hpkg
Koliko često se događa sljedeća situacija: ažuriranje je bilo uspješno, a onda se ispostavi da nešto ne radi kako bi trebalo? Ako koristite konvencionalne upravitelje paketa, teško je vratiti stanje sustava na vrijeme prije instaliranja novih paketa (na primjer, u slučaju da je nešto pošlo po zlu). Neki sustavi nude zaobilazna rješenja u obliku snimaka datotečnog sustava, ali oni su prilično glomazni i ne koriste se na svim sustavima. Haiku to rješava pomoću paketa .hpkg. Kad god se paketi promijene u sustavu, stari paketi se ne brišu, već se pohranjuju u sustavu u poddirektorije poput /Haiku/system/packages/administrative/state-<...>/ konstantno. Nedovršene operacije pohranjuju svoje podatke u poddirektorije /Haiku/system/packages/administrative/transaction-<...>/.

sadržaj /Haiku/system/packages/administrative. Direktoriji “state...” sadrže tekstualne datoteke s nazivima aktivnih paketa, a direktoriji “transaction...” sadrže same pakete.
"Staro aktivno stanje", tj. popis .hpkg paketi aktivni prije promjena bilježe se nakon svake operacije u upravitelju datoteka u tekstualnu datoteku /Haiku/system/packages/administrative/state-<...>/activated-packages. Na sličan način, novo "aktivno stanje" zapisuje se u tekstualnu datoteku /Haiku/system/packages/administrative/activated-packages.
Adresar /Haiku/system/packages/administrative/state-<...>/ sadrži samo tekstualnu datoteku s popisom 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 sustav podigne, na temelju popisa paketa donosi se odluka o aktiviranju (mountanju) paketa. Tako je jednostavno! Ako nešto pođe po zlu tijekom preuzimanja, možete reći upravitelju preuzimanja da koristi drugi, stariji popis. Problem riješen!

Program za preuzimanje haikua. Svaka ulazna točka prikazuje odgovarajuće "aktivno stanje"
Sviđa mi se pristup jednostavnih tekstualnih datoteka kao popisa "aktivnog stanja", s nazivima koje je lako razumjeti .hpkg. To je u oštroj suprotnosti s tim da su izgrađeni za-strojeve-ne-za-ljude. iz OSTree ili Flatpak u datotečnom sustavu (na istoj razini kao Microsoft GUID).

Popis aktivnih paketa za svaku točku u vremenu
Podaci o konfiguraciji
Navodno, 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 sjećate, .hpkg montiran samo za čitanje. Stoga se ove datoteke moraju kopirati iz paketa prije pisanja. Ima značenje.
GUI integracija za .hpkg sustav
Pogledajmo sada kako ove sjajne torbe .hpkg nositi se s integracijom u radnu okolinu korisnika (UX). Uostalom, Haiku je ipak namijenjen za osobnu upotrebu. Osobno sam visoko postavio ljestvicu kada uspoređujem korisničko iskustvo s paketima .app na Macintosh s istim iskustvom na .hpkgNeću čak ni uspoređivati situaciju s radnim okruženjima na Linux, jer je apsolutno užasan u usporedbi s bilo kojim drugim.
Sljedeći scenariji padaju na pamet:
- Želim vidjeti sadržaj paketa
.hpkg - Želim instalirati paket
- Želim ukloniti paket
- Želim ukloniti nešto što je ušlo u sustav kao dio paketa
- Želim kopirati nešto što je ušlo u sustav kao dio paketa
- Želim preuzeti sve ovisnosti paketa, koji možda neće biti dio svake instalacije Haikua (na primjer, imam fizički izolirani stroj bez pristupa internetu.)
- Želim premjestiti svoje pakete (ili njihov dio) odvojeno na drugu lokaciju, odvojeno od boot volumena (root particije) (jer, na primjer, nemam dovoljno mjesta na njemu).
Ovo bi trebalo pokriti većinu glavnih slučajeva iz mog svakodnevnog rada. Pa, počnimo.
Provjera sadržaja paketa
Na Macu Jednostavno desnom tipkom miša kliknem na paket kako bih ga otvorio i pregledao sadržaj u Finderu. Uostalom, u stvarnosti je to samo prikriveni imenik! (Znam da ima paketa .pkg za dio sustava koji nisu aplikacije, ali obični korisnici najčešće s njima ne komuniciraju).
Na haikuu Desnom tipkom miša kliknem na paket, zatim kliknem na "Sadržaj" da vidim što je unutra. Ali ovdje je samo popis datoteka bez mogućnosti otvaranja dvostrukim klikom.
Bilo bi puno bolje da postoji način da (privremeno) montirate paket .hpkg pregledavati kroz upravitelj datoteka, a korisnik ne bi morao brinuti o detaljima implementacije. (Usput, možete otvoriti .hpkg pakirati u Expander, koji ga može raspakirati kao i svaku drugu arhivu).

Sučelje HaikuDepota omogućuje vam pregled popisa datoteka paketa, ali ne postoji način da pogledate sadržaj tako što ćete, na primjer, 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 diskova .dmg sadrže pakete .app. Dvaput kliknite na sliku diska, a zatim kopirajte paket, na primjer, povlačenjem u /Applications u Finderu. Za mene se to podrazumijeva, ali čuo sam da se neki početnici možda neće moći nositi s tim. Prema zadanim postavkama, Apple "predlaže" direktorij za cijeli sustav /Applications (na NeXT-u je bilo umreženo kao i pojedinačno), ali svoje aplikacije možete jednostavno staviti na poslužitelj datoteka ili u poddirektorij $HOME/Applications, ako vam se tako sviđa.
Na haikuu, dvaput kliknite paket, a zatim kliknite "Instaliraj" - ne može biti jednostavnije. Međutim, zanima me što se događa ako paket ima ovisnosti dostupne u HaikuPortsu, ali još nije instaliran. Linux Oni stvarno ne znaju što učiniti u ovoj situaciji, ali rješenje je očito: pitati korisnika treba li preuzeti i instalirati ovisnosti. To je upravo ono što Haiku radi.

Ručno sam preuzeo paket 'sanity' i kliknuo na njega; upravitelj paketa zna gdje pronaći njegove ovisnosti (pod pretpostavkom da su repozitoriji već registrirani u sustavu). Ne svaka distribucija Linux On to može učiniti.
Drugi način je korištenje upravitelja datoteka, samo povucite i ispustite .hpkg paket ili in /Haiku/system/packages (za instalaciju na cijelom sustavu, prema zadanim postavkama) ili in /Haiku/home/config/packages (za pojedinačnu instalaciju; nije dostupno dvoklikom - još uvijek me živcira riječ "config" na ovom mjestu, što je za mene u ovom slučaju sinonim za "settings"). A koncept više korisnika još nije dostupan za Haiku (vjerojatno je to razlog zašto je tako jednostavan - ne znam, možda će višekorisničke mogućnosti nepotrebno zakomplicirati stvari za desktop desktop okruženje).
Haiku pobjeđuje u ovoj kategoriji jer može raditi ne samo s aplikacijama, već i sa sistemskim programima.
Uklanjanje paketa iz GUI-ja
Na Macu, trebate odvući ikonu aplikacije u kantu za smeće i to je sve. Lako!
Na haikuu, prvo morate pronaći gdje se paket nalazi na sustavu, jer ga rijetko instalirate na pravo mjesto (sustav radi sve). Obično morate pogledati /Haiku/system/packages (sa zadanom instalacijom na cijelom sustavu) ili in /Haiku/home/config/packages (Jesam li spomenuo da je "config" pogrešan naziv?). Zatim se aplikacija jednostavno odvuče u kantu za smeće i to je to.
Lako! Međutim, ne bih to rekao. Evo što se stvarno događa:

To se događa ako aplikaciju povučete u kantu za smeće iz /Haiku/system/packages
Upravo sam pokušao premjestiti svoju jučerašnju aplikaciju "Hello World" na QtQuickAppu u smeće. Nisam pokušao premjestiti sistemski direktorij, a budući da 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 tipku "Odustani" koja je dodijeljena prema zadanim postavkama.
Objašnjava :
Ovaj post je star više od 10 godina. Najvjerojatnije ga moramo konfigurirati tako da se upozorenje pojavljuje samo kada se sam paket premjesti. Obični korisnici to ionako ne moraju činiti.
U redu, možda bih trebao ovo učiniti koristeći HaikuDepot? Dvaput kliknem na paket u /Haiku/system/packages, čekajući da se pojavi gumb "Deinstaliraj". Ne, postoji (samo) "Instaliraj". "Deinstaliraj", gdje si?
Samo radi zabave, pokušao sam vidjeti što bi se dogodilo ako kliknem "Instaliraj" na već instaliranom paketu. Ispada ovako:

To se događa ako pokušate instalirati već instalirani paket.
Sljedeće se pojavljuje:

Ako kliknete na “Primijeni promjene” u prethodnom prozoru, izgledat će ovako
Pretpostavljam da se radi o softverskoj pogrešci, poveznica na aplikaciju već postoji. [autor nije naveo link - cca. prevoditelj]
Brzo rješenje: dodajte gumb "Deinstaliraj" ako je paket već unutra
/Haiku/system/packages, ili u/Haiku/home/config/packages.
Kada gledam popis paketa instaliranih u HaikuDepotu, vidim svoj paket na popisu i mogu ga ukloniti.
Mac pobjeđuje u ovoj kategoriji. Ali mogu zamisliti da će uz pravilno postavljanje korisničko iskustvo na Haikuu biti bolje nego na Macu. (Jedan od programera je ovako ocijenio: "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, odakle je i došlo (sumnjam da za “obične smrtnike” postoji razlika).
Na Macu, korisnik zapravo obično radi s datotekom .dmgodakle dolazi paket aplikacije .app. Obično slike .dmg skupljaju se u direktoriju preuzimanja, a korisnik kopira pakete u njih /Applications. Vjeruje se da mnogi korisnici sami ne znaju što rade, a tu hipotezu potvrđuje i bivši zaposlenik Applea. (Jedna od stvari koje mi se ne sviđaju na Macu. I, na primjer, s AppImageom nema razlike između aplikacije i paketa u kojem je bila. Povucite ikonu u smeće = to je to. Jednostavno!)
Na haikuu, postoji i podjela između apps/ и packages/, pa sumnjam da je to korisnicima išta jasnije. Ali što se događa ako povučete aplikaciju iz apps/ Dodaj u košaricu:

To se događa kada pokušate ukloniti aplikaciju preuzetu iz datoteke .hpkg
Tehnički je to ispravno (uostalom, aplikacija se nalazi na datotečnom sustavu samo za čitanje), ali nije posebno korisna za korisnika.
Brzo rješenje: predložite korištenje GUI-ja za brisanje
.hpkg
Samo radi zabave, pokušao sam duplicirati aplikaciju pritiskom na Alt+D. Primio sam poruku "Nije moguće premjestiti ili kopirati objekte na jedinici samo za čitanje." A sve zato /system (osim /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 (navodno su paketi montirani putem petlje .hpkg ne smatraju se "volumenima"), a zaboravio sam i alternativne naredbe.
U ovoj kategoriji nitko nije pobijedio osim AppImagea (ali ovo je, da budemo potpuno iskreni, pristrano mišljenje). Međutim, može se zamisliti da će nakon podešavanja korisničko iskustvo na Haikuu biti bolje nego na Macu.
Napomena: trebate saznati što je "svezak" u odnosu na "odjeljak". Ovo je vjerojatno slično odnosu "mapa" prema "imeniku": većina direktorija se pojavljuje kao mape u upravitelju datotekama, ali ne svi (na primjer, paketi se tretiraju kao datoteke). Čini li me ovakav prikaz službenim štreberom?
Kopiranje sadržaja paketa u drugi sustav
Na Macu, glupo vučem paket .app, a budući da su ovisnosti unutar paketa, kreću se zajedno.
Na haikuu, povlačim aplikaciju, ali se ovisnosti uopće ne obrađuju.
Brzo rješenje: umjesto toga predložimo povlačenje cijelog paketa `.hpkg, zajedno sa svim ovisnostima, ako postoje.
Mac jasno pobjeđuje u ovoj kategoriji. Barem za mene, zaljubljenika u njihovu paradigmu. Trebao bih to kopirati u Haiku .hpkg umjesto aplikacije, ali sustav mi to ne nudi...
Preuzmite paket sa svim njegovim ovisnostima
Nije svaki stroj stalno spojen na internet. Zapravo, neki strojevi (da, mislim na tebe, moderni) Windows, Mac i Linux) zaboravi na ovo. Za mene je važno da mogu otići, na primjer, u internetski kafić, preuzeti softver na izmjenjivi disk, umetnuti taj disk u svoje kućno računalo i biti siguran da će sve raditi [rizičan tip, izvesti takvo što na Windows... — napomena prevoditelja].
Kao rezultat toga, malo češće nego inače, obično završim s nezadovoljenim ovisnostima o Windows и Linux.
Na Macu ovo je obično jedna datoteka, sve što trebate učiniti je preuzeti .dmg. Najčešće nema ovisnosti osim onih koje sam MacOS nudi prema zadanim postavkama. Izuzetak su složene aplikacije koje zahtijevaju odgovarajuće okruženje za izvršavanje, na primjer java.
Na haikuu preuzimanje paketa .hpkg za, recimo, istu aplikaciju u Javi, možda neće biti dovoljna, budući da Java može, ali i ne mora biti prisutna na ciljnom stroju. Postoji li način za preuzimanje svih ovisnosti za određeni paket .hpkg, osim onih koji su instalirani prema zadanim postavkama u Haikuu i stoga bi trebali biti na svakom Haiku sustavu?
Mac pobjeđuje u ovoj kategoriji s malom razlikom.
Komentari Mr. geganje:
Napisati program za prikupljanje svih ovisnosti aplikacije kao skupa paketa
.hpkgza nekoga tko je upoznat s unutarnjim funkcioniranjem haikua, dovoljno je oko 15 minuta. Dodavanje podrške za ovo nije tako teško ako za to postoji stvarna potreba. Ali za mene je to rijetka situacija.
Zadržimo dah do sljedećeg članka u ovoj seriji.
Premještanje paketa na drugu lokaciju
Kao što sam ranije napisao, želim staviti svoje pakete .hpkg (dobro, ili dio njih) na posebno mjesto, odvojeno od uobičajenog položaja na volumenu za pokretanje (root particija). U uobičajenom (ne toliko teoretskom) slučaju, razlog za to je što mi stalno ponestaje slobodnog prostora na (ugrađenim) diskovima, koliko god oni bili veliki. I obično povezujem vanjske pogone ili mrežne dijeljene uređaje na kojima se nalaze moje aplikacije.
Na Macu Samo premještam pakete .app na prijenosni disk ili mrežni direktorij u Finderu, i to je to. I dalje mogu dvaput kliknuti da otvorim aplikaciju kao što bih to inače činio iz volumena za pokretanje. Samo!
Na haikuu, kako mi je rečeno, to se može postići pomicanjem mog .hpkg pakete na prijenosni disk ili mrežni direktorij, ali tada trebate koristiti neke nedokumentirane naredbe u konzoli kako biste ih montirali na sustav. Ne znam kako to učiniti koristeći samo GUI.
Mac pobjeđuje u ovoj kategoriji.
Prema riječima mr. geganje:
Ovo je optimizacija temeljena na normalnoj upotrebi. Ako postoji potražnja od više od jednog 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 imenicima, bilo bi sjajno (pretpostavljam LAN partyje) imati jednostavne, vidljive, mrežne aplikacije (kao što je Zeroconf) koje se mogu kopirati na lokalno računalo ili pokrenuti izravno s lokalne mreže. Naravno, programeri imaju mogućnost isključivanja putem app_flags.
Završno izvješće o integraciji hpkg sustava s GUI-jem
Mislim da prvenstveno zbog relativne novosti integracije .hpkg GUI još uvijek ostavlja mnogo toga za poželjeti. 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 da možete unositi naredbe tijekom kernel panike, na primjer syslog | grep usb. Pa, na Haikuu je to moguće zahvaljujući Kernel Debug Landu. Kako možete vidjeti ovu magiju na djelu ako sve radi kako treba, a da ne upadnete u paniku kernela? Jednostavno pritiskom na Alt+PrintScn+D (mnemonika za otklanjanje pogrešaka). Odmah se sjećam , što je izvornim Macintosh programerima omogućilo ulazak u program za ispravljanje pogrešaka (ako je instaliran, naravno).
Zaključak
Počinjem shvaćati da sofisticiranost Haiku sustava dolazi iz činjenice da posao obavlja jedan mali tim s jasnim fokusom na radno okruženje, s dostupnim svim slojevima sustava.
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 vozi s potporama.
Bilo je i razumijevanja kako sustav .hpkg kombinira najbolju praksu tradicionalnih upravitelja paketima, Snappy, Flatpak, AppImage, čak i btrfs, te ih spaja s Macovim pristupom "samo radi".
Kao da mi se nešto “preklopilo” u glavi i shvatio sam kako je sustav .hpkg zna se otkotrljati, samo gledajući je. Ali nisam ja, nego ljepota i jednostavnost sustava. Velik dio toga inspiriran je duhom izvornog Maca.
Da, pregledavanje u pregledniku može biti trzavo i trčati kao puž, aplikacije mogu nedostajati (nema Gtk, Electron - programeri su zaključili da ne idu dobro uz sofisticiranost), video i 3d ubrzanje mogu biti potpuno odsutni, ali ja i dalje sviđa mi se ovaj sustav. Uostalom, te se stvari mogu ispraviti i one će se pojaviti prije ili kasnije. Samo je pitanje vremena i možda malo crvenila na očima.
Ne mogu ponuditi pomoć, ali mislim da će od sada početi godina haikua na radnoj površini.
Slučajni problemi
Možda već ima zahtjeva ili da ih otvorim?
- BeScreenCapture bi trebao moći izvoziti u GIF kao Peek. To se može učiniti koristeći ffmpeg, koji je već dostupan za Haiku. .
- Softver za snimanje zaslona ne uspijeva snimiti modalni prozor, već cijeli zaslon
- Ne možete izrezati snimke zaslona pomoću WonderBrushovog alata za izrezivanje i zatim spremiti rezultat u datoteku
- Ne sviđa mi se posebno ručni kursor u Haikuu, ali mislim da to ima veze s toplim nostalgičnim osjećajem. Ovo je posebno neugodno kada koristite alat za obrezivanje u Kriti, jer rezultira netočnim obrezivanjem (pogledajte snimke zaslona modalnih dijaloga u ovom članku). Kursor s križićem bio bi prekrasan. .
Pokušajte sami! Na kraju krajeva, projekt Haiku pruža generirane slike za dizanje s DVD-a ili USB-a . Za instalaciju samo preuzmite sliku i zapišite je na flash pogon pomoću
Imate li kakvih pitanja? Pozivamo vas na ruski govorni jezik .
Pregled grešaka:
Iz prijevod: ovo je šesti članak u seriji o haikuu.
Popis članaka:
Izvor: www.habr.com
