of user interfaces and parallelism
miercuri, 9 dec. 2009, 21:38
Încă de pe vremea când mașinile de scris erau la mare modă (prin secolul al XIX-lea se pare că ar fi fost înregistrat primul patent bine documentat pentru un asemenea instrument), iar mai apoi odată cu apariția computerelor, în mintea umană a început să se înrădăcineze adânc conceptul de instrument de scris bazat pe claviatură. Și în ciuda tuturor sculelor fancy care s-au tot perindat – cu mai mult sau mai puțin succes – pe piață în ultimii douăzeci de ani (de la mouse și trackball până la touchscreen), fără tastatură nu se poate face mare lucru în ziua de astăzi.
Însă dacă dăm ceasul cu câteva secole în urmă observăm că, în fapt, nu toate instrumentele merg pe același model de gândire. Mergând pe ideea că orice individ poate ajunge (cu suficientă voință și doar până la un anumit nivel) ambidextru, se poate observa că nu-i foarte complicat să scrii cu două creioane simultan. Fără să mai punem la socoteală faptul că o mare parte din instrumentele muzicale (pianul, tobele) cer oricum atenție distributivă. Sigur, exagerez la modul nesimțit, iar ideea ce îmi umblă ca nebuna prin metafizic e departe de a avea aplicații practice (sau cine știe), dar mi-a venit în timpul cursului de APD (Algoritmi Paraleli și Distribuiți, pentru non-ACSiști), deci e de înțeles. Și fiindcă tot sunt la modă soluțiile de virtualizare, sistemele multicore și alte paradigme de forma „more-in-one”, hai totuși să încercăm să gândim oleacă out of the box, cum îi place americanului să spună.
Cum ar fi să poți lega două tastaturi – controllere care să lucreze independent, cam ca și joystick-urile – la un singur calculator? În hardware nu ar fi foarte greu de realizat; nici la nivel de kernel/drivere, cât timp hardware-ul suportă. Buba mare stă la nivelul interfeței cu utilizatorul. Nici X11 și nici shell-ul grafic din Windows nu sunt gândite să suporte așa ceva. Mai mult, design-ul arhitecturii UI în sine nu prea permite o drăcie de genul ăsta. O singură fereastră poate fi focusată la un moment dat, iar dacă în lumea Unix există măcar conceptul de terminal (oarecum inutil în ceea ce privește un UI comun pentru două sau n tastaturi), în Windows nici vorbă de așa ceva. În practică, la ora actuală doar gândul de a proiecta un shell/UI/server grafic/etc. care să respecte condiția de mai sus se dovedește a fi un coșmar.
Așadar, cum ar arăta un UI pe care să poată lucra doi sau mai mulți utilizatori în paralel? Cum ar trebui să adaptăm software-ul – și vice-versa, cum ar trebui să ne adaptăm gândirea, pentru a putea realiza o astfel de interfață? Ar avea vreo utilitate practică? De-aici încolo, pe mine mă depășește problema.
Comentariile sunt dezactivate.
Comments
Apropos, totuși, X a primit de curînd o extensie ce îi permite să aibă mai multe Core Pointers. Poate te interesează 🙂
Sunt destul de clueless pe tema asta, recunosc. Probabil că nu m-am documentat destul, pur și simplu mi-a venit ideea și am pus-o pe hârtia virtuală. Am dat totuși un search după Multiple Core Pointers pe google și am observat că există o implementare pentru mai multe dispozitive mouse, destul de spectaculoasă.
În concluzie, dacă știe cineva link-uri/cărți legate de subiect (chiar și prin prisma faptului că ar fi posibilă realizarea lui și atât), shoot.
Se rezolva la nivel de Web prin conceptul de software colaborativ. Un exemplu tipic sunt aplicatiile de tip wiki care permit editarea in timp real a continutului. Terminalul (abstract) in acest sens e un alt browser. Un alt exemplu e dat de jocurile MMORPG. Abstractizind putin, orice aplicatie multi-user ofera suport pentru interactiunea paralela despre care se discuta in acest articol.
Sper ca interventia mea — poate inoportuna — a avut vreun sens 🙂
BTW, conceptul de terminal virtual, prezent in UNIX/Linux, in Windows e ‘rezolvat’ de „Terminal Services” — http://www.msterminalservices.org/
@Sabin: cred că spyked se referea la folosirea unei interfețe simultan de doi utilizatori – aceeași mașină, același monitor, doi utilizatori. Utilitatea nu o văd foarte mult, în afară de exemplele de multitouch și de emulare de instrumente de input (claviaturi virtuale) prin touch screen. În rest, sunt non-probleme.
Într-adevăr, cred că web-ul – software-ul multi-user în general – e exemplul cel mai bun de implementare de acest gen care funcționează. Întrebarea mai adâncă pe care mi-o pun eu este dacă avem nevoie de un nivel de abstractizare în plus (Google se pare că sunt de părere că da). Astea probabil că sunt întrebări la care timpul o să răspundă: aducem Internetul/Web-ul pe desktop, sau mutăm desktop-ul pe web?
Proiectarea unei interfețe grafice de tip paralel la nivelul sistemului de operare ar merge și peste rețea (la un nivel de scalabilitate mai mic sau mai mare) și ar putea implementa nativ și lucrul simultan cu mai multe dispozitive de intrare de același tip pe un singur calculator, deci ar lucra la ambele niveluri. Aici, probabil că ideea de subliniat e că felul în care privim interfețele grafice o să se schimbe într-un fel sau altul în viitorul apropiat (iar acea schimbare de paradigmă va fi adusă cel mai probabil de software-ul pe web).
În rest, probabil că ideea din post-ul de mai sus n-o să prindă, atât din cauza ariei restrânse de aplicații, dar și fiindcă scrierea software-ului ar da multă bătaie de cap. În plus, mai rar (decât mai acum câțiva ani) vezi în ziua de azi un grup de persoane care să dorească a-și petrece timpul în fața aceluiași monitor, lucru nu neapărat bun.
Cred că e o falsă problemă ideea de a lucra doi oameni simultan în fața unui singur monitor și implicit să ai un singur sistem de operare. Nu e nevoie de așa ceva – și cum se știe, nu prea facem lucruri ‘necerute’. Dacă găsești o nișă, însă… Pînă la urmă adaptarea interfețelor grafice vin din necesitate.
Nici nu ar fi o problemă foarte mare să ai două surse de intrare. Nu ar fi nici o problemă să le sincronizezi – gîndește-te că în cele din urmă jocurile fac asta de ceva vreme – două controllere legate la joc, în care doi oameni se bat – controllere interschimbabile fără nici o problemă 🙂
Web-ul e departe de ideea de multiuser pe care ai enunțat-o. Și mai aproape de ideea de multiuser a ta mi se pare X Windows – pornit ca un network protocol, gîndit pentru zeci de terminale legate la un singur server…
În cele din urmă, dincolo de fantezie stă crearea specificațiilor, și definirea problemei de rezolvat. De ce avem nevoie de multi-utilizare pe același monitor, de la două tastaturi/mouși?
Aici te contrazic. Web-ul/Internet-ul e un exemplu mai bun pentru cazul de față. Google Docs/Second Life șamd se pliază pe ceea ce spuneam, pe când X-ul tradițional permite conexiunea mai multor utilizatori care lucrează în principiu fără să interacționeze unul cu celălalt (Alice se joacă Quake în timp ce Bob programează). Până la urmă, ideea era să poți permite mai multor utilizatori să editeze un document word simultan, sau ceva de genul. Chestia-i trivială în jocuri, dar mai complicată în contextul unui UI proiectat inițial pentru un singur user. UI-ul de la Google Docs e plin de lipsuri, dar în contextul Web-ului pare că aduce un paradigm shift destul de important.
Și sunt de acord, am pus o falsă problemă (e mai mult o problemă de gândire cu ifs and whens, nimic serios, de altfel sper că cei care au citit n-au uitat să dea enable la simțul umorului înainte). Dar la fel de inutile mi se par și proiectele Natal și Surface de la Microsoft, de exemplu, numai că nu știi ce se poate face pe baza unei idei de genul. La urma urmei nici Fermi nu s-a gândit la microprocesoare când a început să lucreze la modelul statistic ce-i poartă numele.