29 lokakuuta, 2015

Näyttelijän käsikirja 5

Tiedostamaton päämäärä

Näyttelijän tiedostamaton on näytellä hyvin, osata rooli, jne.
Roolihahmon tiedostamaton päämäärä ei saa kadota:
Jos vastanäyttelijälläsi on vaikkapa repliikki:  -"Saat anteeksi"...  
Jos sait yhtäkkiä anteeksi, päämäärä on vaarassa kadota... saata kohtaus loppuun... katso silmiin, saitko todella anteeksi... tai jos sittenkin sait, jatka vaikka kiittelemällä ja vakuuttelemalla ettet koskaan enää... (tekstin puitteissa)

Vastus, eli ongelma (usein vastanäyttelijän päämäärä) on juuri se mikä tekee kohtauksesta mielenkiintoisen. 
Asiat eivät vain ratkea, vaan jos vastusta ei ole, löydä jostain sellainen: avain putoaa, äh, jotain unohtui, eikä sittenkään...

Prosessi, eli miten ongelmaa eri tavoin ratkaistaan on kohtauksen varsinainen sisältö. Ei ole ollenkaan niin kiire pois lavalta, kun  pitää saada ensin asiat hoidettua loppuun, kun tässä on vielä tämä asia kesken...

Etsi siis näyteltävää toimintaa

Toiminta näyttämöllä on 1) fyysinen (kineettinen) teko: (älä 'ole jotain' vaan tee jotain)
Sinua ehkä pyydetään tekemään jotakin, tai teet jotakin omasta aloitteestasi...

2) Fakta (objektiivinen) kuuluu taustakertomukseen 
(ei tarvitse koristella selityksillä kuten "kamala tyyppi")
 - Hän aina löysyttää säilykepurkin kannetkin vaimolleen valmiiksi ja viikkaa muovipussit pieniksi paketeiksi. 
 - Hän kaatoi tuopin kaljaa toisen päähän...  

3) Tee siitä (aktiivinen) toiminta verbi:
Taivuttele, syytä, emmi, ano, rankaise, kiusoittele, vähättele, valita, vakuuta, flirttaa...
Emotionaalinen verbi sisältää usein riskin.
Verbi voi purkautua osiksi, joista saa sekvenssin:

Huolestunut huomaa, jännittyy, kauhistuu ja oivaltaa, sitten suuttuu ja syyttää...
Vihainen havaitsee, raivostuu, empii, tyynnyttelee itseään, rankaisee, taivuttelee, vakuuttaa...
Huvittunut oivaltaa, hihittää, räjähtää nauruun, hymyilee, vähättelee, pelleilee...
Surullinen ruikuttaa, valittaa, syyttää, kerjää, ulvoo, kokoaa itsensä...
Rentoutunut laulaa, hyräilee, viettelee, flirttaa, viettelee, hurmaa, jammailee...

4) Luo henkilökohtainen ja salainen mielikuva (joka vetoaa aisteihin), 
se lisää yksityiskohtaisuutta staattisempaan toimintaan.
 - Katso vastanäyttelijää kuin kuollutta ihmistä. ( Jos siis olet katsonut... )
 - Esittäkää hellyys kuin liikesopimusneuvottelu. ( Jos olet ollut sellaisessa... )
 - Tappelu, joka on kuin puumiekoilla käytävä taistelu lastennäytelmässä, jne...

Lähde: Näyttelijän ohjaaminen (Judith Weston)

Näyttelijän käsikirja 4

Luova tila

Luovuus voi herätä kun koetat tehdä vastakohdan kautta. Hurmaa toinen sanomalla: "Mä tapan sut". Jokainen roolihahmo on rakastettava ihminen. Koominen roistokin. (Tosin jos sanot hahmoasi roistoksi, sinun voi olla vaikea olla tuomitsematta häntä... Älä ole syyttäjä tai tuomari, - jos olisit itse tuo hahmo, haluaisitko osaksesi ymmärrystä ja armoa? Jokainen on jonkun lapsi, tai rakastettu... ) Ole aina hahmosi puolella, jos ei nyt kuitenkaan luoda siitä ihan pelkkää karikatyyriä, vaikka näytelmä olisi kuinka tyylitelty. 

Luonne on sarja tekoja jotka voi näytellä. Särmä ei ole mikään asenne jonka voi ottaa, vaan on vain mentävä roolihahmon ihon alle ja katseltava maailmaa sieltä. Luotava yksilöityä käyttäytymistä ja vedottava aisteihin. Ei tarvita älykkyyttä, luokittelua, eikä yleistyksiä.

Kohtauksessa näyttelet yhden päämäärän, esimerkiksi haluat tehdä mahtavan vaikutuksen, tai haluat että se itkee. Haluat jonkun pois tilasta. Haluat erään riisuutuvan, jne... On todella helppo näytellä, jos... paitsi että löytyy 1) fyysinen toiminta, 2) tunnetta on myös mukana ja lisäksi vielä päämäärän saavuttamisen voi fyysisesti 3) nähdä. Silloin näyttelijä tavallaan vain tekee jotain toiselle. On parempi olla sopimatta erikseen miten homma ratkeaa, vaan muutella ja aidosti improvisoida joka kerta uudelleen. 

On mahdotonta näytellä jos toiminta on mahdotonta. Et voi oikeasti fyysisesti lentää tai mennä kahtia, palaa tai litistyä tai syödä norsua. Et voi myöskään näytellä abstrakteja asioita kuten lama tai modernismi. 


Lähde: Näyttelijän ohjaaminen (Judith Weston)

Näyttelijän käsikirja 1

Ote kirjasta: Practical handbook for the actor
(Bruder, Cohn, Olnek, Pollack, Previto, Zigler) Oma suomennokseni.

Kerro aina totuus

Näyttelemisen opiskelu on häpeämistä ja syyllisyyttä. 
Kun sinut pistetään tekemään harjoitusta jota et ymmärrä, tai vaikka ymmärrät, et tiedä miksi se tehdään, epäonnistumisesi johdosta sinut valtaa häpeä ja opit nopeasti teeskentelemään. Tämän vuoksi koet syyllisyyttä. Alat pitää itseäsi pelkurina. Pidät kuitenkin julkisivua pystyssä ja esität hienosti osaasi kaiken ymmärtävänä, avoimena, rohkeana, näyttelijäntyön opiskelijana. Olet kuitenkin asialle omistautunut ja halukas oppimaan, uhraat paljon sille, että löytäisit keinot joilla saisit sisälläsi vellovat jutut siirretyksi näyttämölle. 
Kaikki opettajat eivät voi olla mestareita, joten ei auta kuin luottaa omaan terveeseen järkeen. Raukkamainen pelkuri opettajanasi on riippuvainen sinun komplekseistasi ja paitsi estää positiivisen treenaamisen, myös tuhoaa urasi taiteilijana. 
Totuuden taju, tuo yksinkertanen, outo tunne, kaikki se mitä tunnet, herättää teatterin henkiin. Miten käännät sen teatterin kielelle? 
Näyttele hyvin tai huonosti kunhan se on totta! Ei ole sinusta kiinni onko näyttelemisesi, tai urakehtyksesi mahtavaa, ainoa mikä on kontrolloitavissasi on pyrkimyksesi (intentiosi). 
a) Jos pyrit manipuloimaan, esittämään, tekemään vaikutuksen, koet mietoa kärsimystä ja mukavia hetkiä. 
b) Jos pyrit sisäisen totuuden etsintään ja sen seuraamiseen, käyttäen tervettä järkeä ja pakotat tahtosi palvelemaan oppimista ja yksinkertaisuutta, saat kärsiä epätoivoisesti yksinäisyydestä, jatkuvasta itse-epäilystä. Ja jos kestät, teatteri, jota palvelet, palkitsee sinut suurimmalla onnella minkä se tietää.
Olit ensin katsoja. Mikä sinut veti teatterin pariin? Mikä saa katsojan tuntemaan jonkin hetken munissaan? Se ei ole kenenkään hallinnassa. Työnä ei ole siis näiden hetkien tekeminen, vaan itsensä mukaan tuominen mahdollisimman hyvässä kondiksessa. Esimerkiksi näyttelijä tarvitsee hyvän äänen ja toimivan vartalon jotta pystyy tekemään niillä mitä haluaakin, mutta sellaisten hankkiminen voi viedä aikaa, ellei ole jo hiukan pohjakuntoa. 
Tee lista niistä asioista, joiden toivoisit olevan paremmin omassa itsessäsi ja kyvyissäsi. Mieti miten saat kehitettyä näitä asioita. Kauanko se vie aikaa? Aloita nyt.
Kannattaa siis keskittyä kehittämään niitä asioita joihin todella voi vaikuttaa esim: ääntä, kykyä analysoida käsikirjoitusta, keskittymiskykyä, kehoa. Miksi tuhlata aikaa esimerkiksi huolehtimalla pituuskasvustaan, muitten mielipiteistä, näytelmän menestymisestä, ohjaajan tai muiden näyttelijöiden kyvyistä, istuuko jossain joku kriitikko vai ei, kun kuitenkaan et voi vaikuttaa näihin asioihin. Jokainen joka tahtoo oppii näyttelemään ja se joka siinä epäonnistuu kärsii tahdon puutteesta eikä kyvyn puutteesta. 
Näyttelijän työtä on löytää tapa, jolla voi elää todellisesti kuvitelluissa olosuhteissa. Näyttelijän on siis kyettävä päättämään mitä tekstissä tapahtuu yksinkertaisin näyteltävin sanoin. Jos näyttelijä antaa jokaisessa kohtauksessa itselleen jotakin fyysisesti tehtävissä olevaa joka edistää hänen pyrkimuksiään, hänelle ei jää aikaa murehtia vähemmän tärkeitä kysymyksiä, kuten onnistuukohan tämä... 
Taas on ajateltava mikä on ja mikä ei ole kontrolloitavissa. Tunteesi eivät ole kontrolloitavissa. Et voi päättää tuntea jotakin tiettyä tunnetta. Mutta voit toimia siten että se tunne herää.
Näytteleminen on tiettyjen kykyjen ja työkalujen yhteistoimintaa. Jos haluaa saavuttaa nämä kyvyt ja taidot, on otettava ne tavaksi. Kun niistä tulee tapa, tekniikkaan ei enää tarvitse keskittyä. Työtapa jonka kehität työskentelee puolestasi, ja voit toimia vapaasti sen puitteissa. Esimerkiksi jos kehität ääntäsi voit päästä näyttämöllä keskittymään ilmaisuun sen sijaan että keskittyisit saamaan äänesi kuuluville. Kaikki tämä vaatii paljon: 
  1.  Tervettä järkeä, että voit kääntää kaiken näyteltävälle kielelle. 
  2.  Urheutta heittää itsesi näyttämötoimintaan ilman tuhansia estoja. 
  3.  Tahtoa saavuttaa ideaalisi. 
Maailmassa on yhä vaikeampaa kommunikoida yksinkertaisesti ja rehellisesti. Silti yhä tullaan teatteriin. Tietoisuus siitä, että on vielä mahdollista jossain nähdä ihminen joka tekee parhaansa mahdottomien esteiden edessä antautumatta pelkoihin, antaa katsojalle mahdollisuuden tunnistaa nämä piilevät voimat itsessäänkin. Ytimenä on näyttelijän tahto tuoda näyttämölle omat inhimilliset arvonsa ja näyttää toiminta joihin ne johtavat, eikä jotain mahtavaa ja ihmeellistä performancea. Siksi teatteria tarvitaan. Voi olla, että teatteri on ainoa paikka jossa enää voi kuulla totuuden.
Osa 2. Tekniikka

24 joulukuuta, 2014

Todellinen datatyyppi

Muuttujan arvon datatyyppi

Ongelma ja ratkaisu

Kuinka voi selvittää mikä muuttujan arvon todellinen datatyyppi, riippumatta siitä, miten se on muodostettu? Normaalisti tämä on ihmeellisen hankalaa JavaScriptissä, sillä esimerkiksi numeron voi luoda kahdella tavalla: 

var n = 2; 
var N = new Number(2);

Molemmat ovat kakkosia ja molemmilla voi laskea aivan normaalisti, mutta jos niitä vertaa keskenään ne ovatkin ihan eri asioita:

if ( n === N ) { // jne

Saa vastaukseksi false. Miksi? Koska toinen on primitiivi ja toinen on objekti. 

Yksi ratkaisu olisi tietty käyttää löysempää vertailua, joka kääntää molemmat arvot samaan tyyppiin ennen vertailua, mutta silloin samalla luo potentiaalisesti vaarallisen tilanteen, jossa saman numeroarvon omaavaa muuttujaa ovat aidosti erilaisia datatyypiltään. 

if ( n == N ) { // jne

Sama ongelma käänteisenä on Objektin ja Arrayn välillä: jos kysyt typeof sanalla:

var MyArr = [];
var MyObj = {};
if ( ( typeof MyArr ) === ( typeof MyObj) ) { // true !

Molemmat ovat tyyppiä object, vaikka ne pitäisi nimenomaan pystyä helposti erottamaan toisistaan. Ja samaa tyyppiä ovat myös Date, RegExp ja Math jne...

Hämmentävä perusongelma JavaScriptissä on syntynyt pitkän historian aiheuttamana, mutta ratkaisukin on kuitenkin jo olemassa. Ongelma pitää vain tiedostaa: Toisaalta pitäisi erotella sen mukaan mitä datatyyppiä on sisällä, ja unohtaa ulkoinen objektin tyyppi, toisaalta yleensä eri objektityypit (ainakin Array ja Object ) pitäisi erottaa toisistaan selkeästi. Mitä tehdä? 

Vastaan: Pitää luoda funktio, joka kertoo datan oikean tyypin.

Ratkaisu on realDataType -funktio

Se yksinkertaisesti kertoo mitä dataa sille syötetään. Ensin switch tarkistaa, ettei arvo ole jokin tyhjistä (null tai undefined) , sitten katsotaan vain tyypin prototyyppi, ja halutessa (asettamalla toinen parametri true -asentoon) tarkistetaan Number -primitiivi vielä tarkemmin sen mukaan onko kyseessä kokonaisluku vai liukuluku. 

Lisäksi samalla voidaan tarkistaa onko luku käypä numero. Jos arvo on NaN tai se on liian suuri tai pieni, tyypiksi tulee jotain muuta kuin Number, mikä mahdollistaa helpon testin. Tämä on kuitenkin tehty optioksi, jonka saa halutessaan käyttöön true -lisäparametrilla.

var realDataType = function (val, separateNumbers) { /* 'real' datatypes */
 var sn = ( separateNumbers || false); 
 switch (val){
  case undefined: return "undefined";
  break;
  case null: return "null";
  break;
 default:  
var proto=Object.prototype.toString.call(val).match(/^\[object (.+)\]$/)[1];
  if("String" === proto) {
return (/^(0x|0X|#)[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(val))?"Hex":"String"; 
  } // string
  if("Number" === proto){
   if (isNaN(val)) return "NaN"; // epäluku
   if (isFinite(val) || (val < Number.MAX_VALUE && val > -Number.MAX_VALUE)) { //"ok";
    if (sn) {
      return (val % 1 === 0) ? "Integer" : "Float"; 
    }else{
      return "Number";
    }
   } else { // too big or small:
    if ( val > Number.MAX_VALUE) {
     return "Infinity";
    } else if (val < -Number.MAX_VALUE){
     return "-Infinity";
    };
   };
  }else {
    return proto;
  }
 }; //switch end
};

alert( realDataType( Number.MAX_VALUE )); // Number
alert( realDataType( Number.MAX_VALUE, true )); // Integer
alert( realDataType( Number.MAX_VALUE * 2 )); // Infinity
alert( realDataType( "#00FF00" )); // Hex
alert( realDataType( /[a-zA-Z]/ )); // RegExp

Ohjelmoitu nörtin joululahja

Samalla logiikalla lisäsin vielä merkkijonon tunnistamisen hexadesimaaliksi.
Suosittelen: ota tästä kätevän ilmainen työkalu ohjelmoijan pakkiin. Jos tunnet jonakin päivänä olevasi kiitollisuudenvelassa, ota yhteyttä, lähetän tilinumeroni. Ei, olkoon tämä minun joululahjani koko ohjelmoivalle maailmalle.

Olen itse surfannut vuosien varrella melkoisen paljon ilmaisia ohjeita läpi, päätyäkseni tähän ratkaisuun ja muillakin vastaavia ratkaisuja on olemassa jo valmiina, mutta niissä ei sama funktio tutki esim. numeroita näin pitkälle.
Joten olkaapa hyvä ja mukavaa uutta vuotta!
On siinä varmasti vielä kehittämisen varaa, jos keksit, kerro minullekin. 

Float vai Real?

Oli vaikea päättää tätä: Float tarkoittaa liukuluku, oikeastaan se on kuitenkin Real eli reaaliluku, mutta onko se sitten amerikkalaista kulttuuria vai mitä, mutta tuntuu tutummalta käyttää tätä, en tiedä, voin olla väärässäkin.

Tulevaisuuden perusta on tässä

Funktio toimii todennäköisesti myös kaikkiin tulevaisuudessa kehitettäviin uusiin datamuotoihin. Tässä esimerkki, jota en vielä kehitellessä hoksannut ottaa testattavaksi, mutta sieltähän se datatyyppi tulla tupsahtaa. Arguments ei siis ole tyypiltään Array. Vaikka se osittain osaakin samoja temppuja, ei kuitenkaan kaikkia.

var b = function (a){
alert(realDataType(arguments)); // Arguments
}();

02 joulukuuta, 2014

Osa 4 minimi app JavaScript

Minimi JavaScirpt -web-ohjelma (app)

Ensinnäkin mini app tarvitsee kääreen, eli kuoren tai kapselin sisuksilleen. OOP:ssä, eli objekti - orientoidussa ohjelmoinnissa on kyse juuri tästä. Valtaosa objektin älykkyydestä on piilossa paketin sisällä ja 'esiin' jää vain ohjelman hallintaan tarvittava käyttöliittymä.

Tehdään siis (triviaali) pieni objekti, jolla on yksityinen salaisuus muuttujassa ja pari funktiota joilla arvo voidaan asettaa ja lukea. Jotta tieto olisi turvassa, se pitää voida varmistaa (validate), ennen kuin se viedään perille asti. Oikea hyötyohjelma olisi paljon laajempi, mutta nyt ollaan hahmottamassa perusasioita.

var app = (function () { // app & suojattu alue alkaa
var secret,
privateSetter = function (x) {
alert( "tutkitaan:" + x);
secret = x;
return true;
}; // suojattu alue loppuu
return { // julkinen alue alkaa = interface
'get': function get () { // getter
return secret;
},
'set': function set (c){ // setter
return privateSetter (c);
}
    }; // julkinen alue loppuu
} () ) ; // app loppuu

Käydään läpi osa osalta, ulkoa sisään.

Muuttuja, jossa koko ohjelma asuu on nimeltään app.
var app = ();

Seuraavaksi on kääre -funktio. Perässään sulkeet jotka laukaisevat funktion heti.
function (){}()

Julkinen osio: return {}; Palauttaa objektin, joka sisältää pari funktiota, (aksessorit) 
getter ja setter:  function get(){}, function set(){}
Vain nämä kaksi funktiota, eli oikeastaan objektin metodia näkyvät ulospäin koko app -objektista. Kaikki muu on suojattuna (private) muuttujissa, eikä näy app -objektin ulkopuolelle. 

Getter ja setter ovat oikeutettuja (privileged) funktioita. 
Yksityinen PrivateSetter -funktio , eli metodi siirtää annetun arvon julkiselta alueelta suojatulle, varsinaiseen muuttujaan, joten tässä on sopiva tilaisuus tarkistaa syötetyn data oikeellisuus. Ei sentään ihan mitä tahansa suostuta tallentelemaan. Varsinainen validaattori tosin tästä toteutuksesta puuttuu, mutta se tulisi siis tähän kohtaan joskus lähitulevaisuudessa, sitten kun tarkemmin tiedetään millaista syötettävän datan pitäisi esimerkiksi olla
Lähiaikoina näytän täällä esimerkiksi miten arvon datatyyppi tarkistetaan.

Huomaa, että funktion palautusarvona on true. Sen voi vaihtaa tai poistaa. Voisi olla kätevää vaikkapa tietää, mikä oli muuttujan edellinen arvo, jos sen haluaa esimerkiksi perumistoimintoa (cancel) tms. varten laittaa jonnekin muistiin jne. 

Varsinainen testi alkakoon

Jos ohjelma on kasattu ja saatu selaimeen, voidaan aloittaa.
Kirjoita seuraavat testikoodit app -objektin jälkeen:

Ensimmäiset testikoodit, joilla näkee että ohjelma ehkä toimii:
app.set("Ohjelma toiminnassa!"); // tutkitaan:Ohjelma toiminnassa!

Asetetun arvon voi lukea get -funktiolla:
put(app.get()); // Message: Ohjelma toiminnassa!

Var secret on turvallinen muuttuja. Jos yrität lukea sen suoraan muuttujasta se ei onnistu.
Asetetaan ensin virallista tietä uusi arvo muuttujaan:
app.set('ABRAKADABRA'); // tutkitaan:ABRAKADABRA

Yritetään sitten saada argo ulos muuttujasta ilman getter funktiota:
alert("UGH:" + app.secret); 
// UGH:undefined - Ei onnistu ! Piilossa pysyy !

Yritetään sitten ylikirjoittaa vanhan datan päälle oikoreittiä:
app.secret = "foo"; // siitäs sait, senkin...

ja lukea se uudelleen... 
var temp = app.secret = app['secret']; // kumpi tahansa tapa käy
alert("secret:" + temp); // secret:foo 

/* Mitä, foo?! Onnistuiko ylikirjoitus?!  
Itsevarmuus kohoaa ylimitoitetuksi... Kato äiti ! */

... mutta pian:
/* Virallinen get -funktio: */
alert("app.get:"+ app.get()); 
// app.get:ABRAKADABRA   - Eiii... Minua on petetty... paha ei kannata...

Todelisuudessa kävi niin, että alkuperäisen, salaisen ja sisäisen secret -muuttujan lisäksi, lisäsit objektiin uuden this.secret -muuttujan, joka on eri alueella, kuin alkuperäinen.

Koska ne ovat eri nimiavaruudessa ne eivät oikeastaan mahda toisilleen mitään.
Ohjelman sisäiset funktion eivät yleensä yritä viitata oman objektinsa ulkopuolelle, joten sekaannuksiakaan ei pitäisi tulla. Voit tallentaa tänne vaikka puhelinnumerosi ja silti saat odottaa seuraavaa puhelua aika pitkään.

Tällainen on minimi ohjelmanen JavaScriptillä toteutettuna.
Miten sinä parantelisit sitä? Mitä puuttuu? Mitä on liikaa?