Fedi.dev

Reader

Read the latest posts from Fedi.dev.

from IT sprendimų architektas Gytis Repečka

Prieš pasinerdami į konkrečius privalumus, pirmiausia išsiaiškinkime kas yra tas magiškasis „terminalas“.

Kas tas „terminalas“?

Dažnas labiau įgudęs kompiuterių vartotojas sako – komandinėje eilutėje galima daug dalykų padaryti greičiau ir patogiau, nei grafinėje aplinkoje. Taigi, kas slepiasi už tekstinių komandų eilutės, kuri prieinama visose šiuolaikinėse operacinėse sistemose?

Visos modernios operacinės sistemos turi branduolį – esminę sistemos dalį, kuri kontroliuoja aparatinės ir programinės įrangos sąveiką. Pats populiariausias šiuo metu branduolys – Linus Torvalds sukurtas „Kernel“ – atvirojo kodo „Linux“ operacinių sistemų pamatas. Jei operacinė sistema naudoja „Kernel“ – ją galima priskirti „Linux“ operacinių sistemų grupei. Kadangi „Kernel“, kaip atvirojo kodo projektą, gali naudoti bet kas, yra labai daug „Linux“ operacinių sistemų variantų, vadinamų distribucijomis. Distribuciją sudaro branduolys, grafinė aplinka ir paketų tvarkyklė.

Ką bendro turi „Linux“ ir „Android“?

„Google“ kuriama atvirojo kodo operacinė sistema „Android“ pagrinde orientuota į mobiliuosius telefonus ir planšetes, tačiau neretai sutinkama televizoriuose, TV priedėliuose ir visokiausiose media dėžutėse, kurias pakanka prijungti prie ekrano ir jau galima mėgautis programėlėmis ir žaidimais. „Android“ operacinė sistema paremta „Linux“ branduoliu (nors ir stipriai modifikuotu), todėl pilnavertiškai gali būti priskiriama „Linux“ šeimos operacinėms sistemos. Net „Android“ saugos modelis stipriai remiasi „Linux“ pasaulyje įprastais komponentais, kaip štai „SELinux“ žemo lygio prieigų valdymu. Visa „Android“ architektūra turi kur kas daugiau sluoksnių nei kitos „Linux“ OS, bet faktas išlieka – esminis komponentas – branduolys – yra tas pats.

Branduolys atskiria du dalykus:

  • branduolio erdvę (kernel namespace) – ji turi prieigą ir valdo aparatinę įrangą, kontroliuoja ryšius ir izoliaciją tarp procesų – veikia privilegijuotu režimu;
  • vartotojo erdvę (user namespace) – leidžia taikomąsias programas neprivilegijuotu režimu, t.y. konkrečiai programėlei suteikia (arba atima) prieigą prie tam tikrų resursų (failų sistemos katalogų, riboja sąveiką tik su tos pačios programos inicijuotais procesais ir kt).

Nuo pat pradžių „Android“ sistemoje buvo siekiama, kad vartotojai galėtų kontroliuoti tik vartotojo erdvę. Labiau patyrę (o kartais – tiesiog ambicingi) vartotojai mėgdavo įrenginius root'inti – „Linux“ terminais tai reiškia įgauti privilegijuotąsias teises. O realiai tai reiškia – turėti galimybę valdyti branduolio erdvę. Vis dėlto, technologijose saugumą galima maksimizuoti tik ribojant prieigą – suteikti tik tiek galimybių, kiek yra neišvengiamai būtina, bet ne daugiau.

Terminalas „Android'e“

Terminalas „Linux“ (ir į ją panašios architektūros) operacinėse sistemose paprastai siūlo tekstinę sąsają, kurioje rašomomis komandomis galima sąveikauti ne tik su vartotojo erdve, bet ir dalimi ar visa branduolio erdve. T. y. turint privilegijuotojo vartotojo (root) galimybę, galima tiesiai pasiekti net ir aparatinę įrangą. Terminalas – iš esmės programa, kuri leidžia sąveikauti su šiomis abiejomis erdvėmis. Populiariausia terminalo programa – „Bash“, o šiai programai skirti komandų rinkiniai vadinami Bash scenarijais (scripts).

Jau išsiaiškinome, kad „Android“ yra priskirtina „Linux“ grupei, tad kaip pasiekti terminalą savo išmaniajame telefone?

Kone visose „Linux“ grupės operacinėse sistemose terminalo aplikacija jau būna integruota, tačiau „Android“ pagal nutylėjimą tokios neteikia. Bene geriausias variantas – naudoti atvirojo kodo programėlę „Termux“. Dėl tam tikrų apribojimų (kurie šiuo metu sprendžiami), pilnavertė programėlės versija negali būti platinama „Google Play“ programėlių parduotuvėje, tad ją įsidiegti reikėtų per alternatyvią atvirojo kodo programėlių parduotuvę „F-droid“. „Termux“ programėlę galima rasti čia.

Įdiegus ir paleidus „Termux“ jus pasitiks tamsus tekstinis langas – tai yra vaizdelis, kurį iš tiesų turėtų rodyti Holivudo filmai, kai demonstruojami hakeriai ir kompiuterių specialistai 😄 Šiame lange galima pradėti rašyti komandas.

Bene svarbiausias terminalo privalumas – „vamzdžiai“

Viena iš galingiausių terminalo funkcijų – galimybė vienos programos darbo rezultatą perduoti kitai ir taip suformuoti visą veiksmų grandinę, kurią galima išsaugoti Bash scenarijuje ir labai lengvai pakartotinai paleisti prireikus. Toks rezultato perdavimas iš vienos programos į kitą vadinamas pipe'inimu ir žymimas simboliu „|“, angliškai vadinamu pipe (lietuviškai tai galėtų būti vamzdis).

Konkretus pavyzdys

Pvz.: mes galime prisijungti prie internetinės sistemos programavimo/integracijų sąsajos (API), pasiimti iš jos informaciją, ją transformuoti savaip ir įrašyti į failą. Šiems veiksmams atlikti mums reikės kelių terminale veikiančių programų:

  • curl – prisijungti prie internete veikiančio serverio, teikiančio informaciją per API;
  • jq – kadangi API dažniausiai priima ir pateikia informaciją „JSON“ formatu, pasinaudosime galinga priemone šiam formatui įvairiapusiškai transformuoti;
  • ir panaudosime terminalo komandą įrašyti rezultatą į failą.

Komandos būtų tokios:

Prisijungiame adresu, kuris parodo informaciją apie mano naudojamą federuotą soc. tinklo serverį:

curl "https://social.gyt.is/nodeinfo/2.0"

Gautas rezultatas – JSON dokumentas, atrodantis taip:

{
  "version": "2.0",
  "software": {
    "name": "gotosocial",
    "version": "0.16.0+git-f1cbf6f"
  },
  "protocols": [
    "activitypub"
  ],
  "services": {
    "inbound": [],
    "outbound": []
  },
  "openRegistrations": false,
  "usage": {
    "users": {
      "total": 2
    },
    "localPosts": 2084
  },
  "metadata": {}
}

Jis nėra labai gražus (nes skirtas ne žmonėms, o automatizuotam apdorojimui), tad panaudokim jq ir pasiimkim tik serverio pavadinimą ir versiją, pridėję savo tekstą. Ir tuo pačiu, kadangi jau žinom kaip pasiimti duomenis su curl, rezultatą nukreipkime ne į ekraną (pagal nutylėjimą), o į kitą programą – šiuo atveju, JSON apdorojimo įrankį jq:

curl "https://social.gyt.is/nodeinfo/2.0" | jq -r '"Programa: " + .software.name + ", versija: " + .software.version'

Rezultatas mus pradžiugins:

Programa: gotosocial, versija: 0.16.0+git-f1cbf6f

Suformavome žmogui lengvai skaitomą informaciją. Tad dabar ją nukreipkime į failą. Tą terminale galima padaryti vietoje vamzdžio naudojant „>“:

curl "https://social.gyt.is/nodeinfo/2.0" | jq -r '"Programa: " + .software.name + ", versija: " + .software.version' > informacija.txt

Taigi, kataloge, kuriame esame, bus sukurtas failas informacija.txt, į kurį ir nuguls rezultatas.

Kas toliau?

Įrankiai curl ir jq yra tik keli iš galybės: tekstus padės apdoroti grep ir awk, pereiti į kitą katalogą padės cd, o atvaizduoti failų sąrašą kataloge – ls.

Kituose straipsniuose apie panaudojimo atvejus papasakosiu plačiau 🤓

Šiuo tekstu pirmiausia dalinausi „Samsung“ bendruomenėje.

#linux #kernel #samsung #samsungcommunity

 
Skaityti daugiau...

from Gytis Repečka

Microsoft Teams is annoyingly popular videoconferencing tool in enterprises, public events and all kinds of communities. Unfortunately the tool is not inteded to work on ethical software, such as Firefox running on Linux operating systems.

In the end of 2019 Microsoft announced availability of Teams client for Linux. Debian (.deb) and Red Hat (.rpm) flavors were available for download. But curious users were quick to notice Linux client did not receive functionality to match fat-client offered for Windows or even macOS.

Further on Linux client stopped receiving updates and on December, 2022 it was removed – download page started recommending web version of Microsoft Teams.

There is a problem, however – web version of Microsoft Teams is claiming it works only on proprietary Blink (part of Chromium project) engine based browsers:

  • Google Chrome – dirty version with Google spyware;
  • Microsoft Edge – again, bloatware.

For me neither is an option. Luckily, there is a solution that works as of now (December, 2023) – until Microsoft discovers and disables this workaround.

You could set Firefox to pretend it is Chromium-based browser, but there may be Firefox-specific code in Teams codebase that indeed has something it really needs to be able to support Firefox (even non-officially).

Web version of Microsoft Teams indeed works smooth on Firefox that is running on macOS out-of-the-box.

Since browser detection always relies on User-Agent header, this gave me idea to try something easy and straightforward – first let's see what User Agent Firefox is exposing on macOS by default:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:120.0) Gecko/20100101 Firefox/120.0

Pay no attention to Intel Mac OS X – it shows exactly the same on Apple silicon (arm64) devices.

Now here is what my Linux box is reporting when using Firefox on it:

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0

So I went to Firefox settings at about:config and created string type parameter general.useragent.override with following value (yes, the same you've seen on macOS):

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:120.0) Gecko/20100101 Firefox/120.0

You may need to increase revision (rv:) and Firefox/120.0 version numbers as they go up, but for now it works. Until Microsoft decides to make our lives worse and disables this workaround.

 
Read more...

from Inretio, MB

While writing build WriteFreely from source walkthrough I noticed that CentOS 7 (or any other Red Hat Enterprise Linux flavored distributions) which comes with SELinux enabled by default will have problems reverse-proxying visitor requests going from NGINX to web application – in this case compiled WriteFreely binary. But don't rush to disable SELinux (common rookie mistake) – it's actually easy to create rules right from audit log.

As soon as server block is configured in NGINX (running on port 8080 in this example) to reverse-proxy traffic to web application, error log will start showing these:

2019/03/02 01:19:46 [crit] 4508#0: *1 connect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: inret.io, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/",host: "inret.io"

With inret.io being server_name configured at server block and xxx.xxx.xxx.xxx being visitor's IP address. Errors having “Permission denied” typically invites to check audit log located at /var/log/audit/audit.log and provides additional details of what exactly happened:

type=AVC msg=audit(1551482556.752:6031): avc:  denied  { name_connect } for  pid=4576 comm="nginx" dest=8080 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket permissive=0

We can see clues to check HTTP daemon – specifically NGINX. An exception is needed to be created with privileged user permissions:

setsebool httpd_can_network_connect on -P

This will allow NGINX to connect, however, to reverse-proxy traffic to web application this won't be enough. When I was building WriteFreely on CentOS 7, more errors would be visible in error log at /var/log/nginx/error.log:

2020/04/02 15:02:19 [error] 9409#0: *12 open() "/home/writefreely/go/src/code.gyt.is/writefreely/static/css/write.css" failed (13: Permission denied), client: 10.0.2.2, server: _, request: "GET /css/write.css HTTP/1.1", host: "127.0.0.1:9980"

Here port 9980 is where web application runs on. Mentioned file (write.scc) is served by NGINX directly per location directive.

As Linux file permissions were set properly, this suggested SELinux is still kicking in. After a lot of messing around I figured it is easier to generate rules based on errors and warning generated.

First install some utilities:

yum install -y policycoreutils-python

On fresh CentOS 7 machine I could see following messages in the logs:

# cat /var/log/audit/audit.log | grep nginx | grep denied
type=AVC msg=audit(1585828926.295:187): avc:  denied  { read } for  pid=9411 comm="nginx" name="write.css" dev="dm-2" ino=2150102457 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=AVC msg=audit(1585828926.296:188): avc:  denied  { read } for  pid=9411 comm="nginx" name="h.js" dev="dm-2" ino=3221225570 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=AVC msg=audit(1585828926.418:189): avc:  denied  { read } for  pid=9411 comm="nginx" name="h.js" dev="dm-2" ino=3221225570 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=AVC msg=audit(1585828926.424:190): avc:  denied  { read } for  pid=9411 comm="nginx" name="webfont.js" dev="dm-2" ino=3221225576 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=AVC msg=audit(1585828932.741:191): avc:  denied  { read } for  pid=9409 comm="nginx" name="write.css" dev="dm-2" ino=2150102457 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=AVC msg=audit(1585828933.608:192): avc:  denied  { read } for  pid=9409 comm="nginx" name="write.css" dev="dm-2" ino=2150102457 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=AVC msg=audit(1585828934.757:193): avc:  denied  { read } for  pid=9409 comm="nginx" name="write.css" dev="dm-2" ino=2150102457 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=AVC msg=audit(1585828939.390:194): avc:  denied  { read } for  pid=9409 comm="nginx" name="write.css" dev="dm-2" ino=2150102457 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0

Now as those errors are present, run several times following commands:

cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M nginx
semodule -i nginx.pp

This website had good suggestion to run above commands in case 403 forbiddden error still comes up several times to make sure all forbids are captured by audit2allow.

While this example was demonstrated with WriteFreely web application and NGINX server, investigating audit log and allowing denied actions using audit2allow can be quick way to troubleshoot SELinux restrictions instead of turning this system off alltogether (which is a terrible thing to do).

Stay safe!

 
Read more...

from IT naujienos

Žmonės visais laikais keitėsi informacija. Didžiąją žmonijos istorijos dalį pagrindinis žinių šaltinis buvo iš lūpų į lūpas skleidžiama informacija, vėliau vis svarbesnį vaidmenį įgijo profesionalūs žinių skleidėjai – šaukliai. Tobulėjant technologijoms šią funkciją perėmė laikraščiai, radijas ir televizija, leidę užtikrinti, kad ta pati informacija pasiektų didelį kiekį žmonių. Ne per seniausiai pagrindiniu kasdienių naujienų ir kitų žinių šaltiniu tapo internetas. Dėl jo dabar informaciją gali viešinti ne tik organizacijos, turinčios pakankamai išteklių spaudai ar transliacijoms, bet ir pavieniai žmonės. Savo įžvalgomis, su kokiais iššūkiais suduriame, dalinasi Mykolo Romerio unversiteto ekspertas dr. Arvydas Kuzinas.

Dėl daugybės žmonių įsitraukimo kuriant informacijos priemonių turinį, didelę šiuolaikinės žiniasklaidos priemonių dalį galima vadinti socialine žiniasklaida. Į ją patenka ir socialiniai tinklai, pvz.: „Facebook“, „Instagram“, „Twitter“, ir vaizdo įrašų platformos, pvz., „Youtube“ bei „TikTok“, ir daugybė forumų bei pokalbių programėlių, pvz., „Reddit“, „Telegram“. Šios priemonės dabar dažnai yra pagrindinis naujienų šaltinis, nes leidžia informaciją gauti labai greitai ir tiesiai iš įvykių vietos. Be to, jos suteikia galimybę įvykį stebėti iš įvairių perspektyvų, nes turinį į šias platformas kelia eiliniai žmonės ir tą patį įvykį pristato daug skirtingų autorių. Tai vartotojams leidžia patiems pasirinkti, kaip bus pateikta konkreti informacija ir kokia būtent žinia bus labiausiai akcentuojama. Be to, labai svarbus socialinės žiniasklaidos privalumas yra tas, kad ji gali viešinti net ir tokią informaciją, kurios oficialūs šaltiniai skelbti nedrįstų dėl galimų neigiamų pasekmių. Daugelyje socialinės žiniasklaidos priemonių informaciją galima viešinti anonimiškai, nes tikroji autoriaus tapatybė netikrinama, tad skelbti informaciją palyginti saugu. Be to, tai padaryti paprasta, todėl autoriai gali būti ir eiliniai žmonės, ne tik profesionalai. Būtent per socialinę žiniasklaidą galima gauti naujausias žinias net iš karo zonos ar represinio režimo kontroliuojamos vietovės. Taigi, nenuostabu, kad įprastų žiniasklaidos priemonių populiarumas vis mažėja.

Deja, dažnai pamirštamas svarbus socialinės žiniasklaidos ribotumas – šaltinių (ne)patikimumas. Kaip žinia, įprasti laikraščiai ar televizija neretai buvo/yra naudojami propagandai ar kitokiai klaidingai informacijai skelbti. Tačiau šios dabar jau tradicinės žiniasklaidos priemonės paprastai būna tęstinės ir turi už jas atsakingą konkrečią organizaciją, pvz. redakciją. Todėl skaitytojui pastebėjus, kad kokios nors organizacijos ar konkretaus leidinio skelbiama informacija dažnai būna netiksli, tikėtina, jog ir kitos jų publikuojamos naujienos bus vertinamos atsargiau. Be to, už netikslią informaciją ta organizacija ar informacijos autoriai gali susilaukti neigiamų teisinių ar komercinių pasekmių. Tad šiuo atveju egzistuoja bent šiokia tokia viešai skleidžiamos informacijos kontrolė.

Interneto kontekste ši kontrolė yra gerokai mažesnė. Be abejo, interneto portalai, juos talpinantys serveriai ar interneto paslaugų tiekėjai taip pat turi juos valdančias organizacijas, kurios teisiškai įpareigotos riboti draudžiamos informacijos sklaidą. Tačiau labai svarbu tai, kad internete paprasta paviešinti informaciją anonimiškai. Tai galima daryti sukuriant interneto puslapius, tekstą „Vikipedijoje“, ar tiesiog įrašus socialiniuose tinkluose. Tikėtina, kad nusikalstamo pobūdžio informacija iš jų bus pašalinta, tačiau tam prireiks laiko, o iki tol ši informacija bus viešai pasiekiama. Be to, tokios informacijos autoriai ir toliau galės skelbti norimas žinutes, nes nustatyti tikrąją jų tapatybę gali būti neįmanoma, o pašalinus informaciją iš vienos internetinės priemonės, nesunku ją paskelbti keliose kitose.

Taip pat būtina prisiminti esminį socialinės žiniasklaidos elementą – vartotojų sąveiką. Ji tampa neatsiejama ir tradicinės žiniasklaidos dalimi. Pavyzdžiui, informacinis straipsnis gali būti skelbiamas naujienų portale (taigi, turės ir už jį atsakingą identifikuojamą autorių bei organizaciją), tačiau pateiktą informaciją dažnai lydi visiškai nekontroliuojami anoniminiai komentarai, kurie gali papildyti straipsnio informaciją, bet gali būti naudojami ir visiškai nesusijusiai informacijai viešinti. Todėl komentaruose pateikta informacija gali pakeisti komentuojamo straipsnio informacijos suvokimą. Pavyzdžiui, komentarai gali paskatinti suabejoti straipsnyje minimais šaltiniais, o kartu ir visa straipsnio informacija. Panašiai gali būti sumenkinta ir straipsnyje pateikiamo įvykio svarba arba sudaryta nuomonė, kad „tai yra normalu, nes visi taip daro“. Be to, komentarai gali apsunkinti straipsnyje aprašomos informacijos supratimą bei įsiminimą, ypač jei komentarų yra daug ir skaitytojas praleidžia daug laiko juos skaitydamas. Kadangi komentarai ir pagrindinis straipsnis skaitomi kartu, bendras informacijos kiekis tampa tiesiog per didelis, ir žmogus gali visai nebeatsiminti svarbios naujienos arba atsiminti tik jos dalis. Komentarai net gali paskatinti įsiminti konkrečią straipsnyje pateiktos informacijos dalį, jei bus akcentuojama būtent ji, ignoruojant kitus tekste paminėtus faktus. Be abejo, komentarai gali paveikti ir skaitytojo emocijas, tad net teigiama ar neutrali straipsnyje pateikiama informacija gali būti vertinama neigiamai. Komentarų poveikis gali būti labai įvairus ir turi konkrečius mechanizmus, todėl nenuostabu, kad anoniminiai komentarai tikslingai naudojami, siekiant formuoti tam tikras nuostatas apie asmenis, organizacijas ar prekes, ne tik norint pasidalinti asmenine nuomone.

Žiniasklaidos priemonės paprastai diegia tam tikras apsaugos priemones. Pavyzdžiui, kai kurie komentarai gali būti automatiškai blokuojami ar trinami, pasitelkiant įvairius programinius algoritmus. Tačiau automatinio apdorojimo galimybės ribotos, o gyvas žmogus tiesiog fiziškai nesugebėtų peržiūrėti visų portale esančių komentarų dėl didžiulio jų kiekio bei atsiradimo greičio. Todėl net populiariuose naujienų portaluose nesunku rasti komentarų, kuriuose atvirai skatinama neapykanta konkrečios žmonių grupės atžvilgiu arba pateikiama kitokio nusikalstamo pobūdžio informacija.

Be to, socialinėje žiniasklaidoje svarbūs ne tik komentarai, bet ir patiktukai po žinute, pasidalinimai bei kiti sąveikos būdai. Lengva pasakyti, kad patiktukų ir nepatiktukų kiekis nieko nereiškia, tačiau ar tikrai vienodai vertinsime informaciją, kuri pažymėta daugiausia nykščiais viršun, vien nykščiais žemyn, o gal nykščių visai neturi? Ypač jei tingime atidžiai skaityti ilgą tekstą, bet matome, kad šiuo tekstu socialiniuose tinkluose dalinasi ir „draugai“ (nors socialiniuose tinkluose jais „yra“ nebūtinai realybėje pažįstami asmenys). Juolab kad informacija – ne tik pasaulio naujienos, bet ir atsiliepimai apie naują telefoną. Taip pat verta turėti omeny, jog patiktukai yra svarbi socialinės žiniasklaidos algoritmų dalis ir gali lemti, kad viena informacija ekrane bus pateikiama pirmiau, o norint pasiekti kitą teks arba ilgai „skrolinti“, arba ji bus visai paslėpta. Tad vartotojų sąveika gali lemti, kokia informacija dominuos žiniasklaidos priemonėje.

Visgi svarbu šiuolaikinės žiniasklaidos netapatinti su socialine žiniasklaida, nes kai kuriais atvejais informacijos pateikimas be socialinės sąveikos elementų turi svarbių privalumų. Pavyzdys galėtų būti mokslinė informacija. Tyrimų duomenis autoriai gali asmeniškai skelbti internete, bet visgi rezultatų patikimumo tikimybė didesnė, jei jie skelbiami pripažintuose moksliniuose žurnaluose, nes tuomet lengviau atsekti ir autorystę, ir su publikacija susijusias organizacijas, o pateikiama informacija prieš publikuojant būna peržiūrėta kitų tos srities profesionalų. Todėl duomenys, paskelbti su konkretaus identifikuojamo autoriaus pavarde ir ilgą istoriją turinčios organizacijos pavadinimu, vis dėlto turi didesnę vertę nei anoniminiame komentare minimi procentai, kad ir kaip įtikinamai pastarieji atrodytų ar kad ir kiek patiktukų surinktų.

Apibendrinant galima teigti, kad už šiuolaikinės žiniasklaidos slypi įspūdingi technologiniai pasiekimai bei galimybės, tačiau jos sklaida tebėra panaši į viduramžių miesto turgaus aikštę, kurioje šauklys garsiai skelbdavo žinią, bet ją lydėdavo ir kiti šūksniai aikštėje, o kiekvienų namų židinius ši žinia pasiekdavo jau gerokai pakitusi. Tad žiniasklaidos technologijoms tikrai dar yra kur tobulėti, o kol kas žmonės turi puikią priemonę technologinėms spragoms „užlopyti“ – savo kritinį mąstymą.

ZenPR / Mykolo Romerio unversitetas

 
Read more...

from IT sprendimų architektas Gytis Repečka

Pasakojimai apie Registrų centras valdomą e.sveikatos sistemą pakankamai reguliarūs: greitaveikos, saugos ir patogumo gydytojams bei piliečiams klausimai viešai aptariami nuolat. Šiandien skaitydamas Delfi Lietuva publikaciją atkreipiau dėmesį, kad greitaveikos problema šįsyk sprendžiama atnaujinant „POWER9“ centrinį procesorių (CPU): didinant branduolių (cores) skaičių ir perrašant duomenų bazių struktūras ir užklausas.


Pavadinimas leidžia įtarti, kad šis „IBM“ CPU „varo“ komercinę „Oracle Database“ arba to paties „IBM“ sistemą „DB2“. Iš to, kas pasakojama apie tarnybinę stotį, galima įtarti, kad ji tėra viena (antraip būtų sunku konstatuoti konkretų pasiektą apkrovos sumažinimo skaičių – „20%“). Nekritikuosiu esamos situacijos su e.sveikata (tą jau esu daręs), bet pateiksiu keletą nemokamų patarimų:

  • „Oracle“ paprastai apmokestina savo duomenų bazę pagal CPU branduolių skaičių, todėl plečiant aparatinės įrangos pajėgumą, sunku vadovus įtikinti išleisti daugiau „vien tik licencijai“;
  • siekiant greitaveikos, duomenų bazių valdymo sistemos struktūras tobulinti ir užklausas optimizuoti reikia, bet taip pat būtina sistemą plėsti (scale) horizontaliai: skaitymo užklausoms ir „karštoms“ atsarginėms kopijoms galima panaudoti „read repliką“;
  • viešajame sektoriuje naudoti atvirojo kodo programinę įrangą, pavyzdžiui, komercinę duomenų bazių valdymo sistemą keisti į „PostgreSQL“, o backend'ą bei frontend'ą rašyti tik naudojant atvirojo kodo programavimo kalbas ir karkasus (frameworks) joms – tuomet plėsti ir tobulinti galės kur kas platesnis ratas specialistų.

Kyla klausimų kaip judėti link atvirojo kodo? Klauskit, patarsiu. Visų kūrybiškai mąstančių ir apie technologijas nutuokiančių specialistų interesas turėtų būti išvaduoti viešąsias paslaugas nuo korporatyvių sistemų spąstų. Visus neabejingus profesionalus kviečiu prisidėti ne vien kritika, bet ir konkrečiais patarimais 🤓

O įstatymų leidėjus kviečiu susipažinti su Free Software Foundation iniciatyva „Vieši pinigai – viešas kodas“ (Public Money, Public Code).

Diskusija „LinkedIn“ tinkle.

 
Skaityti daugiau...

from Gytis Repečka

Most Android phones comes with preinstalled apps: in decent Samsung Galaxy smartphones one will find Facebook, Netflix, Microsoft OneDrive and other apps which because of many reasons you might want to get rid of. Here is how to do it without need to root Android device.

In this post I will demonstrate how to permanently remove Facebook components which are uninstallable from Android apps settings on Samsung Galaxy S21 Ultra 5G smartphone. Why Samsung? Because I am Samsung Members Star and active Lithuanian community member. Let's get started.

Updated 2024-01-25 with details for Samsung Galaxy S24 Ultra running Android 14 (One UI 6.1) and added ADB installation details for Fedora 39.

Updated 2024-06-22 with instructions how to list all installed packages on Samsung Galaxy S24.


Prerequisites

To remove unwanted apps I will be using Android Debug Bridge or adb in short. This is a command-line tool which provides access to a Unix shell on Android device so that you can perform multiple tasks including installing and debugging apps, download and upload files to filesystem, etc. And that all without even rooting Android – out-of-the-box Android supports it.

First we need a computer to run adb on. I will not be covering installation steps here in this article, but on Ubuntu-like systems it is as easy as sudo apt install adb.

On Fedora install ADB by running this:

sudo dnf install android-tools

Next we need proper USB A to USB Type C cable with sufficient data transmission (charge-only cables will not work).

And finally we need Android device: I'll be using European Samsung Galaxy S21 Ultra 5G with Android 11 and One UI 3.1 with all required software updates as of time of writing this post.

Process

I will be performing process on Ubuntu 20-like system, so some commands will be Linux-specific. Although all commands involving adb should work the same on Windows or Mac as well.

To make sure USB cable is good enough, list USB devices with lsusb:

└> lsusb

Bus 001 Device 011: ID XXXX:XXXX Samsung Electronics Co., Ltd Galaxy series, misc. (MTP mode)

If device is not shown, ensure your phone has USB debugging enabled in Settings > Developer options. Phone will ask to confirm debugging connection on first connect, so make sure to accept.

Now it's time to fire up adb and see if it is able to connect to device:

└> adb devices
List of devices attached
XXXXXXXXXXX device

XXXXXXXXXXX will be an ID of your device. When that is shown, we can continue our journey to Android shell:

└> adb shell
p3s:/ $

As you can see, running adb shell open command prompt – this is already on the phone.

Let's list all the nasty components Facebook has sneaked into device:

$ pm list packages | grep facebook
package:com.facebook.appmanager
package:com.facebook.services
package:com.facebook.system

If running pm command returns permission error:

java.lang.SecurityException: Shell does not have permission to access user 150

Make sure to add --user 0 to pm command like so:

pm list packages --user 0 | grep facebook

Package names will be needed in next step. Exit Android shell typing exit and return to your computer's shell. From there initiate adb uninstall command to get rid of each unwanted package:

└> adb uninstall --user 0 com.facebook.appmanager
Success

└> adb uninstall --user 0 com.facebook.services
Success

└> adb uninstall --user 0 com.facebook.system
Success

Done – none of these components are on your Android device anymore.

We can go further and remove any other unwated but uninstallable apps – just use corresponding name right after grep command. I did get rid of some unwanted Google apps such as Maps and YouTube – when needed, they work just fine in web browser.

For example, I also removed Netflix app (com.netflix.mediaclient) and it's components (com.netflix.partner.activation) but afterwards installed app from Google Play store.

In Samsung Galaxy S24 Note Netflix is no longer uninstallable – feel free to remove it as usual and there is no com.netflix.partner.activation component anymore.

In case needed, here is a list of all packages installed on Samsung Galaxy S24 by default.

Have fun!

#samsung #android #app #adb

 
Read more...

from Gytis Repečka

Progressive Web App or PWA is an excellent way enabling your website visitors adding an icon on their mobile device desktop for quick and easy access. In addition to other benefits, PWA offers native app-like experience while still being a website just with manifest like this added. But it's much more difficult to engage user to hit Add to home while visiting your website on regular browser than to ask him/her to install an app from Play Store. Let's look into how to convert PWA to full-blown Android app that can be distributed as APK or via regular app store.

First we need to introduce ourselves to Trusted Web Activity or TWA:

Trusted Web Activity is a new way to open your web-app content such as your Progressive Web App (PWA) from your Android app using a protocol based on Custom Tabs.

So essentially whatever will be presented to user screen is website content which would look exactly the same opened in usual browser. Afterall, most apps need internet connection to work, right?

TWA can be built into APK or prepared as Android App Bundle (AAB) which is required by Play Sore following this guide or by walking this step-by-step post available to web monetization subscribers below.

Install Node

Make sure NodeJS v.16 in installed in your system. On Ubuntu it goes like this:

# Using Ubuntu
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install nodejs

Install npm

Node Package Manager is installed using this command:

sudo apt install npm

Make npm user directory based

To avoid permission errors such as:

Error: EACCES: permission denied, access '/usr/local/lib'

Let's setup npm in user's local directory:

mkdir ~/.npm-global

npm config set prefix '~/.npm-global'

Now edit user's shell config file ~/.profile by adding:

export PATH=~/.npm-global/bin:$PATH

And propagate these changes:

source ~/.profile

In case needed to install up-to-date npm, run:

npm install -g npm@7.20.6

Install Bubblewrap

Bubblewrap will build our PWA / TWA into APK. Install:

npm i -g @bubblewrap/cli

Build your APK: initialize project

Now it's time to build. Have your PWA manifest file URL ready – in my case it is https://inretio.dev/superpwa-manifest.json – you will be asked for it to initiate the process.

Initialize project providing URL as manifest parameter:

bubblewrap init --manifest=https://inretio.dev/superpwa-manifest.json

Script will ask to install JDK 8 and Android SDK to ~/.bubblewrap – make sure to allow it.

Here is how wizard will look like:

bubblewrap init --manifest=https://inretio.dev/superpwa-manifest.json
,-----.        ,--.  ,--.  ,--.
|  |) /_,--.,--|  |-.|  |-.|  |,---.,--.   ,--,--.--.,--,--.,---.
|  .-.  |  ||  | .-. | .-. |  | .-. |  |.'.|  |  .--' ,-.  | .-. |
|  '--' '  ''  | `-' | `-' |  \   --|   .'.   |  |  \ '-'  | '-' '
`------' `----' `---' `---'`--'`----'--'   '--`--'   `--`--|  |-'
                                                           `--'    
Initializing application from Web Manifest:
	-  https://inretio.dev/superpwa-manifest.json
WARNING: Trusted Web Activities are currently incompatible with applications
targeting children under the age of 13. Check out the Play for Families
policies to learn more.
https://play.google.com/console/about/families/

Web app details (1/5)

The application generated by Bubblewrap will open a Progressive Web App when
started from the Android launcher. Please enter the following details about
the PWA:
  
	- Domain: the domain / origin where the PWA is hosted. 
	  Example: example.com

	- URL path: an URL path relative to the root of the origin,
	  opened when the application is started from the home screen.
	  Examples:

		- To open https://example.com/: /
		- To open https://example.com/path-to-pwa/: /path-to-pwa/

? Domain: inretio.dev
? URL path: /

Android app details (2/5)

Please, enter details regarding how the Android app will look when installed
into a device:

	- Application name: the name used in most places,
	  including the App information screen and on the Play Store.

	- Short name: an alternate name for the app, limited to
	  12 characters, used on a device launch screen.

	- Application ID: also known as Package Name, this is
	  the unique identifier for the application on an Android device or
	  the Play Store. The name must contain at least two segments,
	  separated by dots, each segment must start with a letter and all
	  characters must be alphanumeric or an underscore (_).

	- Display mode: how the app will be displayed on the
	  device screen when started. The default mode, used by most apps,
	  is standalone. fullscreen causes the device status bar and
	  navigation bars to be removed and is suitable for games or media
	  players. For more information on the status bars and navigation
	  bar on Android, go to:
	   - https://material.io/design/platform-guidance/android-bars.html.

	- Status bar color: sets the status bar color used when the
	  application is in foreground. Example: #7CC0FF

? Application name: Inretio Services
? Short name: Inretio
? Application ID: dev.inretio.twa
? Starting version code for the new app version: 1.0.0
? Display mode: standalone
? Orientation: any
? Status bar color: #2D5016

Launcher icons and splash screen (3/5)

The Android app requires an image for the launcher icon. It also displays a
splash screen while the web content is loading, to avoid displaying a flash of
a blank white page to users. 

	- Splash screen color: sets the background colour used for the
	  splash screen. Example: #7CC0FF

	- Icon URL: URL to an image that is at least 512x512px. Used to
	  generate the launcher icon for the application and the image for
	  the splash screen.

	- Maskable Icon URL (Optional): URL to an image that is at least
	  512x512px to be used when generating maskable icons. Maskable
	  icons should look good when their edges are removed by an icon
	  mask. They will be used to display adaptive launcher icons on the
	  Android home screen.

? Splash screen color: #CAE5C7
? Icon URL: https://inretio.dev/wp-content/uploads/2021/08/inretio_chip_512x512.png
? Maskable icon URL: https://inretio.dev/wp-content/uploads/2021/08/inretio_chip_512x512.png

Optional Features (4/5)

	- Include app shortcuts: This question is only prompted if a
	  'shortcuts' section is available on the input Web Manifest. When
	  answered “yes”, Bubblewrap uses the information to generate
	  shortcuts on the Android app. Read more about app shortcuts at
	  https://web.dev/app-shortcuts/.

	- Monochrome icon URL: URL to an image that is at least 48x48px to
	  be used when generating monochrome icons. Monochrome icons should
	  look good when displayed with a single color, the PWA's
	  theme_color. They will be used for notification icons.

? Monochrome icon URL: https://inretio.dev/wp-content/uploads/2020/04/inretio-chip_48x48.png
? Include support for Play Billing (this relies on alpha dependencies)? No
? Request geolocation permission? No

Signing key information (5/5)

Please, enter information about the key store containing the keys that will be used
to sign the application. If a key store does not exist on the provided path,
Bubblewrap will prompt for the creation of a new keystore.

	- Key store location: The location of the key store in the file
	  system.

	- Key name: The alias used on the key.

Read more about Android signing keys at:
	 https://developer.android.com/studio/publish/app-signing

? Key store location: /home/gytis/inretio_pwa_app/android.keystore
? Key name: android
Generating Android Project.
 >> [████████████████████████████████████████] 100%

Signing key creation

An existing key store could not be found at "/home/gytis/inretio_pwa_app/android.keystore".

? Do you want to create one now? Yes
? First and Last names (eg: John Doe): Gytis Repecka
? Organizational Unit (eg: Engineering Dept): IT
? Organization (eg: Company Name): Inretio, MB
? Country (2 letter code): LT
? Password for the Key Store: ******
? Password for the Key: ******
keytool Signing Key created successfully

Project generated successfully. Build it by running bubblewrap build

Notice signing key is greated in android.keystore – this will be important later.

Build app

Now build app by running bubblewrap build – process will look like this:

bubblewrap build
,-----.        ,--.  ,--.  ,--.
|  |) /_,--.,--|  |-.|  |-.|  |,---.,--.   ,--,--.--.,--,--.,---.
|  .-.  |  ||  | .-. | .-. |  | .-. |  |.'.|  |  .--' ,-.  | .-. |
|  '--' '  ''  | `-' | `-' |  \   --|   .'.   |  |  \ '-'  | '-' '
`------' `----' `---' `---'`--'`----'--'   '--`--'   `--`--|  |-'
                                                           `--'    
Please, enter passwords for the keystore /home/gytis/inretio_pwa_app/android.keystore and alias android.

? Password for the Key Store: ******
? Password for the Key: ******

Building the Android App...
	- Generated Android APK at ./app-release-signed.apk
	- Generated Android App Bundle at ./app-release-bundle.aab

Failed to run the PWA Quality Criteria checks. Skipping.

Install app

To check if APK works, install it onto Android device using adb:

adb devices
List of devices attached
xxxxxxxxxxxxxxxxxxxx	device

adb install app-release-signed.apk
Success

Now app should be available on the phone. Note: to make sure it does not display browser bar, set up Digital Assets Links.

Publish to Play Store

To publish app on Play Store you will need to setup developer account, pay $25 and submit your app-release-bundle.aab file via Play Console.

Few words about app signing:

If you opt in to Play App Signing, then the signing key that Bubblewrap generated and used to sign your app becomes the “upload key”. Whether you choose to use the Bubblewrap generated key as your signing or upload key, you should guard and keep the key private. We don't recommend committing it to version control. Instead, limit the number of individuals with access to it.

Have fun!

#development #android #app #apk #play #aab #pwa #twa

 
Read more...

from Gytis Repečka

With dramatic rise of #data driven businesses and processes, I see there is a lot of misguided and misleading information spread around, which leads to bad tooling and even enterprise #architecture decisions afterwards.

This is no surprise since IT is constantly perceived as industry not requiring formal education, influenced by strong marketing from vendors and overall buzzword-driven environment. In #tech that deals with data, academic #science is more important than anything. Start with fundamentals, rely on trustworthy sources. Some recommendations below in comments.

Excellent book to start data journey with (great basics, definitions and rich references): SQL & NoSQL Databases: Models, Languages, Consistency Options and Architectures for Big Data Management by Meier, Kaufmann.

Ideas? Comment this post on LinkedIn or mention me on Mastodon @gytis@mastodon.lt.

#protip #analytics #bigdata #datawarehouse

 
Read more...

from Automotive blog - Auto.Coffee

Modern cars are full of electronics we typically think very little of when driving a vehicle. Let's try to break it down a bit for easier understanding and laying foundation for full-featured exploration of computer based automotive diagnostics.


My name is Gytis Repečka, I am Data Engineer very interested in automotive diagnostics on my spare time.

I used to run Lithuanian automotive website AutoNews.lt from 2005 till 2011. Few years later I've started my journey with OBD-II tools when my daily car started showing famous “Check Engine” light. Disappointed by uninformative results received from local repair shop I decided my computer science background might help combining work experience with long-time passion towards cars. Now I want to share my insights with you in this new blog. You might wonder why this blog is so plain – well, because I got tired of heavyweight, ad-filled websites.

But let's come back to cars and start from the beginning.

Deep dive into digital world happens way before we even get into our vehicle: as soon as you press a button on your key to disarm security system or approaching the car with keyless entrance system by just having a special card in your pocket. Comfort system might greet you and adjust seat and mirror settings stored personally for you even before engine is started.

So in most cases we tend to identify electronics with gadgets that we interact with directly by pressing, tapping or just by watching them fading, zooming and capturing our attention – such are modern infotainment (word comes from “information” and “entertainment”) systems.

As electrical components play a critical role in the functioning of modern vehicle, form a complicated wired and nowadays even wireless network with hundreds of connections.

Hillier's Fundamentals of Automotive Electronics Book 2 (Sixth Edition, Oxford University Press, 2014) suggests approaching vehicle's circuitry by dividing the entire electrical sphere into separate systems:

  • Power supply system
  • Engine management system
  • Ignition system
  • Lighting system
  • Instrumentation system
  • Windshield system
  • Signaling systems
  • Climate control and ventilation system
  • Locking and security system
  • Drive management system
  • Supplemental restraint system (SRS)
  • In-car entertainment system

While I will not be going deep into car fundamentals now, you will see later on why it is important to understand main principles before exploring automotive diagnostics systems and OBD-II scanners.

Keywords: #intro #auto #diagnostics #obd2

 
Read more...

from Gytis Repečka

Simple things are good, plain websites are wonderfull. In this post I contemplate about current state of world wide web, my attitude towards content creation (blogging) and use words “lean” and “good” in one sentence (probably for the first time ever).

I (still) love writing

I love writing. From the day 0 (developers start counting from 0, just so that you know) when I learned how to write. As I was telling in my radio interview, along with listening to crime reports I used to write down car numbers in my pre-school childhood.

Years later digital journey began when I was introduced to computers. It took some time, but before finishing High school I was writing articles to local magazine “Kompiuterija”, later working as freelance journalist to another IT magazine “Naujoji komunikacija”.

WordPress journey

While I had my first website back in 2002 and custom-made content management system powered blog in 2005, four years later I switched to WordPress – the most popular content platform to date. As it started from blogs, now WordPress is way beyond that – plethora of online shops run WooCommerce (me as well), there is entire ecosystem and businesses working on creating themes and plugins to satisfy whatever function you could imagine on a website.

WordPress, but...

So as most websites, WordPress became clunky. Backend is written in PHP which is not bad by itself, but frontend is getting huge. While initially (and still) relying on jQuery, WordPress chooses to power revolutionary components like Gutenberg with Facebook's React – something you can reason having multicore processor and hardware acceleration just to run the browser.

So the more load you push to client side, the more need you have for native apps. Which in the end of the day turns into initiatives such as headless WordPress where you interact with WordPress API and have (preferably) native client to draw the whole picture to you. Because browser, well, is no longer capable (unless you run it on state-of-the-art device).

Is that the web we really want?

I do have many ideas and to-dos for content to publish: posts, podcasts, videos... But you know, it's getting difficult to motivate myself to start. Why? When I was writing a post introducing fediverse in Lithuanian on my WordPress-powered blog I constantly heard my gaming laptop fans spinning in maximum speed. The hell? Just to run the browser?

Lightweight blog

Along with starting my journey in fediverse one system caught my eye in particular: lightweight, using minimalistic looks, backend written in Go – WriteFreely seriously positioned itself as “distraction free writing experience”. And you know, it is.

And this blog is powered by WriteFreely. In fact, I liked this system so much I also contributed (and hope to continue).

Lean

Ok, you might have came to this page following a teaser in the beginning.

There is a lot of fuss in the professional market making everything “lean”: lean processes and methods, lean staregies, even lean coffee. Why “lean” is such a buzzword?

Back in the 30s Toyota created operating model known as Toyota Production System which was later defined as “lean manufacturing” or “lean production”. In a nutshell, it is supposed to increase efficiency and “do more with less and less”.

Because my mother tongue is Lithuanian, I tend to look words in a dictionary before deciding if they are used in right context.

Adjective “lean” is defined as “lacking richness, sufficiency, or productiveness”, as well as “deficient in an essential or important quality or ingredient” by Merriam Webster.

As I'm very interested in automotive diagnostics, there is also a particular OBD-II trouble code followed by Check Engine light: P0171 System Too Lean – indicating that air to fuel mixture level is wrong with too much air.

So how can “lean” be “good”?

If website is “lean of” JavaScript, large images, compressed but still massive embeds – it is good.

WriteFreely has tiny amounts of CSS and just some JavaScript where totally necessary. Also content is written in Markdown – developers love it. Why? Because Markdown is nicely viewed even in editing mode, can be efficiently historized in Git repository and provide “lean and clean” experience.

So in the end I can write post (just like this one) in my favourite text editor (Atom), commit to personal code repository and either automate or manually paste to WriteFreely. This is where “lean” appears in positive context.

Agree? Disagree? Mention me on Mastodon @gytis@mastodon.lt or write an email to comment.

 
Read more...

from IT naujienos

Praėjusiais metais pasaulį užklupusi pandemija turės įtakos ir ateities išmaniųjų įrenginių rinkai – gamintojai daugiau dėmesio skirs sveikatos sprendimams, patogiam nuotoliniam darbui ir 5G technologijos pritaikymui kasdienybėje. Kuo išmaniųjų įrenginių kūrėjai vartotojus gali nustebinti jau šiemet, pasakoja Šarūnas Urbonas, „Huawei“ produktų vadovas Lietuvoje.


Telefonai taps lankstesni

Pandemijos metu ypač suaktyvėjo internetinė prekyba, kai dėl karantino ribojimo rečiau galima apsilankyti fizinėse parduotuvėse. Įdomu, kad 70 proc. mažmeninės prekybos pardavimų atlikti naudojant mobiliuosius telefonus, o ne kompiuterius ar kitus įrenginius, rodo „Statista“ duomenys. Spėjama, kad ateinančiais metais šis skaičius dar išaugs bent keliais procentiniais punktais.

Šis faktas patvirtina mobiliosios prekybos (angl. mobile commerce) augimo tendenciją ir dar kartą įrodo, jog išmaniuosius telefonus plačiai naudojame kasdienybėje. Būtent todėl jų gamintojai ir toliau investuos į inovacijas šioje srityje, kad įrenginiai taptų dar funkcionalesni.

„Jau dabar ypač daug dėmesio skiriama nepriekaištingam telefonų veikimui, kad vartotojai jais galėtų naudotis kuo ilgesnį laiką. Būtent todėl diegiamos vis spartesnio baterijos įkrovimo galimybės, galingi procesoriai ir išmanios operacinės sistemos. Neabejotina, jog į efektyvumo ir patvarumo sritį ir toliau bus aktyviai investuojama“, – sako Š. Urbonas.

Eksperto teigimu, tikėtina, jog gamintojai neapleis ir išmaniųjų telefonų dizaino, kuris taip pat laikomas įrenginio funkcionalumu. Spėjama, kad daug dėmesio bus skiriama sulenkiamų išmaniųjų telefonų tobulinimui.

„Keli žinomiausi išmaniųjų įrenginių gamintojai jau sukūrė veikiančius ir komerciškai sėkmingus sulenkiamus telefonus, pavyzdžiui, „Huawei Mate X“. Vis tik norint paversti šiuos įrenginius atspariais žemoms arba aukštoms temperatūroms ar suteikti jiems dar daugiau lankstumo, patobulinimų dar teks paieškoti. Šiuo metu daug vietos įrenginyje užima nesulenkiama baterija, tad ji apriboja telefono lankstumo galimybes. Todėl gamintojams reikės iš esmės pergalvoti šio komponento koncepciją, kad baterija turėtų pakankamai talpos, nebijotų daugybės įkrovimo ir iškrovimo ciklų, leistų greitai įkrauti įrenginį, o prie viso to dar ir susilenktų pusiau“, – pasakoja Š. Urbonas.

Sveikata rūpintis padės išmanieji laikrodžiai

Dėl koronaviruso situacijos praėjusiais metais kaip niekad daug dėmesio skirta visuomenės sveikatai. Pandemijai nesitraukiant, geros savijautos puoselėjimas ir šiemet išliks svarbiu prioritetu, tad išmaniųjų įrenginių gamintojai sieks vartotojams pasiūlyti inovacijų ir šioje srityje.

„Investicijas į sveikatą skatina ir tai, jog technologijos šiandien leidžia tiksliai surinkti daug svarbių duomenų, kurių pagrindu vėliau galima atlikti atitinkamas korekcijas. Tą padaryti šiandien gali padėti išmanieji laikrodžiai, tad gamintojai tikrai investuos į jų funkcionalumo tobulinimą bei jiems skirtas sveikatos programėles. Be to, vis labiau augs jų surenkamų duomenų tikslumas – tas ilgainiui leis iš anksto pastebėti įtartinas sveikatos tendencijas, svarbius įspėjimus akimirksniu perduoti vartotojams bei čia ir dabar teikti naudingus patarimus“, – pasakoja Š. Urbonas.

Turint omenyje aktyvią daiktų interneto plėtrą, spėjama, jog išmaniuosiuose laikrodžiuose atsiras daugiau galimybių valdyti kitus prietaisus – taip jie taps vis svarbesne išmaniųjų įrenginių ekosistemos dalimi ir ilgainiui bus laikomi atskirais visaverčiais įrenginiais, o ne tik telefono priedais.

Kompiuteriai taps dar patogesni

Pandemija dar labiau paspartino procesų hibridizaciją – supratome, kad labai daug ką net ir po pandemijos galėsime atlikti ne fiziniu, bet nuotoliniu būdu ir kasdienybėje sėkmingai derinti šias formas. Tad kompiuteriai ir toliau veiks kaip virtualūs biurai, prekybos centrai ar net šeimos švenčių vietos.

„Galvodami apie išmaniąsias technologijas, esame įpratę įrenginius atskirti funkcinėmis kategorijomis – kompiuterius dažniausiai naudojame darbui, planšetes – pramogoms, o išmaniuosius laikrodžius – sportui. Tačiau laikui bėgant, šie įrenginiai bus vis labiau tarpusavyje susieti, o jų funkcijos persipins. Todėl ir kompiuteriai vienoje vietoje jungs vis daugiau funkcijų. Dėl šios priežasties jų gamintojai stengsis pasiūlyti naujus funkcionalumus ar jų patobulinimus, kad šie įrenginiai būtų patogūs visose kasdienėse situacijose – ne tik dirbant biure, bet ir namuose ar kelionėje, siekiant atitrūkti ir atsipalaiduoti ar, atvirkščiai, norint virtualiai susijungti su būriu draugų“, – sako Š. Urbonas.

Ši visapusiško funkcionalumo tendencija gali paskatinti ir kompiuterių dizaino pokyčius, siekiant didesnio jų pritaikomumo kasdienybėje, Pavyzdžiui, ekspertai spėja, kad ilgainiui kompiuteriai bus sulankstomi ir tilps į vartotojų kišenes ar rankines. Pasak Š. Urbono, tokių ryškių pokyčių dar reikės palaukti, tačiau funkcionalumo, interaktyvumo ir dizaino eksperimentų matysime jau šiemet.

Planšetėse – AR ir VR technologijų plėtra

Jau ne vienerius metus planšetiniai kompiuteriai užima tik nepilnus 3 procentus išmaniųjų įrenginių rinkos, lyginant su kompiuteriais ir mobiliaisiais telefonais, rodo „Statcounter“ duomenys. Tad panašu, jog ženklaus jų populiarumo ir toliau nepastebėsime, tačiau į jų funkcionalumo didinimą bus investuojama ir toliau.

„Vis daugiau vartotojų dėmesio sulaukia papildytos realybės (angl. augmented reality, AR) ir virtualios realybės (angl. virtual reality, VR) sprendimai. Šie ypač patogiai atvaizduojami didesniuose planšečių ekranuose, tad gali paskatinti žmones dažniau rinktis šiuos įrenginius. Be to, galingumu jos neretai prilygsta nešiojamiems kompiuteriams, tad ir toliau puikiai tiks vartotojams, norintiems patogaus, mobilaus mažesnių išmatavimų, bet nemažiau funkcionalaus prietaiso“, – sako „Huawei“ ekspertas.

Šaltinis: Huawei / „Inregrity PR“

 
Skaityti daugiau...

from IT naujienos

Lengvai telpa kišenėje, o jo galingumas didesnis nei „iPhone 11”. Pasitikite, štai jis – „Apple iPhone 12 mini”, šiek didesniu nei pirmos kartos „iPhone SE”korpusu ir flagmano parametrais. Jokia paslaptis, kad daugelis jau kelis metus laukė „iPhone” telefono, kuris būtų „iPhone 4”, „iPhone 5s” ar „iPhone SE” dydžio. Štai ir jis – „iPhone 12 mini”, mažiausias šių metų „iPhone”.

Atkreiptinas dėmesys į tai, kad 5.4 col. „iPhone 12 mini” korpusas mažesnis nei 4.7 col. „iPhone 7” modelio. Ir čia nėra ko stebėtis, nes tai pasiekti gamintojui pavyko tiesiog pailgos matricos dėka. Pilno ekrano dizaino dėka gamintojui į nedidelį korpusą pavyko sutalpinti tikrą galingumo monstrą ir Varlė.lt specialistai neabejoja, kad kompaktiškų išmaniųjų gerbėjai tiesiog negalės abejingai žiūrėti į šį modelį.

„iPhone 12 mini” dizainas ir komplektacija

Nors ir panašus į ankstesnės kartos, dizainas šįkart yra naujas. Gale yra išdėstyta dviguba pagrindinė kamera be LiDAR jutiklio, o priekyje turime Super Retina OLED ekraną. Galima pastebėti, kad ekrano išpjova tapo mažesnė. Korpusas gale yra stiklinis, priekyje iki 4 kartų didesnį patvarumą užtikrinantis specialus keraminis skydas (angl. Ceramic Shield) o šonus juosia aliuminis rėmelis. „iPhone 12 mini” turi apsaugą nuo vandens ir gali išbūti iki 6 metrų gylyje 30 minučių.

Kraštinės dabar griežtai aštrios ir toks dizaino sprendimas prisideda prie to, kad išmaniuoju labai patogu naudotis viena ranka. Kaip ir kitų šių metų „iPhone”, taip ir „iPhone 12 mini” komplektacijoje nėra ausinių ir įkroviklio. Dėžutėje rasime tik telefoną ir „USB-C” į „Lightning” laidą. Kaip žinia, šį sprendimą gamintojas argumentuoja rūpesčiu aplinka ir siekiu sumažinti elektros atliekų susidarymą ir kenksmingo anglies dioksido kiekį. Vieniems tai be abejonės, nepatiks, kiti ko gero sutiks su gamintoju, tačiau bet kokiu atveju, Varlė.lt specialistai mano, kad ateityje ir kiti gamintojai eis šiuo keliu.

„iPhone 12 mini” ekranas

„iPhone 12 mini” turi 5.4 col. įstrižainės ekraną, kuris pasižymi 2340х1080 pikselių raiška. Yra HDR palaikymas, kurio dėka atvaizduojamos ekrane spalvos dar ryškesnės ir sodresnės, o juoda spalva – gilesnė. HDR ryškumas siekia 1200, o maksimalus standartinis ryškumas – 625 nitų. Pikselių tankis yra 476 ppi. Visi šie parametrai reiškia, kad matomas ekrane vaizdas tikrai džiugina akis net ir būnant lauke, kai šviečia ryški saulė.

„iPhone 12 mini” kameros

Korpuso gale yra pagrindinės kameros blokas, kurį sudaro du 12 megapikselių objektyvai: plačiakampis ir ultra plataus kampo. Kalbant apie „iPhone 12 mini” kamerą, vertėtų išskirti tokius ypatumus:

  • Patobulintas naktinis režimas.
  • Galimybė filmuoti 4K vaizdo įrašus su 60 kadrų per sekundę sparta.
  • „Dolby Vision” formato HDR filmavimas.
  • Dvigubas optinis priartinimas ir penkių kartų skaitmeninis priartinimas.
  • „Smart HDR 3” technologija.
  • „Timelapse” funkcija naktiniame režime.

Priekinės kameros objektyvas taip pat yra 12 megapikselių raiškos ir turi naktinį režimą. Taigi, akivaizdu, kad „mini” versijos „iPhone” kamera pasižymi tokiomis pat funkcijomis ir ypatybėmis, kokios būdingos jo didesniam – „iPhone 12” broliui ir leidžia mėgautis tikrai įspūdingos kokybės nuotraukomis bei asmenukėmis.

„Apple A14 Bionic” procesorius ir svaiginantis greitis

„iPhone 12 mini”, kaip ir kituose šių metų „iPhone” flagmanuose yra integruotas naujasis „Apple A14 Bionic” lustas, kuris tapo dar galingesnis ir labiau energiją taupantis. Jis pasižymi naujos kartos „Neural Engine” technologija, kuri leidžia atlikti iki trilijono procesų.

Vertėtų paminėti, kad šiais metais gamintojas ypatingai akcentavo telefonų našumą žaidimuose. „iPhone 12 mini” galios atsargų tikrai pakanka visoms užduotims ir sudėtingiems žaidimams. Jokių trukdžių, jokių vėlavimų. Tik sklandus veikimas ir iš tikrųjų greitas reagavimas.

„iPhone 12 mini” baterija

Kaip žinia, „Apple” nerodo savo gaminių baterijos talpos, tačiau pateikia aiškius autonominio veikimo laikų orientyrus. Pasak „Apple”, „iPhone 12 mini” ličio-jonų baterija užtikrina tokį autonominį veikimo laiką:

  • Iki 15 val. vaizdo įrašų atkūrimo;
  • Iki 10 val. vaizdo įrašų transliacijų (angl. streaming) atkūrimo;
  • Iki 50 val. garso atkūrimo.

Praktikoje šie rezultatai pasitvirtina. Tai, kiek laiko nereikės krauti telefono iš esmės priklauso nuo to, kaip aktyviai juo naudositės, tačiau pakankamai jį apkraunant, baterijos tikrai turėtų užtekti visai dienai. Vertėtų paminėti, kad po išmanaus telefono dangteliu yra indukcinis magnetas, kuris leidžia įkrauti „iPhone 12 mini” naujo belaidžio „MagSafe” įkroviklio dėka. Tiesa, šis įkroviklis parduodamas atskirai.

Ką gali „iPhone”, „Apple Watch” ir „AirPods” kartu?

Ne paslaptis, kad naudojantis tuo paties gamintojo produktais pasiekiama daugiau ir kalba čia ne tiesiog apie abstraktų geriausią suderinamumą dėl to, kad gaminiai priklauso tai pačiai ekosistemai. Štai tik keli konkretūs pavyzdžiai, kokie šių produktų sinergijos privalumai. Suporuotos su „iPhone” ar „Apple Watch” „AirPods” ausinės suteikia nepakartojamos garso patirties. Labai patogu, kad „iPhone” telefone iššoka pranešimai, kada metas įkrauti ausines, tačiau dar didesnis patogumas tas, kad einant bėgioti telefoną galima palikti namuose, nes „Apple Music” programėlė „Apple Watch” išmaniajame laikrodyje visiškai suderinama su „iPhone” mediateka, todėl nereiks kiekvieną kartą traukti telefoną, kai norėsite įjungti norimą muzikos kūrinį.

Apibendrinimas

Pagrindiniai „iPhone 12 mini” ir „iPhone 12” skirtumai yra ekrano dydis ir kaina. Visais kitais atžvilgiais šie modeliai yra vienodi ir siūlo tokias pačias galimybes. Varlė.lt specialistų nuomone, jei esate labiau kompaktiškų išmaniųjų šalininkas, „iPhone 12 mini” yra idealus tikro flagmano variantas už patrauklią kainą.

Šaltinis: Varlė.lt / Zen PR

 
Skaityti daugiau...

from IT naujienos

Šiaulių bankas pasirinko pasaulinės informacinių technologijų (IT) lyderės „Oracle“ dedikuotą debesijos sprendimą. Šiaulių banke diegiami „Oracle“ sprendimai išsiskiria lankstumu, dideliu našumu, itin aukštu saugumo lygiu bei leidžia užtikrinti reikiamą momentinį IT sistemų „prieinamumą“, kai to reikia.

Šiaulių bankas IT infrastruktūrai modernizuoti pasirinko „Oracle“ Exadata Cloud@Customer sprendimą. Būtinybę modernizuoti IT infrastruktūrą padiktavo sparčiai pasikeitę klientų finansiniai poreikiai, banko personalo darbo įpročiai ir bankams keliami visuomenės lūkesčiai.

„Oracle“ didelio našumo sprendimas – Exadata Cloud@Customer bus patalpintas duomenų centruose bei administruojamas bendrovės „Oracle“ specialistų kaip vientisas sprendimas. Tokia specializuota „Oracle“ kompanijos paslauga leis bankui sumažinti technologinių sistemų administravimo kaštus, efektyvinti darbo krūvį banko IT specialistams, kurie galės koncentruotis į inovacijų kūrimą, bei būti itin lanksčiam IT sistemų potencialo požiūriu.

Įdiegęs specializuotą „Oracle“ sprendimą, Šiaulių bankas atitiks pačius aukščiausius Europos bankininkystės institucijos (EBI) keliamus reikalavimus duomenų saugumui ir naudosis naujausiais debesijos technologijų pranašumais: spartesnėmis IT sistemomis, efektyvumu, lankstumu, saugumu bei aukštu patikimumu.

„Inovatyvūs sprendimai leis mums veikti efektyviau, sparčiau, saugiau, užtikrinant maksimalius Šiaulių banko klientų lūkesčius. Sukurdami lanksčią, kokybišką, adaptyvią, modernią IT infrastruktūrą, galėsime prisitaikyti prie iššūkių, o kartu ir išlikti inovatyvūs bei teikti aukščiausio lygio paslaugas savo klientams“, – sakė Šiaulių banko administracijos vadovas Vytautas Sinius.

Šiaulių banko pasirinktas „Oracle“ sprendimas leis bankui optimaliai išnaudoti techninės ir programinės įrangos potencialą pagal poreikį, sistemą prižiūrint „Oracle“ aukščiausių ekspertų grupei. Dirbtinio intelekto pagalba sprendimas leis identifikuoti ir eliminuoti galimas problemas, vartotojams jų net nespėjus pastebėti, o įdiegti kompiuterio mokymo (angl. machine learning) algoritmai efektyvins ir optimizuos visos IT sistemos našumą.

„Oracle“ ir toliau praktiškai įgyvendina savo inovatyvią viziją teikti debesijos paslaugas klientų duomenų centruose. „Oracle“ Exadata Cloud@Customer sprendimas skirtas klientams, norintiems naudotis debesų kompiuterijos galimybėmis, tačiau negalintiems perkelti duomenų į viešąją debesiją dėl veiklos pobūdžio, atitikties ar galimo tinklo vėlavimo reikalavimų. Exadata Cloud@Customer idealiai tinka organizacijoms, norinčioms naudoti viešosios debesijos privalumais savo duomenų centruose. Šis sprendimas suteikia visas lankstumo, paprastumo, saugos funkcijas bei prieigą prie pačių naujausių „Oracle“ kompanijos vystomų technologijų”, – sakė Andrius Skunčikas, „Oracle“ Baltijos šalių vadovas.

Naujoji platforma daugiausia bus skirta programinės įrangos FORPOST aplinkai. Šios bankų veiklos valdymo sistemą sukūrusi bendrovė „Forbis“ – viena pirmųjų „Oracle“ partnerystės programos narių Baltijos šalyse, turinti išskirtinį licencijų ir aparatinės įrangos platintojo statusą (License&Hardware reseller). Bendrovė nuo 2014 metų taip pat yra Oracle Exadata Ready programos dalyvė. FORPOST programinės įrangos veikimas Exadata Cloud@Customer aplinkoje, buvo ištestuotas kartu su Šiaulių banko, „Forbis“ ir „Oracle“ specialistais.


Apie Šiaulių banką

1992 m. įsteigtas AB Šiaulių bankas – didžiausias lietuviško kapitalo bankas, stabiliai ir nuosekliai augantis finansinis partneris, ypatingą dėmesį skiriantis verslo finansavimo ir vartojimo finansavimo sprendimams. Šiaulių bankas klientus aptarnauja 59 klientų aptarnavimo padaliniuose 37 Lietuvos miestuose. Banko akcijos įtrauktos į NASDAQ biržos Baltijos Oficialųjį prekybos sąrašą. Pagal 2018 m. ir 2019 m. „DIVE Lietuva“ slapto pirkėjo tyrimo rezultatus, Šiaulių bankas yra pirmas Lietuvoje pagal klientų aptarnavimo kokybę.

Apie Oracle

„Oracle“ – viena didžiausių IT korporacijų pasaulyje, teikianti kompleksinius debesijos sprendimus bet kurio dydžio verslo įmonėms ir valstybinėms organizacijoms. „Oracle“ sprendimais naudojasi daugiau kaip 430 tūkstančių įmonių 175 šalyse. Korporacijoje dirba 137 tūkstančiai darbuotojų: daugiau kaip 38 tūkstančiai programuotojų ir inžinierių, 14 tūkstančių klientų aptarnavimo specialistų ir 19 tūkstančių spendimų diegimo konsultantų. IT sprendimų srityje „Oracle“ pirmauja bankininkystės, telekomunikacijų, inžinerijos ir statybų, sveikatos apsaugos, draudimo, mažmeninės prekybos, viešajame ir kituose sektoriuose. Absoliuti dauguma didžiausių šių sektorių įmonių naudojasi „Oracle“ sprendimais.

Šaltinis: Šiaulių bankas / Headline Burson-Marsteller

Raktažodžiai: #siauliai #bankas #oracle #exadata #forbis

 
Skaityti daugiau...

from IT naujienos

Pasaulį sukausčiusi pandemija padarė poveikį daugeliui verslo sektorių – vieniems turėjo įtakos finansinei pusei, kitiems tapo paskatinimu apskritai peržvelgti savo verslo prioritetus. Vienas ryškiausių pokyčių – darbas nuotoliniu būdu. Remiantis Europoje atlikto tyrimo rezultatais, 3 iš 10 darbuotojų norėtų, kad pasibaigus pandemijai darbas iš namų taptų įprasta praktika. Tiesa, darbuotojų ir darbdavių prognozės šiuo klausimu išsiskiria, o kalbant apie nuotolinį darbą išryškėja ir tvarumo bei socialinės atsakomybės problemos.

Darbuotojų ir darbdavių prognozės nesutampa

Kompanijos „Epson“ užsakymu bendrovė „B2B International“ 2020 metais visoje Europoje atliko tyrimą, kurio tikslas – pasitikrinti, kaip skirtingose šalyse, bendrovėse ir tarp skirtingų specialistų vertinamos tvarumo vertybės. Pagrindinis dėmesys skirtas aplinkosaugos ir socialinės atsakomybės temoms, pandemijos poveikiui socialinės atsakomybės projektams įmonėse, darbuotojų požiūriui į tvarumo temas ir kitiems aspektams. Tyrimo metu iš viso apklausta daugiau nei 4 tūkst. respondentų iš 26 pasaulio valstybių, tarp jų ir Baltijos šalių.

Apklausos dalyvių buvo klausinėjama ir apie verslo prognozes pasibaigus pandemijai. Tyrime paliesta ir COVID-19 krizės kontekste itin aktualia tapusi darbo iš namų tema. Rezultatai parodė, kad visuose regionuose asmeninės nuotolinio darbo preferencijos nusveria verslo strategiją, net jei nuotolinio darbo lygis regione yra nedidelis. Paaiškėjo, kad beveik 3 iš 10 darbuotojų (28 proc.) norėtų, kad nuotolinis darbas taptų įprasta praktika ir būtų laikomas „nauja norma“.

„Įdomu tai, kad pačios organizacijos ir jų vadovai tokį norą išreiškė kur kas rečiau – tik 16 proc. rinktųsi toliau lanksčiai dirbti nuotoliniu būdu, o kiti verslo tiksluose tokio pokyčio neprognozuoja ir savo strategijose nenumato. Anot daugelio darbdavių, pasibaigus COVID-19 krizei, verslo sektorius turėtų grįžti į įprastą ritmą. Šie darbdavių ir darbuotojų lūkesčių nesutapimai pastebimi įvairiuose sektoriuose ir regionuose“, – sako Mantas Nemickas, „Epson Europe“ verslo plėtros Baltijos šalims vadovas.

Išryškėja tvarumo tema

Kalbant apie verslo planus po pandemijos, tyrime didelis dėmesys skirtas ne tik nuotoliniam darbui, bet ir tvarumo temoms. Daugelis organizacijų, besiruošiančių darbuotojų sugrįžimui į darbo vietas, sutelkia dėmesį į socialinius aspektus. Labiausiai darbdaviams rūpi darbuotojų sveikata ir bendra gerovė, tačiau pasitaiko ir atsisukančių į aplinkosaugos problemas.

„Kai kurie tyrimo dalyviai nurodė, kad nuotolinis darbas padėjo sumažinti kai kurių išteklių vartojimą. Pavyzdžiui, žmonės dažniau naudojasi viešuoju transportu, dažniau naudojamos daugkartinio naudojimo medžiagos ir pakuotės, darbuotojams pateikiamas sveikas maistas. Be to, nuotolinis darbas padėjo išvengti nereikalingų darbuotojų kelionių taip sumažinant energijos sąnaudų pėdsaką, o lankstesnės darbo sąlygos leidžia pagerinti darbo ir poilsio balansą“, – pastebi M. Nemickas.

Net 7 iš 10 apklausoje dalyvavusių darbuotojų (70 proc.) nurodė, kad ilgaamžiškumas, energijos vartojimo efektyvumas ir atliekų mažinimas yra svarbiausios dirbant iš namų naudojamos įrangos savybės, susijusios su aplinkos ir socialinio poveikio sritimi. Pastebėta, kad ilgaamžiškumui, energijos vartojimo efektyvumui ir atliekų mažinimui didesnį dėmesį skiria labiau įsitvirtinusios organizacijos (veikiančios ilgiau nei 10 metų).

Tik beveik ketvirtadalis (24 proc.) apklausoje dalyvavusių darbuotojų mano, kad aplinkos apsaugos ir socialinės atsakomybės temos bus įtrauktos į verslo planus po pandemijos. Šis rodiklis nežymiai skiriasi ir tarp vadovų pareigas organizacijose užimančių asmenų – šioje grupėje rodiklis siekia 29 proc.

„Epson“ vienija 85 kompanijas visame pasaulyje, kuriose dirba per 81 tūkst. darbuotojų. Per metus „Epson“ sugeneruoja 8,5 milijardų eurų pajamų ir septintus metus iš eilės patenka į TOP100 pasaulinių inovatorių sąrašą.

Šaltinis: Epson Europe / UAB „Integrity PR“

Raktažodžiai: #epson #namai #darbas #covid

 
Skaityti daugiau...

from Inretio, MB

How to use custom domain in package import path of Go lang project. Adding meta tags read by go get command explained in details.

Go programming language provides an extensive list of packages in standard library. Need to work with strings? import "strings" will do the job. Calculating some high precision numbers? Then math/big should be imported. But what happens when some custom package needs to be imported?

With code hosted on GitHub it’s quite straightforward, however, if on-premises code repository is used in development process, some extra steps needed to use custom domain in import path.

Why use custom domain?

  • Name branding – company or developer name visible in Go project;
  • Stable address – changing code repository will not reflect import path.

When using packages from GitHub, importing packages is super easy: for example, to introduce colors in CLI application you can use github.com/fatih/color – including it to your project looks like this:

import (
  "github.com/fatih/color"
)

Don't get confused by the fact import path corrensponds to actual URL of web-based code repository (in this case GitHub) – that is not necessarily default behavior and I will first demonstrate a particular use case.

To suggest fixes and improvements for awesome lightweight blogging platform WriteFreely which instance I run at fedi.dev, I have forked their repository to github.com/gytisrepecka/writefreely – that is typical to be able to suggest Pull Requests like this one. As it is hosted on GitHub, standard approach to import this package source repository would work.

But what happens if I decide to migrate to GitLab or any other alternative, like self-hosted Gitea? That would mean import path would change and I would never want that. For the very same reason people and companies buy a domain name – regardless of current or future provider address to reach you is always the same. Luckily, we can do that with Go packages as well!

Now, if by any chance you were curious to try out my fork of WriteFreely (I recommend that in my building WriteFreely on CentOS tutorial), easiest way to get sources is following:

go get -d -u -v code.gyt.is/writefreely

Notice code.gyt.is – that is an actual website with folder writefreely. Well, it's quite plain and not appealing, however, it has couple very important meta tags:

<meta name="go-import" content="code.gyt.is/writefreely git https://github.com/gytisrepecka/writefreely" />
<meta name="go-source" content="code.gyt.is/writefreely https://github.com/gytisrepecka/writefreely https://github.com/gytisrepecka/writefreely/tree/master{/dir} https://github.com/gytisrepecka/writefreely/blob/master{/dir}/{file}#L{line}" />

They are indeed the magic behind – go get will read those meta tags and will understand where exactly it can download actual sources from.

Notice the structure of URLs in go-source – it refers to master branch and provides path where individual files are.

Beauty of such solution is that even if I change where code is hosted, users will be able to continue using code.gyt.is/writefreely in their projects regardless. Above example works with repositories hosted at GitHub and yes, you got it correctly – GitHub adds those meta tags automatically if importing from github.com provided URL directly.

Some time ago I decided I need to run on-premises code repository and chose Gitea – very fast software written in Go. The first project hosted on it is publically available open source library to watermark images written in Go. Named it webimg. Interestingly enough it has a bit different URL structure from GitHub therefore meta tags to make go get work are a bit different:

<meta name="go-import" content="code.gyt.is/webimg git https://source.gyt.is/gytisrepecka/webimg.git" />
<meta name="go-source" content="code.gyt.is/webimg https://source.gyt.is/gytisrepecka/webimg https://source.gyt.is/gytisrepecka/webimg/src/branch/master{/dir} https://source.gyt.is/gytisrepecka/webimg/src/branch/master{/dir}/{file}#L{line}" />

Figured them from gopkg fork that creators of WriteFreely runs to generate Go import paths for their projects automatically. Yet again perfect example how open source software helps to learn!

So in the end it’s easy to import webimg into any Go lang project by using custom domain:

import (
	"code.gyt.is/webimg"
)

You can make much more beautiful website than code.gyt.is is – style it using CSS, make it with static site generator like Hugo or even have WordPress site with custom meta tags added.

And in case you need a domain, buy one from Name.com (United States), FlokiNET (Iceland) or Interneto Vizija (Lithuania).

 
Read more...

from webimg

Initial version of webimg – library written in Go lang to manipulate images. Currently it is able to watermark JPG image with PNG logo at defined opacity.

To use this library in your Go application initialize sources:

go get -d -u code.gyt.is/webimg

Include it in your application:

import (
	"code.gyt.is/webimg"
)

And then call function:

// Input image, watermark image, result image, bottom-right offset X, bottom-right offset Y, watermark alpha
doWatermark := webimg.Watermark("smplayer_preferences.jpg", "watermark_inretio-logo.png", "result_img.jpg", 30, 30, 70)
if doWatermark != nil {
  fmt.Println("There was an error watermarking image...")
}

Currently the library is able to watermark JPEG image with PNG watermark (which should have transparent background). You can set offset in pixels from bottom-right corner (in example 30, 30) and transparency of watermark image (in example 70, scale is 0-255 where 0 is solid and 255 is transparent).

Sources are published on my privately hosted instance of Gitea: source.gyt.is/gytisrepecka/webimg/.

Follow this blog for news and changelog from fediverse: @webimg@fedi.dev.

If you have any feedback or ideas, drop me an email at gytis@repecka.com or on Mastodon at @gytis@mastodon.lt.

 
Read more...