Uutiset:

Ilmoitustaulu mahdollisten ongelmien varalta (wikimedia.org / Etherpad)

Sähköpostia ylläpidolle: kantapaikanherra (at) gmail.com

Main Menu

Ohjelmointi

Aloittaja Juha, helmikuu 03, 2019, 10:01:17

« edellinen - seuraava »

0 Jäsenet ja 2 Vieraat katselee tätä aihetta.

-:)lauri

^jos oikein ymmärsin tuossa musiikki on oma ryhmänsä. Mikä on tietysti aivan liian epätarkka luokka sikäli kun kaikki instrumentit todennäköisesti äänitiedostoissa menisivät kyseisen otsakkeen alle. Tässä tarvittaneen ohjaamatonta oppimista, jossa kone itse ryhmittelee. Tuossa olisikin listaa läpikäymiseksi ja oikean ryhmittelymenetelmän löytämiseksi -> https://en.wikipedia.org/wiki/Unsupervised_learning#Approaches mikäli tämä menee siihen, että pitää tuo softa kirjoittaa kokonaan itse.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

^
äänten luokittelu ohjaamattomalla oppimisella on haettaessa kaiketi niin uusi innovaatio, että kaikki löytämäni linkit ohjaavat lähinnä tieteellisiin artikkeleihin, joissa jokaisen abstrakteissa ollaan varovaisen optimistisia, että ohjaamaton oppiminen voisi olla hyvä lähestymistapa äänten luokitteluun. Sen enempää nuo abstraktit kuin itse artikkelitkaan eivät minua auta, koska matemaattinen notaatio ei ole minulla niin hyvin hallussa, että ymmärtäisin papereissa esitettyjen kaavojen yhteydessä, että mitä niissä tarkalleen otaen lasketaan. Matemaattinen notaatio kun on vielä hyvin kaukana siitä, miten nuo laskut kirjoitetaan tietokoneen (ja minun) ymmärtämään muotoon.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

#122
^

Ilmeisesti tässä olisi käytettävä restricted Boltzmann machine -kompositiota nimikkeellä (Convolutional) Deep Belief Neural Network. Tämä systeemi - jos oikein ymmärsin - on taitava kuvien luokittelussa. Edellyttääkö tämä, että äänitiedosto muutetaan jonkinlaiseksi kuvadataksi, jonka pikselit sitten vedetään kyseisen Deep Belief -neuroverkon läpi?
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

Melodious Oaf

^

Toi kuulostaa aika vaikealta ratkaisulta. Oletko varma että sulla on siihen oikea ongelma?

Onko ongelma se, että kuulet päässäsi jonkun tietyn soundin, tietäisit soittimien nimiä, mutta et löydä juuri oikeita softasoittimia?

Vai oliko se niin, että sulla on vähän vastaavanlaisia soittimia eri nimillä eri kansioissa ja kansiohierarkioissa ja haluaisit keskenään vastaavanlaisia nopeasti vertailtavaksi, jotta hyvän soundin löytäminen helpottuu?

-:)lauri

#124
^

Joo tuo spekuloimani on vaikea ratkaisu ja sanoinkin tuonne tämän episodin alkuun, että mun taidot eivät tällä hetkellä riitä tuollaisen aikaansaamiseksi kun tai paremminkin kun taitoni eivät riitä vielä siihenkään, että tekisin ohjelman, joka ryhmittelisi tiedostonimet samankaltaisten nimien perusteella.

Mä siis latasin juuri monta gigaa ilmaisia wav-tiedostoja eri sample-valmistajilta, jotka tarjoavat demopaketteja valikoimistaan ilmatteeksi koepalloiksi. Eri valmistajilla on keskenään eri kansiorakenne ja nimeämistapa tiedostoilleen. Jollain on soittimen nimi kansiossa ja tiedostonimet kansion sisällä epäkuvaavasti geneerisiä tyyliin "001_sound.wav" ja osassa kansion nimi voi olla joko "loop" tai "one shot" ja tiedostonimessä soittimen nimi jossain kohtaan tyyliin "01_kickA.wav". Siis parhaimmissa tapauksissa. Osassa kuitenkaan kansion nimestä tai tiedoston nimestä ei voi päätellä onko kyseessä loop vai one shot tai edes sitä, minkälainen soitin tai ääni kyseessä.

Nää pitäisi saada järjestykseen, josta kävisi nopeasti selväksi, mitkä samplet ovat keskenään saman kuuloisia. Pääsisin myös eroon keskenään toisistaan poikkeavista kansiorakenteista ja nimeämistavoista. Muutenkaan kaikki näistä äänistä eivät ole soittimien ääniä suoraan vaan ne voivat olla raskaastikin syntetisoituja ja myös nämä olisi syytä saada jotenkin luokiteltua. Tavoite olisi, että kun kuuntelen yhden filun kansiosta, tietäsin tyylilajin, jollaisia äänet kyseisessä kansiossa ovat. Sitten vain nimeäisin kansion kuvaavalla nimellä ja jatkossa tietäisin mistä hakea minkäkintyyppisiä ääniä.

Toki tässä on vielä sekin ongelma tuon tekoälyohjelman kanssa, että vaikka tietokone osaisikin jakaa äänitiedostot samankaltaisuuksien perusteella ryhmiin, useimmissa tapauksissa kone ryhmittelee eri perustein kuin ihminen, sillä kone käsittelee erinäköistä dataa kuin ihminen luonnonilmiöitä ryhmitellessään, mutta koko tämä tekoälyjuttu tosiaan ei ehkä ole tämän hetken ongelma muutenkaan.

Tämä ei nimittäin varsinaisesti liity siihen, että kun mulla on mielessä saundeja, joita tarvitsisin mutta en löydä. Kaikki visioimistani saundeista eivät ole välttämättä suoraan edes soittimien ääniä vaan vähintään vahvastikin koneellisesti sämplättyjä. Se että saisin näppärästi kyseisiä saundeja keskittymiseni herpaantumatta, edellyttää todennäköisesti, että opettelen käyttämään käytössäni olevan LMMS:n -ohjelman instrumenttia, jolla voidaan ainakkin mainospuheiden perusteella tuottaa ihan millainen ääni tahansa jos sitä vain osaa käyttää.

Olen huomannut, että kun selaa noita sämplefiluja eikä löydy välittömästi oikeaa ääntä, kohta olen jo unohtanut millaista ääntä lähdin alunperin edes etsimään. Järkeilen että jos taas voisin muokata yhtä ääntä oikeaan suuntaan tietäisin kokoajan mitä etsin, kun ääni muuttuisi kokoajan lähemmäksi tavoitetta.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

Melodious Oaf

Lainaus käyttäjältä: Viihde- ja hömppäpöhinä - lokakuu 23, 2020, 00:42:07
Olen huomannut, että kun selaa noita sämplefiluja eikä löydy välittömästi oikeaa ääntä, kohta olen jo unohtanut millaista ääntä lähdin alunperin edes etsimään. Järkeilen että jos taas voisin muokata yhtä ääntä oikeaan suuntaan tietäisin kokoajan mitä etsin, kun ääni muuttuisi kokoajan lähemmäksi tavoitetta.

Toi on hyvä kuvaus ongelmasta.

En osaa hyvin neuvoa, kun erittäin harvoin käytän mitään sampleja ja vissiin ajattelen aika pitkälti perinteisten soitinten pohjalta.

Mutta yksi ongelman syy on se, että oot ladannut ison määrän kaikenlaista sekalaisesti järjestettyä. Mulla on käytössä Logic, ja siinä (oletan että myös muissa ohjelmissa) ohjelmiston omia looppeja ja sampleja on tägätty valmiiksi niin, että samanlaiset soundit löytyy samoista kategorioista, kun niitä selaa.

Käsin täytyy tehdä jonkinlainen erottelu erilaisten äänityyppien välillä. Mutta oisko se jotenkin helpompaa, jos lisäät studio-ohjelmaan omia untagged sampleja. Ne saattaa mennä kaikki vaikka samaan hakemistoon, ja sitten käyt kerran käsin läpi ja luokittelet.

Tietysti siinä pitäis sen verran tuttuja olla ne eri tyypit, että tietäis mitä ne on ja miten ne haluaa luokitella tai kannattaa luokitella.

Jos saisit jostain foorumeilta tai videoista tai jostain selville, minkälaista metodia jotkut sun kanssa samaa hommaa tekevät on käyttäneet, se saattais auttaa tossa. Mä en usko että niiden kaikkien samplejen jakainen uudestaan hakemistoihin on oikeasti mikään järisyttävän iso homma.

Mun on myös vähän vaikea samaistua tohon että kuulee päässään tietyn soundin ja sit hakee just sitä. Mun kokemus on, että aina on tiettyjä rajoitteita joiden puitteissa toimitaan. Totta kai pitää ensin osata jotain ja tietää jotain. Tyyliin että osaan soittaa tällasta peukkubassoa, tai että jos laitan tällasen kaiun, se tekee sitä ja tätä. Siinä muodostuu tietty osattujen asioiden repertuaari, joita voi käyttää luovassa prosessissa, ja luovaan prosessiin kuuluu olennaisena osana myös ne rajoitteet. Että toimit sen puitteissa mitä osaat ja tiedät -- ja sit taas toisaalta erilaiset vahingossa keksityt jutut ja muut vastaavat :D

Mitä toi nyt sit antaa tähän? No. Jos lataat vaikka 13 teraa sampleja, ei siellä välttämättä ole sellaista kuin olit mielessäs miettinyt. Ja sulla voi myös olla liikaa vaihtoehtoja. Jotkut kai tekee konemusaa silleen että ne ensin mikrofoniin ääntelee sitä ideaansa, ja sit yrittää softainstrumenteilla ja muulla rakentaa sitä sen jälkeen. Tää nostaa sellasen idean esiin, että voitko sä kehittää jonkun tavan saada esimerkiks tietyn idean aivan viitteellisesti taltioitua silleen että muistat sen perusteella, mitä siihen piti tulla. Sit jos se prosessi ja vertailu tai muu hieman venähtää, se ei välttämättä enää tukahduta koko sitä toimintaa aivan samalla tavalla.

Mut noita tekemisen tapoja on niin monia, että ei toikaan mikään absoluuttinen idea oo. Aivan varmasti sellanen tapa voi olla myös, että etsii aluks nimenomaan jotain soundia ja semmosta että joo, tää kuulostaa nyt aika hyvältä, ja siitä sit lähtee se biisin tai muun vastaavan rakentaminen. Esimerkiksi J. Karjalainen taitaa olla vähän ton tyyppinen biisintekijä.

-:)lauri

^

Hyviä huomoita, kiitos. Mä oon laittanut noi lataamani sämplefilukansiot omaan kansioon, jotta tiedän mitkä ovat tän LMMS-softan omat oletusasennuksen yhteydessä tulleet filut ja mitkä on näitä mun lisäämiä filuja. Noita lataamiani sämplefiluja vaan on niin helvetisti, että en ajatellut ryhtyväni niiden manuaaliseen parsimiseen omiin tyllilajinsa mukaisiin kansioihin. En ole vielä keksinyt miten tulen niitä hyödyntämään vai tulenko ollenkaan.

Tuota "J. Karjalaisen tapaa" tässä itsekin haen, mutta se edellyttää, että osaan käyttää koneen virtuaali-instrumentteja yhtä hyvin kuin J. Karjalainen perinteisiä instrumentteja. Siihen mulla on vielä matkaa, mutta se polku on varmasti aika pitkälle kuljettava, jos haluan toteuttaa visioitani Karjalaisen tapaan.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

#127
Lainaus käyttäjältä: Viihde- ja hömppäpöhinä - joulukuu 20, 2020, 21:41:59
^
Vittu kun tekisi mieli jatkaa tuon ongelman ratkomista. Päivän mittaan pulpahtanut mieleen uusia ideoita, joita olisi kiva kokeilla. Saatana.

Ajatus on siis rakentaa yhden asiakas-applikaation asetusten asettamiseen ja säätämiseen tarkoitettu webbikäyttöliittymä ilman React- tai Vue- kirjastoja. Kyseiset kirjastot ainakin olisivat aavitusken verran overkill. Tarve tällaiselle syntyy siitä, että muutamien asiakas-applikaatioiden asetukset pitää laittaa manuaalisesti suoraan tietokantaan, mikä on hyvin riskialtista ja minkä turvallisen käyttämisen osaamista ei voi edellyttää ellei tunne tietokantojen toimintaa riittävän hyvin.

Meillä on joitain tällaisia projekteja, joissa ei ole asetusten tekoa varten näppärää käyttistä ja ne vievät aikaa esimerkiksi minulta tai muilta kehittäjiltä aina kun asetuksiin halutan muutoksia. Meillä on esimerkiksi kymmeniä asiakkaita yhdessä tällaisessa ongelmatapauksessa ja 15%-20% minun työstäni on tällä hetkellä jo tuon yhden projektin asetusten säätämistä, mikä ei ole ideaalitilanne lainkaan, sillä olen ensisijaisesti ohjelmoija enkä tekninen tuki, ellei kohdatut ongelmat edellytä juuri ohjelmointiosaamista.

Simppeleitä webbilomakkeita oppii käyttämään lähes kuka tahansa ja jotta teknisen tuen ei tarvitisisi meillä toimia teleoperaattorina asiakkaan ja minun välillä, olisi hyvä, että tekninen tuki voisi suoraan säätää asetuksia, jos asiakas ottaa yhteyttä.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

#128
^
kaksi isompaa haastetta on navigointi ja dynaamisesti muuttuva lomake. Periaatteessa lomakkeen voisi tehdä staattiseksi sekoittamalla php-koodit html-koodin sekaan, mutta koska backend on api, staattinen html-sivu ei oikein tule kyseeseen.

Navigointihaasteeseen keksin päivällä ideoita mutta tuo lomakkeen oikeanlainen dynaaminen muuttelu edellyttää vielä hiukka sulattelua.

Päivän ideat liittyivät siis navigointiin: päivitän sivun url-osoitteen vain get-komentojen yhteydessä ja post-komennot toimivat vain taustalla. Näin sivuilla ehkä voi surffailla osoiteriviä muuttelemalla edes takas ilman ongelmia.

Sivujen lomakkeiden dynaaminen rakentelu on vielä mietintämyssyn alla. Periaatteessa pitää vain pystyä generoimaan tietynlainen lomake tietynlaista nappia painettaessa ja tiettyyn paikkaan, mikä tuskin on vaikea taski. Enempi tulee ehkä haastetta datan hallinnassa eli kaikki kentät pitää nimetä niin, että tietojen luku voidaan automatisoida backendissä mahdollisimman kivuttomasti. Nää on näitä tapauksia, joissa pitää keksiä yleinen sääntö ennen kuin kaikkia osasia on välttämättä edes olemassa.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

#129
^
Ai niin ja tokeni. Tokeni pitää tallentaa selaimen välimuistiin asetettavaan keksiin. Ja jotta ei syödä käyttäjän selaimen resurseja, pitää edellinen keksi todennäköisesti poistaa käytöstä ennen uuden keksin asettamista. Käytössäni on jwt-tokeni, joka generoidaan tunniksi eteenpäin joka kerta kun backendia kutsutaan. Jos sivuja päivittää alle tunnin välein, sivuilla pysyy sisäänkirjautuneena vaikka kuinka pitkään, jos taas kuluu yli tunti edellisestä päivityksestä, kirjautuu käyttäjä automaattisesti ulos.

Tää on firman käyttöön tarkoitettu sivu, jota on tarkoitus käyttää firman koneilla. Edellyttääkö GDPR, että myös tällaisessa tapauksessa pitää antaa käyttäjän valita hyväksyykö hän keksien tallentamisen?
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Voisikohan tuohon tehdä vielä sellaisen tietoturvaratkaisun backendiin, että tiettyä routea voi kutsua vain tietyistä ip-osoitteista. Tyyliin duunin sisäverkosta. Tosin meillä on ympäri maapallon toimintaa ja sisäverkko vain Suomessa. Pitääpä joskus tiedustella, firman verkkoasiantuntijoilta, että onnistuisikohan tällainen ip-rajaus jotenkin vai ovatko työntekijöittemme ip-osoitteet Suomen ulkopuolella mitä tahansa milloinkin. Onnistuessaan tämä rajaisi sisäänkirjautumisen mahdollisuuden vain firman koneille.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

#131
^
Mä oon tossa joululoman aikana kehitellyt mielessäni tota ja pikkuhiljaa alkaa oleen tuo logiikka pääpiirteittäin selkee.

Meillä on siis järjestelmä, jota laajennetaan plugineilla ja jokainen plugini tarvitsee omat asetussivunsa. Nyt alkaa olla geneerinen lähestymistapa selkeissä tapauksissa kohdallaan asetussivuja varten. Mulla on myös olemassa kaksi poikkeustapausta, joiden kanssa toivottavasti keksin geneerisen tavan käsitellä niitäkin ja selkeästi. Jotain koodia pitää siis aina kirjoittaa tyhjältä pöydältä tulevissakin tapauksissa, mutta jos saan ne keissit selkeästi erotelluiksi omiksi jutuikseen, ehkä tämän voisi yrittää laittaa toimimaan jollekin pluginille, jolta asetussivut vielä puuttuvat.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Selvitin miten GuzzleHttp-kirjasto toimii. On yksi prokjekti töissä, jossa pitää optimoida koodia ja tuo kirjasto lienee vastaus kysymykseeni. Projektissa tehdään kymmeniä ellei peräti satoja kyselyitä ulkoiseen apiin ja nyt kun nuo apikyselyt tehdään peräkkäin, siinä menee pahimmillaan jopa minuutti, että kaikki kyselyt on käyty läpi. Kukaan nettiä käyttävä ei kuitenkaan odottele niin kauaa, että selaimessa tapahtuisi jotain. Guzzle mahdollistaa hakujen tekemisen rinnakkain eli sen avulla on mahdollista hakea vaikka kymmeniä hakuja samaan aikaan (mikäli api sen mahdollistaa), mikä nopeuttaa hommia merkittävästi. Pitäisi yrittää kirjoittaa implementaatio projektiin tuota kirjastoa käyttäen ensi viikolla. Kokeilin äsken tässä omalla koneellani, kuinka tuota kirjastoa käytetään ja vaikutti erittäin lupaavalta. Täytyy ottaa kirjasto käyttöön.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Lainaus käyttäjältä: Viihde- ja hömppäpöhinä - syyskuu 06, 2020, 03:03:02
Vaikuttaa siltä, että homma etenee. Tässä on tarvinnut tehdä hieman kompromissiä sen suhteen, kuinka tarkkaan viivaa seurataan ja kuinka pehmeä viiva rakennetaan. Mun tarttee kyllä tota jotenkin vielä hioa, mutta periaatteessa tämä alkaa riittämään: https://editor.p5js.org/lazydistribution/sketches/2ZEKC6eFB. En keksinyt keinoa tehdä tuota interpolaatiota, joten jouduin turvautumaan viivan pyöristäjään se vie nyt saatanasti aikaa että se muodostaa tuon viivan. Pitää tutkia vielä, miten saan tähän interpolaation. Se lienee nopeampia tapa pyöristää rosoisuus kuin tuo käyttämäni viivan pyöristäjä.

Lainaus käyttäjältä: Viihde- ja hömppäpöhinä - syyskuu 05, 2020, 18:18:49
^
Nyt on ongelma. Molemmat ääriviivat koostuvat nyt siis pienistä viivoista, jotka ovat keskenään sekaisin samassa listassa. Jotenkin pitäisi nyt kyetä järjestää ääriviivat, omiin listoihinsa ja vieläpä sinä järjestyksessä, kuin ne näyttävät olevan kuvaruudulla.  Kellään ideoita miten?

Meni saatanasti aikaa, että sain ratkottua tämän pulman. Jos tuota ei olisi ratkaissut, nyt käyttämääni viivan pyöristysfunktiota ei olisi voinut käyttää kun se ei olisi osannut yhdistää oikeita pisteitä toisiinsa kun ne eivät olleet järjestyksessä.

Edit: eivät ne kaikki ole järkässä vieläkään mutta riittävän hyvin kuitenkin.

Siirryin tässä marching squares -implementaatioon.

Valmiina
- marching squares
- muotojen ulommaisten ääriviivojen tunnistus

Kesken
- ei tunnista päällekkäisiä muotoja. Eli ympyräradan keskellä oleva reikä jää tunnistamatta
- piirtotyökalu, jolla piirretään autorata

Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

#134
Lainaus käyttäjältä: Viihde- ja hömppäpöhinä - maaliskuu 14, 2021, 04:05:19
Lainaus käyttäjältä: Viihde- ja hömppäpöhinä - syyskuu 06, 2020, 03:03:02
Vaikuttaa siltä, että homma etenee. Tässä on tarvinnut tehdä hieman kompromissiä sen suhteen, kuinka tarkkaan viivaa seurataan ja kuinka pehmeä viiva rakennetaan. Mun tarttee kyllä tota jotenkin vielä hioa, mutta periaatteessa tämä alkaa riittämään: https://editor.p5js.org/lazydistribution/sketches/2ZEKC6eFB. En keksinyt keinoa tehdä tuota interpolaatiota, joten jouduin turvautumaan viivan pyöristäjään se vie nyt saatanasti aikaa että se muodostaa tuon viivan. Pitää tutkia vielä, miten saan tähän interpolaation. Se lienee nopeampia tapa pyöristää rosoisuus kuin tuo käyttämäni viivan pyöristäjä.

Lainaus käyttäjältä: Viihde- ja hömppäpöhinä - syyskuu 05, 2020, 18:18:49
^
Nyt on ongelma. Molemmat ääriviivat koostuvat nyt siis pienistä viivoista, jotka ovat keskenään sekaisin samassa listassa. Jotenkin pitäisi nyt kyetä järjestää ääriviivat, omiin listoihinsa ja vieläpä sinä järjestyksessä, kuin ne näyttävät olevan kuvaruudulla.  Kellään ideoita miten?

Meni saatanasti aikaa, että sain ratkottua tämän pulman. Jos tuota ei olisi ratkaissut, nyt käyttämääni viivan pyöristysfunktiota ei olisi voinut käyttää kun se ei olisi osannut yhdistää oikeita pisteitä toisiinsa kun ne eivät olleet järjestyksessä.

Edit: eivät ne kaikki ole järkässä vieläkään mutta riittävän hyvin kuitenkin.

Siirryin tässä marching squares -implementaatioon.

Valmiina
- marching squares
- muotojen ulommaisten ääriviivojen tunnistus

Kesken
- ei tunnista päällekkäisiä muotoja. Eli ympyräradan keskellä oleva reikä jää tunnistamatta
- piirtotyökalu, jolla piirretään autorata

Valmiina
- marching squares
- muotojen ulommaisten ääriviivojen tunnistus
- tunnistaa päällekkäiset muodot, eli ympyrän keskellä oleva muoto leikkaa ympyrään reiän.
- turhien koordinaattien minimointi. Voi edellyttää jatkokehittelyä.
- piirtotyökalu, jolla piirretään autorata

Kesken
- jos piirtää rinkulan keskelle ei tunnista enää muotojen reikiä. (Tosin ei niin olennainen koska autorata on yhtenäinen viiva jolla vain yksi uloin ääriviiva.)

https://editor.p5js.org/lazydistribution/sketches/m5Yp7cLe0
Eli tuo on nyt periaatteessa sellainen kuten pitääkin.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.