Koodataanko pythonilla exe-tiedosto? Eli koodi ei siten ole vapaasti luettavissa? Jos alkaa opetella ohjelmointia, olisiko se paras? Osaan vähän javascriptiä, mutta se näkyy sellaisenaan www-sivulta käyttäjälle. En haluaisi antaa tulevaa ohjelmaani suoraan luettavaksi.
Pythonista lisätietoa
37
492
Vastaukset
- Anonyymi
En koodaa windowsille enää ikinä mitään!
- Anonyymi
MS varastaa koodia! ei kiva!
Olen huomannut sen kun törmäsin mailmalla koodia, jossa oli suomenkieliset kommenttini!
Silloin 100% varma että koodi oli minun ja sitä en julkaissut. - Anonyymi
Minäkin poistin vimpan windowsin!
W11 Päivitys meni siis ihan reisille! Jälleen kerran! Niin aina!
W11 ja Prosulle 100% kuorma kokoajan:
Se rampauttaa koneen ihan totaalisesti!
- Anonyymi
Aika monelle tulkattavalle kielelle löytyy exe-wrapperi ts. ohjelmaan saa käärittyä mukaan tulkin.
Javascriptille on olemassa myös ns. mangler-ohjelmia(sotkijoita?) jotka nimeävät kaiken koodissa olevan uudestaan esim. 2-kirjaimisilla tunnisteilla ja poistavat kaikki turhat välilyönnit/rivinvaihdot. Tällainen koodi on kääntäjälle nopeammin luettavaa, mutta jos sitä joutuisi vähän avaamaan - mitä koodi tekee - niin se ei olisi kovinkaan mukavaa.
Noista exe-wrappereistä vielä sellaista, että osa niistä tuottaa jonkinasteista puoliksi käännettyä koodia eli lähdekoodi ei enää ole mukana sellaisenaan vaan sisäisinä tietorakenteina joita käydään läpi kuin alkuperäistä koodia. - Anonyymi
Nykyään tehdään Docker-image.
- Anonyymi
En nyt sanoisi, että tehdään. Se on yksinkertaisesti liian raskas tapa tehdä levitettäviä ohjelmia. Yleensä kyse on kuitenkin jonkinlaisista työkaluohjelmista, jolloin niitä voi olla mahdollisesti satoja ja pitää pystyä vaikka kutsumaan skriptistä. Tällaisen käytettävyys on helppo tuhota dockerin avulla.
- Anonyymi
Anonyymi kirjoitti:
En nyt sanoisi, että tehdään. Se on yksinkertaisesti liian raskas tapa tehdä levitettäviä ohjelmia. Yleensä kyse on kuitenkin jonkinlaisista työkaluohjelmista, jolloin niitä voi olla mahdollisesti satoja ja pitää pystyä vaikka kutsumaan skriptistä. Tällaisen käytettävyys on helppo tuhota dockerin avulla.
No raskaus on makuasia. Teetkö jonkun oudon alustariippuvaisen exe:n, vai Docker-imagen mikä toimii missä tahansa. Kukin tyylillään.
Esim curlia voi käyttää näin:
docker run --rm curlimages/curl:8.10.0 --version
Tuo näyttää kyseisen curlin versionumeron. Voit käyttää suoraan kuten asennettua curliakin Docker-ympäristössä, tai missä tahasa missä Docker-imaget on käytettävissä. - Anonyymi
Tuo on toki toimiva tapa.
- Anonyymi
Anonyymi kirjoitti:
En nyt sanoisi, että tehdään. Se on yksinkertaisesti liian raskas tapa tehdä levitettäviä ohjelmia. Yleensä kyse on kuitenkin jonkinlaisista työkaluohjelmista, jolloin niitä voi olla mahdollisesti satoja ja pitää pystyä vaikka kutsumaan skriptistä. Tällaisen käytettävyys on helppo tuhota dockerin avulla.
"Se on yksinkertaisesti liian raskas tapa tehdä levitettäviä ohjelmia."
Ei ole, päinvastoin. Todella helppoa vain käynnistää Docker image ja siellä on kaikki ne roinat sisällä.
"Yleensä kyse on kuitenkin jonkinlaisista työkaluohjelmista, jolloin niitä voi olla mahdollisesti satoja ja pitää pystyä vaikka kutsumaan skriptistä. Tällaisen käytettävyys on helppo tuhota dockerin avulla."
Tuohon käy periaatteessa mikä tahansa natiivikkoodiksi kääntävä kieli. Edukseen erottuvat eri tavoilla:
-C (erikoistapaus sillä mahdollistaa turvallisuuskriittiset ohjelmat, omiaan systeemiohjelmoinnissa. Ilman äärimmäistä kurinalaisuutta koodi on täynnä vikoja)
-Haskell (koska Lazy evaluation ja erittäin vaikeata tehdä virheitä, funktionaalinen, erinomainen määrittelykieli)
-Ocaml (kuin Haskell mutta eager evaluation, ei ole niin tiukka, funktionaalinen)
-Rust (imperatiivinen kieli joka jossain määrin pakottaa kirjoittamaan oikein)
-Go (samanaikaisuus, hyvä standardikirjasto, hyvät työkalut/ekosysteemi)
-C++ (käytetään yleensä legacyn kanssa, myös turvallisuuskriittistä käyttöä, saatavilla jänniä kirjastoja, mahdollistaa herkemmin vikojen tekemistä)
-Ada (erikoistapaus sillä mahdollistaa turvallisuuskriittiset ohjelmat, mutta siinä on Go:n tapainen samanaikaisuus) - Anonyymi
Anonyymi kirjoitti:
"Se on yksinkertaisesti liian raskas tapa tehdä levitettäviä ohjelmia."
Ei ole, päinvastoin. Todella helppoa vain käynnistää Docker image ja siellä on kaikki ne roinat sisällä.
"Yleensä kyse on kuitenkin jonkinlaisista työkaluohjelmista, jolloin niitä voi olla mahdollisesti satoja ja pitää pystyä vaikka kutsumaan skriptistä. Tällaisen käytettävyys on helppo tuhota dockerin avulla."
Tuohon käy periaatteessa mikä tahansa natiivikkoodiksi kääntävä kieli. Edukseen erottuvat eri tavoilla:
-C (erikoistapaus sillä mahdollistaa turvallisuuskriittiset ohjelmat, omiaan systeemiohjelmoinnissa. Ilman äärimmäistä kurinalaisuutta koodi on täynnä vikoja)
-Haskell (koska Lazy evaluation ja erittäin vaikeata tehdä virheitä, funktionaalinen, erinomainen määrittelykieli)
-Ocaml (kuin Haskell mutta eager evaluation, ei ole niin tiukka, funktionaalinen)
-Rust (imperatiivinen kieli joka jossain määrin pakottaa kirjoittamaan oikein)
-Go (samanaikaisuus, hyvä standardikirjasto, hyvät työkalut/ekosysteemi)
-C (käytetään yleensä legacyn kanssa, myös turvallisuuskriittistä käyttöä, saatavilla jänniä kirjastoja, mahdollistaa herkemmin vikojen tekemistä)
-Ada (erikoistapaus sillä mahdollistaa turvallisuuskriittiset ohjelmat, mutta siinä on Go:n tapainen samanaikaisuus)Jos työkalun käännetty versio vie esim. 500 tavua, niin docker-image on aivan järjetön idea.. Ei jatkoon!
- Anonyymi
Anonyymi kirjoitti:
Jos työkalun käännetty versio vie esim. 500 tavua, niin docker-image on aivan järjetön idea.. Ei jatkoon!
Heh, no käännä Python-koodista 500 tavun "Hello World" suoritettava "exe"-tiedosto ja julkaise se meille, oi te Suuri Ohjelmointi Guru.
Muahahahahaha. - Anonyymi
Anonyymi kirjoitti:
Jos työkalun käännetty versio vie esim. 500 tavua, niin docker-image on aivan järjetön idea.. Ei jatkoon!
Yleensä tuolla ei ole mitään merkitystä, ei vaikka veisi pari gigaa. Mutta jos haluaa kokoa optimoida niin siihen on sitten eri työkalut.
- Anonyymi
Anonyymi kirjoitti:
Jos työkalun käännetty versio vie esim. 500 tavua, niin docker-image on aivan järjetön idea.. Ei jatkoon!
Samaa mieltä ja windowsiin koodaaminen muutenkin järjetöntä.
- Anonyymi
Anonyymi kirjoitti:
Samaa mieltä ja windowsiin koodaaminen muutenkin järjetöntä.
NIIN ON!
💩 Moi, Mie oon windows.
- Anonyymi
Pythonia on helppo opetella mutta se on tulkattava kieli kuten Javascript ja koodi on vapaasti luettavissa.
Helpoin tapa tehdä asiakaspäässä ajettavaa koodia joka on salattuna, on tehdä se koodi vaikka sillä Javascriptillä niin että se näkyy mutta jos haluaa jonkun osion salata niin käyttää siinä eri kieltä ja kääntää tämän webassemblylle. Sitä salattua osaa voi käyttää sitten Javascriptistä käsin. Tämä johtuu siitä, että harvemmin kaikkea tarvitsee salata. Sopivia kieliä sitä varten, että kirjoittaa salattuja osia ovat esimerkiksi Rust, Go, C ja C++.
Vielä varmempi, ja helpompi tapa salata koodia on se että koodi pysyy palvelimessa. Eli ajetaan palvelimessa ja palvelin vain näyttää näkymää sitten asiakkaalla. Näin toimii vaikka mikä tahansa pankkisovellus ja suurimmaksi osaksi myös tämä Suomi24.
Sitä vaan halutaan vähentää palvelimen kuormitusta ajamalla koodia asiakkaan puolella niin säästyy kuluissa. - Anonyymi
Voit luoda Docker-imagen, joka käyttää Alpine Linuxia ja Pythonia, ja tulostaa tervehdyksen annetulla nimellä, seuraamalla näitä ohjeita.
### 1. Luodaan Python-skripti
Aloitetaan luomalla Python-skripti, joka tulostaa halutun viestin. Luo tiedosto nimeltä `app.py` ja lisää seuraava koodi:
```python
import sys
def main():
if len(sys.argv) != 2:
print("Käyttö: python app.py <nimi>")
sys.exit(1)
nimi = sys.argv[1]
print(f"Morjesta vaan, {nimi}")
if __name__ == "__main__":
main()
```
### 2. Luodaan Dockerfile
Seuraavaksi luodaan `Dockerfile`, joka määrittelee Docker-imagen. Luo tiedosto nimeltä `Dockerfile` ja lisää seuraava sisältö:
```dockerfile
# Käytetään Alpine Linuxia Pythonilla
FROM python:3.11-alpine
# Työhakemisto
WORKDIR /app
# Kopioi Python-skripti
COPY app.py .
# Suorita skripti komennolla
ENTRYPOINT ["python", "app.py"]
```
### 3. Rakennetaan Docker-image
Avaa terminaali ja siirry siihen hakemistoon, jossa `Dockerfile` ja `app.py` sijaitsevat. Rakenna Docker-image komennolla:
```sh
docker build -t alpine-python-greeting .
```
### 4. Suoritetaan Docker-image
Kun image on rakennettu, voit suorittaa sen antamalla nimen argumenttina. Esimerkiksi, ajamalla `docker run` komennoilla:
```sh
docker run --rm alpine-python-greeting <nimi>
```
Korvaa `<nimi>` haluamallasi nimellä, ja konsolissa tulostuu "Morjesta vaan, <nimi>".
### 5. Koodin salaus
Jos haluat estää Python-koodin lukemisen Docker-imageä käytettäessä, voit pakata koodin esimerkiksi `pyarmor`-työkalulla, joka suojaa Python-sovelluksia. Asenna `pyarmor`:
```sh
pip install pyarmor
```
Muokkaa `Dockerfile`-tiedostoa siten, että se käyttää `pyarmor`-komentoa koodin suojaamiseen:
```dockerfile
# Käytetään Alpine Linuxia Pythonilla
FROM python:3.11-alpine
# Asenna pyarmor
RUN apk add --no-cache py3-pip && pip install pyarmor
# Työhakemisto
WORKDIR /app
# Kopioi Python-skripti
COPY app.py .
# Suojaa skripti
RUN pyarmor pack -x " --onefile" app.py
# Suorita skripti
ENTRYPOINT ["python", "dist/app.py"]
```
Nyt, kun rakennat ja suoritat Docker-imagen taas, alkuperäinen `app.py`-tiedosto ei ole enää suoraan luettavissa. Tuotettu `dist/app.py` on pakattu ja suojattu, jolloin alkuperäinen koodi ei ole näkyvissä.
### Huomioita
- `pyarmor` ei täysin estä koodin purkamista, mutta se tekee sen vaikeammaksi.
- Varmista, että käytät Dockeria turvallisesti ja että ympäristösi on suojattu.
### Yhteenveto
Olet nyt luonut Python-pohjaisen Docker-imagen, joka käyttää Alpine Linuxia ja tulostaa tervehdyksen. Koodin suojaamiseen voit käyttää `pyarmor`-työkalua, jotta alkuperäinen koodi ei ole suoraan luettavissa.- Anonyymi
Joo, tuo toimii.
- Anonyymi
Anonyymi kirjoitti:
Joo, tuo toimii.
Ihan sama toimiiko: Nyt ei olla markkinoimassa dockeria - ei jatkoon edelleenkään!
- Anonyymi
Anonyymi kirjoitti:
Joo, tuo toimii.
Mitenkä asetan dockerilla sovelluksen muistirajoitteeksi esim. 500 tavua? Enempää ei saa käyttää.
- Anonyymi
Anonyymi kirjoitti:
Mitenkä asetan dockerilla sovelluksen muistirajoitteeksi esim. 500 tavua? Enempää ei saa käyttää.
Koodataanko pythonilla exe-tiedosto? Eli koodi ei siten ole vapaasti luettavissa? Jos alkaa opetella ohjelmointia, olisiko se paras? Osaan vähän javascriptiä, mutta se näkyy sellaisenaan www-sivulta käyttäjälle. En haluaisi antaa tulevaa ohjelmaani suoraan luettavaksi.
- Anonyymi
Anonyymi kirjoitti:
Mitenkä asetan dockerilla sovelluksen muistirajoitteeksi esim. 500 tavua? Enempää ei saa käyttää.
Eipä taida onnistua millään työkalulla kun johan siellä pinoa varataan enemmän. Python tulkki vie muuten valtavan paljon enemmän muistia.
Muistinkulutuksen optimointiin voi ohjelmointia tehdä C:llä. - Anonyymi
Anonyymi kirjoitti:
Koodataanko pythonilla exe-tiedosto? Eli koodi ei siten ole vapaasti luettavissa? Jos alkaa opetella ohjelmointia, olisiko se paras? Osaan vähän javascriptiä, mutta se näkyy sellaisenaan www-sivulta käyttäjälle. En haluaisi antaa tulevaa ohjelmaani suoraan luettavaksi.
"Koodataanko pythonilla exe-tiedosto? "
Aivan käsittämätön ajatus. Säätää siinä nyt sitten digitaalisten allekirjoitusten kanssa, ihmiset eivät halua tuollaisia ladata ja Microsoft varmaan poistaa Home versioista mahdollisuuden tuohon pian.
"mutta se näkyy sellaisenaan www-sivulta käyttäjälle."
Tekemällä koodi palvelimessa ajettavana on helpoin tapa suojata ohjelma. - Anonyymi
Anonyymi kirjoitti:
"Koodataanko pythonilla exe-tiedosto? "
Aivan käsittämätön ajatus. Säätää siinä nyt sitten digitaalisten allekirjoitusten kanssa, ihmiset eivät halua tuollaisia ladata ja Microsoft varmaan poistaa Home versioista mahdollisuuden tuohon pian.
"mutta se näkyy sellaisenaan www-sivulta käyttäjälle."
Tekemällä koodi palvelimessa ajettavana on helpoin tapa suojata ohjelma.💩 Moi, Mie oon windows.
-------------------------------------------------------- - Anonyymi
Anonyymi kirjoitti:
Eipä taida onnistua millään työkalulla kun johan siellä pinoa varataan enemmän. Python tulkki vie muuten valtavan paljon enemmän muistia.
Muistinkulutuksen optimointiin voi ohjelmointia tehdä C:llä.C:llä ei kannata nykyään tehdä yhtään mitään muistinkäsittelyyn liittyvää. Paljon järkevämpää koodata Rustilla, sillon välttää ne C:n ja C++:n muistinhallintaongelmat ja niillä tehtyjen ohjelmien muistinhallintaan liittyvät bugit.
- Anonyymi
Anonyymi kirjoitti:
C:llä ei kannata nykyään tehdä yhtään mitään muistinkäsittelyyn liittyvää. Paljon järkevämpää koodata Rustilla, sillon välttää ne C:n ja C :n muistinhallintaongelmat ja niillä tehtyjen ohjelmien muistinhallintaan liittyvät bugit.
On totta, että Rustilla on helpompi tehdä ohjelmia missä ei ole muistinhallintabugeja kuin C:llä, C++:lla tai Pascalilla. Se on todellakin usein parempi näitä.
Mutta tuo ei ole totta että C:llä ei kannata tehdä yhtään mitään. Rust ei esimerkiksi sovellu nykyisin kriittisiin kohteisiin joissa virheet voivat tappaa ihmisiä. Siellä on aivan eri vaatimukset. Muistinkäyttöä voi myös optimoida C:llä paremmin jos nyt välttämättä haluaa tehdä ohjelman toimimaan äärimmäisen pienessä muistialueessa niinkuin täällä joku halusi.
Rust korvaa ennemminkin C++:aa mutta C++:ssa taas on vahvuuksia sen ekosysteemissä. Sille on valmiina ylläpidettynä palikoita jotka ratkaisevat paljon sovelluksen ylläpitoon riippuvia asioita joten vaatimuksista riippuen kannattaa usein tehdä C++:lla.
Tietysti jos nyt oikeasti haluaa työkalun millä on vaikeata tehdä bugeja niin Haskell on siihen paras kieli. Mutta on siinäkin ongelmansa. Se on niin tarkka käännösvaiheessa, että siihen on vaikeata integroida mitään palikoita että softan tulisi toimia hyvin eristetysti. Menee muuten vaikeaksi tehdä.
Muistinhallintabugeilta välttyy monilla muillakin kielillä, kuten C#, Dart, Erlang, Go, Ocaml, Java, PHP, Python, Typescript jne.
Eli, mikä on sopivin kieli toteututukseen riippuu täysin vaatimuksista mitä ollaan tekemässä. Jos aloittaja kuvaisi sen ohjelmansa konseptin ja vaatimukset tähän mitä on tekemässä niin voidaan valita paremmin. - Anonyymi
Anonyymi kirjoitti:
C:llä ei kannata nykyään tehdä yhtään mitään muistinkäsittelyyn liittyvää. Paljon järkevämpää koodata Rustilla, sillon välttää ne C:n ja C :n muistinhallintaongelmat ja niillä tehtyjen ohjelmien muistinhallintaan liittyvät bugit.
Rust on sateenkaariväen ohjelma, ei sitä kukaan normaali ihminen käytä!
- Anonyymi
Anonyymi kirjoitti:
Rust on sateenkaariväen ohjelma, ei sitä kukaan normaali ihminen käytä!
Otahan lääkkeet.
- Anonyymi
Anonyymi kirjoitti:
Otahan lääkkeet.
Ota ite.
- Anonyymi
Mun käsittääkseni Python ei tuota exe-tiedostoja tai muitakaan binaareja vaan se on kokonaan tulkattava kieli.
- Anonyymi
Se on, mutta siitä on versioita joilla voi tuottaa binäärejä mutta tässä kohtaa tietenkin kannattaa vähän pakittaa että onko valittu työkalu yleensäkään se mitä halutaan.
Pythonia käytetään testauksessa, viemään koodi palvelimelle yms. tuotantoonvienti automaatio, sillä kirjoitetaan korkean tason koodia ja käskytetään vaikka AI moduuleja. Sillä voi myös protoilla asioita kivasti.
Mutta jos tavoite on komentorivillä käskytettävä pieni työkalu joka ottaa dataa sisään ja vie dataa ulos ja toteutus pitäisi piilottaa niin se on väärä työkalu tähän.
En ymmärrä tätä miksi ihmiset yrittävät kaiken aikaa ottaa jonkun tietyn kielen tai työkalun ja vääntää kaikkea mahdollista sillä. Ei vasaralla ole hyvä sahata lautoja, tai höylätä parkettia. - Anonyymi
💩 Moi, Mie oon windows.
- Anonyymi
Anonyymi kirjoitti:
Se on, mutta siitä on versioita joilla voi tuottaa binäärejä mutta tässä kohtaa tietenkin kannattaa vähän pakittaa että onko valittu työkalu yleensäkään se mitä halutaan.
Pythonia käytetään testauksessa, viemään koodi palvelimelle yms. tuotantoonvienti automaatio, sillä kirjoitetaan korkean tason koodia ja käskytetään vaikka AI moduuleja. Sillä voi myös protoilla asioita kivasti.
Mutta jos tavoite on komentorivillä käskytettävä pieni työkalu joka ottaa dataa sisään ja vie dataa ulos ja toteutus pitäisi piilottaa niin se on väärä työkalu tähän.
En ymmärrä tätä miksi ihmiset yrittävät kaiken aikaa ottaa jonkun tietyn kielen tai työkalun ja vääntää kaikkea mahdollista sillä. Ei vasaralla ole hyvä sahata lautoja, tai höylätä parkettia.Hölynpölyä. Python on yleiskäyttöinen ohjelmointikieli, jolla voi tehdä ihan mitä tahansa mitä millä tahansa muulla yleiskäyttöisellä ohjelmointikielellä kuten C:llä tai C++:lla.
- Anonyymi
Anonyymi kirjoitti:
Hölynpölyä. Python on yleiskäyttöinen ohjelmointikieli, jolla voi tehdä ihan mitä tahansa mitä millä tahansa muulla yleiskäyttöisellä ohjelmointikielellä kuten C:llä tai C :lla.
Voi toki, mutta on aivan eri asia mihin sitä kannattaa käyttää.
Jos tavoitteena on piilottaa toteutus ilman containeria, silloin valitaan kieli joka suunniteltu kääntämään tavukoodiksi tai natiiviksi. On runsaasti vaihtoehtoja.
Tavoitteena jos on minimaalinen muistinkulutus niin silloin valitaan C. Yleensä siinä vaan ei ole mitään järkeä kun muisti ei ole niukkaa muualla kuin mikrokontrollereissa, usein halutaan enemmän suorituskykyä muistinkulutuksen kustannuksella.
Sitä vaan on eri vaihtoehtoja että ensiksi selvitetään mitä oikein halutaan, sitten vasta mietitään siihen sopivin työkalu.
Kaikki höpötys on turhaa niin kauan aikaa kunnes aloittaja kertoo minkälaista sovellusta on oikeasti tekemässä.
- Anonyymi
Python on tulkattava kieli, joten sillä tehtyjä ohjelmia ei käännetä.
- Anonyymi
"pyinstaller" on keino paketoida kaikki yhteen tiedostoon --onefile -vipusella
suorituskyvyn ja jakelun koon takia miettisin kyllä jotain muuta, jos nuo on ongelma
Ketjusta on poistettu 1 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Vakava rikosepäily Seinäjoella
Ilkka ei taaskaan tiedä mitään mutta hesalaiset kertoo: https://www.is.fi/kotimaa/art-2000010959325.html412625Mitä on woketus?
Täälläkin hoetaan usein sanaa "woketus". Mitä se tarkalleen ottaen tarkoittaa? Ilmeisesti sen käyttäjät ymmärtävät sen k3992129Olet saanut kyllä tunnisteita
Itsestäsi ja meistä. Mutta mikä siinä on, ettet kirjoita etkä anna itsestäsi merkkejä. Ellei ole kysymys siitä, mikä ens201932Oletko jo luovuttanut?
Joko olet luovuttanut kaivatun suhteen ja hyväksynyt, että mitään ei tule?1381724Ikääntyvien tilanne Suomessa on järkyttävä - Hoivakotiin ei pääse, vaan joutuu selviytymään yksin
Ikääntyvien tilanne Suomessa on järkyttävä… Hoivakoteihin sijoittamista vältellään, koska hoito on kallista ja hyvinvoin1251623Mies pakko olla rehellinen
Kiinnostuin koska olet tosi komea ja sulla on ihana puheääni. Olen aika pinnallinen sitten kai... 😓 kyllä olet tosi rau151581Kristo Salminen, 52, riisuutui - Paljasti Iso-Börjen tatuoinnit - Somekansan tuomio yksimielinen
Iso-Börje, tuo iso, tatuoitu, yltiöromanttinen ja aika kuuma rikollispomo - vai mitä mieltä sinä olet? Lue lisää ja kat211113Hirvenmaitojuusto
Olin Prisman juustohyllyllä kun vierestä alkoi kuulua kamala paapatus. Siinä oli vanha muori, joka räyhäsi raivokkaasti,01112- 741019
Kerro mulle miksi juuri me
Kohdattiin? Tässä elämässä. Vaikka ollaan edelleen tutut tuntemattomat. Se on omituinen tunne.63925