Noutați

3 chei ale succesului pentru operațiunile de produs

Este oficial. Operațiunile cu produse sunt un lucru. O căutare rapidă pe Google va scoate o listă lungă de articole care laude tot ceea ce operațiunile de produs au de oferit, de la eficientizarea managerilor de produs până la colectarea și sinteza datelor. Când m-am ocupat pentru prima dată de operațiunile de produs la GitLab , nu existau prea multe definiții sau îndrumări pe acest subiect. Am înțeles ce înseamnă operațiunile de produs, deoarece „făceam asta” ca parte inseparabilă a rolurilor mele de management de produs și de lider de produs de câțiva ani. Dar nu am avut niciodată ocazia să mă concentrez doar pe operațiunile cu produse. Oricât de entuziasmat eram, eram și nervos. GitLab accelera spre o IPO și atât echipa de management al produsului, cât și produsul se aflau în modul de hiper creștere. Și, pentru început, echipele multifuncționale, de la distanță, erau în mișcare, sincronizate și asincrone, zi și noapte, pe tot globul. Așadar, am luat legătura cu colegii care și-au început deja călătoria operațiunilor de produs și am valorificat perspectiva, progresul și învățările pe care le-au împărtășit cu generozitate. Și, făcând asta, mi-am dat seama că toată lumea o făcea puțin diferit. Acum, doi ani și jumătate mai târziu, operațiunile cu produse sunt un lucru la GitLab. Și cea mai frecventă întrebare pe care o primesc de la colegii care mă adresează este: Cum pot configura operațiunile de produs pentru succes în organizația mea? Pentru a răspunde la această întrebare, voi presupune că toți dorim să fim conduși de produs și centrați pe client, iar „succesul” ar fi operațiunile de produs care ne ajută să ajungem acolo. Voi presupune, de asemenea, că suntem de acord cu sentimentul care a evoluat, definind responsabilitatea operațiunilor de produs pentru a se încadra în aceste domenii de bază: instrumente, date, experimentare, strategie și consilier de încredere. Deși nu există o singură formulă, voi împărtăși trei chei care au deschis ușile pentru ca operațiunile cu produse să aibă un impact și să crească cu GitLab. 1. Împuternicește operațiunile cu produse ca funcție proprie, cu un loc egal, alături de alte funcții care generează valoare La GitLab, desfășurăm operațiuni de produs ca o funcție independentă sub umbrela produsului. Linia directă de responsabilitate față de șeful tuturor produselor asigură că operațiunile de produs au conștientizarea, alinierea și responsabilitatea față de nevoile macro ale produsului și ale afacerii. Acest lucru permite, de asemenea, operațiunilor cu produse să mențină o viziune largă și imparțială, precum și nivelul corect de influență, pentru a dezvolta strategii/tactici care să servească produsul și afacerea fără favor față de niciun grup anume. Acest articol din Silicon Valley Product Group de Marty Cagan oferă un context mai util cu privire la motivul acestei abordări. 2. Faceți din operațiunile cu produse o operațiune mai întâi de oameni Înainte ca operațiunile cu produse să poată oferi eficiențe și instrumente care sunt utile pentru produs și afacere, operațiunile cu produse trebuie să înțeleagă toți clienții săi interni. În primul an, operațiunile de produs au luat formă la GitLab, o mare parte din energia mea s-a concentrat pe construirea de relații, nu numai cu membrii echipei de produs, ci și în întreaga organizație. A deveni un consilier de încredere înseamnă mai mult decât furnizarea de date, este vorba despre a simți durerea și de […]

Read More

Când căutarea simplității creează complexitate în conductele CI bazate pe containere

Într-un club de carte GitLab, am citit recent „ Legile simplității ”, o carte grozavă pe un subiect care m-a fascinat profund de mulți ani. Cartea conține un acronim care exprimă abordările de generare a simplității: SHE, care înseamnă „shrink, hide, inbody”. Aceste trei abordări pentru generarea simplității au toate un atribut comun: toate creează iluzii – nu eliminări. Am văzut această iluzie repetându-se în multe, multe tărâmuri de urmărire de mulți ani. Chiar și în limbajul uman, dezvoltarea vocabularului, jargonul și acronimele încapsulează pur și simplu lumi de complexitate care încă există, dar pot fi mai ușor de făcut referire într-o formă compactă care realizează SHE în lumea conceptelor. Orice iluzie are o limită sau o cortină unde în fața cortinei complexitatea poate fi rezolvată urmând reguli simple, dar, în spatele cortinei, complexitatea trebuie gestionată de un manager de scenă. De exemplu, când spectacolul de magie creează spectrul tăierii oamenilor în jumătate, ceea ce pare a fi o simplă cutie este de fapt un instrument extrem de elaborat. Nu numai asta, dar procesul de fabricație pentru o cutie simplă reală și pentru cutia de ferăstrău sunt semnificativ diferite în ceea ce privește complexitatea. Producerea complexității și rezultatul acesteia sunt, în esență, compromisul pentru ceea ce ar fi complexitatea din lumea reală de a tăia oamenii în jumătate și de a-i face să se vindece și să se ridice nevătămați imediat după. Pentru a aduce acest lucru în domeniul abilităților tehnice, luați în considerare că atunci când utilizați o componentă terță parte sau API pentru a adăuga funcționalitate, trebuie doar să cunoașteți parametrii pentru a obține rezultatul dorit. Persoanele care întrețin acea componentă sau API-ul trebuie să cunoască nivelul de detaliu al mecanicii cuantice despre cum să efectueze acea lucrare într-un mod fiabil și complet. Containerele Docker sunt un mecanism pentru încorporarea complexității și sunt utilizate în aplicații scalate și în CI bazat pe container. Când un inginer de automatizare CI/CD folosește CI bazat pe container, este posibil să facă lucrurile mai complexe și mai scumpe atunci când încearcă să facă exact invers. În esență, această postare este preocupată de modul în care se poate întâmpla ca urmărirea unei lumi mai simple prin containere să se transforme într-un antimodel – o inversare a rezultatelor dorite – de multe ori, fără ca noi să observăm că inversarea ne afectează productivitatea. Închisoarea unei paradigme este într-adevăr sigură. A doua lege a dinamicii complexității De-a lungul anilor, am ajuns să cred că căutarea reducerii complexității are caracteristici similare celei de-a doua lege a termodinamicii . Rezultatul net al unei schimbări între masă și energie are ca rezultat aceeași cantitate netă de masă și energie, dar raportul și forma lor s-au schimbat. În ceea ce voi inventa „A doua lege a dinamicii complexității”, complexitatea este în mod similar „conservată”, este doar reformată. Dacă complexitatea nu este eliminată prin simplificarea eforturilor, îi reducem impactul într-un domeniu dat prin schimbarea raportului dintre complexitate și simplitate pe fiecare parte a uneia sau mai multor perdele. Dar, din păcate, complexitatea nu a murit, doar s-a ascuns și acum este provocarea de management a altcuiva. Este important să nu te gândești la asta ca la o înșelăciune. Nu există nicio îndoială că ascunderea complexității are potențialul de câștiguri masive de eficiență atunci când lumea din spatele mecanismelor de ascundere […]

Read More

Lingo: un cadru de microlimbi Go pentru construirea de limbaje specifice domeniului

Limbile specifice domeniului (DSL) sunt limbi mici, concentrate, cu un domeniu îngust de aplicabilitate. DSL-urile sunt adaptate pentru domeniul lor țintă, astfel încât experții în domeniu să poată oficializa idei pe baza cunoștințelor și a experienței lor. Acest lucru face ca DSL-urile să fie instrumente puternice care pot fi utilizate în scopul creșterii eficienței programatorului, fiind mai expresive în domeniul lor țintă, în comparație cu limbajele de uz general și prin furnizarea de concepte pentru a reduce sarcina cognitivă a utilizatorilor lor. Luați în considerare problema însumării soldurilor diferitelor conturi bancare într-un fișier CSV. Un exemplu de fișier CSV este furnizat în exemplul de mai jos, unde prima coloană conține numele titularului de cont, iar a doua coloană conține soldul contului. name, balance Lisa, 100.30 Bert, 241.41 Maria, 151.13 Puteți rezolva problema însumării soldurilor folosind un limbaj de uz general, cum ar fi Ruby , ca în fragmentul de cod de mai jos. În afară de faptul că codul de mai jos nu este foarte robust, conține o mulțime de boilerplate care sunt irelevante pentru problema în cauză, adică însumarea soldurilor contului. #!/usr/bin/env ruby exit ( 1 ) if ARGV . empty? || ! File . exist? ( ARGV [ 0 ]) sum = 0 File . foreach ( ARGV [ 0 ]). each_with_index do | line , idx | next if idx == 0 sum += Float ( line . split ( ‘,’ )[ 1 ]) end puts sum . round ( 2 ) Mai jos este un exemplu de script AWK care rezolvă aceeași problemă. AWK este un DSL care a fost special conceput pentru a rezolva problemele legate de procesarea textului. #!/usr/bin/awk -f BEGIN { FS = “,” }{ sum += $2 } END { print sum } Programul Ruby are o dimensiune de 208 de caractere, în timp ce programul AWK are o dimensiune de 56. Programul AWK este de aproximativ 4 ori mai mic decât omologul său Ruby. În plus, implementarea AWK este mai robustă, fiind mai puțin predispusă la erori care pot apărea în fișierul CSV (de exemplu, linii noi goale, câmpuri de date formatate greșit). Diferența semnificativă în ceea ce privește dimensiunea ilustrează faptul că DSL-urile, fiind mai concentrate pe rezolvarea unor probleme specifice, își pot face utilizatorii mai productivi, scutindu-i de sarcina de a scrie cod standard și îngustând focalizarea limbajului asupra problemei în cauză. Unele DSL-uri populare pe care majoritatea dezvoltatorilor de software le folosesc în mod regulat includ expresii regulate pentru potrivirea modelelor, AWK pentru transformarea textului sau limbajul standard de interogare pentru interacțiunea cu bazele de date. Provocări la proiectarea limbilor specifice domeniului Crearea de prototipuri, proiectarea și evoluția DSL-urilor este un proces provocator. Din experiența noastră, acesta este un ciclu explorator în care prototipați în mod constant ideile, le încorporați în limbaj, le încercați în realitate, colectați feedback și îmbunătățiți DSL-ul pe baza feedback-ului. Atunci când proiectați un DSL, există multe componente care trebuie implementate și evoluate. La un nivel foarte înalt există două componente principale: lexer/parserul de limbă și procesorul de limbaj. Lexer/parser-ul este componenta care acceptă intrarea conform definiției limbii, care este de obicei specificată prin intermediul unei gramatici a limbii. Faza de analizare/lexare produce un arbore de sintaxă care este apoi transmis procesorului de limbaj. Un procesor de limbaj evaluează arborele de sintaxă. În exemplul […]

Read More

Modul în care ceea ce am învățat la KubeCon EU 2022 va avea impact asupra foilor noastre de parcurs pentru produse

După doi ani de doar evenimente virtuale KubeCon, echipa de produse GitLab a fost încântată să participe și să se întâlnească cu colegi, parteneri și multe altele din industria noastră la KubeCon EU 2022, care a avut loc în Valencia, Spania. Am fost prezenți cu patru lideri de produse, un dezvoltator de software și un cercetător UX. Această postare rezumă principalele noastre concluzii de la conferință, o experiență care ne va afecta foile de parcurs. Vom discuta următoarele subiecte: Platforme interne și GitOps Managementul secretelor Integrarea infrastructurii WebAssembly aka WASM Au existat 32 de tipuri de subiecte și mai multe evenimente de 0 zile la KubeCon. Multe discuții s-au concentrat pe câteva instrumente. Multe proiecte Cloud Native Computing Foundation ( CNCF ) au avut întâlniri ale comunității în aceste zile. Unele discuții au fost date IRL, iar altele au fost difuzate virtual cu întrebări și răspunsuri în direct. Au fost o varietate de subiecte și abordări. Au existat multe discuții și despre diferitele aspecte ale managementului clusterelor. Cu toate acestea, am lăsat acest subiect în mod intenționat, deoarece la GitLab dorim să ne concentrăm pe dezvoltatorii de software și să oferim o platformă DevOps care să le susțină munca. Managementul clusterelor este la un pas de această focalizare. Totuși, am observat câteva modele remarcabile, așa cum sunt evidențiate de cele patru elemente ale listei noastre. Ești invitat! Alăturați-vă nouă pe 23 iunie pentru evenimentul de lansare a GitLab 15 cu guruul DevOps Gene Kim și câțiva lideri GitLab. Vă vor arăta ce văd pentru viitorul DevOps și The One DevOps Platform. Platforme interne și GitOps Companiile doresc ca dezvoltatorii lor să se concentreze pe activitatea lor de bază. Ei creează platforme interne pentru a ascunde complexitatea operațiunilor din Zilele 0-2 de inginerii lor software și permit în continuare mișcarea „deplasare la stânga” a DevOps. Aceste platforme presupun adesea sudarea mai multor scule. Multe discuții au prezentat modul în care echipa sau compania respectivă și-a abordat problema platformei și ce instrumente au folosit, și de multe ori se putea simți transpirația de 18 luni a unei întregi echipe de platformă care încearcă să găsească o soluție. Aceste platforme folosesc fie un model bazat pe push-sau pull-ul pentru implementări. Nu apare nicio abordare unică din cauza aplicațiilor vechi și a cerințelor diferite. Deși există o definiție a GitOps oferită de inițiativa OpenGitOps , mai mulți prezentatori și-au oferit propriile definiții, inclusiv a implementărilor bazate pe pull. Am desfășurat un sondaj la scară largă legat de secrete la KubeCon și am aflat că utilizatorii ar dori ajutor cu fluxul de lucru Pipeline Authoring . Pe lângă cablarea instrumentelor, industria încă caută o abordare unificată a multi-chiriei (s-ar putea să nu existe una), iar uneori integrarea proceselor de securitate pare prea dificilă. Cum ne afectează acest lucru foaia de parcurs? Există mult potențial în construirea unei platforme folosită ca punct de plecare pentru platformele interne. Imaginați-vă un „instrument” care scurtează timpul necesar pentru a crea o platformă internă la zile sau săptămâni în loc de un an întreg. Aceasta este viziunea GitLab a platformei The One DevOps. Drept urmare, nu planificăm nicio schimbare în direcția noastră. Vom continua să investim în direcția de implementare recent începută pentru a oferi toate elementele de bază ale unei platforme într-un singur instrument și căutăm deja în mod […]

Read More

Terraform ca parte a lanțului de aprovizionare cu software, Partea 1 – Module și furnizori

Când vorbim despre securitatea Terraform, există multe resurse care acoperă aspectele de securitate ale infrastructurii din jurul anumitor configurații Terraform. Privind securitatea Terraform în sine și lucrurile care ar putea merge prost atunci când îl rulează, totuși, au o acoperire foarte mică până acum. Unele lucrări publicate anterior de care sunt la curent includ: „Furnizorii și modulele Terraform utilizate în configurația dvs. Terraform vor avea acces deplin la variabilele și starea Terraform dintr-un spațiu de lucru. Terraform Cloud nu poate împiedica furnizorii și modulele rău intenționați să exfiltreze aceste date sensibile. Vă recomandăm să utilizați numai module și furnizori de încredere în configurația dvs. Terraform. .” Postarea pe blog pe care o citiți este prima parte a unei serii de trei părți care examinează aspectele lanțului de aprovizionare ale Terraform și își propune să analizeze modulele și furnizorii Terraform rău intenționați. Voi oferi, de asemenea, recomandări cu privire la securizarea procesului de rulare a Terraform împotriva modulelor și furnizorilor deveniți necinstiți. Următoarele două bloguri din serie se vor baza pe aceste descoperiri și vor acoperi subiecte și vulnerabilități mai aprofundate. Securitatea furnizorului Furnizorii din Terraform sunt binare executabile, deci dacă un furnizor devine rău intenționat, cu siguranță este „game over”, în sensul că poate face orice permite sistemul de operare gazdă pe care rulează. Furnizorii trebuie să aibă o semnătură care este validată de Terraform la instalarea Furnizorului. Versiunea 0.14 Terraform creează un fișier de blocare a dependenței care înregistrează sumele de verificare ale furnizorilor utilizați în două formate diferite. sume de control zh și h1 Primul format , zh , este pur și simplu un hash SHA256 al fișierului zip care conține un furnizor pentru o anumită combinație de platformă OS/hardware. Hash-ul h1 este așa-numitul „ dirhash ” al directorului furnizorului. Deci, dacă ne uităm la următorul fișier de blocare .terraform.lock.hcl , putem observa cele două tipuri diferite de hashe-uri: # This file is maintained automatically by “terraform init”. # Manual edits may be lost in future updates. provider “registry.terraform.io/hashicorp/aws” { version = “4.11.0” hashes = [ “h1:JTgGUEVVuuv82X0ePjDM73f+ZM+NfLwb/GGNAOM0CdE=”, “zh:3e4634f4babcef402160ffb97f9f37e3e781313ceb7b7858fe4b7fc0e2e33e99”, “zh:3ff647aa88e71419480e3f51a4b40e3b0e2d66482bea97c0b4e75f37aa5ad1f1”, “zh:4680d16fbb85663034dc3677b402e9e78ab1d4040dd80603052817a96ec08911”, “zh:5190d03f43f7ad56dae0a7f0441a0f5b2590f42f6e07a724fe11dd50c42a12e4”, “zh:622426fcdbb927e7c198fe4b890a01a5aa312e462cd82ae1e302186eeac1d071”, “zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425”, “zh:b0b766a835c79f8dd58b93d25df8f37749f33cca2297ac088d402d718baddd9c”, “zh:b293cf26a02992b2167ed3f63711dc01221c4a5e2984b6c7c0c04a6155ab0526”, “zh:ca8e1f5c58fc838edb5fe7528aec3f2fcbaeabf808add0f401aee5073b61f17f”, “zh:e0d2ad2767c0134841d52394d180f8f3315c238949c8d11be39a214630e8d50e”, “zh:ece0d11c35a8537b662287e00af4d27a27eb9558353b133674af90ec11c818d3”, “zh:f7e1cd07ae883d3be01942dc2b0d516b9736a74e6037287ab19f616725c8f7e8”, ] } Intrările zh pot fi găsite și în versiunea v.4.11.0 a furnizorului în fișierul SHA256SUMS . Pentru a înțelege intrarea unică h1 dirhash, trebuie să aruncăm o privire la directorul furnizorului. În proiectul nostru Terraform este construit astfel: $ ls .terraform/providers/registry.terraform.io/hashicorp/aws/4.11.0/linux_amd64/ terraform-provider-aws_v4.11.0_x5 $ cd .terraform/providers/registry.terraform.io/hashicorp/aws/4.11.0/linux_amd64/ $ sha256sum terraform-provider-aws_v4.11.0_x5 34c03613d15861d492c2d826c251580c58de232be6e50066cb0a0bb8c87b48de terraform-provider-aws_v4.11.0_x5 $ sha256sum terraform-provider-aws_v4.11.0_x5 > /tmp/dirhash $ sha256sum /tmp/dirhash 253806504555baebfcd97d1e3e30ccef77fe64cf8d7cbc1bfc618d00e33409d1 /tmp/dirhash $ echo 253806504555baebfcd97d1e3e30ccef77fe64cf8d7cbc1bfc618d00e33409d1 | ruby -rbase64 -e ‘puts Base64.encode64 [STDIN.read.chomp].pack(“H*”)’ JTgGUEVVuuv82X0ePjDM73f+ZM+NfLwb/GGNAOM0CdE= dirhash -ul, numit h1 în fișierul de blocare, este creat dintr-o listă alfabetică de nume de sha256sum filename . Odată ce această listă este sumată din nou, sha256sum rezultat este luat în reprezentare binară și apoi convertit în Base64. Din perspectiva unui atacator, partea interesantă a fișierului de blocare este că poate conține mai multe hash-uri zh și h1 pentru fiecare furnizor. De asemenea, este de remarcat faptul că aceste două tipuri nu trebuie să aibă nicio relație. Dacă modificăm conținutul unui furnizor descărcat pe disc, putem pur și simplu să plasăm hash-ul h1 corespunzător lângă orice alt h1 din fișierul de blocare. Deoarece pot exista mai multe intrări, nu am întrerupe nicio instalare legitimă și am permite doar să listăm un director de furnizor modificat pe […]

Read More

Trei moduri în care schimbările actuale de paradigmă în tehnologie modelează viitorul industriei

Gemenii digitali , bazați pe tehnologii 4IR, sunt un factor esențial pentru Web3 în industrie. Acestea sunt deja utilizate cu diferite niveluri de completitate în multe industrii pentru a ajuta organizațiile să înțeleagă fluxurile de sistem, să anticipeze nevoile de întreținere, să reducă costurile operaționale și să sporească eficiența generală. „În mod ideal, doriți ca Web3 să vă revoluționeze fluxurile de lucru end-to-end, la nivel general, pentru fiecare persoană din organizația dumneavoastră. Dar cred că este mai degrabă cazul că vom găsi puncte de tracțiune, unde cineva poate începe în ciuda vântului în contra cu care ne confruntăm.” – Matt Fleckenstein, director senior, management de produs, Microsoft Mesh, Microsoft Fiind un lider al inovației, Vancouver Airport Authority (YVR) a dorit să se reinventeze ca o poartă pentru învățare, inovare și mișcare de idei noi în industriile dincolo de aviație. Rezultatul a fost un geamăn digital al terminalului și aerodromului său de pe Sea Island. Geamănul digital al facilităților YVR ajută la rezolvarea provocărilor precum instruirea, optimizarea, testarea, evaluarea impactului asupra mediului și planificarea pentru viitor – toate în timp ce permit aeroportului să funcționeze fără întrerupere. Conceput cu o mentalitate „în primul rând”, geamănul digital YVR oferă beneficii semnificative angajaților aeroportului, precum și comunității în general.

Read More

Unity și .NET, ce urmează?

Suportul .NET Standard 2.1 în Unity 2021 LTS ne permite să începem să modernizăm runtime-ul Unity în mai multe moduri. În prezent lucrăm la două îmbunătățiri. Îmbunătățirea modelului de programare async/wait . Async/wait este o abordare fundamentală de programare pentru scrierea codului de joc care trebuie să aștepte finalizarea unei operațiuni asincrone fără a bloca bucla principală a motorului. În 2011, înainte ca async/wait să fie obișnuit în .NET, Unity a introdus operații asincrone cu coroutine bazate pe iterator, dar această abordare este incompatibilă cu async/wait și poate fi mai puțin eficientă. Între timp, .NET Standard 2.1 a îmbunătățit suportul pentru async/wait în C# și .NET odată cu introducerea unei gestionări mai eficiente a operațiunilor asincrone/wait prin ValueTask și permițând propriul sistem asemănător sarcinii prin AsyncMethodBuilder. Acum putem profita de aceste îmbunătățiri, așa că lucrăm la activarea utilizării asincrone/așteptării cu operațiunile asincrone existente în Unity (cum ar fi așteptarea următorului cadru sau așteptarea finalizării UnityWebRequest). În primul pas, îmbunătățim suportul pentru anularea sarcinilor asincrone în așteptare atunci când un MonoBehavior este distrus sau când ieșim din modul Play utilizând jetoane de anulare . De asemenea, am lucrat îndeaproape cu cei mai mari contributori ai comunității, cum ar fi autorul UniTask , pentru a ne asigura că vor putea folosi aceste noi funcționalități. Reducerea alocărilor de memorie și a copiilor prin utilizarea Span. Deoarece Unity este un motor C++ cu un strat de scripting C#, există multe schimburi de date între cei doi. Acest lucru poate fi ineficient, deoarece adesea necesită fie copierea datelor înainte și înapoi, fie alocarea de noi obiecte gestionate. Span a fost introdus în C# 7.2 pentru a îmbunătăți astfel de scenarii și este disponibil implicit în .NET Standard 2.1. În ultimii ani, este posibil să fi auzit sau citit despre multe îmbunătățiri semnificative ale performanței aduse .NET Runtime datorită Span (consultați detaliile îmbunătățirilor în .NET Core 2.1 , .NET Core 3.0 , .NET 6 , .NET 6 ) . Dorim să profităm de utilizarea sa în Unity, deoarece aceasta va ajuta la reducerea alocărilor și, în consecință, Garbage Collection se întrerupe, îmbunătățind în același timp performanța generală a multor API-uri.

Read More

Fețe ale unității – Sharlene Tan

I-aș încuraja pe alții să păstreze mintea deschisă și să nu se oprească niciodată să învețe. Când eram student la facultate, nu mi-am imaginat niciodată că voi ajunge în industria jocurilor video, lucrând cu limbile și cuvântul scris. Pe măsură ce tehnologia evoluează, este greu de prezis ce locuri de muncă vor fi solicitate peste 10 ani. Mă bucur că călătoria mea în carieră m-a condus acolo unde sunt acum. Poți împărtăși câteva fapte amuzante despre tine? M-am născut și am crescut în Singapore, dar am trăit în multe locuri diferite: Austin, Houston, Dallas, Hakodate, Tokyo, Oita și, în prezent, Seattle. Îmi place să traduc versurile cântecelor japoneze în engleză și, de asemenea, îmi place foarte mult karaoke-ul. M-am întâlnit cu Jackie Chan de două ori – o dată într-un hotel din Canada și alta dată în Africa de Sud. El filma Cine sunt eu? pe vârful Muntelui Table.

Read More

Minutul Metaverse: Ediția Premiilor Auggie

Nu unul, nici două, dar toate experimentele găzduite în aplicația Petricore AR Experiments au fost create folosind Fundația AR a Unity. Această colecție capricioasă de activități include realizarea unei fotografii de familie, mângâierea unui câine virtual, amestecarea culorilor vopselei din lumea reală și multe altele. Această aplicație eclectică este o sărbătoare a AR. Jocul AR Paint Bucket este unul dintre experimentele noastre în care un jucător plasează o găleată de vopsea AR și trebuie să ia culori din lumea reală pentru a amesteca și potrivi o anumită culoare țintă. Inspirația noastră pentru aceasta a fost tendința TikTok a oamenilor care încearcă să ghicească culoarea amestecării vopselei. Am folosit Unity pentru a dezvolta jocul Paint Bucket, bazându-ne în principal pe AR Foundation. AR Foundation/Unity a făcut foarte ușor să sari și să construim ceva distractiv, care a fost scopul nostru cu aceste experimente. – Oliver Awat, Lead Designer & Senior Developer, Petricore

Read More

Fum, oglinzi și texturi derulante: în culisele lui TUNIC

Pentru a asigura o performanță optimă, Shouldice a folosit iluminare dinamică și iluminare globală (GI) în TUNIC și a luat în considerare cu atenție numărul de lumină: „Deoarece randarea amânată nu este acceptată cu camerele orto, numărul de lumină era ceva pe care trebuia să fiu atent. Am folosit GI precalculat pentru a face o mare parte din iluminare, mai degrabă decât lumini punctuale, și m-am sprijinit pe loturi pentru a menține apelurile la extragere scăzute.” Obișnuia să scrie shadere de mână, dar a decis să folosească shaderele bazate pe noduri Shader Forge pentru TUNIC . „Chiar dacă pot scrie cod, sunt o persoană destul de vizuală, așa că a fost eliberator să pot vedea previzualizări live și să-mi organizez gândurile în mod spațial”, continuă Shouldice. „Editorul de noduri a făcut clic cu creierul meu într-un mod foarte frumos. Este extrem de grozav și atât de distractiv!” De asemenea, Shouldice a folosit pe scară largă texturile de defilare pentru a ilumina elemente din lumea jocului, reducând substanțial complexitatea sarcinii, obținând în același timp rezultate superbe (și foarte performante). La începutul jocului, eroul lui TUNIC deschide o ușă de aur interacționând cu o statuie care emite un puls de lumină când este atinsă. Shouldice realizează acest efect utilizând câteva componente diferite în Editorul Unity și Shader Forge. Punctele inițiale de lumină – cunoscute sub numele de „starburst” – derivă din trei rețele animate, fiecare rotindu-se ușor desincronizat. Un „inel aură” în formă de gogoașă înconjoară aceste ochiuri și, proiectând o textură UV care se derulează de-a lungul acestui cilindru aplatizat, Shouldice face ca textura să defileze spre exterior, creând o strălucire radială. Pentru acest efect, coordonatele UV sunt derulate și multiplicate înainte de a fi inversate la sfârșit pentru a crea efectul strălucitor alb pe negru. Prin aplicarea texturii de defilare pe diferite rețele, Shouldice a reușit să schimbe comportamentul strălucirii. Într-un alt exemplu, el direcționează textura pe o plasă îngustă, în formă de con, pentru a crea efectul de coalescere a energiei magice către cer.

Read More