Posts filed under 'softat'

Vanha koira ja P5.js

En ole koskaan erityisemmin kiinnostunut JavaScriptistä — perinteisten tyypitettyjen kielten suunnasta tulevalle “kaikki käy” -asenne ei tule luonnostaan, minkä lisäksi kaikenlaisten kirjastojen ja alustojen kirjo on jokseenkin masentava. Samaan aikaan on toki pakko myöntää, että JS on nykypäivää ja kehittynyt hurjasti takavuosien turhista mouseover-ajoista. Aina välillä olisi myös ihan kätevää saada oma Processing-kikkare webaselaimen kautta muiden nähtäväksi, kun Java-applettien aika on auttamattomasti ohi.

Olen käyttänyt sillanrakennukseen aiemmin Processing.js:ää, joka kuitenkin lakkasi jossain vaiheessa päivittymästä eikä ollut muutenkaan koskaan täysin ongelmaton. Pienet kikkarat siirtyivät kyllä, mutta vähänkin mutkikkaamman pätkän kanssa tuli nopeasti seinä vastaan. Tuoreempaa tulokulmaa edustaa välimallin ratkaisu P5.js, joka on lähinnä kirjasto Processingin käteviä funktioita JS:lle. P5.js on sikäli virallinen ja tunnustettu, että sitä voi kirjoitella suoraan Processingin editorilla, kunhan vaan asentaa tarvitun laajennuksen. Sketsiä ajettaessa lopputulos menee suoraan tabiksi oletusselaimeen, eikä ympärille tarvitse onneksi räpeltää itse mitään HTML/CSS-purkkaa.

Ensimmäisenä yritelmänä oli joulun aikaan sopiva piirto-ohjelma, joka peilaa hiirellä piirrettävän viivan kahteentoista kertaan symmetrisesti. Härpättimellä saa helposti aikaan etenkin lumihiutaleita (sekä pitsipöytäliinoja):

Lumi on jo peittänyt canvasin webasessa.

Perustutoriaaleja googlaamalla pääsi nopeasti alkuun, eikä kokeiluun paljoa aikaa seonnut. Melko varmasti joitakin asioita tuli tehtyä tarpeettoman kierosti, mutta pluralismi näyttää olevan JS:lle luonteenomaista. Saman asian voi tehdä monella eri tavalla ja hyvin kyseenalainenkin “ratkaisu” saattaa vahingossa toimia. Mieluummin tietysti opettelisin alusta saakka niitä hyviä tapoja. Muuttujien näkyvyysalue ja esittely tuntuu edelleen hiukan randomilta: perinteinen var-tapa on oikeastaan ihan suoranaisen huono, mutta nykyään on sentään tarjolla järkevämpi let.

Sormiharjoituksena tiivistin vielä koodin mahdollisimman lyhyeksi, missä puuhassa tuli opittua sitä sun tätä uutta jekkua. Luettavuus on edelleen yllättävän hyvä, joten en varmaankaan osannut vielä käyttää kaikkia mahdollisia optimointikonsteja: frozen3.js. Pätkää voisi toki vielä merkittävästi lyhentää toiminnallisuutta heikentämällä — vaikkapa kumituksen poistolla ja värejä rumentamalla — mutta moinen kikkailu ei ole järin kiinnostavaa. Tulipa nyt tätäkin kokeiltua ja tulevaisuudessa ehkä lisääkin.

Mikään pakkohan ei ole piirtää hiutaleita.

Add comment December 16th, 2020

Poliisi pamputtaa taas

Värkkäilin 2016 retrograafikoille Pixel Polizein, joka on tarkoitettu pikemminkin toisaalla piirrettyjen kuvien tarkastamiseen kuin yleiseen formaatista toiseen konvertointiin ja ditherointiin (vaikka sillä formaattikonversioita kohtuudella pystyykin tekemään). Siinä missä tekstigraffaeditorilleni löytyi nopeasti käyttäjäkunta, jäi Poliisi hieman marginaaliin, kenties siksi, että samat asiat sai tehtyä muillakin ohjelmilla.

Alkuinnostuksen voimin jaksoin väsätä tukea aika monelle plattikselle ja moodille, mutta lopulta se polttoaine oli käytetty ja 2017 tein enää pieniä korjauksia. Sen jälkeen tuli yli kolmen vuoden tauko, ja kuvittelin jo koko projektin tulleen tiensä päähän – näinhän on tunnetusti käynyt monille muillekin innolla aloitetuille graffatyökaluille. Läsähdyksestä huolimatta prokkis toimi kuitenkin hyvänä olio-ohjelmointi- ja ohjelmistosuunnitteluharjoituksena: kokonaisrakenne on kohtuullisen selkeä, uusia koneita on helppo lisätä eikä missään ole kohtuuttoman mutkikkaita söheröitä, joihin en uskaltaisi enää itsekään koskea. Samaa ei voi valitettavasti sanoa PETSCII-työkalusta, joka mutatoitui pikaisen yhden illan kokeilun ympärille.

Innostuin päivittämään petskariedikkaa jälleen tänä syksynä sieltä täältä, etenkin kun Processing 2:ssa jumittamisesta alkoi tulla todellisia ongelmia. Lopetin siis vetkuttelun ja kohtuullisen pienin muutoksin sain siirryttyä Processing 3:een. Sitä myötä muistin myös Poliisin ja hyvin pikaisesti modernisoin senkin. Kopypastesin samalla mukaan uudistettua UI-koodia toisesta projektista, mitä myötä käyttöliittymä hieman koheni. Jo pelkästä P3:een siirtymisestä koitui jotain etuja korjattujen tiedostopolkujen ja uudemmilla JRE:n versioilla toimimisen muodossa.

Samaltahan se näyttää.

P3:ssa ei voi enää pompotella piirtäessä grafiikan pehmennystä pois smooth/noSmooth-funktioilla, joten oli pakko valita pikselien erottuvuuden vuoksi pehmentämätön graffa. Asiasta ei onneksi sanottavaa harmia koitunut muuten kuin hieman rösöisempien painonappien muodossa. Eri zuumitasoja kokeillessa huomasin käyttöliittymätekstien menevän joskus kuvan päälle, joten tulipa korjattua sekin pitkäikäinen bugi samalla. Katsotaan nyt, mitä teen seuraavaksi: retrokoneita ja niiden graffamoodeja olisi loputtomasti, mutta energiaa taas ei ole loputtomasti, joten jollei jostain paljastu suurta lojaalia käyttäjäkuntaa, niin taidan tyytyä lähinnä korjailemaan pikku bugeja.

Add comment December 1st, 2020

Processing 2 -> Processing 3

Pitkän jähnäilyn jälkeen päätin lopulta yrittää PETSCII-editorini päivittämistä Processing 2:sta Processing 3:lla toimivaksi. Yhtäältä P2 alkaa olla jo ammoinen versio, eikä sillä tehtyjen softien toimivuus nykykoneilla ole enää taattua, ja toisaalta sorsaversiosta kiinnostuneille on melkoista riesaa roikottaa koneella vanhentunutta ohjelmaa vain tämän takia. En mitenkään erityisemmin itse rakasta P3:a, sillä se ei ole joka suhteessa parannus aiempiin, mutta minkäs teet.

Processing 3 – haaskataanpa tilaa oikein kunnolla näihin tabien väleihin 🙁

Parin illan pakerruksen jälkeen uskoisin saaneeni jo suunnilleen kaiken toimimaan tyydyttävästi. Osa korjauksista oli triviaaleja, kuten ikkunan koon asetuksen vaihtaminen settings()-funktioon ja args:n kohdalla lisätarkistus, ettei taulukko ole null – P2:ssa taulukko on tyhjä, jos komentorivillä ei ole annettu parametreja. Ikkunan otsikko vaihdetaan nykyään surface.setTitle()-funktiolla aiemman framen sijasta.

Mutkikkaat asiat ovat kuitenkin mutkikkaita, ja etenkin esikatseluikkunan kanssa taistellessa oli usko loppua. Vanha (sekin huono) tapa avata toinen ikkuna ei enää toiminut alkuunkaan, mutta toisaalta esimerkeistä löytyy nykyään ihan semivirallinenkin keino kahden ikkunan käyttöön. Ongelmat alkavat siinä vaiheessa, kun toinen ikkuna pitäisi pystyä sulkemaan ilman, että koko ohjelman suoritus loppuu. Päädyin siihen, että toista ikkunaa ei kannata edes yrittää sulkea, vaan se on parempi piilottaa, kun sen halutaan olevan “kiinni”. Lopulta esikatseluikkunan koodista tuli selkeämpi ja siistimpi kuin vanhasta, joten ainakin tämä muutos oli parannus.

Toinen suuri kompastuskivi oli vasemman ja oikean shift-näppäimen toisistaan erottelu, joka oli jo ennenkin hankalaa ja vaati keyPressed(KeyEvent ke)-purkkaamista. Nyt vanha konsti ei toiminut enää ollenkaan, mutta onneksi keyEvent-oliosta saa edelleen kaivettua AWT:n eventin, jonka alta löytyy tuttu KeyEvent.KEY_LOCATION_LEFT. Tämäkin tapa on jo menossa kiellettyjen listalle, mutta ainakin toistaiseksi se vielä toimii. Olisi tietysti yksinkertaisinta, jos Processing vain suoraan tukisi shiftien erottelua, mutta se lienee turha toivo.

Oikeasti merkittävä parannus olisi, jos saisin höskän toimimaan 2D-kiihdytettynä, mutta tällä hetkellä piirtokoodi on niin tiukasti sidottu pikselien suoraan sorkkimiseen, että se ei ole kohtuudella mahdollista. Vaihdoin kokeeksi grafiikkaengineksi P2D:n, mutta se oli lähinnä ruma ja läginen (tämä on toki kiinni lähinnä omasta piirtokoodistani), joten olkoon toistaiseksi. Linuxilla ja Windowsilla kiihdyttämätönkin ikkuna on aivan tarpeeksi nopea, mutta Mäkillä meno on hieman hyhmäistä nykyisillä Javan versioilla, joissa ei ole enää Applen optimointeja mukana.

Add comment November 17th, 2020

Processing 3 and right/left shift

In Processing 2 it was relatively easy to tell the difference between the right and left shift by overriding keyPressed(java.awt.event.KeyEvent ke), but in Processing 3 event handling has changed and the function doesn’t even get called any more. I really really wanted to use the two keys differently and came up with this blurb for the keyPressed() handler:

if(keyCode==SHIFT)
{
  java.awt.event.KeyEvent ke;
  ke=(java.awt.event.KeyEvent)keyEvent.getNative();

  if(ke.getKeyLocation()==KeyEvent.KEY_LOCATION_LEFT)
  {
    // It's the left shift
  }
}

Note that this will only work with the default renderer, as the others don’t use AWT. The “solution” is also deprecated, so it might stop working any time and then we need another hack to work around the issue. Things would be so much easier if Processing simply provided a different keyCode for the two keys, but I wouldn’t hold my breath waiting for that.

Add comment November 16th, 2020

Revisiting the compositor script

After some recent updates it seems my old compositor toggle script may not work on all setups – for example two of mine. Marco doesn’t react to the compositor setting change or even the graphical Window Settings preference. Need to do things a bit more complicated way then:

#!/bin/sh

case $1 in
on)
	gsettings set org.mate.Marco.general compositing-manager true
	gsettings set com.linuxmint.desktop mate-window-manager marco-composite
	marco --replace &
	nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline=On }"
	;;
off)
	gsettings set org.mate.Marco.general compositing-manager false
	gsettings set com.linuxmint.desktop mate-window-manager marco
	marco --replace &
	nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline=Off }"
	;;
esac

Again, call it something like compositor.sh, copy it to /usr/local/bin and chmod a+x compositor.sh as root. The parameters on and off will toggle the compositing.

As a sidenote, the compositor started getting stuck in several situations on my main machine: turning the screen off and on would make the GUI get stuck, and likewise for display sleep. Updating to a newer driver version (455.23.04) seems to have remedied the situation.

Add comment October 29th, 2020

Kromikirja palaa juurilleen

Hankin Acer C710 -Chromebookin muistaakseni 2013 ja se palveli kohtuullisen hyvin kevyessä käytössä jokusen vuoden. Isona plussana mallissa olivat kohtuullisen täysi näppis (myöhempiä karsittiin), vaihdettavat muistit ja normaali 2,5″ kiintolevy, joka oli helppo vaihtaa SSD:hen. Kehittäjämoodi ja Crouton kohensivat kummasti elämänlaatua, kun Chrome OS:n rinnalle sai pyörimään Linux-softat, jotka täydensivät rajallista ohjelmavalkoimaa. Jossain vaiheessa totesin, ettei Chrome OS oikeastaan tehnyt mitään itselleni hyödyllistä, joten asentelin koneeseen SeaBIOSin ja normaalin Mintin, joka toimikin kelpo lailla lukuun ottamatta valmiustilaa.

Aika ajoi kuitenkin lopulta Chromebookin ohi, kun tehot alkoivat käydä riittämättömiksi ja akkukin hiljalleen lerpahti. Kone oli käytännössä joutilaana kaapissa muutaman vuoden, kunnes päätin entisöidä sen alkuperäiseen asuunsa: tarrat vek (tunnin kihnutus) ja Mintin tilalle takaisin Chrome OS. Jälkimmäinen tehtävä vaikutti lähes toivottomalta, koska olin joko tuhonnut tai hukannut järjestelmän palautusimagen, eikä laitetta periaatteessa palauteta ilman sitä luonnontilaan. Ohjeiden avulla sain kuitenkin firmiksen takaisin, sillä asennusskripti osasi ladata ja modifioida alkuperäisen tiedoston – ainakin C710:lle.

Ihan helposti palautus ei sittenkään tapahtunut, sillä käyttis palautetaan vielä erikseen ja siihen tarvittava työkalu ei toiminut Linuxilla. Googlaus auttoi jälleen ja sain tehtyä palautustikun onnistuneesti … paitsi että kaksi ensinnä kokeilemaani tikkua eivät toimineet syystä tai toisesta. Lopulta sentään Kingstonin vanha rähjäinen DataTraveler osoittautui toimivaksi.

Näin vanhat Chromebookit eivät ole enää päivitysten piirissä, vaikka rauta sinänsä ei olekaan juuri heikompaa kuin huonoimmissa uusissa ‘bookeissa. Chrome OS jää niin ollen versioon 65.x, joka ei valitettavasti riitä uusiin kiinnostaviin ominaisuuksiin, kuten Android- ja Linux-softien ajamiseen. Ikä painaa konetta muutenkin pahasti, joten se luultavasti pääsee jo viettämään eläkepäiviään kaapin nurkkaan ilman työvelvoitteita.

Luonnontilainen Acer C710 “Parrot”.

Add comment October 16th, 2020

Another VLC blanking issue

I’ve addressed VLC+screen blanking issues (screen blanks even if VLC should keep the screensaver off) before, but this time the old trick didn’t work. The “disable screensaver” setting was on as it is by default, but still the video started turning black after a while. After some googling it seems someone somewhere has broken VLC default settings and commented out the following line in the settings file, .config/vlc/vlcrc:

disable-screensaver=1

Removing the hash (#) sign seems to remedy the situation and the screen stays on as it should. Curiously, the setting is commented out on another computer too, but the blanking doesn’t kick in there. Curiously, saving the prefs from the GUI comments the line out again. I’ll get back to this if I find out anything.


VLC pimentää ruudun, vaikka “disable screensaver” on päällä asetuksista. Mitäs tämä on? Kyse voi olla tästä, mutta jos ei, niin kannattaa tsekata asetustiedosto .config/vlc/vlcrc ja poistaa risuaita seuraavalta riviltä:

disable-screensaver=1

Tämä ei taida olla valitettavasti kovin pysyvä ratkaisu, sillä asetusten tallentaminen käyttöliittymästä laittaa kommenttimerkin takaisin. Kerron, jos jotain uutta ilmenee.

Mockup of the issue / Havainnollistava kuva ongelmasta

Add comment September 26th, 2020

Mint 20, minulleko? Ei kiitos.

Jälleen kerran tuli työn alle uusi läppäriprojekti, kun kierrosta poistuneesta Dell Latitude E7270:stä piti tekemän itselleni liikkuvaa työasemaa. Linux Minttiä koneeseen toki, mutta päätin saman tien päivittää tuoreimpaan eli versioon 20, josta ei ollut vielä muuten kokemusta. Muutaman päivän kokemusten jälkeen tunnustin tosiasiat, vedin koneen sileäksi ja asensin tilalle hyväksi todetun 19.3:n. Jaa että miksikö?

  • Javan JOGL ja sitä myötä Processingin rautakiihdytetty 2D sekä 3D eivät toimi.
  • Varmaankin edelliseen liittyen OpenGL-ohjelmien kanssa on vähän kaikenlaista muutakin epämääräistä pykimistä, kuten mustia ruutuja.
  • Viimeisimmän päivityksen myötä hajosi myös Steam, mikä oli aika lailla viimeinen pisara. Veikkaan näiden kyseisten kompurointien johtuvan epäonnisesta Mesan, X11:n tai kernelin versiosta, mutta motivaatio syvällisempään selvittelyyn puuttuu.
  • Chromium on heivattu paketinhallinnasta ja tilalle tuputetaan Firefoxia. Tämä ei ole sen tyylistä valinnanvapautta, jota Linux-käytöltäni haen.
  • Kaikenlaisia legacy-kirjastoja on niin ikään hävitetty pakettitarjonnasta, mikä on tavallaan ymmärrettävää, mutta samalla rikkoo väistämättä joidenkin vanhojen ohjelmien yhteensopivuuden.

Tahdon uskoa, että nämä ovat tuoreen version lastentauteja, jotka ajan oloon ainakin osittain ratkotaan (paitsi kenties ideologiselta haiskahtava Chromium-kupru, jonka sentään sai ohitettua PPA:n avulla). Juuri tällä hetkellä tilanne on kuitenkin se, että tarvitsen läppärin oikeaan käyttöön enkä lelutukseen, joten yritetäänpä uudestaan joskus toiste – eikä tuotantokoneella.

Add comment September 23rd, 2020

Suspend/Sleep/Chromium/Chrome/Linux/Corruption

Just in case someone else is trying to google the same issue and does not find a solution. Chromium 85.0.4183.83 seems to be a rather bad update, as after returning from suspend the graphics are completely corrupted and the only “solution” is to restart the browser. The problem is not limited to Chromium only, but manifests itself with Chrome as well. Dunno if this is only Nvidia-related, but at least the driver version didn’t matter.

Here’s a solution that actually seems to work: start Chromium with the parameter –use-gl=desktop


Chromium 85.0.4183.83 -päivitys päätti ryhtyä sotkemaan grafiikkansa valmiustilasta palatessa. Sama koskee Chromea – en tiedä, onko ongelma vain Nvidiaan liittyvä, mutta ainakaan ajurin versiolla ei tunnu olevan merkitystä. Onneksi ratkaisukin löytyi: Chromiumin kun käynnistää parametrin –use-gl=desktop kera, niin tuntuu taas toimivan.

Melko vekkulin näköinen Facebook, muttei paljon naurattanut tänä aamuna.

edit: Found a better solution than the Vulkan trick!

edit2: Tried –use-cmd-decoder=validating instead. Didn’t work 🙁

edit3: This hack probably isn’t necessary any more. It was causing some performance issues anyway.

Add comment September 13th, 2020

Creaks – Amanita taas asialla

Amanitan joka ainoa peli pitää ostaa ja pelata läpi. Piste. Viime aikoina putiikin tahti tuntuu hieman kiihtyneen, siinä missä takavuosina pelien välillä meni pari kolmekin vuotta. Edellinen pläjäys, Pilgrims, oli hieman erilainen kuin aiemmat point’n’clickit sekä lyhyt, mutta varsin onnistunut yhtä kaikki. Niin ikävä kuin tämä on sanoakin, klassinen Samorost-sarja on toivottavasti jätetty hyllylle, kun se tuntui hieman kangistuneen jo kaavoihinsa. Tällä kertaa pelutukseen päätyi tuore Creaks.

Tyypillinen näkymä

Pelistä ei ole ainakaan vielä Linux-versiota, mutta Steam+Proton oli jälleen ystävä, ja kaikki toimi suorilta ilman mitään merkittäviä kupruja. Harvakseltaan putosi jokunen frame välistä, mutta paha sanoa, oliko kyse pelistä itsestään, koneeni asetuksista vai Protonista. Rahaa Creaksista pyydetään 20 euroa, mikä ei ole tällaisesta seikkailusta ihan vähän – epäilemättä peli nähdään jossain bundlessa ja tarjouksessa ennemmin tai myöhemmin.

Toinen tyypillinen näkymä

Aiemmista Amanitoista Creaks poikkeaa etenkin kontrolliensa osalta: point’n’click on ollut firman leipälaji, mutta tässäpä ohjaus tapahtuukin näppäimistön tai peliohjaimen voimin. Syynä tähän valintaan ovat todennäköisimmin lukuisat konsoliporttaukset. Creaks on muutenkin toiminnallisempi kuin aiemmat teokset, ja erikoisuutena pelissä on jopa mahdollista kuolla(!) toisin kuin ennen. Grafiikat ja musiikit ovat tuttua taattua laatua, joskin hieman synkempiä. Monin paikoin tuli tunne, että pelaisi piirroselokuvaa.

Musikaalinen minipeli

Hyvin suunniteltuja puzzleja riittää moneksi tunniksi (itse sain sekoamaan peräti kahdeksan tuntia kaikkine sivupolkuineen ja animaatioineen), ja vaikeustaso on yleisesti ottaen hyvin kohdillaan. Välillä menee hieman mekanistisen tahkoamisen puolelle, mutta melkein joka ruudussa on joku nokkela koukku. Lisää ajankulua tarjoavat lukuisat pikku minipelit, joilla ei ilmeisesti ole mitään merkitystä itse juonen kannalta. Seinissä on myös animoituja maalauksia niin ikään viihteeksi. Minipelien läpipeluusta ja taulujen löytämisestä saa Steamiinsa ainakin saavutuksia.

Creaksin udelleenpeluuarvo lienee kohtullisen pieni, kuten tällaisilla peleillä tuppaa olemaan. Eiköhän tuonkin äärelle tule joskus palattua vaikkapa puuttuvia tauluja etsimään, mutta jo kerran ratkaistut pulmat eivät toki ole kovin kiinnostavia. Kyllä tätä taas kelpasi hakata, joten antaa tulla lisää vaan – luottokortti on alati valmiina!

edit: Nvidian ja työpöydän kompositorit vek, niin framerate pehmenee oleellisesti.

Add comment August 16th, 2020

Next Posts Previous Posts


Kommenttien virta

Aiheet